بدعوة من قلبي والعمل كمهندس نظم في التصميم الرقمي ، غالبًا ما أتعامل مع منتجات البرمجيات المتطورة والتصميمات المعمارية. يؤدي هذا إلى الرغبة الشديدة في تقليل وتبسيط كل ما يأتي في متناول اليد ، ويؤدي إلى بهجة القرارات البشرية التي تؤدي وظيفتها فقط ، بدون تسجيل ورسائل نصية قصيرة .
لذا قابلت 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 سطرًا:

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

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

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

- وهنا يتم توضيح ما يجب إطلاقه لتهيئة النظام:
- شغّل 6 عمليات جيتي في انتظار 6 وحدات تحكم افتراضية لتسجيل دخول المستخدم المحلي.
- ابدأ تشغيل نظام التهيئة openrc لتحقيق مستويات التهيئة المطلوبة بالتناوب (لا يستخدم openrc مستويات التهيئة الكلاسيكية 0-6 ، ولكن مستويات / مجموعات sysinit الخاصة به - التمهيد - افتراضي).
علاوة على ذلك ، تعتمد حالة النظام على تكوين openrc ، وهي:
- المتغيرات المعرفة في ملفات الدليل /etc/conf.d ؛
- تشغيل البرامج النصية الموجودة في الدليل /etc/init.d ؛
- ربط البرامج النصية لبدء التشغيل بـ "مجموعات التهيئة":

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

يتم تعريف المتغيرات المستخدمة عند تنفيذ البرنامج النصي في الملف /etc/conf.d/syslog المقابل. في حالتنا ، يتم تعريف المتغير SYSLOGD_OPTS = "- Z" في الملف.
يرجى ملاحظة أن البرنامج النصي يحدد بشكل تبعي تبعيات هذه الخدمة.
يتكرر Openrc بصدق فوق البرامج النصية لبدء التشغيل بترتيب معين ، ويصل إلى المستوى "الافتراضي" - ومن هنا ، يعمل نظام!
الشياطين تحت غطاء محرك السيارة
ما هو مخفي بالضبط تحت البرامج النصية لبدء تشغيل openrc؟ الغريب - مجموعة من المهام والشياطين المدرجة أدناه.
مرحبا ، بعد الانتهاء من هذه الخطوات ، النظام جاهز للعمل! لا تنس التبعيات على الخدمات المذكورة أعلاه التي تم تحديدها في ملفات 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!).
بالإضافة إلى ذلك ، فهي مناسبة تمامًا لدور منصة التدريب ، والتي تتيح لك رؤية ما تتكون منه مجموعة التوزيع الحديثة ، دون الانغماس على الفور في هاوية الخدمات مهما كان الأمر وتكرار الوظائف بشكل متكرر في أدوات رائعة متعددة المستويات قابلة للتكوين لجميع المناسبات.