meta-agl-core: Update weston/agl-compositor init 82/26782/3
authorScott Murray <scott.murray@konsulko.com>
Tue, 2 Nov 2021 23:29:39 +0000 (19:29 -0400)
committerJan-Simon Moeller <jsmoeller@linuxfoundation.org>
Thu, 4 Nov 2021 14:24:24 +0000 (14:24 +0000)
Changes/rework to get weston and agl-compositor starting again:
- Since an upgrade to a newer Yocto release is in the near future,
  update weston-init and associated files to effectively backport
  the new weston startup behavior added in 3.3/Hardknott as our
  new base.  The changes mean weston or agl-compositor will by
  default start as a "weston" user that replaces the "display"
  user that had been added previously in AGL.  The goal is that
  any new work done on top of this base should hopefully work
  on 3.5/Kirkstone without further substantial rework.
- Add new agl-compositor-init recipe that replaces the previous
  weston-init bbappend in meta-agl-demo.  Having it as a separate
  recipe in core so weston or agl-compositor "just work" in simple
  test images seems like a better approach.
- As part of the above, drop the --log option to agl-compositor
  in its command-line to address SPEC-4112.
- Add SYSTEMD_DEFAULT_TARGET definition to agl-image-weston and
  in a new core-image-weston bbappend to result in agl-compositor
  and weston starting automatically in the corresponding images.
  This is required with the new weston-init behavior until we
  upgrade past 3.3/Hardknott, when "weston" in IMAGE_FEATURES
  can be used instead.

Bug-AGL: SPEC-4121, SPEC-4112

Signed-off-by: Scott Murray <scott.murray@konsulko.com>
Change-Id: Ia64894416846569abf8e744006ef26637279a895
Reviewed-on: https://gerrit.automotivelinux.org/gerrit/c/AGL/meta-agl/+/26782
Reviewed-by: Jan-Simon Moeller <jsmoeller@linuxfoundation.org>
Tested-by: Jan-Simon Moeller <jsmoeller@linuxfoundation.org>
12 files changed:
meta-agl-core/files/group
meta-agl-core/files/passwd
meta-agl-core/recipes-graphics/wayland/agl-compositor-init.bb [new file with mode: 0644]
meta-agl-core/recipes-graphics/wayland/agl-compositor-init/agl-compositor.conf.in [new file with mode: 0644]
meta-agl-core/recipes-graphics/wayland/agl-compositor_git.bb
meta-agl-core/recipes-graphics/wayland/weston-init/weston-autologin [new file with mode: 0644]
meta-agl-core/recipes-graphics/wayland/weston-init/weston.service [new file with mode: 0644]
meta-agl-core/recipes-graphics/wayland/weston-init/weston.socket [new file with mode: 0644]
meta-agl-core/recipes-graphics/wayland/weston-init_aglcore.inc
meta-agl-core/recipes-platform/images/agl-image-weston.inc
meta-agl-core/recipes-platform/images/core-image-weston.bbappend [new file with mode: 0644]
meta-agl-core/recipes-platform/images/core-image-weston_aglcore.inc [new file with mode: 0644]

index 3391cb1..f524489 100644 (file)
@@ -84,7 +84,8 @@ vmail::958:
 opensaf::957:
 lldpd::956:
 postdrop::954:
-display::200:
+weston::200:
+wayland::201:
 agl-driver::1001:
 agl-passenger::1002:
 systemd-network::1005:
index 9673c1a..4bbd6f8 100644 (file)
@@ -56,7 +56,7 @@ vmail::958:958:::
 opensaf::957:957:::
 lldpd::956:956:::
 cyrus::955:8:::
-display::200:200:::
+weston::200:200:::
 systemd-network::1005:1005:::
 systemd-resolve::1006:1006:::
 mosquitto::1007:1007:::
diff --git a/meta-agl-core/recipes-graphics/wayland/agl-compositor-init.bb b/meta-agl-core/recipes-graphics/wayland/agl-compositor-init.bb
new file mode 100644 (file)
index 0000000..0cdf4d5
--- /dev/null
@@ -0,0 +1,40 @@
+SUMMARY = "Startup systemd unit drop-in file for the AGL Wayland compositor"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://${COREBASE}/meta/COPYING.MIT;md5=3da9cfbcb788c80a0384361b4de20420"
+
+PACKAGE_ARCH = "${MACHINE_ARCH}"
+
+SRC_URI = "file://agl-compositor.conf.in"
+
+S = "${WORKDIR}"
+
+AGL_COMPOSITOR_ARGS ?= " --config ${sysconfdir}/xdg/weston/weston.ini --idle-time=0"
+AGL_COMPOSITOR_USE_PIXMAN ??= "0"
+
+AGL_COMPOSITOR_ARGS:append = " ${@bb.utils.contains("DISTRO_FEATURES", "agl-devel", " --debug", "",d)}"
+AGL_COMPOSITOR_ARGS:append = " ${@bb.utils.contains("WESTON_USE_PIXMAN", "1", " --use-pixman", "",d)}"
+
+do_install() {
+    # Process ".in" files
+    files=agl-compositor.conf.in
+    for f in ${files}; do
+        g=${f%.in}
+        if [ "${f}" != "${g}" ]; then
+            sed -e "s,@AGL_COMPOSITOR_ARGS@,${AGL_COMPOSITOR_ARGS},g" \
+                ${WORKDIR}/${f} > ${WORKDIR}/${g}
+        fi
+    done
+
+    # Install Weston systemd service drop-in
+    install -d ${D}${systemd_system_unitdir}/weston.service.d
+    install -m644 ${WORKDIR}/agl-compositor.conf ${D}/${systemd_system_unitdir}/weston.service.d/agl-compositor.conf
+}
+
+FILES:${PN} += "\
+    ${systemd_system_unitdir}/weston.service.d \
+    "
+
+RDEPENDS:${PN} = " \
+    agl-compositor \
+    weston-init \
+"
diff --git a/meta-agl-core/recipes-graphics/wayland/agl-compositor-init/agl-compositor.conf.in b/meta-agl-core/recipes-graphics/wayland/agl-compositor-init/agl-compositor.conf.in
new file mode 100644 (file)
index 0000000..2918c41
--- /dev/null
@@ -0,0 +1,3 @@
+[Service]
+ExecStart=
+ExecStart=/usr/bin/agl-compositor @AGL_COMPOSITOR_ARGS@
index 2156c78..bdf8dc8 100644 (file)
@@ -30,7 +30,10 @@ FILES:${PN} = " \
     ${libdir}/agl-compositor/libexec_compositor.so.0.0.0 \
 "
 
-RDEPENDS:${PN} += " ${@bb.utils.contains('AGL_FEATURES', 'waltham-remoting', 'waltham waltham-transmitter-plugin', '', d)}"
+RDEPENDS:${PN} += " \
+    agl-compositor-init \
+    ${@bb.utils.contains('AGL_FEATURES', 'waltham-remoting', 'waltham waltham-transmitter-plugin', '', d)} \
+"
 
 FILES:${PN}-dev += " \
     ${datadir}/agl-compositor/protocols/agl-shell.xml \
diff --git a/meta-agl-core/recipes-graphics/wayland/weston-init/weston-autologin b/meta-agl-core/recipes-graphics/wayland/weston-init/weston-autologin
new file mode 100644 (file)
index 0000000..f6e6d10
--- /dev/null
@@ -0,0 +1,11 @@
+auth      required  pam_nologin.so
+auth      required  pam_unix.so     try_first_pass nullok
+
+account   required  pam_nologin.so
+account   required  pam_unix.so
+
+session   required  pam_env.so
+session   required  pam_unix.so
+-session  optional  pam_systemd.so type=wayland class=user desktop=weston
+-session  optional  pam_loginuid.so
+
diff --git a/meta-agl-core/recipes-graphics/wayland/weston-init/weston.service b/meta-agl-core/recipes-graphics/wayland/weston-init/weston.service
new file mode 100644 (file)
index 0000000..e09625b
--- /dev/null
@@ -0,0 +1,71 @@
+# This is a system unit for launching Weston with auto-login as the
+# user configured here.
+#
+# Weston must be built with systemd support, and your weston.ini must load
+# the plugin systemd-notify.so.
+[Unit]
+Description=Weston, a Wayland compositor, as a system service
+Documentation=man:weston(1) man:weston.ini(5)
+Documentation=http://wayland.freedesktop.org/
+
+# Make sure we are started after logins are permitted.
+Requires=systemd-user-sessions.service
+After=systemd-user-sessions.service
+
+# If Plymouth is used, we want to start when it is on its way out.
+After=plymouth-quit-wait.service
+
+# D-Bus is necessary for contacting logind. Logind is required.
+Wants=dbus.socket
+After=dbus.socket
+
+# Ensure the socket is present
+Requires=weston.socket
+
+# Since we are part of the graphical session, make sure we are started before
+# it is complete.
+Before=graphical.target
+
+# Prevent starting on systems without virtual consoles, Weston requires one
+# for now.
+ConditionPathExists=/dev/tty0
+
+[Service]
+# Requires systemd-notify.so Weston plugin.
+Type=notify
+EnvironmentFile=/etc/default/weston
+ExecStart=/usr/bin/weston --modules=systemd-notify.so
+
+# Optional watchdog setup
+TimeoutStartSec=60
+WatchdogSec=20
+
+# The user to run Weston as.
+User=weston
+Group=weston
+
+# Make sure the working directory is the users home directory
+WorkingDirectory=/home/weston
+
+# Set up a full user session for the user, required by Weston.
+PAMName=weston-autologin
+
+# A virtual terminal is needed.
+TTYPath=/dev/tty7
+TTYReset=yes
+TTYVHangup=yes
+TTYVTDisallocate=yes
+
+# Fail to start if not controlling the tty.
+StandardInput=tty-fail
+StandardOutput=journal
+StandardError=journal
+
+# Log this user with utmp, letting it show up with commands 'w' and 'who'.
+UtmpIdentifier=tty7
+UtmpMode=user
+
+[Install]
+# Note: If you only want weston to start on-demand, remove this line with a
+# service drop file
+WantedBy=graphical.target
diff --git a/meta-agl-core/recipes-graphics/wayland/weston-init/weston.socket b/meta-agl-core/recipes-graphics/wayland/weston-init/weston.socket
new file mode 100644 (file)
index 0000000..c1bdc83
--- /dev/null
@@ -0,0 +1,14 @@
+[Unit]
+Description=Weston socket
+RequiresMountsFor=/run
+
+[Socket]
+ListenStream=/run/wayland-0
+SocketMode=0775
+SocketUser=weston
+SocketGroup=wayland
+RemoveOnStop=yes
+
+[Install]
+WantedBy=sockets.target
+
index 896f1ea..070f5f8 100644 (file)
@@ -6,3 +6,49 @@ do_install:append() {
 }
 
 RDEPENDS:${PN} += "weston-ini"
+
+# Temporary effective backport of upstream commit ccdaab97
+# This gets us on the same page as upstream with respect to running
+# weston as non-root, and should make migrating to 3.5/Kirkstone
+# easier.
+
+FILESEXTRAPATHS:prepend := "${THISDIR}/weston-init:"
+
+SRC_URI += " \
+           file://weston.service \
+           file://weston.socket \
+           file://weston-autologin \
+"
+
+do_install:append() {
+       rm -f ${D}${sysconfdir}/udev/rules.d/71-weston-drm.rules
+       rm -f ${D}${systemd_system_unitdir}/weston@.service
+       rm -f ${D}${systemd_system_unitdir}/weston@.socket
+
+       install -D -p -m0644 ${WORKDIR}/weston.service ${D}${systemd_system_unitdir}/weston.service
+       install -D -p -m0644 ${WORKDIR}/weston.socket ${D}${systemd_system_unitdir}/weston.socket
+        if [ "${@bb.utils.filter('DISTRO_FEATURES', 'pam', d)}" ]; then
+               install -D -p -m0644 ${WORKDIR}/weston-autologin ${D}${sysconfdir}/pam.d/weston-autologin
+        fi
+
+       sed -i -e s:/etc:${sysconfdir}:g \
+               -e s:/usr/bin:${bindir}:g \
+               -e s:/var:${localstatedir}:g \
+               ${D}${systemd_system_unitdir}/weston.service
+
+       install -dm 755 -o weston -g weston ${D}/home/weston
+}
+
+inherit useradd
+
+USERADD_PACKAGES = "${PN}"
+
+FILES_${PN} += "\
+    ${systemd_system_unitdir}/weston.service \
+    ${systemd_system_unitdir}/weston.socket \
+    /home/weston \
+"
+
+SYSTEMD_SERVICE_${PN} = "weston.service weston.socket"
+USERADD_PARAM_${PN} = "--home /home/weston --shell /bin/sh --user-group -G video,input weston"
+GROUPADD_PARAM_${PN} = "-r wayland"
index cef3bf6..f7d2bb6 100644 (file)
@@ -2,6 +2,10 @@ require recipes-platform/images/agl-image-minimal.inc
 
 IMAGE_FEATURES += "splash package-management ssh-server-dropbear"
 
+# NOTE: In hardknott or later this can be replaced by adding "weston"
+#       to IMAGE_FEATURES.
+SYSTEMD_DEFAULT_TARGET = "graphical.target"
+
 inherit features_check
 
 REQUIRED_DISTRO_FEATURES = "wayland"
diff --git a/meta-agl-core/recipes-platform/images/core-image-weston.bbappend b/meta-agl-core/recipes-platform/images/core-image-weston.bbappend
new file mode 100644 (file)
index 0000000..082637b
--- /dev/null
@@ -0,0 +1 @@
+require ${@bb.utils.contains('AGL_FEATURES', 'aglcore', 'core-image-weston_aglcore.inc', '', d)}
diff --git a/meta-agl-core/recipes-platform/images/core-image-weston_aglcore.inc b/meta-agl-core/recipes-platform/images/core-image-weston_aglcore.inc
new file mode 100644 (file)
index 0000000..82e3485
--- /dev/null
@@ -0,0 +1,3 @@
+# NOTE: In hardknott or later this can be replaced by adding "weston"
+#       to IMAGE_FEATURES.
+SYSTEMD_DEFAULT_TARGET = "graphical.target"