diff options
author | Lennart Poettering <lennart@poettering.net> | 2014-12-12 17:26:31 +0100 |
---|---|---|
committer | Lennart Poettering <lennart@poettering.net> | 2014-12-12 17:30:25 +0100 |
commit | b9ba4dabbab8a58a044ec42655e11e65bd3ecc47 (patch) | |
tree | 23a8f6590c33000cd350e1df99ddecccce22cbc8 /src | |
parent | c4e34a612c81266773cf8358cb38a43d2e43474e (diff) |
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.
Diffstat (limited to 'src')
-rw-r--r-- | src/nspawn/nspawn.c | 21 |
1 files changed, 20 insertions, 1 deletions
diff --git a/src/nspawn/nspawn.c b/src/nspawn/nspawn.c index 651a45126b..9ca53cd1b4 100644 --- a/src/nspawn/nspawn.c +++ b/src/nspawn/nspawn.c @@ -2875,7 +2875,11 @@ static int determine_names(void) { } 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) return log_oom(); @@ -2884,6 +2888,21 @@ static int determine_names(void) { log_error("Failed to determine machine name automatically, please use -M."); 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; |