#!/bin/sh
# Lukasz Pawelczyk <havner@pld-linux.org> 2004
# $Id: linuxrc,v 1.8 2004/05/26 16:11:27 havner Exp $

# This is IDE/SCSI detection script run in livecd initrd

getparam()
{
	case "$CMDLINE" in *\ $1=*) ;; *) return 1; ;; esac
	result="${CMDLINE##*$1=}"
	result="${result%%[     ]*}"
	echo "$result"
	return 0
}

trap "" 1 2 3 15
# Reset fb color mode
RESET="]R"
# ANSI COLORS
# Erase to end of line
CRE="
[K"
# Clear and reset Screen
CLEAR="c"
# Normal color
NORMAL="[0;39m"
# RED: Failure or error message
RED="[1;31m"
# GREEN: Success message
GREEN="[1;32m"
# YELLOW: Descriptions
YELLOW="[1;33m"
# BLUE: System mesages
BLUE="[1;34m"
# MAGENTA: Found devices or drivers
MAGENTA="[1;35m"
# CYAN: Questions
CYAN="[1;36m"
# BOLD WHITE: Hint
WHITE="[1;37m"

echo "${GREEN}Welcome to PLD Live CD 1.0${NORMAL}"

echo "${BLUE}Preparing rootfs${NORMAL}"
mount -n -t tmpfs -o size=1G,nr_inodes=12k none /rootfs
mkdir -p /rootfs/media/LiveCD
mount -n -t proc none /proc

CMDLINE=" `cat /proc/cmdline` "

case "${CMDLINE}" in
	*\ debug\ *)
	LOG=/dev/console
	DEBUG=1
	echo "7" > /proc/sys/kernel/printk
	;;
	*)
	LOG=/dev/null
	DEBUG=0
	echo "5" > /proc/sys/kernel/printk
	;;
esac

echo "${BLUE}Loading modules${NORMAL}"
modprobe cdrom > $LOG 2>&1
modprobe loop > $LOG 2>&1
modprobe isofs > $LOG 2>&1
modprobe squashfs > $LOG 2>&1
modprobe nls_iso8859-1 > $LOG 2>&1
modprobe nls_cp437 > $LOG 2>&1

echo "${YELLOW}Autodetecting SCSI controller(s):${NORMAL}"
COUNT=0
SCSI=0
for I in `detect /pci/scsi.pci | uniq`; do
	SCSI=1
	echo "SCSI${COUNT}:   $I"
	modprobe ${I} > $LOG 2>&1
	let $((++COUNT))
done
if [ "${SCSI}" = "0" ]; then
	echo "None known SCSI controller found"
else
	echo "${BLUE}Loading SCSI modules${NORMAL}"
	modprobe sr_mod > $LOG 2>&1
	modprobe sd_mod > $LOG 2>&1
	modprobe sg > $LOG 2>&1
fi

echo "${YELLOW}Autodetecting IDE controller(s):${NORMAL}"
COUNT=0
IDE=0
for I in `detect /pci/ide.pci | uniq`; do
	IDE=1
	echo "IDE${COUNT}:    $I"
	modprobe ${I} > $LOG 2>&1
	let $((++COUNT))
done
if [ "${IDE}" = "0" ]; then
	echo "None known IDE controller found"
else
	echo "${BLUE}Loading IDE modules${NORMAL}"
	modprobe ide-disk > $LOG 2>&1
	modprobe ide-cd > $LOG 2>&1
fi

case "${CMDLINE}" in
	*\ shell1\ *)
	/bin/sh ;;
esac

case "${CMDLINE}" in		# ugly hack to run livecd from hdd for tests
	*\ HDD\ *)
	modprobe xfs > $LOG 2>&1
	mkdir -p /rootfs/mnt/hd
	mount -n -o ro -t xfs /dev/hda3 /rootfs/mnt/hd
	mount -n -o ro,loop -t iso9660 /rootfs/mnt/hd/pldcd.iso /rootfs/media/LiveCD
	;;
	*)
	echo "0" > /proc/sys/kernel/printk
	echo "${MAGENTA}Searching for PLD Live CDROM${NORMAL}"
	DEVICES="$DEVICES /dev/hd[cd] /dev/hd[ab] /dev/scd[0-9] /dev/hd[e-l]"
	for I in $DEVICES
	do
		echo -n "${CRE}${BLUE}Looking for CDROM in: ${MAGENTA}${I}${NORMAL} "
		if mount -n -o ro -t iso9660 "${I}" /rootfs/media/LiveCD > $LOG 2>&1
		then
			if test -f /rootfs/media/LiveCD/pldcd
			then
				echo "${CRE}${GREEN}PLD Live CDROM found at ${MAGENTA}${I}${GREEN}...${NORMAL}"
				HAVNIX="${I}"
				break
			fi
			umount -n /rootfs/media/LiveCD > $LOG 2>&1
		fi
	done
	if [ "$HAVNIX" = "" ]; then
		echo "${CRE}${RED}PLD Live CDROM not found !!! Either your controller has not been"
		echo "properly detected or you have ejected CD during boot."
		echo "Try running with debug option. Restart your computer now and send bugreport.${NORMAL}"
		read NOTHING
	fi
	if [ "$DEBUG" = "1" ]; then
		echo "7" > /proc/sys/kernel/printk
	else
		echo "5" > /proc/sys/kernel/printk
	fi
	;;
esac

case "${CMDLINE}" in
	*\ md5\ *)
	echo "${MAGENTA}Checking md5sum, please wait...${NORMAL}"
	if [ "`cd /rootfs/media/LiveCD; md5sum pldcd`" = "`cat /rootfs/media/LiveCD/pldcd.md5`" ]; then
		echo "${GREEN}Md5sum ok.${NORMAL}"
	else
		echo -n "${RED}Md5sum mismatch, press enter if you want to continue.${NORMAL}"
		read NOTHING
	fi
	;;
esac

cd /rootfs
tar xzpf /rootfs/media/LiveCD/pldram
cd /
case "${CMDLINE}" in
	*\ copycd\ *)
	echo "${YELLOW}Copying iso to ram, please wait...${NORMAL}"
	cp /rootfs/media/LiveCD/pldcd /rootfs
	umount -n /rootfs/media/LiveCD > $LOG 2>&1
	rm -rf /rootfs/media/LiveCD
	echo "${YELLOW}Done, you can now eject your cdrom${NORMAL}"
	mount2 /rootfs/pldcd
	;;
	*)
	mount2 /rootfs/media/LiveCD/pldcd
	;;
esac

case "${CMDLINE}" in
	*\ noX\ *)
	INITPARAM="3 " ;;
esac

case "${CMDLINE}" in
	*\ shell2\ *)
	/bin/sh ;;
esac

echo "${BLUE}Changing rootfs${NORMAL}"
umount -n /proc > $LOG 2>&1
cd /rootfs
pivot_root . initrd

#/bin/echo "${BLUE}Starting init${NORMAL}"
exec /usr/sbin/chroot . /sbin/init ${INITPARAM}
