diff options
author | Otavio Salvador <otavio@ossystems.com.br> | 2011-11-04 17:25:59 +0000 |
---|---|---|
committer | Koen Kooi <koen@dominion.thruhere.net> | 2011-11-04 19:41:19 +0100 |
commit | 39ce6e1fbba636b21f635ac9aa3c3155e259fb6c (patch) | |
tree | 8d15d8471c600bb08b02628ec1177d638a00499a /meta-oe/classes | |
parent | 79f35231a351a7df30db8b2037f274a41e8d9e58 (diff) | |
download | meta-openembedded-39ce6e1fbba636b21f635ac9aa3c3155e259fb6c.tar.gz |
systemd.bbclass: make easier handle service enabling
This generates the postinst/prerm/postrm routines for the package
specified in SYSTEMD_PACKAGES avoding code duplication and
centralizing the handling of it for easy maintainence work.
Signed-off-by: Otavio Salvador <otavio@ossystems.com.br>
Signed-off-by: Koen Kooi <koen@dominion.thruhere.net>
Diffstat (limited to 'meta-oe/classes')
-rw-r--r-- | meta-oe/classes/systemd.bbclass | 78 |
1 files changed, 78 insertions, 0 deletions
diff --git a/meta-oe/classes/systemd.bbclass b/meta-oe/classes/systemd.bbclass new file mode 100644 index 0000000000..83833db6c7 --- /dev/null +++ b/meta-oe/classes/systemd.bbclass @@ -0,0 +1,78 @@ +SYSTEMDPN ?= "${PN}" + +DEPENDS_append = " systemd-systemctl-native" +RDEPENDS_${SYSTEMDPN}_append = " systemd" + +systemd_postinst() { +OPTS="" + +if [ -n "$D" ]; then + OPTS="--root=$D" +fi + +systemctl $OPTS enable ${SYSTEMD_SERVICE} + +if [ -z "$D" ]; then + systemctl start ${SYSTEMD_SERVICE} +fi +} + +systemd_prerm() { +if [ -z "$D" ]; then + systemctl stop ${SYSTEMD_SERVICE} +fi +} + +systemd_postrm() { +systemctl disable ${SYSTEMD_SERVICE} +} + +def systemd_after_parse(d): + if bb.data.getVar('SYSTEMD_PACKAGES', d) == None: + if bb.data.getVar('SYSTEMD_SERVICE', d) == None: + raise bb.build.FuncFailed, "%s inherits systemd but doesn't set SYSTEMD_SERVICE" % bb.data.getVar('FILE', d) + +python __anonymous() { + systemd_after_parse(d) +} + +python populate_packages_prepend () { + def systemd_package(pkg): + bb.debug(1, 'adding systemd calls to postinst/postrm for %s' % pkg) + localdata = bb.data.createCopy(d) + overrides = bb.data.getVar("OVERRIDES", localdata, 1) + bb.data.setVar("OVERRIDES", "%s:%s" % (pkg, overrides), localdata) + bb.data.update_data(localdata) + + """ + systemd postinst is appended here because pkg_postinst may require to + execute on the target. Not doing so may cause systemd postinst invoked + twice to cause unwanted warnings. + """ + postinst = bb.data.getVar('pkg_postinst', localdata, 1) + if not postinst: + postinst = '#!/bin/sh\n' + postinst += bb.data.getVar('systemd_postinst', localdata, 1) + bb.data.setVar('pkg_postinst_%s' % pkg, postinst, d) + + prerm = bb.data.getVar('pkg_prerm', localdata, 1) + if not prerm: + prerm = '#!/bin/sh\n' + prerm += bb.data.getVar('systemd_prerm', localdata, 1) + bb.data.setVar('pkg_prerm_%s' % pkg, prerm, d) + + postrm = bb.data.getVar('pkg_postrm', localdata, 1) + if not postrm: + postrm = '#!/bin/sh\n' + postrm += bb.data.getVar('systemd_postrm', localdata, 1) + bb.data.setVar('pkg_postrm_%s' % pkg, postrm, d) + + pkgs = bb.data.getVar('SYSTEMD_PACKAGES', d, 1) + if pkgs == None: + pkgs = bb.data.getVar('SYSTEMDPN', d, 1) + packages = (bb.data.getVar('PACKAGES', d, 1) or "").split() + if not pkgs in packages and packages != []: + pkgs = packages[0] + for pkg in pkgs.split(): + systemd_package(pkg) +} |