1
0
mirror of git://projects.qi-hardware.com/openwrt-xburst.git synced 2025-04-21 12:27:27 +03:00

large init script cleanup and merge of whiterussian changes, new dnsmasq config handling

git-svn-id: svn://svn.openwrt.org/openwrt/trunk/openwrt@3588 3c298f89-4303-0410-b956-a3cf2f4a3e73
This commit is contained in:
nbd
2006-04-05 02:09:22 +00:00
parent 71d39e274f
commit 676c017ecf
58 changed files with 931 additions and 795 deletions

View File

@@ -1,62 +1,88 @@
#!/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
}
rom=$(awk '/squashfs/ {print $2}' /proc/mounts)
jffs=$(awk '/jffs2/ {print $2}' /proc/mounts)
[ -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 >&- 2>&-
mount -t jffs2 /dev/mtdblock/4 /jffs
dupe() { # <new_root> <old_root>
cd $1
echo -n "creating directories... "
{
cd $2
find . -xdev -type d
echo "./dev ./jffs ./mnt ./proc ./tmp ./sys"
# xdev skips mounted directories
cd $1
} | xargs mkdir -p
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
echo -n "setting up symlinks... "
for file in $(cd $2; find . -xdev -type f;); do
case "$file" in
"./rom/note") ;; #nothing
"./etc/config"|\
"./etc/resolv.conf"|\
"./usr/lib/ipkg/info") cp -af $2/$file $file;;
*) ln -sf /rom/${file#./*} $file;;
esac
done
for file in $(cd $2; find . -xdev -type l;); do
cp -af $2/${file#./*} $file
done
echo "done"
}
mount /dev/mtdblock/2 /rom -o ro
pivot() { # <new_root> <old_root>
mount -o move /proc $1/proc && \
pivot_root $1 $1$2 && {
mount -o move $2/dev /dev
mount -o move $2/tmp /tmp
}
}
echo -n "creating directories... "
{
cd /rom
find . -type d
cd -
} | xargs mkdir
echo "done"
mountdp() { # <device> <mount_point> <ignored> <fs>
dev=$1; mnt=$2; shift 2; opt=$*
mount $dev $mnt $opt
dupe $mnt $rom
pivot $mnt /rom
}
echo -n "setting up symlinks... "
for file in $(cd /rom; find * -type f; find * -type l;)
do {
case "${file%/*}" in
"usr/lib/ipkg/info"|"etc/config") cp -f /rom/$file $file;;
*) ln -sf /rom/$file $file;;
esac
} done
echo "done"
ramoverlay() {
mkdir -p /tmp/root
mountdp /tmp/root /mnt -o bind
}
touch /tmp/resolv.conf
ln -s /tmp/resolv.conf /etc/resolv.conf
[ "${0##*/}" = "firstboot" ] && {
[ -z "$rom" ] && {
echo "You do not have a squashfs partition; aborting"
echo "(firstboot cannot be run on jffs2 based firmwares)"
exit 1
}
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
[ "$1" = "switch2jffs" ] && {
mtd erase OpenWrt
mount -o remount,ro none / # try to avoid fs changing while copying
mount -o bind / /mnt
mount /dev/mtdblock/4 /rom/jffs -t jffs2
echo -n "copying files ... "
cp -a /mnt/* /rom/jffs
umount /mnt
echo "done"
pivot /rom /mnt
mount -o move /mnt /tmp/root
pivot /jffs /rom
jffs2root --clean
exit 0
}
# script run manually
[ \! -z "$jffs" ] && {
echo "firstboot has already been run"
echo "jffs2 partition is mounted, only resetting files"
dupe $jffs $rom
exit 0
}
mtd erase OpenWrt
mountdp /dev/mtdblock/4 /jffs -t jffs2
}