#!/bin/sh
# $Id: init,v 1.4 2009-01-31 00:06:21 tim Exp $

setArg() { eval $1="$2"; }
setCmd() { eval $1; }

setCmd SHELL=/bin/dash
setCmd CAT=/bin/cat
setCmd MOUNT=/bin/mount
setCmd UMOUNT=/bin/umount
setCmd MKDIR=/bin/mkdir
setCmd MKNOD=/bin/mknod
setCmd SLEEP=/bin/sleep
setCmd MODPROBE=/sbin/modprobe
setCmd UDEVD=/sbin/udevd
setCmd UDEVADM=/sbin/udevadm

echo "Loading, please wait..."

export PATH=/usr/sbin:/usr/bin:/sbin:/bin

[ -d /dev ] || ${MKDIR} --mode=0755 /dev
[ -d /sys ] || ${MKDIR} --mode=0755 /sys
[ -d /proc ] || ${MKDIR} --mode=0555 /proc
[ -d /cdrom ] || ${MKDIR} --mode=0555 /cdrom
[ -d /cdrom-u ] || ${MKDIR} --mode=0755 /cdrom-u
[ -d /.rootfs ] || ${MKDIR} --mode=0755 /.rootfs

${MOUNT} -t tmpfs none /dev
${MOUNT} -t sysfs none /sys
${MOUNT} -t proc none /proc

if [ -e /etc/udev/udev.conf ]; then
	. /etc/udev/udev.conf
fi

[ -e /dev/console ] || ${MKNOD} /dev/console c 5 1
[ -e /dev/null ] || ${MKNOD} /dev/null c 1 3
> /dev/.initramfs-tools
${MKDIR} /dev/.initramfs

echo > /proc/sys/kernel/hotplug

${MKDIR} -p /dev/.udev/db/
${UDEVD} --daemon

${MKDIR} -p /dev/.udev/queue/
${UDEVADM} trigger
${UDEVADM} settle || true

MOUNT_DELAY=30

echo "Detecting CD. Please wait ..."
initrd_id=$( ${CAT} /serial )

stoptime=$( ${CAT} /proc/uptime )
stoptime=$(( ${stoptime%%.*} + $MOUNT_DELAY ))

while [ ! -e /cdrom/serial ]; do
    for i in /dev/sr* /dev/hd* /dev/sd*; do
	if ( ${MOUNT} -n -o ro $i /cdrom >/dev/null 2>&1 ); then
	    if [ -e /cdrom/serial ]; then
		id=$( ${CAT} /cdrom/serial )
		if [ "$initrd_id" = "$id" ]; then
		    break;
		fi
	    fi
	    ${UMOUNT} /cdrom
	fi
    done

    if [ ! -e /cdrom/serial ]; then
	currtime=$( ${CAT} /proc/uptime )
	currtime=${currtime%%.*}
	
        if [ $stoptime -lt $currtime ]; then
          echo "Couldn't find CD"
          echo "Please mount the CD on /cdrom and then type 'exit'"
          ${SHELL}
        else
          sleep 1
        fi
    fi
done

${MOUNT} -t tmpfs none /cdrom-u
${MOUNT} -t aufs -o dirs=/cdrom-u:/cdrom=ro none /.rootfs

${MKDIR} /.rootfs/cdrom
${MKDIR} /.rootfs/cdrom-u
${MOUNT} --move /cdrom /.rootfs/cdrom
${MOUNT} --move /cdrom-u /.rootfs/cdrom-u

[ -e /.rootfs/dev/console ] || ${MKNOD} /.rootfs/dev/console c 5 1
[ -e /.rootfs/dev/null ] || ${MKNOD} /.rootfs/dev/null c 1 3

#Make these into symlinks to the .rootfs temporarily
for i in /lib /bin /sbin /usr /etc; do
  LD_LIBRARY_PATH=/.rootfs/lib /.rootfs/lib/ld-linux.so.2 /.rootfs/bin/rm -fr $i
  LD_LIBRARY_PATH=/.rootfs/lib /.rootfs/lib/ld-linux.so.2 /.rootfs/bin/ln -s /.rootfs$i $i
done

kill $( ps -ef | grep udev[d] | awk '{print $2}' )

#Setup ip address and mdadm.conf
cp /stage2 /.rootfs
chroot /.rootfs /stage2
rm /.rootfs/stage2

umount /proc
umount /sys
umount /dev

for i in /*; do
  LD_LIBRARY_PATH=/.rootfs/lib /.rootfs/lib/ld-linux.so.2 /.rootfs/bin/rm -fr $i
done

cd /.rootfs

LD_LIBRARY_PATH=/.rootfs/lib exec /.rootfs/lib/ld-linux.so.2 /.rootfs/usr/sbin/chroot . sbin/init <dev/console >dev/console 2>&1

