diff options
author | Aaron Griffin <aaron@archlinux.org> | 2006-04-28 00:50:03 +0200 |
---|---|---|
committer | Aaron Griffin <aaron@archlinux.org> | 2006-04-28 00:50:03 +0200 |
commit | f9792380f7b2f9bfaab9361378e8e72bb67e77a2 (patch) | |
tree | e6f1f4c4f845cc62f1a23e1bd6c8488a3f0682bf /hooks | |
parent | e93d33835fc2078eafe5c4d923367e1e95f66822 (diff) | |
download | mkinitcpio-f9792380f7b2f9bfaab9361378e8e72bb67e77a2.tar.gz mkinitcpio-f9792380f7b2f9bfaab9361378e8e72bb67e77a2.tar.xz |
* Initial attempt to get the device-mapper stuff in order
* Moved 'init' to /lib/initcpio/init to be more in-tune
with the naming scheme
git-svn-id: http://projects.archlinux.org/svn/initramfs/mkinitcpio@27 880c04e9-e011-0410-abf7-b926e227c9cd
Diffstat (limited to 'hooks')
-rw-r--r-- | hooks/encrypt | 68 | ||||
-rw-r--r-- | hooks/lvm2 | 18 |
2 files changed, 74 insertions, 12 deletions
diff --git a/hooks/encrypt b/hooks/encrypt index 8b4c80b..bf7bc9f 100644 --- a/hooks/encrypt +++ b/hooks/encrypt @@ -1,17 +1,61 @@ # vim: set ft=sh: +# TODO this one needs some work to work with lots of different +# encryption schemes run_hook () { - echo "" - echo "A password is required to access the root filesystem:" - echo -n "password: " - if /bin/cryptsetup.static isLuks ${root} >/dev/null 2>&1; then - /bin/cryptsetup.static luksOpen ${root} root - else - /bin/cryptsetup create root ${root} - fi + mkdevice () { /bin/mknod "/dev/mapper/control" c ${1} ${2}; } + if [ -e "/sys/class/misc/device-mapper" ]; then + /bin/modprobe -a -q dm-crypt >/dev/null 2>&1 + read dev_t < /sys/class/misc/device-mapper/dev + OLDIFS=$IFS; IFS=: + mkdevice $dev_t + IFS=$OLDIFS - if [ $? != 0 ]; then - echo "ERROR: Password Verification Failed" - exit 1 - fi + if /bin/cryptsetup isLuks ${root} >/dev/null 2>&1; then + echo "" + echo "A password is required to access the root filesystem:" + echo -n "password: " + /bin/cryptsetup luksOpen ${root} root + if [ $? -ne 0 ]; then + err "Password verification failed, aborting..." + exit 1 + else + if [ -e "/dev/mapper/root" ]; then + export root="/dev/mapper/root" + else + err "Password succeeded, but root creation failed, aborting..." + exit 1 + fi + fi + else + do_oldcrypto () + { + exe="/bin/cryptsetup create root ${root}" + [ "x${1}" != "x" ] && exe="$exe --hash \"${1}\"" + [ "x${2}" != "x" ] && exe="$exe --cipher \"${2}\"" + [ "x${3}" != "x" ] && exe="$exe --key-size \"${3}\"" + [ "x${4}" != "x" ] && exe="$exe --offset \"${4}\"" + [ "x${5}" != "x" ] && exe="$exe --skip \"${5}\"" + echo "" + echo "A password is required to access the root filesystem:" + echo -n "password: " + eval "${exe}" + } + msg "Non-LUKS encrypted device found..." + if [ "x${crypto}" != "x" ]; then + do_oldcrypt ${crypto} + if [ $? -ne 0 ]; then + err "Password verification failed, aborting..." + err "Verify parameter format: crypto=hash:cipher:keysize:offset:skip" + exit 1 + else + if [ -e "/dev/mapper/root" ]; then + export root="/dev/mapper/root" + else + err "Password succeeded, but root creation failed, aborting..." + exit 1 + fi + fi + fi + fi } diff --git a/hooks/lvm2 b/hooks/lvm2 new file mode 100644 index 0000000..a1788ce --- /dev/null +++ b/hooks/lvm2 @@ -0,0 +1,18 @@ +# vim:set ft=sh: +run_hook () +{ + mkdevice () { /bin/mknod "/dev/mapper/control" c ${1} ${2}; } + + if [ -e "/sys/class/misc/device-mapper" ]; then + /bin/modprobe -q dm-mod >/dev/null 2>&1 + read dev_t < /sys/class/misc/device-mapper/dev + OLDIFS=$IFS; IFS=: + mkdevice $dev_t + IFS=$OLDIFS + + msg "Scanning logical volumes..." + /bin/lvm vgscan --ignorelockingfailure + msg "Activating logical volumes..." + /bin/lvm vgchange --ignorelockingfailure -ay + fi +} |