اختراق SystemD

لقد قمت ببناء أنظمة لينكس مضمنة لأكثر من 10 سنوات. وهذا يعني أنني عملت كثيرًا مع نمط sysV لـ init. إنه نظام قوي وتم اختباره عبر الزمن، لكن له حدوده. توجد الآن عدة مشاريع تعمل على استبدال هيمنة sysinit، مثل Upstart و systemd.

أعمل كثيرًا مع Fedora، حيث أقوم ببناء أنظمة ملفات nfsroot لمحطات العمل غير القرصية، وأيضًا برامج ثابتة مضمنة تعتمد على مستودعات Fedora. Fedora خيار غريب لهذا النوع من العمل؛ معظم الناس يختارون Debian أو Ubuntu.

انتقلت Fedora إلى systemd منذ الإصدار 15. نظرًا لأن systemd كان جديدًا، قررت التريث وعدم ترقية جميع سلاسل الأدوات الخاصة بي إلى Fedora 15. الآن نحن على 17، والأمور تبدو مستقرة إلى حد ما. لذا خضت التجربة في إنشاء نظام nfsroot باستخدام Fedora 17. النتيجة النهائية مشابهة لـ LTSP5/Meukow - فقط جميع الحزم جديدة بشكل رائع بفضل كون Fedora على أحدث التقنيات.

التوثيق الخاص بـ systemd محدود، لذا واجهت بعض الصعوبات في معرفة كيفية تقليص systemd. مع sysinit الأمور أسهل. فقط تقطع في rc.sysinit حتى يبدو لطيفًا ونحيفًا. كما تستخدم chkconfig لإيقاف الخدمات غير الضرورية. وبالطبع تعطيل selinux. لقد وضع فريق Fedora بعض التوثيق المفيد حول تعديل واستخدام systemd. لديهم أيضًا ورقة غش من sysVinit إلى systemd، و دليل تصحيح الأخطاء. كانت هذه الصفحات ذات مساعدة كبيرة.

عندما حاولت أول مرة تشغيل نظام ملفات nfsroot الخاص بي، لم يقلع. بإضافة

systemd.confirm_spawn=true

إلى سطر أوامر النواة، تمكنت من التحكم في كل أمر في systemd، ومعرفة أي منها يتعطل.

ميزة رائعة في systemd هي القدرة على تشغيل أوامر بنمط chkconfig على نظام ملفات chroot، دون الدخول إليه بواسطة chroot. هذا مشابه لوظيفة –installroot في yum، والتي استخدمتها لبناء نظام الملفات في البداية. لذا، لتعطيل cron على النظام الجديد الذي تقوم ببنائه، يمكنك إعطاء الأمر

systemctl --system --root=$TARGET disable crond.service

حيث $TARGET هو المسار إلى chroot الخاص بك.

هناك عدد من الخدمات التي يشغلها systemd، والتي لا يمكن تعطيلها باستخدام الأمر أعلاه. الروابط التشعبية لهذه الخدمات/الأوامر غير موجودة أيضًا في /etc/systemd. الطريقة الوحيدة التي وجدتها هي حذف الروابط الرمزية لهذه الأوامر من /lib/systemd/system. بعض الأوامر التي وجدتها غير مفيدة في نظام مضمن/سطح المكتب هي:

/lib/systemd/system/sysinit.target.wants/*binfmt*
/lib/systemd/system/sysinit.target.wants/cryptsetup.target
/lib/systemd/system/sysinit.target.wants/dev-hugepages.target
/lib/systemd/system/basic.target.wants/fedora-configure.service
/lib/systemd/system/local-fs.target.wants/fedora-import-state.service
/lib/systemd/system/local-fs.target.wants/fedora-readonly.service
/lib/systemd/system/local-fs.target.wants/fedora-storage-init*.service