Warning: this is an htmlized version!
The original is across this link,
and the conversion rules are here.
#!/bin/sh
# $Id: linuxrc,v 1.70.2.4 2005/11/06 21:28:58 smiley73 Exp $
#
# $Source: /cvsroot/devil-linux/build/config/etc/initrd/linuxrc,v $
# $Revision: 1.70.2.4 $
# $Date: 2005/11/06 21:28:58 $
#
# http://www.devil-linux.org
#
# system bootstrap loader
#   - loads config from floppy
#   - detects the cdrom and loads the system into ramdisk (/dev/shm)
#   - starts up the real system
#

NORMAL="echo -en \\033[0;39m"
GREEN="echo -en \\033[1;32m"
YELLOW="echo -en \\033[1;33m"
RED="echo -en \\033[1;31m"
BLUE="echo -en \\033[1;34m"
alias beep='echo -en "\007"'

alias l="ls -la"

$RED
echo
echo "********************************************************************************"
echo "*                                                                              *"
echo "*                           Welcome to Devil-Linux                             *"
echo "*                                                                              *"
echo "********************************************************************************"
echo "                          http://www.devil-linux.org/                           "
echo
$NORMAL

export PATH=$PATH:/sbin:/usr/sbin

scan_devices_for_config() {
	# $1 = filename
	# $... = list of devices
	FILE=$1
	shift
	for SRC in "$@"
	do	
		echo -n "Checking for \"$FILE\" on \"$SRC\" ... "
		if mount -n -t auto $SRC /floppy >/dev/null 2>&1  ; then
			if [ -e /floppy/$FILE ] ; then
				$GREEN
				echo "success!"
				$NORMAL
				DL_CONFIG_SOURCE=$SRC
				DL_CONFIG_FILE=$FILE
				return 0
			else
				$YELLOW
				echo "file not found"
				$NORMAL
				umount /floppy # in case user swaps floppy when we are accepting input
			fi
		else
			$RED
			echo "mount failed"
			$NORMAL
		fi
	done
	return 1
}

parse_config_cmdline() {
	# $1 = cmdline
	CMD="$1"
	# split at ','
	OIFS=$IFS
	IFS=,
	for CONFIG_USER in $CMD
	do
		IFS=$OIFS
		CONFIG_USER_ERROR=0
		CONFIG_USER_SRC=""
		CONFIG_USER_FILE=""
		if [ "$CONFIG_USER" != "" ]; then
			case `echo $CONFIG_USER | awk -v FS=: '{ print NF-1 }'` in
				0 )
		    			CONFIG_USER_SRC=`echo $CONFIG_USER | grep "/dev/"`
					CONFIG_USER_FILE=`echo $CONFIG_USER | grep -v "/dev/"`
				;;
				1 )
					CONFIG_USER_SRC=`echo ${CONFIG_USER%:*}`
					CONFIG_USER_FILE=`echo ${CONFIG_USER#*:}`    
				;;
				* )
					CONFIG_USER_ERROR=1
				;;
			esac	
			# sanity checks
			[ "$CONFIG_USER_SRC" != "" ] && CONFIG_USER_ERROR=`echo $CONFIG_USER_SRC | grep -c -v "^/dev/"`
			[ "$CONFIG_USER_FILE" != "" ] && CONFIG_USER_ERROR=`echo $CONFIG_USER_FILE | grep -c "/dev/"`
			[ "$CONFIG_USER" = ":" ] && CONFIG_USER_ERROR=1 # just in case...
		else
			CONFIG_USER_ERROR=1		
		fi
		case $CONFIG_USER_ERROR in
			0 )
				$BLUE
				echo -n "Trying to load configuration "
				$GREEN
				if [ "$CONFIG_USER_FILE" = "" ]; then
					CONFIG_USER_FILE=$CONFIG_FILE
				fi
	    			echo -n "\"$CONFIG_USER_FILE\" "
				$BLUE
				if [ "$CONFIG_USER_SRC" != "" ]; then
					echo -n "from device "
					$GREEN
					echo -n "\"$CONFIG_USER_SRC\""
					$BLUE
				else
					CONFIG_USER_SRC=$CONFIG_SRC_LIST
					echo -n "from any device"				
			    	fi
				echo "."
				$NORMAL
				scan_devices_for_config $CONFIG_USER_FILE $CONFIG_USER_SRC
				if [ $? = 0 ]; then
					return 0
				else
					$YELLOW
			    		echo "Sorry, could not load your configuration. Continuing searching..."
					$NORMAL
				fi	
			;;
			* )
			    	$RED
				echo -n "Improper config parameter : \"$CONFIG_USER\". Ignored."
			    	beep; sleep 1; echo -n "."; sleep 1; beep; echo "."
				$NORMAL
			;;
		esac
	done
	return 1
}

mod_config() {
	[ ! -e /etc/sysconfig/config.org ] && cp /etc/sysconfig/config /etc/sysconfig/config.org
	rm -f /etc/sysconfig/config.tmp
	cp /etc/sysconfig/config /etc/sysconfig/config.tmp
	sed "s/$1/$2/" /etc/sysconfig/config.tmp > /etc/sysconfig/config
	rm -f /etc/sysconfig/config.tmp
}

ask_yes_no()
{
        ANS=""
        read -p " (y/n) " -r ANS
        echo
        [ ${ANS:-n} = "y" -o ${ANS:-n} = "Y" ] && return 0
        return 1
}

# make sure all kernel warnings get lost (seriously!)
klogd -c 1

# get version info
DLVERSION=$(cat VERSION)

# mount proc
mount -n -t proc none /proc

# mount usb
mount -n -t usbdevfs none /proc/bus/usb

echo Kernel $(uname -r)

# mount shared memory filesystem with a limit of 40GB (for now)
echo "Mounting SHM FS on /shm"
mount -n -t shm shmfs /shm 2> /dev/null || mount -n -t tmpfs none /shm

# get rid of modprobe warnings
mkdir -p /shm/etc

echo "waiting until usb-storage driver has initialized all devices ..."
sleep 15

#grep usb-storage /proc/bus/usb/devices

echo -e "Loading loop-AES module";
modprobe loop 2> /dev/null

# save loaded config
DL_CONFIG_SOURCE=""
DL_CONFIG_FILE=""

$GREEN
echo "Searching for configuration media"
$NORMAL

# parse user config
CONFIG_USER=`awk -v RS=' ' -v FS='=' '/^DL_config=/ { print $2 }' /proc/cmdline`
CONFIG_USER_ONLY=`grep -c DL_config_no_scan /proc/cmdline`

if [ "$CONFIG_USER_ONLY" != "0" ]; then
	$RED
	echo "Disabling automatic scanning for Devil-Linux configuration archive! Good Luck."
	$NORMAL
fi

# generate the device list we need to search for the configuration information
CDROM_IDE=`find /dev/ide/ -name "cd*" 2> /dev/null`
CDROM_SCSI=`find /dev/scsi/ -name "cd*" 2> /dev/null`
PARTITIONS_IDE=`find /dev/ide/ -name "part*" 2> /dev/null`
PARTITIONS_SCSI=`find /dev/scsi/ -name "part*" 2> /dev/null`
DISCS_SCSI=`find /dev/scsi/ -name "disc" 2> /dev/null`
FLOPPIES=`find /dev/floppy/ -name "?" 2> /dev/null`
CONFIG_SRC_LIST="$PARTITIONS_SCSI $PARTITIONS_IDE $DISCS_SCSI $CDROM_IDE $CDROM_SCSI $FLOPPIES"
CONFIG_FILE="etc.tar.bz2"

until [ "$DL_CONFIG_SOURCE" != "" ] ; do
	if [ "$CONFIG_USER" != "" ]; then
		parse_config_cmdline $CONFIG_USER && continue
	fi
	if [ "$CONFIG_USER_ONLY" = "0" ]; then
		# scan for etc.tar.bz2 on all devices
		scan_devices_for_config $CONFIG_FILE $CONFIG_SRC_LIST && continue
	fi

	# no configuration has been found yet
	for CFG_SRC in $CONFIG_SRC_LIST
	do
		echo -e "Looking for empty configuation media on $CFG_SRC"
		if mount -n -t auto $CFG_SRC /floppy >/dev/null 2>&1 ; then
			umount /floppy # in case user swaps floppy when we are accepting input
			# offer to copy the configuration file if device is not a CD
			if [ ! "${CFG_SRC##/*/}" = "cd" ];then
				beep;
				$YELLOW
				echo -e "\n*** Found empty configuration media. ***"
				$NORMAL
				echo -n "Should I copy default configuration to it?"
				if ask_yes_no ; then
					echo -n "Would you like to probe for SCSI controllers now?"
					if ask_yes_no ; then
						/probe_all_scsi_modules
					fi
					if ! /mount_cdrom /cdrom noreboot ; then
						$RED
						echo -e "Cannot find CD drive - try probing for SCSI controllers"
						$NORMAL
						continue
					fi
					mount -n -t auto $CFG_SRC /floppy >/dev/null 2>&1 || continue
					cp -i /cdrom/config/etc.tar.bz2 /floppy/ || continue
					umount /cdrom
					sync
					DL_CONFIG_SOURCE=$CFG_SRC
					DL_CONFIG_FILE="etc.tar.bz2"
					continue 2
				fi
			fi
		fi
	done

	beep; sleep 1; beep; sleep 1; beep;
	$RED
	echo -e "Please insert Configuration Media and press 'ENTER'"
	$NORMAL
	read ANS
	echo
done
unset ANS RET

echo $DL_CONFIG_SOURCE > /shm/DL_CONFIG_SOURCE
echo $DL_CONFIG_FILE > /shm/DL_CONFIG_FILE
export DL_CONFIG_SOURCE
export DL_CONFIG_FILE

mkdir -p /shm/root

# check if the DL ISO got upgraded
if [ -e /shm/dl_iso_replaced ]; then
    cd /cdrom
    #change to new root
    pivot_root . initrd
    $RED
    echo "Rebooting..."
    $NORMAL
    exec /usr/sbin/chroot . /sbin/reboot -f
fi			

echo "loading configuration"
tar -C /shm -xjf /floppy/$DL_CONFIG_FILE

# create mtab for mount
cat /proc/mounts > /etc/mtab

# load modules
/load_modules

# check to see if cdrom has already been mounted
if [ ! -e /cdrom/DEVIL-LINUX ] ; then
    # find the CDROM
    /mount_cdrom /cdrom
fi

DL_DEVICE=$(cat /shm/DL_DEVICE)
export DL_DEVICE

if [ -f /cdrom/config/pubring.gpg ]; then
	$YELLOW
	echo "checking PGP signature of configuration"
	$NORMAL
	if ! /bin/gpgv --homedir /cdrom/config --keyring /cdrom/config/pubring.gpg --ignore-time-conflict -q /floppy/$DL_CONFIG_FILE.sig ;then
		$RED
		echo
		echo "********************************************************************************"
		echo "*      !!!  WARNING !!! WARNING !!! WARNING !!! WARNING !!! WARNING !!!        *"
		echo "*                                                                              *"
		echo "*           The verification of the configuration signature failed !           *"
		echo "*                                                                              *"
		echo "*   There is a strong possibility that somebody tempered with your system !    *"
		echo "*                                                                              *"
		echo "*      !!!  WARNING !!! WARNING !!! WARNING !!! WARNING !!! WARNING !!!        *"
		echo "********************************************************************************"
		beep; sleep 1; beep; sleep 1; beep; sleep 1; beep; sleep 1; beep; sleep 1; beep;
		$NORMAL
		echo
		echo -n "Do you want to continue? "
		if ! ask_yes_no ; then
			exit
		fi
	fi
fi

# unmount config media
umount /floppy

# Update modules for SCSI CD (if any)
if [ -s /shm/.probed_modules ] ; then
	echo "Updating /etc/sysconfig/config for SCSI modules."
	mod_config '^INITRD_MODULES=\"\"$' 'INITRD_MODULES=\"'$(cat /shm/.probed_modules)'\"'
	rm -f /shm/.probed_modules
fi

# remove uneeded modules
modprobe -r 2> /dev/null
sleep 1
modprobe -r 2> /dev/null

# kill our klogd
kill `ps ax | grep klogd | cut -f 1 -d 0` 2> /dev/null

# mount shared memory filesystem
echo "Mounting SHM FS on /cdrom/shm"
mount -n -o bind /shm /cdrom/shm
umount /shm

echo "Mounting DEV FS on /cdrom/dev"
mount -n -t devfs none /cdrom/dev

# unmount usb
umount /proc/bus/usb

# unmount proc because the final system will mount it again
umount /proc

# start the system by swapping /dev/ram0 and /shm
echo 'Starting up final system...'
cd /cdrom

#change to new root and start up the real system
pivot_root . initrd
exec /usr/sbin/chroot . /sbin/pre_init $DL_CONFIG_SOURCE $DL_CONFIG_FILE $@ <dev/console >dev/console 2>&1

# something went wrong
echo
echo 'Starting the system failed!'
echo 'Please mail a bug report to bugs@devil-linux.org'
echo
exit