From e1845955ff3d8cf6846d6b27cbd8322b36a7580b Mon Sep 17 00:00:00 2001 From: Daniel Molkentin Date: Fri, 21 Aug 2020 18:03:09 +0200 Subject: [PATCH] 06dbus: introduce dbus support --- dracut.spec | 1 + modules.d/06dbus/dbus-cleanup.sh | 3 ++ modules.d/06dbus/module-setup.sh | 83 ++++++++++++++++++++++++++++++++ 3 files changed, 87 insertions(+) create mode 100755 modules.d/06dbus/dbus-cleanup.sh create mode 100755 modules.d/06dbus/module-setup.sh diff --git a/dracut.spec b/dracut.spec index e20aaa67..450dd5a6 100644 --- a/dracut.spec +++ b/dracut.spec @@ -349,6 +349,7 @@ install -m 0755 51-dracut-rescue-postinst.sh $RPM_BUILD_ROOT%{_sysconfdir}/kerne %{dracutlibdir}/modules.d/04watchdog %{dracutlibdir}/modules.d/04watchdog-modules %{dracutlibdir}/modules.d/05busybox +%{dracutlibdir}/modules.d/06dbus %{dracutlibdir}/modules.d/06rngd %{dracutlibdir}/modules.d/10i18n %{dracutlibdir}/modules.d/30convertfs diff --git a/modules.d/06dbus/dbus-cleanup.sh b/modules.d/06dbus/dbus-cleanup.sh new file mode 100755 index 00000000..4c843248 --- /dev/null +++ b/modules.d/06dbus/dbus-cleanup.sh @@ -0,0 +1,3 @@ +#!/bin/sh +systemctl stop dbus.service dbus.socket +rm -rf /run/dbus diff --git a/modules.d/06dbus/module-setup.sh b/modules.d/06dbus/module-setup.sh new file mode 100755 index 00000000..6843cfa3 --- /dev/null +++ b/modules.d/06dbus/module-setup.sh @@ -0,0 +1,83 @@ +#!/bin/bash + +# called by dracut +check() { + require_binaries dbus-daemon || return 1 + + return 255 +} + +depends() { + echo systemd + return 0 +} + +install() { + local DBUS_SERVICE=/usr/lib/systemd/system/dbus.service + if [[ -e $DBUS_SERVICE ]]; then + if [[ -L $DBUS_SERVICE ]]; then + DBUS_SERVICE=$(readlink $DBUS_SERVICE) + fi + else + DBUS_SERVICE=/etc/systemd/system/dbus.service + if [[ -e $DBUS_SERVICE ]]; then + if [[ -L $DBUS_SERVICE ]]; then + DBUS_SERVICE=$(readlink $DBUS_SERVICE) + fi + else + echo "Could not find dbus.service"; + exit 1 + fi + fi + + inst_multiple \ + $DBUS_SERVICE \ + /usr/lib/systemd/system/dbus.socket \ + /usr/bin/dbus-daemon \ + /usr/bin/dbus-send + + dbus_system_services=" + org.freedesktop.systemd1 + org.freedesktop.timedate1 + org.freedesktop.hostname1 + " + inst_dir /etc/dbus-1/system.d + inst_dir /usr/share/dbus-1/services + inst_dir /usr/share/dbus-1/system-services + inst_multiple /etc/dbus-1/system.conf + inst_multiple /usr/share/dbus-1/system.conf \ + /usr/share/dbus-1/services/org.freedesktop.systemd1.service + for service in $dbus_system_services ; do + inst_multiple /etc/dbus-1/system.d/${service}.conf \ + /usr/share/dbus-1/system-services/${service}.service + done + inst_multiple $(find /var/lib/dbus) + + inst_hook cleanup 99 "$moddir/dbus-cleanup.sh" + + grep '^messagebus:' /etc/passwd >> "$initdir/etc/passwd" + grep '^messagebus:' /etc/group >> "$initdir/etc/group" + + # do not enable -- this is a static service + #systemctl --root "$initdir" enable $DBUS_SERVICE > /dev/null 2>&1 + + sed -i -e \ +'/^\[Unit\]/aDefaultDependencies=no\ +Conflicts=shutdown.target\ +Before=shutdown.target' \ + "$initdir"$DBUS_SERVICE + + sed -i -e \ +'/^\[Unit\]/aDefaultDependencies=no\ +Conflicts=shutdown.target\ +Before=shutdown.target +/^\[Socket\]/aRemoveOnStop=yes' \ + "$initdir"/usr/lib/systemd/system/dbus.socket + + #We need to make sure that systemd-tmpfiles-setup.service->dbus.socket will not wait local-fs.target to start, + #If swap is encrypted, this would make dbus wait the timeout for the swap before loading. This could delay sysinit + #services that are dependent on dbus.service. + sed -i -Ee \ + '/^After/s/(After[[:space:]]*=.*)(local-fs.target[[:space:]]*)(.*)/\1-\.mount \3/' \ + "$initdir"/usr/lib/systemd/system/systemd-tmpfiles-setup.service +}