#!/bin/busybox sh ROOT=/dev/disk/by-label/rootfs HOME=/dev/disk/by-uuid/092fdc4a-4356-47d9-9272-9a5f58e33bbf prep_dev() { for opt in `cat /proc/cmdline`; do name=$(echo $opt | cut -d'=' -f 1) if [ $name == "root" ] || [ $name == "crypt_part" ]; then type=$(echo $opt | cut -d'=' -f 2) id=$(echo $opt | cut -d'=' -f 3) if [ $type == LABEL ]; then prefix="/dev/disk/by-label"; elif [ $type == UUID ]; then prefix="/dev/disk/by-uuid" fi mkdir -p $prefix full="$prefix/$id" if [ ! -e $full ]; then ln -s $(findfs "$type=$id") $full fi fi done } rescue_shell() { echo "Something went wrong. Dropping you to a shell." busybox --install -s exec /bin/sh } cryptsetup_do() { echo "cryptsetup $1 $2" cryptsetup -T 3 luksOpen $1 $2 } mount_root() { echo "mount root $1" mount $1 /newroot } mkdir -p /dev /proc /sys /newroot /etc touch /etc/mtab mount -t devtmpfs none /dev mount -t proc none /proc mount -t sysfs none /sys prep_dev resume cryptsetup_do $HOME home mount_root $ROOT || rescue_shell umount /dev umount /proc umount /sys exec switch_root /newroot /sbin/init