mirror of
https://git.proxmox.com/git/mirror_zfs.git
synced 2024-12-27 03:19:35 +03:00
162cc80b81
Let Debian use the sysv-rc variant of the script, even when OpenRC is
installed. Unlike on Gentoo, OpenRC on Debian consumes both the
sysv-rc scripts and OpenRC ones. ZFS initscripts on Debian should be
the sysv-rc version to provide most compatibility and to integrate
with the rest of initscripts for dependency tracking.
Restrict the substitution in the Makefile to the dedicated list.
This construct is inspired by Mo Zhou's detection of the execution
shell and follows the strategy of Peter in 6ef28c526b
.
As of 2024, the initscripts are mostly relevant on Debian, Gentoo and
their derivatives.
Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
Signed-off-by: Benda Xu <orv@debian.org>
Issue #8063
Issue #8204
Issue #8359
Closes #15977
133 lines
3.0 KiB
Plaintext
Executable File
133 lines
3.0 KiB
Plaintext
Executable File
#!@DEFAULT_INIT_SHELL@
|
|
# shellcheck disable=SC2154
|
|
#
|
|
# zfs-load-key This script will load/unload the zfs filesystems keys.
|
|
#
|
|
# chkconfig: 2345 06 99
|
|
# description: This script will load or unload the zfs filesystems keys during
|
|
# system boot/shutdown. Only filesystems with key path set
|
|
# in keylocation property. See the zfs(8) man page for details.
|
|
# probe: true
|
|
#
|
|
### BEGIN INIT INFO
|
|
# Provides: zfs-load-key
|
|
# Required-Start: $local_fs zfs-import
|
|
# Required-Stop: $local_fs zfs-import
|
|
# Default-Start: 2 3 4 5
|
|
# Default-Stop: 0 1 6
|
|
# X-Start-Before: zfs-mount
|
|
# X-Stop-After: zfs-zed
|
|
# Short-Description: Load ZFS keys for filesystems and volumes
|
|
# Description: Run the `zfs load-key` or `zfs unload-key` commands.
|
|
### END INIT INFO
|
|
#
|
|
# Released under the 2-clause BSD license.
|
|
#
|
|
# This script is based on debian/zfsutils.zfs.init from the
|
|
# Debian GNU/kFreeBSD zfsutils 8.1-3 package, written by Aurelien Jarno.
|
|
|
|
# Source the common init script
|
|
. @sysconfdir@/zfs/zfs-functions
|
|
|
|
# ----------------------------------------------------
|
|
|
|
do_depend()
|
|
{
|
|
# bootmisc will log to /var which may be a different zfs than root.
|
|
before bootmisc logger zfs-mount
|
|
|
|
after zfs-import sysfs
|
|
keyword -lxc -openvz -prefix -vserver
|
|
}
|
|
|
|
# Load keys for all datasets/filesystems
|
|
do_load_keys()
|
|
{
|
|
zfs_log_begin_msg "Load ZFS filesystem(s) keys"
|
|
|
|
"$ZFS" list -Ho name,encryptionroot,keystatus,keylocation |
|
|
while IFS=" " read -r name encryptionroot keystatus keylocation; do
|
|
if [ "$encryptionroot" != "-" ] &&
|
|
[ "$name" = "$encryptionroot" ] &&
|
|
[ "$keystatus" = "unavailable" ] &&
|
|
[ "$keylocation" != "prompt" ] &&
|
|
[ "$keylocation" != "none" ]
|
|
then
|
|
zfs_action "Load key for $encryptionroot" \
|
|
"$ZFS" load-key "$encryptionroot"
|
|
fi
|
|
done
|
|
|
|
zfs_log_end_msg 0
|
|
|
|
return 0
|
|
}
|
|
|
|
# Unload keys for all datasets/filesystems
|
|
do_unload_keys()
|
|
{
|
|
zfs_log_begin_msg "Unload ZFS filesystem(s) key"
|
|
|
|
"$ZFS" list -Ho name,encryptionroot,keystatus | sed '1!G;h;$!d' |
|
|
while IFS=" " read -r name encryptionroot keystatus; do
|
|
if [ "$encryptionroot" != "-" ] &&
|
|
[ "$name" = "$encryptionroot" ] &&
|
|
[ "$keystatus" = "available" ]
|
|
then
|
|
zfs_action "Unload key for $encryptionroot" \
|
|
"$ZFS" unload-key "$encryptionroot"
|
|
fi
|
|
done
|
|
|
|
zfs_log_end_msg 0
|
|
|
|
return 0
|
|
}
|
|
|
|
do_start()
|
|
{
|
|
check_boolean "$ZFS_LOAD_KEY" || exit 0
|
|
|
|
check_module_loaded "zfs" || exit 0
|
|
|
|
do_load_keys
|
|
}
|
|
|
|
do_stop()
|
|
{
|
|
check_boolean "$ZFS_UNLOAD_KEY" || exit 0
|
|
|
|
check_module_loaded "zfs" || exit 0
|
|
|
|
do_unload_keys
|
|
}
|
|
|
|
# ----------------------------------------------------
|
|
|
|
if @IS_SYSV_RC@
|
|
then
|
|
case "$1" in
|
|
start)
|
|
do_start
|
|
;;
|
|
stop)
|
|
do_stop
|
|
;;
|
|
force-reload|condrestart|reload|restart|status)
|
|
# no-op
|
|
;;
|
|
*)
|
|
[ -n "$1" ] && echo "Error: Unknown command $1."
|
|
echo "Usage: $0 {start|stop}"
|
|
exit 3
|
|
;;
|
|
esac
|
|
|
|
exit $?
|
|
else
|
|
# Create wrapper functions since Gentoo don't use the case part.
|
|
depend() { do_depend; }
|
|
start() { do_start; }
|
|
stop() { do_stop; }
|
|
fi
|