diff options
author | Lennart Poettering <lennart@poettering.net> | 2013-03-15 16:41:40 +0100 |
---|---|---|
committer | Lennart Poettering <lennart@poettering.net> | 2013-03-15 16:49:08 +0100 |
commit | 66e411811b8090d1bfd6620fc84472d83f723fa1 (patch) | |
tree | 3762cd014c5bd2b0ba771661ac08975ab43a05dd /src/core | |
parent | 961e4526925b7b1e1d3582f2fc9fb38035e2b5fb (diff) |
sd-booted: update sd_booted() check a bit
Previously we were testing whether /sys/fs/cgroup/systemd/ was a mount
point. This might be problematic however, when the cgroup trees are bind
mounted into a container from the host (which should be absolutely
valid), which might create the impression that the container was running
systemd, but only the host actually is.
Replace this by a check for the existance of the directory
/run/systemd/system/, which should work unconditionally, since /run can
never be a bind mount but *must* be a tmpfs on systemd systems, which is
flushed at boots. This means that data in /run always reflects
information about the current boot, and only of the local container,
which makes it the perfect choice for a check like this.
(As side effect this is nice to Ubuntu people who now use logind with
the systemd cgroup hierarchy, where the old sd_booted() check misdetects
systemd, even though they still run legacy Upstart.)
Diffstat (limited to 'src/core')
-rw-r--r-- | src/core/mount-setup.c | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/src/core/mount-setup.c b/src/core/mount-setup.c index 42cdc6dc52..ce10be944a 100644 --- a/src/core/mount-setup.c +++ b/src/core/mount-setup.c @@ -440,7 +440,11 @@ int mount_setup(bool loaded_policy) { if (mount(NULL, "/", NULL, MS_REC|MS_SHARED, NULL) < 0) log_warning("Failed to set up the root directory for shared mount propagation: %m"); - /* Create a few directories we always want around */ + /* Create a few directories we always want around, Note that + * sd_booted() checks for /run/systemd/system, so this mkdir + * really needs to stay for good, otherwise software that + * copied sd-daemon.c into their sources will misdetect + * systemd. */ mkdir_label("/run/systemd", 0755); mkdir_label("/run/systemd/system", 0755); |