summaryrefslogtreecommitdiff
path: root/packages/nslu2-binary-only/unslung-rootfs/linuxrc
diff options
context:
space:
mode:
Diffstat (limited to 'packages/nslu2-binary-only/unslung-rootfs/linuxrc')
-rw-r--r--packages/nslu2-binary-only/unslung-rootfs/linuxrc135
1 files changed, 135 insertions, 0 deletions
diff --git a/packages/nslu2-binary-only/unslung-rootfs/linuxrc b/packages/nslu2-binary-only/unslung-rootfs/linuxrc
index e69de29bb2..b512a286a6 100644
--- a/packages/nslu2-binary-only/unslung-rootfs/linuxrc
+++ b/packages/nslu2-binary-only/unslung-rootfs/linuxrc
@@ -0,0 +1,135 @@
+#!/bin/sh
+
+# **** DO NOT EVEN THINK OF EDITING OR REMOVING THIS FILE ****
+# **** UNLESS YOU REALLY KNOW *EXACTLY* WHAT YOU ARE DOING. ****
+
+
+# Determine the desired rootfs based on user flag files.
+
+if [ -f /.ramdisk ] ; then
+ /bin/echo "Preferred root device is /dev/ram0 (maintenence)"
+ mounted=/mnt
+ prefroot=maintenence
+elif [ -f /.sda1root ] ; then
+ /bin/echo "Preferred root device is /dev/sda1 (disk 1)"
+ mounted=/mnt
+ prefroot=sda1
+elif [ -f /.sda2root ] ; then
+ /bin/echo "Preferred root device is /dev/sda2 (disk 1)"
+ mounted=/mnt
+ prefroot=sda2
+elif [ -f /.sdb1root ] ; then
+ /bin/echo "Preferred root device is /dev/sdb1 (disk 2)"
+ mounted=/mnt
+ prefroot=sdb1
+elif [ -f /.sdb2root ] ; then
+ /bin/echo "Preferred root device is /dev/sdb2 (disk 2)"
+ mounted=/mnt
+ prefroot=sdb2
+elif [ -f /.nfsroot ] ; then
+ /bin/echo "Preferred root device is NFS"
+ mounted=/mnt
+ prefroot=nfsroot
+else
+ /bin/echo "Preferred root device is jffs2"
+ mounted=
+ prefroot=jffs2
+fi
+
+
+# Perform prepatory tasks, and determine whether the desired rootfs is viable.
+
+/bin/mount -t proc proc /proc
+
+if [ $prefroot = "sda1" -o $prefroot = "sda2" -o $prefroot = "sdb1" -o $prefroot = "sdb2" ] ; then
+ /bin/echo "Sleeping 10sec while waiting for disk..."
+ sleep 10
+ /bin/mount -rt ext3 /dev/$prefroot /mnt
+ if [ -L /mnt/sbin/init -o -x /mnt/sbin/init -o \
+ -L /mnt/bin/init -o -x /mnt/bin/init ] ; then
+ /bin/echo "Root filesystem will be mounted from /dev/$prefroot ..."
+ else
+ /bin/umount /mnt
+ /bin/echo "Can't find valid rootfs on /dev/$prefroot, using jffs2 ..."
+ mounted=
+ prefroot=jffs2
+ fi
+fi
+
+if [ $prefroot = "maintenence" ] ; then
+ /bin/dd if=/dev/zero of=/dev/ram0 bs=1k count=12k 2>/dev/null
+ /usr/bin/mke2fs -m 0 /dev/ram0 12288
+ /bin/mount -t ext2 /dev/ram0 /mnt
+ ( /usr/bin/find . -print0 -mount | /usr/bin/cpio -p -0 -d -m -u /mnt )
+ /bin/rm -f /mnt/linuxrc
+ /bin/mkdir /mnt/mnt/backup /mnt/mnt/repair /mnt/mnt/tmpmnt
+fi
+
+if [ $prefroot = "nfsroot" ] ; then
+
+ sysconflen=`/bin/dd if=/dev/mtd1 bs=4 count=1 2>/dev/null | /usr/bin/hexdump -n 6 -e '"%02d"'`
+ ipaddr=`/bin/dd if=/dev/mtd1 bs=1 count=$sysconflen skip=4 2>/dev/null | grep ip_addr | sed -e s/ip_addr=//`
+ netmask=`/bin/dd if=/dev/mtd1 bs=1 count=$sysconflen skip=4 2>/dev/null | grep netmask | sed -e s/netmask=//`
+ gateway=`/bin/dd if=/dev/mtd1 bs=1 count=$sysconflen skip=4 2>/dev/null | grep gateway | sed -e s/gateway=//`
+
+ /sbin/insmod ixp400
+ /sbin/insmod ixp425_eth
+ /sbin/ifconfig ixp0 up $ipaddr netmask $netmask
+ /sbin/route add default gw $gateway
+
+ /sbin/ifconfig lo up 127.0.0.1
+
+ # The nfsrootloc and nfsrootopts vars can be overridden here.
+ . /.nfsroot
+
+ /bin/mount $nfsrootopts $nfsrootloc /mnt
+
+ if [ -L /mnt/sbin/init -o -x /mnt/sbin/init -o \
+ -L /mnt/bin/init -o -x /mnt/bin/init ] ; then
+ /bin/echo "Root filesystem will be mounted from an NFS root ..."
+ mounted=/mnt
+ else
+ /bin/umount /mnt
+ /bin/echo "Can't find valid NFS rootfs, using jffs2 ..."
+ mounted=
+ prefroot=jffs2
+ fi
+fi
+
+if [ $prefroot = "jffs2" ] ; then
+ /bin/echo "Root filesystem will be mounted from /dev/mtdblock4 ..."
+ mounted=
+fi
+
+
+/bin/umount /proc
+
+# Pivot to the desired rootfs and run the initial executable.
+
+if [ -n "$mounted" ] ; then
+
+ cd $mounted
+
+ if [ -x ./sbin/init -o -L ./sbin/init ] ; then
+ runboot=/sbin/init
+ elif [ -x ./bin/init -o -L ./bin/init ] ; then
+ runboot=/bin/init
+ else
+ runboot=/bin/sh
+ fi
+
+ /sbin/pivot_root . initrd
+
+ exec /usr/sbin/chroot . $runboot < /dev/console 1> /dev/console 2> /dev/console
+
+else
+
+ exec /bin/init
+
+fi
+
+/bin/echo "Can't chroot to $prefroot, using jffs2 ..."
+exec /bin/init
+
+# Last-resort fall-back - this should never be reached.
+/bin/sh