Eida.cz - Čistý Debian na Raspberry Pi 4

Čistý Debian na Raspberry Pi 4

Eida

Malinové přístroje jsou mocné. Není mi moc dobře, kočíku, tak svůj obvyklý úvod plný vtipných zmínek o broucích zkrátím jen na to, že jsem dostal od divokého studenta dotaz, kterak pro RPi4 dostat na jediný USB-připojený SSD celý co nejjednodušší systém, ideálně čistý Debian pro obecné aarch64, a na zbytku disku vytvořit transparentní btrfs kapsičku pro pozdější využití. Tím bude minecraftový server, ale to není na pořadu dnešního kočičího rozjímání u kávy. Chtělo by to ještě svíčku a nějakou podkresovou hudbu, ale nenadělám nic.

Přijde mi trochu zvláštní, že to vlastně nikde není pořádně popsané v češtině. Vycházet budeme ze především z toho, že máme jednak odpovídající Raspberry Pi počítač ve variantě 4 B+ s poslední aktualizací eeprom, která umožňuje pohodlně bootovat z USB, pak samotný a úplně prázdný SSD disk, na který se to vše bude instalovat, a v neposlední řadě ještě speciální alespoň 512MB USB flashdisk, který bude sloužit jako zvláštní instalační médium. Ono by to totiž šlo dělat přímo na tom SSD a třeba by se tím dalo zbavit několika jiných starostí, ale představa, že se bude Píčko chovat v tomto případě jako úplně normální počítač, tak ta je prostě lákavá.

Potřebovat stáhnout z Internetu budeme jen dvě věci (tedy než začne stahování v instalátoru) – oficiální arm64 netinst obraz Debianu 11 (na webu projektu) a pak obrazy oficiálního EDK2 RPi4 UEFI firmware, které jsou na GitHubu v pftf/RPi4, konkrétně rovnou připravené jako zip archiv v Releases. Víc opravdu není potřeba. Legrace ale začíná ve chvíli, kdy to bude potřeba nějak zkompletovat.

Máme staženo, je potřeba připravit si instalační flashdisk. Neumím si představit, jak začít s něčím takovým na Windows, to by asi chtělo odvahu, takže se budeme pohybovat v prostředích macOS a Linux. Prvním krokem je vytvoření prázdné GUID tabulky na flashdisku, v mém případě dostal 16GB flashdisk číslo 6. Nejdřív na něm pro jistotu smažeme všechny tabulky.

% diskutil unmountDisk disk6
% sudo gpt destroy /dev/disk6

Což by se mělo projevit potvrzením, že je flashdisk skutečně prázdný.

% sudo diskutil list
/dev/disk6 (external, physical):
#: TYPE NAME SIZE IDENTIFIER
0: *15.5 GB disk6

A následně vytvoříme novou, prázdnou GPT.

% sudo gpt create /dev/disk6

Do ní je potřeba přidat EFI oddíl s odpovídajícím UUID/typem; pro instalátor bude stačit velikost okolo 350 MB, ale pro jistotu bych tam dal třeba 520 MB, kdyby bylo potřeba ještě něco navíc. Příkaz gpt v macOS bere jako jednotku sektory, na flashdisku je jeden sektor velký 512 bajtů, takže pro 520MB oddíl bude použito celkem 1 064 960 sektorů. Oddíl by měl být označený jako disk6s1, je potřeba ho naformátovat jako FAT32.

% sudo gpt add -t efi -s 1064960 /dev/disk6
% sudo newfs_msdos -F 32 /dev/disk6s1

Obdobně jako ve Windows, v macOS nejsou oddíly EFI vidět, ale na rozdíl od Windows není problém je připojit pro čtení i zápis. Samozřejmě ne graficky, takže nebudou ve /Volumes, ale kdekoliv si přímo řekneme:

% cd /tmp/
% mkdir usb
% sudo mount -t msdos /dev/disk6s1 usb

A teď to už bude poměrně hračka. Na flashdisk do takto připojeného oddílu jednoduše zkopírujeme obsah obou dříve stažených položek – rozbalený obraz s EDK2 a obsah CDčka instalátoru debianu, a to hlavně se skrytým adresářem .disk. Toto CDčko ze zřejmých důvodů není možné připojit jako obraz, proto je nejsnazší ho přímo rozbalit na USBčko nástrojem bsdtar.

% cd /tmp/usb
usb % bsdtar xf ~/Downloads/debian-11.5.0-arm64-netinst.iso
usb % bsdtar xf ~/Downloads/RPi4_UEFI_Firmware_v1.33.zip

No a jakmile to přestane blikat a dokončí se zápis z bufferů, flashdisk je možné odpojit a jít se konečně radovat k opravdovému RPi 4.

% cd ..
% sudo umount usb

Tento proces připravil flashdisk k přímému startu klasického instalátoru Debianu, přičemž namísto CD se použil oddíl s příznakem esp a boot; s pomocí nahraných obrazů EDK2 by se po startu s připojeným flashdiskem mělo už ukázat malinové logo a následně hned GRUB s položkami instalátoru. Ačkoliv je proces instalace poměrně přímočarý, doporučuji zvolit Expert install a projít si to krok za krokem.

Je dost pravděpodobné, že instalátor hned po rozpoznání instalačního média začne křičet, že je potřeba nějaký nesvobodný firmware. Ano, ale v tento okamžik to není důležité, takže tuto volbu je možné přeskočit a zamyslet se hned nad rozdělením disků. Pokud je vše připojené správně, běží vše z prvního usb a druhé usb by mělo reprezentovat velké rychlé SSD. Protože mám špatnou zkušenost s chováním instalátoru, vždycky nejprve po zvolení konkrétního disku vyberu volbu Asistované rozdělení – použít celý disk. Z nějakého důvodu totiž těžko věřím tomu, že by se ručně povedlo správně nastavit GPT a hlavně první EFI oddíl s esp, což tady bude důležité. Dál bych doporučil použít pro systém nějaký lehčí souborový systém, než jakým je výchozí Ext4. JFS je rozumná volba pro většinu použití, velikost kořenového systému na specializované nasazení by měla při 5 GB být až až, ale to je asi na každém, swap na Pi taky není moc důležitý (a v případě MC ani užitečný), každopádně ten největší kousek by připadl na btrfs, třeba s mountem na /server, kde zatím ale není možné nastavit žádné optimalizační příznaky.

Všechno by mělo jít hladce až do bodu, kde se instaluje GRUB – myslím, že není nebzytně nutné vynutit instalaci GRUBu do cesty pro výměnná média, můžeme se s tím poprat totiž docela pohodlně později. Pokud je hotovo, je čas na konec instalace a restart. Nový systém... pochopitelně nenaběhne, protože je ještě předtím potřeba dokrmit nově vzniklý esp oddíl EDK2 firmwarem. Instalátor má busybox, což by mělo stačit na něco jako

# cd /tmp/
# mkdir efi
# mount -t vfat /dev/sdb1 efi
# cd efi
# wget https://github.com/pftf/RPi4/releases/download/v1.33/RPi4_UEFI_Firmware_v1.33.zip | busybox unzip -

a tím by mělo být vymalováno. Vlastně ještě pořád ne. Po rebootu se sice ukáže malinové logo, ale systém nenaběhne. Jakmile se to tedy začne ukazovat, pomocí Esc je nutné vlézt do nasatvení UEFI a udělat ještě dvě zásadní změny. Tou první je povolení celé operační paměti, což je z nějakého důvodu ve výchozím stavu vypnuté – ve volbě Device managerRaspberry Pi ConfigurationAdvanced configuration je položka Limit RAM to 3 GB. Tu je potřeba změnit na Disabled. Nu a pak ještě ten boot. V hlavní nabídce, podobně jako bylo nastavení zařízení, je ještě menu Boot maintenance manager. V něm jsou pak možnosti Boot optionsAdd boot option. Jelikož by mělo být připojené pouze jedno SSD, bude tam jediný vstup. V něm je pak struktura EFI/debian a jako konkrétní bod grubaa64.efi. Ten stačí vybrat, přidělit mu nějaký normální název (třeba Debian), uložit a následně ho ještě klávesou + přesunout na první místo v menu Boot optionsChange boot order.

Systém by měl už bez větších problémů naskočit. Nejdříve do GRUBu, z něj pak přímo do nového. Jupí, všichni jásají. Poslední, víceméně kosmetická položka, je ještě zprovoznění firmware pro bezdrátové prvky. Jako root stačí vlézt do /lib/firmware/, kam přijde zkopírovat prkatický celý adresář brcm z firmware původního archivu s EDK2. Je tam ještě jeden háček, soubor v sobě správně potřebuje nést mezery, ale měli jsme to na FATce se spoustou omezení a instalátor to taky neumí, tudíž to vyžaduje jednoduché přejmenování:

# cd /lib/firmware
# cp -r [původní brcm adresář] ./
# mv brcm/brcmfmac43455-sdio.Raspberry "brcm/brcmfmac43455-sdio.Raspberry Pi Foundation-Raspberry Pi 4 Model B.txt"

Což je vlastně už úplně všechno. Tadá, systém běží a může už konečně rulovat a sloužit jakémukoliv novému účelu. Pevně věřím, že to všechny potěší a udělá radost, když malé maliny začnou zářit skutečnými operačními systémy a ne jen předpřipravenými SD-kartovými bloby.

Tento článek přečetlo již 167 čtenářů (0 dnes).

Komentáře

Nový komentář