You are not logged in.

#1 2005-08-03 22:54:26

laddiebuck
Member
Registered: 2005-08-03
Posts: 14

/etc/rc.sysinit

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. wink


#!/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

#2 2005-08-03 23:06:28

phrakture
Arch Overlord
From: behind you
Registered: 2003-10-29
Posts: 7,879
Website

Re: /etc/rc.sysinit

laddiebuck wrote:

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.

laddiebuck wrote:

Feel free to use it if it helps. BSD license. wink

I believe the initscripts are GPLed, but I can't be sure.

Offline

#3 2005-08-03 23:19:02

laddiebuck
Member
Registered: 2005-08-03
Posts: 14

Re: /etc/rc.sysinit

Thanks for the comment. The BSD thing was just a tongue-in-cheek remark.

Offline

Board footer

Powered by FluxBB