X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=src%2Fnspawn%2Fnspawn.c;h=651a45126b8585b7e0037e76a53c553318b2fdf5;hb=c4e34a612c81266773cf8358cb38a43d2e43474e;hp=f6f20abdaf23b1db88865e4db0897f06d43a34d2;hpb=df9a75e480ecbfe230589a7c1e8e0bb790ee0595;p=elogind.git diff --git a/src/nspawn/nspawn.c b/src/nspawn/nspawn.c index f6f20abda..651a45126 100644 --- a/src/nspawn/nspawn.c +++ b/src/nspawn/nspawn.c @@ -2942,8 +2942,8 @@ int main(int argc, char *argv[]) { if (arg_directory) { assert(!arg_image); - if (path_equal(arg_directory, "/")) { - log_error("Spawning container on root directory not supported."); + if (path_equal(arg_directory, "/") && !arg_ephemeral) { + log_error("Spawning container on root directory is not supported. Consider using --ephemeral."); r = -EINVAL; goto finish; } @@ -2964,7 +2964,21 @@ int main(int argc, char *argv[]) { } else if (arg_ephemeral) { char *np; - r = tempfn_random(arg_directory, &np); + /* If the specified path is a mount point we + * generate the new snapshot immediately + * inside it under a random name. However if + * the specified is not a mount point we + * create the new snapshot in the parent + * directory, just next to it. */ + r = path_is_mount_point(arg_directory, false); + if (r < 0) { + log_error_errno(r, "Failed to determine whether directory %s is mount point: %m", arg_directory); + goto finish; + } + if (r > 0) + r = tempfn_random_child(arg_directory, &np); + else + r = tempfn_random(arg_directory, &np); if (r < 0) { log_error_errno(r, "Failed to generate name for snapshot: %m"); goto finish;