From df714b2490392cb6d90768804c989ca27c80bf46 Mon Sep 17 00:00:00 2001 From: Mike Baker Date: Sat, 4 Nov 2006 08:31:19 +0000 Subject: [PATCH] fix issues running firstboot manually on a mini_fo system SVN-Revision: 5441 --- .../package/base-files/default/bin/firstboot | 49 +++++++++++++------ .../base-files/default/sbin/mount_root | 5 +- 2 files changed, 37 insertions(+), 17 deletions(-) diff --git a/openwrt/package/base-files/default/bin/firstboot b/openwrt/package/base-files/default/bin/firstboot index 148bc995de..efa86f0ef7 100755 --- a/openwrt/package/base-files/default/bin/firstboot +++ b/openwrt/package/base-files/default/bin/firstboot @@ -41,19 +41,15 @@ pivot() { # } } -mountdp() { # - dev=$1; mnt=$2; shift 2; opt=$* - mount $dev $mnt $opt - dupe $mnt $rom - pivot $mnt /rom -} - fopivot() { # 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 } diff --git a/openwrt/package/base-files/default/sbin/mount_root b/openwrt/package/base-files/default/sbin/mount_root index 9d336863c9..58b70d6647 100755 --- a/openwrt/package/base-files/default/sbin/mount_root +++ b/openwrt/package/base-files/default/sbin/mount_root @@ -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>&- -- 2.30.2