歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux教程 >> Fedora 下的/etc/rc.d/rc.sysinit 啟動腳本注釋

Fedora 下的/etc/rc.d/rc.sysinit 啟動腳本注釋

日期:2017/2/28 16:43:49   编辑:Linux教程

/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

寫好了一會了,一直沒時間深入查看,有很多地方還是理解的不是很透徹。望批評指正!

Copyright © Linux教程網 All Rights Reserved