<ก่อนหน้านี้ | Contents | ถัดไป>
ง.1. /etc/rc.d/init.d/rc
การขอ rc สคริปต์เป็นสคริปต์แรกที่เรียกโดย init และเริ่มกระบวนการบูต
#! / bin / ทุบตี
#################################################### ############################
#เริ่มต้นrc
#
# คำอธิบาย : สคริปต์ควบคุมระดับการรันหลัก
#
# ผู้เขียน : เจอราร์ด บีคแมนส์ - [ป้องกันอีเมล]
# : ดีเจ ลูคัส - [ป้องกันอีเมล]
# อัปเดต: Bruce Dubbs - [ป้องกันอีเมล]
#
# เวอร์ชัน : LFS 7.0
#
#################################################### ############################
. /lib/lsb/init-ฟังก์ชั่น print_error_msg()
{
log_failure_msg
# $i ถูกตั้งค่าเมื่อถูกเรียก
MSG="FAILURE:\n\nคุณไม่ควรอ่านข้อความแสดงข้อผิดพลาดนี้\n\n" MSG="${MSG}หมายความว่าเกิดข้อผิดพลาดที่ไม่คาดคิดใน\n" MSG="${MSG}${ ใน"
MSG="${MSG}ซึ่งออกโดยมีค่าส่งคืนเป็น ${error_value}.\n"
MSG="${MSG}หากคุณสามารถติดตามข้อผิดพลาดนี้จนถึงจุดบกพร่องใน\n" MSG="${MSG}ไฟล์ที่จัดทำโดยหนังสือ ${DISTRO_MINI}\n" MSG=" ${MSG}กรุณาแจ้งให้เราทราบที่ ${DISTRO_CONTACT}.\n" log_failure_msg "${MSG}"
log_info_msg "กด Enter เพื่อดำเนินการต่อ..." wait_for_user
}
check_script_status()
{
# $i ถูกตั้งค่าเมื่อถูกเรียกถ้า [ ! -f ${i} ]; แล้ว
log_warning_msg "${i} ไม่ใช่ลิงก์สัญลักษณ์ที่ถูกต้อง" SCRIPT_STAT="1"
fi
ถ้า [ ! -x ${i} ]; แล้ว
log_warning_msg "${i} ไม่สามารถเรียกใช้งานได้ กำลังข้ามไป" SCRIPT_STAT="1"
fi
}
วิ่ง()
{
ถ้า [ -z $โต้ตอบ ]; แล้ว
${1} ${2}
คืน $?
fi
ในขณะที่จริง; ทำ
read -p "เรียกใช้ ${1} ${2} (ใช่/ไม่ใช่/ดำเนินการต่อ)? " -n 1 runit echo
กรณี ${runit} ใน c | NS)
โต้ตอบ=""
${i} ${2}
ret=${?} แตก;
;;
n | NS)
ส่งคืน 0
;;
y | จ)
${i} ${2}
ret=${?} แตก
;;
เสร็จแล้ว
คืนค่า $ret
}
# อ่านการตั้งค่าท้องถิ่น / แทนที่
[ -r /etc/sysconfig/rc.site ] && แหล่งที่มา /etc/sysconfig/rc.site
DISTRO=${DISTRO:-"Linux ตั้งแต่เริ่มต้น"}
DISTRO_CONTACT=${DISTRO_CONTACT:-"[ป้องกันอีเมล] (ต้องลงทะเบียน)"} DISTRO_MINI=${DISTRO_MINI:-"LFS"}
IPROMPT=${IPROMPT:-"ไม่"}
# 3 สัญญาณนี้จะไม่ทำให้สคริปต์ของเราออกจากกับดัก "" INT QUIT TSTP
[ "${1}" != "" ] && runlevel=${1}
ถ้า [ "${runlevel}" == "" ]; แล้วก้อง "การใช้งาน: ${0} " >&2 ทางออก 1
fi
ก่อนหน้า=${PREVLEVEL}
[ "${previous}" == "" ] && ก่อนหน้า=N
ถ้า [ ! -d /etc/rc.d/rc${runlevel}.d ]; แล้ว
log_info_msg "/etc/rc.d/rc${runlevel}.d ไม่มีอยู่\n" ทางออก 1
fi
ถ้า [ "$runlevel" == "6" -o "$runlevel" == "0" ]; แล้ว IPROMPT="ไม่"; fi
# หมายเหตุ: ใน ${LOGLEVEL:-7} มันคือ ':' 'dash' '7' ไม่ใช่ลบ 7 ถ้า [ "$runlevel" == "S" ]; แล้ว
[ -r /etc/sysconfig/console ] && แหล่งที่มา /etc/sysconfig/console dmesg -n "${LOGLEVEL:-7}"
fi
ถ้า [ "${IPROMPT}" == "ใช่" -a "${runlevel}" == "S" ]; แล้ว
# ความยาวทั้งหมดของสตริงต้อนรับ distro โดยไม่มีรหัส Escape wlen=${wlen:-$(echo "Welcome to ${DISTRO}" | wc -c )} welcome_message=${welcome_message:-"ยินดีต้อนรับสู่ ${INFO }${DISTRO}${ปกติ}"}
# ความยาวทั้งหมดของสตริงแบบโต้ตอบ โดยไม่มี Escape Codes ilen=${ilen:-$(echo "Press 'I' to enter interactive startup" | wc -c )}
i_message=${i_message:-"กด '${FAILURE}I${NORMAL}' เพื่อเข้าสู่การเริ่มต้นแบบโต้ตอบ"}
# dcol และ icol เป็นช่องว่างหน้าข้อความเพื่อจัดข้อความให้อยู่ตรงกลาง
# บนหน้าจอ. itime คือระยะเวลารอให้ผู้ใช้กดปุ่ม wcol=$(( ( ${COLUMNS} - ${wlen} ) / 2 ))
icol=$(( ( ${COLUMNS} - ${ilen} ) / 2 )) itime=${itime:-"3"}
เสียงสะท้อน -e "\n\n"
echo -e "\\033[${wcol}G${welcome_message}" echo -e "\\033[${icol}G${i_message}${NORMAL}" echo ""
อ่าน -t "${itime}" -n 1 โต้ตอบ 2>&1 > /dev/null
fi
# ทำตัวพิมพ์เล็ก
[ "${interactive}" == "I" ] && interactive="i" [ "${interactive}" != "i" ] && interactive=""
# อ่านไฟล์สถานะหากมีจาก runlevel S
[ -r /var/run/interactive ] && แหล่งที่มา /var/run/interactive
# พยายามหยุดบริการทั้งหมดที่เริ่มต้นโดย runlevel ก่อนหน้า
#และเสียชีวิตในการรันเลเวลนี้
ถ้า [ "${previous}" != "N" ]; แล้ว
สำหรับฉันใน $(ls -v /etc/rc.d/rc${runlevel}.d/K* 2> /dev/null) ทำ
check_script_status
ถ้า [ "${SCRIPT_STAT}" == "1" ]; จากนั้น SCRIPT_STAT="0"
ต่อ
fi
suffix=${i#/etc/rc.d/rc$runlevel.d/K[0-9][0-9]} prev_start=/etc/rc.d/rc$previous.d/S[0-9][0-9]$suffix sysinit_start=/etc/rc.d/rcS.d/S[0-9][0-9]$suffix
ถ้า [ "${runlevel}" != "0" -a "${runlevel}" != "6" ]; แล้ว
ถ้า [ ! -f ${prev_start} -a ! -f ${sysinit_start} ]; ดังนั้น MSG="WARNING:\n\n${i} can't be "
MSG="${MSG}ดำเนินการเพราะไม่ใช่ " MSG="${MSG}ไม่ได้เริ่มใน " MSG="${MSG}runlevel (${previous}) ก่อนหน้านี้" log_warning_msg "$MSG"
ต่อ
fi
fi
เรียกใช้ ${i} หยุด error_value=${?}
ถ้า [ "${error_value}" != "0" ]; จากนั้น print_error_msg; เสร็จแล้ว
fi
ถ้า [ "${previous}" == "N" ]; จากนั้นส่งออก IN_BOOT=1; fi
ถ้า [ "$runlevel" == "6" -a -n "${FASTBOOT}" ]; จากนั้นแตะ /fastboot
fi
# เริ่มฟังก์ชั่นทั้งหมดใน runlevel นี้
สำหรับฉันใน $( ls -v /etc/rc.d/rc${runlevel}.d/S* 2> /dev/null) ทำ
ถ้า [ "${previous}" != "N" ]; แล้วต่อท้าย=${i#/etc/rc.d/rc$runlevel.d/S[0-9][0-9]} stop=/etc/rc.d/rc$runlevel.d/K[0 -9][0-9]$suffix prev_start=/etc/rc.d/rc$previous.d/S[0-9][0-9]$ต่อท้าย
[ -f ${prev_start} -a ! -f ${stop} ] && ดำเนินการต่อ
fi
check_script_status
ถ้า [ "${SCRIPT_STAT}" == "1" ]; จากนั้น SCRIPT_STAT="0"
ต่อ
fi
กรณี ${runlevel} ใน 0|6)
เรียกใช้ ${i} หยุด
;;
*)
ว่า C
เรียกใช้ ${i} start
;;
error_value=${?}
ถ้า [ "${error_value}" != "0" ]; จากนั้น print_error_msg; เสร็จแล้ว
# จัดเก็บตัวแปรแบบโต้ตอบบนสวิตช์จาก runlevel S และลบถ้าไม่ใช่ถ้า [ "${runlevel}" == "S" -a "${interactive}" == "i" ]; แล้ว
echo "interactive=\"i\"" > /var/run/interactive
อื่น
rm -f /var/run/interactive 2> /dev/null
fi
# คัดลอกบันทึกการบูตในการบูตครั้งแรกเท่านั้น
ถ้า [ "${previous}" == "N" -a "${runlevel}" != "S" ]; แล้วก็ cat $BOOTLOG >> /var/log/boot.log
#ทำเครื่องหมายจุดสิ้นสุดของการบูต
เสียงสะท้อน "-------" >> /var/log/boot.log
# ลบไฟล์ชั่วคราว rm -f $BOOTLOG 2> /dev/null
fi
#จบrc
ถ้า [ "${error_value}" != "0" ]; จากนั้น print_error_msg; เสร็จแล้ว
# จัดเก็บตัวแปรแบบโต้ตอบบนสวิตช์จาก runlevel S และลบถ้าไม่ใช่ถ้า [ "${runlevel}" == "S" -a "${interactive}" == "i" ]; แล้ว
echo "interactive=\"i\"" > /var/run/interactive
อื่น
rm -f /var/run/interactive 2> /dev/null
fi
# คัดลอกบันทึกการบูตในการบูตครั้งแรกเท่านั้น
ถ้า [ "${previous}" == "N" -a "${runlevel}" != "S" ]; แล้วก็ cat $BOOTLOG >> /var/log/boot.log
#ทำเครื่องหมายจุดสิ้นสุดของการบูต
เสียงสะท้อน "-------" >> /var/log/boot.log
# ลบไฟล์ชั่วคราว rm -f $BOOTLOG 2> /dev/null
fi
#จบrc
: เจอราร์ด บีคแมนส์ - [ป้องกันอีเมล]
: ดีเจ ลูคัส - [ป้องกันอีเมล]
: บรูซ ดับบ์ส - [ป้องกันอีเมล]
: เจอราร์ด บีคแมนส์ - [ป้องกันอีเมล]
: ดีเจ ลูคัส - [ป้องกันอีเมล]
: บรูซ ดับบ์ส - [ป้องกันอีเมล]
: แอลเอฟเอส 7.0
: ด้วยรหัสตาม simpleinit-msb ของ Matthias Benkmann http://winterdrache.de/linux/newboot/index.html
ไฟล์ควรอยู่ใน /lib/lsb
: แอลเอฟเอส 7.0
: ด้วยรหัสตาม simpleinit-msb ของ Matthias Benkmann http://winterdrache.de/linux/newboot/index.html
ไฟล์ควรอยู่ใน /lib/lsb