#!/bin/sh

ROOT=/tmp/root

ldd() { LD_TRACE_LOADED_OBJECTS=1 $*; }
libs() { ldd $* | awk '{print $3}'; }

install() { # <file> [ <symlink> ... ]
	src=$1
	files=$1
	[ -x $1 ] && files="$1 $(libs $1)"
	for file in $files; do {
		dest=$ROOT/$file
		[ -f $file -a ! -f $dest ] && {
			dir=$(dirname $dest)
			mkdir -p $dir
			[ ! -f $dest ] && cp $file $dest
		}
	}; done
	
	shift
	
	for link in $*; do {
		dest=$ROOT/$link
		dir=$(dirname $dest)
		mkdir -p $dir
		[ ! -f $dest ] && ln -s $src $dest
	}; done
}

pivot() { # <new_root> <old_root>
        mount | grep "on $1 type" 2>&- 1>&- || mount -o bind $1 $1
        mkdir -p $1$2 $1/proc $1/dev $1/tmp $1/jffs && \
        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/jffs /jffs 2>&-
                return 0
        }
        umount $1 $1
}

install /bin/busybox /bin/sh /bin/mount /bin/umount /sbin/pivot_root /usr/bin/wget /sbin/mtd /sbin/reboot

pivot $ROOT /mnt

mount -o remount,ro /mnt
umount -l /mnt

mount -o rmeount,ro /jffs
umount -l /jffs
