Installare Arch Linux cifrando la partizione di root

Questa guida offre istruzioni dettagliate per l’installazione di Arch Linux, includendo la preparazione del disco, la configurazione delle partizioni e l’installazione del bootloader.

  ·   7 min read

Arch Linux è una distribuzione Linux creata da Judd Vinet secondo la filosofia KISS (Keep It Simple, Stupid).

Per la sua filosofia minimalista, l’installazione base non incorpora nessuno strumento di configurazione automatica, nessun ambiente desktop e nessun altro programma o tool che non sia strettamente necessario all’avvio del sistema; per questo non è indicata per coloro che non vogliono avere a che fare con la shell di comando. Inoltre, Arch Linux è una distribuzione rolling release: tutti i pacchetti disponibili per l’installazione sono sempre aggiornati all’ultima versione distribuita dagli autori.

In questa guida viene documentato il processo di installazione step-by-step su una VM, cifrando la partizione di root per garantire una maggiore sicurezza. Al termine, il sistema sarà configurato come segue:

Opzione Configurazione adottata
Crittografia disco Yes
Firmware UEFI
Tabella partizioni GPT
Boot loader GRUB / systemd-boot

Per ogni dubbio, si rimanda alla guida ufficiale.

Creazione della VM #

Per iniziare, procederemo con la creazione di una VM utilizzando Proxmox (o qualsiasi HV):

arch-vm

È possibile scaricare l’immagine ISO ufficiale direttamente dal sito di Arch Linux.

live-boot

Verifica della modalità di boot #

Questa guida presuppone l’uso di UEFI. Per verificare la modalità di boot, elencare la directory efivars con il comando:

ls /sys/firmware/efi/efivars

Se il comando restituisce 64, significa che il sistema è avviato in modalità UEFI a 64 bit (x64). Se, invece, il comando restituisce No such file or directory, il sistema potrebbe essere avviato in modalità BIOS (o CSM).

Connessione alla rete internet #

Per consentire alla VM di accedere a Internet, seguire i seguenti passaggi. Innanzitutto, verificare il nome dell’interfaccia di rete con il comando ip -c a.

Nel nostro caso, l’interfaccia é identificata come ens18. Procedere quindi ad assegnare un indirizzo IP statico e un gateway:

ip a a 10.10.1.11/24 dev ens18
ip r a default via 10.10.1.1 dev ens18

I vari parametri, dipendono dalla propria configurazione di rete.

efi-network

Impostare la timezone corretta #

Per assicurarsi che l’orologio di sistema sia sincronizzato, utilizzare il comando timedatectl:

timedatectl set-timezone Europe/Rome
timedatectl status

Partizionamento #

Quando riconosciuti dal sistema, i dischi vengono assegnati a un dispositivo a blocchi, come /dev/sda, /dev/nvme0n1 o /dev/mmcblk0. Per identificare il dispositivo corretto, utilizzare il comando lsblk -f.

Il layout finale del disco descritto in questa guida prevede due partizioni:

Partition Size fdisk code Name
Boot (/dev/sda1) 512.0 MiB 1 Partizione EFI
Root (/dev/sda2) Resto del disco 19 File system Linux

Una volta individuato il dispositivo, per creare la tabella e le relative partizioni, si consiglia l’uso di fdisk:

efi-partition

La sintassi è la seguente:

fdisk /dev/sda  # Per selezionare il dispositivo a blocchi indicato

All’interno di fdisk, è possibile utilizzare i seguenti comandi:

  • g: per creare una nuova tabella delle partizioni GPT
  • n: per creare una nuova partizione
  • t: per cambiare il tipo della partizione
  • w: per scrivere le modifiche sul disco

Partizione di root crittografata #

Per crittografare la partizione di root, creare un file system e montare la partizione, seguire i passaggi elencati di seguito. Assicurarsi di scegliere una passphrase sicura per la crittografia.

cryptsetup luksFormat /dev/sda2
cryptsetup open /dev/sda2 cryptroot
mkfs.btrfs /dev/mapper/cryptroot
mount /dev/mapper/cryptroot /mnt

Partizione di boot #

Formattare la partizione EFI in FAT32 utilizzando il comando mkfs.fat:

mkfs.fat -F 32 /dev/sda1
mkdir /mnt/boot
mount /dev/sda1 /mnt/boot

Installazione del sistema base #

Eseguire un’installazione di base:

pacstrap -K /mnt base linux linux-firmware man vim nano sudo dhcpcd udev

Questo comando installerà il sistema di base, il kernel Linux e il firmware necessario per supportare l’hardware più comune nella partizione montata. Sono stati aggiunti anche alcune utility, come man, vim, sudo ecc.

Configurare il sistema #

Generare fstab #

Per garantire che i file system necessari siano montati all’avvio, generare il file fstab. Utilizzare l’opzione -U o -L per definire i file system tramite UUID o label, rispettivamente.

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

gen-fstab

chroot #

arch-chroot /mnt

Il comando precedente serve a cambiare la root directory in /mnt, consentendo di interagire direttamente con il nuovo sistema come se fosse il sistema attualmente in esecuzione.

Fuso orario #

Impostare il fuso orario:

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

Impostazione della lingua #

Per utilizzare la formattazione corretta specifica per la regione e la lingua (come date, valuta, separatori decimali), modificare il file /etc/locale.gen, decommentando le localizzazioni UTF-8 che si intende utilizzare, per esempio en_US.UTF-8 UTF-8.

locale

Quindi eseguire:

locale-gen

Creare il file /etc/locale.conf e impostare la variabile LANG di conseguenza:

echo LANG=en_US.UTF-8 > /etc/locale.conf
export LANG=en_US.UTF-8

Network configuration #

Innanzitutto, impostare l’hostname della macchina col comando hostnamectl set-hostname archlinux. Quindi aggiungere le seguenti righe nel file /etc/hosts:

127.0.0.1  localhost
::1        localhost
127.0.1.1  archlinux

Sostituire archlinux con un hostname a scelta.

initramfs #

Modificare il file /etc/mkinitcpio.conf per aggiungere gli hook per la crittografia. Si tratta di script o comandi che vengono eseguiti durante il processo di creazione dell’immagine initramfs. Questi hook consentono di personalizzare e configurare il comportamento del sistema all’avvio, permettendo di includere o escludere determinati moduli, servizi o funzionalità.

Spostare la funzione keyboard prima di encrypt, in modo da poter digitare la passphrase.

Dopo questa modifica, la riga HOOKS dovrebbe apparire come segue:

HOOKS=(base udev autodetect modconf block keyboard encrypt filesystems fsck)

Poiché sono state apportate modifiche manuali al file /etc/mkinitcpio.conf, è necessario rigenerare l’immagine initramfs con le impostazioni aggiornate:

mkinitcpio -P

CPU microcode #

Per garantire che la CPU funzioni in modo ottimale, è importante applicare le patch appropriate:

  • Per processori AMD installare il pacchetto amd-ucode
  • Per processori Intel installare il pacchetto intel-ucode

Ad esempio, per installare il microcode per processori Intel, eseguire il seguente comando:

pacman -S intel-ucode

Nel caso di installazione su VM, questo passaggio puó essere omesso.

Gestione degli utenti #

Impostare la password di root #

Impostare una password sicura per l’utente root:

passwd

Creazione utente standard #

Per creare un utente standard, che appartenga al gruppo sudo, utilizzare il comando useradd:

useradd -m -G wheel,audio,video,storage,lp,power -s /bin/bash dado

passwd dado

Infine, per consentire agli utenti creati di eseguire comandi come root utilizzando sudo, è necessario modificare il file visudo. In particolare, la riga che si riferisce al gruppo wheel deve essere decommentata. Per aprire il file visudo, eseguire semplicemente il comando visudo.

Una volta aperto il file, cercare la riga che contiene %wheel ALL=(ALL) ALL e decommentarla.

Bootloader #

Un bootloader è un componente fondamentale del sistema operativo. Dopo che il bootloader ha completato il caricamento dell’OS, trasferisce il controllo al sistema operativo, consentendogli di gestire le risorse hardware del computer.

GRUB è spesso il bootloader predefinito in molte distribuzioni Linux, grazie alla sua flessibilità e alle sue ampie capacità di configurazione: consente infatti di gestire più sistemi operativi, offre opzioni avanzate di avvio, rendendolo ideale per utenti che necessitano di personalizzazione e controllo.

systemd-boot è una scelta più semplice e leggera, progettata per chi cerca un bootloader veloce e robusto, facile da configurare, con meno opzioni rispetto a GRUB.

Di seguito, vedremo come configurare entrambi i bootloader.

systemd-boot #

Installare EFI boot manager col comando:

bootctl install

Creare il file /boot/loader/entries/arch.conf. Sostituire intel-ucode.img con amd-ucode.img se si dispone di una CPU AMD. Sostituire l’UUID con quello del dispositivo a blocchi /dev/sda2.

Il contenuto del file dovrebbe apparire come segue:

title   Arch Linux
linux   /vmlinuz-linux
initrd  /intel-ucode.img
initrd  /initramfs-linux.img
options cryptdevice=UUID=XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX:cryptroot root=/dev/mapper/cryptroot rw

Creare il file /boot/loader/loader.conf:

default      arch.conf
timeout      5
console-mode max
editor       no

Per rivedere la configurazione, torna utile il comando bootctl list.

GRUB #

Installare i pacchetti necessari:

pacman -S grub efibootmgr

Creare la directory in cui verrà montata la partizione EFI:

mkdir /boot/efi

Ora, montare la partizione ESP (EFI System Partition) nella directory appena creata:

mount /dev/sda1 /boot/efi

Installare GRUB con il seguente comando:

grub-install --target=x86_64-efi --bootloader-id=GRUB --efi-directory=/boot/efi

Modificare le seguenti righe nel file /etc/default/grub:

GRUB_CMDLINE_LINUX_DEFAULT="quiet systemd.show_status=1"
GRUB_CMDLINE_LINUX="cryptdevice=UUID=XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX:cryptroot root=/dev/mapper/cryptroot rw"
GRUB_ENABLE_CRYPTODISK=y
GRUB_TERMINAL_OUTPUT=console

Aggiornare infine la configurazione di GRUB:

grub-mkconfig -o /boot/grub/grub.cfg

Reboot #

Uscire dall’ambiente chroot, digitando exit o premendo Ctrl+d. Successivamente, smontare la directory /mnt. Infine riavviare il sistema col comando reboot. Se non ci sono stati errori, ci troveremo dinnanzi alla seguente schermata:

passphrase

Adesso é possibile installare un Desktop Environment a scelta, seguendo anche le General recommendations della wiki di Arch Linux.

Video #

Di seguito, alcuni video utili, che riassumono la maggior parte dei passaggi:

oppure

Riferimenti #