Új disztribúció kipróbálása: Telepítés, Secure Boot, TPM beállítás + systemd-boot és Unified Kernel Image

Most próbáltam ki az Arch linux-ot, eddig nagyon tetszik. Pár dolgot szeretnék a blogba beleírni, amit egy év múlva én is elfelejtenék, és hátha valakinek hasznos lehet még.
Az egyes beállításokhoz érdemes az arch wiki cikkjeit alapul venni, ez inkább csak élménybeszámoló (és rövid jegyzet), hogy mire számíthat az ember az első pár lépés megtételekor.

Telepítés

A kézi telepítéshez kapcsolódó wiki oldal: https://wiki.archlinux.org/title/Installation_guide (ez a legmegbízhatóbb leírás).

Az arch linuxot a legegyszerűbb az arch install scripttel feltenni, itt egy felületen beállítható minden, és ugyanazokat a lépéseket futtatja le végül, mint ha az Arch wiki alapján kézi telepítést csinálnál.

Kikapcsoltam a BIOS-ban a secure boot-ot. Miután USB drive-ról betootoltam, a következő parancsokat adtam ki.
(Megjegyzés: Etherneten csatlakozik a gépem az Internethez, WIFI esetén az iwctl-lel még csatlakozni kellett volna a megfelelő hálózathoz.)

loadkeys hu
setfont Lat2-Terminus16
archinstall

A következő fontosabb beállításokat választottam ki:

  • magyar billentyűzet, magyar locale, UTF-8 enkódolás
  • BTRFS fájlrendszer, partícióhoz használt lemez, ajánlott layout, compression kikapcsolva, copy-on-write bekapcsolva.
  • LUKS titkosítás a fájlrendszert tartalmazó partíción, jelszóval
  • Minimal profile
  • SWAP on ZRAM: igen
  • systemd-boot bootloader
  • Unified kernel: igen
  • Sima linux kernel (az LTS-t később tettem fel)
  • Europe/Budapest timezone
  • NTP bekapcsolva

A rendszer ezután kb 1-2 perc alatt feltelepült, utána azt választottam, hogy szeretnék még a chroot-olt környezetbe belépni, és telepíteni. Kb a következőket tettem fel:

pacman -S linux-headers nvidia-dkms nvidia-utils
pacman -S bluez bluez-utils
pacman -S networkmanager network-manager-applet
pacman -S gnome gnome-tweaks firefox gedit
pacman -S intel-ucode sbctl vim

Kb ennyit, ha valami hiányzott azt menet közben feltettem.

A systemctl enable-t itt a chroot-olt könyvtárban nem lehet futtatni, ezért újrainítottam a gépet (exit, reboot), és engedélyeztem a szolgáltatásokat:

systemctl enable bluetooth
systemctl enable NetworkManager
systemctl enable gdm
reboot

A telepítés kb ennyi volt.

Secure boot

Ezután jött a secure boot engedélyezés, kapcsolódó wiki: https://wiki.archlinux.org/title/Unified_Extensible_Firmware_Interface/Secure_Boot

A bios-ban a secure boot-ot kikapcsolva hagytam, és custom-ra állítottam, és az összes meglévő kulcsot, és secure boot változót töröltem (ezzel setup módba került a secure boot).

Bebootoltam az arch linux-ba, és ott root felhasználóval:

1. Ellenőrzés

sbctl status

Itt azt kell látni, hogy a secure boot ki van kapcsolva, és setup módban van, nincs kulcs.

2. Kulcs generálás

sbctl create-keys

3. Kulcs betöltése a Bios/UEFI keystore-jaiba

sbctl enroll-keys -m

A -m -mel a microsoft kulcsokat is feltöltöttük, ha jól értem, akkor ez dual bootnál is jól jön, illetve az összes Microsoft által aláírt komponensnél.

4. Ellenőrzés:

sbctl status

Itt azt kell látni, hogy még mindig ki van kapcsolva a secure boot, de fel van töltve kulcs, és a vendor keys: microsoft.

5. Fájlok aláírása

sbctl verify 

Ez ki fogja listázni az összes fájlt, amit alá kell írni, és ami már alá van írva.

Ezeket egyesével alá lehet írni, nekem a következők voltak:

sbctl sign -s /boot/EFI/BOOT/BOOTX64.EFI
sbctl sign -s /boot/EFI/Linux/arch-linux.efi
sbctl sign -s /boot/EFI/Linux/arch-linux-fallback.efi
sbctl sign -s /boot/EFI/systemd/systemd-bootx64.efi
sbctl sign -s /boot/vmlinuz-linux

a -s kapcsoló miatt el is menti az sbctl a fájl elérést, és ha legközelebb szükséges lesz, akkor automatikusan újra aláírja a fájlokat.

6. Plusz, még egy aláírás

sbctl sign -s -o /usr/lib/systemd/boot/efi/systemd-bootx64.efi.signed /usr/lib/systemd/boot/efi/systemd-bootx64.efi

Ha systemd-boot-ot használunk, akkor ez csomag frissítés után csak újraindítást követően frissül a helyére. De így a signed verziót fogja befrissíteni a rendszer, ha talál ilyen fájlt. 

7. Teszt

Ezután vissza lehet kapcsolni a secure boot-ot, és működnie kell. Ezt utána az sbctl status-sal, és a bootctl paranncsal is lehet ellenőrizni. Tehát ezen a ponton engedélyezve van a secure boot, alá vannak írva a bootoláshoz szükséges fájlok (és működik az nvidia driver is).

Titkosítás feloldása TPM2 segítségével

Most minden booltáskor be kell írni a jelszót, amit a rendszer partíció titkosításához adtunk meg. Az ehhez szükséges kulcsot fel lehet tölteni TPM-be, hasonlóan, ahogy Windows alatt a bitlock csinálja.

Kapcsolódó wiki:

1. Fel kell telepíteni a tpm2-tss csomagot

pacman -S tpm2-tss

2. TPM eszközök listázása

systemd-cryptenroll --tpm2-device=list

3. Kulcs hozzáadása a TPM-hez

systemd-cryptenroll --tpm2-device=auto /dev/nvme0n1p2

A gépemben a /dev/nvme0n1p2 a tikosított partíció. A parancs be fogja kérni a jelszót, amit a gép feloldáskor is meg kell adni.

4. /etc/crypttab.initramfs módosítása (/létrehozása)

A /etc/crypttab.initramfs fájlba a következőt kell beleírni:

root  UUID=<UUID>  none  tpm2-device=auto

Ahol az <UUID> értéke a következő lesz:

lsblk -fs

A gépemen a parancs kimenete így néz ki:

NAME        FSTYPE      FSVER LABEL UUID     FSAVAIL    FSUSE%  MOUNTPOINTS
zram0       swap        1     zram0 <UUID1>                     [SWAP]
root        btrfs                   <UUID2>  935,4G     2%      /home
│                                                               /var/cache/pacman/pkg
│                                                               /var/log
│                                                               /.snapshots
│                                                               /
└─nvme0n1p2 crypto_LUKS 2           <UUID3>                
  └─nvme0n1                                                                             
nvme0n1p1   vfat        FAT32       <UUID4>  521,4M     49%     /boot
└─nvme0n1

Az <UUID1-4> egy konrkét UUID. A titkosított partíció UUID-ét kell megadni a crypttab.initramfs fájlba.
(Nálam pl az nvme0n1p2 (FSTYPE=crypto_LUKS) melletti UUID-t kell)

5. /etc/mkinitcpio.conf módosítása

Módostani kell a /etc/mkinitcpio.conf fájlban a HOOKS felsorolást, bele kell tenni a systemd, és az sd-encrypt hook-ot, valamint törölni kell az encrypt hook-ot.

Nekem ez volt az eredeti sor:

HOOKS=(base udev autodetect microcode modconf kms keyboard keymap consolefont block encrypt filesystems fsck)

Erre módosítottam:

HOOKS=(base systemd autodetect microcode modconf kms keyboard sd-vconsole sd-encrypt block filesystems fsck)

6. initramfs, és a unified kernel image újraépítése

mkinitcpio -P

7. Reboot, teszt

... és ha semmit nem hagytam ki, akkor jelszó nélkül be kell bootolnia a gépnek. :)

LTS kernel telepítése

Jól jöhet még, egy update után, ha valami probléma van. (Az archinstall-lal is fel lehetett volna tenni.)

1. Telepítés

pacman -S linux-headers-lts linux-lts

2. /etc/mkinitcpio.d/linux-lts.preset módosítása

A /etc/mkinitcpio.d könyvtárban létrejött egy linux-lts.preset fájl, de sajnos még nem jó a tartalma. Ezt módosítani kell (a linux.preset-ből lehet puskázni):

#ALL_config="/etc/mkinitcpio.conf"
ALL_kver="/boot/vmlinuz-linux-lts"

PRESETS=('default' 'fallback')

#default_config="/etc/mkinitcpio.conf"
#default_image="/boot/initramfs-linux-lts.img"
default_uki="/boot/EFI/Linux/arch-linux-lts.efi"
default_options="--splash /usr/share/systemd/bootctl/splash-arch.bmp"

#fallback_config="/etc/mkinitcpio.conf"
#fallback_image="/boot/initramfs-linux-lts-fallback.img"
fallback_uki="/boot/EFI/Linux/arch-linux-lts-fallback.efi"
fallback_options="-S autodetect"

3. initramfs, és a unified kernel image újraépítése

mkinitcpio -P

4. reboot, és ellenőrzés

A systemd-boot meg fogja találni az LTS kernelt, ha minden rendben ment. (és az nvidia driver is működik)

Zárszó

Örülök hogy megoszthattam ezeket. Megérte belevágni a kísérletezésbe, érdekes volt új megoldásokat látni: pl az mkinitcpio-t a dracut helyett, a systemd-boot-ot a grub helyett, vagy a unified kernel image-eket. Köszi, hogy elolvastad. :)

Hozzászólások

subs, openSUSE Tumbleweed-en lehet hogy megpróbálnám majd. Még nem tudom.

echo crash > /dev/kmem