First cut of new linuxrc for Unslung
authorRod Whitby <rod@whitby.id.au>
Fri, 29 Apr 2005 23:27:57 +0000 (23:27 +0000)
committerRod Whitby <rod@whitby.id.au>
Fri, 29 Apr 2005 23:27:57 +0000 (23:27 +0000)
BKrev: 4272c2fdvDNPbq9fqafE9sldX5sGJQ

packages/nslu2-binary-only/unslung-rootfs-2.3r25/linuxrc
packages/nslu2-binary-only/unslung-rootfs_2.3r25.bb

index 5a18a05..d47ae79 100644 (file)
 #!/bin/sh
 
-if [ -f /.useportmap ] ; then
-    /sbin/portmap
-fi
-# /bin/umount /initrd
+mounted=
+prefroot=
+runboot=
 
-/bin/echo "Firmware Version: `/bin/cat /.unslung`"
 /bin/mount -t proc proc /proc
-/bin/echo "5" > /proc/sys/kernel/panic
-/bin/sleep 1
-
-#mounted=
-#
-#/bin/echo "0x1f04" > /proc/sys/kernel/real-root-dev
-#
-#/bin/umount /mnt/tmpmnt/proc
-#/bin/umount /mnt/tmpmnt
-#
-#/bin/sleep 10
-#
-#if [ -z "$mounted" ] && /bin/mount -rt ext3 /dev/sda2 /mnt/tmpmnt ; then
-#
-#    if  [ -x /mnt/tmpmnt/bin/init ] &&
-#      [ -d /mnt/tmpmnt/unslung ] && [ -r /mnt/tmpmnt/.unslung ] &&
-#      [ "`/bin/cat /.unslung`" = "`/bin/cat /mnt/tmpmnt/.unslung`" ] ; then
-#      /bin/echo "Root filesystem will be mounted from /dev/sda2 ..."
-#      mounted=/mnt/tmpmnt
-#      /bin/echo "0x0802" > /proc/sys/kernel/real-root-dev
-#      [ -r $mounted/unslung/rc.linuxrc ] && . $mounted/unslung/rc.linuxrc
-#    fi
-#
-#    /bin/umount /mnt/tmpmnt
-#fi
-#
-#if [ -z "$mounted" ] && /bin/mount -rt ext3 /dev/sdb2 /mnt/tmpmnt ; then
-#
-#    if  [ -x /mnt/tmpmnt/bin/init ] &&
-#      [ -d /mnt/tmpmnt/unslung ] && [ -r /mnt/tmpmnt/.unslung ] &&
-#      [ "`/bin/cat /.unslung`" = "`/bin/cat /mnt/tmpmnt/.unslung`" ] ; then
-#      /bin/echo "Root filesystem will be mounted from /dev/sdb2 ..."
-#      mounted=/mnt/tmpmnt
-#      /bin/echo "0x0812" > /proc/sys/kernel/real-root-dev
-#      [ -r $mounted/unslung/rc.linuxrc ] && . $mounted/unslung/rc.linuxrc
-#    fi
-#
-#    /bin/umount /mnt/tmpmnt
-#fi
-#
-#if [ -z "$mounted" ] ; then
-#    /bin/echo "Root filesystem will be mounted from /dev/ram0 ..."
-#fi
-#
+
+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=//`
+device=/dev/`/bin/sed -n -e 's/^\(mtd[0-9]*\): .* "FIS directory"/\1/p' /proc/mtd`   
+length=`/bin/dd if=$device bs=2 skip=2048 2>/dev/null | /usr/bin/hexdump -n 4 -e '4/1 "%02X"' $device`
+
+# Determine desired rootfs
+    if [ -f /.ramdisk ] ; then
+       /bin/echo "Preferred root device is /dev/ram0 (maintenence)"
+       mounted=/mnt/newroot
+       prefroot=maintenence
+    elif [ -f /.sda1root ] ; then
+       /bin/echo "Preferred root device is /dev/sda1 (disk 1)"
+       mounted=/mnt/newroot
+       prefroot=sda1
+    elif [ -f /.sda2root ] ; then
+       /bin/echo "Preferred root device is /dev/sda2 (disk 1)"
+       mounted=/mnt/newroot
+       prefroot=sda2
+    elif [ -f /.sdb1root ] ; then
+       /bin/echo "Preferred root device is /dev/sdb1 (disk 2)"
+       mounted=/mnt/newroot
+       prefroot=sdb1
+    elif [ -f /.sdb2root ] ; then
+       /bin/echo "Preferred root device is /dev/sdb2 (disk 2)"
+       mounted=/mnt/newroot
+       prefroot=sdb2
+    elif [ -f /.altroot ] ; then
+       /bin/echo "Preferred root device is a user defined blockdevice"
+       mounted=/mnt/newroot
+       prefroot=altroot
+    elif [ -f /.nfsroot ] ; then
+       /bin/echo "Preferred root device is through NFS"
+        mounted=/mnt/newroot
+       prefroot=nfsroot
+    else
+       /bin/echo "Preferred root device is jffs2"
+       mounted=
+       prefroot=jffs2
+    fi
+fi
+
+# perform prepatory tasks
+if [ -n "$prefroot" ] ; then
+
+    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/newroot
+       if [ -L /mnt/newroot/sbin/init -o -x /mnt/newroot/sbin/init -o \
+            -L /mnt/newroot/bin/init  -o -x /mnt/newroot/bin/init ] ; then
+           /bin/echo "Root filesystem will be mounted from /dev/$prefroot ..."
+       else
+           /bin/umount /mnt/newroot
+           /bin/echo "Cant 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/newroot
+        ( /usr/bin/find . -print0 -mount | /usr/bin/cpio -p -0 -d -m -u /mnt/newroot )
+       if [ -r /mnt/newroot/.unslung ] ; then
+            /bin/cp /mnt/newroot/home/httpd/html/Management/upgrade.cgi /mnt/newroot/home/httpd/html/Management/upgrade-real.cgi
+            /bin/echo "#!/bin/sh" > /mnt/newroot/home/httpd/html/Management/upgrade.cgi
+            /bin/echo >> /mnt/newroot/home/httpd/html/Management/upgrade.cgi
+            /bin/echo "/bin/mount -t ramfs none /upload -o size=8196 2>/dev/null" \
+                >> /mnt/newroot/home/httpd/html/Management/upgrade.cgi
+            /bin/echo "/bin/dd if=/dev/zero of=/upload/free-ram bs=1k count=8k 2>/dev/null" \
+                >> /mnt/newroot/home/httpd/html/Management/upgrade.cgi
+            /bin/echo "/bin/umount /upload 2>/dev/null" \
+                >> /mnt/newroot/home/httpd/html/Management/upgrade.cgi
+            /bin/echo "exec /home/httpd/html/Management/upgrade-real.cgi" \
+                >> /mnt/newroot/home/httpd/html/Management/upgrade.cgi
+            /bin/echo "Root filesystem will be mounted from /dev/ram0 (a copy of /dev/mtdblock4) ..."
+       fi
+
+    fi
+
+    if [ $prefroot = "altroot" ] ; then
+        # The altrootloc and altrootopts vars MUST be chosen here.
+       # ie: $altrootopts="-rt ext3" and $altrootloc=/dev/md0
+       # Also modules can be loaded here.
+       # also if you have a really slow starting disk, you can put a large sleep value here.
+        . /.altroot
+
+        /bin/mount $altrootopts $altrootloc /mnt/newroot
+       if [ -L /mnt/newroot/sbin/init -o -x /mnt/newroot/sbin/init -o \
+            -L /mnt/newroot/bin/init  -o -x /mnt/newroot/bin/init ] ; then
+           /bin/echo "Root filesystem will be mounted from a user defined rootfs (altroot) ..."
+       else
+           /bin/umount /mnt/newroot
+           /bin/echo "Cant find valid rootfs on user defined rootfs (altroot), using jffs2 ..."
+           mounted=
+           prefroot=jffs2
+       fi
+    fi
+
+    if [ $prefroot = "nfsroot" ] ; then
+
+       /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/newroot
+
+       if  [ -L /mnt/newroot/sbin/init -o -x /mnt/newroot/sbin/init -o \
+             -L /mnt/newroot/bin/init  -o -x /mnt/newroot/bin/init ] ; then
+           /bin/echo "Root filesystem will be mounted from an NFS root ..."
+           mounted=/mnt/newroot
+       else
+           /bin/umount /mnt/newroot
+           /bin/echo "Cant 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
+fi
+
+# Pivot
+if [ -n "$mounted" ] ; then
+    /bin/umount /proc
+    cd $mounted
+    if [ -x ./linuxrc -o -L ./linuxrc ] ; then
+       runboot=/linuxrc
+    elif [ -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
+fi
+
 /bin/umount /proc
 
-exec /bin/init
 exit 0
index a943472..f792094 100644 (file)
@@ -1,8 +1,8 @@
 SECTION = "base"
 
-PR = "r60"
+PR = "r61"
 
-UNSLUNG_VERSION = "4.16-alpha"
+UNSLUNG_VERSION = "4.17-alpha"
 
 DEPENDS = "nslu2-linksys-libs"
 
@@ -12,6 +12,7 @@ SRC_URI = "http://nslu.sf.net/downloads/nslu2-linksys-ramdisk-2.3r25.tar.bz2 \
           file://unsling \
           file://resling \
           file://slingover \
+          file://linuxrc \
           file://nsswitch.conf \
           file://rc.unslung-start \
           file://rc.unslung-stop \
@@ -63,6 +64,8 @@ do_compile () {
        rm -f ${S}/etc/rc.orig
        rm -f ${S}/etc/rc.d/rc.1.orig
 
+       install -m 755 ${WORKDIR}/linuxrc ${S}/linuxrc
+
        # Allow rc.bootbin to be diverted.
        mv ${S}/etc/rc.d/rc.bootbin ${S}/sbin/rc.bootbin
        install -m 755 ${WORKDIR}/rc.bootbin ${S}/etc/rc.d/rc.bootbin