منهج نواة تقنية الجلسة الثانية عشرة

من ويكي أضِف
مراجعة 12:36، 23 يونيو 2021 بواسطة Emadsaleh (نقاش | مساهمات) (←‏طريقة التقديم)
(فرق) → مراجعة أقدم | المراجعة الحالية (فرق) | مراجعة أحدث ← (فرق)
اذهب إلى التنقل اذهب إلى البحث

الهدف من الجلسة

  • معرفة مراحل إقلاع النظام ونظم التهيئة المختلفة
  • التعرف على الطرق المختلفة لإدارة الخدمات

محتوى الجلسة

  • عملية التمهيد من محمل الإقلاع إلى تهيئة النظام
  • أنواع نظام التهيئة (INIT ، systemd)
  • فهم مستويات التشغيل ملف
  • تهيئة النظام الرئيسي (inittab)
  • سكريبتات التهيئة (//etc//rc.d/init.d)
  • اعداد مستوى التشغيل (Sxxservice ، Kxxservice)
  • تحليل قصور INIT
  • تقديم كيفية تعامل systemd مع أوجه القصور في INIT
  • مقدمة لملفات الوحدة (unit files)systemd
  • تقديم الأنواع الرئيسية لملف الوحدة systemd (الهدف ، الخدمة)
  • سرد ملفات الوحدة باستخدام systemctl
  • أماكن ملفات الوحدة تشغيل ، تعطيل ، بدء ، إيقاف الخدمة (أوامر)
  • خدمات الاخفاء
  • تكوين الواجهات الوهمية باستخدام systemd

طريقة التقديم

عملية الإقلاع "من محمل الإقلاع إلى تمهيد النظام"

كيف يقوم النظام بعملية الإقلاع؟

ما هي مراحل إقلاع النظام؟

(إجابة استرشادية)

تبدأ عملية الإقلاع من نظام المدخلات والمخرجات البسيط (Basic Input/Output System) وهو برنامج مثبت مسبقاً على اللوحة الأم (motherboard) من قبل الشركة المصنعة لها. يقوم هذا البرنامج بالتأكد من أن كل العتاد اللازم جاهز لعملية الإقلاع ،ثم يعطي الضوء الأخضر الى محمل الإقلاع (bootloader) ليبدأ في العمل.

بعدها يقوم محمل الإقلاع (bootloader) بالبحث والوصول الى ملف التحميل الرئيسي ((Master Boot Record (MBR) من وسيط التخزين المحمل عليه "القرص الصلب" على سبيل المثال ،الذي بدوره يقوم بإستخدام البيانات المخزنة وتشغيل نواة نظام التشغيل.

أنواع نظام التمهيد (INIT ، systemd)

ما هي أنظمة التمهيد؟

(إجابة استرشادية)

هي الأنظمة المسؤولة عن تشغيل وبدأ كل العمليات والخدمات المطلوبة لتشغيل النظام.

ما هي أنواع نظم التمهيد؟

(إجابة استرشادية)

يوجد (init) وهي المسؤولة عن إقلاع وبدأ عمليات وخدمات النظام وهي من الأنظمة القديمة نسبياً ويوجد بدائل قوية ومنها (systemd) وهي بديل قوي ؛ليس فقط لعملية الإقلاع وبدأ العمليات والخدمات ولكن أيضاً إدارتها بشكل متزامن الى جانب مميزات اخرى تتغلب فيها على كثير من منافسيها.

فهم مستويات التشغيل

ما هي مستويات التشغيل؟

(إجابة استرشادية)

هي حالة إقلاع النظام والخدمات المطلوبة للإقلاع في هذه الحالة. تكون معرَفة برقم من صفر إلى ستة ،كل منها يعبر عن حالة مخصصة وخدمات خاصة بها.

0 إيقاف تشغيل النظام
1 وضع الإنقاذ والصيانة
2 تعدد المستخدمين
3 تعدد المستخدمين مع تشغيل خدمات الشبكة
4 مستوى تشغيل محجوز لما يعرِفه المستخدم
5 تعدد المستخدمين مع تشغيل خدمات الشبكة مع واجهة رسومية
6 إعادة تشغيل النظام

ملف تمهيد النظام الرئيسي (inittab)

هل يمكن تغيير نمط التمهيد؟

وما هي الطريقة إذاً؟

(إجابة استرشادية)

أي شئ في نظام التشغيل لينكس (Linux) يمكن تخصيصه ،بما في ذلك أنماط التمهيد.

يمكن تغيير نمط التمهيد من خلال ملف التمهيد الرئيسي (inittab) ،حيث أنه يمدنا ببعض المزايا التي يمكن استغلالها

سكريبتات التمهيد (//etc//rc.d/init.d)

كيف نقوم بتغيير وتخصيص نمط التمهيد؟

(إجابة استرشادية)

يمكن تغيير نمط التمهيد عن طريق بعض سكريبتات التمهيد الموجودة تحت المسار (/etc/rc.d/init.d/)

إعداد مستوى التشغيل (Sxxservice ، Kxxservice)

كيف يمكن إعداد مستوى التشغيل؟

(إجابة استرشادية)

لكل نمط تشغيل مجموعة من الروابط لمجموعة من سكريبتات التشغيل. تبدأ أسماء هذه الروابط بالحرفي (S) او (K) متبوعة برقم ثم اسم السكريبت الدال على محتواه.

الملفات التي تبدأ بحرف الـ (S) تدل على أن الخدمة ستبدأ بالعمل بمجرد بدأ مستوى التشغيل التابعة له ،بينما الملفات التي تبدأ بالحرف (K) فهي تدل على أن الخدمة ستقف إذا كانت تعمل.

تحليل قصور INIT

ما هو القصور في (init)؟

وما هي الحلول المقترحة لحل هذا القصور؟

(إجابة استرشادية)

تبدأ العمليات في (init) بشكل تتابعي ،أي تقوم العملية بتشغيل عملية أخرى بعد بداية عملها بشكل سليم وتحميلها في الذاكرة وهذا يؤدي إلى بطء عملية الإقلاع أو عدم اكتمالها في بعض الأحيان.

والحل هو ان تعمل العمليات بشكل مستقل او تناظري لتلافي هذا البطء.

كيف تعاملت systemd مع أوجه القصور في INIT

كيف تعاملت systemd مع أوجه القصور في INIT؟

وما يميز systemd على وجه التحديد؟

(إجابة استرشادية)

لم تصمم (systemd) للقضاء على مشكلة بطئ عملية الإقلاع ولكن لتنفيذ المهام بشكل وقتي.

  • تتميز بتصميم سلس وواضح
  • أسهل في عملية الإقلاع
  • تمهيد تناظري ومتزامن
  • تحتوي على واجهة برمجية للتطبيقات قوية
  • قابلية لإزالة مكونات اختيارية
  • تنظيم المهام بإستخدام التوقيتات الزمنية
  • تسجيل الأحداث
  • حفظ السجلات في ملفات ترميز ثنائي

وغيرها من المزايا ...

مقدمة عن ملفات الوحدة (unit files systemd)

إذا كانت systemd بهذه القوة فكيف تبدأ وتعمل؟

(إجابة استرشادية)

عن طريق ما يعرف بملفات الوحدة (unit files) وهي المسؤولة عن بداية وتشغيل كل وحدة ؛والوحدة ممكن ان تكون جزء من النظام أو جزء من تطبيق ما (component or activity).

ما هي مكونات الوحدة؟

(إجابة استرشادية)

الوحدة عبارة عن ملف نصي يصف هذه الوحدة وماذا تفعل وماذا تحتاج لكي تعمل وبعد ان تعمل وبعض التفاصيل الأخرى…

man systemd.unit

الأنواع الرئيسية لملف الوحدة systemd (الخدمة ، الهدف)

هل يوجد أنواع لملفات الوحدة؟

(إجابة استرشادية)

ملفات وحدات الخدمة: وهي وحدات مسؤولة عن التعامل مع العمليات (تشغيل ، إيقاف ، حالة ، إعادة تشغيل ، تفعيل ، إيقاف)

man systemd.service

ومثال على ملفات وحدات الخدمات ،الملف المسؤول عن الوصول الآمن إلى بوابة النظام (Secure Shell):

[Unit]

Description=OpenSSH server daemon

Documentation=man:sshd(8) man:sshd_config(5)

After=network.target sshd-keygen.service

Wants=sshd-keygen.service

[Service]

EnvironmentFile=/etc/sysconfig/sshd

ExecStart=/usr/sbin/sshd -D $OPTIONS

ExecReload=/bin/kill -HUP $MAINPID

KillMode=process

Restart=on-failure

RestartSec=42s

[Install]

WantedBy=multi-user.target

ولسرد جميع ملفات وحدات الخدمات على النظام نستخدم الأمر التالي:

systemctl list-unit-files --type service

ملفات وحدات الهدف: وهي وحدات مسؤولة عن ربط وتجميع الوحدات ببعضها لوصف حالة النظام.

بعض هذه الوحدات يمكن أن تكون خدمات في حد ذاتها والأخرى يمكن أن تكون وحدات هدف إضافية مع مجموعة الوحدات الخاصة بها.

man systemd.target

ومثال على ملفات وحدات الهدف ،الملف المسؤول عن تعددية المستخدمين (multi-user.target):

[Unit]

Description=Multi-User System

Documentation=man:systemd.special(7)

Requires=basic.target

Conflicts=rescue.service rescue.target

After=basic.target rescue.service rescue.target

AllowIsolate=yes

ولسرد جميع ملفات وحدات الهدف على النظام نستخدم الأمر التالي:

systemctl list-unit-files --type target

سرد ملفات الوحدة باستخدام systemctl

كيف يمكن سرد ملفات الوحدة؟

(إجابة استرشادية)

يمكن معرفة قائمة ملفات الوحدات المثبتة على النظام من خلال الأمر التالي:

systemctl list-unit-files

أماكن ملفات الوحدة  (أوامر) تشغيل ، تعطيل ، بدء ، إيقاف الخدمة

أين يتم تخزين ملفات الوحدة؟

(إجابة استرشادية)

وتخزن ملفات الوحدة ويتم استدعاؤها في المسارات بالترتيب التالي:

  1. /etc/systemd/[system]
  2. /run/systemd/[system]
  3. /usr/lib/systemd/[system]

والملفات التي تسبق في الترتيب لها الصلاحية في ان تنفذ على حساب الملفات المشابهة الأخرى الأقل منها في الترتيب السابق.

ويمكن التعامل معها من قِبَل مدير النظام من خلال الأمر التالي:

# systemctl [start | stop | status | restart | enable | disable] NAME.service

إخفاء الخدمات

كيف يمكن إخفاء خدمة ما؟

(إجابة استرشادية)

الآن نحن نعرف أن النظام يستخدم ملفات الخدمات التي بالمسار (etc/systemd/) ويقوم بتنفيذها على حساب ملفات الخدمات بالمسارات الأخرى السالف ذكرها. يمكننا الاستفادة من هذا والإستفادة من الروابط المرنة أيضاً لعمل رابط بين ملف الخدمة وملف اللاشئ الموجود تحت ملفات الأجهزة (dev/null/) كالتالي:

# systemctl mask httpd.service

Created symlink from /etc/systemd/system/httpd.service to /dev/null.

وعند تجربة تشغيل الخدمة سنحصل على النتيجة التالية:

# systemctl start httpd.service

Failed to start httpd.service: Unit httpd.service is masked

ويمكن إلغاء الإخفاء من خلال الأمر التالي:

# systemctl unmask httpd.service

تكوين الواجهات الوهمية باستخدام systemd

ما هي الواجهة الوهمية؟

(إجابة استرشادية)

هي واجهة بوابة وهمية للنظام يمكن من خلالها التعامل مع النظام من خلال سطر الأوامر عند إقلاع النظام.

ما أهميتها؟

تكمن أهميتها في انها لا تستهلك من العتاد المتاح والخدمات المضافة بعكس الواجهة الرسومية وقوة التعامل مع سطر الأوامر وفاعليته ،وتستخدم بشكل قوي في التعامل مع الخوادم.

مكوناتها؟

واجهة وهمية لسطر الأوامر ،نستخدم من خلالها لوحة المفاتيح لكتابة الأوامر والتعامل مع النظام.

كيف يمكن تكوين واجهة وهمية بإستخدام systemd؟

يمكن ضبطها من خلال الملف etc/vconsole.conf/

ويمكن ادارتها من خلال systemd عن طريق الأمر التالي:

# systemctl [restart] systemd-vconsole-setup.service

التدريب