-[ "${0##*/}" = "firstboot" ] && {
-
- [ -z "$mtdpart" ] && {
- echo "MTD partition not found."
- exit 1
- }
-
- [ -z "$rom" ] && {
- echo "You do not have a squashfs partition; aborting"
- echo "(firstboot cannot be run on jffs2 based firmwares)"
- exit 1
- }
-
- [ "$1" = "switch2jffs" ] && {
- if grep -q mini_fo /proc/filesystems; then
- mount "$mtdpart" /rom/jffs -t jffs2 || exit
-
- # try to avoid fs changing while copying
- mount -o remount,ro none / 2>&-
-
- # copy ramoverlay to jffs2
- echo -n "copying files ... "
- 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>&-
- else
- # switch back to squashfs temporarily
- pivot /rom /mnt
-
- # get rid of the old overlay
- umount -l /mnt
-
- # another umount to get rid of the bind from /tmp/root
- umount -l /mnt
-
- # initialize jffs2
- mount "$mtdpart" /jffs -t jffs2 || exit
-
- # workaround to ensure that union can attach properly
- sync
- ls /jffs >/dev/null
-
- # switch to the new (empty) jffs2
- fopivot /jffs /rom 1
-
- # copy ramoverlay to jffs2, must be done after switching
- # to the new rootfs to avoid creating opaque directories
- echo -n "copying files ... "
- cp -a /tmp/root/* / >/dev/null 2>&1
- sync
- echo "done"
-
- umount -l /jffs
- umount -l /tmp/root
- fi
-
- exit 0
- }
-
- # script run manually
- [ \! -z "$jffs" ] && {
- echo "firstboot has already been run"
- echo "jffs2 partition is mounted, only resetting files"
- grep mini_fo /proc/filesystems >&-
- [ $? != 0 ] && {
- dupe $jffs $rom
- exit 0
- } || {
- rm -rf $jffs/* 2>&-
- mount -o remount $jffs / 2>&-
- exit 0
- }
- }
-
+if [ "${0##*/}" = "firstboot" ]; then
+ if [ "$1" = "switch2jffs" ]; then
+ boot_run_hook switch2jffs
+ elif [ -n "$jffs" ]; then
+ reset_has_fo=true
+ echo "firstboot has already been run"
+ echo "jffs2 partition is mounted, only resetting files"
+ boot_run_hook jffs2reset
+ else