Skip to Content

6 Init

6 Init (إختصار Initialize و تعنى االإبتداء)

سنتكلم فقط عن طريقة النظام V من الInit التى تستخدمها معظم نظم لينوكس و يوجد بدائل . فى الحقيقة يمكنك وضع أى برنامج تحب فى (sbin/init/) و ستقوم نواة النظام بتشغيله عندما تنتهى من التحميل.

إنها وظيفة ال init أن يشغل كل شىء بطريقة سليمة . إنه يتحقق من أن ملفات النظام مضبوطة و يقوم بتحميلها . إنها تبدأ (العفاريت) (Deamons) و هى برامج الخدمات الخلفية لتسجيل رسائل النظام , تقوم بعمل الشبكات تخدم صفحات الويب , تستمع للفأرة و هكذا . و هى أيضا تبدأ عمليات برنامج getty التى تضع محثات تسجيل الدخول على طرفياتك الإفتراضية.

توجد قصة كاملة و معقدة حول تبديل مراحل التشغيل و لكن سأتجاوز ذلك تقريبا و أتكلم فقط عن بدء تشغيل النظام.

ال init يقرأ ملف إسمه /etc/inittab , و الذى يخبره ماذا يفعل . عادة أول شىء يقوم به هو تشغيل سكريبت بدء. البرنامج الذى يقوم بتشغيل هذا السكريبت هو برنامج bash ,و نفس البرنامج الذى يعطيك محث الأوامر . على نظم ديبيان , سكريبت البدء هو /etc/init.d/rcS و على الريد هات هو /etc/rc.d/rc.sysinit هذا هو المكان حيث يتم التحقق من و تحميل ملفات , و ضبط الساعة و إتاحة تشغيل الذاكرة الإفتراضية , و تعيين اسم الجهاز (hostname) و ما إلا ذلك .

بعد ذلك يبدأ تحميل سكريبت آخر لكى يبدأ مستوى التشغيل التلقائى. وهذا يعنى عملية تحميل مجموعة من الأنظمة الفرعية. وتوجد مجموعة من المجلدات وهى /etc/rc.d/rc0.d, /etc/rc.d/rc1.d, ..., /etc/rc.d/rc6.dفى نظام الريدهات أو /etc/rc0.d, /etc/rc1.d, ..., /etc/rc6.d فى نظام الديبيان والتى نناتظر مستويات التشغيل المختلفة. لو كنا سنستخدم مستوى التشغيل الثالث على نظام ديبيان سيقوم السكريبت بتشغيل السكريبتات الموجوده فى /etc/rc3.d التى بتدأ بحرف الـ S كأول حرف من كلمة Start. وهذه السكريبتات هى مجرد روابط للسكريبتات الموجودة فى مجلد آخر يسمى غالبا init.d.

وبذلك قام init بتحميل مستوى للتشغيل المطلوب، ويبحث فى مجلد عن السكريبتات التى تبدأ بحرف الـ S. قد تجد S10syslog أولاً. وهذه الأرقام تخبر سكريبت مستوى التشغيل بأى ترتيب يبدأ بتحميلهم. وفى حالة S10syslog يتم تشغيله أولاً نظرا لعدم وجود سكريبتات تبدأ بـ S00 ... S09. ولكن S10syslog هو فى الحقيقة رابط لـ /etc/init.d/syslog: وهو سكريبت لبداية وإيقاف مسجل النظام System logger. ونظراً لأن الرابط يبدأ بالحرف S فإن سكريبت مستوى التشغيل يقوم بتشغيل سكريبت syslog بإعطايه متغير "start" وتوجد روابط مناظرة تبدأ بالحرف K كأول حرف من كلمة Kill والذى يحدد ما يتم إغلاقه وبأى ترتيب عند ترك مستوى التشغيل.

ولتغيير ما تبدأه الأنظمة الفرعية تلقائيا، يجب عليك ضبط هذه الروابط مجلد rcN.d. حيث تعبر الـ N عن رقم مستوى التشغيل المعد تلقائيا فى الـ inittab الخاص بك.

وأخر ما يقوم به init هو بداية بعض برامج getty's. ويطلق عليهم "respawned"، وتعنى أنه إذا توقفت هذه البرامج يقوم الـ init بإعادة تشغيلها مرة أخرى. أغلب الإصدارات تكون لديها بست طرفيات افتراضية. ولكنك قد تحتاج لأقل من هذاالعدد لكى توفر من استخدامك للذاكرة، وقد تحتاج أكثر من هذا العدد لترك العديد من الأشياء تعمل في نفس الوقت وتنتقل بينها عندما تحتاج أى منها. قد تحتاج أيضاً إلى تشغيل تشغيل برنامج getty للحصول على شاشة نصوص طرفية، أو شاشة اتصال بجهازك عن طريق المودم. فى هذه الحالة ستحتاج إلى إعادة تحرير ملف inittab.

6.1 التنسيق

يعد /etc/initiab هو ملف التنسيق للمستوى الأعلى من init. ومجلدات rcN.d، حيث N=0,1,...,6 تحدد أى من ملفات النظام الفراعية يتم تحميلها. وفى مكان ما فى السكريبتات التى يتم تشغيلها بواسطة init، يوجد أمر mount -a. وهذا يعنى تحميل ملفات النظام التى من المفترض أن يتم تحميلها. لو أردت تغيير ما يتم تحميله وأين عند بدء التشغيل فهذا هو الملف الذي تحتاج إلى إعادة تحريره . و هناك صفحة لدليل المستخدم ل fstab .

6.2 تمارين

حاول إيجاد مجلد rcN.d لمستوى التشغيل التلقائى لجهازك و استخدم أمر ls -l لترى ما تشير إليه الملفات غير عدد ال getty التى يتم تشغيلها على جهازك قم بإزالة أى نظم فرعية لا تحتاجها من مستوى التشغيل التلقائى الخاص بك

قم بتجهيز قرص مرن بإستخدام lilo , و نواة و برنامج موصول بشكل ثابت من نوع hello program يسمى /sbin/init و راقبه يحمل ةو يقول hello

راقب جيدا بينما يقوم جهازك ببدء التشغيل و قم بتسجيل بعض الملاحظات عما يحدث أو قم بطباعة جزء من رسائل log/var/log/messages الخاصة بجهازك من وقت بداية التشغيل . ثم بداية من inittab يتحرك خلال كل السكريبتات و يلاحظ كل جزء من الكود يؤدى اى وظيفة . كما يمكنك وضع رسائل بدء تشغيل إضافية مثل echo "Hello, I am rc.sysinit"

هذا تدريب جيد فى تعلم كتابة السكريبتات ل bash shell . بعض السكريبتات معقدة بعض الشىء . فيستحسن الإحتفاظ بمرجع جيد لل bash فى متناول يدك.

6.3 المزيد من المعلومات

يوجد دليل المستخدم (man page) ل init و fstab . اكتب inittab man إلى صدفة (shell) حتى تراها.



Dr. Radut | book