لماذا تدق المسامير بمجهر إذا كان لديك جبال الألب لينكس؟

بدعوة من قلبي والعمل كمهندس نظم في التصميم الرقمي ، غالبًا ما أتعامل مع منتجات البرمجيات المتطورة والتصميمات المعمارية. يؤدي هذا إلى الرغبة الشديدة في تقليل وتبسيط كل ما يأتي في متناول اليد ، ويؤدي إلى بهجة القرارات البشرية التي تؤدي وظيفتها فقط ، بدون تسجيل ورسائل نصية قصيرة .


لذا قابلت Alpine Linux.


نافذة غير متوقعة


قد ترغب في هذا التوزيع للأسباب التالية:


  • إذا كنت تحب البساطة والأدوات الموجهة لإنجاز المهمة بدون صفارات وديكورات غير ضرورية ؛
  • إذا لاحظت أن التوزيعات "السائدة" الحالية قليلة (؟) منتفخة وزائدة عن الحاجة ؛
  • إذا كنت ترغب في حل مشكلة موجودة بطريقة بسيطة.

أعني بكلمة "التيار" ثلاثي CentOS-Debian-Ubuntu (بالطبع العالم لا ينتهي عند هذا الحد) ، سامحني لكل أولئك الذين يؤمنون بهذه التوزيعات الرائعة. عندما يتم استخدامها ، بشكل دوري ، على حدود الإدراك ، تنشأ فكرة حادة - "ربما يمكن أن تكون أسهل؟".


هل نحن حقا بحاجة إليها؟


تعطيل وضع Holywar $
هل يتطلب الأمر كل هذا لحل مهمتك الصغيرة:


  • نظام رائع d. نظام التهيئة (ليس تمامًا على الإطلاق) الذي قد يعطي انطباعًا عن نظام التحكم في المكوك؟

    نينين!
    لا أحد يقول إنه لا يمكنك فهم كيفية إدارتها ، ولكن نموها المتفشي يمكن أن يبدأ في التخويف ، ويتجاوز عدد المفاهيم بوضوح الحد الأدنى المطلوب للمجموعة. هل كل هذا ضروري حقًا لتنفيذ مهمة بسيطة وإعادة تشغيل خادم نادرة جدًا؟

  • نظام تسجيل / تدقيق فرعي مبني على مجموعة مثل journald -> rsyslogd + auditd؟


    هذا رائع بلا شك!

    يمكن للمرء أن يخمن لماذا يتم ذلك بهذه الطريقة ، ولكن هل هذه السلسلة ضرورية حقًا لمهمتي البسيطة؟


  • ازدواجية وظيفة تنفيذ المهام الدورية في كل من systemd و crond؟

    يا هذا كرون!
    هل أفتقد آليته الكلاسيكية حقًا؟ ربما يكون تركيبه واضحًا تمامًا ، لكن هل العدادات في sd واضحة جدًا؟

  • التعايش بين العديد من النظم الفرعية لإدارة الشبكة في مجموعات مختلفة: الشبكات الكلاسيكية / networkd / NetworkManager؟

    أنت بحاجة إلى إدارة الشبكة كثيرًا!
    هذه التركيبة ، نعم ، على نظام الخادم ، ومع العديد من واجهات الإدارة لجميع الأذواق. على الرغم من لا ، دعنا نضيف هنا أيضًا netplan ، والذي "يحل" مشكلة التكوين للأنظمة الفرعية المدرجة. هل ترغب في بدء خدمتك ، أو غالبًا تغيير المدار بسبب إعادة تشكيل واجهات الشبكة؟

  • خدمات مثل ضبطها وجدار الحماية؟

    كيف بدونهم؟
    هل هم بحاجة لمهمتك؟ من حيث المبدأ ، من الجيد أن تنظر إلى جدار الحماية على أنه محاولة للهروب من بنية iptables ، ولكن نتيجة لذلك ، بدلاً من بناء جملة واحدة ، ستفهم الآخر وتكون في حيرة من حجم أوامر جدار الحماية cmd. وهل تحتاج حقًا إلى مترجم بيثون وعملياته في النظام الأساسي؟ لا ، أنا أحب الثعبان ، ولكن ليس في هذه الحالة.

  • خدمة البريد المحلية. هل أنت متأكد أنك ستستخدمه؟



نظرًا لأننا تذكرنا البساطة ، يمكننا مقارنة توزيعاتنا الرائدة تقريبًا في الحد الأدنى من التثبيت:


  • الرائد في التكرار في مساحة القرص وعدد الحزم هو Ubuntu 18.04 ( 2.8 غيغابايت من مساحة القرص ، 342 حزمة ، 31 خدمة نظام نشطة ، 15 عملية عند الدخول). يتم تمثيل عائلة systemd هنا إلى أقصى حد - systemd ، networkd ، timesyncd ، حل ، logind ، هناك dbus.
  • CentOS 7.5.1804 يخسر حسب القرص وعدد الحزم ، ولكن الرائد في الخدمات الزائدة على الأرجح (1.1 غيغابايت من مساحة القرص ، 299 رزمة ، 34 خدمة نظام نشطة ، 19 عملية عند الدخول ، بما في ذلك NetworkManager ، جدار الحماية ، ضبطها ، postfix ، polkitd ، Auditd ، journald + rsyslogd ، dbus).
  • حاول دبيان 9.4.0 جاهداً ألا يضخم: 940 ميجابايت ، 334 حزمة ، 25 خدمة نظام نشطة ، 14 عملية عند تسجيل الدخول. بالطبع ، هناك أيضًا systemd هنا (بالإضافة إلى journald و timeyncd و dbus المصاحبة) ، ولكن بدون الكثير من التعصب فيما يتعلق بإدارة الشبكة.

Holywar: لا يمكن تغيير الوضع إلى "تعطيل": تم رفض الإذن


اريد غريب


يمكنك (محاولة) التخلص من جزء مما سبق يدويًا ، ولكن فجأة تم اختراع كل شيء من أجلنا؟ من الناحية المثالية ، أريد أن أرى من توزيع نظام تشغيل خادم للأغراض العامة:


  • من الغريب أن محمل الإقلاع ، الذي سيصل بنا إلى النواة ؛
  • نواة نظام التشغيل نفسها (لينكس في هذه الحالة) ؛
  • نظام التهيئة الذي ستطلقه النواة عندما تكون جاهزًا. من المرغوب فيه ، في بساطة ، ليس بعيدًا عن الفأس ؛
  • الحد الأدنى من العمليات التي سيبدأها نظام التهيئة. حسنًا ، على سبيل المثال:
    • التهيئة النهائية للجهاز وتعريف معلمات النواة الإضافية ؛
    • توفير يوميات (هل من الممكن مع المجلات النصية؟ حسنا ، من فضلك) ؛
    • تكوين الشبكة (سيكون لطيفًا ، مع طبقات تحكم أقل) ؛
    • مزامنة الوقت (ntpd / chronyd) ؛
    • العديد من لوحات المفاتيح المحلية ؛
    • اختياري - التنفيذ الدوري للمهام (crond) ؛
    • اختياري - الوصول عن بعد إلى النظام (sshd) ؛
    • سيكون من الجيد حفظ واستعادة تكوين جدار الحماية.

وهذا كل شيء ، والباقي متروك لمدير الحزم. كود وتكوين أقل قابلية للتنفيذ - أخطاء أقل ، أخطاء أقل - أخطاء أقل. ويعمل النظام أيضًا ويمكن الوصول إليه عبر الشبكة. تبدو الفكرة جيدة ، والآن دعنا نرى مدى قرب توزيع Alpine Linux .


عن جبال الألب


ما الذي يمكن أن يجذب جبال الألب ، خاصة بعد CentOS؟ بساطتها اليائسة!
حسنًا ، وبطبيعة الحال ، عدم الحاجة إلى شهادة " Linux Systemd Certified Voldemort ".


ما فعله المؤلفون:


  • تقليل عدد المكونات الأساسية المستخدمة ؛
  • لقد اخترنا وحدات أصغر وأكثر شفافية ؛
  • تبسيط عملية تكوين النظام.

وهي:


  • عملية تثبيت موجزة للغاية باستخدام أداة إعداد Alpine Console ؛
  • تم أخذ Extlinux من مشروع syslinux كمحمل ؛
  • أداة بناء mkinitfs صغيرة لإنشاء نظام ملفات مؤقت يستخدم في التمهيد ؛
  • نظام التهيئة Openrc مع تعريف التبعيات بين الخدمات ومستويات التشغيل وقليل من البرمجة النصية ؛
  • استبدال مكتبة GNU libc القياسية بمكتبة musl libc خفيفة الوزن ؛
  • بدلاً من حزمة GNU coreutils ، فإن معظم أدوات النظام القياسية في إصدار مبتور إلى حد ما هي جزء من حزمة busybox ، والتي قد تكون على دراية بها في الحلول المضمنة ؛
  • بشكل افتراضي ، يتم استخدام قشرة الرماد كجزء من busybox. بالطبع ، لا أحد يزعج أن يضع باش إذا لزم الأمر ، حسنا ، و systemd ؛
  • مدير حزمة APK الأصلي والبنية التحتية لتوزيع الحزمة الخاصة.

بالإضافة إلى ذلك ، قام المؤلفون بتنفيذ عدد من الإجراءات التي تهدف إلى رفع مستوى الأمان للنظام الأساسي:


  • قمنا بتطبيق بقع grsecurity / PaX kernel (تختلف الآراء حول فعاليتها ، ولكن لا تزال) ؛ ليس بعد الآن ، بفضل الزميل من التعليقات. فقط في 26 يونيو ، تم إصدار الإصدار 3.8.0 .
  • تم جمع الحزم باستخدام أوضاع تقلل من احتمالية استغلال عدد من الثغرات المحتملة.

ونتيجة لذلك ، نحصل على نظام مجهز بعدد من آليات الحماية الإضافية ، مما يسمح لنا بحل المشكلة الحالية ويحتل حوالي 130 ميغابايت . في نظام التشغيل ، تم تثبيت 41 حزمة و 13 عملية مستخدم قيد التشغيل ، يمكنك النقر على ssh.


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


افتح الغطاء قليلاً


يرجى ملاحظة - يمكن أن يكون Alpine مفيدًا كأرض تدريب عند التعرف على Linux! من السهل بشكل شخصي رؤية منطق المكونات بدلاً من محاولة تغطية CentOS أو Ubuntu:


  • إن محمل الإقلاع لنظامنا المثبت بسيط ، حيث يتم تكوينه إلى 12 سطرًا:

تكوين برنامج Bootloader


  • نعم ، والداخل / التمهيد غير مزدحم للغاية:

ليرة سورية / إخراج التمهيد


  • وهنا هو محمل الإقلاع الذي تم إطلاقه بدون خلفية فاخرة:

تشغيل أداة تحميل التشغيل


  • تقوم kernel بالتمهيد ، وتلتقط initramfs ، وتفي بخطوات التهيئة الخاصة بها وتستدعي أمر init (الذي ، في الواقع ، يأتي أيضًا مع busybox). يستخدم Init الملف / etc / inittab:

محتويات / etc / inittab


  • وهنا يتم توضيح ما يجب إطلاقه لتهيئة النظام:
    • شغّل 6 عمليات جيتي في انتظار 6 وحدات تحكم افتراضية لتسجيل دخول المستخدم المحلي.
    • ابدأ تشغيل نظام التهيئة openrc لتحقيق مستويات التهيئة المطلوبة بالتناوب (لا يستخدم openrc مستويات التهيئة الكلاسيكية 0-6 ، ولكن مستويات / مجموعات sysinit الخاصة به - التمهيد - افتراضي).

علاوة على ذلك ، تعتمد حالة النظام على تكوين openrc ، وهي:


  • المتغيرات المعرفة في ملفات الدليل /etc/conf.d ؛
  • تشغيل البرامج النصية الموجودة في الدليل /etc/init.d ؛
  • ربط البرامج النصية لبدء التشغيل بـ "مجموعات التهيئة":

الشياطين ومستوى ملزمة


يبقى قراءة البرامج النصية لبدء التشغيل ومعالجتها مع مراعاة مستويات التشغيل والتبعيات.
باستخدام مثال syslog (/etc/init.d/syslog) ، يمكننا رؤية كيف يبدو البرنامج النصي لبدء التشغيل openrc.


كما ترون ، هذه ليست دائمًا من أقدامك غير المحبوبة:


مثال على ملف تكوين Openrc


يتم تعريف المتغيرات المستخدمة عند تنفيذ البرنامج النصي في الملف /etc/conf.d/syslog المقابل. في حالتنا ، يتم تعريف المتغير SYSLOGD_OPTS = "- Z" في الملف.
يرجى ملاحظة أن البرنامج النصي يحدد بشكل تبعي تبعيات هذه الخدمة.


يتكرر Openrc بصدق فوق البرامج النصية لبدء التشغيل بترتيب معين ، ويصل إلى المستوى "الافتراضي" - ومن هنا ، يعمل نظام!


الشياطين تحت غطاء محرك السيارة


ما هو مخفي بالضبط تحت البرامج النصية لبدء تشغيل openrc؟ الغريب - مجموعة من المهام والشياطين المدرجة أدناه.


  • أولاً ، على مستوى النظام:


    • dmesg - تعيين مستوى تسجيل الرسائل من kernel ؛
    • devfs - تحميل وتكوين / dev ؛
    • mdev - يبدأ مدير الجهاز ؛
    • hwdrivers - يتم تحميل وحدات الجهاز بناءً على معلومات من / sys و / dev ؛

  • التالي هو مستوى التمهيد:


    • الوحدات النمطية - يتم تحميل وحدات kernel ، والتي يتم تعريف قائمتها في / etc / modules ؛
    • hwclock - يتم تكوين ساعات الأجهزة في الوقت الحقيقي ؛
    • sysctl - تحدد معلمات kernel التي حددناها في /etc/sysctl.conf ؛
    • مبادلة - تم توصيل قسم المبادلة ؛
    • bootmisc - يتم مسح الدلائل المؤقتة ؛
    • urandom - تم تكوين مولد رقم عشوائي ؛
    • خرائط المفاتيح - تمت تهيئة تخطيط لوحة المفاتيح ؛
    • hostname - يحدد اسم الجهاز ، الذي تم تعريفه في / etc / hostname ؛
    • الربط الشبكي - البحث وتهيئة الواجهات باستخدام المعلومات من / etc / network / interfaces ؛
    • سجل النظام - يبدأ البرنامج الخفي للتسجيل من busybox ؛

  • وأخيرًا ، المستوى الافتراضي:


    • chrony - تبدأ خدمة NTP ؛
    • crond - يتم تشغيل خدمة تنفيذ المهام المجدولة ؛
    • acpid - تبدأ خدمة تتبع حدث الطاقة ؛
    • sshd - تبدأ خدمة الوصول عن بعد.


مرحبا ، بعد الانتهاء من هذه الخطوات ، النظام جاهز للعمل! لا تنس التبعيات على الخدمات المذكورة أعلاه التي تم تحديدها في ملفات init.d:


  • sysfs - جبل / نظام ؛
  • fsck - فحص وإصلاح أنظمة الملفات ؛
  • الجذر - قم بتثبيت نظام الجذر للكتابة / القراءة ؛
  • localmount - تحميل جميع أنظمة الملفات المدرجة في / etc / fstab ؛
  • klogd - تسجيل أحداث kernel.

نفتح أحد وحدات التحكم المحلية التي تنتظرنا فيها جيتي ، وأدخل تسجيل الدخول ، وبعد ذلك نقوم بتمرير كلمة المرور إلى عملية تسجيل الدخول والوصول إلى قشرة الرماد الجارية (عند إطلاقها ، محتويات الملفات / etc / profile ، /etc/profile.d/* و ~ /.profile لإعداد بيئة المستخدم).


حسنًا ، لا توجد كيانات إضافية (مفيدة بلا شك في بعض الحالات ، مثل PAM) - ونحن في النظام!


يبقى استخدام مدير حزم apk ، والبحث عن الحزم التي نحتاجها لمهمتنا. (هل هم هناك؟ يمكنك تقييم ذلك من خلال بوابة الويب ).


وايضا


  • قام مؤلفو التوزيع بعمل إضافة iptables الخاصة بهم تسمى "Alpine Wall". ولا يتم تعليقه باستمرار كعملية منفصلة في النظام ؛
  • بالنسبة لأولئك الذين يرغبون في إدارة الخادم من خلال واجهة الويب ، تم إعداد حزمة Alpine Configuration Framework. بدون PHP أو Perl ، ولكن مع Lua ؛
  • بالنسبة لأولئك الذين يريدون سطح مكتب ، هناك إمكانية لتثبيت بيئة رسومية (على الرغم من أن ذلك قد يكون مؤلمًا في البداية) ؛
  • للخبراء الخاصين هناك "تثبيت" في جبال الألب في الذاكرة مع التكوين المخزن على التخزين الخارجي (انظر وصف أداة lbu ).

الملخص


توزيع جبال الألب ليس مثاليًا ، لكن مقتضبه أثار إعجابي حقًا ، خاصة في دور الحاوية (6 عمليات فقط - init ، 4 * getty ، syslogd). بالنسبة لي ، يبدو أن نظام تشغيل الخادم الأدنى يجب أن يبدو (سامحني ، CentOS!).


بالإضافة إلى ذلك ، فهي مناسبة تمامًا لدور منصة التدريب ، والتي تتيح لك رؤية ما تتكون منه مجموعة التوزيع الحديثة ، دون الانغماس على الفور في هاوية الخدمات مهما كان الأمر وتكرار الوظائف بشكل متكرر في أدوات رائعة متعددة المستويات قابلة للتكوين لجميع المناسبات.

Source: https://habr.com/ru/post/ar415279/


All Articles