ד.1. /etc/rc.d/init.d/rc
השמיים rc script הוא הסקריפט הראשון שנקרא על ידי init ומתחיל את תהליך האתחול.
#! / bin / bash
############################################## #####################
# התחל rc
#
# תיאור: סקריפט בקרת רמת ריצה ראשי
#
# מחברים : ג'רארד ביקמנס - [מוגן בדוא"ל]
# : DJ לוקאס - [מוגן בדוא"ל]
# עדכון: ברוס דאבס - [מוגן בדוא"ל]
#
# גרסה: LFS 7.0
#
############################################## #####################
. /lib/lsb/init-functions print_error_msg()
{
log_failure_msg
# $i מוגדר בעת קריאה
MSG="FAILURE:\n\nאתה לא אמור לקרוא את הודעת השגיאה הזו.\n\n" MSG="${MSG}זה אומר שהתרחשה שגיאה בלתי צפויה ב\n" MSG="${MSG}${ i},\n"
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
}
לָרוּץ()
{
if [-z $interactive]; לאחר מכן
${1} ${2}
להחזיר $?
fi
בעוד נכון; לַעֲשׂוֹת
קרא -p "הפעל ${1} ${2} (כן/לא/המשך)? " -n 1 runit echo
מקרה ${runit} ב-c | ג)
אינטראקטיבי =""
${i} ${2}
ret=${?} הפסקה;
;;
n | נ)
חזור 0
;;
y | י)
${i} ${2}
ret=${?} הפסקה
;;
esac נעשה
להחזיר $ret
}
# קרא כל הגדרות/עקיפות מקומיות
[ -r /etc/sysconfig/rc.site ] && מקור /etc/sysconfig/rc.site
DISTRO=${DISTRO:-"Linux From Scratch"}
DISTRO_CONTACT=${DISTRO_CONTACT:-"[מוגן בדוא"ל] (נדרש הרשמה)"} DISTRO_MINI=${DISTRO_MINI:-"LFS"}
IPROMPT=${IPROMPT:-"no"}
# 3 האותות הללו לא יגרמו לסקריפט שלנו לצאת מ-"" INT QUIT TSTP
[ "${1}" != "" ] && runlevel=${1}
if [ "${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
if [ "$runlevel" == "6" -o "$runlevel" == "0" ]; ואז IPROMPT="לא"; fi
# הערה: ב-${LOGLEVEL:-7}, זה ':' 'מקף' '7', לא מינוס 7 אם [ "$runlevel" == "S" ]; לאחר מכן
[ -r /etc/sysconfig/console ] && source /etc/sysconfig/console dmesg -n "${LOGLEVEL:-7}"
fi
if [ "${IPROMPT}" == "yes" -a "${runlevel}" == "S" ]; לאחר מכן
# האורך הכולל של מחרוזת הפתיחה של ההפצה, ללא קודי בריחה wlen=${wlen:-$(echo "Welcome to ${DISTRO}" | wc -c )} welcome_message=${welcome_message:-"ברוכים הבאים ל-${INFO }${DISTRO}${NORMAL}"}
# האורך הכולל של המחרוזת האינטראקטיבית, ללא קודי בריחה ilen=${ilen:-$(echo "Press 'I' to enter startup interactive" | wc -c )}
i_message=${i_message:-"הקש '${FAILURE}I${NORMAL}' כדי להיכנס להפעלה אינטראקטיבית"}
# dcol ו-icol הם רווחים לפני ההודעה כדי למרכז את ההודעה
# על המסך. itime הוא משך זמן ההמתנה עד שהמשתמש ילחץ על מקש wcol=$((( ${COLUMNS} - ${wlen} ) / 2 ))
icol=$((( ${COLUMNS} - ${ilen} ) / 2 )) itime=${itime:-"3"}
echo -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
# נסה להפסיק את כל השירותים שהתחילו ברמת הריצה הקודמת,
# ונהרג ברמת הריצה הזו
if [ "${previous}" != "N" ]; לאחר מכן
עבור i ב-$(ls -v /etc/rc.d/rc${runlevel}.d/K* 2> /dev/null) do
check_script_status
if [ "${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
if [ "${runlevel}" != "0" -a "${runlevel}" != "6" ]; לאחר מכן
אם [ ! -f ${prev_start} -a ! -f ${sysinit_start} ]; אז MSG="אזהרה:\n\n${i} לא יכול להיות "
MSG="${MSG}הופעל מכיוון שהוא לא " MSG="${MSG}לא הופעל ברמת הריצה הקודמת של " MSG="${MSG}(${previous})." log_warning_msg "$MSG"
להמשיך
fi
fi
הפעל ${i} stop error_value=${?}
if [ "${error_value}" != "0" ]; ואז print_error_msg; פי בוצע
fi
if [ "${previous}" == "N" ]; לאחר מכן ייצא IN_BOOT=1; fi
if [ "$runlevel" == "6" -a -n "${FASTBOOT}" ]; לאחר מכן גע ב-/fastboot
fi
# הפעל את כל הפונקציות ברמת הריצה הזו
עבור i ב-$( ls -v /etc/rc.d/rc${runlevel}.d/S* 2> /dev/null) do
if [ "${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]$suffix
[ -f ${prev_start} -a! -f ${stop} ] && המשך
fi
check_script_status
if [ "${SCRIPT_STAT}" == "1" ]; ואז SCRIPT_STAT="0"
להמשיך
fi
מקרה ${runlevel} ב-0|6)
להפעיל ${i} עצירה
;;
*)
esac
הפעל את ${i} התחל
;;
error_value=${?}
if [ "${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
# העתק את יומן האתחול באתחול ראשוני בלבד
if [ "${previous}" == "N" -a "${runlevel}" != "S" ]; ואז cat $BOOTLOG >> /var/log/boot.log
# סמן את סוף האתחול
echo "--------" >> /var/log/boot.log
# הסר את הקובץ הזמני rm -f $BOOTLOG 2> /dev/null
fi
# סוף rc
if [ "${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
# העתק את יומן האתחול באתחול ראשוני בלבד
if [ "${previous}" == "N" -a "${runlevel}" != "S" ]; ואז cat $BOOTLOG >> /var/log/boot.log
# סמן את סוף האתחול
echo "--------" >> /var/log/boot.log
# הסר את הקובץ הזמני rm -f $BOOTLOG 2> /dev/null
fi
# סוף rc
: ג'רארד ביקמנס - [מוגן בדוא"ל]
: DJ לוקאס - [מוגן בדוא"ל]
: ברוס דאבס - [מוגן בדוא"ל]
: ג'רארד ביקמנס - [מוגן בדוא"ל]
: DJ לוקאס - [מוגן בדוא"ל]
: ברוס דאבס - [מוגן בדוא"ל]
: LFS 7.0
: עם קוד המבוסס על ה-simpleinit-msb של Matthias Benkmann http://winterdrache.de/linux/newboot/index.html
הקובץ צריך להיות ממוקם ב-/lib/lsb
: LFS 7.0
: עם קוד המבוסס על ה-simpleinit-msb של Matthias Benkmann http://winterdrache.de/linux/newboot/index.html
הקובץ צריך להיות ממוקם ב-/lib/lsb