|
|

楼主 |
发表于 2005-2-22 23:11:03
|
显示全部楼层
同样,我们先看看官方文档
/etc/rc.sysinit
The main system boot script. It does boot-critical things like mounting filesystems, running devfsd, activating swap, loading modules, setting localization parameters, etc. You will most likely never need to edit this file!
系统主要的起动脚本,它作一些起动时重要的事情!诸如,挂载文件系统,运行devfsd,激活交换分区,加载模块,设置local,等等。你最好不要编辑这个文件!
说的非常的明白,我把文件内容贴在下面!----已经包含rc.conf,functions,目的是更好的对照理解!
#!/bin/sh
#
# /etc/rc.sysinit
#
. /etc/rc.conf #引用rc.conf 里的变量及函数 .把rc。conf装入内存
下面是rc。conf的内容
HARDWARECLOCK="localtime"
TIMEZONE=Asia/Shanghai
KEYMAP=us
CONSOLEFONT=
USEcolor="yes"
# Scan for LVM volume groups at startup, required if you use LVM
USELVM="no"
# Networking
HOSTNAME="myhost"
# Module to load at boot-up
MODULES=(usbserial ide-scsi forcedeth snd-intel8x0 snd-pcm-oss)
# Note: to use DHCP, set your interface to be "dhcp" (eth0="dhcp")
#
lo="lo 127.0.0.1"
eth0="dhcp"
INTERFACES=(lo eth0)
#
# Routes to start at boot-up (in this order#
gateway="default gw 192.168.1.1"
ROUTES=(gateway)
# Daemons to start at boot-up (in this order)
# (prefix a daemon with a ! to disable it)
DAEMONS=(syslog-ng hotplug !pcmcia network !netfs !crond alsamixer !xinetd)
以上是rc.conf的内容
. /etc/rc.d/functions #把functions装入,引用functions里的函数
下面是fuctions的内容
STAT_COL=$[`stty size | awk 'BEGIN { RS=" " }; END { print $1 }'` - 13]
# colors:
if [ "$USECOLOR" = "YES" -o "$USECOLOR" = "yes" ]; then
C_MAIN="\033[1;37m" # main text
C_OTHER="\033[1;34m" # prefix & brackets
C_SEPARATOR="\033[1;30m" # separator
C_BUSY="\033[0;36m" # busy
C_FAIL="\033[1;31m" # failed
C_DONE="\033[1;37m" # completed
C_H1="\033[1;37m" # highlight text 1
C_H2="\033[1;36m" # highlight text 2
C_CLEAR="\033[1;0m"
fi
# prefixes:
PREFIX_REG="::"
PREFIX_HL=" >"
# functions:
deltext() {
echo -ne "\033[$(($STAT_COL+4))G"
}
printhl() {
echo -e "$C_OTHER$PREFIX_HL $C_H1$1$C_CLEAR "
}
printsep() {
echo -e "\n$C_SEPARATOR ------------------------------\n"
}
stat_busy() {
echo -ne "$C_OTHER$PREFIX_REG $C_MAIN$1$C_CLEAR "
deltext
echo -ne " $C_OTHER[${C_BUSY}BUSY$C_OTHER]$C_CLEAR "
}
stat_done() {
deltext
echo -e " $C_OTHER[${C_DONE}DONE$C_OTHER]$C_CLEAR "
}
stat_fail() {
deltext
echo -e " $C_OTHER[${C_FAIL}FAIL$C_OTHER]$C_CLEAR "
}
stat_die() {
retval=1
[ "$1" = "" ] || retval=$1
stat_fail
exit $retval
}
status() {
stat_busy "$1"
shift
$* >/dev/null 2>&1
if [ $? -eq 0 ]; then
stat_done
return 0
else
stat_fail
return 1
fi
}
# daemons:
add_daemon() {
[ -d /var/run/daemons ] || mkdir -p /var/run/daemons
touch /var/run/daemons/$1
}
rm_daemon() {
rm -f /var/run/daemons/$1
}
ck_daemon() {
[ -f /var/run/daemons/$1 ] && return 1
return 0
}
# End of file以上是fuctions的函数
echo " "
printhl "Arch Linux v0.7 $C_OTHER(${C_H2}Wombat$C_OTHER)\n"
printhl "${C_H2}http://www.archlinux.org"
printhl "Copyright 2002-2004 Judd Vinet"
printhl "Distributed under the GNU General Public License (GPL)"
printsep
# start up our mini logger until syslog takes over
/sbin/minilogd
# anything more serious than KERN_WARNING goes to the console
/bin/dmesg -n 3
# mount /proc and /sys
mount -n -t proc none /proc
[ "`grep sysfs /proc/filesystems`" ] && mount -n -t sysfs none /sys
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
status "Starting UDev Daemon" /etc/start_udev
else
# Static /dev, our last resort
status "Using static /dev filesystem" /bin/true
fi
if [ "$USELVM" = "yes" -o "$USELVM" = "YES" ]; then
if [ -f /etc/lvmtab -a -x /sbin/vgchange ]; then
# Kernel 2.4.x, LVM1 groups
stat_busy "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_busy "Activating LVM2 groups"
/sbin/lvm vgchange --ignorelockingfailure -a y
stat_done
fi
fi
status "Activating Swap" /sbin/swapon -a #激活swap分区
status "Mounting Root Read-only" /bin/mount -n -o remount,ro / #挂载分区
if [ -x /sbin/fsck ]; then #检查文件系统
stat_busy "Checking Filesystems"
/sbin/fsck -A -T -C -a
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
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
stat_busy "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
stat_busy "Removing Leftover Files" #不太清楚,清除临时文件,可能主要目的是为了检测,如daemons起动成功,会向/var/run写入一些空的文件,如果有这些文件,表明起动成功,所以起动时先清空。
/bin/rm -f /etc/nologin &> /dev/null
/bin/rm -f /etc/shutdownpid &> /dev/null
/bin/rm -f /var/locks/* &> /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
: > /var/run/utmp
# Keep {x,k,g}dm happy with xorg
mkdir /tmp/.ICE-unix && chmod 1777 /tmp/.ICE-unix
mkdir /tmp/.X11-unix && chmod 1777 /tmp/.X11-unix
stat_done
status "Updating Shared Library Links" /sbin/ldconfig
#检查依赖关系,这一步有人把它注释,以加快起动速度,意义不大!
if [ "$HOSTNAME" != "" ]; then
status "Setting Hostname: $HOSTNAME" /bin/hostname $HOSTNAME
fi
status "Updating Module Dependencies" /sbin/depmod -A
if [ -f /var/run/random-seed ]; then
stat_busy "Initializing Random Seed"
/bin/cat /var/run/random-seed >/dev/urandom
stat_done
fi
if [ "$KEYMAP" != "" ]; then
status "Loading Keyboard Map: $KEYMAP" /bin/loadkeys -q $KEYMAP
fi
if [ "$CONSOLEFONT" != "" ]; then
stat_busy "Loading Console Font: $CONSOLEFONT"
for i in `seq 1 12`; do
/usr/bin/setfont $CONSOLEFONT -C /dev/vc/${i};
done
stat_done
fi
# Load modules from the MODULES array defined in rc.conf#加载rc。conf中定义的模块
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
# Now that modules are loaded, try to mount /proc/bus/usb
[ "`grep usbfs /proc/filesystems`" ] && mount -t usbfs none /proc/bus/usb
# Screen blanks after 15 minutes idle time
/usr/bin/setterm -blank 15
# End of file
相对其它系统的rc.sysinit,arch的还是比较简单,易懂的。正如其文档所说!
有些地方我也不太懂,以后补充
下面看看rc.multi的内容 |
|