diff options
Diffstat (limited to 'packages/nslu2-binary-only/unslung-rootfs')
-rw-r--r-- | packages/nslu2-binary-only/unslung-rootfs/NOTES | 8 | ||||
-rw-r--r-- | packages/nslu2-binary-only/unslung-rootfs/unsling | 153 |
2 files changed, 159 insertions, 2 deletions
diff --git a/packages/nslu2-binary-only/unslung-rootfs/NOTES b/packages/nslu2-binary-only/unslung-rootfs/NOTES index 9f110f8fe2..da2601acaf 100644 --- a/packages/nslu2-binary-only/unslung-rootfs/NOTES +++ b/packages/nslu2-binary-only/unslung-rootfs/NOTES @@ -423,7 +423,11 @@ and about 1MB of RAM. First public release of 4.x firmware. -4.21: +5.1: Upgraded to Linksys firmware V2.3R29, but kept telnetd. -Fixed maintenance mode. + +5.2: + +Removed the ipkg link, and made unsling put it back on an external disk. + diff --git a/packages/nslu2-binary-only/unslung-rootfs/unsling b/packages/nslu2-binary-only/unslung-rootfs/unsling index e69de29bb2..6e5a5ef8c3 100644 --- a/packages/nslu2-binary-only/unslung-rootfs/unsling +++ b/packages/nslu2-binary-only/unslung-rootfs/unsling @@ -0,0 +1,153 @@ +#!/bin/sh + +usage="Usage: $0 disk1|disk2" + +# Set target disk + +if [ $# -gt 1 ] ; then + echo $usage + exit 1 +fi + +if [ $# -eq 1 ] ; then + if [ "$1" = "disk1" ] ; then + targ=/share/hdd/data + copy=true + flag=.sda1root + elif [ "$1" = "disk2" ] ; then + targ=/share/flash/data + copy=true + flag=.sdb1root + elif [ "$1" = "hdd-data" ] ; then + targ=/share/hdd/data + copy=true + flag=.sda1root + elif [ "$1" = "hdd-conf" ] ; then + targ=/share/hdd/conf + copy=true + flag=.sda2root + elif [ "$1" = "flash-data" ] ; then + targ=/share/flash/data + copy=true + flag=.sdb1root + elif [ "$1" = "flash-conf" ] ; then + targ=/share/flash/conf + copy=true + flag=.sdb2root + elif [ "$1" = "jffs2-hdd-data" ] ; then + targ=/share/hdd/data + copy= + elif [ "$1" = "jffs2-hdd-conf" ] ; then + targ=/share/hdd/conf + copy= + elif [ "$1" = "jffs2-flash-data" ] ; then + targ=/share/flash/data + copy= + elif [ "$1" = "jffs2-flash-conf" ] ; then + targ=/share/flash/conf + copy= + else + echo $usage + exit 1 + fi +else + echo $usage + exit 1 +fi + +# Check it's a real mount point + +if grep $targ /proc/mounts >/dev/null 2>&1 ; then + echo "Target disk is $targ" +else + echo "Error: $targ is not a mounted disk" + exit 1 +fi + +# Start at the root directory + +cd / + +if [ -z "$copy" ] ; then + + # Ensure /opt is there. + + if [ ! -d $targ/opt ] ; then + echo "Creating new /opt directory on target disk." + mkdir -p $targ/opt + else + echo "Preserving existing /opt directory on target disk." + fi + + if [ -d /opt -a ! -h /opt ] ; then + echo "Copying existing /opt directory from root disk to target disk." + tar cf - opt | ( cd $targ ; tar xf - ) + mv /opt /opt.old + fi + + echo "Linking /opt directory from target disk to root disk." + rm -f /opt ; ln -s $targ/opt /opt + + # Ensure /usr/lib/ipkg is there. + + if [ ! -d $targ/usr/lib/ipkg ] ; then + echo "Creating new /usr/lib/ipkg directory on target disk." + mkdir -p $targ/usr/lib/ipkg + fi + + if [ ! -f $targ/usr/lib/ipkg/status -a -d /usr/lib/ipkg -a ! -h /usr/lib/ipkg ] ; then + echo "Copying existing /usr/lib/ipkg directory from root disk to target disk." + tar cf - usr/lib/ipkg | ( cd $targ ; tar xf - ) + else + echo "Preserving existing ipkg database on target disk." + fi + + if [ -d /usr/lib/ipkg -a ! -h /usr/lib/ipkg ] ; then + echo "Saving /usr/lib/ipkg directory on root disk in /usr/lib/ipkg.old" + rm -rf /usr/lib/ipkg.old + mv /usr/lib/ipkg /usr/lib/ipkg.old + fi + + echo "Linking /usr/lib/ipkg directory from target disk to root disk." + rm -f /usr/lib/ipkg ; ln -s $targ/usr/lib/ipkg /usr/lib/ipkg + + echo "Linking /usr/bin/ipkg executable on root disk." + rm -f /usr/bin/ipkg ; ln -s /usr/bin/ipkg-cl /usr/bin/ipkg + +else + + # Save the existing ipkg database. + + rm -rf $targ/usr/lib/ipkg.old + if [ -f $targ/usr/lib/ipkg/status ] ; then + mv $targ/usr/lib/ipkg $targ/usr/lib/ipkg.old + fi + + # Copy the complete rootfs to the target. + + echo "Copying the complete rootfs from / to $targ." + /usr/bin/find / -print0 -mount | /usr/bin/cpio -p -0 -d -m -u $targ + rm -rf $targ/dev ; mv $targ/dev.state $targ/dev + rm -rf $targ/var ; mv $targ/var.state $targ/var + + # Copy over the existing ipkg database. + + if [ -f $targ/usr/lib/ipkg.old/status ] ; then + echo "Preserving existing ipkg database on target disk." + ( cd $targ/usr/lib/ipkg.old ; tar cf - . ) | ( cd $targ/usr/lib/ipkg ; tar xf - ) + fi + + echo "Linking /usr/bin/ipkg executable on target disk." + rm -f $targ/usr/bin/ipkg ; ln -s /usr/bin/ipkg-cl $targ/usr/bin/ipkg + + # Create the boot flag file. + + rm -f /.sd??root $targ/.sd??root /.ramdisk $targ/.ramdisk + + echo "Creating /$flag to direct switchbox to boot from $targ." + echo > /$flag + echo > $targ/$flag + +fi + +exit 0 |