]> git.ipfire.org Git - thirdparty/systemd.git/blame - man/systemd.nspawn.xml
nspawn: split out overlayfs argument parsing into a function of its own
[thirdparty/systemd.git] / man / systemd.nspawn.xml
CommitLineData
f757855e
LP
1<?xml version='1.0'?> <!--*- Mode: nxml; nxml-child-indent: 2; indent-tabs-mode: nil -*-->
2<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN"
3 "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd" [
4<!ENTITY % entities SYSTEM "custom-entities.ent" >
5%entities;
6]>
7
8<!--
9 This file is part of systemd.
10
11 Copyright 2015 Lennart Poettering
12
13 systemd is free software; you can redistribute it and/or modify it
14 under the terms of the GNU Lesser General Public License as published by
15 the Free Software Foundation; either version 2.1 of the License, or
16 (at your option) any later version.
17
18 systemd is distributed in the hope that it will be useful, but
19 WITHOUT ANY WARRANTY; without even the implied warranty of
20 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
21 Lesser General Public License for more details.
22
23 You should have received a copy of the GNU Lesser General Public License
24 along with systemd; If not, see <http://www.gnu.org/licenses/>.
25-->
26
27<refentry id="systemd.nspawn">
28
29 <refentryinfo>
30 <title>systemd.nspawn</title>
31 <productname>systemd</productname>
32
33 <authorgroup>
34 <author>
35 <contrib>Developer</contrib>
36 <firstname>Lennart</firstname>
37 <surname>Poettering</surname>
38 <email>lennart@poettering.net</email>
39 </author>
40 </authorgroup>
41 </refentryinfo>
42
43 <refmeta>
44 <refentrytitle>systemd.nspawn</refentrytitle>
45 <manvolnum>5</manvolnum>
46 </refmeta>
47
48 <refnamediv>
49 <refname>systemd.nspawn</refname>
50 <refpurpose>Container settings</refpurpose>
51 </refnamediv>
52
53 <refsynopsisdiv>
54 <para><filename>/etc/systemd/nspawn/<replaceable>machine</replaceable>.nspawn</filename></para>
55 <para><filename>/run/systemd/nspawn/<replaceable>machine</replaceable>.nspawn</filename></para>
56 <para><filename>/var/lib/machines/<replaceable>machine</replaceable>.nspawn</filename></para>
57 </refsynopsisdiv>
58
59 <refsect1>
60 <title>Description</title>
61
62 <para>An nspawn container settings file (suffix
63 <filename>.nspawn</filename>) encodes additional runtime
64 information about a local container, and is searched, read and
65 used by
66 <citerefentry><refentrytitle>systemd-nspawn</refentrytitle><manvolnum>1</manvolnum></citerefentry>
67 when starting a container. Files of this type are named after the
68 containers they define settings for. They are optional, and only
69 required for containers whose execution environment shall differ
70 from the defaults. Files of this type mostly contain settings that
71 may also be set on the <command>systemd-nspawn</command> command
72 line, and make it easier to persistently attach specific settings
73 to specific containers. The syntax of these files is inspired by
74 <filename>.desktop</filename> files following the <ulink
75 url="http://standards.freedesktop.org/desktop-entry-spec/latest/">XDG
a8eaaee7 76 Desktop Entry Specification</ulink>, which in turn are inspired by
f757855e
LP
77 Microsoft Windows <filename>.ini</filename> files.</para>
78
79 <para>Boolean arguments used in these settings files can be
b938cb90 80 written in various formats. For positive settings, the strings
f757855e
LP
81 <option>1</option>, <option>yes</option>, <option>true</option>
82 and <option>on</option> are equivalent. For negative settings, the
83 strings <option>0</option>, <option>no</option>,
84 <option>false</option> and <option>off</option> are
85 equivalent.</para>
86
87 <para>Empty lines and lines starting with # or ; are
88 ignored. This may be used for commenting. Lines ending
89 in a backslash are concatenated with the following
90 line while reading and the backslash is replaced by a
91 space character. This may be used to wrap long lines.</para>
92
93 </refsect1>
94
95 <refsect1>
96 <title><filename>.nspawn</filename> File Discovery</title>
97
98 <para>Files are searched by appending the
99 <filename>.nspawn</filename> suffix to the machine name of the
100 container, as specified with the <option>--machine=</option>
101 switch of <command>systemd-nspawn</command>, or derived from the
102 directory or image file name. This file is first searched in
103 <filename>/etc/systemd/nspawn/</filename> and
104 <filename>/run/systemd/nspawn/</filename>. If found in these
b938cb90 105 directories, its settings are read and all of them take full effect
4f76ef04 106 (but are possibly overridden by corresponding command line
b938cb90 107 arguments). If not found, the file will then be searched next to
f757855e 108 the image file or in the immediate parent of the root directory of
b938cb90 109 the container. If the file is found there, only a subset of the
f757855e
LP
110 settings will take effect however. All settings that possibly
111 elevate privileges or grant additional access to resources of the
112 host (such as files or directories) are ignored. To which options
113 this applies is documented below.</para>
114
a8eaaee7 115 <para>Persistent settings files created and maintained by the
f757855e
LP
116 administrator (and thus trusted) should be placed in
117 <filename>/etc/systemd/nspawn/</filename>, while automatically
118 downloaded (and thus potentially untrusted) settings files are
119 placed in <filename>/var/lib/machines/</filename> instead (next to
120 the container images), where their security impact is limited. In
121 order to add privileged settings to <filename>.nspawn</filename>
b938cb90 122 files acquired from the image vendor, it is recommended to copy the
f757855e
LP
123 settings files into <filename>/etc/systemd/nspawn/</filename> and
124 edit them there, so that the privileged options become
a8eaaee7 125 available. The precise algorithm for how the files are searched and
f757855e
LP
126 interpreted may be configured with
127 <command>systemd-nspawn</command>'s <option>--settings=</option>
128 switch, see
129 <citerefentry><refentrytitle>systemd-nspawn</refentrytitle><manvolnum>1</manvolnum></citerefentry>
130 for details.</para>
131 </refsect1>
132
133 <refsect1>
134 <title>[Exec] Section Options</title>
135
136 <para>Settings files may include an <literal>[Exec]</literal>
137 section, which carries various execution parameters:</para>
138
139 <variablelist>
140
141 <varlistentry>
142 <term><varname>Boot=</varname></term>
143
7732f92b
LP
144 <listitem><para>Takes a boolean argument, which defaults to off. If enabled, <command>systemd-nspawn</command>
145 will automatically search for an <filename>init</filename> executable and invoke it. In this case, the
146 specified parameters using <varname>Parameters=</varname> are passed as additional arguments to the
147 <filename>init</filename> process. This setting corresponds to the <option>--boot</option> switch on the
148 <command>systemd-nspawn</command> command line. This option may not be combined with
b09c0bba
LP
149 <varname>ProcessTwo=yes</varname>. This option is the default if the
150 <filename>systemd-nspawn@.service</filename> template unit file is used.</para></listitem>
7732f92b
LP
151 </varlistentry>
152
153 <varlistentry>
154 <term><varname>ProcessTwo=</varname></term>
155
156 <listitem><para>Takes a boolean argument, which defaults to off. If enabled, the specified program is run as
157 PID 2. A stub init process is run as PID 1. This setting corresponds to the <option>--as-pid2</option> switch
158 on the <command>systemd-nspawn</command> command line. This option may not be combined with
159 <varname>Boot=yes</varname>.</para></listitem>
f757855e
LP
160 </varlistentry>
161
162 <varlistentry>
163 <term><varname>Parameters=</varname></term>
164
b938cb90 165 <listitem><para>Takes a space-separated list of
f757855e
LP
166 arguments. This is either a command line, beginning with the
167 binary name to execute, or – if <varname>Boot=</varname> is
168 enabled – the list of arguments to pass to the init
169 process. This setting corresponds to the command line
170 parameters passed on the <command>systemd-nspawn</command>
171 command line.</para></listitem>
172 </varlistentry>
173
174 <varlistentry>
175 <term><varname>Environment=</varname></term>
176
177 <listitem><para>Takes an environment variable assignment
178 consisting of key and value, separated by
179 <literal>=</literal>. Sets an environment variable for the
180 main process invoked in the container. This setting may be
181 used multiple times to set multiple environment variables. It
182 corresponds to the <option>--setenv=</option> command line
183 switch.</para></listitem>
184 </varlistentry>
185
186 <varlistentry>
187 <term><varname>User=</varname></term>
188
189 <listitem><para>Takes a UNIX user name. Specifies the user
190 name to invoke the main process of the container as. This user
191 must be known in the container's user database. This
192 corresponds to the <option>--user=</option> command line
5f932eb9
LP
193 switch.</para></listitem>
194 </varlistentry>
195
196 <varlistentry>
197 <term><varname>WorkingDirectory=</varname></term>
198
199 <listitem><para>Selects the working directory for the process invoked in the container. Expects an absolute
200 path in the container's file system namespace. This corresponds to the <option>--chdir=</option> command line
f757855e
LP
201 switch.</para></listitem>
202 </varlistentry>
203
204 <varlistentry>
205 <term><varname>Capability=</varname></term>
206 <term><varname>DropCapability=</varname></term>
207
b938cb90 208 <listitem><para>Takes a space-separated list of Linux process
f757855e 209 capabilities (see
524f3e5c 210 <citerefentry project='man-pages'><refentrytitle>capabilities</refentrytitle><manvolnum>7</manvolnum></citerefentry>
f757855e
LP
211 for details). The <varname>Capability=</varname> setting
212 specifies additional capabilities to pass on top of the
4f76ef04 213 default set of capabilities. The
f757855e
LP
214 <varname>DropCapability=</varname> setting specifies
215 capabilities to drop from the default set. These settings
216 correspond to the <option>--capability=</option> and
217 <option>--drop-capability=</option> command line
218 switches. Note that <varname>Capability=</varname> is a
219 privileged setting, and only takes effect in
220 <filename>.nspawn</filename> files in
221 <filename>/etc/systemd/nspawn/</filename> and
222 <filename>/run/system/nspawn/</filename> (see above). On the
b938cb90 223 other hand, <varname>DropCapability=</varname> takes effect in
f757855e
LP
224 all cases.</para></listitem>
225 </varlistentry>
226
b3969f73 227 <varlistentry>
c9648aa6 228 <term><varname>KillSignal=</varname></term>
b3969f73
PA
229
230 <listitem><para>Specify the process signal to send to the
231 container's PID 1 when nspawn itself receives SIGTERM, in
232 order to trigger an orderly shutdown of the container.
233 Defaults to SIGRTMIN+3 if <option>Boot=</option> is used
234 (on systemd-compatible init systems SIGRTMIN+3 triggers an
235 orderly shutdown). For a list of valid signals, see
236 <citerefentry project='man-pages'><refentrytitle>signal</refentrytitle><manvolnum>7</manvolnum></citerefentry>.</para></listitem>
237 </varlistentry>
238
f757855e
LP
239 <varlistentry>
240 <term><varname>Personality=</varname></term>
241
242 <listitem><para>Configures the kernel personality for the
243 container. This is equivalent to the
244 <option>--personality=</option> switch.</para></listitem>
245 </varlistentry>
246
247 <varlistentry>
248 <term><varname>MachineID=</varname></term>
249
b938cb90 250 <listitem><para>Configures the 128-bit machine ID (UUID) to pass to
f757855e
LP
251 the container. This is equivalent to the
252 <option>--uuid=</option> command line switch. This option is
253 privileged (see above). </para></listitem>
254 </varlistentry>
d2e5535f
LP
255
256 <varlistentry>
257 <term><varname>PrivateUsers=</varname></term>
258
259 <listitem><para>Configures support for usernamespacing. This is equivalent to the
260 <option>--private-users=</option> command line switch, and takes the same options. This option is privileged
b09c0bba
LP
261 (see above). This option is the default if the <filename>systemd-nspawn@.service</filename> template unit file
262 is used.</para></listitem>
d2e5535f 263 </varlistentry>
9c1e04d0
AP
264
265 <varlistentry>
266 <term><varname>NotifyReady=</varname></term>
267
268 <listitem><para>Configures support for notifications from the container's init process.
269 This is equivalent to use <option>--notify-ready=</option> command line switch,
270 and takes the same options. See <citerefentry><refentrytitle>systemd-nspawn</refentrytitle><manvolnum>1</manvolnum></citerefentry>
271 for details about the specific options supported.</para></listitem>
272 </varlistentry>
f757855e
LP
273 </variablelist>
274 </refsect1>
275
276 <refsect1>
277 <title>[Files] Section Options</title>
278
279 <para>Settings files may include a <literal>[Files]</literal>
280 section, which carries various parameters configuring the file
281 system of the container:</para>
282
283 <variablelist>
284
285 <varlistentry>
286 <term><varname>ReadOnly=</varname></term>
287
a8eaaee7 288 <listitem><para>Takes a boolean argument, which defaults to off. If
b938cb90 289 specified, the container will be run with a read-only file
f757855e
LP
290 system. This setting corresponds to the
291 <option>--read-only</option> command line
292 switch.</para></listitem>
293 </varlistentry>
294
295 <varlistentry>
296 <term><varname>Volatile=</varname></term>
297
298 <listitem><para>Takes a boolean argument, or the special value
299 <literal>state</literal>. This configures whether to run the
300 container with volatile state and/or configuration. This
301 option is equivalent to <option>--volatile=</option>, see
302 <citerefentry><refentrytitle>systemd-nspawn</refentrytitle><manvolnum>1</manvolnum></citerefentry>
303 for details about the specific options
304 supported.</para></listitem>
305 </varlistentry>
306
307 <varlistentry>
308 <term><varname>Bind=</varname></term>
309 <term><varname>BindReadOnly=</varname></term>
310
311 <listitem><para>Adds a bind mount from the host into the
312 container. Takes a single path, a pair of two paths separated
313 by a colon, or a triplet of two paths plus an option string
314 separated by colons. This option may be used multiple times to
315 configure multiple bind mounts. This option is equivalent to
316 the command line switches <option>--bind=</option> and
317 <option>--bind-ro=</option>, see
318 <citerefentry><refentrytitle>systemd-nspawn</refentrytitle><manvolnum>1</manvolnum></citerefentry>
319 for details about the specific options supported. This setting
320 is privileged (see above).</para></listitem>
321 </varlistentry>
322
323 <varlistentry>
324 <term><varname>TemporaryFileSystem=</varname></term>
325
326 <listitem><para>Adds a <literal>tmpfs</literal> mount to the
327 container. Takes a path or a pair of path and option string,
4f76ef04 328 separated by a colon. This option may be used multiple times to
f757855e
LP
329 configure multiple <literal>tmpfs</literal> mounts. This
330 option is equivalent to the command line switch
331 <option>--tmpfs=</option>, see
332 <citerefentry><refentrytitle>systemd-nspawn</refentrytitle><manvolnum>1</manvolnum></citerefentry>
333 for details about the specific options supported. This setting
334 is privileged (see above).</para></listitem>
335 </varlistentry>
d2e5535f
LP
336
337 <varlistentry>
338 <term><varname>PrivateUsersChown=</varname></term>
339
340 <listitem><para>Configures whether the ownership of the files and directories in the container tree shall be
341 adjusted to the UID/GID range used, if necessary and user namespacing is enabled. This is equivalent to the
342 <option>--private-users-chown</option> command line switch. This option is privileged (see
343 above). </para></listitem>
344 </varlistentry>
345
f757855e
LP
346 </variablelist>
347 </refsect1>
348
349 <refsect1>
350 <title>[Network] Section Options</title>
351
352 <para>Settings files may include a <literal>[Network]</literal>
353 section, which carries various parameters configuring the network
354 connectivity of the container:</para>
355
356 <variablelist>
357
358 <varlistentry>
359 <term><varname>Private=</varname></term>
360
a8eaaee7 361 <listitem><para>Takes a boolean argument, which defaults to off. If
b938cb90 362 enabled, the container will run in its own network namespace
f757855e
LP
363 and not share network interfaces and configuration with the
364 host. This setting corresponds to the
365 <option>--private-network</option> command line
366 switch.</para></listitem>
367 </varlistentry>
368
369 <varlistentry>
370 <term><varname>VirtualEthernet=</varname></term>
371
b09c0bba
LP
372 <listitem><para>Takes a boolean argument. Configures whether to create a virtual Ethernet connection
373 (<literal>veth</literal>) between host and the container. This setting implies
374 <varname>Private=yes</varname>. This setting corresponds to the <option>--network-veth</option> command line
375 switch. This option is privileged (see above). This option is the default if the
376 <filename>systemd-nspawn@.service</filename> template unit file is used.</para></listitem>
f757855e
LP
377 </varlistentry>
378
f6d6bad1
LP
379 <varlistentry>
380 <term><varname>VirtualEthernetExtra=</varname></term>
381
382 <listitem><para>Takes a colon-separated pair of interface
383 names. Configures an additional virtual Ethernet connection
384 (<literal>veth</literal>) between host and the container. The
385 first specified name is the interface name on the host, the
386 second the interface name in the container. The latter may be
387 omitted in which case it is set to the same name as the host
388 side interface. This setting implies
389 <varname>Private=yes</varname>. This setting corresponds to
390 the <option>--network-veth-extra=</option> command line
391 switch, and maybe be used multiple times. It is independent of
392 <varname>VirtualEthernet=</varname>. This option is privileged
393 (see above).</para></listitem>
394 </varlistentry>
395
f757855e
LP
396 <varlistentry>
397 <term><varname>Interface=</varname></term>
398
b938cb90 399 <listitem><para>Takes a space-separated list of interfaces to
f757855e
LP
400 add to the container. This option corresponds to the
401 <option>--network-interface=</option> command line switch and
402 implies <varname>Private=yes</varname>. This option is
403 privileged (see above).</para></listitem>
404 </varlistentry>
405
406 <varlistentry>
407 <term><varname>MACVLAN=</varname></term>
408 <term><varname>IPVLAN=</varname></term>
409
b938cb90 410 <listitem><para>Takes a space-separated list of interfaces to
f757855e
LP
411 add MACLVAN or IPVLAN interfaces to, which are then added to
412 the container. These options correspond to the
413 <option>--network-macvlan=</option> and
414 <option>--network-ipvlan=</option> command line switches and
415 imply <varname>Private=yes</varname>. These options are
416 privileged (see above).</para></listitem>
417 </varlistentry>
418
419 <varlistentry>
420 <term><varname>Bridge=</varname></term>
421
422 <listitem><para>Takes an interface name. This setting implies
423 <varname>VirtualEthernet=yes</varname> and
424 <varname>Private=yes</varname> and has the effect that the
425 host side of the created virtual Ethernet link is connected to
426 the specified bridge interface. This option corresponds to the
427 <option>--network-bridge=</option> command line switch. This
428 option is privileged (see above).</para></listitem>
429 </varlistentry>
430
938d2579
LP
431 <varlistentry>
432 <term><varname>Zone=</varname></term>
433
434 <listitem><para>Takes a network zone name. This setting implies <varname>VirtualEthernet=yes</varname> and
435 <varname>Private=yes</varname> and has the effect that the host side of the created virtual Ethernet link is
436 connected to an automatically managed bridge interface named after the passed argument, prefixed with
437 <literal>vz-</literal>. This option corresponds to the <option>--network-zone=</option> command line
438 switch. This option is privileged (see above).</para></listitem>
439 </varlistentry>
440
f757855e
LP
441 <varlistentry>
442 <term><varname>Port=</varname></term>
443
444 <listitem><para>Exposes a TCP or UDP port of the container on
445 the host. This option corresponds to the
446 <option>--port=</option> command line switch, see
447 <citerefentry><refentrytitle>systemd-nspawn</refentrytitle><manvolnum>1</manvolnum></citerefentry>
448 for the precise syntax of the argument this option takes. This
449 option is privileged (see above).</para></listitem>
450 </varlistentry>
451 </variablelist>
452 </refsect1>
453
454 <refsect1>
455 <title>See Also</title>
456 <para>
457 <citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
458 <citerefentry><refentrytitle>systemd-nspawn</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
459 <citerefentry><refentrytitle>systemd.directives</refentrytitle><manvolnum>7</manvolnum></citerefentry>
460 </para>
461 </refsect1>
462
463</refentry>