From 90adaaabf2d6e7dcbb71a621325de8ccd0fa9272 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michael=20Niew=C3=B6hner?= Date: Sun, 17 Mar 2019 22:54:41 +0100 Subject: [PATCH] Move dracut specifics to dracut mount unit Dracut depends on BOOTFS environment variable to be set after pool import. This dracut specific systemd ExecStartPost command should not be called for any non-dracut systems, so let's move it to a static systemd unit that gets pulled in by the generated mount unit. --- configure.ac | 1 + contrib/dracut/90zfs/zfs-generator.sh.in | 3 ++- contrib/dracut/Makefile.am | 2 +- contrib/dracut/systemd/.gitignore | 1 + contrib/dracut/systemd/Makefile.am | 13 +++++++++++++ contrib/dracut/systemd/zfs-dracut-bootfs.service.in | 10 ++++++++++ etc/systemd/system/zfs-import-cache.service.in | 1 - etc/systemd/system/zfs-import-scan.service.in | 1 - 8 files changed, 28 insertions(+), 4 deletions(-) create mode 100644 contrib/dracut/systemd/.gitignore create mode 100644 contrib/dracut/systemd/Makefile.am create mode 100644 contrib/dracut/systemd/zfs-dracut-bootfs.service.in diff --git a/configure.ac b/configure.ac index 3d9fd2848e48..55c410985060 100644 --- a/configure.ac +++ b/configure.ac @@ -127,6 +127,7 @@ AC_CONFIG_FILES([ contrib/dracut/Makefile contrib/dracut/02zfsexpandknowledge/Makefile contrib/dracut/90zfs/Makefile + contrib/dracut/systemd/Makefile contrib/initramfs/Makefile contrib/initramfs/hooks/Makefile contrib/initramfs/scripts/Makefile diff --git a/contrib/dracut/90zfs/zfs-generator.sh.in b/contrib/dracut/90zfs/zfs-generator.sh.in index 0b8a8aaca796..b999de8bc0bf 100755 --- a/contrib/dracut/90zfs/zfs-generator.sh.in +++ b/contrib/dracut/90zfs/zfs-generator.sh.in @@ -41,7 +41,8 @@ echo "zfs-generator: writing extension for sysroot.mount to $GENERATOR_DIR"/sysr { echo "[Unit]" echo "Before=initrd-root-fs.target" - echo "After=zfs-import.target" + echo "After=zfs-dracut-bootfs.service zfs-import.target" + echo "Requires=zfs-dracut-bootfs.service" echo "[Mount]" if [ "${root}" = "zfs:AUTO" ] ; then echo "PassEnvironment=BOOTFS" diff --git a/contrib/dracut/Makefile.am b/contrib/dracut/Makefile.am index 1065e5e94f0e..a5aaf871eba5 100644 --- a/contrib/dracut/Makefile.am +++ b/contrib/dracut/Makefile.am @@ -1,3 +1,3 @@ -SUBDIRS = 02zfsexpandknowledge 90zfs +SUBDIRS = 02zfsexpandknowledge 90zfs systemd EXTRA_DIST = README.dracut.markdown diff --git a/contrib/dracut/systemd/.gitignore b/contrib/dracut/systemd/.gitignore new file mode 100644 index 000000000000..33b6c638861a --- /dev/null +++ b/contrib/dracut/systemd/.gitignore @@ -0,0 +1 @@ +zfs-dracut-bootfs.service diff --git a/contrib/dracut/systemd/Makefile.am b/contrib/dracut/systemd/Makefile.am new file mode 100644 index 000000000000..857d3d25f452 --- /dev/null +++ b/contrib/dracut/systemd/Makefile.am @@ -0,0 +1,13 @@ +systemdunit_DATA = \ + zfs-dracut-bootfs.service + +EXTRA_DIST = \ + $(top_srcdir)/contrib/dracut/systemd/zfs-dracut-bootfs.service.in + +$(systemdunit_DATA):%:%.in + -$(SED) -e 's,@bindir\@,$(bindir),g' \ + -e 's,@sbindir\@,$(sbindir),g' \ + $< >'$@' + +distclean-local:: + -$(RM) $(systemdunit_DATA) diff --git a/contrib/dracut/systemd/zfs-dracut-bootfs.service.in b/contrib/dracut/systemd/zfs-dracut-bootfs.service.in new file mode 100644 index 000000000000..cf480c0ec068 --- /dev/null +++ b/contrib/dracut/systemd/zfs-dracut-bootfs.service.in @@ -0,0 +1,10 @@ +[Unit] +Description=Set BOOTFS environment for dracut +Documentation=man:zfs(8) +DefaultDependencies=no +After=zfs-import.target +Requires=zfs-import.target + +[Service] +Type=oneshot +ExecStart=/bin/sh -c "/bin/systemctl set-environment BOOTFS=$(@sbindir@/zpool list -H -o bootfs | egrep -v '^-$')" diff --git a/etc/systemd/system/zfs-import-cache.service.in b/etc/systemd/system/zfs-import-cache.service.in index db110cdc8b1c..cacb53651545 100644 --- a/etc/systemd/system/zfs-import-cache.service.in +++ b/etc/systemd/system/zfs-import-cache.service.in @@ -13,7 +13,6 @@ ConditionPathExists=@sysconfdir@/zfs/zpool.cache Type=oneshot RemainAfterExit=yes ExecStart=@sbindir@/zpool import -c @sysconfdir@/zfs/zpool.cache -aN -ExecStartPost=/bin/sh -c "/bin/systemctl set-environment BOOTFS=$(@sbindir@/zpool list -H -o bootfs | egrep -v '^-$')" [Install] WantedBy=zfs-import.target diff --git a/etc/systemd/system/zfs-import-scan.service.in b/etc/systemd/system/zfs-import-scan.service.in index ec85dd501ce0..4aae9f06e504 100644 --- a/etc/systemd/system/zfs-import-scan.service.in +++ b/etc/systemd/system/zfs-import-scan.service.in @@ -12,7 +12,6 @@ ConditionPathExists=!@sysconfdir@/zfs/zpool.cache Type=oneshot RemainAfterExit=yes ExecStart=@sbindir@/zpool import -aN -o cachefile=none -ExecStartPost=/bin/sh -c "/bin/systemctl set-environment BOOTFS=$(@sbindir@/zpool list -H -o bootfs | egrep -v '^-$')" [Install] WantedBy=zfs-import.target