#!/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 2>&1