UEFI + BIOS bootowalny na żywo Debian stretch amd64 z trwałością


20

Wszystkie informacje, które obecnie znajduję na ten temat, są niewystarczające dla mojego gustu. Jest albo przestarzały, mylący, a nawet niewłaściwy, wydaje się zbyt skomplikowany lub nie obejmuje tego konkretnego pytania.

Cele:

  • rozruchowy dysk USB (obsługiwany zarówno UEFI, jak i starszy BIOS)
  • (na podstawie) na żywo Debian 9 (odcinek)
  • trwałość (domyślnie i dla UEFI i starszego systemu BIOS)
  • Niemiecki układ klawiatury domyślnie
  • nadaje się do rozwiązywania problemów z innymi systemami GNU / Linux

Powody:

  • konieczność ustawienia układu klawiatury przy każdym użyciu to prawdziwy ból głowy
  • Brakuje cryptsetup i efibootmgr w domyślnych obrazach na żywo Debiana
  • gnome-terminal ma domyślnie to irytujące białe tło

Brak rozwiązań:

  • (re) budowanie niestandardowego obrazu na żywo Debiana (wydaje się nudne, chociaż go jeszcze nie próbowałem)
  • unetbootin (pyta o nieznane hasło podczas uruchamiania na debian stretch i myślę, że i tak nie obsługuje UEFI)
  • jakiś zagraniczny zautomatyzowany proces, w którym nie widzę, co się dzieje

Obrazy Live i instalacyjne Debiana są izohybrydowe i można je wygodnie zapisywać w celu blokowania urządzeń dd. I działają z takich napędów USB, co jest bardzo miłe! Jednak domyślnie nie będzie trwałości i nie będzie sposobu, aby zacząć od nieanglojęzycznego układu klawiatury bez edytowania konfiguracji grub i isolinux, która jest zawarta w systemie plików ISO9660 tylko do odczytu obrazu ISO na żywo. Nawet po zapisaniu obrazu ISO na żywo na dysku USB parametrów tych nadal nie można zmienić.

Odpowiedzi:


30

Oto sposób na stworzenie trwałego napędu USB Debiana. Pozwoli to zainstalować brakujące pakiety, które odtąd będą dostępne na każdym rozruchu na żywo przy użyciu trwałości. Ponieważ ponownie tworzymy zawartość systemu plików obrazu ISO na żywo w systemie plików z możliwością odczytu i zapisu, możemy zmienić konfiguracje programu ładującego, aby włączyć trwałość i ustawić układ klawiatury podczas rozruchu.

Opisane tutaj kroki zostały przetestowane pod kątem pracy na odcinku i pogromcy Debiana, aby stworzyć obraz na żywo odcinka Debiana.

W grę wchodzi wiele etapów, ale wydaje się, że ta metoda jest nadal dość wydajna.

Oświadczenie: utracisz dane na docelowym dysku USB, a jeśli zepsujesz poniższe polecenia, możesz później bardzo żałować. Nie jestem odpowiedzialny za twoje działania.

Czuję się szczęśliwy

Jeśli masz dzisiaj szczęście, możesz wypróbować skrypt bash automatyzujący ten proces. Podaj ścieżkę obrazu ISO jako pierwszy parametr, a nazwę urządzenia blokującego napęd USB jako drugi. Zauważ, że ten skrypt jest niesamowicie niebezpieczny i nie powinieneś go wykonywać bez uprzedniego przeczytania i zrozumienia.

TL; DR

Pobierz obraz ISO na żywo Debiana, a następnie wykonaj następujące czynności:

umount /dev/sdX*
parted /dev/sdX --script mktable gpt
parted /dev/sdX --script mkpart EFI fat16 1MiB 10MiB
parted /dev/sdX --script mkpart live fat16 10MiB 3GiB
parted /dev/sdX --script mkpart persistence ext4 3GiB 100%
parted /dev/sdX --script set 1 msftdata on
parted /dev/sdX --script set 2 legacy_boot on
parted /dev/sdX --script set 2 msftdata on

mkfs.vfat -n EFI /dev/sdX1
mkfs.vfat -n LIVE /dev/sdX2
mkfs.ext4 -F -L persistence /dev/sdX3

mkdir /tmp/usb-efi /tmp/usb-live /tmp/usb-persistence /tmp/live-iso
mount /dev/sdX1 /tmp/usb-efi
mount /dev/sdX2 /tmp/usb-live
mount /dev/sdX3 /tmp/usb-persistence
mount -oro live.iso /tmp/live-iso

cp -ar /tmp/live-iso/* /tmp/usb-live

echo "/ union" > /tmp/usb-persistence/persistence.conf

grub-install --no-uefi-secure-boot --removable --target=x86_64-efi --boot-directory=/tmp/usb-live/boot/ --efi-directory=/tmp/usb-efi /dev/sdX

dd bs=440 count=1 conv=notrunc if=/usr/lib/syslinux/mbr/gptmbr.bin of=/dev/sdX
syslinux --install /dev/sdX2

mv /tmp/usb-live/isolinux /tmp/usb-live/syslinux
mv /tmp/usb-live/syslinux/isolinux.bin /tmp/usb-live/syslinux/syslinux.bin
mv /tmp/usb-live/syslinux/isolinux.cfg /tmp/usb-live/syslinux/syslinux.cfg

sed --in-place 's#isolinux/splash#syslinux/splash#' /tmp/usb-live/boot/grub/grub.cfg

sed --in-place '0,/boot=live/{s/\(boot=live .*\)$/\1 persistence/}' /tmp/usb-live/boot/grub/grub.cfg /tmp/usb-live/syslinux/menu.cfg

sed --in-place '0,/boot=live/{s/\(boot=live .*\)$/\1 keyboard-layouts=de locales=en_US.UTF-8,de_DE.UTF-8/}' /tmp/usb-live/boot/grub/grub.cfg /tmp/usb-live/syslinux/menu.cfg

umount /tmp/usb-efi /tmp/usb-live /tmp/usb-persistence /tmp/live-iso
rmdir /tmp/usb-efi /tmp/usb-live /tmp/usb-persistence /tmp/live-iso

Szczegółowo i z pewnym wyjaśnieniem

Będziesz musiał wykonać większość poniższych poleceń z podwyższonymi uprawnieniami, tj. Używając sudowiększości systemów GNU / Linux.

Pobieranie

Pobierz obraz ISO Debiana na żywo z wybranym menedżerem okien:

https://cdimage.debian.org/debian-cd/current-live/amd64/iso-hybrid/

Pobrany obraz ISO nazywamy po prostu „live.iso”.

Określ dysk docelowy

Znajdź urządzenie, z którego korzysta Twój dysk USB lsblk. Nazwiemy to /dev/sdX.

Odmontuj

Odmontuj istniejące partycje na dysku za pomocą umount /dev/sdX*

Utwórz partycje

Potrzebujemy partycji rozruchowej EFI, aby komputery z systemem UEFI mogły się uruchamiać z napędu USB. Następnie potrzebujemy wystarczająco dużej partycji, aby pomieścić oryginalną zawartość obrazu systemu plików ISO na żywo. Ta partycja musi mieć legacy_bootustawioną flagę. Następnie dodajemy partycję trwałości, zajmując całe pozostałe miejsce na dysku USB. Możesz to zrobić za pomocą dowolnego narzędzia do partycjonowania z obsługą GPT (pamiętaj o legacy_bootflagach). Oto przykład z użyciem parted:

parted /dev/sdX --script mktable gpt
parted /dev/sdX --script mkpart EFI fat16 1MiB 10MiB
parted /dev/sdX --script mkpart live fat16 10MiB 3GiB
parted /dev/sdX --script mkpart persistence ext4 3GiB 100%
parted /dev/sdX --script set 1 msftdata on
parted /dev/sdX --script set 2 legacy_boot on
parted /dev/sdX --script set 2 msftdata on

Tworzy to tabelę partycji GPT i ochronną tabelę partycji MBR.

Twórz systemy plików

Chcemy FAT na EFI i partycji na żywo, chcemy ext4na paradzie trwałości i wymagamy etykiety, persistenceaby funkcja trwałości działała.

mkfs.vfat -n EFI /dev/sdX1
mkfs.vfat -n LIVE /dev/sdX2
mkfs.ext4 -F -L persistence /dev/sdX3

Montowanie zasobów

Będziemy musieli zamontować źródłową ISO i docelowe partycje w tymczasowych punktach montowania.

mkdir /tmp/usb-efi /tmp/usb-live /tmp/usb-persistence /tmp/live-iso
mount /dev/sdX1 /tmp/usb-efi
mount /dev/sdX2 /tmp/usb-live
mount /dev/sdX3 /tmp/usb-persistence
mount -oro live.iso /tmp/live-iso

Zainstaluj system na żywo

Skopiuj zawartość systemu plików ISO na żywo na partycję LIVE.

cp -ar /tmp/live-iso/* /tmp/usb-live

persistence.conf

Przygotuj system plików trwałości z wymaganym plikiem konfiguracyjnym. Funkcja trwałości nie będzie działać bez tego pliku.

echo "/ union" > /tmp/usb-persistence/persistence.conf

Grub dla obsługi UEFI

Zainstaluj grub2, aby uzyskać obsługę rozruchu UEFI (wymaga to grub-efi-amd64-binpakietu w Debianie). Zmusimy grub-installdo nie używać bezpiecznego rozruchu UEFI, które najwyraźniej nie działa z --removableopcją.

grub-install --no-uefi-secure-boot --removable --target=x86_64-efi --boot-directory=/tmp/usb-live/boot/ --efi-directory=/tmp/usb-efi /dev/sdX

Syslinux do obsługi starszych systemów BIOS

Zainstaluj gptmbr.binbootloader syslinux na dysku (pobierz syslinux lub zainstaluj pakiet syslinux-common). Następnie zainstaluj syslinux na partycji na żywo.

dd bs=440 count=1 conv=notrunc if=/usr/lib/syslinux/mbr/gptmbr.bin of=/dev/sdX
syslinux --install /dev/sdX2

Poprawka Isolinux

Ponownie użyj konfiguracji isolinux oryginalnego obrazu ISO na żywo do pracy z syslinux.

mv /tmp/usb-live/isolinux /tmp/usb-live/syslinux
mv /tmp/usb-live/syslinux/isolinux.bin /tmp/usb-live/syslinux/syslinux.bin
mv /tmp/usb-live/syslinux/isolinux.cfg /tmp/usb-live/syslinux/syslinux.cfg

Parametry jądra

Teraz, gdy skopiowaliśmy pliki systemowe na żywo do rzeczywistego systemu plików do odczytu i zapisu, możemy manipulować konfiguracją grub i syslinux.

Dodaj parametr jądra trwałości do menu.cfgi grub.cfg. W obu plikach dodaj słowo kluczowe persistencena końcu odpowiedniego pierwszego wiersza z boot=livenim.

sed --in-place '0,/boot=live/{s/\(boot=live .*\)$/\1 persistence/}' /tmp/usb-live/boot/grub/grub.cfg /tmp/usb-live/syslinux/menu.cfg

Ustaw parametr jądra układu klawiatury. W obu plikach dodaj słowa kluczowe na końcu odpowiedniego pierwszego wiersza z boot=livenim.

sed --in-place '0,/boot=live/{s/\(boot=live .*\)$/\1 keyboard-layouts=de locales=en_US.UTF-8,de_DE.UTF-8/}' /tmp/usb-live/boot/grub/grub.cfg /tmp/usb-live/syslinux/menu.cfg

Grub splash

Napraw obraz powitalny grub (opcjonalnie; przenieśliśmy go do innego katalogu).

sed --in-place 's#isolinux/splash#syslinux/splash#' /tmp/usb-live/boot/grub/grub.cfg

Odmontowywanie i czyszczenie

umount /tmp/usb-efi /tmp/usb-live /tmp/usb-persistence /tmp/live-iso
rmdir /tmp/usb-efi /tmp/usb-live /tmp/usb-persistence /tmp/live-iso

Dlaczego to powinno działać zarówno dla UEFI, jak i BIOS

Podczas uruchamiania w trybie UEFI komputer przeskanuje partycje FAT zdefiniowane w tabeli partycji GPT. Pierwsza partycja FAT zawiera program ładujący GRUB UEFI, który został znaleziony, ponieważ znajduje się w ścieżce określonej przez UEFI dla dysków wymiennych ( --removableprzełączenie to grub-installzrobiło). Aby to zadziałało, nie jest wymagany wpis UEFI, wystarczy, że komputer spróbuje uruchomić komputer z napędu USB. Grub jest skonfigurowany do pobierania go z tego miejsca (załaduj grub.cfg, pokaż menu itp.).

Po uruchomieniu w trybie BIOS i wybraniu opcji rozruchu z napędu USB komputer wykona gptmbr.binkod bootloadera, który zapisaliśmy na ochronnym MBR napędu USB. Ten bootloader szuka partycji GPT oznaczonej legacy_bootflagą i chainload syslinux z tej partycji. Następnie Syslinux przejmuje (ładuje menu.cfg, pokazuje menu itp.).

Szyfrowana trwałość

Zamiast używać zwykłego ext4 na partycji trwałości, można najpierw zaszyfrować partycję trwałości za pomocą LUKS (za pomocą cryptsetup), a następnie sformatować ją za pomocą ext4 (za pomocą odpowiedniej etykiety). Jednak, jak wynika z dokumentacji , system na żywo musi zawierać cryptsetuppakiet. W przeciwnym razie zaszyfrowana partycja nie może zostać odszyfrowana przez system na żywo. Oznacza to, że najpierw trzeba zbudować niestandardowe ISO na żywo. Jest to jednak poza zakresem tej odpowiedzi.

Historia

Ta --no-uefi-secure-bootopcja wcześniej nie była częścią połączenia z grub-install. Stick działał dla mnie dobrze, ale zatrzymał się wraz z Buster Debiana, mimo że bezpieczne uruchamianie jest nadal wyłączone na moim komputerze.


1
Właśnie utworzyłem tutaj konto, aby Ci za to podziękować. Doskonała instrukcja obsługi. Mała sugestia - dobrze byłoby zaszyfrować partycję trwałości.
Petr Havlicek

1
@PetrHavlicek True. Myślę, że jest to dość łatwe, ale spędziłem wolny czas od stworzenia tego pytania i odpowiedzi z innymi problemami, więc wciąż muszę ponownie przemyśleć ten pomysł (i dziękuję za uznanie :).
schlimmchen

Działa świetnie! Przydałoby się jednak jakieś dodatkowe wyjaśnienie. (na pewno można to wszystko sprawdzić na stronach podręcznika, ale np. mktable, chociaż taki sam jak mklable, nie jest tak naprawdę udokumentowany jako taki itp.)
mikuszefski

Czy na dysku USB sformatowanym w FAT można mieć tylko plik zawierający wolumin trwałości? Powinno to być możliwe przez zamontowanie pliku w pętli. Ale jak powiedzieć Debianowi initrd, aby wziął plik zamiast partycji?
ceving

Zobacz debian-live.alioth.debian.org/live-manual/stable/manual/html/… . W skrócie: Utwórz plik obrazu (rzadki) w katalogu głównym dowolnego systemu plików, nazwij ten plik „trwałością” i sformatuj go, np. Za pomocą ext4.
schlimmchen
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.