summaryrefslogtreecommitdiffstats
path: root/contrib/dracut
diff options
context:
space:
mode:
authorMichael Niewöhner <[email protected]>2019-04-03 02:14:39 +0200
committerBrian Behlendorf <[email protected]>2019-04-02 17:14:39 -0700
commitce4432c5424eb9aa4d00833ee7529cf24491bdde (patch)
tree90a31dd531a2d3f12d868816bd9e9fc05bae5726 /contrib/dracut
parentf72ecb8d2779ef8b3e8892280c8c8756a419e461 (diff)
Move dracut specifics to dracut module
Dracut depends on the environment variable BOOTFS 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. Reviewed-by: Manuel Amador (Rudd-O) <[email protected]> Reviewed-by: Matthew Thode <[email protected]> Reviewed-by: Brian Behlendorf <[email protected]> Signed-off-by: Michael Niewöhner <[email protected]> Closes #8510
Diffstat (limited to 'contrib/dracut')
-rw-r--r--contrib/dracut/90zfs/.gitignore1
-rw-r--r--contrib/dracut/90zfs/Makefile.am10
-rwxr-xr-xcontrib/dracut/90zfs/module-setup.sh.in3
-rw-r--r--contrib/dracut/90zfs/zfs-env-bootfs.service.in14
4 files changed, 25 insertions, 3 deletions
diff --git a/contrib/dracut/90zfs/.gitignore b/contrib/dracut/90zfs/.gitignore
index eb41fce4f..85c23f75e 100644
--- a/contrib/dracut/90zfs/.gitignore
+++ b/contrib/dracut/90zfs/.gitignore
@@ -6,3 +6,4 @@ zfs-generator.sh
zfs-lib.sh
zfs-load-key.sh
zfs-needshutdown.sh
+zfs-env-bootfs.service
diff --git a/contrib/dracut/90zfs/Makefile.am b/contrib/dracut/90zfs/Makefile.am
index afcd51022..0a557f57f 100644
--- a/contrib/dracut/90zfs/Makefile.am
+++ b/contrib/dracut/90zfs/Makefile.am
@@ -9,6 +9,9 @@ pkgdracut_SCRIPTS = \
zfs-needshutdown.sh \
zfs-lib.sh
+pkgdracut_DATA = \
+ zfs-env-bootfs.service
+
EXTRA_DIST = \
$(top_srcdir)/contrib/dracut/90zfs/export-zfs.sh.in \
$(top_srcdir)/contrib/dracut/90zfs/module-setup.sh.in \
@@ -17,9 +20,10 @@ EXTRA_DIST = \
$(top_srcdir)/contrib/dracut/90zfs/zfs-generator.sh.in \
$(top_srcdir)/contrib/dracut/90zfs/zfs-load-key.sh.in \
$(top_srcdir)/contrib/dracut/90zfs/zfs-needshutdown.sh.in \
- $(top_srcdir)/contrib/dracut/90zfs/zfs-lib.sh.in
+ $(top_srcdir)/contrib/dracut/90zfs/zfs-lib.sh.in \
+ $(top_srcdir)/contrib/dracut/90zfs/zfs-env-bootfs.service.in
-$(pkgdracut_SCRIPTS):%:%.in
+$(pkgdracut_SCRIPTS) $(pkgdracut_DATA) :%:%.in
-$(SED) -e 's,@bindir\@,$(bindir),g' \
-e 's,@sbindir\@,$(sbindir),g' \
-e 's,@udevdir\@,$(udevdir),g' \
@@ -30,4 +34,4 @@ $(pkgdracut_SCRIPTS):%:%.in
$< >'$@'
distclean-local::
- -$(RM) $(pkgdracut_SCRIPTS)
+ -$(RM) $(pkgdracut_SCRIPTS) $(pkgdracut_DATA)
diff --git a/contrib/dracut/90zfs/module-setup.sh.in b/contrib/dracut/90zfs/module-setup.sh.in
index f595a369c..4efc4b018 100755
--- a/contrib/dracut/90zfs/module-setup.sh.in
+++ b/contrib/dracut/90zfs/module-setup.sh.in
@@ -98,6 +98,9 @@ install() {
type mark_hostonly >/dev/null 2>&1 && mark_hostonly @systemdunitdir@/zfs-import-$_item.service
fi
done
+ inst "${moddir}"/zfs-env-bootfs.service "${systemdsystemunitdir}"/zfs-env-bootfs.service
+ ln -s ../zfs-env-bootfs.service "${initdir}/${systemdsystemunitdir}/zfs-import.target.wants"/zfs-env-bootfs.service
+ type mark_hostonly >/dev/null 2>&1 && mark_hostonly @systemdunitdir@/zfs-env-bootfs.service
dracut_install systemd-ask-password
dracut_install systemd-tty-ask-password-agent
mkdir -p "${initdir}/$systemdsystemunitdir/initrd.target.wants"
diff --git a/contrib/dracut/90zfs/zfs-env-bootfs.service.in b/contrib/dracut/90zfs/zfs-env-bootfs.service.in
new file mode 100644
index 000000000..3cdf69100
--- /dev/null
+++ b/contrib/dracut/90zfs/zfs-env-bootfs.service.in
@@ -0,0 +1,14 @@
+[Unit]
+Description=Set BOOTFS environment for dracut
+Documentation=man:zpool(8)
+DefaultDependencies=no
+After=zfs-import-cache.service
+After=zfs-import-scan.service
+Before=zfs-import.target
+
+[Service]
+Type=oneshot
+ExecStart=/bin/sh -c "/bin/systemctl set-environment BOOTFS=$(@sbindir@/zpool list -H -o bootfs | grep -m1 -v '^-$')"
+
+[Install]
+WantedBy=zfs-import.target