د 1. /etc/rc.d/init.d/rc
إنّ كافة أنواع عهود الـ rc البرنامج النصي هو أول نص برمجي يتم استدعاؤه بواسطة init ويبدأ عملية التمهيد.

#! / بن / باش
################################################## #######################
# ابدأ RC
#
# الوصف: البرنامج النصي الرئيسي للتحكم في مستوى التشغيل
#
# المؤلف : جيرارد بيكمانز - [البريد الإلكتروني محمي]
# : دي جي لوكاس - [البريد الإلكتروني محمي]
# تحديث : بروس دوبس - [البريد الإلكتروني محمي]
#
# الإصدار: LFS 7.0
#
################################################## #######################
. / lib / lsb / init-function print_error_msg ()
{
log_failure_msg
# $ i تم ضبطه عند استدعائه
MSG = "فشل: \ 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 $ Interactive] ؛ من ثم
$ {1} $ {2}
إرجاع $؟
fi
احيانا صحيح؛ فعل
read -p "تشغيل $ {1} $ {2} (نعم / لا / متابعة)؟" -n 1 runit echo
حالة $ {runit} في c | ج)
تفاعلي = ""
$ {i} $ {2}
ret = $ {؟} break؛
;;
ن | ن)
عودة 0
;;
ذ | ص)
$ {i} $ {2}
ret = $ {؟} فاصل
;;
esac انتهى
العودة $ ret
}
# اقرأ أي إعدادات / تجاوزات محلية
[-r /etc/sysconfig/rc.site] && source /etc/sysconfig/rc.site
DISTRO = $ {DISTRO: - "Linux From Scratch"}
DISTRO_CONTACT=${DISTRO_CONTACT:-"[البريد الإلكتروني محمي] (التسجيل مطلوب)"} DISTRO_MINI=${DISTRO_MINI:-"LFS"}
IPROMPT = $ {IPROMPT: - "لا"}
# لن تؤدي هذه الإشارات الثلاثة إلى خروج البرنامج النصي من التراكب INT QUIT TSTP
["$ {1}"! = ""] && مستوى التشغيل = $ {1}
إذا ["$ {runlevel}" == ""] ؛ ثم صدى "Usage: $ {0} "> & 2 الخروج 1
fi

السابق = $ {PREVLEVEL}
["$ {previous}" == ""] && 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 = "لا" ؛ فاي
# ملاحظة: في $ {LOGLEVEL: -7} ، يكون ':' 'dash' '7' ، وليس ناقص 7 إذا ["$ runlevel" == "S"]؛ من ثم
[-r / etc / sysconfig / console] && source / etc / sysconfig / console dmesg -n "$ {LOGLEVEL: -7}"
fi
إذا ["$ {IPROMPT}" == "نعم" -a "$ {runlevel}" == "S"] ؛ من ثم
# الطول الإجمالي لسلسلة الترحيب في التوزيعة ، بدون رموز الهروب. } $ {DISTRO} $ {عادي} "}
# الطول الإجمالي للسلسلة التفاعلية ، بدون رموز الهروب ilen = $ {ilen: - $ (صدى "اضغط على" I "للدخول إلى بدء التشغيل التفاعلي" | 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 Interactive 2> & 1> / dev / null
fi
# اجعلها صغيرة
["$ {Interactive}" == "I"] && Interactive = "i" ["$ {Interactive}"! = "i"] && Interactive = ""
# اقرأ ملف الحالة إذا كان موجودًا من مستوى التشغيل S.
[-r / var / run / dynamic] && source / var / run / التفاعلي
# محاولة إيقاف جميع الخدمات التي بدأها مستوى التشغيل السابق ،
# وقتل في هذا المستوى
إذا ["$ {previous}"! = "N"] ؛ من ثم
بالنسبة لـ i في $ (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 = "تحذير: \ n \ n $ {i} لا يمكن أن يكون"
MSG = "تم تنفيذ $ {MSG} لأنه لم يكن" MSG = "$ {MSG} لم يبدأ في المستوى السابق" MSG = "$ {MSG} ($ {previous})." log_warning_msg "$ MSG"
استمر
fi
fi
تشغيل $ {i} stop error_value = $ {؟}
إذا ["$ {error_value}"! = "0"]؛ ثم print_error_msg ؛ انتهى فاي
fi
إذا ["$ {previous}" == "N"] ؛ ثم تصدير IN_BOOT = 1 ؛ فاي
إذا ["$ runlevel" == "6" -a -n "$ {FASTBOOT}"] ؛ ثم المس / fastboot
fi
# ابدأ جميع الوظائف في مستوى التشغيل هذا
بالنسبة لـ i في $ (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] اللاحقة $ 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} stop
;;
*)
ESAC
تشغيل $ {i} start
;;
error_value = $ {؟}
إذا ["$ {error_value}"! = "0"]؛ ثم print_error_msg ؛ انتهى فاي
# تخزين المتغير التفاعلي عند التبديل من مستوى التشغيل S وإزالته إن لم يكن ["$ {runlevel}" == "S" -a "$ {Interactive}" == "i"]؛ من ثم
صدى "Interactive = \" i \ ""> / var / run / Interactive
آخر
rm -f / var / run / Interactive 2> / dev / null
fi
# انسخ سجل التمهيد عند التمهيد الأولي فقط
إذا ["$ {previous}" == "N" -a "$ {runlevel}"! = "S"]؛ ثم القط $ BOOTLOG >> /var/log/boot.log
# بمناسبة نهاية التمهيد
صدى "--------" >> /var/log/boot.log
# قم بإزالة الملف المؤقت rm -f $ BOOTLOG 2> / dev / null
fi
# نهاية RC
إذا ["$ {error_value}"! = "0"]؛ ثم print_error_msg ؛ انتهى فاي
# تخزين المتغير التفاعلي عند التبديل من مستوى التشغيل S وإزالته إن لم يكن ["$ {runlevel}" == "S" -a "$ {Interactive}" == "i"]؛ من ثم
صدى "Interactive = \" i \ ""> / var / run / Interactive
آخر
rm -f / var / run / Interactive 2> / dev / null
fi
# انسخ سجل التمهيد عند التمهيد الأولي فقط
إذا ["$ {previous}" == "N" -a "$ {runlevel}"! = "S"]؛ ثم القط $ BOOTLOG >> /var/log/boot.log
# بمناسبة نهاية التمهيد
صدى "--------" >> /var/log/boot.log
# قم بإزالة الملف المؤقت rm -f $ BOOTLOG 2> / dev / null
fi
# نهاية RC


: جيرارد بيكمانز - [البريد الإلكتروني محمي]
: دي جي لوكاس - [البريد الإلكتروني محمي]
: بروس دوبس - [البريد الإلكتروني محمي]
: جيرارد بيكمانز - [البريد الإلكتروني محمي]
: دي جي لوكاس - [البريد الإلكتروني محمي]
: بروس دوبس - [البريد الإلكتروني محمي]
: لي اف اس 7.0
: مع رمز يعتمد على simpleinit-msb لماتياس بنكمان http://winterdrache.de/linux/newboot/index.html
يجب أن يكون الملف موجودًا في / lib / lsb
: لي اف اس 7.0
: مع رمز يعتمد على simpleinit-msb لماتياس بنكمان http://winterdrache.de/linux/newboot/index.html
يجب أن يكون الملف موجودًا في / lib / lsb
توثيق