#!/bin/sh HASH=sha512 CIPHER=serpent KEYSIZE=32 NAME=hda2 DEVICE=/dev/$NAME getkey() { hashalot -x -n $KEYSIZE $HASH 2> /dev/null } mktable() { BDEVSIZE="`blockdev --getsize $DEVICE 2> /dev/null`" KEY="`getkey`" echo 0 $BDEVSIZE crypt $CIPHER-plain $KEY 0 $DEVICE 0 } setup() { echo -n "Enter password: " mktable | dmsetup create $NAME } remove() { dmsetup remove $NAME } mount -o remount,rw / mount -t proc none proc mkdir /newroot echo echo echo setup echo echo echo "You'll now get a shell so you can do e2fsck /dev/mapper/$NAME" echo echo /bin/sh mount /dev/mapper/$NAME /newroot mkdir -p /newroot/tmp/initrd umount /proc cd /newroot pivot_root . tmp/initrd exec < dev/console >dev/console 2>&1 exec chroot . /bin/sh << EOF /bin/umount /tmp/initrd || echo "*: Failed to unmount the initrd!" /sbin/blockdev --flushbufs /dev/ram0 >/dev/null 2>&1 exec /sbin/init EOF