diff options
Diffstat (limited to 'recipes/nslu2-binary-only/unslung-rootfs/linuxrc')
-rwxr-xr-x | recipes/nslu2-binary-only/unslung-rootfs/linuxrc | 106 |
1 files changed, 106 insertions, 0 deletions
diff --git a/recipes/nslu2-binary-only/unslung-rootfs/linuxrc b/recipes/nslu2-binary-only/unslung-rootfs/linuxrc new file mode 100755 index 0000000000..1500779280 --- /dev/null +++ b/recipes/nslu2-binary-only/unslung-rootfs/linuxrc @@ -0,0 +1,106 @@ +#!/bin/sh + +NC_SLUGIP="192.168.1.77" +NC_TARGIP="192.168.1.100" + +if ( [ -f "/.nc" ] ) ; then + if ( [ -z "$RERUN" ] ) ; then + /bin/echo " DEBUG: Starting network console from flash ..." + . /.nc + /bin/echo "Insmod ixp400" + /sbin/insmod ixp400.o + /bin/echo "Insmod ixp425" + /sbin/insmod ixp425_eth.o + /sbin/ifconfig ixp0 $NC_SLUGIP + /bin/echo "Insmod netconsole" + /sbin/insmod netconsole.o target_ipaddr=$NC_TARGIP + /bin/echo "Redirecting output via nc and restarting /linuxrc ..." + export RERUN=1 + exec /linuxrc 2>&1 | tee /dev/console | /usr/bin/nc $NC_TARGIP 6666 + fi +fi + +# **** DO NOT EVEN THINK OF EDITING OR REMOVING THIS FILE **** +# **** UNLESS YOU REALLY KNOW *EXACTLY* WHAT YOU ARE DOING. **** + + +# Perform prepatory tasks, and determine whether an alternate rootfs is viable. + +/bin/mount -t proc proc /proc + +/bin/echo "1" > /proc/sys/kernel/panic + +if ( ! [ -f /.nodisk ] ) ; then + + /bin/echo "Sleeping while waiting for disk..." + cnt=20 + while [ $cnt -gt 0 ] ; do + /bin/echo -ne "\r$cnt " + /bin/sleep 1 + [ -e /.sda1root -a -f /proc/hdd_sda ] && cnt=0 + [ -e /.sdb1root -a -f /proc/hdd_sdb ] && cnt=0 + cnt=`expr $cnt - 1` + done + /bin/echo + + if [ -e /.fastdisk ] ; then + /bin/sleep 5 + else + /bin/sleep 15 + fi + + mounted= + + for prefroot in sda1 sdb1 ; do + if [ -z "$mounted" -a -e /.${prefroot}root ] ; then + if /bin/mount -rt ext3 /dev/$prefroot /mnt ; then + if [ -e /mnt/.${prefroot}root -a -x /mnt/bin/init ] ; then + /bin/echo "Root filesystem will be mounted from /dev/$prefroot ..." + mounted=/mnt + else + /bin/umount /mnt + /bin/echo "Can't find valid rootfs on /dev/$prefroot ..." + fi + fi + fi + done + + if [ -z "$mounted" ] ; then + /bin/echo "Can't find valid rootfs, using ramdisk ..." + mounted= + fi + + /bin/umount /proc + + # Pivot to the desired rootfs and run the initial executable. + + if [ -n "$mounted" ] ; then + + cd $mounted + + /bin/echo "Pivoting to external rootfs ..." + /sbin/pivot_root . initrd + + if ( [ -z "$RERUN" ] ) ; then + exec /usr/sbin/chroot . /bin/init < /dev/console 1> /dev/console 2> /dev/console + else + exec /usr/sbin/chroot . /bin/init + fi + else + + exec /bin/init + + fi + + /bin/echo "Can't pivot to external rootfs, using ramdisk ..." + +else + /bin/echo "Forced boot to internal flash ..." + /bin/echo "(One-time only, clearing forced boot flag file.)" + /bin/rm -f /.nodisk +fi + +exec /bin/init + +# Last-resort fall-back - this should never be reached. +/bin/sh |