mirror of
https://github.com/systemd/systemd.git
synced 2025-05-29 01:05:59 +03:00
nspawn: when booting in ephemeral mode, append random token to machine name
Also, when booting up an ephemeral container of / use the system hostname as default machine name. This way specifiyng -M is unnecessary when booting up an ephemeral container, while allowing any number of ephemeral containers to run from the same tree.
This commit is contained in:
parent
c4e34a612c
commit
b9ba4dabba
@ -231,8 +231,10 @@
|
|||||||
its root directory (as configured with
|
its root directory (as configured with
|
||||||
<option>--directory=</option>), that
|
<option>--directory=</option>), that
|
||||||
is removed immediately when the
|
is removed immediately when the
|
||||||
container terminates. May not be
|
container terminates. This option is
|
||||||
specified together with
|
only supported if the root file system
|
||||||
|
is <literal>btrfs</literal>. May not
|
||||||
|
be specified together with
|
||||||
<option>--image=</option> or
|
<option>--image=</option> or
|
||||||
<option>--template=</option>.</para></listitem>
|
<option>--template=</option>.</para></listitem>
|
||||||
</varlistentry>
|
</varlistentry>
|
||||||
@ -303,13 +305,22 @@
|
|||||||
|
|
||||||
<listitem><para>Sets the machine name
|
<listitem><para>Sets the machine name
|
||||||
for this container. This name may be
|
for this container. This name may be
|
||||||
used to identify this container on the
|
used to identify this container during
|
||||||
host, and is used to initialize the
|
its runtime (for example in tools like
|
||||||
container's hostname (which the
|
<citerefentry><refentrytitle>machinectl</refentrytitle><manvolnum>1</manvolnum></citerefentry>
|
||||||
container can choose to override,
|
and similar), and is used to
|
||||||
however). If not specified, the last
|
initialize the container's hostname
|
||||||
component of the root directory of the
|
(which the container can choose to
|
||||||
container is used.</para></listitem>
|
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
|
||||||
|
<option>--ephemeral</option> mode is
|
||||||
|
selected. If the root directory
|
||||||
|
selected is the host's root directory
|
||||||
|
the host's hostname is used as default
|
||||||
|
instead.</para></listitem>
|
||||||
</varlistentry>
|
</varlistentry>
|
||||||
|
|
||||||
<varlistentry>
|
<varlistentry>
|
||||||
@ -814,13 +825,16 @@
|
|||||||
</example>
|
</example>
|
||||||
|
|
||||||
<example>
|
<example>
|
||||||
<title>Boot into a <literal>btrfs</literal> snapshot of the host system</title>
|
<title>Boot into an ephemeral <literal>btrfs</literal> snapshot of the host system</title>
|
||||||
|
|
||||||
<programlisting># btrfs subvolume snapshot / /.tmp
|
<programlisting># systemd-nspawn -D / -xb</programlisting>
|
||||||
# systemd-nspawn --private-network -D /.tmp -b</programlisting>
|
|
||||||
|
|
||||||
<para>This runs a copy of the host system in a
|
<para>This runs a copy of the host system in a
|
||||||
<literal>btrfs</literal> snapshot.</para>
|
<literal>btrfs</literal> snapshot which is
|
||||||
|
removed immediately when the container
|
||||||
|
exits. All file system changes made during
|
||||||
|
runtime will be lost on shutdown,
|
||||||
|
hence.</para>
|
||||||
</example>
|
</example>
|
||||||
|
|
||||||
<example>
|
<example>
|
||||||
@ -847,7 +861,8 @@
|
|||||||
<citerefentry project='die-net'><refentrytitle>debootstrap</refentrytitle><manvolnum>8</manvolnum></citerefentry>,
|
<citerefentry project='die-net'><refentrytitle>debootstrap</refentrytitle><manvolnum>8</manvolnum></citerefentry>,
|
||||||
<citerefentry project='archlinux'><refentrytitle>pacman</refentrytitle><manvolnum>8</manvolnum></citerefentry>,
|
<citerefentry project='archlinux'><refentrytitle>pacman</refentrytitle><manvolnum>8</manvolnum></citerefentry>,
|
||||||
<citerefentry><refentrytitle>systemd.slice</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
|
<citerefentry><refentrytitle>systemd.slice</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
|
||||||
<citerefentry><refentrytitle>machinectl</refentrytitle><manvolnum>1</manvolnum></citerefentry>
|
<citerefentry><refentrytitle>machinectl</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
|
||||||
|
<citerefentry><refentrytitle>btrfs</refentrytitle><manvolnum>8</manvolnum></citerefentry>
|
||||||
</para>
|
</para>
|
||||||
</refsect1>
|
</refsect1>
|
||||||
|
|
||||||
|
@ -2875,7 +2875,11 @@ static int determine_names(void) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (!arg_machine) {
|
if (!arg_machine) {
|
||||||
arg_machine = strdup(basename(arg_image ?: arg_directory));
|
if (arg_directory && path_equal(arg_directory, "/"))
|
||||||
|
arg_machine = gethostname_malloc();
|
||||||
|
else
|
||||||
|
arg_machine = strdup(basename(arg_image ?: arg_directory));
|
||||||
|
|
||||||
if (!arg_machine)
|
if (!arg_machine)
|
||||||
return log_oom();
|
return log_oom();
|
||||||
|
|
||||||
@ -2884,6 +2888,21 @@ static int determine_names(void) {
|
|||||||
log_error("Failed to determine machine name automatically, please use -M.");
|
log_error("Failed to determine machine name automatically, please use -M.");
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (arg_ephemeral) {
|
||||||
|
char *b;
|
||||||
|
|
||||||
|
/* Add a random suffix when this is an
|
||||||
|
* ephemeral machine, so that we can run many
|
||||||
|
* instances at once without manually having
|
||||||
|
* to specify -M each time. */
|
||||||
|
|
||||||
|
if (asprintf(&b, "%s-%016" PRIx64, arg_machine, random_u64()) < 0)
|
||||||
|
return log_oom();
|
||||||
|
|
||||||
|
free(arg_machine);
|
||||||
|
arg_machine = b;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user