summaryrefslogtreecommitdiff
path: root/sys-boot/myinitramfs/files
diff options
context:
space:
mode:
Diffstat (limited to 'sys-boot/myinitramfs/files')
-rwxr-xr-xsys-boot/myinitramfs/files/gen.sh13
-rwxr-xr-xsys-boot/myinitramfs/files/init.enc3
-rwxr-xr-xsys-boot/myinitramfs/files/init.plain94
3 files changed, 4 insertions, 106 deletions
diff --git a/sys-boot/myinitramfs/files/gen.sh b/sys-boot/myinitramfs/files/gen.sh
index 3341d93..b633731 100755
--- a/sys-boot/myinitramfs/files/gen.sh
+++ b/sys-boot/myinitramfs/files/gen.sh
@@ -6,23 +6,12 @@ shift
cd "$(dirname "$(readlink -f "$0")")"
-INIT="./init.plain"
-
-while [ $# -gt 0 ]; do
- case "$1" in
- encrypted)
- INIT="./init.enc"
- ;;
- esac
- shift
-done
-
LIST="$(mktemp)"
# Base list
cp baselist "$LIST"
# Init script
-echo "file /init $INIT 755 0 0" >> "$LIST"
+echo "file /init ./init.enc 755 0 0" >> "$LIST"
echo >> "$LIST"
# Executables
while read EXE; do
diff --git a/sys-boot/myinitramfs/files/init.enc b/sys-boot/myinitramfs/files/init.enc
index 134d85c..ef92527 100755
--- a/sys-boot/myinitramfs/files/init.enc
+++ b/sys-boot/myinitramfs/files/init.enc
@@ -51,6 +51,9 @@ for opt in $(cat /proc/cmdline); do
root=*)
root=${opt:5}
;;
+ rootuuid=*)
+ root=/dev/disk/by-uuid/${opt:9}
+ ;;
rootflags=*)
rootflags=${opt:10}
;;
diff --git a/sys-boot/myinitramfs/files/init.plain b/sys-boot/myinitramfs/files/init.plain
deleted file mode 100755
index 08a47b8..0000000
--- a/sys-boot/myinitramfs/files/init.plain
+++ /dev/null
@@ -1,94 +0,0 @@
-#!/bin/busybox sh
-# vim:ft=sh
-
-# Init must have pid 1 otherwise switch_root won't work.
-if [ $$ -ne 1 ]; then
- echo "init must have pid 1!"
- exit 1
-fi
-
-# Predefice colors
-C_NO="\e[0m"
-C_GRAY="\e[1;30m"
-C_RED="\e[1;31m"
-C_GREEN="\e[1;32m"
-C_YELLOW="\e[1;33m"
-
-PATH="$PATH:/bin:/sbin"
-
-# disable kernel message from terminal and clear screen
-echo 0 > /proc/sys/kernel/printk
-clear
-
-# TODO print some welcome ascii art :-)
-
-# Function called if we fail. Argument is error message.
-fail() {
- echo -e "${C_RED}$@${C_NO}"
- echo -e "${C_YELLOW}Dropping to interactive shell${C_NO}"
- busybox --install -s
- while true; do
- echo -e "${C_GRAY}Mount root to /mnt/root and exit shell to switch root.${C_NO}"
- # Note: this is hack to enable job control
- setsid sh -c 'exec sh </dev/tty1 >/dev/tty1 2>&1'
- echo
- exec switch_root /mnt/root /sbin/init || echo -e "${C_RED}Root switch failed!${C_NO}"
- done
-}
-
-# Preliminary mounts
-busybox mount -t proc none /proc || fail "/proc mount failed!"
-busybox mount -t sysfs none /sys || fail "/sys mount failed!"
-busybox mount -t devtmpfs none /dev || fail "/dev mount failed!"
-
-# Now open and mount root
-root=""
-rootflags=""
-recovery=false
-
-for opt in $(cat /proc/cmdline); do
- case "$opt" in
- root=*)
- root=${opt:5}
- ;;
- rootflags=*)
- rootflags=${opt:10}
- ;;
- recovery)
- recovery=true
- ;;
- BOOT_IMAGE=*|initrd=*)
- # Ignore those
- ;;
- *)
- echo -e "${C_YELLOW}Unknown kernel argument: $opt${C_NO}"
- ;;
- esac
-done
-
-$recovery && fail "Requested recovery."
-
-[ -z "$root" ] && fail "Missing root argument!"
-
-echo -ne "${C_GRAY}Waiting for root ($root)..."
-CNT=10
-while [ ! -e "$root" ] && [ $CNT -gt 0 ]; do
- CNT=$(expr $CNT - 1)
- sleep 1
- echo -n " $CNT"
-done
-echo -e "${C_NO}"
-[ -e "$root" ] || fail "Root not located!"
-
-echo -e "${C_GREEN}Mounting root...${C_NO}"
-mount -t btrfs -o "$rootflags" "$root" /mnt/root \
- || fail "Mounting root failed! /proc/cmdline=$(cat /proc/cmdline)"
-
-
-echo -e "${C_GREEN}Switching to real root${C_NO}"
-
-# First clean up. The init process will remount proc, sys and dev later on
-busybox umount /dev /sys /proc || fail "Unmouns failed!"
-
-# Now do switch
-exec switch_root /mnt/root /sbin/init || fail "Root switch failed!"