/linuxrc
#!/bin/sh
#
# BerryBoot, ugly but functional image chooser thingy
#
# Author: Floris Bos
#
# Standard busybox init
/bin/mount -t proc proc /proc
/bin/mount -o remount,rw,noatime /
/bin/mount -a
/bin/hostname -F /etc/hostname
# Enumerate images
cd /images
IMAGES=`echo *`
DIALOG_ARGS="--backtitle 'BerryBoot v0.1' --menu 'Select operating system to boot:' 15 50 10"
for image in $IMAGES
do
DIALOG_ARGS="$DIALOG_ARGS '$image' ''"
done
# Prevent kernel messages being printed through our menu
echo 0 > /proc/sys/kernel/printk
# Show dialog
eval dialog $DIALOG_ARGS 2>/tmp/answer
if [ $? -eq 0 ]; then
echo 1 > /proc/sys/kernel/printk
IMAGE=`cat /tmp/answer`
DATADIR="/data/$IMAGE"
rm /tmp/answer
mkdir -p /mnt/squashfs /mnt/aufs $DATADIR
modprobe aufs
modprobe squashfs
echo Mounting image ${IMAGE}...
mount -o loop $IMAGE /mnt/squashfs
echo Mounting RW data directory on top
mount -t aufs -o br:${DATADIR}:/shared:/mnt/squashfs none /mnt/aufs
cd /mnt/aufs
mkdir -p -m 700 .berryboot
umount /sys
umount /dev/pts
umount /dev/shm
umount /tmp
umount /proc
pivot_root . .berryboot
exec chroot . /sbin/init </dev/console 2>/dev/console
fi
# In case the user pressed cancel or something went wrong, show an emergency recovery shell
echo
echo Emergency shell activated
echo
echo To get network connectivity: udhcpc eth0 - wget can be used to download things
echo Squashfs images are in /images
echo User changes to the images are in /data
echo Before shutting down remount readonly: mount -o remount,ro /
echo
/bin/sh