Differenze tra le versioni di "Appunti Arch Linux"

Da GolemWiki.
Jump to navigation Jump to search
Riga 84: Riga 84:
  
  
== Filesystem ==
+
= Filesystem =
 
Su Linux, a seconda di ciò di cui abbiamo bisogno, è possibile scegliere tra numerosi filesystem. Le principali opzioni sono le seguenti:
 
Su Linux, a seconda di ciò di cui abbiamo bisogno, è possibile scegliere tra numerosi filesystem. Le principali opzioni sono le seguenti:
  
Riga 99: Riga 99:
  
  
===Creazione del filesystem===
+
== BTRFS ==
 
+
Creazione del filesystem
 
  # mkfs.btrfs ''/dev/partizione''
 
  # mkfs.btrfs ''/dev/partizione''
  
=== Montaggio del filesystem ===
+
Montaggio del filesystem
 
  # mount -o compress=lzo ''/dev/partizione'' ''/mnt/punto_mount''
 
  # 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)
 
(Si consiglia di usare l'opzione di compressione del filesystem per migliorare le performance ed ottimizzare l'utilizzo dello spazio)
 
  
 
===Subvolumi===
 
===Subvolumi===
Riga 156: Riga 155:
 
* Sul disco smontato
 
* Sul disco smontato
 
  # btrfs check --repair /dev/partizione
 
  # btrfs check --repair /dev/partizione
 
  
 
=== Quote ===
 
=== Quote ===
Riga 207: Riga 205:
 
  mv /mnt/ext/{@root-yymmdd-ro,@root}
 
  mv /mnt/ext/{@root-yymmdd-ro,@root}
 
  btrfs property set /mnt/btrfs/@root ro false
 
  btrfs property set /mnt/btrfs/@root ro false
 
  
 
=== Cifratura ===
 
=== Cifratura ===
Riga 217: Riga 214:
  
 
* ZFS supporta la cifratura dei [https://wiki.archlinux.org/title/ZFS#Native_encryption pool]
 
* ZFS supporta la cifratura dei [https://wiki.archlinux.org/title/ZFS#Native_encryption pool]
 
  
 
=== RAID ===
 
=== RAID ===
Riga 275: Riga 271:
 
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.
 
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
 
  # btrfs device delete missing /mnt
 +
 +
 +
== ZFS =
 +
https://wiki.archlinux.org/title/ZFS/Virtual_disks
 +
https://openzfs.github.io/openzfs-docs/index.html
 +
 +
Comandi per ottenere informazioni utili sul filesystem e sui pool
 +
zfs list
 +
zpool status
 +
zpool list
 +
 +
Creare un pool su un disco
 +
zpool create "pool" sda
 +
 +
Creare un pool su una partizione
 +
zpool create "pool" sda2
 +
 +
Creare un pool in raid0
 +
zpool create "pool" /dev/sdb /dev/sdc
 +
 +
Creare un pool in raid1
 +
zpool create "pool" mirror /dev/sdb /dev/sc
 +
 +
Creare un pool ''raid5'' su più dischi
 +
zpool create "pool" raidz /dev/sdb /dev/sdc /dev/sdd
 +
 +
Creare un pool raid5 su immagini
 +
zpool create "pool" raidz /path/1.img /path/2.img /path/3.img
 +
 +
[https://docs.oracle.com/cd/E19253-01/819-5461/gbbvf/index.html Sostituire] disco in raid
 +
zpool offline disco1
 +
''Rimuovere il disco da sostituire''
 +
''Inserire il nuovo disco''
 +
zpool replace "pool" disco1
 +
zpool online disco1
 +
 +
Utilizza un altro disco montato al posto di quello danneggiato
 +
zpool replace "pool" disco1 disco2
 +
 +
Aggiungere uno o più dischi ad un pool
 +
zpool add "pool" mirror disco3 disco4
 +
zpool add "pool" raidz disco3 disco4 disco5
 +
 +
Rimuovere disco1 da pool se aggiunto erroneamente
 +
zpool remove "pool" disco1
 +
 +
Importare un pool
 +
zpool import "pool"
 +
 +
Aggiungere pool alla cache per auto-import e mount (abilitare i vari demoni zfs)
 +
zpool set cachefile=/etc/zfs/zpool.cache "pool"
 +
 +
oppure si possono caricare i mountpoint in modalità egacy dall'fstab
 +
zfs create -o mountpoint=legacy "pool"/directory
 +
 +
Aggiungere la compressione
 +
zfs get compression "pool"
 +
zfs set compression=lz4 "pool"
 +
 +
Vedere le proprietà di uno zpool
 +
zfs get all zpool
 +
 +
Per installazione da chroot con zfs su /
 +
zfs create -o mountpoint=legacy "pool"/ROOT
 +
zpool set bootfs="pool"/ROOT "pool"
 +
mount -t zfs "pool"/ROOT /mnt
 +
 +
/etc/fstab
 +
"pool"/ROOT      /      zfs        noatime    0 0
 +
 +
 +
=== GRUB ===
 +
#Grub entry
 +
menuentry 'Arch Linux'{
 +
      insmod gzio
 +
      insmod part_gpt
 +
      insmod zfs
 +
      set root='hd0,gpt2'
 +
      linux  /ROOT@/boot/vmlinuz-linux zfs_force=1 zfs=bootfs root=ZFS=rpool/ROOT rw  quiet
 +
      initrd  /ROOT@/boot/initramfs-linux.img
 +
}
 +
 +
=== Snapshots ===
 +
[https://ramsdenj.com/2016/08/29/arch-linux-on-zfs-part-3-followup.html Guida esterna]
 +
  
 
==== Alternative ====
 
==== Alternative ====
  
 
* EXT4 + mdadm
 
* EXT4 + mdadm
* [https://wiki.archlinux.org/title/ZFS/Virtual_disks ZFS]
 
  
 
== LVM ==
 
== LVM ==

Versione delle 00:58, 3 mar 2023

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.

Installazione

Supporti

  • ISO con installer grafico Calamares ALCI

Guida

Guida ufficiale

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.

  1. 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.
  2. 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.

  1. EFI: è una partizione in formato FAT32 necessaria per l'avvio dei sistemi operativi nei PC con schede madri UEFI.
  2. 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.


BTRFS

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

Partizione cifrata

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


= ZFS

https://wiki.archlinux.org/title/ZFS/Virtual_disks https://openzfs.github.io/openzfs-docs/index.html

Comandi per ottenere informazioni utili sul filesystem e sui pool

zfs list
zpool status
zpool list

Creare un pool su un disco

zpool create "pool" sda

Creare un pool su una partizione

zpool create "pool" sda2

Creare un pool in raid0

zpool create "pool" /dev/sdb /dev/sdc

Creare un pool in raid1

zpool create "pool" mirror /dev/sdb /dev/sc

Creare un pool raid5 su più dischi

zpool create "pool" raidz /dev/sdb /dev/sdc /dev/sdd

Creare un pool raid5 su immagini

zpool create "pool" raidz /path/1.img /path/2.img /path/3.img

Sostituire disco in raid

zpool offline disco1
Rimuovere il disco da sostituire
Inserire il nuovo disco
zpool replace "pool" disco1
zpool online disco1

Utilizza un altro disco montato al posto di quello danneggiato

zpool replace "pool" disco1 disco2

Aggiungere uno o più dischi ad un pool

zpool add "pool" mirror disco3 disco4
zpool add "pool" raidz disco3 disco4 disco5

Rimuovere disco1 da pool se aggiunto erroneamente

zpool remove "pool" disco1

Importare un pool

zpool import "pool"

Aggiungere pool alla cache per auto-import e mount (abilitare i vari demoni zfs)

zpool set cachefile=/etc/zfs/zpool.cache "pool"

oppure si possono caricare i mountpoint in modalità egacy dall'fstab

zfs create -o mountpoint=legacy "pool"/directory

Aggiungere la compressione

zfs get compression "pool"
zfs set compression=lz4 "pool"

Vedere le proprietà di uno zpool

zfs get all zpool

Per installazione da chroot con zfs su /

zfs create -o mountpoint=legacy "pool"/ROOT
zpool set bootfs="pool"/ROOT "pool"
mount -t zfs "pool"/ROOT /mnt

/etc/fstab "pool"/ROOT / zfs noatime 0 0


GRUB

  1. Grub entry

menuentry 'Arch Linux'{

      insmod gzio
      insmod part_gpt
      insmod zfs
      set root='hd0,gpt2'
      linux   /ROOT@/boot/vmlinuz-linux zfs_force=1 zfs=bootfs root=ZFS=rpool/ROOT rw  quiet
      initrd  /ROOT@/boot/initramfs-linux.img

}

Snapshots

Guida esterna


Alternative

  • EXT4 + mdadm

LVM

Intro https://www.redhat.com/sysadmin/lvm-vs-partitioning

Raid and restore https://habr.com/en/company/hetmansoftware/blog/547086/

Snapshot https://www.html.it/articoli/backup-live-con-gli-snapshot-lvm-su-linux/

Cache https://blog.golem.linux.it/2020/05/lvm-cache-su-ssd/

Guida completa RedHat https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/9/html-single/configuring_and_managing_logical_volumes/index#creating-and-managing-thinly-provisioned-volumes_configuring-and-managing-logical-volumes


Altro https://guide.debianizzati.org/index.php/LVM:_introduzione

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


Ripristinare GRUB

Aggiornando la propria distribuzione Linux, il proprio boot loader o installando un altro sistema operativo (es. Windows) può capitare di sovrascrivere il MBR.

Avviare il computer con un liveCD/DVD o USB:

Ipotizziamo di avere una partizione / chiamata /dev/sda2 e nessuna /boot

Creiamo i seguenti mount point

# sudo su
# cd /mnt
# mkdir sda2
# mount /dev/sda2 /mnt/sda2

Se utilizziamo una scheda madre UEFI andrà montata anche la partizione efi (solitamente è la prima partizione del disco sda1)

# mount /dev/sda2 /mnt/sda2/boot/efi

Se necessario editiamo il file di configurazione di grub

 # nano /mnt/sda2/boot/grub/grub.cfg

arch-chroot

Se stiamo utilizzando un sistema basato su Arch Linux, utilizzando l'utility arch-chroot presente nel pacchetto arch-install-scripts potremo automatizzare il processo di chroot con un solo comando

# arch-chroot /mnt/sda2

Manuale

# mount --rbind /dev /mnt/sda2/dev
# mount -t proc /proc /mnt/sda2/proc
# mount -t sysfs /sys /mnt/sda2/sys/

Eseguiamo il vero e proprio chroot in /dev/sda2

# chroot /mnt/sda2

Reinstallazione

# grub-mkconfig -o /boot/grub/grub.cfg
# grub-install /dev/sda

Riavvio del sistema

Usciamo dal chroot, smontiamo la partizione e riavviamo il sistema

# exit
# umount /mnt/sda1/proc
# umount /mnt/sda1/dev
# umount /mnt/sda1
# systemctl reboot

Networking

Manuale

net-tools

Storica serie di utility per gestire le interface di rete, presente da decenni nell'installazione base della maggior parte delle distribuzioni Linux, ma attualmente considerata obsoleta. Tra i suoi comandi principali: arp, hostname, ifconfig, iptunnel netstat e route.

Attivare l'interfaccia di rete eth0 ed assegnarle l'indirizzo ip 192.168.0.2

# ifconfig eth0 192.168.0.2 up

Disattivare l'interfaccia di rete eth0

# ifconfig eth0 down

Assegnare manualmente un gateway (es.: 192.168.0.1) alla rete

# route add default gw 192.168.0.1

Ovviamente occorrerà aggiungere un server DNS al file /etc/resolv.conf per la risoluzione degli indirizzi.

iproute2

Conversione comandi da net-tools a iproute2
net-tools iproute2 Note
ifconfig ip addr, ip link Address and link configuration
route ip route Routing tables
arp ip neigh Neighbors
iptunnel ip tunnel Tunnels
nameif, ifrename ip link set name Rename network interfaces
ipmaddr ip maddr Multicast
netstat ss, ip route Show various networking statistics
brctl bridge Handle bridge addresses and devices

Elencare gli indirizzi IP:

# ip addr

Mostra le informazioni di una specifica interfaccia di rete

# ip addr show eth0

Aggiungere un indirizzo all'interfaccia eth0:

# ip address add 192.0.2.10/24 dev eth0

Cancellare un indirizzo associato all'interfaccia eth0:

# ip address delete 192.0.2.10/24 dev eth0

Attivare l'interfaccia eth0:

# ip link set dev eth0 up

Disattivare l'interfaccia eth0:

# ip link set dev eth0 down

Svuotare la cache arp per tutte le interfacce:

# ip neigh flush all

Aggiungere un nuovo indirizzo all'interfaccia eth0:

# ip address add 192.0.2.20/24 dev eth0

Aggiungere una rotta che passa per gateway 192.0.2.1

# ip route add 192.0.2.128/25 via 192.0.2.1

Mostrare la tabella di routing

# ip route show


Systemd

systemd-networkd è un demone, parte di systemd, che gestisce la configurazione della rete.


Esempi di configurazione

To use systemd-networkd, start/enable systemd-networkd.service.

Wired adapter using DHCP

/etc/systemd/network/20-wired.network

[Match]
Name=enp1s0
[Network]
DHCP=yes


Wired adapter using a static IP

/etc/systemd/network/20-wired.network

[Match]
Name=enp1s0
[Network]
Address=10.1.10.9/24
Gateway=10.1.10.1
DNS=10.1.10.1


Address can be used more than once to configure multiple IPv4 or IPv6 addresses.

Wireless adapter

In order to connect to a wireless network with systemd-networkd, a wireless adapter configured with another application such as wpa_supplicant or iwd is required.

/etc/systemd/network/25-wireless.network

[Match]
Name=wlp2s0
[Network]
DHCP=yes
IgnoreCarrierLoss=3s


If the wireless adapter has a static IP address, the configuration is the same (except for the interface name) as in a wired adapter.

To authenticate to the wireless network, use e.g. wpa_supplicant or iwd.

Wired and wireless adapters on the same machine

This setup will enable a DHCP IP for both a wired and wireless connection making use of the metric directive to allow the kernel to decide on-the-fly which one to use. This way, no connection downtime is observed when the wired connection is unplugged.

The kernel's route metric (same as configured with ip) decides which route to use for outgoing packets, in cases when several match. This will be the case when both wireless and wired devices on the system have active connections. To break the tie, the kernel uses the metric. If one of the connections is terminated, the other automatically wins without there being a gap with nothing configured (ongoing transfers may still not deal with this nicely but that is at a different OSI layer).

Metric option is for static routes while the RouteMetric option is for setups not using static routes.

/etc/systemd/network/20-wired.network

[Match]
Name=enp1s0
[Network]
DHCP=yes
[DHCPv4]
RouteMetric=10


/etc/systemd/network/25-wireless.network

[Match]
Name=wlp2s0
[Network]
DHCP=yes
[DHCPv4]
RouteMetric=20


If using IPv6, you will need to separately set the metric for the IPv6 routes too, such as:

/etc/systemd/network/20-wired.network

...
[IPv6AcceptRA]
RouteMetric=10


/etc/systemd/network/25-wireless.network

...
[IPv6AcceptRA]
RouteMetric=20


Renaming an interface

Instead of editing udev rules, a .link file can be used to rename an interface. A useful example is to set a predictable interface name for a USB-to-Ethernet adapter based on its MAC address, as those adapters are usually given different names depending on which USB port they are plugged into.

/etc/systemd/network/10-ethusb0.link

[Match]
MACAddress=12:34:56:78:90:ab
[Link]
Description=USB to Ethernet Adapter
Name=ethusb0

Wifi

Programmi WEXT nl80211 WEP WPA
wireless_tools No No
iw No No
wpa_supplicant No
iwd/iwgtk No No

NetworkManager

NetworkManager è una utility che si è imposta come standard per la configurazione della reti Linux (LAN e Wifi)

Si compone di un demone, un'interfaccia da riga di comando (nmcli) ed un'interfaccia di configurazione basata su un menu testuale (nmtui).

I principali desktop enviroment come GNOME e KDE Plasma possiedono una utility grafica che consente loro di configurare graficamente le reti basandosi su NetworkManager.

Installazione

# pacman -S networkmanager 
# systemctl enable NetworkManager
# systemctl start NetworkManager

Configurazione

  • Menu di configurazione: qualora si utilizzi un sistema privo di interfaccia grafica e si desideri configurare una rete wifi si consiglia caldamente l'utilizzo dell'applicazione nmtui
  • Per chi dovesse prediligere la configurazione manuale: nmcli


Alternative

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

# pacman -S 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

Toolbox

Toolbox è un tool che permette di creare ed utilizzare container che si integrano col sistema host accedendo ad ogni sua risorsa: directory home dell'utente, X11/Wayland, networking, periferiche esterne. Tutto senza dover mettere mano a nessun file di configurazione. È il modo più semplice per di integrare più distribuzioni all'interno di una stessa macchina Linux.

Immagini

Comandi

Creare un container

$ toolbox create -i quay.io/toolbx-images/rhel-toolbox:9.1 -c redhat

Entrare in un container

$ toolbox enter redhat

Rimuovere un container

$ toolbox rm -f redhat

Rimuovere un container e la sua immagine

$ toolbox rmi redhat 

Esaminare la lista dei container e delle immagini disponibili

$ toolbox list 

Eseguire un comandi all'interno di un container

$ toolbox run -c redhat libreoffice

LXC

Linux Container (LXC) permette di virtualizzare uno o più container Linux su un singolo host LXC, gestendone virtualmente RAM, CPU, socket e rete.

È estremamente utile quando si ha bisogno di isolare dei servizi dal sistema host: es.: server web, imap, smtp...

Installazione

Installare LXC

# pacman -S lxc lxc-templates lxcfs lxd

Comandi

Lista dei container installati

lxc-ls -f 

Installare un container scegliendo l'immagine dalla lista di quelli disponibili

lxc-create -n playtime -t download

Se sapete già di quale container avete bisogno sarà possibile scaricarlo direttamente

lxc-create -n playtime -t download -- --dist archlinux --release current --arch amd64

Far partire il container chiamato debian

lxc-start debian 

Entrare dentro il container chiamato debian

lxc-attach debian

Fermare l'esecuzione del container chiamato debian

lxc-stop debian

Rimuovere il container chiamato debian

lxc-destroy debian 

Eseguire un comando dentro il container chiamato debian

lxc-attach --name debian nano


Rete Bridge

Nel caso si debbano usare servizi da tenere esposti su Internet potrebbe essere conveniente utilizzare una rete bridge piuttosto che NAT.

Configurazione rete bridge.

Alternative

Fonti software alternative

Nella rara eventualità che si necessiti di un programma non presente né nei repository ufficiali, né su AUR è possibile optare per una delle seguenti opzioni.

AppImage

Scaricate qualsiasi pacchetto disponibile su appimage.github.io e rendetelo eseguibile.

$ chmod a+x nomeprogramma.AppImage

Non resta che eseguirlo col seguente comando o con un doppio click

$ ./nomeprogramma.AppImage


Flatpak

Concepito per essere una sorta di Google Play Store per GNOME, è possibile installare programmi provenienti da flatpak utilizzando i normali gestori grafici di pacchetti basati su packagekit come Gnome Software o Discover di Plasma.

Installazione

# pacman -S flatpak

Abilitazione del repository ufficiale del progetto (software di terze parti potrebbe richiedere di aggiungere altri repository)

# flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo

Elenca i repository disponibili.

$ flatpak remotes

Installa un'applicazione (es.: libreoffice)

$ flatpak install flathub org.libreoffice.LibreOffice

Esegue un'applicazione (es.: libreoffice)

$ flatpak run org.libreoffice.LibreOffice

Disinstalla un'applicazione mantenendo i dati.

$ flatpak uninstall <nome app>

Disinstalla un'applicazione eliminando i dati (nella home utente .var/app/).

$ flatpak uninstall <nome app> --delete-data

Elimina i dati di tutte le applicazioni disinstallate (nella home utente .var/app/).

$ flatpak uninstall --delete-data

Disinstalla tutte le applicazioni flatpak installate sul sistema.

$ flatpak uninstall --all

Cerca ed esegue aggiornamenti per le applicazioni installate.

$ flatpak update

Aggiorna una singola applicazione.

$ flatpak update <nome app>

Elenca tutte le applicazioni flatpak installate sul sistema.

$ flatpak list --app

Elenca i runtime installati.

$ flatpak list --runtime

Visualizzare le informazioni sulle applicazioni in esecuzione.

$ flatpak ps

Termina un'applicazione bloccata o danneggiata (l'ID dell'istanza si può ottenere dal comando precedente).

$ flatpak kill <id istanza>

Tenta la riparare dei pacchetti danneggiati. Necessita dei privilegi di amministrazione.

$ flatpak repair

Nix

Nix package manager è il gestore di pacchetti utilizzato su NixOS. È possibile però utilizzarlo su qualsiasi distribuzione Linux affiancandone il gestore di pacchetti predefinito.

Nix analizza le istruzioni di compilazione (riproducibili) specificate in un file secondo il suo linguaggio di espressione, i risultati di questa compilazione sono archiviati secondo indirizzi univoci identificati da un hash e completi del loro intero albero delle dipendenze. Si crea così un archivio immutabile di pacchetti che consente aggiornamenti atomici, rollback e installazione simultanea di diverse versioni di un pacchetto.

Guida completa

Installazione

Guida ufficiale

Single-user installation

$ sudo install -d -m755 -o $(id -u) -g $(id -g) /nix
$ sh <(curl -L https://nixos.org/nix/install) --no-daemon

Aggiungere la riga seguente al .bashrc o al file di configurazione della vostra shell per poter utilizzare i comandi Nix

$ source $HOME/.nix-profile/etc/profile.d/nix.sh

Canali

Il software è distribuito attraverso in repository chiamati canali nei quali può essere disponibile in forma già precompilata binary cache o come sorgente da compilare. Questi canali determinano la versione dei pacchetti disponibili categorizzandoli nei rami stabile ed instabile.

Ecco di seguito i comandi principali per gestire questi canali

Lista dei canali configurati

$ nix-channel --list

Aggiungere il canale principale (nixos)

$ nix-channel --add https://nixos.org/channels/channel-name nixos

Aggiungere altri canali

$ nix-channel --add https://some.channel/url my-alias

Rimuovere un canale

$ nix-channel --remove channel-alias

Aggiornare un canale

$ nix-channel --update channel-alias

Aggiornare tutti i canali

$ nix-channel --update

Comandi

Cercare un pacchetto

$ nix search nixpkgs packagename

Installare un pacchetto

$ nix-env -iA packagename

Vedere i pacchetti installati

$ nix-env -q

Disinstallare un pacchetto

$ nix-env -e packagename

Aggiornare tutti i pacchetti

$ nix-env -u

Snap

È gestore di pacchetti ed un formato per la distribuzione di software ideato da Canonical Ltd. per Ubuntu, ma che adesso può essere utilizzato anche su altre distribuzioni. Consente di installare un'applicazione completa di tutte le sue librerie isolandola dal resto del sistema operativo. Si evitano così possibili conflitti tra applicazioni, permettendo la coesistenza di più versioni di uno stesso programma o libreria.

Su Arch è disponibile su AUR: snapd

Installazione

Installare ed abilitare Snap

$ yay -S snapd
$ sudo ln -s /var/lib/snapd/snap /snap
$ sudo systemctl start snapd.service
$ sudo systemctl enable snapd.service

Comandi

Cercare un programma

$ snap find nomeprogramma

Installare un programma

$ sudo snap install nomeprogramma

Rimuovere un programma

$ sudo snap remove nomeprogramma

Vedere i programmi installati

$ snap list

Aggiornare manualmente i pacchetti snap

# snap refresh


Systemd

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