summaryrefslogtreecommitdiffstats
path: root/hooks
diff options
context:
space:
mode:
authorAaron Griffin <aaron@archlinux.org>2006-04-28 00:50:03 +0200
committerAaron Griffin <aaron@archlinux.org>2006-04-28 00:50:03 +0200
commitf9792380f7b2f9bfaab9361378e8e72bb67e77a2 (patch)
treee6f1f4c4f845cc62f1a23e1bd6c8488a3f0682bf /hooks
parente93d33835fc2078eafe5c4d923367e1e95f66822 (diff)
downloadmkinitcpio-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/encrypt68
-rw-r--r--hooks/lvm218
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
+}