Jump to content

systemd-boot (Türkçe)

From ArchWiki

systemd-boot(7), eski adıyla gummiboot (Almanca "şişme bot" anlamına gelir) ve bazen sd-boot olarak da adlandırılan, yapılandırılması oldukça kolay bir UEFI önyükleme yöneticisidir. Önyükleme girdilerini seçmek için metin tabanlı bir menü ve çekirdek (kernel) komut satırı için bir düzenleyici sunar.

Unutulmamalıdır ki systemd-boot yalnızca, kurulduğu EFI sistem bölümünden (ESP) veya aynı disk üzerindeki Genişletilmiş Önyükleyici Bölümünden (Extended Boot Loader Partition - XBOOTLDR) EFI çalıştırılabilir dosyalarını (örn. Linux çekirdeği EFI boot stub, UEFI shell, GRUB veya Windows Önyükleme Yöneticisi) başlatabilir.

Note Bu makalenin tamamında esp ifadesi EFI sistem bölümünün bağlama noktasını, boot ifadesi ise isteğe bağlı XBOOTLDR bölümünün bağlama noktasını temsil eder. Sistemin bağlama noktasına chroot yaptığınız varsayılmaktadır.

Desteklenen Dosya Sistemleri

systemd-boot, dosya sistemi desteğini doğrudan donanım yazılımından (firmware) devralır (yani en azından FAT12, FAT16 ve FAT32). Ayrıca esp/EFI/systemd/drivers/ dizinine yerleştirilen tüm UEFI sürücülerini otomatik olarak yükler.

Kurulum

systemd-boot, base meta paketinin bir bağımlılığı olan systemd paketiyle birlikte gelir, bu nedenle ek bir paketi manuel olarak kurmanıza gerek yoktur.

UEFI Önyükleme Yöneticisini Kurma

systemd-boot kurulumunu yapabilmek için öncelikle sistemin UEFI modunda başlatıldığından ve UEFI değişkenlerine erişilebildiğinden emin olun. Bunu doğrulamak için efivar --list komutunu çalıştırabilir ya da eğer efivar kurulu değilse ls /sys/firmware/efi/efivars komutunu verebilirsiniz (eğer bu dizin mevcutsa, sistem UEFI modunda başlatılmış demektir).

systemd-boot sistemini ESP'ye kurmak için bootctl(1) aracını kullanın:

# bootctl install

Bu komut systemd-boot UEFI önyükleme yöneticisini ESP'ye kopyalayacak, onun için bir UEFI önyükleme girdisi oluşturacak ve bunu UEFI önyükleme sırasında ilk sıraya yerleştirecektir.

  • x64 UEFI sistemlerde, /usr/lib/systemd/boot/efi/systemd-bootx64.efi dosyası esp/EFI/systemd/systemd-bootx64.efi ve esp/EFI/BOOT/BOOTX64.EFI konumlarına kopyalanacaktır.
  • IA32 UEFI sistemlerde, /usr/lib/systemd/boot/efi/systemd-bootia32.efi dosyası esp/EFI/systemd/systemd-bootia32.efi ve esp/EFI/BOOT/BOOTIA32.EFI konumlarına kopyalanacaktır.

Oluşturulan UEFI önyükleme girdisi "Linux Boot Manager" olarak adlandırılacak ve UEFI mimarisine bağlı olarak ESP üzerindeki \EFI\systemd\systemd-bootx64.efi veya \EFI\systemd\systemd-bootia32.efi dosyasına işaret edecektir.

Note
  • bootctl install komutu çalıştırıldığında, systemd-boot ESP'yi sırasıyla /efi, /boot ve /boot/efi konumlarında aramaya çalışır. Eğer esp farklı bir konuma bağlıysa, parametre olarak --esp-path=esp seçeneğini geçmeniz gerekir. (Detaylar için bootctl(1) § OPTIONS bölümüne bakın.)
  • systemd-boot kurulumu yapmak, mevcut olan herhangi bir esp/EFI/BOOT/BOOTX64.EFI (veya IA32 UEFI'de esp/EFI/BOOT/BOOTIA32.EFI) dosyasının (örneğin Microsoft'un ilgili dosyasının) üzerine yazacaktır.
  • bootctl, arch-chroot(8)'un systemd dışı modunda olduğu gibi bir pid ad alanında (pid namespace) çalışırken UEFI değişkenleri/önyükleme girdileri üzerinde işlem yapmaktan kaçınır. Chroot ortamında önyükleme girdisini düzgünce oluşturmak için bunun yerine arch-chroot -S komutunu kullanın.

Kurulumu tamamlamak için systemd-boot sistemini yapılandırın.

XBOOTLDR Kullanarak Kurulum

Çekirdeği (kernel) ve initramfs dosyalarını ESP'den ayrı tutmak için "Linux extended boot" (XBOOTLDR) türünde ayrı bir /boot bölümü oluşturulabilir. Bu yöntem özellikle, halihazırda mevcut olan ve boyutu çok küçük olan bir ESP ile Windows yanına dual-boot kurulum yaparken oldukça kullanışlıdır. Grml veya Archiso kullanımı da diğer olası senaryolardır.

ESP'yi normal şekilde hazırlayın ve aynı fiziksel sürücü üzerinde XBOOTLDR için başka bir bölüm oluşturun. XBOOTLDR bölümünün GUID türü bc13c2ff-59e6-4262-a352-b275fd6f7172 olmalıdır [1] (gdisk için ea00 türü, fdisk için xbootldr türü). XBOOTLDR bölümünün boyutu, kurmayı planladığınız tüm çekirdekleri barındırabilecek kadar büyük olmalıdır.

Note
  • systemd-boot, ESP için yaptığı gibi bu bölüm üzerinde bir dosya sistemi kontrolü (fsck) yapmaz. Dolayısıyla, UEFI uygulamanızın okuyabildiği herhangi bir dosya sistemini kullanabilirsiniz.
  • "Hızlı Önyükleme" (Fast Boot) modu etkinken UEFI, ESP dışındaki bölümleri yüklemeyi atlayabilir. Bu durum systemd-boot sisteminin XBOOTLDR bölümündeki girdileri bulamamasına yol açabilir; böyle bir durumda Fast Boot modunu devre dışı bırakın.
  • systemd-boot sisteminin tanıyabilmesi için XBOOTLDR bölümü, ESP ile aynı fiziksel disk üzerinde bulunmalıdır.

Kurulum sırasında ESP'yi /mnt/efi konumuna ve XBOOTLDR bölümünü /mnt/boot konumuna bağlayın (mount).

Chroot ortamına girdikten sonra şu komutu kullanın:

# bootctl --esp-path=/efi --boot-path=/boot install

Kurulumu tamamlamak için systemd-boot sistemini yapılandırın.

UEFI Önyükleme Yöneticisini Güncelleme

systemd-boot sisteminin yeni bir sürümü çıktığında, UEFI önyükleme yöneticisi kullanıcı tarafından isteğe bağlı olarak yeniden kurulabilir. Bu işlem manuel veya otomatik olarak yapılabilir; iki yaklaşım aşağıda açıklanmıştır.

Note UEFI önyükleme yöneticisi bağımsız bir EFI çalıştırılabilir dosyasıdır ve sistemi başlatmak için herhangi bir sürümü kullanılabilir (kısmi güncellemeler geçerli değildir, çünkü pacman yalnızca systemd-boot yükleyicisini kurar, systemd-bootun kendisini çalıştırmaz.) Ancak yeni sürümler yeni özellikler ekleyebilir veya hataları giderebilir, bu nedenle systemd-bootu güncellemek iyi bir fikirdir.
Warning Eğer Secure Boot (Güvenli Önyükleme) etkinse, önyükleme yöneticisi güncellemesini imzalamanız gerekir. Bkz. #Secure Boot için İmzalama.

Manuel Güncelleme

systemd-boot'u güncellemek için bootctl kullanın:

# bootctl update
Note Tıpkı bootctl install komutunda olduğu gibi, systemd-boot ESP'yi /efi, /boot veya /boot/efi konumlarında bulmaya çalışacaktır. Farklı bir konum için --esp-path=esp parametresini geçmelisiniz.

Otomatik Güncelleme

systemd-boot'u otomatik olarak güncellemek için ya bir systemd servisi ya da bir pacman hook (pacman kancası) kullanın. İki yöntem aşağıda açıklanmıştır.

systemd servisi

Sürüm 250'den itibaren systemd, systemd-boot-update.service servisiyle birlikte gelir. Bu servisi etkinleştirmek (enable), systemd-boot'un her açılışta aşağıdaki komutu çalıştırmasını sağlar:

# bootctl --variables=no --graceful update

Tıpkı manuel güncellemede olduğu gibi, bu servis de ESP'yi /efi, /boot veya /boot/efi konumlarında aramaya çalışır. Eğer /usr/lib/systemd/boot/efi/ dizininde daha yeni bir sürüm mevcutsa, ESP içindeki tüm kurulu systemd-boot sürümlerini güncelleyecektir. Kullanıcıların imajı Secure Boot ile kullanabilmesi için öncelikle .efi.signed ile biten bir systemd-boot dosyası arayacaktır.

pacman hook

systemd-boot-pacman-hookAUR paketi, systemd her yükseltildiğinde çalıştırılan bir pacman kancası ekler. Bu kanca yöntemi, systemd servisi yönteminden farklı olarak, önyükleme yöneticisini her açılışta değil, yalnızca systemd paketi güncellendiğinde hemen o an günceller.

AUR paketini kurmak yerine, aşağıdaki dosyayı manuel olarak /etc/pacman.d/hooks/ dizinine yerleştirmeyi de tercih edebilirsiniz:

/etc/pacman.d/hooks/95-systemd-boot.hook
[Trigger]
Type = Package
Operation = Upgrade
Target = systemd

[Action]
Description = Gracefully upgrading systemd-boot...
When = PostTransaction
Exec = /usr/bin/systemctl restart systemd-boot-update.service

Secure Boot İçin İmzalama

Eğer Secure Boot etkinse, paketin her yükseltilmesinde önyükleme yöneticisini otomatik olarak imzalamak için bir pacman kancası eklemek isteyebilirsiniz:

/etc/pacman.d/hooks/80-secureboot.hook
[Trigger]
Operation = Install
Operation = Upgrade
Type = Path
Target = usr/lib/systemd/boot/efi/systemd-boot*.efi

[Action]
Description = Signing systemd-boot EFI binary for Secure Boot
When = PostTransaction
Exec = /bin/sh -c 'while read -r f; do /usr/lib/systemd/systemd-sbsign sign --private-key /yol/anahtar_dosyası.key --certificate /yol/sertifika_dosyası.crt --output "${f}.signed" "$f"; done;'
Depends = sh
NeedsTargets

/yol/anahtar_dosyası.key ve /yol/sertifika_dosyası.crt kısımlarını kendi imza anahtarınız ve sertifikanızla değiştirin. Bu kancayı daha iyi anlamak için systemd-sbsign(1) kılavuzuna başvurun.

Oluşturulan /usr/lib/systemd/boot/efi/systemd-boot*.efi.signed dosyası, bootctl install veya bootctl update tarafından otomatik olarak algılanacaktır. Bkz. bootctl(1) § SIGNED .EFI FILES.

Alternatif olarak sbctl aracını da kullanabilirsiniz.