contrib; dracut: flatten zfs-load-key, simplify zfs-env-bootfs
Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov> Signed-off-by: Ahelenia Ziemiańska <nabijaczleweli@nabijaczleweli.xyz> Closes #13291
This commit is contained in:
parent
245529d85f
commit
fec2c613a4
|
@ -9,13 +9,10 @@ check() {
|
||||||
for tool in "zgenhostid" "zpool" "zfs" "mount.zfs"; do
|
for tool in "zgenhostid" "zpool" "zfs" "mount.zfs"; do
|
||||||
command -v "${tool}" >/dev/null || return 1
|
command -v "${tool}" >/dev/null || return 1
|
||||||
done
|
done
|
||||||
|
|
||||||
return 0
|
|
||||||
}
|
}
|
||||||
|
|
||||||
depends() {
|
depends() {
|
||||||
echo udev-rules
|
echo udev-rules
|
||||||
return 0
|
|
||||||
}
|
}
|
||||||
|
|
||||||
installkernel() {
|
installkernel() {
|
||||||
|
@ -39,7 +36,6 @@ install() {
|
||||||
{ dfatal "Failed to install essential binaries"; exit 1; }
|
{ dfatal "Failed to install essential binaries"; exit 1; }
|
||||||
|
|
||||||
# Adapted from https://github.com/zbm-dev/zfsbootmenu
|
# Adapted from https://github.com/zbm-dev/zfsbootmenu
|
||||||
|
|
||||||
if ! ldd "$(command -v zpool)" | grep -qF 'libgcc_s.so'; then
|
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
|
# On systems with gcc-config (Gentoo, Funtoo, etc.), use it to find libgcc_s
|
||||||
if command -v gcc-config >/dev/null; then
|
if command -v gcc-config >/dev/null; then
|
||||||
|
@ -79,7 +75,6 @@ install() {
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if dracut_module_included "systemd"; then
|
if dracut_module_included "systemd"; then
|
||||||
|
|
||||||
inst_simple "${systemdsystemunitdir}/zfs-import.target"
|
inst_simple "${systemdsystemunitdir}/zfs-import.target"
|
||||||
systemctl -q --root "${initdir}" add-wants initrd.target zfs-import.target
|
systemctl -q --root "${initdir}" add-wants initrd.target zfs-import.target
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
Loading…
Reference in New Issue