#!/bin/sh

. /etc/profile

rescue_shell() {
    echo "Something went wrong. Dropping you to a shell."
#    busybox --install -s
    exec /bin/sh
}

echo -n "Mount fstab... "
mount -a
echo "done"

echo -n "Remount / read-write... "
mount -o remount,rw /
echo "done"

echo -n "Find HW-Config..."
export HWPART=`cat /proc/mtd | grep "\"HW-Config\"" | sed 's/mtd\(.\):.*/\1/'`
echo " $HWPART done"

NFSROOT=`cat /proc/cmdline | grep root=/dev/nfs`

if [ "$NFSROOT" ]; then

    echo "NFS Root. Skip updating."

    NEWROOT=`cat /proc/cmdline | sed 's/.*nfsroot=\([^ ]\+\).*/\1/'`

    KERNELIP=`cat /proc/cmdline | grep ip=`

    if [ "$KERNELIP" ]; then
	for i in /etc/init.d/S0?* ; do
	    $i start
	done

	echo "Get System ID... "
	/sbin/sysid > /dev/sysid

	for i in /etc/init.d/S0?* ; do
	    $i stop
	done
    else
	for i in /etc/init.d/S??* ; do
	    $i start noip
	done

	echo "Get IP address from DHCP..."
	/sbin/udhcpc -i eth0 -C -s /usr/sbin/udhcpc.script -t 100 -f -q -V elecardStb820

	for i in /etc/init.d/S??* ; do
	    $i stop
	done
    fi

    echo "done"
    
    echo -n "Unmount all... "
    umount -a
    echo "done"

    echo -n "Mount nfs root ${NEWROOT}... "
    mount -t nfs -o nolock,rw $NEWROOT /mnt || rescue_shell
    echo "done"

    echo "Switch root"
    exec switch_root /mnt /sbin/init
fi

SDAROOT=$(cat /proc/cmdline | grep root=/dev/sda)

if [ "$SDAROOT" ]; then

    echo "Mounting new Root. Skip updating."

    NEWROOT=$(cat /proc/cmdline | sed 's/.*root=\([^ ]\+\).*/\1/')

    for i in /etc/init.d/S0?* ; do
        $i start
    done

    echo "Get System ID... "
    /sbin/sysid > /dev/sysid

    for i in /etc/init.d/S0?* ; do
        $i stop
    done

    echo "done"

    echo -n "enabling SATA modules..."
    insmod /lib/modules/$(uname -r)/kernel/drivers/ata/libata.ko
    insmod /lib/modules/$(uname -r)/kernel/drivers/ata/sata_sil.ko
    echo "done"

    echo -n "Unmount all... "
    umount -a
    echo "done"

    echo -n "Mount nfs root ${NEWROOT}... "
    mount -o nolock,rw $NEWROOT /mnt || rescue_shell
    echo "done"

    echo "Switch root"
    exec switch_root /mnt /sbin/init

fi

# deprecated stuff, just ignore everything after here!
#   if we hit here, the kernel will be in really, really big trouble, since
#   killing init is an evil thing }:>
exit 1

echo "Start picture rotation..."

echo -n 1 > /tmp/images
/sbin/images &

echo "Run RC scripts... "
/etc/init.d/rcS
echo "done with RC scripts"

echo -n "Get new root... "
NEWROOT=/dev/`cat /proc/mtd | grep "\"Root\"" | sed 's/mtd\(.\):.*/mtdblock\1/'`
echo "${NEWROOT}"

echo -n "Mount jffs2 root ${NEWROOT}... "
mount -t jffs2 -o ro,noatime ${NEWROOT} /mnt || rescue_shell
echo "done"

echo "Stop picture rotation..."

# Stop rotating images
echo -n 0 > /tmp/images
while test -f /tmp/images_state; do usleep 500000; done
rm -f /tmp/images

echo "Stop RC scripts... "
/etc/init.d/rcH
echo "done with RC scripts"

echo -n "Unmount all... "
cat /etc/mtab | grep -v mnt > /tmp/mtab.tmp
rm -f /etc/mtab
ln -s /tmp/mtab.tmp /etc/mtab
umount -a
echo "done"

echo -n "Wait for userfs... "

while ! test -e /mnt/.version; do usleep 10000; done

echo "done"

echo "Switch root"
exec switch_root /mnt /sbin/init
