From 66e411811b8090d1bfd6620fc84472d83f723fa1 Mon Sep 17 00:00:00 2001 From: Lennart Poettering Date: Fri, 15 Mar 2013 16:41:40 +0100 Subject: 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.) --- man/sd_booted.xml | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) (limited to 'man') diff --git a/man/sd_booted.xml b/man/sd_booted.xml index 34f2cbfbc8..ce5a34dc86 100644 --- a/man/sd_booted.xml +++ b/man/sd_booted.xml @@ -85,11 +85,10 @@ implementation. Internally, this function checks whether the - /sys/fs/cgroup/systemd virtual file - system is mounted, by comparing the st_dev value of - the stat() data of - /sys/fs/cgroup and - /sys/fs/cgroup/systemd. + directory /run/systemd/system/ + exists. A simple check like this can also be + implemented trivially in shell or any other + language. For details about the algorithm check the liberally licensed reference implementation sources: -- cgit v1.2.1