[systemd-devel] How to run *ctl command using systemd-nspawn

Lennart Poettering lennart at poettering.net
Wed Apr 17 08:11:15 PDT 2013


On Tue, 16.04.13 11:00, Kok, Auke-jan H (auke-jan.h.kok at intel.com) wrote:

> 
> On Tue, Apr 16, 2013 at 12:11 AM, Koen Kooi <koen at dominion.thruhere.net> wrote:
> > Hi,
> >
> > To help with flashing the onboard eMMC of a 100000 boards I'm using systemd-nspawn to run package postinstall scripts that generate UUIDs and some other things and it's working great for that! Every board now has a unique value in /etc/machine-id instead it being empty and systemd randomizing it on startup.
> >
> > What doesn't work however is something like this:
> >
> >         systemd-nspawn -D ${PART2MOUNT} /usr/bin/timedatectl set-timezone Europe/Paris
> >
> > or this:
> >
> >         systemd-nspawn -D ${PART2MOUNT} /usr/bin/hostnamectl set-hostname BeagleBoneBlack
> >
> > I know I can run the lowlevel 'ln -sf <zoneinfo> /etc/timezone' or echo the name into /etc/hostname, but I'd like to use the *ctl commands because they work and have error handling built-in.
> > it looks like I would need -b to get the *ctl commands to work, but -b doesn't support running single commands and exiting.
> >
> > My goal is to be able to drop in a rootfs tarball and change timezone and hostname settings in a config file for the flasher script and avoid generating N different tarballs. For use in the office lab I use something like [1] to generate the hostnames based on board revision and serial number.
> >
> > So, is there a way to *ctl command using systemd-nspawn in a rootfs that wasn't specially prepared (e.g. helper units/targets) for that?
> 
> crazy thought, but, for completeness, there should probably be
> equivalent handling of init=/path/to/alternative/init in
> systemd-nspawn

Hmm? This always worked:

systemd-nspawn -D /my/root/dir /sbin/init
systemd-nspawn -D /my/root/dir /usr/lib/systemd/systemd

If you want nspawn to automatically find the right init, then use
"-b". But without that you do have to specifiy the command that is
supposed to be your PID 1.

Lennart

-- 
Lennart Poettering - Red Hat, Inc.


More information about the systemd-devel mailing list