]> code.ossystems Code Review - openembedded-core.git/commitdiff
systemd: create preset files instead of installing in image
authorJonas Bonn <jonas@norrbonn.se>
Thu, 2 May 2019 21:09:42 +0000 (22:09 +0100)
committerRichard Purdie <richard.purdie@linuxfoundation.org>
Thu, 2 May 2019 21:20:24 +0000 (22:20 +0100)
At first boot, systemd will create the /etc/systemd/system directory
from service preset files.  As such, for a normal, writable /etc
(writable rootfs), there is no need to set up this directory at image
creation time.

This patch changes the systemd machinery to create preset files and to
rely on systemd to do the service enablement.

This breaks the read-only-rootfs case; there's a fix for this in a
follow-up patch.

Signed-off-by: Jonas Bonn <jonas@norrbonn.se>
Signed-off-by: Alex Kiernan <alex.kiernan@gmail.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
meta/classes/systemd.bbclass

index c8f4fdec88dc14578179a35362ebc2ec586a545d..3935685c18cb0c20a584f77521253a16be4437f8 100644 (file)
@@ -16,45 +16,30 @@ python __anonymous() {
     # from doing any work so that pure-systemd images don't have redundant init
     # files.
     if bb.utils.contains('DISTRO_FEATURES', 'systemd', True, False, d):
-        d.appendVar("DEPENDS", " systemd-systemctl-native")
-        d.appendVar("PACKAGE_WRITE_DEPS", " systemd-systemctl-native")
         if not bb.utils.contains('DISTRO_FEATURES', 'sysvinit', True, False, d):
             d.setVar("INHIBIT_UPDATERCD_BBCLASS", "1")
 }
 
 systemd_postinst() {
-OPTS=""
-
-if [ -n "$D" ]; then
-    OPTS="--root=$D"
-fi
-
 if type systemctl >/dev/null 2>/dev/null; then
        if [ -z "$D" ]; then
                systemctl daemon-reload
-       fi
-
-       systemctl $OPTS ${SYSTEMD_AUTO_ENABLE} ${SYSTEMD_SERVICE_ESCAPED}
+               systemctl preset "${SYSTEMD_SERVICE_ESCAPED}"
 
-       if [ -z "$D" -a "${SYSTEMD_AUTO_ENABLE}" = "enable" ]; then
-               systemctl --no-block restart ${SYSTEMD_SERVICE_ESCAPED}
+               if [ "${SYSTEMD_AUTO_ENABLE}" = "enable" ]; then
+                       systemctl --no-block restart "${SYSTEMD_SERVICE_ESCAPED}"
+               fi
        fi
 fi
 }
 
 systemd_prerm() {
-OPTS=""
-
-if [ -n "$D" ]; then
-    OPTS="--root=$D"
-fi
-
 if type systemctl >/dev/null 2>/dev/null; then
        if [ -z "$D" ]; then
-               systemctl stop ${SYSTEMD_SERVICE_ESCAPED}
-       fi
+               systemctl stop "${SYSTEMD_SERVICE_ESCAPED}"
 
-       systemctl $OPTS disable ${SYSTEMD_SERVICE_ESCAPED}
+               systemctl disable "${SYSTEMD_SERVICE_ESCAPED}"
+       fi
 fi
 }
 
@@ -177,12 +162,24 @@ python systemd_populate_packages() {
                 else:
                     bb.fatal("SYSTEMD_SERVICE_%s value %s does not exist" % (pkg_systemd, service))
 
+    def systemd_create_presets(pkg):
+        action = get_package_var(d, 'SYSTEMD_AUTO_ENABLE', pkg)
+        if action not in ("enable", "disable"):
+            bb.fatal("SYSTEMD_AUTO_ENABLE_%s '%s' is not 'enable' or 'disable'" % (pkg, action))
+        presetf = oe.path.join(d.getVar("PKGD"), d.getVar("systemd_unitdir"), "system-preset/98-%s.preset" % pkg)
+        bb.utils.mkdirhier(os.path.dirname(presetf))
+        with open(presetf, 'a') as fd:
+            for service in d.getVar('SYSTEMD_SERVICE_%s' % pkg).split():
+                fd.write("%s %s\n" % (action,service))
+        d.appendVar("FILES_%s" % pkg, ' ' + oe.path.join(d.getVar("systemd_unitdir"), "system-preset/98-%s.preset" % pkg))
+
     # Run all modifications once when creating package
     if os.path.exists(d.getVar("D")):
         for pkg in d.getVar('SYSTEMD_PACKAGES').split():
             systemd_check_package(pkg)
             if d.getVar('SYSTEMD_SERVICE_' + pkg):
                 systemd_generate_package_scripts(pkg)
+                systemd_create_presets(pkg)
         systemd_check_services()
 }