You are not logged in.
Pages: 1
Hello.
I rewrote rc.sysinit because a lot of things could be backgrounded... this saves about 5 seconds off bootup time on my 2 GHz machine. (On my own setup, I have LVM commented out, and all daemons in rc.conf are prefixed with a '@' for backgrounding.
If you disagree with something I do in it, please let me know. I'm quite unexperienced.
Feel free to use it if it helps. BSD license.
#!/bin/sh
#
# /etc/rc.sysinit
#
. /etc/rc.conf
. /etc/rc.d/functions
do_lvm() {
if [ "$USELVM" = "yes" -o "$USELVM" = "YES" ]; then
if [ -f /etc/lvmtab -a -x /sbin/vgchange ]; then
# Kernel 2.4.x, LVM1 groups
stat_bkgd "Activating LVM1 groups"
/sbin/vgchange -a y
stat_done
elif [ -x /sbin/lvm -a -d /sys/block ]; then
# Kernel 2.6.x, LVM2 groups
stat_bkgd "Activating LVM2 groups"
/sbin/lvm vgchange --ignorelockingfailure -a y
stat_done
fi
fi
}
do_fsck() {
FORCEFSCK=
[ -f /forcefsck ] && FORCEFSCK="-- -f"
if [ -x /sbin/fsck ]; then
stat_busy "Checking Filesystems"
/sbin/fsck -A -T -C -a $FORCEFSCK
if [ $? -gt 1 ]; then
stat_fail
echo
echo "***************** FILESYSTEM CHECK FAILED ****************"
echo "* *"
echo "* Please repair manually and reboot. Note that the root *"
echo "* file system is currently mounted read-only. To remount *"
echo "* it read-write type: mount -n -o remount,rw / *"
echo "* When you exit the maintenance shell the system will *"
echo "* reboot automatically. *"
echo "* *"
echo "************************************************************"
echo
/sbin/sulogin -p
echo "Automatic reboot in progress..."
/bin/umount -a
/bin/mount -n -o remount,ro /
/sbin/reboot -f
exit 0
fi
stat_done
fi
}
mount_local() {
stat_busy "Mounting Local Filesystems"
/bin/mount -n -o remount,rw /
/bin/rm -f /etc/mtab*
# make sure / gets written to /etc/mtab
/bin/mount -o remount,rw /
# re-mount /proc and /sys so they can be written to /etc/mtab
umount /proc && mount -t proc none /proc
[ "`grep sysfs /proc/filesystems`" ] && umount /sys && mount -t sysfs none /sys
# now mount all the local filesystems
/bin/mount -a -t nonfs,nosmbfs,noncpfs,nosysfs,nousbfs
stat_done
}
system_clock() {
stat_bkgd "Configuring System Clock"
if [ "$HARDWARECLOCK" = "UTC" ]; then
/sbin/hwclock --utc --hctosys
else
/sbin/hwclock --localtime --hctosys
fi
if [ ! -f /var/lib/hwclock/adjtime ]; then
echo "0.0 0 0.0" > /var/lib/hwclock/adjtime
fi
if [ "$TIMEZONE" != "" ]; then
/bin/ln -sf /usr/share/zoneinfo/$TIMEZONE /etc/localtime
fi
stat_done
}
dev_filesystem() {
if [ -e /dev/.devfsd -a -x /sbin/devfsd ]; then
# Looks like devfs is running, use it
status "Starting DevFS Daemon" /sbin/devfsd /dev
elif [ -x /etc/start_udev -a -d /sys/block ]; then
# We have a start_udev script and /sys appears to be mounted, use UDev
/etc/start_udev
else
# Static /dev, our last resort
status "Using static /dev filesystem" /bin/true
fi
}
rm_leftover_files() {
stat_bkgd "Removing Leftover Files"
/bin/rm -f /etc/nologin &>/dev/null
/bin/rm -f /etc/shutdownpid &>/dev/null
/bin/rm -f /var/lock/* &>/dev/null
/bin/rm -f /var/run/*.pid &>/dev/null
/bin/rm -f /var/run/daemons/* &>/dev/null
/bin/rm -rf /tmp/* /tmp/.* &>/dev/null
/bin/rm -f /forcefsck &>/dev/null
: > /var/run/utmp
mkdir /tmp/.ICE-unix && chmod 1777 /tmp/.ICE-unix
mkdir /tmp/.X11-unix && chmod 1777 /tmp/.X11-unix
stat_done
}
set_hostname() {
if [ "$HOSTNAME" != "" ]; then
status "Setting Hostname: $HOSTNAME" /bin/hostname $HOSTNAME
fi
}
set_nis_domain() {
# Set the NIS domain name, if necessary
[ -f /etc/conf.d/nisdomainname ] && . /etc/conf.d/nisdomainname
if [ "$NISDOMAINNAME" != "" ]; then
status "Setting NIS Domain Name: $NISDOMAINNAME" /bin/nisdomainname $NISDOMAINNAME
fi
}
depmod_a() {
status "Updating Module Dependencies" /sbin/depmod -A
}
init_random_seed() {
if [ -f /var/run/random-seed ]; then
stat_bkgd "Initializing Random Seed"
/bin/cat /var/run/random-seed >/dev/urandom
stat_done
fi
}
set_keymap() {
if [ "$KEYMAP" != "" ]; then
status "Loading Keyboard Map: $KEYMAP" /bin/loadkeys -q $KEYMAP
fi
}
set_console_font() {
if [ "$CONSOLEFONT" != "" ]; then
stat_bkgd "Loading Console Font: $CONSOLEFONT"
for i in `seq 1 12`; do
if [ "$CONSOLEMAP" != "" ]; then
/usr/bin/setfont -m $CONSOLEMAP $CONSOLEFONT -C /dev/vc/${i};
else
/usr/bin/setfont $CONSOLEFONT -C /dev/vc/${i};
fi
done
stat_done
fi
}
load_usb_support() {
# Load USB support
/sbin/modprobe usbcore >/dev/null 2>&1
#[ "`grep usbfs /proc/filesystems`" ] && mount -t usbfs none /proc/bus/usb
}
load_modules() {
# Load modules from the MODULES array defined in rc.conf
if [ -f /proc/modules ]; then
stat_busy "Loading Modules"
for mod in "${MODULES[@]}"; do
if [[ `echo $mod | grep '^[^!]' | wc -l` -eq 1 ]]; then
/sbin/modprobe $mod
fi
done
stat_done
fi
}
load_sysctl() {
[ -r /etc/sysctl.conf ] && /sbin/sysctl -q -p
}
echo " " # Boot message
printhl "Arch Linux v0.7 $C_OTHER(${C_H2}Wombat$C_OTHER)n"
printhl "${C_H2}http://www.archlinux.org"
printhl "Copyright 2002-2005 Judd Vinet"
printhl "Distributed under the GNU General Public License (GPL)"
printsep
/sbin/minilogd & # start up our mini logger until syslog takes over
/bin/dmesg -n 3 & # anything more serious than KERN_WARNING goes to the console
mount -n -t proc none /proc # mount /proc
[ "`grep sysfs /proc/filesystems`" ] && mount -n -t sysfs none /sys # mount /sys
dev_filesystem # Start /dev fs
do_lvm # LVM groups
status "Activating Swap" /sbin/swapon -a & # Swap
status "Mounting Root Read-only" /bin/mount -n -o remount,ro / # / ro
do_fsck # Necessary fsck?
mount_local # prerequisite
system_clock & # Sys clock
rm_leftover_files & # old files, and dm stuff
set_hostname & # hostname
set_nis_domain & # NIS domain
depmod_a & # safe to background
init_random_seed & # restore random seed
set_keymap & # set keymap
set_console_font & # set console font
load_usb_support & # USB support, bgr OK
load_sysctl & # Sysctl vars
load_modules # can NOT be backgrounded
/usr/bin/setterm -blank 15 & # Screen blanks after 15 minutes idle time
Offline
I rewrote rc.sysinit because a lot of things could be backgrounded... this saves about 5 seconds off bootup time on my 2 GHz machine. (On my own setup, I have LVM commented out, and all daemons in rc.conf are prefixed with a '@' for backgrounding.
If you disagree with something I do in it, please let me know. I'm quite unexperienced.
I don't know if backgrounding everything is really a good idea - the sysctrl stuff might interfere/affect module loading, among other things.
If you'd like judd to see this, create a patch for it, and post it as a feature request on the bug tracker (or email him directly) - he doesn't read the forums much.
Feel free to use it if it helps. BSD license.
I believe the initscripts are GPLed, but I can't be sure.
Offline
Thanks for the comment. The BSD thing was just a tongue-in-cheek remark.
Offline
Pages: 1