mirror of
https://git.proxmox.com/git/systemd
synced 2025-05-29 10:01:12 +00:00
611 lines
22 KiB
Groff
611 lines
22 KiB
Groff
'\" t
|
|
.TH "SYSTEMD\-NSPAWN" "1" "" "systemd 219" "systemd-nspawn"
|
|
.\" -----------------------------------------------------------------
|
|
.\" * Define some portability stuff
|
|
.\" -----------------------------------------------------------------
|
|
.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
.\" http://bugs.debian.org/507673
|
|
.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
|
|
.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
.ie \n(.g .ds Aq \(aq
|
|
.el .ds Aq '
|
|
.\" -----------------------------------------------------------------
|
|
.\" * set default formatting
|
|
.\" -----------------------------------------------------------------
|
|
.\" disable hyphenation
|
|
.nh
|
|
.\" disable justification (adjust text to left margin only)
|
|
.ad l
|
|
.\" -----------------------------------------------------------------
|
|
.\" * MAIN CONTENT STARTS HERE *
|
|
.\" -----------------------------------------------------------------
|
|
.SH "NAME"
|
|
systemd-nspawn \- Spawn a namespace container for debugging, testing and building
|
|
.SH "SYNOPSIS"
|
|
.HP \w'\fBsystemd\-nspawn\fR\ 'u
|
|
\fBsystemd\-nspawn\fR [OPTIONS...] [\fICOMMAND\fR\ [ARGS...]]
|
|
.HP \w'\fBsystemd\-nspawn\fR\ 'u
|
|
\fBsystemd\-nspawn\fR \-b [OPTIONS...] [ARGS...]
|
|
.SH "DESCRIPTION"
|
|
.PP
|
|
\fBsystemd\-nspawn\fR
|
|
may be used to run a command or OS in a light\-weight namespace container\&. In many ways it is similar to
|
|
\fBchroot\fR(1), but more powerful since it fully virtualizes the file system hierarchy, as well as the process tree, the various IPC subsystems and the host and domain name\&.
|
|
.PP
|
|
\fBsystemd\-nspawn\fR
|
|
limits access to various kernel interfaces in the container to read\-only, such as
|
|
/sys,
|
|
/proc/sys
|
|
or
|
|
/sys/fs/selinux\&. Network interfaces and the system clock may not be changed from within the container\&. Device nodes may not be created\&. The host system cannot be rebooted and kernel modules may not be loaded from within the container\&.
|
|
.PP
|
|
Note that even though these security precautions are taken
|
|
\fBsystemd\-nspawn\fR
|
|
is not suitable for secure container setups\&. Many of the security features may be circumvented and are hence primarily useful to avoid accidental changes to the host system from the container\&. The intended use of this program is debugging and testing as well as building of packages, distributions and software involved with boot and systems management\&.
|
|
.PP
|
|
In contrast to
|
|
\fBchroot\fR(1)\ \&\fBsystemd\-nspawn\fR
|
|
may be used to boot full Linux\-based operating systems in a container\&.
|
|
.PP
|
|
Use a tool like
|
|
\fBdnf\fR(8),
|
|
\fByum\fR(8),
|
|
\fBdebootstrap\fR(8), or
|
|
\fBpacman\fR(8)
|
|
to set up an OS directory tree suitable as file system hierarchy for
|
|
\fBsystemd\-nspawn\fR
|
|
containers\&.
|
|
.PP
|
|
Note that
|
|
\fBsystemd\-nspawn\fR
|
|
will mount file systems private to the container to
|
|
/dev,
|
|
/run
|
|
and similar\&. These will not be visible outside of the container, and their contents will be lost when the container exits\&.
|
|
.PP
|
|
Note that running two
|
|
\fBsystemd\-nspawn\fR
|
|
containers from the same directory tree will not make processes in them see each other\&. The PID namespace separation of the two containers is complete and the containers will share very few runtime objects except for the underlying file system\&. Use
|
|
\fBmachinectl\fR(1)\*(Aqs
|
|
\fBlogin\fR
|
|
command to request an additional login prompt in a running container\&.
|
|
.PP
|
|
\fBsystemd\-nspawn\fR
|
|
implements the
|
|
\m[blue]\fBContainer Interface\fR\m[]\&\s-2\u[1]\d\s+2
|
|
specification\&.
|
|
.PP
|
|
As a safety check
|
|
\fBsystemd\-nspawn\fR
|
|
will verify the existence of
|
|
/usr/lib/os\-release
|
|
or
|
|
/etc/os\-release
|
|
in the container tree before starting the container (see
|
|
\fBos-release\fR(5))\&. It might be necessary to add this file to the container tree manually if the OS of the container is too old to contain this file out\-of\-the\-box\&.
|
|
.SH "OPTIONS"
|
|
.PP
|
|
If option
|
|
\fB\-b\fR
|
|
is specified, the arguments are used as arguments for the init binary\&. Otherwise,
|
|
\fICOMMAND\fR
|
|
specifies the program to launch in the container, and the remaining arguments are used as arguments for this program\&. If
|
|
\fB\-b\fR
|
|
is not used and no arguments are specifed, a shell is launched in the container\&.
|
|
.PP
|
|
The following options are understood:
|
|
.PP
|
|
\fB\-D\fR, \fB\-\-directory=\fR
|
|
.RS 4
|
|
Directory to use as file system root for the container\&.
|
|
.sp
|
|
If neither
|
|
\fB\-\-directory=\fR, nor
|
|
\fB\-\-image=\fR
|
|
is specified the directory is determined as
|
|
/var/lib/machines/
|
|
suffixed by the machine name as specified with
|
|
\fB\-\-machine=\fR\&. If neither
|
|
\fB\-\-directory=\fR,
|
|
\fB\-\-image=\fR, nor
|
|
\fB\-\-machine=\fR
|
|
are specified, the current directory will be used\&. May not be specified together with
|
|
\fB\-\-image=\fR\&.
|
|
.RE
|
|
.PP
|
|
\fB\-\-template=\fR
|
|
.RS 4
|
|
Directory or
|
|
"btrfs"
|
|
subvolume to use as template for the container\*(Aqs root directory\&. If this is specified and the container\*(Aqs root directory (as configured by
|
|
\fB\-\-directory=\fR) does not yet exist it is created as
|
|
"btrfs"
|
|
subvolume and populated from this template tree\&. Ideally, the specified template path refers to the root of a
|
|
"btrfs"
|
|
subvolume, in which case a simple copy\-on\-write snapshot is taken, and populating the root directory is instant\&. If the specified template path does not refer to the root of a
|
|
"btrfs"
|
|
subvolume (or not even to a
|
|
"btrfs"
|
|
file system at all), the tree is copied, which can be substantially more time\-consuming\&. Note that if this option is used the container\*(Aqs root directory (in contrast to the template directory!) must be located on a
|
|
"btrfs"
|
|
file system, so that the
|
|
"btrfs"
|
|
subvolume may be created\&. May not be specified together with
|
|
\fB\-\-image=\fR
|
|
or
|
|
\fB\-\-ephemeral\fR\&.
|
|
.RE
|
|
.PP
|
|
\fB\-x\fR, \fB\-\-ephemeral\fR
|
|
.RS 4
|
|
If specified, the container is run with a temporary
|
|
"btrfs"
|
|
snapshot of its root directory (as configured with
|
|
\fB\-\-directory=\fR), that is removed immediately when the container terminates\&. This option is only supported if the root file system is
|
|
"btrfs"\&. May not be specified together with
|
|
\fB\-\-image=\fR
|
|
or
|
|
\fB\-\-template=\fR\&.
|
|
.RE
|
|
.PP
|
|
\fB\-i\fR, \fB\-\-image=\fR
|
|
.RS 4
|
|
Disk image to mount the root directory for the container from\&. Takes a path to a regular file or to a block device node\&. The file or block device must contain either:
|
|
.sp
|
|
.RS 4
|
|
.ie n \{\
|
|
\h'-04'\(bu\h'+03'\c
|
|
.\}
|
|
.el \{\
|
|
.sp -1
|
|
.IP \(bu 2.3
|
|
.\}
|
|
An MBR partition table with a single partition of type 0x83 that is marked bootable\&.
|
|
.RE
|
|
.sp
|
|
.RS 4
|
|
.ie n \{\
|
|
\h'-04'\(bu\h'+03'\c
|
|
.\}
|
|
.el \{\
|
|
.sp -1
|
|
.IP \(bu 2.3
|
|
.\}
|
|
A GUID partition table (GPT) with a single partition of type 0fc63daf\-8483\-4772\-8e79\-3d69d8477de4\&.
|
|
.RE
|
|
.sp
|
|
.RS 4
|
|
.ie n \{\
|
|
\h'-04'\(bu\h'+03'\c
|
|
.\}
|
|
.el \{\
|
|
.sp -1
|
|
.IP \(bu 2.3
|
|
.\}
|
|
A GUID partition table (GPT) with a marked root partition which is mounted as the root directory of the container\&. Optionally, GPT images may contain a home and/or a server data partition which are mounted to the appropriate places in the container\&. All these partitions must be identified by the partition types defined by the
|
|
\m[blue]\fBDiscoverable Partitions Specification\fR\m[]\&\s-2\u[2]\d\s+2\&.
|
|
.RE
|
|
.sp
|
|
Any other partitions, such as foreign partitions, swap partitions or EFI system partitions are not mounted\&. May not be specified together with
|
|
\fB\-\-directory=\fR,
|
|
\fB\-\-template=\fR
|
|
or
|
|
\fB\-\-ephemeral\fR\&.
|
|
.RE
|
|
.PP
|
|
\fB\-b\fR, \fB\-\-boot\fR
|
|
.RS 4
|
|
Automatically search for an init binary and invoke it instead of a shell or a user supplied program\&. If this option is used, arguments specified on the command line are used as arguments for the init binary\&. This option may not be combined with
|
|
\fB\-\-share\-system\fR\&.
|
|
.RE
|
|
.PP
|
|
\fB\-u\fR, \fB\-\-user=\fR
|
|
.RS 4
|
|
After transitioning into the container, change to the specified user\-defined in the container\*(Aqs user database\&. Like all other systemd\-nspawn features, this is not a security feature and provides protection against accidental destructive operations only\&.
|
|
.RE
|
|
.PP
|
|
\fB\-M\fR, \fB\-\-machine=\fR
|
|
.RS 4
|
|
Sets the machine name for this container\&. This name may be used to identify this container during its runtime (for example in tools like
|
|
\fBmachinectl\fR(1)
|
|
and similar), and is used to initialize the container\*(Aqs hostname (which the container can choose to override, however)\&. If not specified, the last component of the root directory path of the container is used, possibly suffixed with a random identifier in case
|
|
\fB\-\-ephemeral\fR
|
|
mode is selected\&. If the root directory selected is the host\*(Aqs root directory the host\*(Aqs hostname is used as default instead\&.
|
|
.RE
|
|
.PP
|
|
\fB\-\-uuid=\fR
|
|
.RS 4
|
|
Set the specified UUID for the container\&. The init system will initialize
|
|
/etc/machine\-id
|
|
from this if this file is not set yet\&.
|
|
.RE
|
|
.PP
|
|
\fB\-\-slice=\fR
|
|
.RS 4
|
|
Make the container part of the specified slice, instead of the default
|
|
machine\&.slice\&.
|
|
.RE
|
|
.PP
|
|
\fB\-\-private\-network\fR
|
|
.RS 4
|
|
Disconnect networking of the container from the host\&. This makes all network interfaces unavailable in the container, with the exception of the loopback device and those specified with
|
|
\fB\-\-network\-interface=\fR
|
|
and configured with
|
|
\fB\-\-network\-veth\fR\&. If this option is specified, the CAP_NET_ADMIN capability will be added to the set of capabilities the container retains\&. The latter may be disabled by using
|
|
\fB\-\-drop\-capability=\fR\&.
|
|
.RE
|
|
.PP
|
|
\fB\-\-network\-interface=\fR
|
|
.RS 4
|
|
Assign the specified network interface to the container\&. This will remove the specified interface from the calling namespace and place it in the container\&. When the container terminates, it is moved back to the host namespace\&. Note that
|
|
\fB\-\-network\-interface=\fR
|
|
implies
|
|
\fB\-\-private\-network\fR\&. This option may be used more than once to add multiple network interfaces to the container\&.
|
|
.RE
|
|
.PP
|
|
\fB\-\-network\-macvlan=\fR
|
|
.RS 4
|
|
Create a
|
|
"macvlan"
|
|
interface of the specified Ethernet network interface and add it to the container\&. A
|
|
"macvlan"
|
|
interface is a virtual interface that adds a second MAC address to an existing physical Ethernet link\&. The interface in the container will be named after the interface on the host, prefixed with
|
|
"mv\-"\&. Note that
|
|
\fB\-\-network\-macvlan=\fR
|
|
implies
|
|
\fB\-\-private\-network\fR\&. This option may be used more than once to add multiple network interfaces to the container\&.
|
|
.RE
|
|
.PP
|
|
\fB\-\-network\-ipvlan=\fR
|
|
.RS 4
|
|
Create an
|
|
"ipvlan"
|
|
interface of the specified Ethernet network interface and add it to the container\&. An
|
|
"ipvlan"
|
|
interface is a virtual interface, similar to a
|
|
"macvlan"
|
|
interface, which uses the same MAC address as the underlying interface\&. The interface in the container will be named after the interface on the host, prefixed with
|
|
"iv\-"\&. Note that
|
|
\fB\-\-network\-ipvlan=\fR
|
|
implies
|
|
\fB\-\-private\-network\fR\&. This option may be used more than once to add multiple network interfaces to the container\&.
|
|
.RE
|
|
.PP
|
|
\fB\-n\fR, \fB\-\-network\-veth\fR
|
|
.RS 4
|
|
Create a virtual Ethernet link ("veth") between host and container\&. The host side of the Ethernet link will be available as a network interface named after the container\*(Aqs name (as specified with
|
|
\fB\-\-machine=\fR), prefixed with
|
|
"ve\-"\&. The container side of the Ethernet link will be named
|
|
"host0"\&. Note that
|
|
\fB\-\-network\-veth\fR
|
|
implies
|
|
\fB\-\-private\-network\fR\&.
|
|
.RE
|
|
.PP
|
|
\fB\-\-network\-bridge=\fR
|
|
.RS 4
|
|
Adds the host side of the Ethernet link created with
|
|
\fB\-\-network\-veth\fR
|
|
to the specified bridge\&. Note that
|
|
\fB\-\-network\-bridge=\fR
|
|
implies
|
|
\fB\-\-network\-veth\fR\&. If this option is used, the host side of the Ethernet link will use the
|
|
"vb\-"
|
|
prefix instead of
|
|
"ve\-"\&.
|
|
.RE
|
|
.PP
|
|
\fB\-p\fR, \fB\-\-port=\fR
|
|
.RS 4
|
|
If private networking is enabled, maps an IP port on the host onto an IP port on the container\&. Takes a protocol specifier (either
|
|
"tcp"
|
|
or
|
|
"udp"), separated by a colon from a host port number in the range 1 to 65535, separated by a colon from a container port number in the range from 1 to 65535\&. The protocol specifier and its separating colon may be omitted, in which case
|
|
"tcp"
|
|
is assumed\&. The container port number and its colon may be ommitted, in which case the same port as the host port is implied\&. This option is only supported if private networking is used, such as
|
|
\fB\-\-network\-veth\fR
|
|
or
|
|
\fB\-\-network\-bridge=\fR\&.
|
|
.RE
|
|
.PP
|
|
\fB\-Z\fR, \fB\-\-selinux\-context=\fR
|
|
.RS 4
|
|
Sets the SELinux security context to be used to label processes in the container\&.
|
|
.RE
|
|
.PP
|
|
\fB\-L\fR, \fB\-\-selinux\-apifs\-context=\fR
|
|
.RS 4
|
|
Sets the SELinux security context to be used to label files in the virtual API file systems in the container\&.
|
|
.RE
|
|
.PP
|
|
\fB\-\-capability=\fR
|
|
.RS 4
|
|
List one or more additional capabilities to grant the container\&. Takes a comma\-separated list of capability names, see
|
|
\fBcapabilities\fR(7)
|
|
for more information\&. Note that the following capabilities will be granted in any way: CAP_CHOWN, CAP_DAC_OVERRIDE, CAP_DAC_READ_SEARCH, CAP_FOWNER, CAP_FSETID, CAP_IPC_OWNER, CAP_KILL, CAP_LEASE, CAP_LINUX_IMMUTABLE, CAP_NET_BIND_SERVICE, CAP_NET_BROADCAST, CAP_NET_RAW, CAP_SETGID, CAP_SETFCAP, CAP_SETPCAP, CAP_SETUID, CAP_SYS_ADMIN, CAP_SYS_CHROOT, CAP_SYS_NICE, CAP_SYS_PTRACE, CAP_SYS_TTY_CONFIG, CAP_SYS_RESOURCE, CAP_SYS_BOOT, CAP_AUDIT_WRITE, CAP_AUDIT_CONTROL\&. Also CAP_NET_ADMIN is retained if
|
|
\fB\-\-private\-network\fR
|
|
is specified\&. If the special value
|
|
"all"
|
|
is passed, all capabilities are retained\&.
|
|
.RE
|
|
.PP
|
|
\fB\-\-drop\-capability=\fR
|
|
.RS 4
|
|
Specify one or more additional capabilities to drop for the container\&. This allows running the container with fewer capabilities than the default (see above)\&.
|
|
.RE
|
|
.PP
|
|
\fB\-\-link\-journal=\fR
|
|
.RS 4
|
|
Control whether the container\*(Aqs journal shall be made visible to the host system\&. If enabled, allows viewing the container\*(Aqs journal files from the host (but not vice versa)\&. Takes one of
|
|
"no",
|
|
"host",
|
|
"try\-host",
|
|
"guest",
|
|
"try\-guest",
|
|
"auto"\&. If
|
|
"no", the journal is not linked\&. If
|
|
"host", the journal files are stored on the host file system (beneath
|
|
/var/log/journal/\fImachine\-id\fR) and the subdirectory is bind\-mounted into the container at the same location\&. If
|
|
"guest", the journal files are stored on the guest file system (beneath
|
|
/var/log/journal/\fImachine\-id\fR) and the subdirectory is symlinked into the host at the same location\&.
|
|
"try\-host"
|
|
and
|
|
"try\-guest"
|
|
do the same but do not fail if the host does not have persistent journalling enabled\&. If
|
|
"auto"
|
|
(the default), and the right subdirectory of
|
|
/var/log/journal
|
|
exists, it will be bind mounted into the container\&. If the subdirectory does not exist, no linking is performed\&. Effectively, booting a container once with
|
|
"guest"
|
|
or
|
|
"host"
|
|
will link the journal persistently if further on the default of
|
|
"auto"
|
|
is used\&.
|
|
.RE
|
|
.PP
|
|
\fB\-j\fR
|
|
.RS 4
|
|
Equivalent to
|
|
\fB\-\-link\-journal=try\-guest\fR\&.
|
|
.RE
|
|
.PP
|
|
\fB\-\-read\-only\fR
|
|
.RS 4
|
|
Mount the root file system read\-only for the container\&.
|
|
.RE
|
|
.PP
|
|
\fB\-\-bind=\fR, \fB\-\-bind\-ro=\fR
|
|
.RS 4
|
|
Bind mount a file or directory from the host into the container\&. Either takes a path argument \-\- in which case the specified path will be mounted from the host to the same path in the container \-\-, or a colon\-separated pair of paths \-\- in which case the first specified path is the source in the host, and the second path is the destination in the container\&. The
|
|
\fB\-\-bind\-ro=\fR
|
|
option creates read\-only bind mounts\&.
|
|
.RE
|
|
.PP
|
|
\fB\-\-tmpfs=\fR
|
|
.RS 4
|
|
Mount a tmpfs file system into the container\&. Takes a single absolute path argument that specifies where to mount the tmpfs instance to (in which case the directory access mode will be chosen as 0755, owned by root/root), or optionally a colon\-separated pair of path and mount option string, that is used for mounting (in which case the kernel default for access mode and owner will be chosen, unless otherwise specified)\&. This option is particularly useful for mounting directories such as
|
|
/var
|
|
as tmpfs, to allow state\-less systems, in particular when combined with
|
|
\fB\-\-read\-only\fR\&.
|
|
.RE
|
|
.PP
|
|
\fB\-\-setenv=\fR
|
|
.RS 4
|
|
Specifies an environment variable assignment to pass to the init process in the container, in the format
|
|
"NAME=VALUE"\&. This may be used to override the default variables or to set additional variables\&. This parameter may be used more than once\&.
|
|
.RE
|
|
.PP
|
|
\fB\-\-share\-system\fR
|
|
.RS 4
|
|
Allows the container to share certain system facilities with the host\&. More specifically, this turns off PID namespacing, UTS namespacing and IPC namespacing, and thus allows the guest to see and interact more easily with processes outside of the container\&. Note that using this option makes it impossible to start up a full Operating System in the container, as an init system cannot operate in this mode\&. It is only useful to run specific programs or applications this way, without involving an init system in the container\&. This option implies
|
|
\fB\-\-register=no\fR\&. This option may not be combined with
|
|
\fB\-\-boot\fR\&.
|
|
.RE
|
|
.PP
|
|
\fB\-\-register=\fR
|
|
.RS 4
|
|
Controls whether the container is registered with
|
|
\fBsystemd-machined\fR(8)\&. Takes a boolean argument, defaults to
|
|
"yes"\&. This option should be enabled when the container runs a full Operating System (more specifically: an init system), and is useful to ensure that the container is accessible via
|
|
\fBmachinectl\fR(1)
|
|
and shown by tools such as
|
|
\fBps\fR(1)\&. If the container does not run an init system, it is recommended to set this option to
|
|
"no"\&. Note that
|
|
\fB\-\-share\-system\fR
|
|
implies
|
|
\fB\-\-register=no\fR\&.
|
|
.RE
|
|
.PP
|
|
\fB\-\-keep\-unit\fR
|
|
.RS 4
|
|
Instead of creating a transient scope unit to run the container in, simply register the service or scope unit
|
|
\fBsystemd\-nspawn\fR
|
|
has been invoked in with
|
|
\fBsystemd-machined\fR(8)\&. This has no effect if
|
|
\fB\-\-register=no\fR
|
|
is used\&. This switch should be used if
|
|
\fBsystemd\-nspawn\fR
|
|
is invoked from within a service unit, and the service unit\*(Aqs sole purpose is to run a single
|
|
\fBsystemd\-nspawn\fR
|
|
container\&. This option is not available if run from a user session\&.
|
|
.RE
|
|
.PP
|
|
\fB\-\-personality=\fR
|
|
.RS 4
|
|
Control the architecture ("personality") reported by
|
|
\fBuname\fR(2)
|
|
in the container\&. Currently, only
|
|
"x86"
|
|
and
|
|
"x86\-64"
|
|
are supported\&. This is useful when running a 32\-bit container on a 64\-bit host\&. If this setting is not used, the personality reported in the container is the same as the one reported on the host\&.
|
|
.RE
|
|
.PP
|
|
\fB\-q\fR, \fB\-\-quiet\fR
|
|
.RS 4
|
|
Turns off any status output by the tool itself\&. When this switch is used, the only output from nspawn will be the console output of the container OS itself\&.
|
|
.RE
|
|
.PP
|
|
\fB\-\-volatile\fR\fI=MODE\fR
|
|
.RS 4
|
|
Boots the container in volatile mode\&. When no mode parameter is passed or when mode is specified as
|
|
"yes"
|
|
full volatile mode is enabled\&. This means the root directory is mounted as mostly unpopulated
|
|
"tmpfs"
|
|
instance, and
|
|
/usr
|
|
from the OS tree is mounted into it, read\-only (the system thus starts up with read\-only OS resources, but pristine state and configuration, any changes to the either are lost on shutdown)\&. When the mode parameter is specified as
|
|
"state"
|
|
the OS tree is mounted read\-only, but
|
|
/var
|
|
is mounted as
|
|
"tmpfs"
|
|
instance into it (the system thus starts up with read\-only OS resources and configuration, but pristine state, any changes to the latter are lost on shutdown)\&. When the mode parameter is specified as
|
|
"no"
|
|
(the default) the whole OS tree is made available writable\&.
|
|
.sp
|
|
Note that setting this to
|
|
"yes"
|
|
or
|
|
"state"
|
|
will only work correctly with operating systems in the container that can boot up with only
|
|
/usr
|
|
mounted, and are able to populate
|
|
/var
|
|
automatically, as needed\&.
|
|
.RE
|
|
.PP
|
|
\fB\-h\fR, \fB\-\-help\fR
|
|
.RS 4
|
|
Print a short help text and exit\&.
|
|
.RE
|
|
.PP
|
|
\fB\-\-version\fR
|
|
.RS 4
|
|
Print a short version string and exit\&.
|
|
.RE
|
|
.SH "EXAMPLES"
|
|
.PP
|
|
\fBExample\ \&1.\ \&Download a Fedora image and start a shell in it\fR
|
|
.sp
|
|
.if n \{\
|
|
.RS 4
|
|
.\}
|
|
.nf
|
|
# machinectl pull\-raw \-\-verify=no http://ftp\&.halifax\&.rwth\-aachen\&.de/fedora/linux/releases/21/Cloud/Images/x86_64/Fedora\-Cloud\-Base\-20141203\-21\&.x86_64\&.raw\&.xz
|
|
# systemd\-nspawn \-M Fedora\-Cloud\-Base\-20141203\-21
|
|
.fi
|
|
.if n \{\
|
|
.RE
|
|
.\}
|
|
.PP
|
|
This downloads an image using
|
|
\fBmachinectl\fR(1)
|
|
and opens a shell in it\&.
|
|
.PP
|
|
\fBExample\ \&2.\ \&Build and boot a minimal Fedora distribution in a container\fR
|
|
.sp
|
|
.if n \{\
|
|
.RS 4
|
|
.\}
|
|
.nf
|
|
# dnf \-y \-\-releasever=21 \-\-nogpg \-\-installroot=/srv/mycontainer \-\-disablerepo=\*(Aq*\*(Aq \-\-enablerepo=fedora install systemd passwd dnf fedora\-release vim\-minimal
|
|
# systemd\-nspawn \-bD /srv/mycontainer
|
|
.fi
|
|
.if n \{\
|
|
.RE
|
|
.\}
|
|
.PP
|
|
This installs a minimal Fedora distribution into the directory
|
|
/srv/mycontainer/
|
|
and then boots an OS in a namespace container in it\&.
|
|
.PP
|
|
\fBExample\ \&3.\ \&Spawn a shell in a container of a minimal Debian unstable distribution\fR
|
|
.sp
|
|
.if n \{\
|
|
.RS 4
|
|
.\}
|
|
.nf
|
|
# debootstrap \-\-arch=amd64 unstable ~/debian\-tree/
|
|
# systemd\-nspawn \-D ~/debian\-tree/
|
|
.fi
|
|
.if n \{\
|
|
.RE
|
|
.\}
|
|
.PP
|
|
This installs a minimal Debian unstable distribution into the directory
|
|
~/debian\-tree/
|
|
and then spawns a shell in a namespace container in it\&.
|
|
.PP
|
|
\fBExample\ \&4.\ \&Boot a minimal Arch Linux distribution in a container\fR
|
|
.sp
|
|
.if n \{\
|
|
.RS 4
|
|
.\}
|
|
.nf
|
|
# pacstrap \-c \-d ~/arch\-tree/ base
|
|
# systemd\-nspawn \-bD ~/arch\-tree/
|
|
.fi
|
|
.if n \{\
|
|
.RE
|
|
.\}
|
|
.PP
|
|
This installs a mimimal Arch Linux distribution into the directory
|
|
~/arch\-tree/
|
|
and then boots an OS in a namespace container in it\&.
|
|
.PP
|
|
\fBExample\ \&5.\ \&Boot into an ephemeral "btrfs" snapshot of the host system\fR
|
|
.sp
|
|
.if n \{\
|
|
.RS 4
|
|
.\}
|
|
.nf
|
|
# systemd\-nspawn \-D / \-xb
|
|
.fi
|
|
.if n \{\
|
|
.RE
|
|
.\}
|
|
.PP
|
|
This runs a copy of the host system in a
|
|
"btrfs"
|
|
snapshot which is removed immediately when the container exits\&. All file system changes made during runtime will be lost on shutdown, hence\&.
|
|
.PP
|
|
\fBExample\ \&6.\ \&Run a container with SELinux sandbox security contexts\fR
|
|
.sp
|
|
.if n \{\
|
|
.RS 4
|
|
.\}
|
|
.nf
|
|
# chcon system_u:object_r:svirt_sandbox_file_t:s0:c0,c1 \-R /srv/container
|
|
# systemd\-nspawn \-L system_u:object_r:svirt_sandbox_file_t:s0:c0,c1 \-Z system_u:system_r:svirt_lxc_net_t:s0:c0,c1 \-D /srv/container /bin/sh
|
|
.fi
|
|
.if n \{\
|
|
.RE
|
|
.\}
|
|
.SH "EXIT STATUS"
|
|
.PP
|
|
The exit code of the program executed in the container is returned\&.
|
|
.SH "SEE ALSO"
|
|
.PP
|
|
\fBsystemd\fR(1),
|
|
\fBchroot\fR(1),
|
|
\fBdnf\fR(8),
|
|
\fByum\fR(8),
|
|
\fBdebootstrap\fR(8),
|
|
\fBpacman\fR(8),
|
|
\fBsystemd.slice\fR(5),
|
|
\fBmachinectl\fR(1),
|
|
\fBbtrfs\fR(8)
|
|
.SH "NOTES"
|
|
.IP " 1." 4
|
|
Container Interface
|
|
.RS 4
|
|
\%http://www.freedesktop.org/wiki/Software/systemd/ContainerInterface
|
|
.RE
|
|
.IP " 2." 4
|
|
Discoverable Partitions Specification
|
|
.RS 4
|
|
\%http://www.freedesktop.org/wiki/Specifications/DiscoverablePartitionsSpec/
|
|
.RE
|