--- ../miniroot_cd/linuxrc 2006-03-08 10:47:01.000000000 +0100 +++ linuxrc 2006-10-18 16:48:55.000000000 +0200 @@ -43,10 +43,12 @@ # Misc functions INSMOD="insmod" -[ -x /modules/insmod ] && INSMOD="/modules/insmod" +#[ -x /modules/insmod ] && INSMOD="/modules/insmod" +[ -x /static/insmod ] && INSMOD="/static/insmod" RMMOD="rmmod" -[ -x /modules/rmmod ] && RMMOD="/modules/rmmod" +#[ -x /modules/rmmod ] && RMMOD="/modules/rmmod" +[ -x /static/rmmod ] && RMMOD="/static/rmmod" # Dynamic program loader # /KNOPPIX is already mounted when this is used. @@ -65,6 +67,7 @@ } FOUND_SCSI="" +MOUNTED="" FOUND_KNOPPIX="" INTERACTIVE="" @@ -102,7 +105,7 @@ # echo -n "" echo "" # Be verbose -echo "${WHITE}Welcome to the ${CYAN}K${MAGENTA}N${YELLOW}O${WHITE}P${RED}P${GREEN}I${BLUE}X${WHITE} live Linux-on-DVD!${NORMAL}" +echo "${WHITE}Welcome to the ${CYAN}K${MAGENTA}N${YELLOW}O${WHITE}P${RED}P${GREEN}I${BLUE}X${WHITE} live Linux-on-${MEDIUM}!${NORMAL}" echo "" echo "" @@ -122,7 +125,13 @@ mount -t sysfs /sys /sys >/dev/null 2>&1 # Read boot command line with builtin cat command (shell read function fails in Kernel 2.4.19-rc1) -CMDLINE="$(cat /proc/cmdline)" +CMDLINE=" $(cat /proc/cmdline) " + +# bootsplash progress bar +splash() { + [ -f /proc/splash ] && echo "show $1" > /proc/splash 2>/dev/null +} +splash 1000 # Check if we are in interactive startup mode case "$CMDLINE" in *BOOT_IMAGE=expert\ *) INTERACTIVE="yes"; :>/interactive; ;; esac @@ -138,14 +147,26 @@ case "$CMDLINE" in *fromdvd*) FROMDVD="yes"; ;; esac case "$CMDLINE" in *idecd*|*atapicd*) IDECD="yes"; ;; esac case "$CMDLINE" in *noideraid*) NOIDERAID="yes"; ;; esac -USB2="ehci-hcd.ko" +USB2="ehci-hcd" # removed .ko, fix from http://www.knoppix.net/wiki/Bugs/4.0.2CD case "$CMDLINE" in *nousb2*) USB2=""; ;; esac +NOCLOOP="" +case "$CMDLINE" in *nocloop*) NOCLOOP="yes"; ;; esac +NFSDIR="$nfsdir" +NFS="$NFSDIR" # whether to boot with nfs +case "$CMDLINE" in *\ nfs\ *|*\ NFS\ *) NFS="yes"; ;; esac +# Whether to not use accelerated knoppix fixes for boot scripts/programs +case "$CMDLINE" in *\ noac\ *) [ -d /accel ] && /static/rm -rf /accel ;; esac KNOPPIX_DIR="KNOPPIX" KNOPPIX_NAME="KNOPPIX" case "$CMDLINE" in *knoppix_dir=*) KNOPPIX_DIR="$knoppix_dir"; ;; esac case "$CMDLINE" in *knoppix_name=*) KNOPPIX_NAME="$knoppix_name"; ;; esac +NET="" # whether we need networking to boot +if [ -n "$NFS" -o -n "$nbdhost" ]; then + NET="yes" +fi + # WARNING: In Kernel 2.4.27, CD-Roms cease to work if both, ide-scsi and ide-cd, are loaded. :-( # NOTE: We don't need scsi-emulation anymore in Kernel 2.6.10 and up #if test -n "$IDECD"; then @@ -156,16 +177,45 @@ #$INSMOD /modules/scsi/ide-scsi.ko >/dev/null 2>&1 #fi +dropshell(){ +/busybox printf "\n" +echo "$@" +#echo "${CRE}${RED}Can't find KNOPPIX filesystem, sorry.${NORMAL}" +echo "${RED}Dropping you to a (very limited) shell.${NORMAL}" +echo "${RED}Press reset button to quit.${NORMAL}" +echo "" +echo "Additional builtin commands avaliable:" +help +echo "" +PS1="knoppix# " +export PS1 +echo "6" > /proc/sys/kernel/printk +# Allow signals +trap 1 2 3 15 +echo "Modules loaded:" ; cat /proc/modules +exec /busybox ash || exec /static/ash +} + +splash 2000 + # Run a shell if in debug mode stage=1 rundebugshell(){ if [ -n "$DEBUG" ]; then echo "${CRE}${BLUE}Starting intermediate Shell stage $stage as requested by \"debug\" option.${NORMAL}" echo "${CRE}${BLUE}Type \"exit\" to continue with normal bootup.${NORMAL}" -[ -x /static/ash ] && /static/ash || /bin/bash +/bin/bash || /busybox ash || /static/ash fi } +loadfsmodules(){ +#FIXME: remove unused modules after we're done +for i in $(cd /modules/extra_fs; echo *.*o); do + $INSMOD /modules/extra_fs/$i >/dev/null 2>&1 +done + BUILTIN_FS="$(cat /modules/extra_fs/fs_list)" # for mountit +} + # Mount module disk mountmodules(){ TYPE="$1"; shift @@ -222,6 +272,7 @@ echo -n "${CRE}" } +if [ -z "$NET" ]; then # Check for SCSI, use modules on bootfloppy first # Trying to do kind of /proc/pci hardware detection PROCPCI="`cat /proc/pci 2>/dev/null`" @@ -248,6 +299,8 @@ case "$PROCPCI" in *[Uu][Ll][Tt][Rr][Aa][Ss][Tt][Oo][Rr]*) SCSI_PROBE="$SCSI_PROBE ultrastor.ko" ;; esac case "$PROCPCI" in *3[Ww][Aa][Rr][Ee]*) SCSI_PROBE="$SCSI_PROBE 3w-xxxx.ko" ;; esac +splash 3000 + if test -n "$INTERACTIVE"; then # Let the user select interactively askmodules SCSI $(cd /modules/scsi; echo *.ko) @@ -258,12 +311,16 @@ test -z "$NOSCSI" && test -n "$MODULES" && loadmodules SCSI $MODULES # End of SCSI check +splash 4000 + # Check for IDE-Raid devices if test -z "$NOIDERAID"; then ( cd /modules/scsi; { $INSMOD ataraid.ko >/dev/null 2>&1 && $INSMOD silraid.ko >/dev/null 2>&1 ; } || $INSMOD medley.ko >/dev/null 2>&1 || $INSMOD pdcraid.ko >/dev/null 2>&1 ) fi # End of IDE-Raid check +splash 5000 + # Check for USB, use modules on bootfloppy first if test -z "$NOUSB"; then echo -n "${CRE}${BLUE}Checking for for USB...${NORMAL}" @@ -275,6 +332,7 @@ test -f /modules/scsi/$i.ko && $INSMOD /modules/scsi/$i.ko >/dev/null 2>&1 && FOUNDUSB="yes" done if test -n "$FOUNDUSB"; then +test -f /modules/scsi/sg.o && $INSMOD /modules/scsi/sg.o >/dev/null 2>&1 test -f /modules/scsi/ub.ko && $INSMOD /modules/scsi/ub.ko >/dev/null 2>&1 test -f /modules/scsi/usb-storage.ko && $INSMOD /modules/scsi/usb-storage.ko >/dev/null 2>&1 else @@ -287,6 +345,8 @@ fi # End of USB check +splash 6000 + # Check for Firewire, use modules on bootfloppy first if test -z "$NOFIREWIRE"; then echo -n "${CRE}${BLUE}Checking for Firewire...${NORMAL}" @@ -312,18 +372,28 @@ fi # End of FIREWIRE check +splash 7000 + # Unfortunately, hotpluggable devices tend to need some time in order to register if test -n "$FOUNDUSB" -o -n "$FOUNDFIREWIRE"; then echo -n "${CRE}${BLUE}Scanning for USB/Firewire devices... ${NORMAL}" if test -n "$FOUNDFIREWIRE"; then # Wait for driver to register -sleep 2 +# accelerated-knoppix : fixme +#sleep 2 +case "$CMDLINE" in *usbboot*|*USBBOOT*|*fwboot*|*FWBOOT*) sleep 2; ;; esac # Kernel 2.6 does this automatically case "$(cat /proc/version 2>/dev/null)" in *version\ 2.6.*) ;; *) for host in 0 1 2 3 4 5 6 7; do for channel in 0 1; do for id in 0 1 2 3 4 5 6 7; do echo "scsi add-single-device $host $channel $id 0" >/proc/scsi/scsi 2>/dev/null; done; done; done ;; esac fi -sleep 6 +# accelerated-knoppix : fixme +#sleep 6 +case "$CMDLINE" in *usbboot*|*USBBOOT*|*fwboot*|*FWBOOT*) sleep 6; ;; esac + echo "${BLUE}Done.${NORMAL}" fi +fi # $NET + +splash 8000 # Check for misc modules in expert mode if test -n "$INTERACTIVE"; then @@ -342,6 +412,8 @@ fi # All interactively requested modules should be loaded now. +splash 9000 + # Check for ide-scsi supported CD-Roms et al. test -f /proc/scsi/scsi && FOUND_SCSI="yes" @@ -362,9 +434,200 @@ ;; esac +# net stuff +if [ -n "$NET" ]; then + +# Disable kernel messages again +echo "0" > /proc/sys/kernel/printk + +FOUND_NETWORK="" +echo "Loading network device module(s)" +for i in $(cd /modules/net; echo *.*o); do +$INSMOD /modules/net/$i >/dev/null 2>&1 && \ +case "$i" in 00*) ;; *) echo "${CRE} ${GREEN}Found network device(s) handled by ${MAGENTA}$i${GREEN}.${NORMAL}" && FOUND_NETWORK="$i" ;; esac +done + +# Enable kernel messages again +echo "6" > /proc/sys/kernel/printk +/static/ifconfig lo 127.0.0.1 up + +[ -n "FOUND_NETWORK" ] || dropshell "Couldn't find any network device" + +DHCP="" +# How many network cards should we probe for? +for i in 0 1 2 3; do +ifconfig "eth$i" up >/dev/null 2>&1 || continue +echo -n "${CRE}${BLUE}DHCP Broadcasting for IP address (${MAGENTA}eth$i${BLUE})... ${NORMAL}" +pump -i eth$i && DHCP="eth$i" +[ -n "$DHCP" ] && break +echo "${RED}No answer from network.${NORMAL}" +done +[ -n "$DHCP" ] && echo "${GREEN}OK.${NORMAL}" || dropshell "Couldn't bring up dhcp" + +echo "${CRE} ${GREEN}Network card configuration: ${NORMAL}" +ifconfig "$DHCP" + +# Disable kernel messages again +echo "0" > /proc/sys/kernel/printk +fi #net_needed + +splash 10000 + stage=1 rundebugshell +TARGET="/cdrom" # 2 mounts needed in the boot process +if [ -n "$NOCLOOP" ]; then + TARGET="/KNOPPIX" # 1 mount needed in the boot process + FOUND_KNOPPIX="mounted" +fi +if [ -n "$loopfile" ]; then + TARGET="/cdrom" # 2 mounts needed in the boot process + NOCLOOP="yes" + FOUND_KNOPPIX="mounted" +fi +if [ -n "$fromiso" ]; then + TARGET="/cdrom.loop" # 3 mounts needed in the boot process + /static/mkdir $TARGET +fi + + +# Load nfs modules +if [ -n "$NFS" ]; then + +SECURE="" +case "$cmdline" in *secure*) SECURE="yes";; esac + +NFSMODULES="$(cd /modules/net/nfs; echo *.*o)" +for i in $NFSMODULES; do $INSMOD /modules/net/nfs/$i 2>/dev/null; done + +portmap && echo "${CRE} ${GREEN}Portmapper started.${NORMAL}" + +# for the upcoming NFS mount +SECUREOPTIONS="" +[ -n "$SECURE" ] && SECUREOPTIONS=",nosuid" + +# if we have an NFSDIR, try mounting it +if [ -n "$NFSDIR" ]; then + echo -n "${CRE}${BLUE}Trying to mount CD on" \ + "${MAGENTA}$NFSDIR${BLUE}...${NORMAL}" + /static/mount -t nfs -o \ + ro,rsize=8192,wsize=8192,hard,intr$SECUREOPTIONS \ + "${NFSDIR}" "$TARGET" > /dev/null 2>&1 && MOUNTED="yes" + + # unsuccessful? Blank out NFSDIR and see if pump does better + [ -z "$MOUNTED" ] && echo "${RED}Failed.${NORMAL}" && NFSDIR= +fi + +# no NFSDIR? ask pump for the second server +if [ -z "$NFSDIR" ]; then + PUMP="$(pump -s)" + while read next server nfsroot; do + case "$next $server" in [Nn]ext\ [Ss]erver) NFSROOT="$nfsroot"; break; ;; esac + done < /dev/null 2>&1 && NFSDIR="${NFSROOT}:/knoppix" + +# then with "/cdrom" + [ -z "$NFSDIR" ] && /static/mount -t nfs -o \ + ro,rsize=8192,wsize=8192,hard,intr$SECUREOPTIONS \ + "${NFSROOT}:/cdrom" "$TARGET" > /dev/null 2>&1 && NFSDIR="${NFSROOT}:/cdrom" + + [ -n "$NFSDIR" ] && MOUNTED="yes" +fi + +# STILL nothing? ask the user +[ -z "$MOUNTED" ] && { + for i in 2 1 0; do + echo "${RED}Failed.${NORMAL}" + echo -n "${CYAN}Please enter NFS directory path" \ + "(aka \"192.168.0.1:/cdrom\"): ${NORMAL}" + read NFSDIR + /static/mount -t nfs -o ro,rsize=8192,wsize=8192,hard,intr$SECUREOPTIONS \ + "$NFSDIR" "$TARGET" > /dev/null 2>&1 && MOUNTED="true" + [ -n "$MOUNTED" ] && break + done +} + +[ -n "$MOUNTED" ] && echo "${GREEN}OK.${NORMAL}" +[ -z "$MOUNTED" ] && dropshell "Couldn't mount nfs filesystem" +fi # NFS + +if [ -n "$nbdhost" ]; then + loadfsmodules + $INSMOD /modules/nbd.ko + /static/nbd-client $nbdhost $nbdport /dev/nb0 || \ + dropshell "couldn't setup nbd device on $nbdhost:$nbdport" + echo "${CRE}${BLUE}Trying to mount CD via nbd:" \ + "${MAGENTA}$nbdhost:$nbdport${BLUE}...${NORMAL}" + mountit /dev/nb0 "$TARGET" "-o ro" && MOUNTED="yes" + [ -n "$MOUNTED" ] && echo "${GREEN}OK.${NORMAL}" + [ -z "$MOUNTED" ] && dropshell "Couldn't mount filesystem on nbd device" +fi + +if [ -n "$fromhd" ]; then + loadfsmodules + mountit "$fromhd" "$TARGET" "-o ro" && MOUNTED="yes" + if [ -n "MOUNTED" ]; then + echo "${CRE} ${GREEN}Mounted ${MAGENTA}$fromhd${GREEN}...${NORMAL}" + else + dropshell "${CRE} ${RED}Mounting hd $fromhd failed.${NORMAL}" + fi +fi # fromhd + +if [ -n "$loopfile" ]; then + loadfsmodules # could be needed with nfs + $INSMOD /modules/loop.ko + /static/losetup /dev/loop0 "/cdrom/$loopfile" + mountit /dev/loop0 "/KNOPPIX" "-o ro" && MOUNTED="yes" + if [ -n "MOUNTED" ]; then + echo "${CRE} ${GREEN}Mounted loopfile ${MAGENTA}$loopfile${GREEN}...${NORMAL}" + else + dropshell "${CRE} ${RED}Mounting loopfile $loopfile failed.${NORMAL}" + fi +fi # loopfile + +if [ -n "$fromiso" ]; then + $INSMOD /modules/loop.ko + MOUNTED="" + /static/losetup /dev/loop0 "/cdrom.loop$fromiso" + /static/mount -t iso9660 -o ro /dev/loop0 /cdrom && MOUNTED="yes" + if [ -n "MOUNTED" ]; then + echo "${CRE} ${GREEN}Mounted iso ${MAGENTA}$fromiso${GREEN}...${NORMAL}" + else + dropshell "${CRE} ${RED}Mounting iso $fromiso failed.${NORMAL}" + fi +fi + +# +if [ -n "$MOUNTED" -a -z "$FOUND_KNOPPIX" ]; then + if test -f "/cdrom/$KNOPPIX_DIR/$KNOPPIX_NAME"; then + echo "${CRE} ${GREEN}Accessing KNOPPIX ${MEDIUM}...${NORMAL}" + FOUND_KNOPPIX="/cdrom" + else + dropshell "${CRE} ${RED}Accessing KNOPPIX ${MEDIUM} failed.${NORMAL}" + fi +fi + +# normal cd boot +if [ -z "$FOUND_KNOPPIX" ]; then # Now that the right SCSI driver is (hopefully) loaded, try to find CDROM DEVICES="/dev/hd?" test -n "$FOUND_SCSI" -a -z "$NOCD" && DEVICES="/dev/scd? /dev/scd?? $DEVICES" @@ -375,6 +638,7 @@ test -n "$FOUND_SCSI" -a -z "$NOSCSI" && DEVICES="$DEVICES /dev/sd?[1-9] /dev/sd?[1-9][0-9]" DEVICES="$DEVICES /dev/ub?[1-9] /dev/ub?[1-9][0-9] /dev/ub? /dev/hd?[1-9] /dev/hd?[1-9][0-9]" case "$CMDLINE" in *fromhd=/dev/*) DEVICES="$fromhd"; ;; esac +test -n "$NOCD" && loadfsmodules # used if fromhd keyword, but no fromhd=... for i in $DEVICES do echo -n "${CRE}${BLUE}Looking for ${MEDIUM} in: ${MAGENTA}$i${NORMAL} " @@ -389,6 +653,9 @@ umount /cdrom fi done +fi # FOUND_KNOPPIX + +splash 11000 # Harddisk-installed script part version has been removed # (KNOPPIX can be booted directly from HD now). @@ -396,13 +663,27 @@ mount_knoppix() { if test -n "$FOUND_KNOPPIX" -a -f "$1/$KNOPPIX_DIR/$KNOPPIX_NAME"; then - # DEBUG - # echo "6" > /proc/sys/kernel/printk - $INSMOD -f /modules/cloop.ko file="$1/$KNOPPIX_DIR/$KNOPPIX_NAME" +# # DEBUG +# # echo "6" > /proc/sys/kernel/printk +# $INSMOD -f /modules/cloop.ko file="$1/$KNOPPIX_DIR/$KNOPPIX_NAME" +# +# accelerated-knoppix : cloop-opt.ko +# + echo "6" > /proc/sys/kernel/printk + THREAD="thread_mode=1" + CHKBLK="0" + for i in $CMDLINE; do + case "$i" in chkblk=*|CHKBLK=*) eval $i; [ -n "$chkblk" ] && CHKBLK="$chkblk" ;; esac + case "$i" in *noclpthread*|*NOCLPTHREAD*) THREAD="" ;; esac + done + echo "" + $INSMOD -f /modules/cloop.ko chkblks=$CHKBLK "$THREAD" file="$1/$KNOPPIX_DIR/$KNOPPIX_NAME" + echo "0" > /proc/sys/kernel/printk + mountit /dev/cloop /KNOPPIX "-o ro" || FOUND_KNOPPIX="" # Allow multi-image KNOPPIX mounts if [ -n "$FOUND_KNOPPIX" -a -x "$DYNLOADER" -a -x /KNOPPIX/sbin/losetup ]; then - echo "" +# echo "" echo -n "${CRE} ${GREEN}Found primary KNOPPIX compressed image at ${MAGENTA}$1/$KNOPPIX_DIR/$KNOPPIX_NAME${GREEN}.${NORMAL}" for c in 1 2 3 4 5 6 7; do if [ -f "$1/$KNOPPIX_DIR/$KNOPPIX_NAME$c" ]; then @@ -572,8 +853,6 @@ remount_knoppix } -mount_knoppix /cdrom - COPYTO="" BOOTFROM="" DO_REMOUNT="" @@ -583,6 +862,31 @@ case "$CMDLINE" in *toram*) DO_REMOUNT="yes"; COPYTO="ram"; ;; esac case "$CMDLINE" in *tohd=*) DO_REMOUNT="yes"; COPYTO="hd"; ;; esac case "$CMDLINE" in *bootfrom=*) DO_REMOUNT="yes"; BOOTFROM="yes" ;; esac + +if [ -z "$NOCLOOP" ]; then + # + # accelerated-knoppix : cloop blocks readahead + # + if test -z "$DO_REMOUNT" -a -n "$FOUND_KNOPPIX" ; then + if test -x /accel/cloopreadahead ; then + CLOOPREADAHEAD="yes"; + case "$CMDLINE" in *nocbr*|*NOCBR*) CLOOPREADAHEAD=""; ;; esac + if test -n "$CLOOPREADAHEAD" -a -f /cdrom/${KNOPPIX_DIR}/${KNOPPIX_NAME}.boot.lst ; then + echo "" + echo -n " ${GREEN}Reading cloop blocks....${BLUE}(Backgrounding)${NORMAL}" + # /accel/cloopreadahead /cdrom/$KNOPPIX_DIR/$KNOPPIX_NAME /cdrom/${KNOPPIX_DIR}/${KNOPPIX_NAME}.boot.lst > /dev/null 2>&1 & + /accel/cloopreadahead /cdrom/$KNOPPIX_DIR/$KNOPPIX_NAME /cdrom/${KNOPPIX_DIR}/${KNOPPIX_NAME}.boot.lst > /.cloopreadahead.log 2>&1 & + fi + fi + fi + + splash 12000 + + mount_knoppix /cdrom +fi + +splash 13000 + # Remount later after copying/isoloading/driverloading? # pre-test if everything succeeded @@ -613,6 +917,8 @@ copy_to $COPYTO && REAL_TARGET="$TARGET" fi fi + +splash 14000 # Final test if everything succeeded. if test -n "$FOUND_KNOPPIX" @@ -621,9 +927,15 @@ cat /KNOPPIX/etc/ld.so.cache > /etc/ld.so.cache echo "" +# Replace /lib (exists on network initrds) +/static/rm -rf /lib 2>/dev/null +/static/ln -sf /KNOPPIX/lib /lib 2>/dev/null + UNIONFS="" $INSMOD /modules/unionfs.ko 2>/dev/null && UNIONFS="yes" +splash 15000 + # Enable kernel messages echo "6" > /proc/sys/kernel/printk @@ -635,6 +947,8 @@ # Make space: We don't need the modules anymore from here. /KNOPPIX/bin/rm -rf /modules +splash 16000 + # Debian weirdness /KNOPPIX/bin/cp -a /KNOPPIX/etc/alternatives /etc/ 2>/dev/null @@ -645,6 +959,8 @@ # From here, we should have all essential commands available. hash -r +splash 17000 + # Did we remount the source media ? if test -n "$REAL_TARGET"; then @@ -654,6 +970,9 @@ # Clean up / /KNOPPIX/bin/rm -rf /modules /static +#FIXME remove +rundebugshell + # New in Kernel 2.4.x: tmpfs with variable ramdisk size. # We check for available memory anyways and limit the ramdisks # to a reasonable size. @@ -684,9 +1003,12 @@ echo -n "${CRE}${BLUE}Creating ${YELLOW}/ramdisk${BLUE} (dynamic size=${RAMSIZE}k) on ${MAGENTA}shared memory${BLUE}...${NORMAL}" # We need /bin/mount here for the -o size= option /bin/mount -t tmpfs -o "size=${RAMSIZE}k" /ramdisk /ramdisk -mkdir -p /ramdisk/tmp /ramdisk/home/knoppix && chmod 1777 /ramdisk/tmp && chown knoppix.knoppix /ramdisk/home/knoppix && ln -snf /ramdisk/home /home && mv /tmp /tmp.old && ln -s /ramdisk/tmp /tmp && rm -rf /tmp.old +mkdir -p /ramdisk/tmp && chmod 1777 /ramdisk/tmp && mv /tmp /tmp.old && ln -s /ramdisk/tmp /tmp && rm -rf /tmp.old + echo "${BLUE}Done.${NORMAL}" +splash 18000 + stage=2 rundebugshell @@ -695,6 +1017,7 @@ UNION="/ramdisk=rw" # Add all KNOPPIX images to the union for c in "" 1 2 3 4 5 6 7; do +#FIXME add nfsro support [ -d "/KNOPPIX$c" ] && UNION="$UNION:/KNOPPIX$c=ro" done # Do the actual mount @@ -711,7 +1034,7 @@ fi done for i in $(cd /UNIONFS; echo *);do # Create links for new stuff on /UNIONFS - test "$i" = "home" -o "$i" = "tmp" && continue + test "$i" = "tmp" && continue test -L "/$i" || test -d "/$i" || test -f "/$i" || ln -snf "/UNIONFS/$i" /$i done else @@ -719,6 +1042,8 @@ /KNOPPIX/sbin/halt -f -n fi +splash 19000 + echo "" echo "${GREEN}>> Read-only ${MEDIUM} system successfully merged with read-write /ramdisk.${NORMAL}" chown knoppix.knoppix /home/knoppix @@ -749,24 +1074,96 @@ /bin/cp -f /KNOPPIX/etc/localtime /etc/localtime echo "${BLUE}Done.${NORMAL}" +splash 20000 + # Mount devpts # mount -t devpts /dev/pts /dev/pts 2>/dev/null # Clean up /etc/mtab (and - just in case - make a nice entry for looped ISO) /bin/egrep " /KNOPPIX[0-9]* | /cdrom " /proc/mounts | sed 's|/dev/loop0 /cdrom \(.*\) 0 0|'$LOOP_SOURCE$ISO_PATH' /cdrom/ \1,loop=/dev/loop0 0 0|g' >> /etc/mtab +splash 21000 + +# +# accelerated-knoppix : bootchart +# +if test -x /accel/bootchartd -a -f /accel/45xsession ; then + BOOTCHART="" + case "$CMDLINE" in *bootchart*|*BOOTCHART*) BOOTCHART="yes"; ;; esac + if test -n "$BOOTCHART" ; then + echo -n "${YELLOW}BOOTCHART INSTALL...${NORMAL}" + [ -f /etc/init ] && mv /etc/init /etc/init.org + [ -f /accel/accton ] && mv /accel/accton /etc/accton + cp /accel/bootchartd /etc/init + cp /accel/bootchartd /etc + echo " ${BLUE}Done${NORMAL}" + fi + + [ -f /etc/X11/Xsession.d/45xsession ] && mv /etc/X11/Xsession.d/45xsession /etc/X11/Xsession.d/45xsession.org + NOAC45="" + case "$CMDLINE" in *noac45*|*NOAC45*) NOAC45="yes"; ;; esac + if test -n "$NOAC45" -a -f /accel/45xsession_bt ; then + mv /accel/45xsession_bt /etc/X11/Xsession.d/45xsession + else + mv /accel/45xsession /etc/X11/Xsession.d/45xsession + fi +fi + +# +# accelerated-knoppix : install and clean up +# +if test -f /accel/knoppix-autoconfig ; then + NOACKA="" + case "$CMDLINE" in *noacka*|*NOACKA*) NOACKA="yes"; ;; esac + if test -z "$NOACKA" ; then + echo -n "${RED}Accelerated AUTOCONFIG ${YELLOW}INSTALL...${NORMAL}" + [ -f /etc/init.d/knoppix-autoconfig ] && mv /etc/init.d/knoppix-autoconfig /etc/init.d/knoppix-autoconfig.org + cp /accel/knoppix-autoconfig /etc/init.d + [ -f /etc/rcS.d/S00knoppix-autoconfig ] && rm -f /etc/rcS.d/S00knoppix-autoconfig + (cd /etc/rcS.d; ln -s ../init.d/knoppix-autoconfig S00knoppix-autoconfig ) + echo " ${BLUE}Done${NORMAL}" + fi +fi +if test -f /accel/xsession ; then + NOACXS="" + case "$CMDLINE" in *noacxs*|*NOACXS*) NOACXS="yes"; ;; esac + if test -z "$NOACXS" ; then + echo -n "${RED}Accelerated XSESSION ${YELLOW}INSTALL...${NORMAL}" + [ -f /etc/init.d/xsession ] && mv /etc/init.d/xsession /etc/init.d/xsession.org + cp /accel/xsession /etc/init.d + echo " ${BLUE}Done${NORMAL}" + fi +fi +if test -f /accel/inittab ; then + NOACIT="" + case "$CMDLINE" in *noacit*|*NOACIT*) NOACIT="yes"; ;; esac + if test -z "$NOACIT" ; then + echo -n "${RED}Accelerated INITTAB ${YELLOW}INSTALL...${NORMAL}" + [ -f /etc/inittab ] && mv /etc/inittab /etc/inittab.org + cp /accel/inittab /etc + echo " ${BLUE}Done${NORMAL}" + fi +fi +[ -x /accel/hwsetup ] && cp /accel/hwsetup /etc >/dev/null 2>&1 +[ -x /accel/mkxf86config ] && cp /accel/mkxf86config /etc >/dev/null 2>&1 +[ -x /accel/cloopreadahead ] && cp /accel/cloopreadahead /etc >/dev/null 2>&1 +[ -d /accel ] && rm -rf /accel + + # Now tell kernel where the real modprobe lives echo "/sbin/modprobe" > /proc/sys/kernel/modprobe # Change root device from /dev/fd0 to /dev/ram0 echo "0x100" > /proc/sys/kernel/real-root-dev +splash 22000 + stage=3 rundebugshell # Give control to the init process. echo "${CRE}${BLUE}Starting init process.${NORMAL}" -rm -f /linuxrc +rm -f /linuxrc /busybox exit 0 else