#!/bin/sh # fstab: lists filesystems, this file is not changed from it's usual # format, and is used as such # # rc.sysinit: done once at start time. responsible for performing any # necessary early system initialization. This reads rc.conf for some # of its actions #PATH=/sbin:/usr/sbin:/bin:/usr/bin . /etc/rc.d/functions.rc . /etc/rc.conf # * load any kernel modules needed # TODO check for /etc/fstab # write one if missing? # need to mount sys because fsck might use it # try to mount them directly if they fail from fstab? # TODO bail to emergency shell if these fail? # TODO set NOVIRTFS='/var/run' and the like to skip some of these? status_begin mounting virtual filesystems mountpoint -q /proc || mount -t proc proc /proc -o nosuid,noexec,nodev mountpoint -q /sys || mount -t sysfs sys /sys -o nosuid,noexec,nodev mountpoint -q /var/run || mount -t tmpfs run /var/run -o mode=0755,nosuid,nodev mountpoint -q /dev || mount -t devtmpfs dev /dev -o mode=0755,nosuid mkdir /dev/pts /dev/shm mountpoint -q /dev/pts || mount -t devpts devpts /dev/pts -o mode=0620,gid=5,nosuid,noexec mountpoint -q /dev/shm || mount -t tmpfs shm /dev/shm -o mode=1777,nosuid,nodev # and make sure they all passed mountpoint -q /proc && mountpoint -q /sys && mountpoint -q /var/run && mountpoint -q /dev && mountpoint -q /dev/pts && mountpoint -q /dev/shm status_check # bash seems to rely on this ln -s /proc/self/fd /dev/fd # * set the host name status_begin Setting hostname hostname ${HOSTNAME:=$(uname -s)} status_check # TODO should probably bail out if the /sys mount fails # TODO decide if the loopback network interface should be done here or later # I think later, it's not actually necessary # * sysctl status_begin loading sysctl.conf sysctl -q -p status_check # * fsck and mount filesystems #status_starting fsck of / #mount -o remount,ro / #fsck -A -T # TODO actually check the return value status_begin remounting root filesystem rw mount -o remount,rw / status_check # need to run depmod here, just in case # it should be done at kernel install time, but this can avoid # errors if that goes wrong or there are new or removed modules status_begin running depmod depmod status_check # load any kernel modules # there's probably a better way to do this # this could also be done in the initial ram-disk, but # this covers the case where there isn't one, but we still want # to load more hardware if ! is_true "$NOPROBEHW" ; then status_begin "loading kernel modules" modlist=$(lspci -k|grep 'Kernel modules:' | awk '{print $3}'| sort -u) if [ -n "$modlist" ]; then modprobe $modlist fi status_check fi # set up /dev if [ -x /sbin/mdev ] && ! is_true "$USE_UDEV" ; then status_begin setting up mdev echo > /dev/mdev.seq echo /sbin/mdev > /proc/sys/kernel/hotplug /sbin/mdev -s status_check elif [ -x /sbin/udevd ]; then ## ## begin voodoo scripting from lfs-initscripts ## # udev will handle hotplugs echo > /proc/sys/kernel/hotplug # start udev # this should probably be moved to inittab or started via # something that could monitor it status_starting udevd daemon /sbin/udevd --daemon status_check # Now traverse /sys in order to "coldplug" devices that have # already been discovered # this is going to fail if sys isn't mounted status_begin populating udevadm triggers udevadm trigger --action=add --type=subsystems && udevadm trigger --action=add --type=devices && udevadm trigger --action=change --type=devices status_check # Now wait for udevd to process the uevents we triggered # if ! is_true "$OMIT_UDEV_SETTLE"; then # quoted here so 'for' doesn't confuse syntax highlighting status_begin 'waiting for udevadm to settle' udevadm settle status_check # fi # If any LVM based partitions are on the system, ensure they # are activated so they can be used. # if [ -x /sbin/vgchange ]; then /sbin/vgchange -a y >/dev/null; fi ## ## end voodoo scripting ## fi # * set up swap swapon -a # mount any remaining filesystems status_begin mounting remaining filesystems mount -a -t noproc,sysfs,devtmpfs,devpts,tmpfs status_check # force mtab symlink rm -f /etc/mtab ln -s /proc/mounts /etc/mtab # * do any boot time /tmp cleanup or similar # * do any utmp/wtmp initialization needed touch /var/run/utmp touch /var/log/wtmp # * configure the console # * set timezone and clock status_begin setting system clock from hardware clock hwclock -s status_check