Arch Linux i Fedora pod jednym dachem z systemd-boot
W ramach projektu systemd dostarczany jest minimalistyczny program rozruchowy systemd-boot, z którego pomocą możemy bardzo fajnie zorganizować sobie przełączanie między dwiema dystrybucjami Linuksa zainstalowanymi na jednym komputerze. Na przykładzie Arch Linuksa oraz Fedory pokażę, jak wykorzystać potencjał programu systemd-boot.
Założenia
- Arch Linux jest moim głównym system — to on ma kontrolę nad faktycznie używanym bootloaderem. Fedora jest systemem podrzędnym. Posiada ona oczywiście swój bootloader, ale będziemy z niego korzystać wyłącznie pośrednio.
- Program rozruchowy ma domyślnie startować Arch Linuksa.
- Chcę mieć możliwość uruchomienia Fedory przy starcie komputera, ale także z poziomu uruchomionego Arch Linuksa na zasadzie „uruchom ponownie, ale wystartuj Fedorę”.
- Jeżeli z poziomu Arch Linuksa użyję opcji „uruchom ponownie”, ma zostać uruchomiony Arch Linux. Jeżeli tę samą czynność wykonam w Fedorze, ma wystartować Fedora.
Podstawowa konfiguracja
Zakładam, że użytkownik ma już instalację programu rozruchowego systemd-boot za sobą. Wiele informacji na ten temat można znaleźć w internecie, na przykład w artykule na wiki Arch Linuksa. Poniżej przedstawię dla formalności moje pliki konfiguracyjne.
Konfiguracja bootloadera w /boot/loader/loader.conf
:
default arch-linux timeout 0 editor 0 auto-entries 0
Pozycja mojego systemu w pliku /boot/loader/entries/arch-linux.conf
:
title Arch Linux linux /vmlinuz-linux initrd /intel-ucode.img initrd /initramfs-linux.img options root=/dev/disk/by-uuid/e2c27b76-6e44-4fd8-850f-9b36679a947a resume=/dev/disk/by-uuid/8bc4ccb1-5598-4822-9a56-3de4c45cf169 quiet
Według naszych założeń kontrolę nad systemd-boot sprawować ma Arch Linux — to z jego poziomu bootloader jest aktualizowany. Fedora posiada swój własny bootloader (GRUB), który może być uruchamiany pośrednio, poprzez dodatkową pozycję systemd-boot.
W pliku /boot/loader/entries/fedora.conf
definiuję pozycję dla systemu podrzędnego:
title Fedora efi /EFI/fedora/shimx64.efi
Jak widać, w przypadku Fedory nasz bootloader systemd-boot nie ma zbyt dużo do roboty — jedynie bootloaderuje kolejny bootloader. :)
Uruchamianie systemów
Dzięki opcji default
w pliku loader.conf
Arch Linux będzie uruchamiany domyślnie.
Opcja timeout
sprawia, że systemd-boot nie wyświetla menu wyboru systemu, a od razu uruchamia domyślną pozycję. Aby uruchomić Fedorę, możemy naciskać losowe klawisze (oczywiście te nieużywane przez oprogramowanie płyty głównej) w pierwszych sekundach rozruchu komputera, co zmusi bootloader do pokazania menu wyboru pozycji. Alternatywnie możemy po prostu dodać opcję timeout
w pliku loader.conf
.
Z poziomu działającego Arch Linuksa można wykorzystać funkcję o nazwie „oneshot”. Wywołane w terminalu polecenie bootctl set-oneshot fedora
sprawi, że przy następnym uruchomieniu komputera systemd-boot wystartuje pozycję systemu Fedora, a nie domyślną, wynikającą z konfiguracji. Zachowanie to nie zostanie jednak zapisane na stałe — przy kolejnym uruchomieniu normalnie wystartuje Arch Linux. Polecenie bootctl set-oneshot
musi zostać uruchomione jako root, na przykład przez sudo
. W przeciwieństwie do innych składników projektu systemd, bootctl
nie próbuje podnieść sobie uprawnień przez PolicyKit.
Jest jeszcze inna możliwość — możemy upiec dwie pieczenie na jednym ogniu. Za pomocą jednego polecenia systemctl reboot --boot-loader-entry fedora
ustawimy „oneshot” i od razu dokonamy restartu maszyny. W odróżnieniu do poprzedniej komendy, systemctl reboot
zwykle nie wymaga podnoszenia uprawnień.
Zachowanie po restarcie maszyny
Pozostaje jeszcze kwestia zachowania się komputera po restarcie. Jako że system Arch Linux jest domyślny w konfiguracji systemd-boot, zostanie automatycznie uruchomiony po zrestartowaniu komputera niezależnie od tego, z poziomu którego systemu czynność restartu została rozpoczęta. Czy da się zrobić tak, żeby reboot z Fedory skutkował uruchomieniem Fedory?
Pomimo że Fedora domyślnie nie używa systemd-boot, istnieje w niej polecenie bootctl
, które może zapisać w pamięci UEFI informację odczytywaną przez nasz bootloader. Możemy skonfigurować Fedorę, by ustawiała sama siebie jako „oneshot” przy restarcie. W tym celu do pliku /etc/systemd/system/bootctl-fedora-oneshot.service
na Fedorze wrzucić możemy:
[Unit] Description=Set bootloader oneshot to Fedora DefaultDependencies=no [Service] Type=oneshot ExecStart=/usr/bin/bootctl set-oneshot fedora [Install] WantedBy=reboot.target
Usługę możemy włączyć za pomocą systemctl enable bootctl-fedora-oneshot.service
.
Rozwiązanie takie ma wadę: gdy zechcemy przełączyć się z Fedory do Arch Linuksa, musimy pamiętać, aby wyłączyć komputer, a nie uruchomić go ponownie.
Komentarze (3)
stała czytelniczka
Ciekawy poradnik!
slack
To GRUB Archa lub Fedory nie wykrywa drugiego systemu?
Tomasz Gąsior
Ogólnie GRUB ssie. Jest zbyt ogromny i skomplikowany pod względem konfiguracji. To jest główny powód, dla którego w ogóle poruszyłem temat systemd-boot.
Jak najbardziej GRUB potrafi wykryć inne systemy za pomocą osprobera. Zawsze wyłączam tę funkcję, bo uważam, że jest wadliwa by design — distro powinno zawsze samo zarządzać swoimi parametrami rozruchu i bootloaderem, a nie być bootloaderowane przez bootloader innego systemu.
Dodaj komentarz