aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorнаб <[email protected]>2022-04-04 22:52:43 +0200
committerBrian Behlendorf <[email protected]>2022-04-20 16:44:55 -0700
commitfec2c613a49192942200d26bd20bf434649687b7 (patch)
tree05ee2798449d7e0b3dc96715eaa1069b90f26abc
parent245529d85fb807bfc4525b3b1858896d2860995b (diff)
contrib; dracut: flatten zfs-load-key, simplify zfs-env-bootfs
Reviewed-by: Brian Behlendorf <[email protected]> Signed-off-by: Ahelenia Ziemiańska <[email protected]> Closes #13291
-rwxr-xr-xcontrib/dracut/90zfs/module-setup.sh.in5
-rw-r--r--contrib/dracut/90zfs/zfs-env-bootfs.service.in2
-rwxr-xr-xcontrib/dracut/90zfs/zfs-load-key.sh.in74
3 files changed, 36 insertions, 45 deletions
diff --git a/contrib/dracut/90zfs/module-setup.sh.in b/contrib/dracut/90zfs/module-setup.sh.in
index c79323a3e..f2145861d 100755
--- a/contrib/dracut/90zfs/module-setup.sh.in
+++ b/contrib/dracut/90zfs/module-setup.sh.in
@@ -9,13 +9,10 @@ check() {
for tool in "zgenhostid" "zpool" "zfs" "mount.zfs"; do
command -v "${tool}" >/dev/null || return 1
done
-
- return 0
}
depends() {
echo udev-rules
- return 0
}
installkernel() {
@@ -39,7 +36,6 @@ install() {
{ dfatal "Failed to install essential binaries"; exit 1; }
# Adapted from https://github.com/zbm-dev/zfsbootmenu
-
if ! ldd "$(command -v zpool)" | grep -qF 'libgcc_s.so'; then
# On systems with gcc-config (Gentoo, Funtoo, etc.), use it to find libgcc_s
if command -v gcc-config >/dev/null; then
@@ -79,7 +75,6 @@ install() {
fi
if dracut_module_included "systemd"; then
-
inst_simple "${systemdsystemunitdir}/zfs-import.target"
systemctl -q --root "${initdir}" add-wants initrd.target zfs-import.target
diff --git a/contrib/dracut/90zfs/zfs-env-bootfs.service.in b/contrib/dracut/90zfs/zfs-env-bootfs.service.in
index e143cb5ec..34c88037c 100644
--- a/contrib/dracut/90zfs/zfs-env-bootfs.service.in
+++ b/contrib/dracut/90zfs/zfs-env-bootfs.service.in
@@ -8,7 +8,7 @@ Before=zfs-import.target
[Service]
Type=oneshot
-ExecStart=/bin/sh -c "exec systemctl set-environment BOOTFS=$(@sbindir@/zpool list -H -o bootfs | grep -m1 -v '^-$')"
+ExecStart=/bin/sh -c "exec systemctl set-environment BOOTFS=$(@sbindir@/zpool list -H -o bootfs | grep -m1 -vFx -)"
[Install]
WantedBy=zfs-import.target
diff --git a/contrib/dracut/90zfs/zfs-load-key.sh.in b/contrib/dracut/90zfs/zfs-load-key.sh.in
index 9fbef8f68..97e9246d4 100755
--- a/contrib/dracut/90zfs/zfs-load-key.sh.in
+++ b/contrib/dracut/90zfs/zfs-load-key.sh.in
@@ -20,42 +20,38 @@ if [ "$BOOTFS" = "zfs:AUTO" ]; then
BOOTFS="$(zpool get -Ho value bootfs | grep -m1 -vFx -)"
fi
-# if pool encryption is active and the zfs command understands '-o encryption'
-if [ "$(zpool list -H -o feature@encryption "${BOOTFS%%/*}")" = 'active' ]; then
- # if the root dataset has encryption enabled
- ENCRYPTIONROOT="$(zfs get -H -o value encryptionroot "${BOOTFS}")"
- if ! [ "${ENCRYPTIONROOT}" = "-" ]; then
- KEYSTATUS="$(zfs get -H -o value keystatus "${ENCRYPTIONROOT}")"
- # continue only if the key needs to be loaded
- [ "$KEYSTATUS" = "unavailable" ] || exit 0
-
- KEYLOCATION="$(zfs get -H -o value keylocation "${ENCRYPTIONROOT}")"
- case "${KEYLOCATION%%://*}" in
- prompt)
- for _ in 1 2 3; do
- systemd-ask-password --no-tty "Encrypted ZFS password for ${BOOTFS}" | zfs load-key "${ENCRYPTIONROOT}" && break
- done
- ;;
- http*)
- systemctl start network-online.target
- zfs load-key "${ENCRYPTIONROOT}"
- ;;
- file)
- KEYFILE="${KEYLOCATION#file://}"
- [ -r "${KEYFILE}" ] || udevadm settle
- [ -r "${KEYFILE}" ] || {
- info "Waiting for key ${KEYFILE} for ${ENCRYPTIONROOT}..."
- for _ in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20; do
- sleep 0.5s
- [ -r "${KEYFILE}" ] && break
- done
- }
- [ -r "${KEYFILE}" ] || warn "Key ${KEYFILE} for ${ENCRYPTIONROOT} hasn't appeared. Trying anyway."
- zfs load-key "${ENCRYPTIONROOT}"
- ;;
- *)
- zfs load-key "${ENCRYPTIONROOT}"
- ;;
- esac
- fi
-fi
+[ "$(zpool get -Ho value feature@encryption "${BOOTFS%%/*}")" = 'active' ] || return 0
+
+ENCRYPTIONROOT="$(zfs get -Ho value encryptionroot "${BOOTFS}")"
+[ "${ENCRYPTIONROOT}" = "-" ] && return 0
+
+[ "$(zfs get -Ho value keystatus "${ENCRYPTIONROOT}")" = "unavailable" ] || return 0
+
+KEYLOCATION="$(zfs get -H -o value keylocation "${ENCRYPTIONROOT}")"
+case "${KEYLOCATION%%://*}" in
+ prompt)
+ for _ in 1 2 3; do
+ systemd-ask-password --no-tty "Encrypted ZFS password for ${BOOTFS}" | zfs load-key "${ENCRYPTIONROOT}" && break
+ done
+ ;;
+ http*)
+ systemctl start network-online.target
+ zfs load-key "${ENCRYPTIONROOT}"
+ ;;
+ file)
+ KEYFILE="${KEYLOCATION#file://}"
+ [ -r "${KEYFILE}" ] || udevadm settle
+ [ -r "${KEYFILE}" ] || {
+ info "ZFS: Waiting for key ${KEYFILE} for ${ENCRYPTIONROOT}..."
+ for _ in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20; do
+ sleep 0.5s
+ [ -r "${KEYFILE}" ] && break
+ done
+ }
+ [ -r "${KEYFILE}" ] || warn "ZFS: Key ${KEYFILE} for ${ENCRYPTIONROOT} hasn't appeared. Trying anyway."
+ zfs load-key "${ENCRYPTIONROOT}"
+ ;;
+ *)
+ zfs load-key "${ENCRYPTIONROOT}"
+ ;;
+esac