感谢支持
我们一直在努力

Fedora 下的/etc/rc.d/rc.sysinit 启动脚本注释

/etc/rc.d/rc.sysinit


脚本来源:Fedora 11


HOSTNAME=`/bin/hostname` //使用命令获取主机名


set -m


if [ -f /etc/sysconfig/network ]; then


. /etc/sysconfig/network


fi //若存在该脚本且为规则文件则运行之


if [ -z “$HOSTNAME” -o “$HOSTNAME” = “(none)” ]; then


HOSTNAME=localhost


fi


#若HOSTNAME变量字符长度0或为(none)则设定为localhost


if [ ! -e /proc/mounts ]; then


mount -n -t proc /proc /proc


mount -n -t sysfs /sys /sys >/dev/null 2>&1


fi


#若/proc/mounts 存在,则挂载proc目录 与sysfs目录(不写入/etc/mtab)


if [ ! -d /proc/bus/usb ]; then


modprobe usbcore >/dev/null 2>&1 && mount -n -t usbfs /proc/bus/usb /proc/bus/usb


else


mount -n -t usbfs /proc/bus/usb /proc/bus/usb


fi


#若/proc/bus/usb目录存在,加载usbcore模块,并且以usbfs挂载/proc/bus/usb


#否在直接挂载以上目录


. /etc/init.d/functions //执行函数库脚本


PLYMOUTH=


[ -x /usr/bin/plymouth ] && PLYMOUTH=yes


#如果plymouth存在且有执行权限,设定PLYMOUTH变量


接下来是检查和修改Selinux状态,www.britepic.org以及设定selinux的几个函数


##由于鸡与蛋的问题,该函数需要执行两次


init_crypto()函数:


#接下来是按照系统的版本打印一个启动的欢迎信息:


# Print a text banner.


echo -en $””t”tWelcome to “


…………


…………


# Fix console loglevel


if [ -n “$LOGLEVEL” ]; then


/bin/dmesg -n $LOGLEVEL


fi


#打印相应日志级别的启动信息


cmdline=$(cat /proc/cmdline) #获取一行信息(来自GRUB文件menu.lst)


# Initialize hardware 初始化硬件


if [ -f /proc/sys/kernel/modprobe ]; then


if ! strstr “$cmdline” nomodules && [ -f /proc/modules ] ; then


sysctl -w kernel.modprobe=”/sbin/modprobe” >/dev/null 2>&1


else


# We used to set this to NULL, but that causes ‘failed to exec’ messages”


sysctl -w kernel.modprobe=”/bin/true” >/dev/null 2>&1


fi


fi


touch /dev/.in_sysinit >/dev/null 2>&1


#若cmdline变量里面没有包含”nomodules”字符串,则设置内核参数指定modporbe的位置,否则设置为true程序。


# Set default affinity


if [ -x /bin/taskset ]; then


…………


…………


#设置默认亲缘关系? 返回一个数值告知使用了哪个CPU?


# Load other user-defined modules


for file in /etc/sysconfig/modules/*.modules ; do


[ -x $file ] && $file


done


#执行用户自定义模块配置文件


Load modules (for backward compatibility with VARs)


if [ -f /etc/rc.modules ]; then


/etc/rc.modules


fi


mount -n /dev/pts >/dev/null 2>&1


[ -n “$SELINUX_STATE” ] && restorecon /dev/pts >/dev/null 2>&1


#加载模块?


# Configure kernel parameters


update_boot_stage Rckernelparam //通知图形启动现在的启动状态


sysctl -e -p /etc/sysctl.conf >/dev/null 2>&1


#设定内核参数


# Set the hostname.


update_boot_stage RChostname


action $”Setting hostname ${HOSTNAME}: ” hostname ${HOSTNAME}


#设定内核参数


{ rmmod scsi_wait_scan ; modprobe scsi_wait_scan ; rmmod scsi_wait_scan ; } >/dev/null 2>&1 //设定等待存储设备


# Start any MD RAID arrays that haven’t been started yet


[ -f /etc/mdadm.conf -a -x /sbin/mdadm ] && /sbin/mdadm -As –auto=yes –run


#启动尚未启动的RAID设备


# Device mapper & related initialization


if ! __fgrep “device-mapper” /proc/devices >/dev/null 2>&1 ; then


…………


…………


#设备映射以及相关设置


ipaddr=


if [ “$HOSTNAME” = “localhost” -o “$HOSTNAME” = “localhost.localdomain” ]; then


ipaddr=$(ip addr show to 0.0.0.0/0 scope global | awk ‘/[[:space:]]inet / { print gensub(“/.*”,””,”g”,$2) }’)


for ip in $ipaddr ; do


HOSTNAME=


eval $(ipcalc -h $ipaddr 2>/dev/null)


[ -n “$HOSTNAME” ] && { hostname ${HOSTNAME} ; break; }


done


fi


从设置好的IP地址获取主机名,从DHCP服务器获取。


接下来的一大段代码用来以只读方式挂载根目录,以及SELinux需要的一些操作:relable等,挂载本地文件系统,更新quota,初始化伪随机数生成器。


# Configure machine if necessary.


if [ -f /.unconfigured ]; then


if [ -x /usr/bin/rhgb-client ] && /usr/bin/rhgb-client –ping ; then


………………


………………


………………


#如果根目录下存在那个文件的话,把一些系统设置全部重设(管理员密码,网络设定,键盘布局等……)


# Configure machine if necessary.


if [ -f /.unconfigured ]; then


#读取系统设定重新设定主机名。


# Reread in network configuration data.


if [ -f /etc/sysconfig/network ]; then


. /etc/sysconfig/network


…………


#清理根目录下的一些文件,清理/var目录


# Clean up /var.


rm -rf /var/lock/cvs/* /var/run/screen/*


#清理/tmp目录,把一些锁文件和其它的一些临时文件删除。


[ -n “$SELINUX_STATE” ] && restorecon /tmp


…………


#创建ICE目录。


# Make ICE directory


mkdir -m 1777 -p /tmp/.ICE-unix >/dev/null 2>&1


#启动交换分区,从fstab读取


# Start up swapping.


update_boot_stage Rcswap


#创建系统崩溃标记,创建文件使下次启动自动检查文件系统。


# create the crash indicator flag to warn on crashes, offer fsck with timeout


touch /.autofsck &> /dev/null


#让rhgb知道脚本已经执行完成,根已经读写挂载。


# Let rhgb know that we’re leaving rc.sysinit


if [ -x /usr/bin/rhgb-client ] && /usr/bin/rhgb-client –ping ; then


/usr/bin/rhgb-client –sysinit


fi


写好了一会了,一直没时间深入查看,有很多地方还是理解的不是很透彻。望批评指正!

赞(0) 打赏
转载请注明出处:服务器评测 » Fedora 下的/etc/rc.d/rc.sysinit 启动脚本注释
分享到: 更多 (0)

听说打赏我的人,都进福布斯排行榜啦!

支付宝扫一扫打赏

微信扫一扫打赏