diff options
Diffstat (limited to 'package/base-files/default/bin/firstboot')
| -rwxr-xr-x | package/base-files/default/bin/firstboot | 63 | 
1 files changed, 63 insertions, 0 deletions
diff --git a/package/base-files/default/bin/firstboot b/package/base-files/default/bin/firstboot new file mode 100755 index 000000000..cef258cf3 --- /dev/null +++ b/package/base-files/default/bin/firstboot @@ -0,0 +1,63 @@ +#!/bin/sh +# $Id$ + +mount | grep squashfs >&- || { +	echo "You do not have a squashfs partition; aborting" +	echo "(firstboot cannot be run on jffs2 based firmwares)" +	return +} + +[ -f "/tmp/.firstboot" ] && { +	echo "firstboot is already running" +	return +} +touch /tmp/.firstboot + +jdev=$(mount | awk '/jffs2/ {print $3}') + +if [ -z "$jdev" ]; then +	echo -n "Creating jffs2 partition... " +	mtd erase OpenWrt >&-  +	mount -t jffs2 /dev/mtdblock/4 /jffs +	echo "done" +	cd /jffs +else +	echo "firstboot has already been run" +	echo "jffs2 partition is mounted, only resetting files" +	cd $jdev +fi + +exec 2>/dev/null + +mount /dev/mtdblock/2 /rom -o ro + +echo -n "creating directories... " +{ +	cd /rom +	find . -type d +	cd - +} | xargs mkdir +echo "done" + +echo -n "setting up symlinks... " +for file in $(cd /rom; find *  -type f; find *  -type l;) +do { +  [ "${file%/*}" = "usr/lib/ipkg/info" ] && { +    cp -f /rom/$file $file +  } || { +    ln -sf /rom/$file $file +  } +} done +echo "done" + +touch /tmp/resolv.conf +ln -s /tmp/resolv.conf /etc/resolv.conf + +umount /rom +mount none /jffs/proc -t proc +pivot_root /jffs /jffs/rom +mount none /dev  -t devfs +mount none /tmp  -t ramfs +umount /rom/proc +umount /rom/tmp +umount /rom/dev  | 
