}
}
-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
}
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)"
[ "$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
}
[ \! -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
}
mtd unlock linux
mount | grep jffs2 >&-
if [ $? = 0 ] ; then
+ grep "mini_fo" /proc/filesystems >&- ||
mount -o remount,rw /dev/root /
else
. /bin/firstboot
mount /dev/mtdblock/4 /jffs -t jffs2
fopivot /jffs /rom
} || {
- echo "jffs2 unusable; using ramdisk"
+ echo "jffs2 not ready yet; using ramdisk"
ramoverlay
}
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>&-