#!/bin/sh
# $Id: linuxrc,v 1.1 2005-01-30 23:47:35 tim Exp $

exec /bin/sh

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

setCmd LN=/bin/ls
setCmd MOUNT=/bin/mount
setCmd UMOUNT=/bin/umount
setCmd CAT=/bin/cat
setCmd MKDIR=/bin/mkdir
setCmd MODPROBE=/sbin/modprobe
setCmd CP=/bin/cp
setCmd LN=/bin/ln
setCmd PIVOT_ROOT=/sbin/pivot_root
setCmd CHROOT=/usr/sbin/chroot

${MOUNT} -nt proc proc /proc

# Get the command line
CMDLINE=$( ${CAT} /proc/cmdline )

#Set a default ramdisk_size
ramdisk_size=16384

for Parameter in $CMDLINE; do
    case ${Parameter} in
	ramdisk_size=*)
	    setArg $( IFS='='; echo ${Parameter} )
	    ;;
    esac
done

${MOUNT} -nt tmpfs -o "size=${ramdisk_size}k" ramdisk newroot
echo 256 >/proc/sys/kernel/real-root-dev

SCSI_MODULES="aic7xxx"

for i in cdrom devfs initrd mnt proc sys tmp var; do
    ${MKDIR} /newroot/$i
done

echo "Detecting CD. Please wait ..."
${MOUNT} -t devfs devfs /newroot/devfs

${MODPROBE} ide-cd
${MODPROBE} ide-detect
${MODPROBE} sr_mod
for i in $SCSI_MODULES; do ${MODPROBE} $i; done

for i in /newroot/devfs/ide/*/*/*/*/cd /newroot/devfs/scsi/*/*/*/*/cd; do
    if ( ${MOUNT} -n -o ro $i /newroot/cdrom >/dev/null 2>&1 ); then
	break
    fi
done

echo "Copying files. Please wait ..."

${CP} /stage2 /newroot

for i in bin lib sbin usr; do
    ${LN} -s /cdrom/$i /newroot/$i
done

for i in dev etc root; do
    ${MKDIR} /newroot/$i
    ${CP} -dpR /newroot/cdrom/$i/. /newroot/$i
done

for i in lock lib lib/urandom log log/ksymoops log/mail log/news run run/sshd tmp; do
    ${MKDIR} /newroot/var/$i
done

for i in backups cache lib/apt lib/dhcp lib/dpkg lib/dumpdates lib/misc lib/setserial local mail opt spool; do
    ${LN} -s /cdrom/var/$i /newroot/var/$i
done

cd /newroot

${UMOUNT} -n /proc
${MOUNT} -nt proc proc /newroot/proc

${PIVOT_ROOT} . initrd
exec ${CHROOT} . /bin/bash /stage2 <dev/console >dev/console 2>&1

