]> pd.if.org Git - startuptools/blobdiff - scripts/rc.sysinit
force /etc/mtab to be a symlink to /proc/mounts
[startuptools] / scripts / rc.sysinit
index 52ddc707001078181e17fef10b6cb8ee9926d971..b693ecd41f93d77dc0d1499f27c59379e75e53dc 100644 (file)
 # 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
 
+# force mtab symlink
 rm -f /etc/mtab
-mount -af
+ln -s /proc/mounts /etc/mtab
 
 # * do any boot time /tmp cleanup or similar