systemd-detect-virt would print "none" when using nspawn to run a shell inside a container and then running systemd-detect-virt in it, because the shell would be PID 1, not the actuall systemd-detect-virt process. --- src/shared/virt.c | 19 ++++++------------- 1 file changed, 6 insertions(+), 13 deletions(-)
diff --git a/src/shared/virt.c b/src/shared/virt.c index f9c4e67..298e005 100644 --- a/src/shared/virt.c +++ b/src/shared/virt.c @@ -275,18 +275,10 @@ int detect_container(const char **id) { goto finish; } - if (getpid() == 1) { - /* If we are PID 1 we can just check our own - * environment variable */ - - e = getenv("container"); - if (isempty(e)) { - r = 0; - goto finish; - } - } else { - - /* Otherwise, PID 1 dropped this information into a + /* Check our own environment variable */ + e = getenv("container"); + if (isempty(e)) { + /* PID 1 dropped this information into a * file in /run. This is better than accessing * /proc/1/environ, since we don't need CAP_SYS_PTRACE * for that. */ @@ -300,7 +292,8 @@ int detect_container(const char **id) { return r; e = m; - } + } else + r = 0; /* We only recognize a selected few here, since we want to * enforce a redacted namespace */ -- 1.9.3 _______________________________________________ systemd-devel mailing list systemd-devel@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/systemd-devel