تثبيت وإعداد systemd-boot على توزيعتي فيدورا وأرش لينكس

ماهو Systemd-boot:

برنامَج systemd-boot ويطلق عليه اختصارا sd-boot هو مدير تمهيد UEFI بسيط حر ومفتوح المصدر (LGPL-2.1-or-later). كان يعرف سابقا باسم gummibot وبعدها تغير اسمه بعد دمجه مع سيستم دي في ماي 2015، وأصبح جزء من نظام التمهيد سيستم دي.

ميزات وعيوب Systemd-boot:

- الميزات:

  • يعدّ sd-boot أقل تعقيدًا من grub، فهو يستخدم ملفات إعدادات نصية بسيطة وسهلة القراءة تحتوي على بضعة أسطر تحمل اسم النظام نواته قسم الجذر وما إلى ذلك.
  • يعدّ أقل عرضة للكسر، وسهل استكشاف الأخطاء وإصلاحها ولا يتطلب أي عملية لإعادة توليد ملفات الإعدادات في حالة تعديلها أو تحديث النواة.
  • يدعم الإقلاع الآمن secure boot بسهولة.
  • في حال استخدام عدة توزيعات أو عدة أنوية على نفس الجهاز، فإن كل توزيعة أو نواة لها ملف إعدادات خاص بها.
  • يتعرف تِلْقائيًا على نظام الويندوز والماكنتوش.
  • يتعرف تِلْقائيًا على unified kernel image وهو مِلَفّ تنفيذي واحد يمكن تشغيله مباشرة من قائمة UEFI أو مدير التمهيد.

- حدود sd-boot:

تأتي البساطة مع القيود في الغالب بعضها مرتبط بتطور الحواسيب فلا يدعم أجهزة قديمة والبعض الآخر لأسباب تقنية.

  • يدعم sd-boot فقط UEFI لذا لا يمكن تشغيله على legacy BIOS.
  • يجب الاحتفاظ بكل kernels/initrds داخل قسم efi، لذلك يجب أن يكون حجم القسم كبيرا بما يكفي في حالة وجود أكثر من نواة، يوجد حاليا طريقة لفصل قسم efi و boot من نمط “Linux extended boot” (XBOOTLDR) بشرط أن يكونا على نفس القرص وميزتها في حال الإقلاع الثنائي مع الويندوز كونه ينشئ قسم efi بحجم 100 ميغا، لكن لها مساوئها في حال وجود أكثر من توزيعة جنو/لينكس على نفس الجهاز فلن يستطيع التعرف إليها ما لم تكن kernels/initrds الخاصة بكل توزيعة في نفس قسم boot.
  • يقدم برنامَج sd-boot واجهة نصية تدعم الحد الأدنى من التخصيص بعكس grub.

انتشار sd-boot:

غالب توزيعات لينكس تأتي مع محمل الإقلاع grub وفيما يلي نذكر التوزيعات التي تأتي مع sd-boot بشكل افتراضي:

  • توزيعة بوب Pop_OS.
  • توزيعة نيكس NixOS.
  • توزيعة أرش لينكس مع المثبت الجديد archinstall يأتي كخيار افتراضي.

الهدف الأساسي:

تصف هذه المقالة كيفية حذف grub وتثبيت sd-boot مكانه على توزيعتي فيدورا وأرش لينكس والتوزيعات المبنية عليهما.

ملاحظة مهمة:

  • يفضل أن يكون حجم قسم esp أكبر من 500 ميغا في حال لديك أكثر من نواة.
  • من الأهمية بمكان ألا تتوقف في منتصف الطريق أو تعيد التشغيل أثناء العملية.
  • في حال حدوث خطأ ما فلا تتجاهله وحاول إصلاحه أو اطلب المساعدة.
  • من الأفضل تحديث النظام وإعادة التشغيل قبل بَدْء هذه العملية.
  • عند العبث مع أداة تحميل الإقلاع من الجيد أن يكون لديك نسخة ISO جاهزة للتمهيد في حالة حدوث خطأ ما.
  • يرجى تعطيل الإقلاع الآمن كون هذا الدليل التعليمي لا يغطي شرحه حاليا.

تثبيت systemd-boot:

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

ls /sys/firmware/efi/efivars

ثانيا نحن بحاجة لمعرفة نقطة الوصل الخاصة بقسم الإقلاع esp وذلك عن طريق كتابة الأمر lsblk في الطرفية وسيكون الناتج كالتالي على حسب كيفية تقسيمك للقرص الصُّلْب:

سنحتاج لإلغاء ضم قسم boot/efi/ و boot/ في حال وجوده منفصلا أما إن كان موجودا ضمن قسم الجذر فسنقوم بحذف جميع الملفات الموجودة فيه بعد نسخها احتياطا.

sudo su
umount /boot/efi 
cp -r /boot /tmp
rm -r /boot/*
umount /boot

ثم نضم قسم esp مرة أخرى في boot/ وهي أفضل طريقة في حالة sd-boot.

mount /dev/sda1 /boot

بعدها نعدل مِلَفّ fstab بتغيير boot/efi/ إلى boot/ و نضع علامة # أمام قسم boot/ في أول السطر إن كان منفصلا، نحفظ المِلَفّ ونخرج منه.

nano /etc/fstab

الآن سنثبتت sd-boot عن طريق هذا الأمر:

bootctl install

إعداد systemd-boot:

يوجد طريقين لإعداده يدوية وآلية تعتمد على سكريبتات تستعمل حزمة kernel-install.

- الطريقة اليدوية:

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

- الطريقة الآلية:

  • بواسطة سكريبتات تستخدم حُزْمَة kernel-install يتم أتمتة عملية إنشاء entries وإزالتها بالكامل.
  • آمن في حال وجود أكثر من توزيعة وأكثر من نواة، لأنه ينقل kernel/initrd إلى دليل محدد.

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

بالنسبة لتوزيعة فيدورا فهي معدة سلفًا لاستخدام kernel-install بطريقة مؤتمتة، في حالة توزيعة أرش وما بني عليها باستثناء منجارو فسنثبت حُزْمَة kernel-install-mknitcpio وهي موجودة في مستودعات مستخدمي أرش AUR ونعيد تثبيت النواة.

  • توزيعة فيدورا:
sudo dnf reinstall kernel-core
  • توزيعة أرش وما بني عليها:
paru -S kernel-install-mkinitcpio
sudo pacman -S kernel

إعدادات systemd-boot:

مدير الإقلاع sd-boot يحتوي على ملفين للإعدادات: مِلَفّ عام esp/loader/loader.conf، وملفات خاصة بكل نواة أو توزيعة esp/loader/entries/*.conf

- إعدادات مِلَفّ loader.conf:

esp/loader/loader.conf
---------------------------------
default  
timeout  5
console-mode max
editor   no

شرح مع ملاحظات:

  • خِيار default لتحديد النظام الذي سيقلع افتراضيا، كما يمكن تغييره من قائمة الإقلاع، أو وضع خِيار saved@ بحيث يتم حفظ الإدخال كمتغير عند كل تمهيد ويتم تحديده في تِلْقائيًا في الإقلاع التالي.
    في حال وجود أكثر من نواة لنفس التوزيعة ومع استعمال kernel-install يمكن تحديد machine-id كمتغير وسيختار أعلى قيمة كما في المثال التالي:
/esp/loader/loader.conf
------
timeout 5
default 01234567890abcdef1234567890abdf0-*
editor no
  • خِيار timeout: مدة ظهور قائمة التمهيد قبل تشغيل الإدخال الافتراضي بالثواني
  • خِيار console-mode لتحديد دقة العرض
  • خِيار editor: للتعديل على مِلَفّ الإدخال من قائمة التمهيد، من الأفضل تعطيل المحرر إذا كان يمكن الوصول إلى الجهاز من قبل أشخاص غير مصرح لهم.

- إعدادات مِلَفّ entries/*.conf:

يمكن إضافة وتعديل الملفات في المسار esp/loader/entries/*.conf وهي الملفات التي ستظهر في قائمة الإقلاع.
مع kernel-install يتم كتابة المدخلات آليا.

ملاحظات:
مع grub يتم تمرير معاملات النواة عن طريق تحرير هذا المِلَفّ etc/default/grub/ أما في حالة sd-boot فيتم عن طريق تحرير ملفات esp/loader/entries/*.conf عند خِيار options في حال التعديل اليدوي أمافي حالة استخدام kernel-install فيمكنك تحرير هذا المِلَفّ etc/kernel/cmdline/ وهو يقوم بالباقي.


في حال وجود أكثر من توزيعة يمكن استخدام sd-boot كبديل كامل ل grub دون الحاجة لإعادة تثبيته، يكفي أن تعدل قسم esp كما في الأعلى، أو يمكنك استخدام بجانبه وللتوضيح أكثر لنفترض أن لدي توزيعتين الأولى فيدورا مع sd-boot فقط والثانية توزيعة أرش لينكس مع grub هنا لدي خيارين الأول إبقاءه والثاني حذفه واستعمال sd-boot المثبت سلفًا مع تنفيذ الأوامر التي في الأعلى.

1- إبقاء grub الخاص بتوزيعة أرش:

في حال إبقاء grub الخاص بتوزيعة أرش لينكس فنحن بحاجة إلى كتابة مِلَفّ إدخال له في هذا المسار esp/loader/entries/*.conf حتى يتعرف عليه sd-boot

sudo touch /boot/loader/entries/arch.conf
sudo nano /boot/loader/entries/arch.conf

نحرر المِلَفّ كالتالي:

title Archlinux 
linux /EFI/arch/grubx64.efi
options root=UUID=XXXXXXXX-XXXX-XXXX-XXXXXXXXXXXXXXX  subvol=@ ro
  • السطر الأول: هو اسم التوزيعة الذي سيظهر في قائمة الإقلاع.
  • السطر الثاني: هو موقع مِلَفّ تمهيد grub يمكنك تحديده كما يظهر عندك.
  • السطر الثالث: هو موقع قسم الجذر لتوزيعة أرش لينكس يمكن تحديده عن طريق UUID وفي حالة كنت تستخدم BTRFS يرجى تحديد subovolume الخاص بقسم الجذر أيضا كما في الأعلى.
    لتحديد UUID الخاص بقسم الجذر يرجى كتابة lsblk -f في الطرفية.

2- حذف grub واستعمال sd-boot المثبت مسبقا:

بما أن sd-boot مثبت سلفًا فنحن بحاجة لوصل قسم esp في boot/ بعد حذف ملفاته الأخير ثم تعديل مِلَفّ fstab وتثبيت حُزْمَة kernel-install-mkinitcpio وإعادة تثبيت النواة كما هو موضح في الأعلى.

بعض استخدامات sd-boot:

يمكن تحديد الإقلاع التالي من الجَلسة الحالية دون الحاجة لاختياره من قائمة التمهيد مع الحفاظ على الخِيار الافتراضي سليمًا لعمليات التمهيد اللاحقة، على سبيل المثال يمكنني إعادة إقلاع الحاسوب واختيار توزيعة أرش لينكس,وأنا ما زلت على توزيعة فيدورا أو أي مِلَفّ إدخال آخر

systemctl reboot --boot-loader-entry=//boot/loader/entries/arch.conf

يمكن اختيار ويندوز أو قائمة UEFI كإقلاع قادم ولمعرفة باقي الخيارات يرجى كتابة هذا الأمر في الطرفية:

systemctl reboot --boot-loader-entry=help

يمكنك إنشاء Aliases وإضافتها لملف bashrc. لاختصار الأمر

alias switch-arch="systemctl reboot --boot-loader-entry=//boot/loader/entries/arch.conf"

خاتمة:

مدير التمهيد sd-boot لن يضيف أي مِيزة لإقلاع نظامك لكنه مفيد في حالة كنت تواجه مشكلات مع grub كما حدث مع توزيعة أرش لينكس في مدة، أو لمن يرغب في نظام يأتي مع الحد الأدنى من البرامج مع سهولة تفعيل الإقلاع الآمن.

المراجع:

[Tutorial] Convert to systemd-boot

Managing EFI Boot Loaders for Linux: Using gummiboot/systemd-boot

systemd-boot arch wiki

4 إعجابات

مقال ممتاز جداً. شكراً لك

العفو، شكرا لدعمك

إعجاب واحد (1)