diff options
author | Mike Gilbert <floppym@gentoo.org> | 2023-08-16 21:07:13 -0400 |
---|---|---|
committer | Mike Gilbert <floppym@gentoo.org> | 2023-08-16 21:07:13 -0400 |
commit | 2dcfd6ce1952b2c37fefd04fe11cfbb1ef8ebe41 (patch) | |
tree | 7c6f55cfa92c3f13ac7afba39108ce59d2020e00 /sys-apps/systemd | |
parent | www-client/qutebrowser: update/tidy live (diff) | |
download | gentoo-2dcfd6ce1952b2c37fefd04fe11cfbb1ef8ebe41.tar.gz gentoo-2dcfd6ce1952b2c37fefd04fe11cfbb1ef8ebe41.tar.bz2 gentoo-2dcfd6ce1952b2c37fefd04fe11cfbb1ef8ebe41.zip |
sys-apps/systemd: backport tmpfiles/udev fix
Closes: https://bugs.gentoo.org/911723
Signed-off-by: Mike Gilbert <floppym@gentoo.org>
Diffstat (limited to 'sys-apps/systemd')
-rw-r--r-- | sys-apps/systemd/files/systemd-254.1-tmpfiles-setup-dev-early.patch | 252 | ||||
-rw-r--r-- | sys-apps/systemd/systemd-254.1-r1.ebuild (renamed from sys-apps/systemd/systemd-254.1.ebuild) | 1 |
2 files changed, 253 insertions, 0 deletions
diff --git a/sys-apps/systemd/files/systemd-254.1-tmpfiles-setup-dev-early.patch b/sys-apps/systemd/files/systemd-254.1-tmpfiles-setup-dev-early.patch new file mode 100644 index 000000000000..77f6e19fe6c8 --- /dev/null +++ b/sys-apps/systemd/files/systemd-254.1-tmpfiles-setup-dev-early.patch @@ -0,0 +1,252 @@ +https://github.com/systemd/systemd/pull/28784 +https://bugs.gentoo.org/911723 + +From bb7f485f4bddd57bbf50739bafa43d127bab59d6 Mon Sep 17 00:00:00 2001 +From: Yu Watanabe <watanabe.yu+github@gmail.com> +Date: Sat, 12 Aug 2023 07:54:32 +0900 +Subject: [PATCH] units: introduce systemd-tmpfiles-setup-dev-early.service + +This makes tmpfiles, sysusers, and udevd invoked in the following order: +1. systemd-tmpfiles-setup-dev-early.service + Create device nodes gracefully, that is, create device nodes anyway + by ignoring unknown users and groups. +2. systemd-sysusers.service + Create users and groups, to make later invocations of tmpfiles and + udevd can resolve necessary users and groups. +3. systemd-tmpfiles-setup-dev.service + Adjust owners of previously created device nodes. +4. systemd-udevd.service + Process all devices. Especially to make block devices active and can + be mountable. +5. systemd-tmpfiles-setup.service + Setup basic filesystem. + +Follow-up for b42482af904ae0b94a6e4501ec595448f0ba1c06. + +Fixes #28653. +Replaces #28681 and #28732. +--- + man/systemd-tmpfiles.xml | 3 + + test/TEST-17-UDEV/test.sh | 4 ++ + test/units/testsuite-17.00.sh | 57 +++++++++++++++++++ + units/kmod-static-nodes.service.in | 2 +- + units/meson.build | 5 ++ + units/systemd-sysusers.service | 2 + + .../systemd-tmpfiles-setup-dev-early.service | 25 ++++++++ + units/systemd-tmpfiles-setup-dev.service | 3 +- + units/systemd-tmpfiles-setup.service | 2 +- + 9 files changed, 100 insertions(+), 3 deletions(-) + create mode 100755 test/units/testsuite-17.00.sh + create mode 100644 units/systemd-tmpfiles-setup-dev-early.service + +diff --git a/man/systemd-tmpfiles.xml b/man/systemd-tmpfiles.xml +index decd66d5c667..0db2a4b03b46 100644 +--- a/man/systemd-tmpfiles.xml ++++ b/man/systemd-tmpfiles.xml +@@ -19,6 +19,7 @@ + <refnamediv> + <refname>systemd-tmpfiles</refname> + <refname>systemd-tmpfiles-setup.service</refname> ++ <refname>systemd-tmpfiles-setup-dev-early.service</refname> + <refname>systemd-tmpfiles-setup-dev.service</refname> + <refname>systemd-tmpfiles-clean.service</refname> + <refname>systemd-tmpfiles-clean.timer</refname> +@@ -35,6 +36,7 @@ + + <para>System units: + <literallayout><filename>systemd-tmpfiles-setup.service</filename> ++<filename>systemd-tmpfiles-setup-dev-early.service</filename> + <filename>systemd-tmpfiles-setup-dev.service</filename> + <filename>systemd-tmpfiles-clean.service</filename> + <filename>systemd-tmpfiles-clean.timer</filename></literallayout></para> +@@ -64,6 +66,7 @@ + searched for a matching file and the file found that has the highest priority is executed.</para> + + <para>System services (<filename>systemd-tmpfiles-setup.service</filename>, ++ <filename>systemd-tmpfiles-setup-dev-early.service</filename>, + <filename>systemd-tmpfiles-setup-dev.service</filename>, + <filename>systemd-tmpfiles-clean.service</filename>) invoke <command>systemd-tmpfiles</command> to create + system files and to perform system wide cleanup. Those services read administrator-controlled +diff --git a/test/TEST-17-UDEV/test.sh b/test/TEST-17-UDEV/test.sh +index 6b8f08fc328a..f7a907549607 100755 +--- a/test/TEST-17-UDEV/test.sh ++++ b/test/TEST-17-UDEV/test.sh +@@ -8,5 +8,9 @@ TEST_NO_NSPAWN=1 + # shellcheck source=test/test-functions + . "${TEST_BASE_DIR:?}/test-functions" + ++test_append_files() { ++ instmods snd_seq snd_timer tun ++ generate_module_dependencies ++} + + do_test "$@" +diff --git a/test/units/testsuite-17.00.sh b/test/units/testsuite-17.00.sh +new file mode 100755 +index 000000000000..d2aec60b1326 +--- /dev/null ++++ b/test/units/testsuite-17.00.sh +@@ -0,0 +1,57 @@ ++#!/usr/bin/env bash ++# SPDX-License-Identifier: LGPL-2.1-or-later ++set -ex ++set -o pipefail ++ ++# shellcheck source=test/units/util.sh ++. "$(dirname "$0")"/util.sh ++ ++# Tests for issue #28588 and #28653. ++ ++# On boot, services need to be started in the following order: ++# 1. systemd-tmpfiles-setup-dev-early.service ++# 2. systemd-sysusers.service ++# 3. systemd-tmpfiles-setup-dev.service ++# 4. systemd-udevd.service ++ ++output="$(systemctl show --property After --value systemd-udevd.service)" ++assert_in "systemd-tmpfiles-setup-dev-early.service" "$output" ++assert_in "systemd-sysusers.service" "$output" ++assert_in "systemd-tmpfiles-setup-dev.service" "$output" ++ ++output="$(systemctl show --property After --value systemd-tmpfiles-setup-dev.service)" ++assert_in "systemd-tmpfiles-setup-dev-early.service" "$output" ++assert_in "systemd-sysusers.service" "$output" ++ ++output="$(systemctl show --property After --value systemd-sysusers.service)" ++assert_in "systemd-tmpfiles-setup-dev-early.service" "$output" ++ ++check_owner_and_mode() { ++ local dev=${1?} ++ local user=${2?} ++ local group=${3?} ++ local mode=${4:-} ++ ++ if [[ -e "$dev" ]]; then ++ assert_in "$user" "$(stat --format=%U "$dev")" ++ assert_in "$group" "$(stat --format=%G "$dev")" ++ if [[ -n "$mode" ]]; then ++ assert_in "$mode" "$(stat --format=%#0a "$dev")" ++ fi ++ fi ++ ++ return 0 ++} ++ ++# Check owner and access mode specified in static-nodes-permissions.conf ++check_owner_and_mode /dev/snd/seq root audio 0660 ++check_owner_and_mode /dev/snd/timer root audio 0660 ++check_owner_and_mode /dev/loop-control root disk 0660 ++check_owner_and_mode /dev/net/tun root root 0666 ++check_owner_and_mode /dev/fuse root root 0666 ++check_owner_and_mode /dev/vfio/vfio root root 0666 ++check_owner_and_mode /dev/kvm root kvm ++check_owner_and_mode /dev/vhost-net root kvm ++check_owner_and_mode /dev/vhost-vsock root kvm ++ ++exit 0 +diff --git a/units/kmod-static-nodes.service.in b/units/kmod-static-nodes.service.in +index 777e82d16b90..70605d997e0a 100644 +--- a/units/kmod-static-nodes.service.in ++++ b/units/kmod-static-nodes.service.in +@@ -10,7 +10,7 @@ + [Unit] + Description=Create List of Static Device Nodes + DefaultDependencies=no +-Before=sysinit.target systemd-tmpfiles-setup-dev.service ++Before=sysinit.target systemd-tmpfiles-setup-dev-early.service + ConditionCapability=CAP_SYS_MODULE + ConditionFileNotEmpty=/lib/modules/%v/modules.devname + +diff --git a/units/meson.build b/units/meson.build +index 96ad1dc85016..20665e040874 100644 +--- a/units/meson.build ++++ b/units/meson.build +@@ -544,6 +544,11 @@ units = [ + 'conditions' : ['ENABLE_TMPFILES'], + 'symlinks' : ['timers.target.wants/'], + }, ++ { ++ 'file' : 'systemd-tmpfiles-setup-dev-early.service', ++ 'conditions' : ['ENABLE_TMPFILES'], ++ 'symlinks' : ['sysinit.target.wants/'], ++ }, + { + 'file' : 'systemd-tmpfiles-setup-dev.service', + 'conditions' : ['ENABLE_TMPFILES'], +diff --git a/units/systemd-sysusers.service b/units/systemd-sysusers.service +index 84fd66de37aa..de6c71a03825 100644 +--- a/units/systemd-sysusers.service ++++ b/units/systemd-sysusers.service +@@ -16,6 +16,8 @@ ConditionCredential=|sysusers.extra + + DefaultDependencies=no + After=systemd-remount-fs.service ++After=systemd-tmpfiles-setup-dev-early.service ++Before=systemd-tmpfiles-setup-dev.service + Before=sysinit.target systemd-update-done.service + Conflicts=shutdown.target initrd-switch-root.target + Before=shutdown.target initrd-switch-root.target +diff --git a/units/systemd-tmpfiles-setup-dev-early.service b/units/systemd-tmpfiles-setup-dev-early.service +new file mode 100644 +index 000000000000..0d6f0daaae32 +--- /dev/null ++++ b/units/systemd-tmpfiles-setup-dev-early.service +@@ -0,0 +1,25 @@ ++# SPDX-License-Identifier: LGPL-2.1-or-later ++# ++# This file is part of systemd. ++# ++# systemd is free software; you can redistribute it and/or modify it ++# under the terms of the GNU Lesser General Public License as published by ++# the Free Software Foundation; either version 2.1 of the License, or ++# (at your option) any later version. ++ ++[Unit] ++Description=Create Static Device Nodes in /dev gracefully ++Documentation=man:tmpfiles.d(5) man:systemd-tmpfiles(8) ++ ++DefaultDependencies=no ++Before=sysinit.target local-fs-pre.target systemd-udevd.service ++Wants=local-fs-pre.target ++Conflicts=shutdown.target initrd-switch-root.target ++Before=shutdown.target initrd-switch-root.target ++ ++[Service] ++Type=oneshot ++RemainAfterExit=yes ++ExecStart=systemd-tmpfiles --prefix=/dev --create --boot --graceful ++SuccessExitStatus=DATAERR CANTCREAT ++ImportCredential=tmpfiles.* +diff --git a/units/systemd-tmpfiles-setup-dev.service b/units/systemd-tmpfiles-setup-dev.service +index acaa9510aa60..3016b497493f 100644 +--- a/units/systemd-tmpfiles-setup-dev.service ++++ b/units/systemd-tmpfiles-setup-dev.service +@@ -12,6 +12,7 @@ Description=Create Static Device Nodes in /dev + Documentation=man:tmpfiles.d(5) man:systemd-tmpfiles(8) + + DefaultDependencies=no ++After=systemd-tmpfiles-setup-dev-early.service + Before=sysinit.target local-fs-pre.target systemd-udevd.service + Wants=local-fs-pre.target + Conflicts=shutdown.target initrd-switch-root.target +@@ -20,6 +21,6 @@ Before=shutdown.target initrd-switch-root.target + [Service] + Type=oneshot + RemainAfterExit=yes +-ExecStart=systemd-tmpfiles --prefix=/dev --create --boot --graceful ++ExecStart=systemd-tmpfiles --prefix=/dev --create --boot + SuccessExitStatus=DATAERR CANTCREAT + ImportCredential=tmpfiles.* +diff --git a/units/systemd-tmpfiles-setup.service b/units/systemd-tmpfiles-setup.service +index 6c5e3de8fd96..6cae32850f4f 100644 +--- a/units/systemd-tmpfiles-setup.service ++++ b/units/systemd-tmpfiles-setup.service +@@ -21,7 +21,7 @@ RefuseManualStop=yes + [Service] + Type=oneshot + RemainAfterExit=yes +-ExecStart=systemd-tmpfiles --create --remove --boot ++ExecStart=systemd-tmpfiles --create --remove --boot --exclude-prefix=/dev + SuccessExitStatus=DATAERR CANTCREAT + ImportCredential=tmpfiles.* + ImportCredential=login.motd diff --git a/sys-apps/systemd/systemd-254.1.ebuild b/sys-apps/systemd/systemd-254.1-r1.ebuild index a03b6cbadd51..c0ddb15afd95 100644 --- a/sys-apps/systemd/systemd-254.1.ebuild +++ b/sys-apps/systemd/systemd-254.1-r1.ebuild @@ -241,6 +241,7 @@ src_unpack() { src_prepare() { local PATCHES=( "${FILESDIR}/systemd-253-initrd-generators.patch" + "${FILESDIR}/systemd-254.1-tmpfiles-setup-dev-early.patch" ) if ! use vanilla; then |