From f9792380f7b2f9bfaab9361378e8e72bb67e77a2 Mon Sep 17 00:00:00 2001 From: Aaron Griffin Date: Thu, 27 Apr 2006 22:50:03 +0000 Subject: * 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 --- hooks/encrypt | 68 +++++++++++++++++++++++++++++++++++++++++++++++---------- hooks/lvm2 | 18 +++++++++++++++ install/base | 2 +- install/dm | 17 --------------- install/encrypt | 6 +++-- install/lvm2 | 19 ++++++++++++++++ mkinitcpio.conf | 5 +++-- 7 files changed, 101 insertions(+), 34 deletions(-) create mode 100644 hooks/lvm2 delete mode 100644 install/dm create mode 100644 install/lvm2 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 +} diff --git a/install/base b/install/base index 170df1b..0bb45db 100644 --- a/install/base +++ b/install/base @@ -18,7 +18,7 @@ install () add_file $f /bin/$(basename $f) done - add_file "/lib/initramfs/init" "/init" + add_file "/lib/initcpio/init" "/init" add_file "${CONFIG}" "/config" SCRIPT="" } diff --git a/install/dm b/install/dm deleted file mode 100644 index 7011f5e..0000000 --- a/install/dm +++ /dev/null @@ -1,17 +0,0 @@ -# vim: set ft=sh: - -install () -{ - MODULES=" $(all_modules "/md/" | grep -v "raid")" - BINARIES="" - FILES="" - SCRIPT="UNKNOWN" -} - -help () -{ -cat<