summaryrefslogtreecommitdiffstats
path: root/meta/classes/systemd.bbclass
diff options
context:
space:
mode:
authorJonas Bonn <jonas@norrbonn.se>2019-05-02 22:09:42 +0100
committerRichard Purdie <richard.purdie@linuxfoundation.org>2019-05-02 22:20:24 +0100
commit154abbc3296eded11d2bbe3e102470b6986d42cd (patch)
tree09c25188f05fc1e29cd6f485c33a34f86a47fdba /meta/classes/systemd.bbclass
parent3150253898babce70333376d22090b56b4a70bfb (diff)
downloadopenembedded-core-contrib-154abbc3296eded11d2bbe3e102470b6986d42cd.tar.gz
systemd: create preset files instead of installing in image
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>
Diffstat (limited to 'meta/classes/systemd.bbclass')
-rw-r--r--meta/classes/systemd.bbclass41
1 files changed, 19 insertions, 22 deletions
diff --git a/meta/classes/systemd.bbclass b/meta/classes/systemd.bbclass
index c8f4fdec88..3935685c18 100644
--- a/meta/classes/systemd.bbclass
+++ b/meta/classes/systemd.bbclass
@@ -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()
}