Installazione di Arch
Questa è una configurazione avanzata con crittografia completa, btrfs, snapshot e supporto per ibernazione.
Panoramica dell’Architettura
- Crittografia: LUKS2 con tutto il disco criptato
- Filesystem: Btrfs con subvolume layout compatibile snapper
- Settori: 4Kn (4096 byte) se supportati dall’SSD
- Bootloader: GRUB con supporto snapshot (grub-btrfs)
- Snapshot: Configurati con Snapper
Fase 1: Preparazione e Boot
1.1 Boot da USB Arch Linux
Scarica l’ultima ISO di Arch e crea una USB bootable.
1.2 Verifica UEFI e Connessione
# Verifica boot UEFI
ls /sys/firmware/efi/efivars
# Connessione rete (se WiFi)
iwctl
# [iwd]# station wlan0 connect NOME_RETE
# Test connessione
ping -c 3 archlinux.org
# Sincronizza l'orologio
timedatectl set-ntp trueFase 2: Partizionamento e Settori 4Kn
2.1 Verifica supporto 4Kn1
# Identifica il disco
lsblk
# Verifica settori fisici/logici
nvme id-ns /dev/nvme0n1 -H | grep "LBA Format"
# Se vedi "LBA Format 1" o simile con Data Size: 4096, procedi.
cat /sys/block/nvme0n1/queue/physical_block_size
cat /sys/block/nvme0n1/queue/logical_block_size
# ATTENZIONE: QUESTO CANCELLA TUTTO IL DISCO ISTANTANEAMENTE
nvme format --lbaf=1 /dev/nvme0n12.2 Partizionamento
# Usa gdisk per GPT
gdisk /dev/nvme0n1
# Comandi:
# o (crea nuova GPT)
# n (nuova partizione)
# Partition 1: +2048M, type EF00 (EFI System)
# Partition 2: resto del disco, type 8309 (Linux LUKS)
# w (scrivi e esci)
Risultato:
- /dev/nvme0n1p1 → EFI (2048MB)2
- /dev/nvme0n1p2 → LUKS (resto)
Fase 3: Crittografia LUKS2
# Crea container LUKS2 con settori 4096
cryptsetup luksFormat --type luks2 \
--sector-size 4096 \
--cipher aes-xts-plain64 \
--key-size 512 \
--iter-time 5000 \
--pbkdf argon2id \
/dev/nvme0n1p2
# Apri il container
cryptsetup open /dev/nvme0n1p2 cryptrootFase 4: Filesystem Btrfs con Subvolume
4.1 Crea filesystem btrfs
# Formatta con settori 4096
mkfs.btrfs -L ArchLinux -s 4096 /dev/mapper/cryptroot
# Monta temporaneamente
mount /dev/mapper/cryptroot /mnt4.2 Crea subvolume
cd /mnt
# Subvolume principali (compatibili snapper)
btrfs subvolume create @
btrfs subvolume create @home
btrfs subvolume create @snapshots
# Subvolume da escludere dagli snapshot
btrfs subvolume create @var_log
btrfs subvolume create @var_tmp
btrfs subvolume create @var_pkg # Cache pacman
# (Facoltativo) Immagini macchine virtuali/Docker/ISO
btrfs subvolume create @var_lib_libvirt
btrfs subvolume create @var_lib_containers
#btrfs subvolume create @home_containers
cd
umount /mnt4.3 Monta con opzioni ottimizzate
# Opzioni btrfs per SSD
BTRFS_OPTS="noatime,compress=zstd:1,space_cache=v2,ssd,discard=async"
# Monta subvolume root
mount -o $BTRFS_OPTS,subvol=@ /dev/mapper/cryptroot /mnt
# Crea directory
mkdir -p /mnt/{boot,home,.snapshots,var/log,var/tmp,var/cache/pacman/pkg,var/lib/libvirt,var/lib/containers}
# Monta altri subvolume
mount -o $BTRFS_OPTS,subvol=@home /dev/mapper/cryptroot /mnt/home
mount -o $BTRFS_OPTS,subvol=@snapshots /dev/mapper/cryptroot /mnt/.snapshots
mount -o $BTRFS_OPTS,subvol=@var_log /dev/mapper/cryptroot /mnt/var/log
mount -o $BTRFS_OPTS,subvol=@var_tmp /dev/mapper/cryptroot /mnt/var/tmp
mount -o $BTRFS_OPTS,subvol=@var_pkg /dev/mapper/cryptroot /mnt/var/cache/pacman/pkg
mount -o $BTRFS_OPTS,subvol=@var_lib_libvirt /dev/mapper/cryptroot /mnt/var/lib/libvirt
mount -o $BTRFS_OPTS,subvol=@var_lib_containers /dev/mapper/cryptroot /mnt/var/lib/containers
# Disabilitiamo CoW
chattr +C /mnt/var/lib/libvirt
chattr +C /mnt/var/lib/containers
# Formatta e monta EFI
mkfs.fat -F32 /dev/nvme0n1p1
mount /dev/nvme0n1p1 /mnt/bootFase 5: Installazione Base
# Installazione minimale
pacstrap -K /mnt base linux linux-firmware \
btrfs-progs cryptsetup device-mapper \
intel-ucode \ # processore intel
amd-ucode \
neovim \
fish
# Genera fstab
genfstab -U /mnt >> /mnt/etc/fstab
# Chroot
arch-chroot /mntFase 6: Configurazione Sistema Base
# Timezone
ln -sf /usr/share/zoneinfo/Europe/Rome /etc/localtime
hwclock --systohc
# Locale
nvim /etc/locale.gen
# Decommenta en_US.UTF-8 e it_IT.UTF-8
locale-gen
echo "LANG=it_IT.UTF-8" > /etc/locale.conf
# Tastiera
echo "KEYMAP=it" > /etc/vconsole.conf
# Hostname
echo "archlinux" > /etc/hostname
# /etc/hosts
cat >> /etc/hosts << EOF
127.0.0.1 localhost
::1 localhost
127.0.1.1 archlinux.localdomain archlinux
EOF
# Password root (saltare questo passaggio per una sistema )
# passwdFase 7: Initramfs e Crittografia
# Modifica mkinitcpio.conf
nvim /etc/mkinitcpio.conf
# MODULES: aggiungi driver GPU
MODULES=(amdgpu btrfs)
# HOOKS: modifica così
HOOKS=(base systemd autodetect microcode modconf kms keyboard sd-vconsole block sd-encrypt filesystems fsck)
# Rigenera initramfs
mkinitcpio -PFase 8: GRUB con Supporto Snapshot
# Installa pacchetti necessari
pacman -S grub efibootmgr grub-btrfs inotify-tools
# Trova UUID della partizione LUKS
LUKS_UUID=$(blkid -s UUID -o value /dev/nvme0n1p2)
echo "LUKS UUID: $LUKS_UUID"Senza supporto per Ibernazione
# Configura GRUB
nvim /etc/default/grub
# Modifica/aggiungi queste righe:
GRUB_CMDLINE_LINUX_DEFAULT="loglevel=3 quiet"
GRUB_CMDLINE_LINUX="rd.luks.name=${LUKS_UUID}=cryptroot root=/dev/mapper/cryptroot rootflags=subvol=@"
GRUB_ENABLE_CRYPTODISK=y# Installa GRUB
grub-install --target=x86_64-efi --efi-directory=/boot --bootloader-id=GRUB
# Genera configurazione
grub-mkconfig -o /boot/grub/grub.cfg
# Abilita monitoraggio automatico snapshot
systemctl enable grub-btrfsdFase 9: Snapper
# Installa snapper
pacman -S snapper snap-pac
# Smonta .snapshots temporaneamente
umount /.snapshots
rm -r /.snapshots
# Crea configurazione snapper per root
snapper -c root create-config /
# Rimuovi subvolume creato da snapper
btrfs subvolume delete /.snapshots
# Ricrea directory e rimonta
mkdir /.snapshots
mount -o $BTRFS_OPTS,subvol=@snapshots /dev/mapper/cryptroot /.snapshots
# Permessi (importante per non far accedere tutti agli snapshot)
chmod 750 /.snapshots
# Aggiorna fstab se necessario
# Configura snapper
nvim /etc/snapper/configs/root
Configurazione snapper:
NUMBER_LIMIT="10"
TIMELINE_LIMIT_HOURLY="5"
TIMELINE_LIMIT_DAILY="7"
TIMELINE_LIMIT_WEEKLY="0"
TIMELINE_LIMIT_MONTHLY="0"
TIMELINE_LIMIT_YEARLY="0"# Abilita snapshot automatici
systemctl enable snapper-timeline.timer
systemctl enable snapper-cleanup.timer
# Test snapshot
snapper -c root create --description "Prima installazione"
snapper -c root listFase 10: Swap (zram)
# Installazione
pacman -S zram-generator
# Configurazione
sudo nvim /etc/systemd/zram-generator.conf
# Contenuto:
[zram0]
zram-size = min(ram, 8192)
compression-algorithm = zstd
swap-priority = 100
fs-type = swapFase 11: Network e Utente
# NetworkManager (minimo per rete)
pacman -S networkmanager
systemctl enable NetworkManager
# Crea utente
useradd -m -G wheel -s /usr/bin/fish [UTENTE]
passwd [UTENTE]
# Sudo
pacman -S sudo
EDITOR=nvim visudo
# Decommenta: %wheel ALL=(ALL:ALL) ALL
# Opzionale - non chiedere password per 15 minuti:
# Defaults timestamp_timeout=15
# Opzionale - richiedi password anche per comandi ripetuti (più sicuro):
# Defaults timestamp_timeout=0Fase 12: Finalizzazione
# Esci dal chroot
exit
# Smonta tutto
umount -R /mnt
cryptsetup close cryptroot
# Riavvia
rebootPost-Installazione
# Dopo il riboot e login
sudo pacman -S mesa vulkan-radeon libva-mesa-driver git man-db base-devel
# Verifica
lspci -k | grep -A 3 -E "(VGA|3D)"
# Verifica ibernazione
sudo systemctl hibernate
# Se funziona, puoi configurare sospensione ibrida
sudo nvim /etc/systemd/sleep.conf
# Aggiungi: HibernateMode=platform
1
Assicurati che l’hardisk supporti i setto 4Kn.
2
La dimensione della partizione EFI dipende da…