From c49a150db52ced5023b0aa54fdd62ef9843eceea 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 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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. Signed-off-by: Michael Niewöhner --- configure.ac | 1 + contrib/dracut/90zfs/zfs-generator.sh.in | 3 ++- contrib/dracut/Makefile.am | 3 ++- 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 - rpm/generic/zfs.spec.in | 6 +++++- 9 files changed, 34 insertions(+), 5 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..52fec945e8b2 100644 --- a/contrib/dracut/Makefile.am +++ b/contrib/dracut/Makefile.am @@ -1,3 +1,4 @@ -SUBDIRS = 02zfsexpandknowledge 90zfs +SUBDIRS = 02zfsexpandknowledge 90zfs $(ZFS_INIT_SYSTEMD) +DIST_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..6191d029f871 --- /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 | grep -v '^-$' | head -1)" diff --git a/etc/systemd/system/zfs-import-cache.service.in b/etc/systemd/system/zfs-import-cache.service.in index 5f32b78c0f4f..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 | grep -v '^-$' | head -1)" [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 dc3f2c1126c4..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 | grep -v '^-$' | head -1)" [Install] WantedBy=zfs-import.target diff --git a/rpm/generic/zfs.spec.in b/rpm/generic/zfs.spec.in index 9faa3ba771a1..43cb9543b4e9 100644 --- a/rpm/generic/zfs.spec.in +++ b/rpm/generic/zfs.spec.in @@ -320,7 +320,7 @@ image which is ZFS aware. %if 0%{?_systemd} %define systemd --enable-systemd --with-systemdunitdir=%{_unitdir} --with-systemdpresetdir=%{_presetdir} --with-systemdmodulesloaddir=%{_modulesloaddir} --with-systemdgeneratordir=%{_systemdgeneratordir} --disable-sysvinit - %define systemd_svcs zfs-import-cache.service zfs-import-scan.service zfs-mount.service zfs-share.service zfs-zed.service zfs.target zfs-import.target + %define systemd_svcs zfs-import-cache.service zfs-import-scan.service zfs-mount.service zfs-share.service zfs-zed.service zfs.target zfs-import.target zfs-dracut-bootfs.service %else %define systemd --enable-sysvinit --disable-systemd %endif @@ -435,6 +435,7 @@ systemctl --system daemon-reload >/dev/null || true %{_presetdir}/* %{_modulesloaddir}/* %{_systemdgeneratordir}/* +%exclude %{_unitdir}/zfs-dracut* %else %config(noreplace) %{_sysconfdir}/init.d/* %config(noreplace) %{_initconfdir}/zfs @@ -467,6 +468,9 @@ systemctl --system daemon-reload >/dev/null || true %files dracut %doc contrib/dracut/README.dracut.markdown %{_dracutdir}/modules.d/* +%if 0%{?_systemd} +%{_unitdir}/zfs-dracut* +%endif %if %{with pyzfs} %files -n python%{__python_pkg_version}-pyzfs