Al momento stai visualizzando Installare Arch Linux con full-disk-encryption

Installare Arch Linux con full-disk-encryption

In questa guida vedremo come installare Arch Linux cifrando l’intero disco con LUKS. Come bootloader utilizzeremo systemd-boot e come ambiente grafico KDE Neon con SDDM su Xorg. La mia CPU è Intel con grafica integrata.
Essendo una distro rolling release, alcuni dettagli potrebbero variare nel corso del tempo. Cercherò di tenerla aggiornata quanto possibile (serve anche a me) ma consiglio comunque di confrontarla con la pagina della wiki. Ovviamente come ogni buon utente di questa distribuzione siete liberi di personalizzarla e installarci tutto il software che volete.

Ottenere Arch

Invece che scaricare la solita immagine .iso da copiare sulla chiavetta e verificare, un metodo più figo è quello di utilizzare NetBoot. In pratica basta scaricare questo piccolo file e copiarlo su una chiavetta formattata in fat32 o nella stessa partizione EFI dell’SSD che stiamo per formattare. A questo punto è possibile eseguirlo dal menù delle impostazioni UEFI se il computer ve lo permette, oppure dall’attuale installazione eseguite:

sudo efibootmgr --create --disk /dev/sda1 --part 1 --loader /EFI/arch_netboot/arch_netboot.efi --label "Arch Linux Netboot" --verbose

ovviamente cambiando nomi e partizioni a seconda di dove avete messo il file.

Benissimo, a questo punto riavviate, assicuratevi che il Secure Boot sia disattivo e collegate un cavo ethernet (è necessario un server DHCP e dei DNS funzionanti). Vi troverete difronte ad una schermata blu con un menù da dove potete scegliere la release (ovviamente lasciate la più recente) e il mirror da dove scaricarla. Scegliete quello che più vi aggrada e poi selezionate Boot Arch Linux. Dopo pochi secondi vi troverete nell’ambiente live in una shell zsh con privilegi di root. Potete anche scollegare il supporto che avete utilizzato per eseguire NetBoot.

Se state leggendo questa guida probabilmente vorreste avere il layout della tastiera italiano:

loadkeys it

Controlliamo che internet sia raggiungibile, anche se dovrebbe essere scontato avendo fatto il boot da rete:

ping quellochevuoi.com

Manteniamo aggiornato l’orario di sistema:

timedatectl set-ntp true

Partizionamento

Per identificare il disco eseguiamo lsblk oppure fdisk -l. Sarà del tipo sdX, nvmeXnY oppure mmcblkX. Se vogliamo liberarci del vecchio contenuto dell’SSD possiamo istruire il TRIM di azzerare tutta la memoria attraverso il comando:

blkdiscard -f /dev/sdX

L’idea è di creare due partizioni. La prima di tipo EFI Boot di 500 MB, e la seconda di tipo Linux LVM occupante il resto del disco. La partizione di swap sarà cifrata all’interno dell’LVM. Possiamo procedere in maniera interattiva con:

fdisk /des/sdX
  • g per creare una nuova tabella partizioni GPT
  • n, invio, invio, +500M per creare una partizione di 500MB
  • t, 1 per impostarne il tipo in EFI
  • n, invio, invio per creare una partizione con tutto lo spazio rimanente
  • t, 43 per impostarne il tipo in Linux LVM
  • p per controllare che tutto sia a posto
  • w salva ed esci

Ora dobbiamo criptare la partizione LVM:

cryptsetup luksFormat /dev/sdX2

Verrà chiesto di scrivere YES in lettere maiuscole e di scegliere una password. Ovviamente non dimenticatela perchè servirà ogni volta che avvierete il PC. Ora dobbiamo aprire il dispositivo appena creato:

cryptsetup open --type luks /dev/sdX2 VolumeCifrato

Potete scegliere qualsiasi nome, l’importate è che ve lo ricordiate. Inserite la password scelta precedentemente. Potete controllare in qualunque momento con lsblk. Creiamo il volume fisico (cambiate VolumeCifrato a seconda di come lo avete chiamato):

pvcreate --dataalignment 1m /dev/mapper/VolumeCifrato

Creiamo un gruppo di volumi (anche qui ci vuole fantasia):

vgcreate GruppoCifrato /dev/mapper/VolumeCifrato

E finalmente le partizioni al suo interno:

lvcreate -L 8G GruppoCifrato -n swap
lvcreate -l 100%FREE GruppoCifrato -n root

Qui è piacere vostro creare la swap, sceglierne la dimensione e potete anche creare una partizione home per i file degli utenti.

Passiamo ora a formattare tutte le partizioni che abbiamo appena creato:

mkfs.fat -F 32 -n EFI /dev/sdX1
mkfs.ext4 -L Root /dev/GruppoCifrato/root
mkswap /dev/GruppoCifrato/swap

E le montiamo:

mount /dev/GruppoCifrato/root /mnt
mkdir /mnt/boot
mount /dev/sdX1 /mnt/boot
swapon /dev/GruppoCifrato/swap

Installazione

Prima di tutto è consigliabile aggiornare la lista dei mirror di pacman scegliendo i più veloci e aggiornati rispetto alla nostra posizione:

reflector --save /etc/pacman.d/mirrorlist --country IT,FR,DE --protocol https --latest 10 --sort rate

Il file verrà copiato automaticamente da pacstrap nel sistema installato. Ora possiamo installare i pacchetti base, il kernel di nostra preferenza, un editor di testo e altre cose tra cui lvm2:

pacstrap /mnt base base-devel linux-zen linux-firmware lvm2 nano

Generiamo il file di fstab utilizzando gli UUID:

genfstab -U /mnt >> /mnt/etc/fstab

Se volete controllatelo. Proseguiamo cambiando la root con il sistema appena installato:

arch-chroot /mnt

Installiamo altri pacchetti che ci serviranno in futuro (sostituite intel-ucode con amd-ucode a seconda della vostra CPU):

pacman -Suy sudo linux-zen-headers intel-ucode networkmanager efibootmgr fwupd

Lingua e zona

Impostiamo la regione:

ln -sf /usr/share/zoneinfo/Europe/Rome /etc/localtime
hwclock --systohc

Modificate /etc/locale.gen e decommentate it_IT.UTF-8 UTF-8 . Eseguiamo locale-gen

Creiamo il file /etc/locale.conf srivendoci dentro LANG=it_IT.UTF-8

Scriviamo KEYMAP=itnel file /etc/vconsole.confper impostare il layout di tastiera nella console.

Rete

Impostiamo l’hostname del PC scrivendolo nel file /etc/hostname

Compiliamo il file /etc/hosts:

127.0.0.1	localhost
::1		localhost
127.0.1.1	IlMioHostName.localdomain	IlMioHostName

Bootloader

Modifichiamo il file /etc/mkinitcpio.conf. Nella sezione HOOKS dobbiamo spostare keyboard e aggiungere encrypt e lvm2:

HOOKS=(base systemd autodetect modconf block keyboard sd-encrypt lvm2 filesystems fsck)

Rigeneriamo l’initramfs:

mkinitcpio -P

Come bootloader ho scelto systemd-boot per la sua semplicità ed anche perché è già incluso in systemd:

bootctl --path=/boot/ install

Configuriamolo modificando il file /boot/loader/loader.conf:

default arch
timeout 0
editor 0

timeout 0 significa che non comparirà il menù all’avvio (cambiatela a vostro piacimento) e editor 0 disabilita la modifica. Ora aggiungiamo la voce di boot in /boot/loader/entries/arch.conf:

title Arch Linux
linux /vmlinuz-linux-zen
initrd /intel-ucode.img
initrd /initramfs-linux-zen.img
options cryptdevice=UUID={UUID}:cryptlvm root=/dev/GruppoCifrato/root rw

Sostituite GruppoCifrato con il nome che avete scelto prima, intel o amd a seconda della vostra CPU e {UUID} con l’UUID di sdX2. Per farlo senza impazzire potete usare:

blkid /dev/sdX2 >> /boot/loader/entries/arch.conf

e poi cancellare le parti superflue con nano.

Possiamo creare anche la voce di fallback:

cp /boot/loader/entries/arch.conf /boot/loader/entries/arch-fallback.conf

e poi modifichiamola:

title Arch Linux fallback
linux /vmlinuz-linux-zen
initrd /intel-ucode.img
initrd /initramfs-linux-zen-fallback.img
options cryptdevice=UUID={UUID}:cryptlvm root=/dev/GruppoCifrato/root rw

Controlliamo che sia stata installata la voce Linux Boot Manager nel firmware UEFI utilizzando efibootmgr.
Se notiamo qualche voce non più necessaria come quella di netboot che abbiamo creato all’inizio o il bootloader di Windows risalente ad una vecchia installazione possiamo cancellarli con:

efibootmgr -b N -B

dove N è il numero esadecimale della voce che vogliamo eliminare. Se non siete sicuri potete fare questa operazione in seguito, se qualcosa dovesse andare storto durante il primo riavvio non potrete più avviare la live con NetBoot.

Utente

Creiamo un nuovo utente amministratore e gli impostiamo una password:

useradd -m -G wheel utonto
passwd utonto

ora dobbiamo modificare visudo per permettere agli utenti del gruppo wheel di usare sudo:

EDITOR=nano visudo

decommentando %wheel ALL=(ALL) ALL

Riavvio

Usciamo dall’ambiente di chroot, smontiamo i dischi e riavviamo incrociando le dita di aver fatto tutto bene:

exit #oppure Ctrl-d
umount -R /mnt
reboot

Se tutto è filato liscio ci verrà chiesta la password per sbloccare il disco. Una volta inserita ci ritroveremo nella console. Effettuiamo il login con l’utente appena creato. Da ora in poi non saremo più root quindi dobbiamo ricordarci di sudare.

Avviamo NetworkManager per poter scaricare altri pacchetti.

sudo systemctl enable --now NetworkManager

Giusto per orgoglio utilizziamo i server NTP dell’INRiM di Torino. Per farlo modifichiamo il file /etc/systemd/timesyncd.conf e inseriamo NTP=ntp1.inrim.it ntp2.inrim.it
timedatectl set-ntp true per attivare la sincronizzazione.

Ambiente grafico

Qui ovviamente potete scegliere quello che più vi aggrada. Io installo Plasma con Xorg e altri pacchetti utili.

sudo pacman -Syu xorg-server sddm plasma-meta noto-fonts-emoji git packagekit-qt5 power-profiles-daemon alsa-utils kamoso vlc curl wget htop screen zsh

Per quanto riguarda le applicazioni di KDE, invece che installarle tutte con kde-application-meta, preferisco scegliere solo quelle che mi interessano oppure installare una sottocategoria guardando le sue dipendenze.

Avviamo il display manager:

sudo systemctl enable --now sddm.service

Effettuiamo il login grafico e ci ritroveremo in una sessione di Plasma. Volendo possiamo già abilitare il Bluetooth e il demone che gestisce i profili energetici:

sudo systemctl enable power-profiles-daemon.service
sudo systemctl enable bluetooth

Driver grafico

Possiamo installare i driver grafici proprietari o open-source adatti alla nostra scheda video. Per la mia Intel:

sudo pacman -Syu mesa intel-media-driver vulkan-intel intel-gpu-tools libva-utils

aggiungere i915 ai MODULES in /etc/mkinitcpio.conf e poi rigenerarlo con mkinitcpio -P

AUR

Installiamo yay, un gestore degli AUR:

git clone https://aur.archlinux.org/yay.git
cd yay
makepkg -si
cd ..
rm -rf yay

Plymouth

Se vogliamo avere un avvio più estetico dei semplici log di systemd possiamo installare plymouth dagli AUR.

yay -S plymouth-git

aggiungerlo agli HOOK in /etc/mkinitcpio.conf e cambiamo encrypt in plymouth-encrypt:

HOOKS=(base systemd sd-plymouth autodetect modconf block keyboard plymouth-encrypt lvm2 filesystems fsck)

rigenerarlo con mkinitcpio -P

Modificare il file /boot/loader/entries/arch.conf appendendo nei parametri del kernel quiet loglevel=3 rd.udev.log_level=3 splash vt.global_cursor_default=0

Se volessimo una sequenza di avvio senza alcuna scritta possiamo nascondere i messaggi del kernel. Nel file /etc/sysctl.d/20-quiet-printk.conf scriviamo kernel.printk = 3 3 3 3

Per cambiare l’animazione di avvio spinner possiamo utilizzare plymouth-set-default-theme -l per vedere quali sono installati e sudo plymouth-set-default-theme BGRT per applicarne uno diverso. BGRT, per esempio, mostra il logo della scheda madre con sotto l’animazione di caricamento (alla Windows per intenderci). Ricordatevi di ricostruire l’initramfs ad ogni cambiamento per vederlo applicato.

Conclusioni

Questo è quanto, ora tocca a voi installare e configurare il software che volete utilizzare secondo i vostri gusti. Per esempio come shell mi piace usare zsh con Oh My Zsh. Oppure non installarne alcuni: nella guida ci sono molti pezzi che possono essere tralasciati o sostituiti con altri che magari sapete utilizzare meglio o che semplicemente preferite.
Uno step successivo potrebbe essere quello di sbloccare automaticamente il disco cifrato all’avvio senza alcuna password e mantenere lo stesso un alto livello di sicurezza installando la chiave nel TPM.
Per qualsiasi problema la wiki e la community saranno lieti di aiutarvi.