]> git.ipfire.org Git - thirdparty/systemd.git/blame - man/machinectl.xml
machinectl: make machine name parameters for "shell" and "login" optional
[thirdparty/systemd.git] / man / machinectl.xml
CommitLineData
c454426c 1<?xml version='1.0'?> <!--*- Mode: nxml; nxml-child-indent: 2; indent-tabs-mode: nil -*-->
19887cd0 2<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN"
12b42c76 3 "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd">
19887cd0
ZJS
4
5<!--
6 This file is part of systemd.
7
8 Copyright 2013 Zbigniew Jędrzejewski-Szmek
9
10 systemd is free software; you can redistribute it and/or modify it
11 under the terms of the GNU Lesser General Public License as published by
12 the Free Software Foundation; either version 2.1 of the License, or
13 (at your option) any later version.
14
15 systemd is distributed in the hope that it will be useful, but
16 WITHOUT ANY WARRANTY; without even the implied warranty of
17 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
18 Lesser General Public License for more details.
19
20 You should have received a copy of the GNU Lesser General Public License
21 along with systemd; If not, see <http://www.gnu.org/licenses/>.
22-->
23
21ac6ff1 24<refentry id="machinectl" conditional='ENABLE_MACHINED'
798d3a52
ZJS
25 xmlns:xi="http://www.w3.org/2001/XInclude">
26
27 <refentryinfo>
28 <title>machinectl</title>
29 <productname>systemd</productname>
30
31 <authorgroup>
32 <author>
33 <contrib>Developer</contrib>
34 <firstname>Lennart</firstname>
35 <surname>Poettering</surname>
36 <email>lennart@poettering.net</email>
37 </author>
38 </authorgroup>
39 </refentryinfo>
40
41 <refmeta>
42 <refentrytitle>machinectl</refentrytitle>
43 <manvolnum>1</manvolnum>
44 </refmeta>
45
46 <refnamediv>
47 <refname>machinectl</refname>
48 <refpurpose>Control the systemd machine manager</refpurpose>
49 </refnamediv>
50
51 <refsynopsisdiv>
52 <cmdsynopsis>
53 <command>machinectl</command>
54 <arg choice="opt" rep="repeat">OPTIONS</arg>
55 <arg choice="req">COMMAND</arg>
56 <arg choice="opt" rep="repeat">NAME</arg>
57 </cmdsynopsis>
58 </refsynopsisdiv>
59
60 <refsect1>
61 <title>Description</title>
62
63 <para><command>machinectl</command> may be used to introspect and
64 control the state of the
65 <citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry>
66 virtual machine and container registration manager
67 <citerefentry><refentrytitle>systemd-machined.service</refentrytitle><manvolnum>8</manvolnum></citerefentry>.</para>
91913f58
LP
68
69 <para><command>machinectl</command> may be used to execute
70 operations on machines and images. Machines in this sense are
71 considered running instances of:</para>
72
73 <itemizedlist>
74 <listitem><para>Virtual Machines (VMs) that virtualize hardware
75 to run full operating system (OS) instances (including their kernels)
76 in a virtualized environment on top of the host OS.</para></listitem>
77
78 <listitem><para>Containers that share the hardware and
79 OS kernel with the host OS, in order to run
80 OS userspace instances on top the host OS.</para></listitem>
81
82 <listitem><para>The host system itself</para></listitem>
83 </itemizedlist>
84
85 <para>Machines are identified by names that follow the same rules
86 as UNIX and DNS host names, for details see below. Machines are
87 instantiated from disk or file system images, that frequently but not
88 necessarily carry the same name as machines running from
89 them. Images in this sense are considered:</para>
90
91 <itemizedlist>
92 <listitem><para>Directory trees containing an OS, including its
93 top-level directories <filename>/usr</filename>,
94 <filename>/etc</filename>, and so on.</para></listitem>
95
96 <listitem><para>btrfs subvolumes containing OS trees, similar to
97 normal directory trees.</para></listitem>
98
99 <listitem><para>Binary "raw" disk images containing MBR or GPT
100 partition tables and Linux file system partitions.</para></listitem>
101
102 <listitem><para>The file system tree of the host OS itself.</para></listitem>
103 </itemizedlist>
104
798d3a52
ZJS
105 </refsect1>
106
107 <refsect1>
108 <title>Options</title>
109
110 <para>The following options are understood:</para>
111
112 <variablelist>
113 <varlistentry>
114 <term><option>-p</option></term>
115 <term><option>--property=</option></term>
116
117 <listitem><para>When showing machine or image properties,
118 limit the output to certain properties as specified by the
119 argument. If not specified, all set properties are shown. The
120 argument should be a property name, such as
121 <literal>Name</literal>. If specified more than once, all
122 properties with the specified names are
123 shown.</para></listitem>
124 </varlistentry>
125
126 <varlistentry>
127 <term><option>-a</option></term>
128 <term><option>--all</option></term>
129
130 <listitem><para>When showing machine or image properties, show
131 all properties regardless of whether they are set or
132 not.</para>
133
134 <para>When listing VM or container images, do not suppress
135 images beginning in a dot character
136 (<literal>.</literal>).</para></listitem>
137 </varlistentry>
138
139 <varlistentry>
140 <term><option>-l</option></term>
141 <term><option>--full</option></term>
142
143 <listitem><para>Do not ellipsize process tree entries.</para>
144 </listitem>
145 </varlistentry>
146
147 <varlistentry>
148 <term><option>--no-ask-password</option></term>
149
150 <listitem><para>Do not query the user for authentication for
151 privileged operations.</para></listitem>
152 </varlistentry>
153
154 <varlistentry>
155 <term><option>--kill-who=</option></term>
156
157 <listitem><para>When used with <command>kill</command>, choose
158 which processes to kill. Must be one of
159 <option>leader</option>, or <option>all</option> to select
160 whether to kill only the leader process of the machine or all
161 processes of the machine. If omitted, defaults to
162 <option>all</option>.</para></listitem>
163 </varlistentry>
164
165 <varlistentry>
166 <term><option>-s</option></term>
167 <term><option>--signal=</option></term>
168
169 <listitem><para>When used with <command>kill</command>, choose
170 which signal to send to selected processes. Must be one of the
171 well-known signal specifiers, such as
172 <constant>SIGTERM</constant>, <constant>SIGINT</constant> or
173 <constant>SIGSTOP</constant>. If omitted, defaults to
174 <constant>SIGTERM</constant>.</para></listitem>
175 </varlistentry>
176
c454426c
LP
177 <varlistentry>
178 <term><option>--uid=</option></term>
179
180 <listitem><para>When used with the <command>shell</command>
181 command, chooses the user ID to open the interactive shell
182 session as. If this switch is not specified, defaults to
183 <literal>root</literal>. Note that this switch is not
184 supported for the <command>login</command> command (see
185 below).</para></listitem>
186 </varlistentry>
187
188 <varlistentry>
189 <term><option>--setenv=</option></term>
190
191 <listitem><para>When used with the <command>shell</command>
192 command, sets an environment variable to pass to the executed
193 shell. Takes a pair of environment variable name and value,
194 separated by <literal>=</literal> as argument. This switch
195 may be used multiple times to set multiple environment
196 variables. Note that this switch is not supported for the
197 <command>login</command> command (see
198 below).</para></listitem>
199 </varlistentry>
200
798d3a52
ZJS
201 <varlistentry>
202 <term><option>--mkdir</option></term>
203
204 <listitem><para>When used with <command>bind</command> creates
205 the destination directory before applying the bind
206 mount.</para></listitem>
207 </varlistentry>
208
798d3a52
ZJS
209 <varlistentry>
210 <term><option>--read-only</option></term>
211
212 <listitem><para>When used with <command>bind</command> applies
213 a read-only bind mount.</para></listitem>
214 </varlistentry>
215
216
217 <varlistentry>
218 <term><option>-n</option></term>
219 <term><option>--lines=</option></term>
220
221 <listitem><para>When used with <command>status</command>,
222 controls the number of journal lines to show, counting from
223 the most recent ones. Takes a positive integer argument.
224 Defaults to 10.</para>
225 </listitem>
226 </varlistentry>
227
228 <varlistentry>
229 <term><option>-o</option></term>
230 <term><option>--output=</option></term>
231
232 <listitem><para>When used with <command>status</command>,
233 controls the formatting of the journal entries that are shown.
234 For the available choices, see
235 <citerefentry><refentrytitle>journalctl</refentrytitle><manvolnum>1</manvolnum></citerefentry>.
236 Defaults to <literal>short</literal>.</para></listitem>
237 </varlistentry>
238
239 <varlistentry>
240 <term><option>--verify=</option></term>
241
242 <listitem><para>When downloading a container or VM image,
243 specify whether the image shall be verified before it is made
244 available. Takes one of <literal>no</literal>,
245 <literal>checksum</literal> and <literal>signature</literal>.
246 If <literal>no</literal> no verification is done. If
247 <literal>checksum</literal> is specified the download is
248 checked for integrity after transfer is complete, but no
249 signatures are verified. If <literal>signature</literal> is
250 specified, the checksum is verified and the images's signature
251 is checked against a local keyring of trustable vendors. It is
252 strongly recommended to set this option to
253 <literal>signature</literal> if the server and protocol
254 support this. Defaults to
255 <literal>signature</literal>.</para></listitem>
256 </varlistentry>
257
258 <varlistentry>
259 <term><option>--force</option></term>
260
261 <listitem><para>When downloading a container or VM image, and
262 a local copy by the specified local machine name already
263 exists, delete it first and replace it by the newly downloaded
264 image.</para></listitem>
265 </varlistentry>
266
267 <varlistentry>
268 <term><option>--dkr-index-url</option></term>
269
270 <listitem><para>Specifies the index server to use for
271 downloading <literal>dkr</literal> images with the
272 <command>pull-dkr</command>. Takes a
273 <literal>http://</literal>, <literal>https://</literal>
274 URL.</para></listitem>
275 </varlistentry>
276
6e9efa59
LP
277 <varlistentry>
278 <term><option>--format=</option></term>
279
280 <listitem><para>When used with the <option>export-tar</option>
281 or <option>export-raw</option> commands specifies the
282 compression format to use for the resulting file. Takes one of
283 <literal>uncompressed</literal>, <literal>xz</literal>,
284 <literal>gzip</literal>, <literal>bzip2</literal>. By default
285 the format is determined automatically from the image file
286 name passed.</para></listitem>
287 </varlistentry>
288
798d3a52
ZJS
289 <xi:include href="user-system-options.xml" xpointer="host" />
290 <xi:include href="user-system-options.xml" xpointer="machine" />
291
292 <xi:include href="standard-options.xml" xpointer="no-pager" />
293 <xi:include href="standard-options.xml" xpointer="no-legend" />
294 <xi:include href="standard-options.xml" xpointer="help" />
295 <xi:include href="standard-options.xml" xpointer="version" />
296 </variablelist>
297 </refsect1>
298
299 <refsect1>
300 <title>Commands</title>
301
302 <para>The following commands are understood:</para>
303
304 <refsect2><title>Machine Commands</title><variablelist>
305
306 <varlistentry>
307 <term><command>list</command></term>
308
309 <listitem><para>List currently running (online) virtual
91913f58
LP
310 machines and containers. To enumerate machine images that can
311 be started, use <command>list-images</command> (see
312 below). Note that this command hides the special
313 <literal>.host</literal> machine by default. Use the
314 <option>--all</option> switch to show it.</para></listitem>
798d3a52
ZJS
315 </varlistentry>
316
317 <varlistentry>
318 <term><command>status</command> <replaceable>NAME</replaceable>...</term>
319
320 <listitem><para>Show terse runtime status information about
321 one or more virtual machines and containers, followed by the
322 most recent log data from the journal. This function is
323 intended to generate human-readable output. If you are looking
324 for computer-parsable output, use <command>show</command>
325 instead. Note that the log data shown is reported by the
326 virtual machine or container manager, and frequently contains
327 console output of the machine, but not necessarily journal
328 contents of the machine itself.</para></listitem>
329 </varlistentry>
330
331 <varlistentry>
91913f58 332 <term><command>show</command> [<replaceable>NAME</replaceable>...]</term>
798d3a52
ZJS
333
334 <listitem><para>Show properties of one or more registered
335 virtual machines or containers or the manager itself. If no
336 argument is specified, properties of the manager will be
337 shown. If an NAME is specified, properties of this virtual
338 machine or container are shown. By default, empty properties
339 are suppressed. Use <option>--all</option> to show those too.
340 To select specific properties to show, use
341 <option>--property=</option>. This command is intended to be
342 used whenever computer-parsable output is required. Use
343 <command>status</command> if you are looking for formatted
344 human-readable output.</para></listitem>
345 </varlistentry>
346
347 <varlistentry>
348 <term><command>start</command> <replaceable>NAME</replaceable>...</term>
349
350 <listitem><para>Start a container as a system service, using
351 <citerefentry><refentrytitle>systemd-nspawn</refentrytitle><manvolnum>1</manvolnum></citerefentry>.
352 This starts <filename>systemd-nspawn@.service</filename>,
353 instantiated for the specified machine name, similar to the
354 effect of <command>systemctl start</command> on the service
355 name. <command>systemd-nspawn</command> looks for a container
356 image by the specified name in
357 <filename>/var/lib/machines/</filename> (and other search
358 paths, see below) and runs it. Use
359 <command>list-images</command> (see below), for listing
360 available container images to start.</para>
361
362 <para>Note that
363 <citerefentry><refentrytitle>systemd-machined.service</refentrytitle><manvolnum>8</manvolnum></citerefentry>
364 also interfaces with a variety of other container and VM
365 managers, <command>systemd-nspawn</command> is just one
366 implementation of it. Most of the commands available in
367 <command>machinectl</command> may be used on containers or VMs
368 controlled by other managers, not just
369 <command>systemd-nspawn</command>. Starting VMs and container
370 images on those managers requires manager-specific
371 tools.</para>
372
373 <para>To interactively start a container on the command line
374 with full access to the container's console, please invoke
375 <command>systemd-nspawn</command> directly. To stop a running
376 container use <command>machinectl poweroff</command>, see
377 below.</para></listitem>
378 </varlistentry>
379
380 <varlistentry>
91913f58 381 <term><command>login</command> [<replaceable>NAME</replaceable>]</term>
798d3a52 382
c454426c 383 <listitem><para>Open an interactive terminal login session in
91913f58
LP
384 a container or on the local host. If an argument is supplied
385 it refers to the container machine to connect to. If none is
386 specified, or the container name is specified as the empty
387 string, or the special machine name <literal>.host</literal>
388 (see below) is specified, the connection is made to the local
389 host instead. This will create a TTY connection to a specific
390 container or the local host and asks for the execution of a
391 getty on it. Note that this is only supported for containers
392 running
798d3a52
ZJS
393 <citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry>
394 as init system.</para>
395
396 <para>This command will open a full login prompt on the
91913f58
LP
397 container or the local host, which then asks for username and
398 password. Use <command>shell</command> (see below) or
798d3a52 399 <citerefentry><refentrytitle>systemd-run</refentrytitle><manvolnum>1</manvolnum></citerefentry>
91913f58
LP
400 with the <option>--machine=</option> switch to directly invoke
401 a single command, either interactively or in the
402 background.</para></listitem>
798d3a52
ZJS
403 </varlistentry>
404
c454426c 405 <varlistentry>
91913f58 406 <term><command>shell</command> [<replaceable>NAME</replaceable> [<replaceable>PATH</replaceable> [<replaceable>ARGUMENTS</replaceable>...]]] </term>
c454426c
LP
407
408 <listitem><para>Open an interactive shell session in a
91913f58
LP
409 container or on the local host. The first argument refers to
410 the container machine to connect to. If none is specified, or
411 the machine name is specified as the empty string, or the
412 special machine name <literal>.host</literal> (see below) is
413 specified, the connection is made to the local host
414 instead. This works similar to <command>login</command> but
415 immediately invokes a user process. This command runs the
416 specified executable with the specified arguments, or
c454426c
LP
417 <filename>/bin/sh</filename> if none is specified. By default
418 opens a <literal>root</literal> shell, but using
419 <option>--uid=</option> a different user may be selected. Use
420 <option>--setenv=</option> to set environment variables for
421 the executed process.</para></listitem>
422 </varlistentry>
423
798d3a52
ZJS
424 <varlistentry>
425 <term><command>enable</command> <replaceable>NAME</replaceable>...</term>
426 <term><command>disable</command> <replaceable>NAME</replaceable>...</term>
427
428 <listitem><para>Enable or disable a container as a system
429 service to start at system boot, using
430 <citerefentry><refentrytitle>systemd-nspawn</refentrytitle><manvolnum>1</manvolnum></citerefentry>.
431 This enables or disables
432 <filename>systemd-nspawn@.service</filename>, instantiated for
433 the specified machine name, similar to the effect of
434 <command>systemctl enable</command> or <command>systemctl
435 disable</command> on the service name.</para></listitem>
436 </varlistentry>
437
438 <varlistentry>
439 <term><command>poweroff</command> <replaceable>NAME</replaceable>...</term>
440
441 <listitem><para>Power off one or more containers. This will
442 trigger a reboot by sending SIGRTMIN+4 to the container's init
443 process, which causes systemd-compatible init systems to shut
444 down cleanly. This operation does not work on containers that
445 do not run a
446 <citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry>-compatible
447 init system, such as sysvinit. Use
448 <command>terminate</command> (see below) to immediately
449 terminate a container or VM, without cleanly shutting it
450 down.</para></listitem>
451 </varlistentry>
452
453 <varlistentry>
454 <term><command>reboot</command> <replaceable>NAME</replaceable>...</term>
455
456 <listitem><para>Reboot one or more containers. This will
457 trigger a reboot by sending SIGINT to the container's init
458 process, which is roughly equivalent to pressing Ctrl+Alt+Del
459 on a non-containerized system, and is compatible with
460 containers running any system manager.</para></listitem>
461 </varlistentry>
462
463 <varlistentry>
464 <term><command>terminate</command> <replaceable>NAME</replaceable>...</term>
465
466 <listitem><para>Immediately terminates a virtual machine or
467 container, without cleanly shutting it down. This kills all
468 processes of the virtual machine or container and deallocates
469 all resources attached to that instance. Use
470 <command>poweroff</command> to issue a clean shutdown
471 request.</para></listitem>
472 </varlistentry>
473
474 <varlistentry>
475 <term><command>kill</command> <replaceable>NAME</replaceable>...</term>
476
477 <listitem><para>Send a signal to one or more processes of the
478 virtual machine or container. This means processes as seen by
479 the host, not the processes inside the virtual machine or
480 container. Use <option>--kill-who=</option> to select which
481 process to kill. Use <option>--signal=</option> to select the
482 signal to send.</para></listitem>
483 </varlistentry>
484
485 <varlistentry>
486 <term><command>bind</command> <replaceable>NAME</replaceable> <replaceable>PATH</replaceable> [<replaceable>PATH</replaceable>]</term>
487
488 <listitem><para>Bind mounts a directory from the host into the
489 specified container. The first directory argument is the
490 source directory on the host, the second directory argument
cb7bb815
MK
491 is the destination directory in the container. When the
492 latter is omitted the destination path in the container is
493 the same as the source path on the host. When combined with
494 the <option>--read-only</option> switch a ready-only bind
495 mount is created. When combined with the
496 <option>--mkdir</option> switch the destination path is first
497 created before the mount is applied. Note that this option is
498 currently only supported for
798d3a52
ZJS
499 <citerefentry><refentrytitle>systemd-nspawn</refentrytitle><manvolnum>1</manvolnum></citerefentry>
500 containers.</para></listitem>
501 </varlistentry>
502
503 <varlistentry>
504 <term><command>copy-to</command> <replaceable>NAME</replaceable> <replaceable>PATH</replaceable> [<replaceable>PATH</replaceable>]</term>
505
506 <listitem><para>Copies files or directories from the host
507 system into a running container. Takes a container name,
508 followed by the source path on the host and the destination
509 path in the container. If the destination path is omitted the
510 same as the source path is used.</para></listitem>
511 </varlistentry>
512
513
514 <varlistentry>
515 <term><command>copy-from</command> <replaceable>NAME</replaceable> <replaceable>PATH</replaceable> [<replaceable>PATH</replaceable>]</term>
516
517 <listitem><para>Copies files or directories from a container
518 into the host system. Takes a container name, followed by the
519 source path in the container the destination path on the host.
520 If the destination path is omitted the same as the source path
521 is used.</para></listitem>
522 </varlistentry>
523 </variablelist></refsect2>
524
525 <refsect2><title>Image Commands</title><variablelist>
526
527 <varlistentry>
528 <term><command>list-images</command></term>
529
530 <listitem><para>Show a list of locally installed container and
531 VM images. This enumerates all raw disk images and container
532 directories and subvolumes in
533 <filename>/var/lib/machines/</filename> (and other search
534 paths, see below). Use <command>start</command> (see above) to
535 run a container off one of the listed images. Note that by
536 default containers whose name begins with a dot
537 (<literal>.</literal>) are not shown. To show these too,
538 specify <option>--all</option>. Note that a special image
539 <literal>.host</literal> always implicitly exists and refers
540 to the image the host itself is booted from.</para></listitem>
541 </varlistentry>
542
543 <varlistentry>
91913f58 544 <term><command>image-status</command> [<replaceable>NAME</replaceable>...]</term>
798d3a52
ZJS
545
546 <listitem><para>Show terse status information about one or
547 more container or VM images. This function is intended to
548 generate human-readable output. Use
549 <command>show-image</command> (see below) to generate
550 computer-parsable output instead.</para></listitem>
551 </varlistentry>
552
553 <varlistentry>
91913f58 554 <term><command>show-image</command> [<replaceable>NAME</replaceable>...]</term>
798d3a52
ZJS
555
556 <listitem><para>Show properties of one or more registered
557 virtual machine or container images, or the manager itself. If
558 no argument is specified, properties of the manager will be
559 shown. If an NAME is specified, properties of this virtual
560 machine or container image are shown. By default, empty
561 properties are suppressed. Use <option>--all</option> to show
562 those too. To select specific properties to show, use
563 <option>--property=</option>. This command is intended to be
564 used whenever computer-parsable output is required. Use
565 <command>image-status</command> if you are looking for
566 formatted human-readable output.</para></listitem>
567 </varlistentry>
568
569 <varlistentry>
570 <term><command>clone</command> <replaceable>NAME</replaceable> <replaceable>NAME</replaceable></term>
571
d6ce17c7 572 <listitem><para>Clones a container or VM image. The
798d3a52
ZJS
573 arguments specify the name of the image to clone and the name
574 of the newly cloned image. Note that plain directory container
575 images are cloned into subvolume images with this command.
576 Note that cloning a container or VM image is optimized for
577 btrfs file systems, and might not be efficient on others, due
3fe22bb4
LP
578 to file system limitations.</para>
579
580 <para>Note that this command leaves host name, machine ID and
581 all other settings that could identify the instance
582 unmodified. The original image and the cloned copy will hence
583 share these credentials, and it might be necessary to manually
584 change them in the copy.</para></listitem>
798d3a52
ZJS
585 </varlistentry>
586
587 <varlistentry>
588 <term><command>rename</command> <replaceable>NAME</replaceable> <replaceable>NAME</replaceable></term>
589
d6ce17c7 590 <listitem><para>Renames a container or VM image. The
798d3a52
ZJS
591 arguments specify the name of the image to rename and the new
592 name of the image.</para></listitem>
593 </varlistentry>
594
595 <varlistentry>
596 <term><command>read-only</command> <replaceable>NAME</replaceable> [<replaceable>BOOL</replaceable>]</term>
597
d6ce17c7 598 <listitem><para>Marks or (unmarks) a container or VM image
798d3a52
ZJS
599 read-only. Takes a VM or container image name, followed by a
600 boolean as arguments. If the boolean is omitted, positive is
601 implied, i.e. the image is marked read-only.</para></listitem>
602 </varlistentry>
603
798d3a52
ZJS
604 <varlistentry>
605 <term><command>remove</command> <replaceable>NAME</replaceable>...</term>
606
d6ce17c7 607 <listitem><para>Removes one or more container or VM images.
798d3a52
ZJS
608 The special image <literal>.host</literal>, which refers to
609 the host's own directory tree may not be
610 removed.</para></listitem>
611 </varlistentry>
612
d6ce17c7
LP
613 <varlistentry>
614 <term><command>set-limit</command> [<replaceable>NAME</replaceable>] <replaceable>BYTES</replaceable></term>
615
616 <listitem><para>Sets the maximum size in bytes a specific
7de30452
LP
617 container or VM image, or all images may grow up to on disk
618 (disk quota). Takes either one or two parameters. The first,
d6ce17c7 619 optional parameter refers to a container or VM image name. If
7de30452
LP
620 specified the size limit of the specified image is changed. If
621 omitted the overall size limit of the sum of all images stored
622 locally is changed. The final argument specifies the size
623 limit in bytes, possibly suffixed by the usual K, M, G, T
624 units. If the size limit shall be disabled, specify
625 <literal>-</literal> as size.</para>
626
627 <para>Note that per-container size limits are only supported
628 on btrfs file systems. Also note that if
629 <command>set-limit</command> is invoked without image
630 parameter, and <filename>/var/lib/machines</filename> is
631 empty, and the directory is not located on btrfs, a btrfs
632 loopback file is implicitly created as
633 <filename>/var/lib/machines.raw</filename> with the given
634 size, and mounted to
635 <filename>/var/lib/machines</filename>. The size of the
636 loopback may later be readjusted with
637 <command>set-limit</command>, as well. If such a
638 loopback-mounted <filename>/var/lib/machines</filename>
639 directory is used <command>set-limit</command> without image
640 name alters both the quota setting within the file system as
641 well as the loopback file and file system size
642 itself.</para></listitem>
d6ce17c7
LP
643 </varlistentry>
644
798d3a52
ZJS
645 </variablelist></refsect2>
646
647 <refsect2><title>Image Transfer Commands</title><variablelist>
648
649 <varlistentry>
650 <term><command>pull-tar</command> <replaceable>URL</replaceable> [<replaceable>NAME</replaceable>]</term>
651
652 <listitem><para>Downloads a <filename>.tar</filename>
653 container image from the specified URL, and makes it available
654 under the specified local machine name. The URL must be of
655 type <literal>http://</literal> or
656 <literal>https://</literal>, and must refer to a
657 <filename>.tar</filename>, <filename>.tar.gz</filename>,
658 <filename>.tar.xz</filename> or <filename>.tar.bz2</filename>
f8b07704 659 archive file. If the local machine name is omitted it
798d3a52
ZJS
660 is automatically derived from the last component of the URL,
661 with its suffix removed.</para>
662
663 <para>The image is verified before it is made available,
664 unless <option>--verify=no</option> is specified. Verification
665 is done via SHA256SUMS and SHA256SUMS.gpg files, that need to
666 be made available on the same web server, under the same URL
667 as the <filename>.tar</filename> file, but with the last
668 component (the filename) of the URL replaced. With
669 <option>--verify=checksum</option> only the SHA256 checksum
670 for the file is verified, based on the
671 <filename>SHA256SUMS</filename> file. With
672 <option>--verify=signature</option> the SHA256SUMS file is
673 first verified with detached GPG signature file
674 <filename>SHA256SUMS.gpg</filename>. The public key for this
675 verification step needs to be available in
12b42c76
TG
676 <filename>/usr/lib/systemd/import-pubring.gpg</filename> or
677 <filename>/etc/systemd/import-pubring.gpg</filename>.</para>
798d3a52
ZJS
678
679 <para>The container image will be downloaded and stored in a
680 read-only subvolume in
681 <filename>/var/lib/machines/</filename>, that is named after
682 the specified URL and its HTTP etag. A writable snapshot is
683 then taken from this subvolume, and named after the specified
dd2b607b 684 local name. This behavior ensures that creating multiple
798d3a52
ZJS
685 container instances of the same URL is efficient, as multiple
686 downloads are not necessary. In order to create only the
687 read-only image, and avoid creating its writable snapshot,
688 specify <literal>-</literal> as local machine name.</para>
689
690 <para>Note that the read-only subvolume is prefixed with
6b94875f 691 <filename>.tar-</filename>, and is thus not shown by
798d3a52
ZJS
692 <command>list-images</command>, unless <option>--all</option>
693 is passed.</para>
694
695 <para>Note that pressing C-c during execution of this command
696 will not abort the download. Use
697 <command>cancel-transfer</command>, described
698 below.</para></listitem>
699 </varlistentry>
700
701 <varlistentry>
702 <term><command>pull-raw</command> <replaceable>URL</replaceable> [<replaceable>NAME</replaceable>]</term>
703
704 <listitem><para>Downloads a <filename>.raw</filename>
705 container or VM disk image from the specified URL, and makes
706 it available under the specified local machine name. The URL
707 must be of type <literal>http://</literal> or
708 <literal>https://</literal>. The container image must either
709 be a <filename>.qcow2</filename> or raw disk image, optionally
710 compressed as <filename>.gz</filename>,
711 <filename>.xz</filename>, or <filename>.bz2</filename>. If the
f8b07704 712 local machine name is omitted it is automatically
798d3a52
ZJS
713 derived from the last component of the URL, with its suffix
714 removed.</para>
715
716 <para>Image verification is identical for raw and tar images
717 (see above).</para>
718
1d3eaa93 719 <para>If the downloaded image is in
6b94875f 720 <filename>.qcow2</filename> format it is converted into a raw
798d3a52
ZJS
721 image file before it is made available.</para>
722
723 <para>Downloaded images of this type will be placed as
724 read-only <filename>.raw</filename> file in
725 <filename>/var/lib/machines/</filename>. A local, writable
726 (reflinked) copy is then made under the specified local
727 machine name. To omit creation of the local, writable copy
728 pass <literal>-</literal> as local machine name.</para>
729
dd2b607b 730 <para>Similar to the behavior of <command>pull-tar</command>,
798d3a52 731 the read-only image is prefixed with
6b94875f 732 <filename>.raw-</filename>, and thus not shown by
798d3a52
ZJS
733 <command>list-images</command>, unless <option>--all</option>
734 is passed.</para>
735
736 <para>Note that pressing C-c during execution of this command
737 will not abort the download. Use
738 <command>cancel-transfer</command>, described
739 below.</para></listitem>
740 </varlistentry>
741
742 <varlistentry>
743 <term><command>pull-dkr</command> <replaceable>REMOTE</replaceable> [<replaceable>NAME</replaceable>]</term>
744
745 <listitem><para>Downloads a <literal>dkr</literal> container
746 image and makes it available locally. The remote name refers
747 to a <literal>dkr</literal> container name. If omitted, the
748 local machine name is derived from the <literal>dkr</literal>
749 container name.</para>
750
751 <para>Image verification is not available for
752 <literal>dkr</literal> containers, and thus
753 <option>--verify=no</option> must always be specified with
754 this command.</para>
755
756 <para>This command downloads all (missing) layers for the
757 specified container and places them in read-only subvolumes in
758 <filename>/var/lib/machines/</filename>. A writable snapshot
759 of the newest layer is then created under the specified local
760 machine name. To omit creation of this writable snapshot, pass
761 <literal>-</literal> as local machine name.</para>
762
763 <para>The read-only layer subvolumes are prefixed with
6b94875f 764 <filename>.dkr-</filename>, and thus not shown by
798d3a52
ZJS
765 <command>list-images</command>, unless <option>--all</option>
766 is passed.</para>
767
768 <para>To specify the <literal>dkr</literal> index server to
769 use for looking up the specified container, use
770 <option>--dkr-index-url=</option>.</para>
771
772 <para>Note that pressing C-c during execution of this command
773 will not abort the download. Use
774 <command>cancel-transfer</command>, described
775 below.</para></listitem>
776 </varlistentry>
777
af40e5d3
LP
778 <varlistentry>
779 <term><command>import-tar</command> <replaceable>FILE</replaceable> [<replaceable>NAME</replaceable>]</term>
780 <term><command>import-raw</command> <replaceable>FILE</replaceable> [<replaceable>NAME</replaceable>]</term>
781 <listitem><para>Imports a TAR or RAW container or VM image,
782 and places it under the specified name in
783 <filename>/var/lib/machines/</filename>. When
784 <command>import-tar</command> is used the file specified as
785 first argument should be a tar archive, possibly compressed
786 with xz, gzip or bzip2. It will then be unpacked into its own
787 subvolume in <filename>/var/lib/machines</filename>. When
788 <command>import-raw</command> is used the file should be a
789 qcow2 or raw disk image, possibly compressed with xz, gzip or
790 bzip2. If the second argument (the resulting image name) is
791 not specified it is automatically derived from the file
792 name. If the file name is passed as <literal>-</literal> the
793 image is read from standard input, in which case the second
794 argument is mandatory.</para>
795
796 <para>Similar as with <command>pull-tar</command>,
797 <command>pull-raw</command> the file system
798 <filename>/var/lib/machines.raw</filename> is increased in
799 size of necessary and appropriate. Optionally the
800 <option>--read-only</option> switch may be used to create a
801 read-only container or VM image. No cryptographic validation
802 is done when importing the images.</para>
803
804 <para>Much like image downloads, ongoing imports may be listed
805 with <command>list-transfers</command> and aborted with
806 <command>cancel-transfer</command>.</para></listitem>
807 </varlistentry>
808
6e9efa59
LP
809 <varlistentry>
810 <term><command>export-tar</command> <replaceable>NAME</replaceable> [<replaceable>FILE</replaceable>]</term>
811 <term><command>export-raw</command> <replaceable>NAME</replaceable> [<replaceable>FILE</replaceable>]</term>
812 <listitem><para>Exports a TAR or RAW container or VM image and
813 stores it in the specified file. The first parameter should be
814 a VM or container image name. The second parameter should be a
815 file path the TAR or RAW image is written to. If the path ends
816 in <literal>.gz</literal> the file is compressed with gzip, if
817 it ends in <literal>.xz</literal> with xz, and if it ends in
818 <literal>.bz2</literal> with bzip2. If the path ends in
819 neither the file is left uncompressed. If the second argument
820 is missing the image is written to standard output. The
821 compression may also be explicitly selected with the
822 <option>--format=</option> switch. This is in particular
823 useful if the second parameter is left unspecified.</para>
824
825 <para>Much like image downloads and imports, ongoing exports
826 may be listed with <command>list-transfers</command> and
827 aborted with
828 <command>cancel-transfer</command>.</para>
829
830 <para>Note that currently only directory and subvolume images
831 may be exported as TAR images, and only raw disk images as RAW
832 images.</para></listitem>
833 </varlistentry>
834
798d3a52
ZJS
835 <varlistentry>
836 <term><command>list-transfers</command></term>
837
838 <listitem><para>Shows a list of container or VM image
6e9efa59 839 downloads, imports and exports that are currently in
af40e5d3 840 progress.</para></listitem>
798d3a52
ZJS
841 </varlistentry>
842
843 <varlistentry>
844 <term><command>cancel-transfers</command> <replaceable>ID</replaceable>...</term>
845
6e9efa59
LP
846 <listitem><para>Aborts a download, import or export of the
847 container or VM image with the specified ID. To list ongoing
848 transfers and their IDs, use
af40e5d3 849 <command>list-transfers</command>. </para></listitem>
798d3a52
ZJS
850 </varlistentry>
851
852 </variablelist></refsect2>
853
854 </refsect1>
855
91913f58
LP
856 <refsect1>
857 <title>Machine and Image Names</title>
858
859 <para>The <command>machinectl</command> tool operates on machines
860 and images, whose names must be chosen following strict
861 rules. Machine names must be suitable for use as host names
862 following a conservative subset of DNS and UNIX/Linux
863 semantics. Specifically, they must consist of one or more
864 non-empty label strings, separated by dots. No leading or trailing
865 dots are allowed. No sequences of multiple dots are allowed. The
866 label strings may only consists of alphanumeric characters as well
867 as the dash and underscore. The maximum length of a machine name
868 is 64 characters.</para>
869
870 <para>A special machine with the name <literal>.host</literal>
871 refers to the running host system itself. This is useful for execution
872 operations or inspecting the host system as well. Not that
873 <command>machinectl list</command> will not show this special
874 machine unless the <option>--all</option> switch is specified.</para>
875
876 <para>Requirements on image names are less strict, however must be
877 valid UTF-8, must be suitable as file names (hence not be the
878 single or double dot, and not include a slash), and may not
879 contain control characters. Since many operations search for an
880 image by the name of a requested machine it is recommended to name
881 images in the same strict fashion as machines.</para>
882
883 <para>A special image with the name <literal>.host</literal>
884 refers to the image of the running host system. It is hence
885 conceptually maps to the special <literal>.host</literal> machine
886 name described above. Note that <command>machinectl
887 list-images</command> won't show this special image either, unless
888 <option>--all</option> is specified.</para>
889 </refsect1>
890
798d3a52
ZJS
891 <refsect1>
892 <title>Files and Directories</title>
893
894 <para>Machine images are preferably stored in
895 <filename>/var/lib/machines/</filename>, but are also searched for
896 in <filename>/usr/local/lib/machines/</filename> and
897 <filename>/usr/lib/machines/</filename>. For compatibility reasons
898 the directory <filename>/var/lib/container/</filename> is
899 searched, too. Note that images stored below
900 <filename>/usr</filename> are always considered read-only. It is
901 possible to symlink machines images from other directories into
902 <filename>/var/lib/machines/</filename> to make them available for
903 control with <command>machinectl</command>.</para>
904
7de30452
LP
905 <para>Note that many image operations are only supported,
906 efficient or atomic on btrfs file systems. Due to this, if the
907 <command>pull-tar</command>, <command>pull-raw</command>,
af40e5d3
LP
908 <command>pull-dkr</command>, <command>import-tar</command>,
909 <command>import-raw</command> and <command>set-limit</command>
7de30452
LP
910 commands notice that <filename>/var/lib/machines</filename> is
911 empty and not located on btrfs, they will implicitly set up a
912 loopback file <filename>/var/lib/machines.raw</filename>
913 containing a btrfs file system that is mounted to
914 <filename>/var/lib/machines</filename>. The size of this loopback
af40e5d3
LP
915 file may be controlled dynamically with
916 <command>set-limit</command>.</para>
7de30452 917
798d3a52
ZJS
918 <para>Disk images are understood by
919 <citerefentry><refentrytitle>systemd-nspawn</refentrytitle><manvolnum>1</manvolnum></citerefentry>
920 and <command>machinectl</command> in three formats:</para>
921
922 <itemizedlist>
923 <listitem><para>A simple directory tree, containing the files
924 and directories of the container to boot.</para></listitem>
925
926 <listitem><para>A subvolume (on btrfs file systems), which are
927 similar to the simple directories, described above. However,
928 they have additional benefits, such as efficient cloning and
929 quota reporting.</para></listitem>
930
931 <listitem><para>"Raw" disk images, i.e. binary images of disks
932 with a GPT or MBR partition table. Images of this type are
933 regular files with the suffix
934 <literal>.raw</literal>.</para></listitem>
935 </itemizedlist>
936
937 <para>See
938 <citerefentry><refentrytitle>systemd-nspawn</refentrytitle><manvolnum>1</manvolnum></citerefentry>
939 for more information on image formats, in particular it's
940 <option>--directory=</option> and <option>--image=</option>
941 options.</para>
942 </refsect1>
943
944 <refsect1>
945 <title>Examples</title>
946 <example>
947 <title>Download an Ubuntu image and open a shell in it</title>
948
949 <programlisting># machinectl pull-tar https://cloud-images.ubuntu.com/trusty/current/trusty-server-cloudimg-amd64-root.tar.gz
e0ea94c1
LP
950# systemd-nspawn -M trusty-server-cloudimg-amd64-root</programlisting>
951
798d3a52
ZJS
952 <para>This downloads and verifies the specified
953 <filename>.tar</filename> image, and then uses
954 <citerefentry><refentrytitle>systemd-nspawn</refentrytitle><manvolnum>1</manvolnum></citerefentry>
955 to open a shell in it.</para>
956 </example>
957
958 <example>
959 <title>Download a Fedora image, set a root password in it, start
960 it as service</title>
961
ac92ced5
BF
962 <programlisting># 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
963# systemd-nspawn -M Fedora-Cloud-Base-20141203-21
964# passwd
965# exit
966# machinectl start Fedora-Cloud-Base-20141203-21
967# machinectl login Fedora-Cloud-Base-20141203-21</programlisting>
798d3a52
ZJS
968
969 <para>This downloads the specified <filename>.raw</filename>
970 image with verification disabled. Then a shell is opened in it
971 and a root password is set. Afterwards the shell is left, and
972 the machine started as system service. With the last command a
973 login prompt into the container is requested.</para>
974 </example>
975
976 <example>
977 <title>Download a Fedora <literal>dkr</literal> image</title>
978
979 <programlisting># machinectl pull-dkr --verify=no mattdm/fedora
e0ea94c1
LP
980# systemd-nspawn -M fedora</programlisting>
981
798d3a52
ZJS
982 <para>Downloads a <literal>dkr</literal> image and opens a shell
983 in it. Note that the specified download command might require an
984 index server to be specified with the
985 <literal>--dkr-index-url=</literal>.</para>
986 </example>
6e9efa59
LP
987
988 <example>
989 <title>Exports a container image as tar file</title>
990
991 <programlisting># machinectl export-tar fedora myfedora.tar.xz</programlisting>
992
993 <para>Exports the container <literal>fedora</literal> in an
994 xz-compress tar file <filename>myfedora.tar.xz</filename> in the
995 current directory.</para>
996 </example>
997
798d3a52
ZJS
998 </refsect1>
999
1000 <refsect1>
1001 <title>Exit status</title>
1002
1003 <para>On success, 0 is returned, a non-zero failure code
1004 otherwise.</para>
1005 </refsect1>
1006
1007 <xi:include href="less-variables.xml" />
1008
1009 <refsect1>
1010 <title>See Also</title>
1011 <para>
1012 <citerefentry><refentrytitle>systemd-machined.service</refentrytitle><manvolnum>8</manvolnum></citerefentry>,
1013 <citerefentry><refentrytitle>systemd-nspawn</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
6e9efa59 1014 <citerefentry><refentrytitle>systemd.special</refentrytitle><manvolnum>7</manvolnum></citerefentry>,
16eb4024
ZJS
1015 <citerefentry project='die-net'><refentrytitle>tar</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
1016 <citerefentry project='die-net'><refentrytitle>xz</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
1017 <citerefentry project='die-net'><refentrytitle>gzip</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
1018 <citerefentry project='die-net'><refentrytitle>bzip2</refentrytitle><manvolnum>1</manvolnum></citerefentry>
798d3a52
ZJS
1019 </para>
1020 </refsect1>
19887cd0
ZJS
1021
1022</refentry>