1
0
mirror of https://git.yoctoproject.org/poky synced 2026-06-03 13:49:49 +00:00

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.

(From OE-Core rev: 154abbc3296eded11d2bbe3e102470b6986d42cd)

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>
This commit is contained in:
Jonas Bonn
2019-05-02 22:09:42 +01:00
committed by Richard Purdie
parent 92d9c493c4
commit bc2ca0ea7e
+19 -22
View File
@@ -16,45 +16,30 @@ python __anonymous() {
# from doing any work so that pure-systemd images don't have redundant init # from doing any work so that pure-systemd images don't have redundant init
# files. # files.
if bb.utils.contains('DISTRO_FEATURES', 'systemd', True, False, d): 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): if not bb.utils.contains('DISTRO_FEATURES', 'sysvinit', True, False, d):
d.setVar("INHIBIT_UPDATERCD_BBCLASS", "1") d.setVar("INHIBIT_UPDATERCD_BBCLASS", "1")
} }
systemd_postinst() { systemd_postinst() {
OPTS=""
if [ -n "$D" ]; then
OPTS="--root=$D"
fi
if type systemctl >/dev/null 2>/dev/null; then if type systemctl >/dev/null 2>/dev/null; then
if [ -z "$D" ]; then if [ -z "$D" ]; then
systemctl daemon-reload systemctl daemon-reload
fi systemctl preset "${SYSTEMD_SERVICE_ESCAPED}"
systemctl $OPTS ${SYSTEMD_AUTO_ENABLE} ${SYSTEMD_SERVICE_ESCAPED} if [ "${SYSTEMD_AUTO_ENABLE}" = "enable" ]; then
systemctl --no-block restart "${SYSTEMD_SERVICE_ESCAPED}"
if [ -z "$D" -a "${SYSTEMD_AUTO_ENABLE}" = "enable" ]; then fi
systemctl --no-block restart ${SYSTEMD_SERVICE_ESCAPED}
fi fi
fi fi
} }
systemd_prerm() { systemd_prerm() {
OPTS=""
if [ -n "$D" ]; then
OPTS="--root=$D"
fi
if type systemctl >/dev/null 2>/dev/null; then if type systemctl >/dev/null 2>/dev/null; then
if [ -z "$D" ]; then if [ -z "$D" ]; then
systemctl stop ${SYSTEMD_SERVICE_ESCAPED} systemctl stop "${SYSTEMD_SERVICE_ESCAPED}"
fi
systemctl $OPTS disable ${SYSTEMD_SERVICE_ESCAPED} systemctl disable "${SYSTEMD_SERVICE_ESCAPED}"
fi
fi fi
} }
@@ -177,12 +162,24 @@ python systemd_populate_packages() {
else: else:
bb.fatal("SYSTEMD_SERVICE_%s value %s does not exist" % (pkg_systemd, service)) 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 # Run all modifications once when creating package
if os.path.exists(d.getVar("D")): if os.path.exists(d.getVar("D")):
for pkg in d.getVar('SYSTEMD_PACKAGES').split(): for pkg in d.getVar('SYSTEMD_PACKAGES').split():
systemd_check_package(pkg) systemd_check_package(pkg)
if d.getVar('SYSTEMD_SERVICE_' + pkg): if d.getVar('SYSTEMD_SERVICE_' + pkg):
systemd_generate_package_scripts(pkg) systemd_generate_package_scripts(pkg)
systemd_create_presets(pkg)
systemd_check_services() systemd_check_services()
} }