kexec-initramfs/init

58 lines
1.1 KiB
Bash
Executable File

#!/bin/sh
set -x
export PATH="/bin"
# mounts
mount -t proc proc /proc
mount -t devtmpfs devtmp /dev
mount -t sysfs sys /sys
mount -o size=1G -t tmpfs tmpfs /tmp
# modules
for mod in mbcache fscrypto jbd2 ext4; do
modprobe "${mod}"
done
for mod in spl znvpair zcommon zunicode zavl icp zfs; do
modprobe "${mod}"
done
# populating useful additional /dev entries
mkdir -p /dev/disk/by-uuid
blkid | tr -d : | while read dev uuidvar rest; do
eval "${uuidvar}"
ln -s "${dev}" "/dev/disk/by-uuid/${UUID}"
done
# argument parsing
for var in $(cat /proc/cmdline | sed 's/[.]/_/g'); do
eval $var
done
eval "${root}"
pool=${ZFS/\/*}
if [ "${zfs_force}" = y ]; then
FORCE_FLAG=" -f"
else
FORCE_FLAG=""
fi
# meat
cryptsetup open UUID="${rd_luks_uuid}" "${pool}"
zpool import -N ${FORCE_FLAG} "${pool}"
mount -t zfs -o zfsutil "${ZFS}" /src
cp "$(readlink -f /src/boot/vmlinuz)" /tmp/vmlinuz
cp "$(readlink -f /src/boot/initrd)" /tmp/initrd
umount /src
# prevent zpool import moaning
zpool export "${pool}"
cryptsetup close "${pool}"
kexec --reuse-cmdline -f --initrd /tmp/initrd /tmp/vmlinuz
exec sh