This shows you the differences between two versions of the page.
— |
berryboot_linuxrc [2012/06/12 14:04] (current) max created |
||
---|---|---|---|
Line 1: | Line 1: | ||
+ | /linuxrc | ||
+ | <code> | ||
+ | #!/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 | ||
+ | </code> |