weston-init: Refactor, simplify, fix 33/22333/4
authorJosé Bollo <jose.bollo@iot.bzh>
Thu, 5 Sep 2019 14:38:20 +0000 (16:38 +0200)
committerJan-Simon Moeller <jsmoeller@linuxfoundation.org>
Mon, 16 Sep 2019 12:07:56 +0000 (12:07 +0000)
The recipe weston-init was setting smack labels of input devices
to ^. This had the effect to enforce processes that wanted to
read /dev/input/eventXX to have the Smack label System.

I changed the label to * and keep the protection of groups.

At the same time, a refactoring of the recipe make it cleaner to
maintain.

Bug-AGL: SPEC-2796

Change-Id: I3e2345d48a40b15254e68e25bbfcd9b22fcd8629
Signed-off-by: José Bollo <jose.bollo@iot.bzh>
meta-agl-profile-graphical/recipes-graphics/wayland/weston-init.bbappend
meta-agl-profile-graphical/recipes-graphics/wayland/weston-init/tmpfiles.conf.in [moved from meta-agl-profile-graphical/recipes-graphics/wayland/weston-init/weston_tmpfiles.conf with 100% similarity]
meta-agl-profile-graphical/recipes-graphics/wayland/weston-init/weston.conf.in [moved from meta-agl-profile-graphical/recipes-graphics/wayland/weston-init/weston.service.add with 75% similarity]
meta-agl-profile-graphical/recipes-graphics/wayland/weston-init/zz-dri-imx.rules.in [new file with mode: 0644]
meta-agl-profile-graphical/recipes-graphics/wayland/weston-init/zz-dri.rules.in [new file with mode: 0644]
meta-agl-profile-graphical/recipes-graphics/wayland/weston-init/zz-input.rules [new file with mode: 0644]
meta-agl-profile-graphical/recipes-graphics/wayland/weston-init/zz-tty.rules.in [new file with mode: 0644]

index 910cf5a..398cd1c 100644 (file)
@@ -6,76 +6,67 @@ inherit agl-graphical
 WESTONSTART ??= "/usr/bin/weston ${WESTONARGS}"
 WESTONSTART_append = " ${@bb.utils.contains("IMAGE_FEATURES", "debug-tweaks", " --log=${DISPLAY_XDG_RUNTIME_DIR}/weston.log", "",d)}"
 
-SRC_URI += " \
-    file://weston_tmpfiles.conf \
-    file://weston.service.add \
+DROPIN_NAME = "weston-init"
+
+WIFILES = " \
+    file://weston.conf.in \
+    file://tmpfiles.conf.in \
+    file://zz-dri.rules.in \
+    file://zz-input.rules \
+    file://zz-tty.rules.in \
 "
 
-do_install_append() {
-    sed -i "/\[Unit\]/aConflicts=getty@tty${WESTONTTY}.service" \
-           ${D}${systemd_system_unitdir}/weston.service
-
-    sed -i "/\[Service\]/r ${S}/weston.service.add" \
-           ${D}${systemd_system_unitdir}/weston.service
-
-    if ! grep -q '^Group=' ${D}${systemd_system_unitdir}/weston.service; then
-        sed -i "/\[Service\]/aGroup=root" ${D}${systemd_system_unitdir}/weston.service
-    fi
-    if ! grep -q '^User=' ${D}${systemd_system_unitdir}/weston.service; then
-        sed -i "/\[Service\]/aUser=root" ${D}${systemd_system_unitdir}/weston.service
-    fi
-
-    sed -e 's,User=root,User=${WESTONUSER},g' \
-        -e 's,Group=root,Group=${WESTONGROUP},g' \
-        -e 's,ExecStart=.*,ExecStart=${WESTONSTART},g' \
-        -e 's,@WESTONTTY@,${WESTONTTY},g' \
-        -e 's,@XDG_RUNTIME_DIR@,${DISPLAY_XDG_RUNTIME_DIR},g' \
-       -e '/PAMName=/d' \
-        -i ${D}${systemd_system_unitdir}/weston.service
-
-    # Add a rule to ensure the 'display' user has permissions to
-    # open the graphics device
-    install -d ${D}${sysconfdir}/init.d
-    install -d ${D}${sysconfdir}/udev/rules.d
-    cat >${D}${sysconfdir}/udev/rules.d/zz-dri.rules <<'EOF'
-SUBSYSTEM=="drm", MODE="0660", GROUP="${WESTONGROUP}", SECLABEL{smack}="*", TAG+="systemd", ENV{SYSTEMD_WANTS}="weston.service"
-EOF
-
-    # user 'display' must own /dev/tty${WESTONTTY} for weston to start correctly
-    cat >${D}${sysconfdir}/udev/rules.d/zz-tty.rules <<'EOF'
-SUBSYSTEM=="tty", KERNEL=="tty${WESTONTTY}", OWNER="${WESTONUSER}", SECLABEL{smack}="^", TAG+="systemd", ENV{SYSTEMD_WANTS}="weston.service"
-EOF
-
-    # user 'display' must also be able to access /dev/input/*
-    cat >${D}${sysconfdir}/udev/rules.d/zz-input.rules <<'EOF'
-SUBSYSTEM=="input", MODE="0660", GROUP="input", SECLABEL{smack}="^", TAG+="systemd", ENV{SYSTEMD_WANTS}="weston.service"
-EOF
-
-    # user 'display' must also be able to access /dev/media*, etc.
-    cat >${D}${sysconfdir}/udev/rules.d/zz-remote-display.rules <<'EOF'
-SUBSYSTEM=="media", MODE="0660", GROUP="display", SECLABEL{smack}="*", TAG+="systemd", ENV{SYSTEMD_WANTS}="weston.service"
-SUBSYSTEM=="video4linux", MODE="0660", GROUP="display", SECLABEL{smack}="*", TAG+="systemd", ENV{SYSTEMD_WANTS}="weston.service"
-KERNEL=="uvcs", SUBSYSTEM=="misc", MODE="0660", GROUP="display", SECLABEL{smack}="*"
-KERNEL=="rgnmm", SUBSYSTEM=="misc", MODE="0660", GROUP="display", SECLABEL{smack}="*"
-EOF
-
-    install -d ${D}${sysconfdir}/tmpfiles.d
-    install -Dm755 ${WORKDIR}/weston_tmpfiles.conf ${D}/${libdir}/tmpfiles.d/weston.conf
-
-    sed -e 's,@WESTONUSER@,${WESTONUSER},g' \
-        -e 's,@WESTONGROUP@,${WESTONGROUP},g' \
-        -i ${D}/${libdir}/tmpfiles.d/weston.conf
-}
+WIFILES_append_imx = " \
+    file://zz-dri-imx.rules.in \
+"
 
-do_install_append_imx() {
+SRC_URI_append = " ${WIFILES}"
 
-    install -d ${D}${sysconfdir}/udev/rules.d
-    cat >>${D}${sysconfdir}/udev/rules.d/zz-dri.rules <<'EOF'
-SUBSYSTEM=="gpu_class", MODE="0660", GROUP="${WESTONGROUP}", SECLABEL{smack}="*"
-EOF
+do_install_append() {
 
+    # files
+    files=$(echo ${WIFILES} | sed s,file://,,g)
+
+    # process ".in" files
+    for f in ${files}; do
+        g=${f%.in}
+        if [ "${f}" != "${g}" ]; then
+            sed -e "s,@WESTONUSER@,${WESTONUSER},g" \
+                -e "s,@WESTONGROUP@,${WESTONGROUP},g" \
+                -e "s,@XDG_RUNTIME_DIR@,${DISPLAY_XDG_RUNTIME_DIR},g" \
+                -e "s,@WESTONTTY@,${WESTONTTY},g" \
+                -e "s,@WESTONSTART@,${WESTONSTART},g" \
+                    ${WORKDIR}/${f} > ${WORKDIR}/${g}
+        fi
+    done
+
+    # removes any unexpected entry from weston.service
+    for x in Group User ExecStart PAMName; do
+        sed -i "/^ *$x *=/d" ${D}${systemd_system_unitdir}/weston.service
+    done
+
+    # install weston drop-in
+    install -d ${D}${systemd_system_unitdir}/weston.service.d
+    install -m644 ${WORKDIR}/weston.conf ${D}/${systemd_system_unitdir}/weston.service.d/${DROPIN_NAME}.conf
+
+    # install tmpfiles drop-in
+    install -d ${D}${libdir}/tmpfiles.d
+    install -m644 ${WORKDIR}/tmpfiles.conf ${D}${libdir}/tmpfiles.d/${DROPIN_NAME}.conf
+
+    # install udev rules
+    install -d ${D}${sysconfdir}/udev/rules.d
+    for f in ${files}; do
+        g=${f%.in}
+        h=${g%.rules}
+        if [ "${g}" != "${h}" ]; then
+            install -m644 ${WORKDIR}/${g} ${D}${sysconfdir}/udev/rules.d
+        fi
+    done
 }
 
-FILES_${PN} += "${libdir}/tmpfiles.d/*.conf"
+FILES_${PN} += " \
+    ${libdir}/tmpfiles.d/*.conf \
+    ${systemd_system_unitdir}/weston.service.d/${DROPIN_NAME}.conf \
+"
 
 
@@ -1,8 +1,14 @@
+[Unit]
+Conflicts=getty@tty@WESTONTTY@.service
+[Service]
 Type=notify
+User=@WESTONUSER@
+Group=@WESTONGROUP@
 Environment="XDG_RUNTIME_DIR=@XDG_RUNTIME_DIR@"
 Environment="XDG_RUNTIMESHARE_DIR=@XDG_RUNTIME_DIR@/share"
 ExecStartPre=/bin/mkdir -p @XDG_RUNTIME_DIR@/share
 ExecStartPre=+/usr/bin/chsmack -a User::App-Shared -t @XDG_RUNTIME_DIR@/share
+ExecStart=@WESTONSTART@
 TTYPath=/dev/tty@WESTONTTY@
 StandardInput=tty
 TTYReset=yes
diff --git a/meta-agl-profile-graphical/recipes-graphics/wayland/weston-init/zz-dri-imx.rules.in b/meta-agl-profile-graphical/recipes-graphics/wayland/weston-init/zz-dri-imx.rules.in
new file mode 100644 (file)
index 0000000..585db6b
--- /dev/null
@@ -0,0 +1,2 @@
+SUBSYSTEM=="gpu_class", MODE="0660", GROUP="@WESTONGROUP@", SECLABEL{smack}="*"
+
diff --git a/meta-agl-profile-graphical/recipes-graphics/wayland/weston-init/zz-dri.rules.in b/meta-agl-profile-graphical/recipes-graphics/wayland/weston-init/zz-dri.rules.in
new file mode 100644 (file)
index 0000000..707d12e
--- /dev/null
@@ -0,0 +1 @@
+SUBSYSTEM=="drm", MODE="0660", GROUP="@WESTONGROUP@", SECLABEL{smack}="*", TAG+="systemd", ENV{SYSTEMD_WANTS}="weston.service"
diff --git a/meta-agl-profile-graphical/recipes-graphics/wayland/weston-init/zz-input.rules b/meta-agl-profile-graphical/recipes-graphics/wayland/weston-init/zz-input.rules
new file mode 100644 (file)
index 0000000..c084213
--- /dev/null
@@ -0,0 +1 @@
+SUBSYSTEM=="input", MODE="0660", GROUP="input", SECLABEL{smack}="*", TAG+="systemd", ENV{SYSTEMD_WANTS}="weston.service"
diff --git a/meta-agl-profile-graphical/recipes-graphics/wayland/weston-init/zz-tty.rules.in b/meta-agl-profile-graphical/recipes-graphics/wayland/weston-init/zz-tty.rules.in
new file mode 100644 (file)
index 0000000..bfdf55b
--- /dev/null
@@ -0,0 +1 @@
+SUBSYSTEM=="tty", KERNEL=="tty@WESTONTTY@", OWNER="@WESTONUSER@", SECLABEL{smack}="*", TAG+="systemd", ENV{SYSTEMD_WANTS}="weston.service"