#!/bin/sh

# must mount proc first
mount proc /proc -t proc

# disable modprobe calls
echo "/bin/true" >/proc/sys/kernel/modprobe

# mount root writable
mount /dev/root / -o remount,rw >/dev/null 2>&1

# give ourselves 256k of ramdisk for /tmp on readonly filesystems.
# we use ram0 since /dev/ram == ram1, and dboostrap uses that for
# other things. We test this with a simple check.
if touch /ro-test >/dev/null 2>&1; then
    rm -f /ro-test # nothing
else
    # We need to make sure that whatever is in /tmp, gets copied
    # to the new ramdisk first. We make a 512 ramdisk with 1024 bytes per
    # inode. This should give us ~500 inodes.
    dd if=/dev/zero of=/dev/ram0 bs=1024 count=512
    mke2fs -b 1024 -i 1024 /dev/ram0 >/dev/null 2>&1
    mount /dev/ram0 /mnt -o rw -t ext2
    rm -rf /mnt/lost+found
    cp -a /tmp/. /mnt >/dev/null 2>&1
    rm -f `find /mnt | grep TRANS`
    umount /mnt
    mount /dev/ram0 /tmp -o rw -t ext2
fi

cat <<EOF > /etc/modules
# /etc/modules: kernel modules to load at boot time.
#
# This file should contain the names of kernel modules that are
# to be loaded at boot time, one per line.  Comments begin with
# a "#", and everything on the line after them are ignored.

EOF
chmod 644 /etc/modules


# load extra kernel modules if they exist
insmod /lib/modules/unix.o >/dev/null 2>&1 && echo unix >>/etc/modules
insmod /lib/modules/misc/unix.o >/dev/null 2>&1 && echo unix >>/etc/modules
insmod /lib/modules/cdrom/cdrom.o >/dev/null 2>&1 && echo cdrom >>/etc/modules
insmod /lib/modules/block/ide-cd.o >/dev/null 2>&1 && echo ide-cd >>/etc/modules
insmod /lib/modules/block/loop.o >/dev/null 2>&1 && echo loop >>/etc/modules
insmod /lib/modules/fs/isofs.o >/dev/null 2>&1 && echo isofs >>/etc/modules
insmod /lib/modules/net/8390.o >/dev/null 2>&1 && echo 8390 >>/etc/modules
insmod /lib/modules/net/ether1.o >/dev/null 2>&1 && echo ether1 >>/etc/modules
insmod /lib/modules/net/ether3.o >/dev/null 2>&1 && echo ether3 >>/etc/modules
insmod /lib/modules/net/etherh.o >/dev/null 2>&1 && echo etherh >>/etc/modules
insmod /lib/modules/net/ne2k-pci.o >/dev/null 2>&1 && echo ne2k-pci >>/etc/modules
insmod /lib/modules/net/tulip.o >/dev/null 2>&1 && echo tulip >>/etc/modules
insmod /lib/modules/af_packet.o >/dev/null 2>&1 && echo af_packet >>/etc/modules
insmod /lib/modules/misc/af_packet.o >/dev/null 2>&1 && echo af_packet >>/etc/modules
insmod /lib/modules/scsi/queue.o >/dev/null 2>&1 && echo queue >>/etc/modules
insmod /lib/modules/scsi/msgqueue.o >/dev/null 2>&1 && echo msgqueue >>/etc/modules
insmod /lib/modules/scsi/scsi_mod.o >/dev/null 2>&1 && echo scsi_mod >>/etc/modules
insmod /lib/modules/scsi/sd_mod.o >/dev/null 2>&1 && echo sd_mod >>/etc/modules
insmod /lib/modules/scsi/sr_mod.o >/dev/null 2>&1 && echo sr_mod >>/etc/modules
insmod /lib/modules/scsi/cumana_1.o >/dev/null 2>&1 && echo cumana_1 >>/etc/modules
insmod /lib/modules/scsi/cumana_2.o >/dev/null 2>&1 && echo cumana_2 >>/etc/modules
insmod /lib/modules/scsi/oak.o >/dev/null 2>&1 && echo oak >>/etc/modules
insmod /lib/modules/scsi/powertec.o >/dev/null 2>&1 && echo powertec >>/etc/modules
insmod /lib/modules/scsi/eesox.o >/dev/null 2>&1 && echo eesox >>/etc/modules
insmod /lib/modules/scsi/acornscsi_mod.o >/dev/null 2>&1 && echo acornscsi_mod >>/etc/modules
insmod /lib/modules/scsi/arxescsi.o >/dev/null 2>&1 && echo arxescsi >>/etc/modules
insmod /lib/modules/scsi/fas216.o >/dev/null 2>&1 && echo fas216 >>/etc/modules
insmod /lib/modules/block/floppy.o >/dev/null 2>&1 && echo floppy >>/etc/modules
insmod /lib/modules/fs/adfs.o >/dev/null 2>&1 && echo adfs >>/etc/modules
# usb keyboard

if grep -i USB /proc/pci ; then
   insmod /lib/modules/`uname -r`/kernel/drivers/usb/usbcore.o
   insmod /lib/modules/`uname -r`/kernel/drivers/usb/usb-uhci.o>/dev/null 2>&1 && echo usb-uhci >>/etc/modules
   insmod /lib/modules/`uname -r`/kernel/drivers/usb/usb-ohci.o>/dev/null 2>&1 && echo usb-ohci >>/etc/modules
   insmod /lib/modules/`uname -r`/kernel/drivers/input/input.o >/dev/null 2>&1 && echo input >>/etc/modules
   insmod /lib/modules/`uname -r`/kernel/drivers/usb/usbkbd.o && echo usbkbd >>/etc/modules
   insmod /lib/modules/`uname -r`/kernel/drivers/usb/hid.o && echo hid >>/etc/modules
   sleep 1
   insmod /lib/modules/`uname -r`/kernel/drivers/input/keybdev.o >/dev/null 2>&1 && echo keybdev >>/etc/modules
fi

# insmod seems to want this
mkdir -p /lib/modules/`uname -r` >/dev/null 2>&1

# start syslogging
/sbin/syslogd -m 0

# nfsroot cleanup (persistent files between runs)
rm -f /tmp/keybd_settings
rm -f -r /tmp/notarget

# maybe load font


exit 0
