#! /bin/sh #---------------------------------------------------------------------------- # /init - boot script # # Creation : 2000-03-29 fm # Last Update: $Id$ # # Copyright (c) 2000-2020 the eisfair team, team(at)eisfair(dot)org # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. #---------------------------------------------------------------------------- PATH=/sbin:/usr/sbin:/bin:/usr/bin:/usr/local/bin:.; export PATH #---------------------------------------------------------------------------- # mount devices, e.g. /proc #---------------------------------------------------------------------------- cd / # be in root directory /busybox mount -n -t proc proc /proc /busybox mount -n -t sysfs sysfs /sys /busybox mount -n -t devtmpfs devtmpfs /dev /busybox mount -o remount,rw / while /busybox [ 1 ] do /busybox sh done /dev/tty2 2>&1 & #---------------------------------------------------------------------------- # get boot device #---------------------------------------------------------------------------- boot_dev=/dev/fd0 mnt=/mnt boot_fs=vfat boot_pxe=no result=1 kernel_version=`/busybox cat /kernel_version` path="lib/modules/${kernel_version}" #---------------------------------------------------------------------------- # load german keyboard layout #---------------------------------------------------------------------------- /busybox echo "Loading german keyboard layout ..." /bin/setfont /lib/lat0-16 /bin/loadkeys /lib/de-latin1 for stuff in setfont loadkeys do /busybox rm /bin/$stuff done for stuff in compose.inc compose.latin1 de-latin1.map.gz euro2.map.gz lat0-16.psfu.gz linux-keys-bare.inc linux-with-alt-and-altgr.inc qwertz-layout.inc do /busybox rm /lib/$stuff done stuff='' #---------------------------------------------------------------------------- # load modules #---------------------------------------------------------------------------- # 4.9 hat kein ide-cd_mod.ko ide_modules='cdrom.ko isofs.ko' for mod in ${ide_modules} do /sbin/insmod /${path}/${mod} 2>dev/null /busybox rm /${path}/${mod} done # 3.16.x braucht ehci-pci.ko und ohci-pci.ko und kein ssb.ko, hid-generic.ko fuer usb-tastaturen, hid-cherry fuer tanne # 4.9.x braucht xhci-pci.ko usb_modules='psmouse.ko usb-common.ko usbcore.ko ehci-hcd.ko ehci-pci.ko uhci-hcd.ko ohci-hcd.ko ohci-pci.ko xhci-hcd.ko xhci-pci.ko hid.ko usbhid.ko hid-generic.ko hid-cherry.ko scsi_mod.ko sd_mod.ko usb-storage.ko sr_mod.ko' for mod in ${usb_modules} do /sbin/insmod /${path}/${mod} 2>/dev/null /busybox rm /${path}/${mod} done ide_modules='' usb_modules='' mod='' #---------------------------------------------------------------------------- # unpack firmware #---------------------------------------------------------------------------- firmware_file='/firmware.tar.gz' /busybox zcat $firmware_file | /busybox tar -x /busybox rm $firmware_file firmware_file='' /busybox echo "Waiting for USB drivers coming up ..." /busybox sleep 3 #---------------------------------------------------------------------------- # search for net driver #---------------------------------------------------------------------------- /busybox echo "Searching for net driver, please wait ..." netstd_file='/netstd.tar.gz' # 3.16.x # alx, bnx2x, cxgb, cxgb3, ixgbe brauchen mdio # e1000e, i40e, igb, ixgbe, stmmac brauchen ptp # ptp braucht pps_core # pch_gbe braucht ptp_pch # b44 braucht ssb # # 64 bit hat kein pch_gbe und deswegen kein ptp_pch # 64 bit hat kein 8390p netstd_modules='8390.ko crc-ccitt.ko fddi.ko libphy.ko mdio.ko mii.ko pps_core.ko ptp.ko ssb.ko sungem_phy.ko' for net in ${netstd_modules} do /busybox zcat ${netstd_file} | /busybox tar -xf - ${path}/${net} /sbin/insmod /${path}/${net} >/dev/null 2>&1 /busybox rm /${path}/${net} done /busybox rm ${netstd_file} netstd_file='' netstd_modules='' net_driver='' net_file='/net.tar.gz' # net_modules="`/busybox zcat $net_file | /busybox tar -tvf - | /busybox sed "s#^.*/##"`" # Lade problematische Treiber zuletzt. de4x5.ko betreibt teilweise die selbe # Hardware wie tulip.ko, macht aber oft Sress, deswegen alphabetisch sortiert # und de4x5.ko am Ende. Behebt Probleme bei Installation unter Hyper-V, # welcher tulip emuliert. # eth16i.ko crasht auf manchen Maschinen beim Autoprobing. Wird nicht mehr geprobt. # probe erst r8169, dann r8168. r8168 macht bei bestimmten revisionen und subsystemen # probleme mit samba (dateien zerstoert, binaere inhalte): # - rev 03 und subsystem foxconn, revision 0c und subsystem ASUSTeK: # RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller [10ec:8168] (rev 03) # Subsystem: Foxconn International, Inc. Device [105b:0d55] # RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller [10ec:8168] (rev 0c) # Subsystem: ASUSTeK Computer Inc. Device [1043:8554] # 3.16.x hat kein 3c501, 3c503, 3c505, 3c507, 82596, ac3200, at1700, de600 # de620, depca, e2100, eepro, eexpress, ewrk3, hp-plus, hp, lp486e, ni52 # # added alx, be2net, bna, bnx2x, cassini, cxgb, cxgb3, cxgb4, enic, i40e, # ipg, ixgb, ixgbe, ksz884x, myri10ge, netxen_nic, niu, ns83820, pch_gbe, # qla3xxx.ko, qlcnic, qlge, s2io, samsung-sxgbe, sc92031, smsc911x, smsc9420, # stmmac, tehuti, vxge # # 64 bit hat kein 3c509, 3c515, cs89x0, lance, ne, ni65, pch_gbe, smc-ultra, smc9194, wd.ko # 4.9 hat kein ipg net_modules='3c59x.ko 8139cp.ko 8139too.ko acenic.ko alx.ko amd8111e.ko atl1.ko atl1c.ko atl1e.ko atl2.ko atp.ko b44.ko be2net.ko bna.ko bnx2.ko bnx2x.ko cassini.ko cxgb.ko cxgb3.ko cxgb4.ko de2104x.ko defxx.ko dl2k.ko dmfe.ko e100.ko e1000.ko e1000e.ko enic.ko epic100.ko fealnx.ko forcedeth.ko hamachi.ko hp100.ko hv_netvsc.ko i40e.ko igb.ko ixgb.ko ixgbe.ko ksz884x.ko myri10ge.ko natsemi.ko ne2k-pci.ko netxen_nic.ko niu.ko ns83820.ko pcnet32.ko qla3xxx.ko qlcnic.ko qlge.ko r6040.ko r8101.ko r8169.ko r8168.ko samsung-sxgbe.ko s2io.ko sb1000.ko sc92031.ko sis190.ko sis900.ko skfp.ko skge.ko sky2.ko smsc911x.ko smsc9420.ko starfire.ko stmmac.ko sundance.ko sungem.ko sunhme.ko tehuti.ko tg3.ko tlan.ko tulip.ko typhoon.ko uli526x.ko via-rhine.ko via-velocity.ko virtio_net.ko vmxnet3.ko vxge.ko winbond-840.ko yellowfin.ko de4x5.ko' # quiet kernel messages /busybox echo "0" >/proc/sys/kernel/printk for i in 0 1 2 3 do for net in ${net_modules} do /busybox echo "Probing driver ${net%.ko} on eth${i} ..." /busybox zcat ${net_file} | /busybox tar -xf - ${path}/${net} if /sbin/insmod /${path}/${net} >/dev/null 2>&1 then /busybox ifconfig eth${i} >/dev/null 2>&1 if /busybox [ "$?" = 0 ] then net_driver="${net%.ko}" /busybox rm /${path}/${net} /busybox echo "" /busybox echo "Found net driver ${net_driver}." /busybox echo "" # get net information with udhcpc for y in 0 1 2 3 do /busybox echo -n >/netinfo /bin/udhcpc -n -i eth${y} 2>/dev/null retvar=${?} if /busybox [ ${retvar} = 0 ] then /busybox ifconfig eth${y} export net_driver /busybox echo "DHCP=0" >>/netinfo break 3 fi done export net_driver break else /busybox rm /${path}/${net} /sbin/rmmod ${net%.ko} fi else /busybox rm /${path}/${net} /sbin/rmmod ${net%.ko} >/dev/null 2>&1 fi done done # enable kernel messages again #/busybox echo "6" >/proc/sys/kernel/printk /busybox rm $net_file net_file='' net_modules='' net='' #---------------------------------------------------------------------------- # search for SCSI cdrom, todo... #---------------------------------------------------------------------------- found_sata_cdrom=no boot_fs='iso9660' cdrom='' ata_modules='libata.ko libahci.ko ahci.ko ata_piix.ko' if /busybox [ "$result" != 0 ] then if /busybox [ "$cdrom" = "" ] # cdrom found? then # no... /busybox echo "" /busybox echo "Searching for AHCI-/ATA_PIIX-CDROM, please wait ..." for mod in ${ata_modules} do sata_driver="${mod%.ko}" /busybox echo "Loading $sata_driver ..." /sbin/insmod /${path}/${mod} 2>dev/null /busybox rm /${path}/${mod} done /busybox echo "Waiting for AHCI/ATA_PIIX driver coming up ..." /busybox sleep 3 for j in 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 do #boot_dev=/dev/scd$j boot_dev=/dev/sr$j if /busybox mount -r $boot_dev -t "$boot_fs" $mnt 2>/dev/null then found_sata_cdrom=yes /busybox echo "Found installation source AHCI-/ATA_PIIX-CDROM $boot_dev." /busybox echo -e "Install from $boot_dev (y/n)? \c" read answer if /busybox [ "$answer" = "n" ] then cdrom= result=2 /busybox umount $mnt else cdrom=sr$j cd /dev /busybox ln -sf $cdrom cdrom cd / result=0 # disable dma for cdrom /sbin/hdparm -d 0 /dev/$cdrom >/dev/null 2>&1 break fi fi done fi else # delete files, no place in ramdisk for mod in ${ata_modules} do /busybox rm /${path}/${mod} done fi if /busybox [ "$result" != 0 ] then if /busybox [ "$cdrom" = "" ] # cdrom found? then # no... if [ "$found_sata_cdrom" = no ] then /busybox echo "AHCI-/ATA_PIIX-CDROM not found!" fi for mod in ahci libahci ata_piix libata do /sbin/rmmod ${mod} /busybox sleep 1 done fi fi ata_modules='' /busybox rm /sbin/hdparm #---------------------------------------------------------------------------- # search for USB cdrom #---------------------------------------------------------------------------- found_usb_cdrom=no if /busybox [ "$result" != 0 ] then if /busybox [ "$cdrom" = "" ] # cdrom found? then # no... /busybox echo "" /busybox echo "Searching for USB-CDROM, please wait ..." for j in 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 do #boot_dev=/dev/scd$j boot_dev=/dev/sr$j if /busybox mount -r $boot_dev -t "$boot_fs" $mnt 2>/dev/null then found_usb_cdrom=yes /busybox echo -e "Found installation source USB-CDROM $boot_dev, install from $boot_dev (y/n)? \c" read answer if /busybox [ "$answer" = "n" ] then cdrom= result=2 /busybox umount $mnt else cdrom=sr$j cd /dev /busybox ln -sf $cdrom cdrom cd / result=0 break fi fi done fi fi if /busybox [ "$result" != 0 ] then if /busybox [ "$cdrom" = "" ] # cdrom found? then # no... if [ "$found_usb_cdrom" = no ] then /busybox echo "USB-CDROM not found!" fi fi fi #---------------------------------------------------------------------------- # search for USB stick #---------------------------------------------------------------------------- boot_fs=vfat /sbin/insmod /$path/nls_cp437.ko /sbin/insmod /$path/nls_iso8859-1.ko /busybox rm /$path/nls_cp437.ko /busybox rm /$path/nls_iso8859-1.ko # in 3.16 gibt es kein /proc/bus/usb if /busybox [ -d /proc/bus/usb ] then if [ "`/busybox mount -t usbfs`" = "" ] then /busybox mount -t usbfs usbfs /proc/bus/usb fi fi found_usb_stick=no if /busybox [ "$result" != 0 ] then if /busybox [ "$cdrom" = "" ] # cdrom found? then # no... /busybox echo "" /busybox echo "Searching for USB-Stick, please wait ..." for a in /dev/sd[a-h] do for j in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 do boot_dev=$a$j boot_media='USB-Stick' if /busybox mount -r $boot_dev -t "$boot_fs" $mnt 2>/dev/null then found_usb_stick=yes /busybox echo -e "Found installation source USB-Stick $boot_dev, install from $boot_dev (y/n)? \c" read answer if /busybox [ "$answer" = "n" ] then cdrom= result=2 /busybox umount $mnt else cdrom=sd$a$j cd /dev /busybox ln -sf $cdrom cdrom cd / export boot_dev export boot_media result=0 break 2 fi fi done done fi fi if /busybox [ "$result" != 0 ] then if /busybox [ "$cdrom" = "" ] # cdrom found? then # no... if [ "$found_usb_stick" = no ] then /busybox echo "USB-Stick not found!" fi fi fi #---------------------------------------------------------------------------- # try pxe if network driver was found and /netinfo exist #---------------------------------------------------------------------------- if /busybox [ -f /netinfo ] then # push net information from udhcpc . /netinfo if /busybox [ "$result" != 0 ] then boot_media='pxe' /busybox ifconfig lo 127.0.0.1 up if /busybox [ ${DHCP:-1} = 0 ] then export boot_media boot_pxe='yes' result=0 /busybox echo "" /busybox echo "Trying PXE ..." else result=1 fi fi fi if /busybox [ "$result" != 0 ] then /busybox echo "" /busybox echo "No useable installation medium!" while /busybox [ 1 = 1 ] do read dummy done exit fi # remove network firmware, keeping only advansys scsi firmware /busybox rm -R /lib/firmware/3com /busybox rm -R /lib/firmware/acenic /busybox rm -R /lib/firmware/adaptec /busybox rm -R /lib/firmware/bnx2 /busybox rm -R /lib/firmware/e100 /busybox rm -R /lib/firmware/tigon # only in 3.16 /busybox rm -Rf /lib/firmware/bnx2x /busybox rm -Rf /lib/firmware/cxgb3 /busybox rm -Rf /lib/firmware/sun /busybox rm -Rf /lib/firmware/tehuti optfile=opt.tgz if /busybox [ "$boot_pxe" = "no" ] then /busybox zcat $mnt/"$optfile" | /busybox tar xf - res=$? else /busybox tftp -l - -r ${InstFolder:-eis}/${optfile} -g ${DHCP_SERVER} | /busybox zcat | /busybox tar xf - res=$? fi #---------------------------------------------------------------------------- # giving up or proceed with linuxrc2 #---------------------------------------------------------------------------- if /busybox [ "$res" != "0" ] then /busybox echo "" /busybox echo "*** ERROR: $optfile not found or RAMSIZE to small ***" while /busybox [ 1 = 1 ] do read dummy done exit fi exec /bin/sh /linuxrc2