X-Git-Url: https://pd.if.org/git/?a=blobdiff_plain;f=scripts%2Frc.sysinit;h=8f030c7edc19697c91a46d29ee2888954b7022ca;hb=a3fb8f7fdef8cf61b194fd8b44b5c9c39923ffed;hp=52ddc707001078181e17fef10b6cb8ee9926d971;hpb=9ea1bff7b049ce152767460c68bb61f6aa500cef;p=startuptools diff --git a/scripts/rc.sysinit b/scripts/rc.sysinit index 52ddc70..8f030c7 100644 --- a/scripts/rc.sysinit +++ b/scripts/rc.sysinit @@ -20,14 +20,14 @@ # 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? -# 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 -p /dev/{pts,shm} +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 @@ -39,11 +39,8 @@ mountpoint -q /dev/pts && mountpoint -q /dev/shm status_check -#status_begin mounting virtual filesystems -#mount /proc && -#mount /sys && -#mount /dev -#status_check +# bash seems to rely on this +ln -s /proc/self/fd /dev/fd # * set the host name status_begin Setting hostname @@ -61,68 +58,95 @@ status_begin loading sysctl.conf sysctl -q -p status_check -# * set up /dev (via udev on modern linux systems) - -## -## 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 -/lib/udev/udevd --daemon -status_check +# * fsck and mount filesystems -# 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_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 -# Now wait for udevd to process the uevents we triggered -# if ! is_true "$OMIT_UDEV_SETTLE"; then -status_begin waiting for udevadm to settle -udevadm settle +# 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 -# 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 - -# log_success_msg2 - -## -## end voodoo scripting -## +# 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 "looking for kernel modules to load" + lspci -k|grep 'Kernel modules:' | awk '{print $3}'| sort -u | xargs -n1 modprobe + 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 -# * fsck and mount filesystems - -status_starting fsck of / -mount -o remount,ro / -fsck -AT -# TODO actually check the return value -mount -o remount,rw / -status_check - # mount any remaining filesystems status_begin mounting remaining filesystems -mount -a -t noproc,sysfs,devtmpfs,devpts +mount -a -t noproc,sysfs,devtmpfs,devpts,tmpfs status_check rm -f /etc/mtab mount -af +mount -f / # * do any boot time /tmp cleanup or similar