contrib; dracut: flatten zfs-load-key, simplify zfs-env-bootfs

Upstream-commit: fec2c613a4
Upstream-change: drop 90zfs/module-setup.sh.in cleanups that don't apply
Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
Signed-off-by: Ahelenia Ziemiańska <nabijaczleweli@nabijaczleweli.xyz>
Closes #13291
This commit is contained in:
наб 2022-04-04 22:52:43 +02:00 committed by Brian Behlendorf
parent 0864c29e7c
commit 71a1d8e5dc
2 changed files with 35 additions and 39 deletions

View File

@ -8,7 +8,7 @@ Before=zfs-import.target
[Service] [Service]
Type=oneshot 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] [Install]
WantedBy=zfs-import.target WantedBy=zfs-import.target

View File

@ -20,42 +20,38 @@ if [ "$BOOTFS" = "zfs:AUTO" ]; then
BOOTFS="$(zpool get -Ho value bootfs | grep -m1 -vFx -)" BOOTFS="$(zpool get -Ho value bootfs | grep -m1 -vFx -)"
fi fi
# if pool encryption is active and the zfs command understands '-o encryption' [ "$(zpool get -Ho value feature@encryption "${BOOTFS%%/*}")" = 'active' ] || return 0
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}")" ENCRYPTIONROOT="$(zfs get -Ho value encryptionroot "${BOOTFS}")"
case "${KEYLOCATION%%://*}" in [ "${ENCRYPTIONROOT}" = "-" ] && return 0
prompt)
for _ in 1 2 3; do [ "$(zfs get -Ho value keystatus "${ENCRYPTIONROOT}")" = "unavailable" ] || return 0
systemd-ask-password --no-tty "Encrypted ZFS password for ${BOOTFS}" | zfs load-key "${ENCRYPTIONROOT}" && break
done KEYLOCATION="$(zfs get -H -o value keylocation "${ENCRYPTIONROOT}")"
;; case "${KEYLOCATION%%://*}" in
http*) prompt)
systemctl start network-online.target for _ in 1 2 3; do
zfs load-key "${ENCRYPTIONROOT}" systemd-ask-password --no-tty "Encrypted ZFS password for ${BOOTFS}" | zfs load-key "${ENCRYPTIONROOT}" && break
;; done
file) ;;
KEYFILE="${KEYLOCATION#file://}" http*)
[ -r "${KEYFILE}" ] || udevadm settle systemctl start network-online.target
[ -r "${KEYFILE}" ] || { zfs load-key "${ENCRYPTIONROOT}"
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 file)
sleep 0.5s KEYFILE="${KEYLOCATION#file://}"
[ -r "${KEYFILE}" ] && break [ -r "${KEYFILE}" ] || udevadm settle
done [ -r "${KEYFILE}" ] || {
} info "ZFS: Waiting for key ${KEYFILE} for ${ENCRYPTIONROOT}..."
[ -r "${KEYFILE}" ] || warn "Key ${KEYFILE} for ${ENCRYPTIONROOT} hasn't appeared. Trying anyway." for _ in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20; do
zfs load-key "${ENCRYPTIONROOT}" sleep 0.5s
;; [ -r "${KEYFILE}" ] && break
*) done
zfs load-key "${ENCRYPTIONROOT}" }
;; [ -r "${KEYFILE}" ] || warn "ZFS: Key ${KEYFILE} for ${ENCRYPTIONROOT} hasn't appeared. Trying anyway."
esac zfs load-key "${ENCRYPTIONROOT}"
fi ;;
fi *)
zfs load-key "${ENCRYPTIONROOT}"
;;
esac