Add a script to automatically attach gbde devices found in fstab

(or rc.conf) at boot time, and detach them when shutting down.  Not
added to the Makefile to give the rcng gurus an opportunity to improve
it.
This commit is contained in:
Garrett Wollman 2003-06-17 02:56:29 +00:00
parent 51710a4597
commit 41598123b9
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=116456

92
etc/rc.d/gbde Normal file
View File

@ -0,0 +1,92 @@
#!/bin/sh
#
# This file, originally written by Garrett A. Wollman, is in the public
# domain.
#
# $FreeBSD$
#
# PROVIDE: disks
# KEYWORD: FreeBSD
. /etc/rc.subr
name="gbde"
start_precmd="find_gbde_devices start"
stop_precmd="find_gbde_devices stop"
start_cmd="gbde_start"
stop_cmd="gbde_stop"
find_gbde_devices()
{
case "${gbde_devices-auto}" in
[Aa][Uu][Tt][Oo])
gbde_devices="";;
*)
return 0;;
esac
case "$1" in
start) fstab="/etc/fstab";;
stop) fstab=$(mktemp /tmp/mtab.XXXXXX)
mount -p >${fstab}
esac
#
# We can't use "mount -p | while ..." because when a shell loop
# is the target of a pipe it executes in a subshell, and so can't
# modify variables in the script.
#
while read device mountpt type options dump pass; do
case "$device" in
*.bde)
# Ignore swap devices
case "$type" in
swap)
continue;;
esac
case "$options" in
*noauto*)
if checkyesno gbde_autoattach_all; then
gbde_devices="${gbde_devices} ${device}"
fi
;;
*)
gbde_devices="${gbde_devices} ${device}"
;;
esac
;;
esac
done <${fstab}
case "$1" in
stop) rm -f ${fstab};;
esac
return 0
}
gbde_start()
{
for device in $gbde_devices; do
parentdev=${device%.bde}
parent=${parentdev#/dev/}
eval "lock=\${gbde_lock_${parent}-\"/etc/${parent}.lock\"}"
if [ -e $lock ]; then
echo "Configuring Disk Encryption for ${device}."
gbde attach ${parentdev} -l ${lock}
fi
done
}
gbde_stop()
{
for device in $gbde_devices; do
umount ${device}
gbde detach ${device%.bde}
done
}
load_rc_config $name
run_rc_command "$1"