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 GPTn
,invio
,invio
,+500M
per creare una partizione di 500MBt
,1
per impostarne il tipo inEFI
n
,invio
,invio
per creare una partizione con tutto lo spazio rimanentet
,43
per impostarne il tipo inLinux LVM
p
per controllare che tutto sia a postow
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=it
nel file /etc/vconsole.conf
per 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
and 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.