Patchwork [1/1] alsa-state: do not install the init script in case of systemd

login
register
mail settings
Submitter Qi.Chen@windriver.com
Date Feb. 13, 2014, 7:32 a.m.
Message ID <7394b4a34e973a1655132709c054a272cf367252.1392276667.git.Qi.Chen@windriver.com>
Download mbox | patch
Permalink /patch/66685/
State New
Headers show

Comments

Qi.Chen@windriver.com - Feb. 13, 2014, 7:32 a.m.
As the corresponding service files have already been provided by
the alsa-utils-alsactl package, the init script is really not needed.
So we do not install it in a systemd based image.

[YOCTO #4420]

Signed-off-by: Chen Qi <Qi.Chen@windriver.com>
---
 meta/recipes-bsp/alsa-state/alsa-state.bb |   14 +++++++++-----
 1 file changed, 9 insertions(+), 5 deletions(-)
Ross Burton - Feb. 13, 2014, 12:51 p.m.
On 13 February 2014 07:32, Chen Qi <Qi.Chen@windriver.com> wrote:
> As the corresponding service files have already been provided by
> the alsa-utils-alsactl package, the init script is really not needed.
> So we do not install it in a systemd based image.

Remember that the presence of the systemd DISTRO_FEATURE doesn't mean
that systemd is actually being used: the distro could have systemd and
sysvinit features, and the choice of init system is decided at image
time.  In this case if a distro was using sysvinit and systemd, your
patch has just deleted the init scripts that are required for sysvinit
boots.

For every situation where there is both a service file and an init
file you must always remember that it's possible that both are to be
installed.  To avoid systemd invoking both the systemd unit and the
sysvinit script on boot it's best to ensure they have the same name
(systemd will then ignore the init script).  If that's not possible
then you can use "systemctl mask" in a postinst to hide the init
script from systemd.  There's plenty of examples for this in oe-core.

Ross

Patch

diff --git a/meta/recipes-bsp/alsa-state/alsa-state.bb b/meta/recipes-bsp/alsa-state/alsa-state.bb
index 552fcfc..6dbc1aa 100644
--- a/meta/recipes-bsp/alsa-state/alsa-state.bb
+++ b/meta/recipes-bsp/alsa-state/alsa-state.bb
@@ -18,16 +18,20 @@  SRC_URI = "\
   file://alsa-state-init \
 "
 
-inherit update-rc.d
+inherit update-rc.d systemd
 
 INITSCRIPT_NAME = "alsa-state"
 INITSCRIPT_PARAMS = "start 39 S . stop 31 0 6 ."
 
 do_install() {
-    sed -i -e "s:#STATEDIR#:${localstatedir}/lib/alsa:g" ${WORKDIR}/alsa-state-init
-    install -d ${D}${sysconfdir}/init.d
-    install -m 0755 ${WORKDIR}/alsa-state-init ${D}${sysconfdir}/init.d/alsa-state
-
+    # The alsa-utils-alsactl already provides corresponding systemd unit files.
+    # So the init script should not be installed in a systemd based image.
+    install -d ${D}${sysconfdir}
+    if ${@base_contains('DISTRO_FEATURES','systemd','false','true',d)}; then
+	sed -i -e "s:#STATEDIR#:${localstatedir}/lib/alsa:g" ${WORKDIR}/alsa-state-init
+	install -d ${D}${sysconfdir}/init.d
+	install -m 0755 ${WORKDIR}/alsa-state-init ${D}${sysconfdir}/init.d/alsa-state
+    fi
     install -d ${D}/${localstatedir}/lib/alsa
     install -m 0644 ${WORKDIR}/asound.conf ${D}${sysconfdir}
     install -m 0644 ${WORKDIR}/*.state ${D}${localstatedir}/lib/alsa