clean up handling of the root filesystem mount - remove broadcom specific junk from the generic base-files part
SVN-Revision: 3951master
parent
44f2725829
commit
6e5a58eb7b
@ -0,0 +1,89 @@ |
||||
#!/bin/sh |
||||
# $Id$ |
||||
|
||||
rom=$(awk '/squashfs/ {print $2}' /proc/mounts) |
||||
jffs=$(awk '/jffs2/ {print $2}' /proc/mounts) |
||||
|
||||
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" |
||||
|
||||
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" |
||||
} |
||||
|
||||
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 |
||||
mount -o move $2/sys /sys |
||||
return 0 |
||||
} |
||||
} |
||||
|
||||
mountdp() { # <device> <mount_point> <ignored> <fs> |
||||
dev=$1; mnt=$2; shift 2; opt=$* |
||||
mount $dev $mnt $opt |
||||
dupe $mnt $rom |
||||
pivot $mnt /rom |
||||
} |
||||
|
||||
ramoverlay() { |
||||
mkdir -p /tmp/root |
||||
mountdp /tmp/root /mnt -o bind |
||||
} |
||||
|
||||
[ "${0##*/}" = "firstboot" ] && { |
||||
[ -z "$rom" ] && { |
||||
echo "You do not have a squashfs partition; aborting" |
||||
echo "(firstboot cannot be run on jffs2 based firmwares)" |
||||
exit 1 |
||||
} |
||||
|
||||
[ "$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 |
||||
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 |
||||
} |
@ -0,0 +1,28 @@ |
||||
#!/bin/sh |
||||
size=$(awk '/Mem:/ {l=5242880;print((s=$2/2)<l)?$2-l:s}' /proc/meminfo) |
||||
mount none /tmp -t tmpfs -o size=$size |
||||
|
||||
if [ "$1" != "failsafe" ]; then |
||||
mtd unlock linux |
||||
mount | grep jffs2 >&- |
||||
if [ $? = 0 ] ; then |
||||
if [ $(cat /proc/mtd | wc -l) = 6 ]; then |
||||
mtd erase OpenWrt |
||||
else |
||||
mount -o remount,rw /dev/root / |
||||
fi |
||||
else |
||||
. /bin/firstboot |
||||
echo "switching to jffs2" |
||||
mount /dev/mtdblock/4 /jffs -t jffs2 |
||||
pivot /jffs /rom || { |
||||
echo "jffs2 unusable; using ramdisk" |
||||
ramoverlay |
||||
} |
||||
fi |
||||
fi |
||||
|
||||
mount none /tmp -t tmpfs -o remount,nosuid,nodev,mode=1777 |
||||
mkdir -p /dev/pts |
||||
mount none /dev/pts -t devpts |
||||
mount -t sysfs none /sys 2>&- |
@ -0,0 +1,11 @@ |
||||
#!/bin/sh |
||||
export PATH=/bin:/sbin:/usr/bin:/usr/sbin |
||||
mount none /proc -t proc |
||||
|
||||
[ -f /etc/preinit.arch ] && . /etc/preinit.arch |
||||
[ -z "$FAILSAFE" ] || { |
||||
echo /bin/true > /proc/sys/kernel/hotplug |
||||
telnetd -l /bin/login <> /dev/null 2>&1 |
||||
} |
||||
mount_root ${FAILSAFE:+failsafe} |
||||
exec /sbin/init |
@ -0,0 +1,38 @@ |
||||
#!/bin/sh |
||||
is_dirty() { |
||||
grep Broadcom /proc/cpuinfo >&- || return 1 |
||||
OFFSET="$(($(hexdump -v /dev/mtdblock/1 -s 20 -n 2 -e '"%d"')-1))" |
||||
return $(hexdump -v /dev/mtdblock/1 -s $OFFSET -n 1 -e '"%d"') |
||||
} |
||||
|
||||
size=$(awk '/Mem:/ {l=5242880;print((s=$2/2)<l)?$2-l:s}' /proc/meminfo) |
||||
mount none /tmp -t tmpfs -o size=$size |
||||
|
||||
if [ "$1" != "failsafe" ]; then |
||||
mtd unlock linux |
||||
mount | grep jffs2 >&- |
||||
if [ $? = 0 ] ; then |
||||
if [ $(cat /proc/mtd | wc -l) = 6 ]; then |
||||
mtd erase OpenWrt |
||||
jffs2root --move |
||||
else |
||||
mount -o remount,rw /dev/root / |
||||
fi |
||||
else |
||||
. /bin/firstboot |
||||
is_dirty |
||||
[ $? != 0 ] && { |
||||
echo "switching to jffs2" |
||||
mount /dev/mtdblock/4 /jffs -t jffs2 |
||||
pivot /jffs /rom |
||||
} || { |
||||
echo "jffs2 unusable; using ramdisk" |
||||
ramoverlay |
||||
} |
||||
fi |
||||
fi |
||||
|
||||
mount none /tmp -t tmpfs -o remount,nosuid,nodev,mode=1777 |
||||
mkdir -p /dev/pts |
||||
mount none /dev/pts -t devpts |
||||
mount -t sysfs none /sys 2>&- |
@ -0,0 +1,90 @@ |
||||
#!/bin/sh |
||||
# $Id$ |
||||
|
||||
rom=$(awk '/squashfs/ {print $2}' /proc/mounts) |
||||
jffs=$(awk '/jffs2/ {print $2}' /proc/mounts) |
||||
|
||||
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" |
||||
|
||||
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" |
||||
} |
||||
|
||||
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 |
||||
mount -o move $2/sys /sys |
||||
return 0 |
||||
} |
||||
} |
||||
|
||||
mountdp() { # <device> <mount_point> <ignored> <fs> |
||||
dev=$1; mnt=$2; shift 2; opt=$* |
||||
mount $dev $mnt $opt |
||||
dupe $mnt $rom |
||||
pivot $mnt /rom |
||||
} |
||||
|
||||
ramoverlay() { |
||||
mkdir -p /tmp/root |
||||
mountdp /tmp/root /mnt -o bind |
||||
} |
||||
|
||||
[ "${0##*/}" = "firstboot" ] && { |
||||
[ -z "$rom" ] && { |
||||
echo "You do not have a squashfs partition; aborting" |
||||
echo "(firstboot cannot be run on jffs2 based firmwares)" |
||||
exit 1 |
||||
} |
||||
|
||||
[ "$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 |
||||
} |
@ -0,0 +1,11 @@ |
||||
#!/bin/sh |
||||
export PATH=/bin:/sbin:/usr/bin:/usr/sbin |
||||
mount none /proc -t proc |
||||
|
||||
[ -f /etc/preinit.arch ] && . /etc/preinit.arch |
||||
[ -z "$FAILSAFE" ] || { |
||||
echo /bin/true > /proc/sys/kernel/hotplug |
||||
telnetd -l /bin/login <> /dev/null 2>&1 |
||||
} |
||||
mount_root ${FAILSAFE:+failsafe} |
||||
exec /sbin/init |
@ -0,0 +1,38 @@ |
||||
#!/bin/sh |
||||
is_dirty() { |
||||
grep Broadcom /proc/cpuinfo >&- || return 1 |
||||
OFFSET="$(($(hexdump -v /dev/mtdblock/1 -s 20 -n 2 -e '"%d"')-1))" |
||||
return $(hexdump -v /dev/mtdblock/1 -s $OFFSET -n 1 -e '"%d"') |
||||
} |
||||
|
||||
size=$(awk '/Mem:/ {l=5242880;print((s=$2/2)<l)?$2-l:s}' /proc/meminfo) |
||||
mount none /tmp -t tmpfs -o size=$size |
||||
|
||||
if [ "$1" != "failsafe" ]; then |
||||
mtd unlock linux |
||||
mount | grep jffs2 >&- |
||||
if [ $? = 0 ] ; then |
||||
if [ $(cat /proc/mtd | wc -l) = 6 ]; then |
||||
mtd erase OpenWrt |
||||
jffs2root --move |
||||
else |
||||
mount -o remount,rw /dev/root / |
||||
fi |
||||
else |
||||
. /bin/firstboot |
||||
is_dirty |
||||
[ $? != 0 ] && { |
||||
echo "switching to jffs2" |
||||
mount /dev/mtdblock/4 /jffs -t jffs2 |
||||
pivot /jffs /rom |
||||
} || { |
||||
echo "jffs2 unusable; using ramdisk" |
||||
ramoverlay |
||||
} |
||||
fi |
||||
fi |
||||
|
||||
mount none /tmp -t tmpfs -o remount,nosuid,nodev,mode=1777 |
||||
mkdir -p /dev/pts |
||||
mount none /dev/pts -t devpts |
||||
mount -t sysfs none /sys 2>&- |
@ -1,38 +1,8 @@ |
||||
#!/bin/sh |
||||
is_dirty() { |
||||
grep Broadcom /proc/cpuinfo >&- || return 1 |
||||
OFFSET="$(($(hexdump -v /dev/mtdblock/1 -s 20 -n 2 -e '"%d"')-1))" |
||||
return $(hexdump -v /dev/mtdblock/1 -s $OFFSET -n 1 -e '"%d"') |
||||
} |
||||
|
||||
size=$(awk '/Mem:/ {l=5242880;print((s=$2/2)<l)?$2-l:s}' /proc/meminfo) |
||||
mount none /tmp -t tmpfs -o size=$size |
||||
|
||||
if [ "$1" != "failsafe" ]; then |
||||
mtd unlock linux |
||||
mount | grep jffs2 >&- |
||||
if [ $? = 0 ] ; then |
||||
if [ $(cat /proc/mtd | wc -l) = 6 ]; then |
||||
mtd erase OpenWrt |
||||
jffs2root --move |
||||
else |
||||
mount -o remount,rw /dev/root / |
||||
fi |
||||
else |
||||
. /bin/firstboot |
||||
is_dirty |
||||
[ $? != 0 ] && { |
||||
echo "switching to jffs2" |
||||
mount /dev/mtdblock/4 /jffs -t jffs2 |
||||
pivot /jffs /rom |
||||
} || { |
||||
echo "jffs2 unusable; using ramdisk" |
||||
ramoverlay |
||||
} |
||||
fi |
||||
fi |
||||
|
||||
mount none /tmp -t tmpfs -o remount,nosuid,nodev,mode=1777 |
||||
mount none /proc -t proc |
||||
mount none /tmp -t tmpfs -o size=$size,nosuid,nodev,mode=1777 |
||||
mkdir -p /dev/pts |
||||
mount none /dev/pts -t devpts |
||||
mount -t sysfs none /sys 2>&- |
||||
mount -o remount,rw /dev/root / |
||||
|
@ -1,6 +0,0 @@ |
||||
#!/bin/ash |
||||
mount none /dev -t devfs |
||||
mount none /proc -t proc |
||||
mount_root failsafe |
||||
mount -o remount,rw /dev/root / |
||||
exec /bin/busybox init |
@ -1,4 +0,0 @@ |
||||
#!/bin/sh |
||||
mount none /proc -t proc |
||||
mount_root failsafe |
||||
mount -o remount,rw /dev/root / |
@ -1,3 +0,0 @@ |
||||
#!/bin/ash |
||||
mount none /dev -t devfs |
||||
exec /bin/busybox init |
Loading…
Reference in new issue