summaryrefslogtreecommitdiff
path: root/recipes/nslu2-binary-only/unslung-rootfs/linuxrc
diff options
context:
space:
mode:
Diffstat (limited to 'recipes/nslu2-binary-only/unslung-rootfs/linuxrc')
-rwxr-xr-xrecipes/nslu2-binary-only/unslung-rootfs/linuxrc106
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