Files
poky/meta/packages/initrdscripts/files/init-live.sh
Samuel Ortiz 62ece10eb1 initrdscripts: init can now launch the installation script
Depending on the boot label ("boot" or "install"), init will either 
chroot into the rootfs image (live boot path), or launch the 
installation script (installation path).


git-svn-id: https://svn.o-hand.com/repos/poky/trunk@5457 311d38ba-8fff-0310-9ca6-ca027cbcb966
2008-10-08 14:34:50 +00:00

92 lines
1.6 KiB
Bash

#!/bin/sh
ROOT_MOUNT="/rootfs/"
ROOT_IMAGE=rootfs.img
MOUNT="/bin/mount"
UMOUNT="/bin/umount"
early_setup() {
mkdir /proc
mkdir /sys
mount -t proc proc /proc
mount -t sysfs sysfs /sys
udevd --daemon
}
read_args() {
[ -z "$CMDLINE" ] && CMDLINE=`cat /proc/cmdline`
for arg in $CMDLINE; do
optarg=`expr "x$arg" : 'x[^=]*=\(.*\)'`
case $arg in
root=*)
ROOT_DEVICE=$optarg ;;
rootfstype=*)
ROOT_FSTYPE=$optarg ;;
rootdelay=*)
rootdelay=$optarg ;;
LABEL=*)
label=$optarg ;;
video=*)
video_mode=$optarg ;;
vga=*)
vga_mode=$optarg ;;
esac
done
}
boot_live_root() {
killall udevd
cd $ROOT_MOUNT
exec switch_root -c /dev/console $ROOT_MOUNT /sbin/init
}
fatal() {
echo $1 >$CONSOLE
echo >$CONSOLE
exec sh
}
early_setup
[ -z "$CONSOLE" ] && CONSOLE="/dev/console"
read_args
echo "Waiting for removable media..."
while true
do
for i in `ls /media 2>/dev/null`; do
if [ -f /media/$i/$ROOT_IMAGE ] ; then
found="yes"
fi
done
if [ "$found" = "yes" ]; then
break;
fi
sleep 1
done
case $label in
boot)
mkdir $ROOT_MOUNT
mknod /dev/loop0 b 7 0
if ! $MOUNT -o rw,loop,noatime,nodiratime /media/$i/$ROOT_IMAGE $ROOT_MOUNT ; then
fatal "Couldnt mount rootfs image"
else
boot_live_root
fi
;;
install)
if [ -f /media/$i/$ROOT_IMAGE ] ; then
./install.sh $i $ROOT_IMAGE $video_mode $vga
else
fatal "Couldnt find install script"
fi
# If we're getting here, we failed...
fatal "Installation image failed"
;;
esac