Skip to contentSkip to conversation

SystemD service management support

PATCH New Otavio Salvador 1 participant 4 messages Nov 4, 2011

lore
Share & tools
lore
#0 lore raw

cover SystemD service management support

The following changes since commit 120753e7437bc893462356ef153b67d38f7f696e:

php 5.3.6: import from OE classic (2011-11-03 15:02:20 +0100)

are available in the git repository at:
git://github.com/OSSystems/meta-oe master
https://github.com/OSSystems/meta-oe/tree/master

Otavio Salvador (3):
systemd-systemctl-native: add a systemctl wrapper systemd.bbclass: make easier handle service enabling
connman: refactor systemd packaging

 meta-oe/classes/systemd.bbclass                    |   78 ++++++++++++++++++++
 meta-oe/recipes-connectivity/connman/connman.inc   |   24 +-----
 .../recipes-connectivity/connman/connman_0.77.bb   |    2 +-
 .../systemd/systemd-systemctl-native.bb            |   13 +++
 .../systemd/systemd-systemctl-native/systemctl     |   51 +++++++++++++
 5 files changed, 148 insertions(+), 20 deletions(-)
 create mode 100644 meta-oe/classes/systemd.bbclass
 create mode 100644 meta-oe/recipes-core/systemd/systemd-systemctl-native.bb
 create mode 100755 meta-oe/recipes-core/systemd/systemd-systemctl-native/systemctl
Signature · 1 line
1.7.2.5
#1 lore raw

PATCH 1/3 systemd-systemctl-native: add a systemctl wrapper

The wrapper allows for enabling services at rootfs generation thus allowing systemd to be used in ready-only filesystems.

---
 .../systemd/systemd-systemctl-native.bb            |   13 +++++
 .../systemd/systemd-systemctl-native/systemctl     |   51 ++++++++++++++++++++
 2 files changed, 64 insertions(+), 0 deletions(-)
 create mode 100644 meta-oe/recipes-core/systemd/systemd-systemctl-native.bb
 create mode 100755 meta-oe/recipes-core/systemd/systemd-systemctl-native/systemctl
meta-oe/recipes-core/systemd/systemd-systemctl-native.bb new file +13 -0
new file mode 100644
index 0000000..3ee757e
@@ -0,0 +1,13 @@
+DESCRIPTION = "Wrapper to enable of systemd services"
+
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://${COREBASE}/LICENSE;md5=3f40d7994397109285ec7b81fdeb3b58"
+
+inherit native
+
+SRC_URI = "file://systemctl"
+
+do_install() {
+	install -d ${D}${bindir}
+	install -m 0755 ${WORKDIR}/systemctl ${D}${bindir}
+}
meta-oe/recipes-core/systemd/systemd-systemctl-native/systemctl new file +51 -0

51 lines not on this page · raw message

Signature · 1 line
1.7.2.5
#2 lore raw

PATCH 2/3 systemd.bbclass: make easier handle service enabling

In reply to Otavio Salvador

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.

---
 meta-oe/classes/systemd.bbclass |   78 +++++++++++++++++++++++++++++++++++++++
 1 files changed, 78 insertions(+), 0 deletions(-)
 create mode 100644 meta-oe/classes/systemd.bbclass
meta-oe/classes/systemd.bbclass new file +78 -0
new file mode 100644
index 0000000..83833db
@@ -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)
+}
Signature · 1 line
1.7.2.5
#3 lore raw

PATCH 3/3 connman: refactor systemd packaging

In reply to Otavio Salvador

This changes the recipe to use systemd.bbclass to avoid duplicating code and also fix the rdepends of connman-systemd on connman.

---
 meta-oe/recipes-connectivity/connman/connman.inc   |   24 ++++---------------
 .../recipes-connectivity/connman/connman_0.77.bb   |    2 +-
 2 files changed, 6 insertions(+), 20 deletions(-)
meta-oe/recipes-connectivity/connman/connman.inc +5 -19
index 8209502..88b2e51 100644
@@ -31,9 +31,12 @@ EXTRA_OECONF += "\
 INITSCRIPT_NAME = "connman"
 INITSCRIPT_PARAMS = "start 05 5 2 . stop 22 0 1 6 ."
 
+SYSTEMD_PACKAGES = "${PN}-systemd"
+SYSTEMD_SERVICE_${PN}-systemd = "connman.service"
+
 PARALLEL_MAKE = ""
 
-inherit autotools pkgconfig update-rc.d
+inherit autotools pkgconfig update-rc.d systemd
 
 do_configure_append() {
 	ln -sf . include/connman
@@ -84,24 +87,7 @@ FILES_${PN} = "${bindir}/* ${sbindir}/* ${libexecdir}/* ${libdir}/lib*.so.* \
 PACKAGES =+ "${PN}-systemd"
 # Package up systemd files
 FILES_${PN}-systemd += "${base_libdir}/systemd"
-
-pkg_postinst_connman-systemd() {
-	# can't do this offline
-	if [ "x$D" != "x" ]; then
-		exit 1
-	fi
-	
-	systemctl enable connman.service
-}
-
-pkg_postrm_connman-systemd() {
-	# can't do this offline
-	if [ "x$D" != "x" ]; then
-		exit 1
-	fi
-
-	systemctl disable connman.service
-}
+RDEPENDS_${PN}-systemd += "${PN}"
 
 # Needed when using DNS proxy feature
 RRECOMMENDS_${PN} += "dnsmasq-dbus"
meta-oe/recipes-connectivity/connman/connman_0.77.bb +1 -1
index 6d9c87c..9c93e51 100644
@@ -1,5 +1,5 @@
 require connman.inc
-PR = "r2"
+PR = "r3"
 
 EXTRA_OECONF += "\
   --disable-gtk-doc \
Signature · 1 line
1.7.2.5