fix issues running firstboot manually on a mini_fo system
authorMike Baker <mbm@openwrt.org>
Sat, 4 Nov 2006 08:31:19 +0000 (08:31 +0000)
committerMike Baker <mbm@openwrt.org>
Sat, 4 Nov 2006 08:31:19 +0000 (08:31 +0000)
SVN-Revision: 5441

openwrt/package/base-files/default/bin/firstboot
openwrt/package/base-files/default/sbin/mount_root

index 148bc995ded7655655d9cb36e916276e869b3649..efa86f0ef7c87bdfdcfdd97ac0b337899f2c8128 100755 (executable)
@@ -41,19 +41,15 @@ pivot() { # <new_root> <old_root>
        }
 }
 
-mountdp() { # <device> <mount_point> <ignored> <fs>
-       dev=$1; mnt=$2; shift 2; opt=$*
-       mount $dev $mnt $opt
-       dupe $mnt $rom
-       pivot $mnt /rom
-}
-
 fopivot() { # <rw_root> <ro_root> <dupe?>
        root=$1
        {
                mount -t mini_fo -o base=/,sto=$1 $1 /mnt 2>&- && root=/mnt
        } || {
-               [ "$3" = "1" ] && mount -o bind $1 $1 && dupe $1 $rom
+               [ "$3" = "1" ] && {
+               mount | grep "on $1 type" 2>&- 1>&- || mount -o bind $1 $1
+               dupe $1 $rom
+               }
        }
        pivot $root $2
 }
@@ -63,7 +59,9 @@ ramoverlay() {
        fopivot /tmp/root /rom 1
 }
 
+# invoked as an executable
 [ "${0##*/}" = "firstboot" ] && {
+
        [ -z "$rom" ] && {
                echo "You do not have a squashfs partition; aborting"
                echo "(firstboot cannot be run on jffs2 based firmwares)"
@@ -72,17 +70,30 @@ ramoverlay() {
 
        [ "$1" = "switch2jffs" ] && {
                mtd erase OpenWrt
-               mount -o remount,ro none / 2>&- # try to avoid fs changing while copying
-               mount -o bind /tmp/root /mnt
+
+               # try to avoid fs changing while copying
+               mount -o remount,ro none / 2>&-
+
+               # copy ramoverlay to jffs2
                mount /dev/mtdblock/4 /rom/jffs -t jffs2
                echo -n "copying files ... "
-               cp -a /mnt/* /rom/jffs
-               umount /mnt
+               cp -a /tmp/root/* /rom/jffs 2>&-
                echo "done"
+
+               # switch back to squashfs (temporarily)
+               # and park the ramdisk ontop of /tmp/root
                pivot /rom /mnt
                mount -o move /mnt /tmp/root
+
+               # /jffs is the overlay
+               # /rom is the readonly
                fopivot /jffs /rom
+
+               # try to get rid of /tmp/root
+               # this will almost always fail
                umount /tmp/root 2>&-
+
+               # fs is clean
                jffs2root --clean
                exit 0
        }
@@ -91,10 +102,18 @@ ramoverlay() {
        [ \! -z "$jffs" ] && {
                echo "firstboot has already been run"
                echo "jffs2 partition is mounted, only resetting files"
-               dupe $jffs $rom
-               exit 0
+               grep mini_fo /proc/filesystems >&-
+               [ $? != 0 ] && {
+                       dupe $jffs $rom
+                       exit 0
+               } || { 
+                       rm -rf $jffs/* 2>&-
+                       mount -o remount $jffs / 2>&-
+                       exit 0
+               }
        }
 
        mtd erase OpenWrt
-       mountdp /dev/mtdblock/4 /jffs -t jffs2
+       mount /dev/mtdblock/4 /jffs -t jffs2
+       fopivot /jffs /rom 1
 }
index 9d336863c9c3d447e660c2ea0b6e491c0e1bf4d5..58b70d6647d14650849d065ea4e18ef8ff6e014d 100755 (executable)
@@ -9,6 +9,7 @@ if [ "$1" != "failsafe" -a "$(nvram get no_root_swap)" != 1 ]; then
        mtd unlock linux
        mount | grep jffs2 >&-
        if [ $? = 0 ] ; then
+               grep "mini_fo" /proc/filesystems >&- ||
                mount -o remount,rw /dev/root /
        else
                . /bin/firstboot
@@ -18,7 +19,7 @@ if [ "$1" != "failsafe" -a "$(nvram get no_root_swap)" != 1 ]; then
                        mount /dev/mtdblock/4 /jffs -t jffs2
                        fopivot /jffs /rom
                } || {
-                       echo "jffs2 unusable; using ramdisk"
+                       echo "jffs2 not ready yet; using ramdisk"
                        ramoverlay
                }
        fi
@@ -26,5 +27,5 @@ fi
 
 mount none /tmp -t tmpfs -o remount,nosuid,nodev,mode=1777
 mkdir -p /dev/pts
-mount none /dev/pts -t devpts
+mount none /dev/pts -t devpts 2>&-
 mount -t sysfs none /sys 2>&-