Appunti Arch Linux
Arch Linux è una distribuzione Linux leggera ed improntata alla riga di comando. Ufficialmente non è dotata di un installer grafico e perciò non è considerata adatta ai principianti, l'installazione di default consiste in un sistema base sul quale l'utente potrà manualmente aggiungere e configurare tutto quello di cui necessita.
Fornisce l'ultima versione stabile della maggior parte del software opensource disponibile per Linux e lo fa seguendo un modello di distribuzione detto "rolling-release", il suo aggiornamento è quindi continuo e non richiede periodici passaggi da una versione stabile alla successiva.
Il prezzo da pagare è che talvolta gli aggiornamenti (soprattutto: kernel, driver video e librerie) possono determinare problemi talmente gravi al sistema da renderlo inutilizzabile. Per fortuna accorgimenti come lo snapshot del filesystem che, se utilizzati correttamente dall'utente, sono capaci di ovviare a tali problematiche.
Supporti d'installazione
- ISO ufficiale archlinux-x86_64.iso
- ISO con supporto per lo ZFS archlinux-archzfs-linux.iso
- ISO con installer grafico Calamares ALCI
Preparazione del disco
Su Linux si può scegliere (salvo casi estremamente particolari) tra due tipi di tabella delle partizioni
- msdos (Master Boot Record o più semplicemente MBR)
- GPT (GUID Partition Table)
In linea generale è consigliabile di scegliere il GPT perché è un formato più moderno ed ha meno limitazioni rispetto all'MBR risalente ai tempi dell'MS-DOS.
I casi in cui è preferibile utilizzare la tabella msdos sono:
- dual-boot con Windows (32-bit o 64-bit) con la scheda madre in modalità Legacy BIOS
- in schede madri molto datate il BIOS potrebbe non supportare lo schema GPT (esiste comunque un trucco per aggirare l'ostacolo)
Vantaggi di GPT su MBR:
- offre un sistema di denominazione delle partizioni indipendente dal filesystem (PARTLABEL, PARTUUID)
- supera il concetto di partizione primaria ed estesa (su MBR il numero massimo di partizioni primarie, quelle su cui si può installare un sistema operativo è limitato a 4). Su GPT, nella configurazione standard, si possono definire fino a 128 partizioni.
- la grandezza massima di un disco è di 2 ZiB, mentre su MBR 2 TiB
- permette di fare a meno della tradizionale partizione di /boot con i filesystem BTRFS e ZFS in modo da semplificare la gestione degli snapshot.
Schede madri BIOS
Creare due partizioni.
- BIOS GRUB Partition: concettualmente l'equivalente dell'MBR dei sistemi GPT. A differenza di quest'ultimo, la cui dimensione è di soli 512 byte, la BIOS GRUB Partition può però essere sufficientemente grande da contenere i driver per il supporto di un filesystem come ZFS o BTRFS. Il contenuto di questa partizione cambia esclusivamente nei rari casi di upgrade del GRUB perché non vi risiedono né kernel né ramdisk.
- Linux filesystem: successivamente da formattare col filesystem di nostra scelta: BTRFS, ZFS, ext4, XFS, JFS.
Partizionamento
Col seguente comando verrà creata la partizione BIOS GRUB (EF02) a partire dal 1MB, della grandezza di 64MB; il resto del disco resterà disponibile per il filesystem di Linux.
Se avete più dischi da utilizzare in raid, questa operazione andrà ripetuta per ciascun disco.
# sgdisk \ --new=1:2048:133120 --typecode=1:EF02 --change-name=1:"GRUB" \ --largest-new=2 --typecode=2:8300 --change-name=2:"ROOT" /dev/sda
La seconda partizione dovrà poi essere formattata con uno dei filesystem supportati da Linux (ext4, btrfs, xfs...)
# mkfs.btrfs /dev/sda2
Schede madri UEFI
Creare due partizioni.
- EFI: è una partizione in formato FAT32 necessaria per l'avvio dei sistemi operativi nei PC con schede madri UEFI.
- Linux filesystem: successivamente da formattare col filesystem di nostra scelta: BTRFS, ZFS, ext4, XFS, JFS.
Partizionamento
Col seguente comando verrà creata la partizione EFI (EF00) a partire dal 1MB, della grandezza di 512MB; il resto del disco resterà disponibile il filesystem di Linux.
# sgdisk \ --new=1:2048:1064960 --typecode=1:EF00 --change-name=1:"efi" \ --largest-new=2 --typecode=2:8300 --change-name=2:"ROOT" /dev/sda
La partizione EFI dovrà poi essere formattata in FAT32
# mkfs.vfat -T32 /dev/sda1
La seconda partizione dovrà poi essere formattata con uno dei filesystem supportati da Linux (ext4, btrfs, xfs...)
# mkfs.btrfs /dev/sda2
Filesystem
Su Linux, a seconda di ciò di cui abbiamo bisogno, è possibile scegliere tra numerosi filesystem. Le principali opzioni sono le seguenti:
- BTRFS: supporta nativamente sottovolumi, snapshot ed il raid 0, 1 e 5; ma non la crittografia.
- EXT4: il FS storico di Linux, evoluzione di ext3. Supporta nativamente la crittografia dei dati, ma non gestisce autonomamente né RAID, né snapshots.
- ZFS: non è supportato direttamente da Linux, ha bisogno di un driver esterno per funzionare e ciò, per gli utenti meno smaliziati, potrebbe complicare le operazioni di ripristino di sistema in caso di problemi. Supporta il raid 0, 1 e z (una variante del raid5 che permette, grazie ad un meccanismo di scrittura dei dati detta "write-atomicity" di evitare la perdita di dati anche in caso di improvviso spegnimento improvviso del computer), gli snapshot, i sottovolumi e la cifratura dei dati. Non è però possibile modificare la composizione di un raid una volta creato.
- XFS + LVM: accoppiare il filesystem xfs al gestore di volumi di LVM è il modo con cui RedHat (IBM) ha scelto di implementare le funzionalità di raid e snapshots nella propria distribuzione.
Ritengo BTRFS il miglior compromesso tra facilità d'uso e caratteristiche supportate perciò in questa guida mi concentrerò unicamente su quest'ultimo.
Creazione del filesystem
# mkfs.btrfs /dev/partizione
Montaggio del filesystem
# mount -o compress=lzo /dev/partizione /mnt/punto_mount
(Si consiglia di usare l'opzione di compressione del filesystem per migliorare le performance ed ottimizzare l'utilizzo dello spazio)
Subvolumi
- Creare un subvolume
# btrfs subvolume create subvolume
- Controllare i subvolumi presenti sul sistema
# btrfs subvolume list /
In una tipica installazione Ubuntu avremo un output di questo tipo
ID 257 gen 9755 top level 5 path @ ID 292 gen 7624 top level 5 path @home
@ è il nome del subvolume contenente la root / del filesystem @home è il nome del subvolume della /home
Montaggio di un subvolume
# mount -o subvol=subvolume /dev/partizione /mnt/punto_mount
fstab
Normalmente la root di sistema viene collocata in un subvolume (es.: @), per poter effettuare opzioni di snapshot etc e consigliabile montare il filesystem con l'opzione subvolid=0. Nella directory di mount saranno visibili tutti i subvolumi e le snapshot della partizione e sarà quindi possibile effettuare tutte le operazioni indicate nei passaggi successivi.
Ecco un /etc/fstab di esempio
LABEL=ROOT / btrfs defaults,compress=lzo,subvol=@ 0 0 LABEL=ROOT /home btrfs defaults,compress=lzo,subvol=@home 0 0 LABEL=ROOT /mnt/btrfs btrfs defaults,noauto,subvolid=0,compress=lzo 0 0
Montando la partizione con label ROOT su /mnt/btrfs saranno visibili tutti i subvolumi.
Conversione da Ext3/4 a Btrfs
# btrfs-convert /dev/partizione
Automaticamente è creata una snapshot contenente il vecchio filesystem (/ext2_saved)
In caso di problemi può essere montata col comando
# mount -t btrfs -o subvol=ext2_saved /dev/xxx /ext2_saved # mount -t ext3 -o loop,ro /ext2_saved/image /ext3
Se tutto è andato a buon fine può invece essere eliminata
# btrfs subvolume delete /ext2_saved
Riparazione di un filesystem danneggiato
- Direttamente sul filesystem montato
# btrfs scrub start -B /dev/partizione
o anche direttamente sulla root
# btrfs scrub start -B /
- Sul disco smontato
# btrfs check --repair /dev/partizione
Quote
Per limitare le dimensioni di un subvolume è possibile abilitare la gestione delle quote.
Utilizzare il seguente comando su un filesystem btrfs appena creato e privo di subvolumi
# btrfs quota enable volume
Se invece le quote non sono state abilitate subito su tutto il filesystem è necessario creare un qgroup (quota group) per ogni subvolume utilizzando il rispettivo ID e successivamente fare una scansione delle quote.
# btrfs subvolume list <path> | cut -d' ' -f2 | xargs -I{} -n1 btrfs qgroup create 0/{} <path> # btrfs quota rescan <path>
Assegnare una quota limite ad un subvolume
# btrfs qgroup limit size /volume/subvolume
Es.:
# btrfs qgroup limit 20g /mnt/@ # btrfs qgroup limit 100g /mnt/@home
Scoprire la quantità di spazio utilizzata da un subvolume
# btrfs qgroup show <path>
Snapshots
Data la natura instabile delle distribuzioni rolling-release come Arch Linux ritengo praticamente obbligatorio per la partizione di / l'utilizzo di un filesystem che supporti gli snapshot.
- Effettuare uno snapshot
# btrfs subvolume snapshot @ rootsnap
Nell'esempio abbiamo effettuato il backup del filesystem di root e l'abbiamo chiamato rootsnap
- Montare un subvolume/snapshot
# mount -t btrfs -o subvol=rootsnap /dev/partizione /mnt/snapshot
- Cancellare un subvolume/snapshot
# btrfs subvolume delete rootsnap
Backup
Le snapshot possono essere salvate su un disco esterno, a patto che questo abbia un file system btrfs. L'operazione di trasferimento può essere effettuata soltanto su snapshot in sola lettura. Si ipotizza che il proprio disco di sistema sia montato in /mnt/btrfs ed il disco esterno in /mnt/ext
- Creare la snapshot in sola lettura (opzione -r) oppure impostare il flag di sola lettura ad una snapshot già fatta
btrfs subvolume snapshot -r @root @root-yymmdd-ro btrfs property set /mnt/btrfs/@root-yymmdd-ro ro true
- Trasferire la snapshot sul disco esterno.
btrfs send /mnt/btrfs/@root-yymmdd-ro | btrfs receive /mnt/ext
- Quando necessario, ripristinare la snapshot
btrfs send /mnt/ext/@root-yymmdd-ro | btrfs receive /mnt/btrfs/
- Eventualmente, rinominare la snapshot e reimpostare i privilegi di scrittura
mv /mnt/ext/{@root-yymmdd-ro,@root} btrfs property set /mnt/btrfs/@root ro false
Cifratura
Alternative
- Ext4 gestisce la cifratura di una directory tramite l'utility Fscrypt
- ZFS supporta la cifratura dei pool
RAID
RAID 0
# mkfs.btrfs -d raid0 /dev/sda1 /dev/sdb1
Montare il raid
# mount /dev/sda1 /mnt
(È equivalente a mount /dev/sdb1 /mnt, il sistema riconosce che è presente un raid 0 e provvede al montaggio corretto dei dischi)
Verifica del montaggio
# btrfs filesystem show /mnt
Label: none uuid: 4714fca3-bfcb-4130-ad2f-f560f2e12f8e Total devices 2 FS bytes used 27.75GiB devid 1 size 136.72GiB used 17.03GiB path /dev/sda1 devid 2 size 136.72GiB used 17.01GiB path /dev/sdb1
Aggiungere una partizione
# btrfs device add /dev/sdc1 /mnt
# btrfs filesystem show /mnt Label: none uuid: 4714fca3-bfcb-4130-ad2f-f560f2e12f8e Total devices 3 FS bytes used 27.75GiB devid 1 size 136.72GiB used 17.03GiB path /dev/sda1 devid 2 size 136.72GiB used 17.01GiB path /dev/sdb1 devid 3 size 136.72GiB used 0.00 path /dev/sdc1
Adesso è necessario effettuare una redistribuzione dei dati sui tre dischi
# btrfs balance start -d -m /mnt
# btrfs filesystem show /mnt Label: none uuid: 4714fca3-bfcb-4130-ad2f-f560f2e12f8e Total devices 3 FS bytes used 27.78GiB devid 1 size 136.72GiB used 10.03GiB path /dev/sda1 devid 2 size 136.72GiB used 10.03GiB path /dev/sdb1 devid 3 size 136.72GiB used 11.00GiB path /dev/sdc1
Rimuovere un device
# btrfs device delete /dev/sdb1 /mnt
L'operazione può impiegare parecchio tempo e per andare a buon fine sui dischi rimanenti deve essere rimasto sufficiente spazio libero da ospitare i dati contenuti nel device che vogliamo togliere dal raid.
RAID 1
# mkfs.btrfs -d raid1 -m raid1 /dev/sda1 /dev/sdb1
RAID 5
Conversione a RAID5
# btrfs balance start -dconvert=raid5 -mconvert=raid5 /punto_di_mount
Sostituzione device danneggiato
# btrfs replace start /dev/sdb1 /dev/sdc1 /punto_di_mount
In alcuni casi potrebbe essere necessario montare il filesystem in modalità degraded (con l'opzione -o degraded) e lanciare il successivo comando per eliminare definitivamente il device dal raid.
# btrfs device delete missing /mnt
Alternative
- EXT4 + mdadm
- ZFS
LVM
https://guide.debianizzati.org/index.php/LVM:_introduzione
https://blog.golem.linux.it/2020/05/lvm-cache-su-ssd/
https://www.lffl.org/2020/04/guida-sysadmin-istruzioni-lvm.html
https://tldp.org/HOWTO/LVM-HOWTO/snapshots_backup.html
Boot loader
Anche in questo caso sarebbe possibile scegliere tra più bootloader: GRUB, Lilo, Syslinux o addirittura il bootloader integrato del systemd (systemd-boot). Ma dato che GRUB è utilizzabile pressoché in ogni circostanza: schede madri BIOS, UEFI; Secure Boot, hard disk, floppy, CD-ROM... in questa guida mi limiterò alla sua configurazione, tralasciando le alternative.
Sistema con BIOS
# pacman -S grub # grub-mkconfig -o /boot/grub/grub.cfg # grub-install /dev/sda
Sistema UEFI
# pacman -S grub # mkdir /boot/EFI # mount /dev/sda1 /boot/EFI # grub-install --target=x86_64-efi --efi-directory=$esp --bootloader-id=grub --recheck --debug # grub-mkconfig -o /boot/grub/grub.cfg
Gestione delle snapshot
Manuale
Editare /etc/grub.d/40_custom (o crearlo) e aggiungere quanto segue per permettere l'avvio della snapshot rootsnap
menuentry 'Linux snapshot' { insmod gzio insmod part_gpt insmod btrfs set root='hd1,gpt3' linux /rootsnap/boot/vmlinuz-linux root=/dev/partizione rw rootflags=subvol=rootsnap quiet initrd /rootsnap/boot/initramfs-linux.img }
dopodichè aggiornare la configurazione di GRUB con
# grub-mkconfig -o /boot/grub/grub.cfg
Automatico
Per facilitare la gestione lei sottovolumi e delle snapshot del BTRFS Arch offre il pacchetto grub-btrfs, la sua installazione provvederà ad aggiungere tutti i sottovolumi contenenti un sistema Linux al menu di grub.
# pacman -S grub-btrfs
Ogni volta che si vorrà aggiornare grub con nuovi subvolumi basterà dare il seguente comando
# grub-mkconfig -o /boot/grub/grub.cfg
Networking
Manuale
- net-tools
- iproute2
Wifi
Utilities Programmi | WEXT | nl80211 | WEP | WPA |
---|---|---|---|---|
wireless_tools | Sì | No | Sì | No |
iw | No | Sì | Sì | No |
wpa_supplicant | Sì | Sì | No | Sì |
iwd/iwgtk | No | Sì | No | Sì |
Systemd
Client
- ConnMan (manual/Front-ends)
- NetworkManager (nmcli/nmtui/applet)
Condividere la connessione
Abilitazione del forwarding dei pacchetti
$ sudo echo 1 > /proc/sys/net/ipv4/ip_forward
Per rendere il forwarding definitivo editare il file /etc/sysctl.conf modificando come segue il parametro net.ipv4.ip_forward:
net.ipv4.ip_forward = 1
Mascheramento dei pacchetti
$ sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
eth0 non è un parametro fisso, identifica l'interfaccia con la quale il PC si connette ad Internet
Per applicare automaticamente tale regola ad ogni riavvio
# iptables-save > /etc/iptables.ipv4.nat # iptables-restore < /etc/iptables.ipv4.nat
Moduli kernel
Assicurarsi che siano caricati i seguenti moduli:
# modprobe ip_tables # modprobe ip_conntrack # modprobe iptable_nat # modprobe ipt_MASQUERADE
Condivisione tramite rete ethernet
Configurazione scheda di rete interna
Assegnare un IP statico alla scheda ethernet con la quale si vuol condividere la connessione.
# ifconfig eth1 192.168.5.1 netmask 255.255.255.0 up
Per rendere tale configurazione permanente sarà necessario editare il file /etc/network/interfaces ed aggiungere la seguente configurazione
auto eth1 iface eth1 inet static address 192.168.5.1 netmask 255.255.255.0
Condivisione tramite rete WI-FI
Configurazione scheda wireless
Se non si desidera cifrare la rete e proteggerla con una password sarà sufficiente eseguire questi comandi.
# iwconfig wlan0 mode Master # iwconfig wlan0 ESSID ReteGOLEM # iwconfig wlan0 enc off # ifconfig wlan0 192.168.5.1 netmask 255.255.255.0 up
Per rendere tale configurazione permanente sarà necessario editare il file /etc/network/interfaces ed aggiungere la seguente configurazione
iface wlan0 inet loopback address 192.168.5.1 netmask 255.255.255.0
Proteggere la connessione WI-FI
Installare il programma hostapd
# apt-get install hostapd
Configurare hostapd modificando /etc/hostapd/hostapd.conf
# Interfaccia di rete interface=wlan0 # Driver della scheda wifi usata (non tutte le schede sono supportate) driver=nl80211 # Nome della rete (SSID) ssid=ReteGOLEM hw_mode=g # Canale di trasmissione channel=6 macaddr_acl=0 # Righe per la protezione auth_algs=1 ignore_broadcast_ssid=0 wpa=2 # Password del wifi wpa_passphrase=password wpa_key_mgmt=WPA-PSK wpa_pairwise=TKIP rsn_pairwise=CCMP
Editare il file /etc/default/hostapd per impostare hostapd.conf come file di configurazione predefinito, modificando la riga DAEMON_CONF="":
DAEMON_CONF="/etc/hostapd/hostapd.conf"
Assegnazione automatica degli IP ai client
# pacman -S dhcp
Editare /etc/dhcpd.conf aggiungendo la configurazione per la rete interna (es.: eth1 o wlan0):
subnet 192.168.5.0 netmask 255.255.255.0 { range 192.168.5.100 192.168.5.200; option domain-name-servers 8.8.8.8; }
Container
lxc
lxc-ls -f lxc-create -n playtime -t download lxc-create -n playtime -t download -- --dist archlinux --release current --arch amd64 lxc-start debian lxc-attach debian lxc-stop debian lxc-destroy debian
lxc-attach --name debian -- nano
systemd-nspawn
toolbox
https://github.com/toolbx-images/images
toolbox create -i docker.io/palazzem/archlinux-toolbox:latest -c archlinux-toolbox toolbox create -i registry.access.redhat.com/ubi9/ubi:9.1 -c redhat9 toolbox enter archlinux-toolbox toolbox rmi archlinux-toolbox toolbox rm -f archlinux-toolbox toolbox list
toolbox run -c redhat9 /usr/sbin/pure-ftpd -A -B -H -u1000 toolbox run -c redhat9 libreoffice
docker
https://wiki.golem.linux.it/Docker
Stuff
- Package manager
- dnf (rpm)
- apt-get/dpkg (deb)
- nix
- snap
- Flatpak
- appimage
- Systemd
systemd-udevd - successor of devfsd, hwdetect and hotplug, manages device in /dev by adding, symlinking and renaming them systemd-boot — simple UEFI boot manager; systemd-cryptenroll — Enroll PKCS#11, FIDO2, TPM2 token/devices to LUKS2 encrypted volumes; systemd-firstboot — basic system setting initialization before first boot; systemd-homed — portable human-user accounts; systemd-logind — session management; systemd-networkd — network configuration management; systemd-nspawn — light-weight namespace container; https://wiki.archlinux.org/title/systemd-nspawn systemd-resolved — network name resolution; systemd-timesyncd — system time synchronization across the network; systemd/Journal — system logging systemd/Timers — alternative to cron
Bibliografia
https://wiki.archlinux.org/title/Installation_guide
https://wiki.golem.linux.it/Howto
https://wwwcdf.pd.infn.it/AppuntiLinux/a21.htm
https://www.linuxfromscratch.org/lfs/downloads/stable/LFS-BOOK-11.2-NOCHUNKS.html