<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="it">
	<id>https://wiki.golem.linux.it/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=%24pooky+Hunter</id>
	<title>GolemWiki - Contributi utente [it]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.golem.linux.it/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=%24pooky+Hunter"/>
	<link rel="alternate" type="text/html" href="https://wiki.golem.linux.it/Speciale:Contributi/$pooky_Hunter"/>
	<updated>2026-06-09T09:41:13Z</updated>
	<subtitle>Contributi utente</subtitle>
	<generator>MediaWiki 1.35.5</generator>
	<entry>
		<id>https://wiki.golem.linux.it/index.php?title=Pkgsrc_su_Slackware&amp;diff=9986</id>
		<title>Pkgsrc su Slackware</title>
		<link rel="alternate" type="text/html" href="https://wiki.golem.linux.it/index.php?title=Pkgsrc_su_Slackware&amp;diff=9986"/>
		<updated>2026-05-24T09:27:28Z</updated>

		<summary type="html">&lt;p&gt;$pooky Hunter: /* Installare pkgsrc */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduzione==&lt;br /&gt;
[http://it.wikipedia.org/wiki/Slackware Slackware] è la distribuzione più longeva tra quelle ancora in auge.&lt;br /&gt;
Sviluppata con una particolare attenzione riguardo a stabilità e semplicità non possiede però né strumenti di configurazione con interfaccia grafica, né un sistema di gestione dei pacchetti con controllo automatico delle dipendenze.&lt;br /&gt;
&lt;br /&gt;
==Gestione dei pacchetti==&lt;br /&gt;
=== Comandi ===&lt;br /&gt;
 installpkg ''nomepacchetto'' (Installa un pacchetto)&lt;br /&gt;
 removepkg ''nomepacchetto'' (Rimuove un pacchetto)&lt;br /&gt;
 updatepkg ''nomepacchetto'' (Aggiorna un pacchetto) &lt;br /&gt;
&lt;br /&gt;
=== Gestori di pacchetti===&lt;br /&gt;
* Gestore ufficiale: Slackpkg (permette l'installazione di pacchetti da repository online, ma non gestisce le dipendenze)&lt;br /&gt;
&lt;br /&gt;
* Gestori non ufficiali: [http://software.jaos.org/ slapt-get]&lt;br /&gt;
&lt;br /&gt;
=== Software extra ===&lt;br /&gt;
Uno dei principali problemi di Slackware è la difficoltà di reperimento del software, la quantità di pacchetti ufficiali è decisamente inferiore a quella delle altre principali distribuzioni.&lt;br /&gt;
Programmi popolari come Libreoffice, GNOME o VLC non sono presenti nei repository ufficiali.&lt;br /&gt;
&lt;br /&gt;
=== Soluzioni alternative ===&lt;br /&gt;
* slacktrack: utility per la creazione di pacchetti Slackware a partire dal sorgente di un programma.&lt;br /&gt;
&lt;br /&gt;
* rpm2tgz: programma per convertire pacchetti rpm nel formato tgz (utile per installare grossi pacchetti statici come Libreoffice o Chrome).&lt;br /&gt;
&lt;br /&gt;
* [https://sbopkg.org/ Sbopkg]: script per lo scaricamento, la compilazione e l'installazione degli [https://slackbuilds.org/ SlackBuilds].&lt;br /&gt;
&lt;br /&gt;
* [https://sourceforge.net/projects/slackpkgplus/ Slackpkg+]: plugin che permette a Slackpkg di gestire repository non ufficiali come alienbob&lt;br /&gt;
&lt;br /&gt;
* [http://www.pkgsrc.org/ pkgsrc]: ''(package source)'', framework per compilare ed installare software di terze parti su NetBSD ed altri sistemi di tipo UNIX.&lt;br /&gt;
&lt;br /&gt;
=pkgsrc=&lt;br /&gt;
== Introduzione ==&lt;br /&gt;
Se si decidesse di percorrere questa strada è consigliabile effettuare un'installazione minima del sistema Slackware (Base Linux System, Program Development, System libraries, Networking) ed utilizzare pkgsrc per il resto del software (es.: X11, KDE, Libreoffice).&lt;br /&gt;
&lt;br /&gt;
Procediamo con la selezione del softwareda installare, nel setup selezionare:&lt;br /&gt;
 * A&lt;br /&gt;
 * AP&lt;br /&gt;
 * D&lt;br /&gt;
 * L&lt;br /&gt;
 * N&lt;br /&gt;
&lt;br /&gt;
E' possibile, volendo, eliminare anche le selezioni AP ed N, si dovrà poi, reinstallare con il framework tutto il resto&lt;br /&gt;
&lt;br /&gt;
== Installare pkgsrc ==&lt;br /&gt;
Scaricare l'ultimo tarball disponibile&lt;br /&gt;
 # cd /usr&lt;br /&gt;
 # wget [http://ftp.netbsd.org/pub/pkgsrc/current/pkgsrc.tar.xz http://ftp.netbsd.org/pub/pkgsrc/current/pkgsrc.tar.xz]&lt;br /&gt;
 # tar -xJvf pkgsrc.tar.xz&lt;br /&gt;
&lt;br /&gt;
Eseguire il bootstrap&lt;br /&gt;
 # cd /usr/pkgsrc/bootstrap&lt;br /&gt;
 # ./bootstrap&lt;br /&gt;
&lt;br /&gt;
Modificare il profilo della shell:&lt;br /&gt;
  export PATH=$PATH:/usr/pkg/bin:/usr/pkg/sbin&lt;br /&gt;
  export MANPATH=$MANPATH:/usr/pkg/man&lt;br /&gt;
&lt;br /&gt;
Per installare un sorgente procedere come segue:&lt;br /&gt;
 $ cd /usr/pkgsrc/x11/modular-xorg-server&lt;br /&gt;
 # bmake install clean clean-depends&lt;br /&gt;
&lt;br /&gt;
= Messa a punto del sistema =&lt;br /&gt;
== mk.conf ==&lt;br /&gt;
Editare il file '''/usr/pkg/etc/mk.conf''' aggiungendo le seguenti righe:&lt;br /&gt;
&lt;br /&gt;
  # Example /usr/pkg/etc/mk.conf file produced by bootstrap-pkgsrc&lt;br /&gt;
  # Thu Apr 18 21:52:13 UTC 2019&lt;br /&gt;
  &lt;br /&gt;
  .ifdef BSD_PKG_MK           # begin pkgsrc settings&lt;br /&gt;
  &lt;br /&gt;
  ABI=                        64&lt;br /&gt;
  &lt;br /&gt;
  PKG_DBDIR=                  /usr/pkg/pkgdb&lt;br /&gt;
  LOCALBASE=                  /usr/pkg&lt;br /&gt;
  VARBASE=                    /var&lt;br /&gt;
  PKG_TOOLS_BIN=              /usr/pkg/sbin&lt;br /&gt;
  PKGINFODIR=                 info&lt;br /&gt;
  PKGMANDIR=                  man&lt;br /&gt;
   &lt;br /&gt;
  PKG_RCD_SCRIPTS=            yes&lt;br /&gt;
  RCD_SCRIPTS_DIR=            /etc/rc.d&lt;br /&gt;
  ACCEPTABLE_LICENSES+=       vim-license&lt;br /&gt;
  ALLOW_VULNERABLE_PACKAGES=  vim&lt;br /&gt;
  USE_DESTDIR=                NO&lt;br /&gt;
  PKG_RESUME_TRANSFERS=       YES&lt;br /&gt;
  &lt;br /&gt;
  PKG_ADD_CMD?=               /usr/pkgsrc/bootstrap/work/sbin/pkg_add&lt;br /&gt;
  PKG_ADMIN_CMD?=             /usr/pkgsrc/bootstrap/work/sbin/pkg_admin&lt;br /&gt;
  PKG_CREATE_CMD?=            /usr/pkgsrc/bootstrap/work/sbin/pkg_create&lt;br /&gt;
  PKG_INFO_CMD?=              /usr/pkgsrc/bootstrap/work/sbin/pkg_info&lt;br /&gt;
  WRKOBJDIR=                  /usr/pkgsrc/bootstrap/work/wrk&lt;br /&gt;
  MAKE_jobs=                  4&lt;br /&gt;
  &lt;br /&gt;
  .endif                      # end pkgsrc settings &lt;br /&gt;
&lt;br /&gt;
Aggiungere le librerie di pkgsrc a quelle Slackware &lt;br /&gt;
 # echo /usr/pkg/lib &amp;gt;&amp;gt; /etc/ld.so.conf&lt;br /&gt;
 # cat /etc/ld.so.conf&lt;br /&gt;
&lt;br /&gt;
verificato che è tutto ok, si può procedere oltre.&lt;br /&gt;
&lt;br /&gt;
== Pacchetti essenziali ==&lt;br /&gt;
&lt;br /&gt;
* Il subsystem rc.d del NetBSD per avviare eventuali servizi&lt;br /&gt;
 # cd /usr/pkgsrc/pkgtools/rc.subr/ &amp;amp;&amp;amp; bmake install&lt;br /&gt;
&lt;br /&gt;
* '''Audit:''' lista di pacchetti con licenze non free, pkgsrc darà errori se il pacchetto che si desidera installare ha una licenza non libera. Per aggiungerlo ugualmente la sua licenza deve essere aggiunta nel file mk.conf ''(es.: ACCEPTABLE_LICENSES+=vim-license)'' &lt;br /&gt;
&lt;br /&gt;
 # /usr/pkg/sbin/download-vulnerability-list&lt;br /&gt;
&lt;br /&gt;
* '''Digest:''' contiene la lista delle vulnerabilità dei vari pacchetti. Per far sì che pkgsrc ignori questi errori è necessario installarlo ed aggiungere il pacchetto su mk.conf ''(es.: ALLOW_VULNERABLE_PACKAGES=vim)''&lt;br /&gt;
 # cd /usr/pkgsrc/pkgtools/digest&lt;br /&gt;
 # bmake install&lt;br /&gt;
&lt;br /&gt;
= Aggiornare pkgsrc =&lt;br /&gt;
&lt;br /&gt;
Per tenere l' albero aggiornato lo si può fare in diversi modi:&lt;br /&gt;
&lt;br /&gt;
== Via anonymous CVS ==&lt;br /&gt;
La versione stabile del 2019 primo quadrimestre&lt;br /&gt;
 $ cd /usr &amp;amp;&amp;amp; cvs -q -z2 -d anoncvs@anoncvs.NetBSD.org:/cvsroot checkout -r pkgsrc-2019Q1 -P pkgsrc&lt;br /&gt;
&lt;br /&gt;
Oppure la versione corrente, denominata per l' appunto ''current''&lt;br /&gt;
 $ cd /usr &amp;amp;&amp;amp; cvs -q -z2 -d anoncvs@anoncvs.NetBSD.org:/cvsroot checkout -P pkgsrc&lt;br /&gt;
&lt;br /&gt;
== Via CVS ==&lt;br /&gt;
Aggiornare pkgsrc via CVS, dirigersi versola directory /usr/pkgsrc ed far partire cvs:&lt;br /&gt;
&lt;br /&gt;
 $ cd /usr/pkgsrc &amp;amp;&amp;amp; cvs update -dP&lt;br /&gt;
&lt;br /&gt;
= Mantenere e aggiornare il sistema =&lt;br /&gt;
&lt;br /&gt;
* Aggiornare i pacchetti&lt;br /&gt;
Installare lintpkgsrc per effettuare l'aggiornamento dei pacchetti in maniera automatica&lt;br /&gt;
 # cd /usr/pkgsrc/pkgtools/lintpkgsrc &amp;amp;&amp;amp; bmake install&lt;br /&gt;
&lt;br /&gt;
Far partire lintpkgsrc:&lt;br /&gt;
 # lintpkgsrc -i&lt;br /&gt;
&lt;br /&gt;
Per vedere i vari comandi&lt;br /&gt;
 # lintpkgsrc -h&lt;br /&gt;
&lt;br /&gt;
 # lintpkgsrc -i    # check per update&lt;br /&gt;
 # lintpkgsrc -o    # check per la versione vecchia delle distribuzioni dei file&lt;br /&gt;
 # lintpkgsrc -or   # rimuove le vecchie distribuzioni dei file&lt;br /&gt;
&lt;br /&gt;
== Tips ==&lt;br /&gt;
* Se il software fornito da pkgsrc non è sufficiente è possibile aggiungere [http://pkgsrc.org/wip/ pkgsrc-wip] ''(work in progress)''&lt;br /&gt;
 # cd /usr/pkgsrc/&lt;br /&gt;
 # git clone git://wip.pkgsrc.org/pkgsrc-wip.git wip&lt;br /&gt;
&lt;br /&gt;
* Utilizzate '''btrfs''' (magari montato con l'opzione di compressione ''lzo'') per '''/usr/pkg''' ed effettuare degli snapshot del filesystem prima di importanti installazioni o aggiornamenti.&lt;br /&gt;
&lt;br /&gt;
* Con i dovuti accorgimenti questa guida è applicabile a qualsiasi distribuzione&lt;br /&gt;
&lt;br /&gt;
[[Category:Howto]]&lt;/div&gt;</summary>
		<author><name>$pooky Hunter</name></author>
	</entry>
	<entry>
		<id>https://wiki.golem.linux.it/index.php?title=Pkgsrc_su_Slackware&amp;diff=9985</id>
		<title>Pkgsrc su Slackware</title>
		<link rel="alternate" type="text/html" href="https://wiki.golem.linux.it/index.php?title=Pkgsrc_su_Slackware&amp;diff=9985"/>
		<updated>2026-05-24T09:27:12Z</updated>

		<summary type="html">&lt;p&gt;$pooky Hunter: /* Installare pkgsrc */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduzione==&lt;br /&gt;
[http://it.wikipedia.org/wiki/Slackware Slackware] è la distribuzione più longeva tra quelle ancora in auge.&lt;br /&gt;
Sviluppata con una particolare attenzione riguardo a stabilità e semplicità non possiede però né strumenti di configurazione con interfaccia grafica, né un sistema di gestione dei pacchetti con controllo automatico delle dipendenze.&lt;br /&gt;
&lt;br /&gt;
==Gestione dei pacchetti==&lt;br /&gt;
=== Comandi ===&lt;br /&gt;
 installpkg ''nomepacchetto'' (Installa un pacchetto)&lt;br /&gt;
 removepkg ''nomepacchetto'' (Rimuove un pacchetto)&lt;br /&gt;
 updatepkg ''nomepacchetto'' (Aggiorna un pacchetto) &lt;br /&gt;
&lt;br /&gt;
=== Gestori di pacchetti===&lt;br /&gt;
* Gestore ufficiale: Slackpkg (permette l'installazione di pacchetti da repository online, ma non gestisce le dipendenze)&lt;br /&gt;
&lt;br /&gt;
* Gestori non ufficiali: [http://software.jaos.org/ slapt-get]&lt;br /&gt;
&lt;br /&gt;
=== Software extra ===&lt;br /&gt;
Uno dei principali problemi di Slackware è la difficoltà di reperimento del software, la quantità di pacchetti ufficiali è decisamente inferiore a quella delle altre principali distribuzioni.&lt;br /&gt;
Programmi popolari come Libreoffice, GNOME o VLC non sono presenti nei repository ufficiali.&lt;br /&gt;
&lt;br /&gt;
=== Soluzioni alternative ===&lt;br /&gt;
* slacktrack: utility per la creazione di pacchetti Slackware a partire dal sorgente di un programma.&lt;br /&gt;
&lt;br /&gt;
* rpm2tgz: programma per convertire pacchetti rpm nel formato tgz (utile per installare grossi pacchetti statici come Libreoffice o Chrome).&lt;br /&gt;
&lt;br /&gt;
* [https://sbopkg.org/ Sbopkg]: script per lo scaricamento, la compilazione e l'installazione degli [https://slackbuilds.org/ SlackBuilds].&lt;br /&gt;
&lt;br /&gt;
* [https://sourceforge.net/projects/slackpkgplus/ Slackpkg+]: plugin che permette a Slackpkg di gestire repository non ufficiali come alienbob&lt;br /&gt;
&lt;br /&gt;
* [http://www.pkgsrc.org/ pkgsrc]: ''(package source)'', framework per compilare ed installare software di terze parti su NetBSD ed altri sistemi di tipo UNIX.&lt;br /&gt;
&lt;br /&gt;
=pkgsrc=&lt;br /&gt;
== Introduzione ==&lt;br /&gt;
Se si decidesse di percorrere questa strada è consigliabile effettuare un'installazione minima del sistema Slackware (Base Linux System, Program Development, System libraries, Networking) ed utilizzare pkgsrc per il resto del software (es.: X11, KDE, Libreoffice).&lt;br /&gt;
&lt;br /&gt;
Procediamo con la selezione del softwareda installare, nel setup selezionare:&lt;br /&gt;
 * A&lt;br /&gt;
 * AP&lt;br /&gt;
 * D&lt;br /&gt;
 * L&lt;br /&gt;
 * N&lt;br /&gt;
&lt;br /&gt;
E' possibile, volendo, eliminare anche le selezioni AP ed N, si dovrà poi, reinstallare con il framework tutto il resto&lt;br /&gt;
&lt;br /&gt;
== Installare pkgsrc ==&lt;br /&gt;
Scaricare l'ultimo tarball disponibile&lt;br /&gt;
 # cd /usr&lt;br /&gt;
 # wget [http://ftp.netbsd.org/pub/pkgsrc/current/pkgsrc.tar.xz http://ftp.netbsd.org/pub/pkgsrc/current/pkgsrc.tar.xz]&lt;br /&gt;
 # tar xJvf pkgsrc.tar.xz&lt;br /&gt;
&lt;br /&gt;
Eseguire il bootstrap&lt;br /&gt;
 # cd /usr/pkgsrc/bootstrap&lt;br /&gt;
 # ./bootstrap&lt;br /&gt;
&lt;br /&gt;
Modificare il profilo della shell:&lt;br /&gt;
  export PATH=$PATH:/usr/pkg/bin:/usr/pkg/sbin&lt;br /&gt;
  export MANPATH=$MANPATH:/usr/pkg/man&lt;br /&gt;
&lt;br /&gt;
Per installare un sorgente procedere come segue:&lt;br /&gt;
 $ cd /usr/pkgsrc/x11/modular-xorg-server&lt;br /&gt;
 # bmake install clean clean-depends&lt;br /&gt;
&lt;br /&gt;
= Messa a punto del sistema =&lt;br /&gt;
== mk.conf ==&lt;br /&gt;
Editare il file '''/usr/pkg/etc/mk.conf''' aggiungendo le seguenti righe:&lt;br /&gt;
&lt;br /&gt;
  # Example /usr/pkg/etc/mk.conf file produced by bootstrap-pkgsrc&lt;br /&gt;
  # Thu Apr 18 21:52:13 UTC 2019&lt;br /&gt;
  &lt;br /&gt;
  .ifdef BSD_PKG_MK           # begin pkgsrc settings&lt;br /&gt;
  &lt;br /&gt;
  ABI=                        64&lt;br /&gt;
  &lt;br /&gt;
  PKG_DBDIR=                  /usr/pkg/pkgdb&lt;br /&gt;
  LOCALBASE=                  /usr/pkg&lt;br /&gt;
  VARBASE=                    /var&lt;br /&gt;
  PKG_TOOLS_BIN=              /usr/pkg/sbin&lt;br /&gt;
  PKGINFODIR=                 info&lt;br /&gt;
  PKGMANDIR=                  man&lt;br /&gt;
   &lt;br /&gt;
  PKG_RCD_SCRIPTS=            yes&lt;br /&gt;
  RCD_SCRIPTS_DIR=            /etc/rc.d&lt;br /&gt;
  ACCEPTABLE_LICENSES+=       vim-license&lt;br /&gt;
  ALLOW_VULNERABLE_PACKAGES=  vim&lt;br /&gt;
  USE_DESTDIR=                NO&lt;br /&gt;
  PKG_RESUME_TRANSFERS=       YES&lt;br /&gt;
  &lt;br /&gt;
  PKG_ADD_CMD?=               /usr/pkgsrc/bootstrap/work/sbin/pkg_add&lt;br /&gt;
  PKG_ADMIN_CMD?=             /usr/pkgsrc/bootstrap/work/sbin/pkg_admin&lt;br /&gt;
  PKG_CREATE_CMD?=            /usr/pkgsrc/bootstrap/work/sbin/pkg_create&lt;br /&gt;
  PKG_INFO_CMD?=              /usr/pkgsrc/bootstrap/work/sbin/pkg_info&lt;br /&gt;
  WRKOBJDIR=                  /usr/pkgsrc/bootstrap/work/wrk&lt;br /&gt;
  MAKE_jobs=                  4&lt;br /&gt;
  &lt;br /&gt;
  .endif                      # end pkgsrc settings &lt;br /&gt;
&lt;br /&gt;
Aggiungere le librerie di pkgsrc a quelle Slackware &lt;br /&gt;
 # echo /usr/pkg/lib &amp;gt;&amp;gt; /etc/ld.so.conf&lt;br /&gt;
 # cat /etc/ld.so.conf&lt;br /&gt;
&lt;br /&gt;
verificato che è tutto ok, si può procedere oltre.&lt;br /&gt;
&lt;br /&gt;
== Pacchetti essenziali ==&lt;br /&gt;
&lt;br /&gt;
* Il subsystem rc.d del NetBSD per avviare eventuali servizi&lt;br /&gt;
 # cd /usr/pkgsrc/pkgtools/rc.subr/ &amp;amp;&amp;amp; bmake install&lt;br /&gt;
&lt;br /&gt;
* '''Audit:''' lista di pacchetti con licenze non free, pkgsrc darà errori se il pacchetto che si desidera installare ha una licenza non libera. Per aggiungerlo ugualmente la sua licenza deve essere aggiunta nel file mk.conf ''(es.: ACCEPTABLE_LICENSES+=vim-license)'' &lt;br /&gt;
&lt;br /&gt;
 # /usr/pkg/sbin/download-vulnerability-list&lt;br /&gt;
&lt;br /&gt;
* '''Digest:''' contiene la lista delle vulnerabilità dei vari pacchetti. Per far sì che pkgsrc ignori questi errori è necessario installarlo ed aggiungere il pacchetto su mk.conf ''(es.: ALLOW_VULNERABLE_PACKAGES=vim)''&lt;br /&gt;
 # cd /usr/pkgsrc/pkgtools/digest&lt;br /&gt;
 # bmake install&lt;br /&gt;
&lt;br /&gt;
= Aggiornare pkgsrc =&lt;br /&gt;
&lt;br /&gt;
Per tenere l' albero aggiornato lo si può fare in diversi modi:&lt;br /&gt;
&lt;br /&gt;
== Via anonymous CVS ==&lt;br /&gt;
La versione stabile del 2019 primo quadrimestre&lt;br /&gt;
 $ cd /usr &amp;amp;&amp;amp; cvs -q -z2 -d anoncvs@anoncvs.NetBSD.org:/cvsroot checkout -r pkgsrc-2019Q1 -P pkgsrc&lt;br /&gt;
&lt;br /&gt;
Oppure la versione corrente, denominata per l' appunto ''current''&lt;br /&gt;
 $ cd /usr &amp;amp;&amp;amp; cvs -q -z2 -d anoncvs@anoncvs.NetBSD.org:/cvsroot checkout -P pkgsrc&lt;br /&gt;
&lt;br /&gt;
== Via CVS ==&lt;br /&gt;
Aggiornare pkgsrc via CVS, dirigersi versola directory /usr/pkgsrc ed far partire cvs:&lt;br /&gt;
&lt;br /&gt;
 $ cd /usr/pkgsrc &amp;amp;&amp;amp; cvs update -dP&lt;br /&gt;
&lt;br /&gt;
= Mantenere e aggiornare il sistema =&lt;br /&gt;
&lt;br /&gt;
* Aggiornare i pacchetti&lt;br /&gt;
Installare lintpkgsrc per effettuare l'aggiornamento dei pacchetti in maniera automatica&lt;br /&gt;
 # cd /usr/pkgsrc/pkgtools/lintpkgsrc &amp;amp;&amp;amp; bmake install&lt;br /&gt;
&lt;br /&gt;
Far partire lintpkgsrc:&lt;br /&gt;
 # lintpkgsrc -i&lt;br /&gt;
&lt;br /&gt;
Per vedere i vari comandi&lt;br /&gt;
 # lintpkgsrc -h&lt;br /&gt;
&lt;br /&gt;
 # lintpkgsrc -i    # check per update&lt;br /&gt;
 # lintpkgsrc -o    # check per la versione vecchia delle distribuzioni dei file&lt;br /&gt;
 # lintpkgsrc -or   # rimuove le vecchie distribuzioni dei file&lt;br /&gt;
&lt;br /&gt;
== Tips ==&lt;br /&gt;
* Se il software fornito da pkgsrc non è sufficiente è possibile aggiungere [http://pkgsrc.org/wip/ pkgsrc-wip] ''(work in progress)''&lt;br /&gt;
 # cd /usr/pkgsrc/&lt;br /&gt;
 # git clone git://wip.pkgsrc.org/pkgsrc-wip.git wip&lt;br /&gt;
&lt;br /&gt;
* Utilizzate '''btrfs''' (magari montato con l'opzione di compressione ''lzo'') per '''/usr/pkg''' ed effettuare degli snapshot del filesystem prima di importanti installazioni o aggiornamenti.&lt;br /&gt;
&lt;br /&gt;
* Con i dovuti accorgimenti questa guida è applicabile a qualsiasi distribuzione&lt;br /&gt;
&lt;br /&gt;
[[Category:Howto]]&lt;/div&gt;</summary>
		<author><name>$pooky Hunter</name></author>
	</entry>
	<entry>
		<id>https://wiki.golem.linux.it/index.php?title=Linux_minimale_per_PC_i386/i486&amp;diff=9984</id>
		<title>Linux minimale per PC i386/i486</title>
		<link rel="alternate" type="text/html" href="https://wiki.golem.linux.it/index.php?title=Linux_minimale_per_PC_i386/i486&amp;diff=9984"/>
		<updated>2026-05-23T09:02:07Z</updated>

		<summary type="html">&lt;p&gt;$pooky Hunter: /* output */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Distribuzioni per i386-i486=&lt;br /&gt;
Per il recupero di macchine particolarmente vecchie esistono delle mini distribuzioni prive di ambiente grafico e talmente compatte da poter essere contenute in un unico floppy.&lt;br /&gt;
&lt;br /&gt;
NB: i386 non più supportato dal kernel 3.8 (2012), i486 dal kernel 7.1&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! Distribuzione&lt;br /&gt;
! Versione Kernel&lt;br /&gt;
! Supporto avvio&lt;br /&gt;
! CPU minima&lt;br /&gt;
! RAM minima&lt;br /&gt;
! Uso ideale&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [http://delicate-linux.net/ DeLi(cate) Linux]&lt;br /&gt;
| 2.4.37.11&lt;br /&gt;
| CDROM&lt;br /&gt;
| i386&lt;br /&gt;
| 8 MB (console) - 64 MB (GUI)&lt;br /&gt;
| Trashware&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.fdlinux.com/download.php FD Linux]&lt;br /&gt;
| 2.4.20&lt;br /&gt;
| 1 floppy&lt;br /&gt;
| 386SX&lt;br /&gt;
| 4 MB&lt;br /&gt;
| DOS/Linux compatto&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.zelow.no/floppyfw floppyfw]&lt;br /&gt;
| 2.4.37.11&lt;br /&gt;
| 1 floppy&lt;br /&gt;
| 386SX&lt;br /&gt;
| 12 MB&lt;br /&gt;
| Router/firewall embedded (iptables)&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [https://web.archive.org/web/20190312063410/http://chris.silmor.de/hal91/ HAL91]&lt;br /&gt;
| 2.0.39&lt;br /&gt;
| 1 floppy&lt;br /&gt;
| i386&lt;br /&gt;
| 8 MB&lt;br /&gt;
| Network solo con scheda NE2000 ISA&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [https://micheleandreoli.org/public/Software/mulinux// muLinux]&lt;br /&gt;
| 2.0.36&lt;br /&gt;
| 1+ floppy modulari&lt;br /&gt;
| 386SX&lt;br /&gt;
| 4 MB&lt;br /&gt;
| Recupero PC vintage&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.tinycorelinux.com Tiny Core Linux]&lt;br /&gt;
| 6.18.2&lt;br /&gt;
| CDROM&lt;br /&gt;
| i486DX&lt;br /&gt;
| 80 MB&lt;br /&gt;
| Minimalismo estremo, appliance&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [https://sourceforge.net/projects/zool5remastered/ Zool]&lt;br /&gt;
| 2.4.37.11&lt;br /&gt;
| 1 floppy&lt;br /&gt;
| i386&lt;br /&gt;
| 12 MB&lt;br /&gt;
| Networking completo (httpd, ftpd, telnetd)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Distribuzioni per i586-i686=&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! Distribuzione Linux&lt;br /&gt;
! Versione Kernel&lt;br /&gt;
! CPU minima&lt;br /&gt;
! RAM minima&lt;br /&gt;
! Uso ideale&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [http://alpinelinux.org Alpine]&lt;br /&gt;
| 6.18.1-lts&lt;br /&gt;
| i686&lt;br /&gt;
| 128 MB (console)&lt;br /&gt;
| Server Minimali, Container&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.damnsmalllinux.org  Damn Small Linux 2024]&lt;br /&gt;
| 5.10.188&lt;br /&gt;
| i686&lt;br /&gt;
| 128 MB (console)&lt;br /&gt;
| Desktop leggero&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.puppylinux.com Puppy]&lt;br /&gt;
| 6.6.137&lt;br /&gt;
| i686&lt;br /&gt;
| 128 MB (console)&lt;br /&gt;
| Desktop leggero (Slackware 15 base)&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.slitaz.org SliTaz]&lt;br /&gt;
| 3.16.55&lt;br /&gt;
| i686&lt;br /&gt;
| 64 MB (console) - 256 MB (GUI)&lt;br /&gt;
| Desktop leggero&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! BSD&lt;br /&gt;
! Versione&lt;br /&gt;
! CPU minima&lt;br /&gt;
! RAM minima&lt;br /&gt;
! Uso ideale&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.openbsd.org OpenBSD]&lt;br /&gt;
| 7.8&lt;br /&gt;
| i586&lt;br /&gt;
| 32 MB (console)&lt;br /&gt;
| Server/router&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.netbsd.org NetBSD]&lt;br /&gt;
| 10&lt;br /&gt;
| i586&lt;br /&gt;
| 64 MB (console)&lt;br /&gt;
| Server/router&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Se si cerca un'esperienza desktop per un Pentium 100-200Mhz con 32-64 MB RAM ci si dovrà rassegnare a recuperare una distribuzione dell'epoca come [https://archive.org/download/mandrake-7.2-i386_202304/mandrake-7.2-i386.iso Mandrake 7.2]&lt;br /&gt;
&lt;br /&gt;
=Buildroot=&lt;br /&gt;
Soluzioni preconfezionate (come quelle sopra elencate) potrebbero non rispondere alle nostre esigenze: kernel datati, driver o applicativi mancanti.&lt;br /&gt;
&lt;br /&gt;
In questi casi la soluzione più rapida è quella di costruirsi un sistema Linux personalizzato. Per farlo il metodo più semplice è utilizzare [https://buildroot.org/download.html Buildroot], un tool che permette la cross-compilazione di un ambiente Linux completo di librerie (glibc, uclibc-ng o musl), applicazioni e l'indispensabile busybox.&lt;br /&gt;
&lt;br /&gt;
Scompattare il tool&lt;br /&gt;
 $ tar -xzvf buildroot-2026.02.tar.gz&lt;br /&gt;
&lt;br /&gt;
Entrare nella directory principale&lt;br /&gt;
 $ cd buildroot-2026.02/&lt;br /&gt;
&lt;br /&gt;
==BusyBox==&lt;br /&gt;
Configurare busybox selezionando i programmi che si ritengono necessari&lt;br /&gt;
 $ make busybox-menuconfig&lt;br /&gt;
&lt;br /&gt;
==Kernel==&lt;br /&gt;
Configurare il kernel per la compilazione&lt;br /&gt;
 $ make linux-menuconfig&lt;br /&gt;
&lt;br /&gt;
Escludere tutto ciò che non è strettamente necessario per risparmiare spazio su disco, quanto segue dovrà essere necessariamente presente per ottenere un sistema minimo avviabile.&lt;br /&gt;
&lt;br /&gt;
* Code maturity level-&amp;gt; Prompt for development&lt;br /&gt;
&lt;br /&gt;
* Processor type and features-&amp;gt; Support for your processor&lt;br /&gt;
&lt;br /&gt;
* General setup-&amp;gt; kernel support for ELF binaries&lt;br /&gt;
&lt;br /&gt;
* Block devices-&amp;gt; RAM disk support&lt;br /&gt;
&lt;br /&gt;
* File systems-&amp;gt; /proc filesystem, tmpfs, ext2&lt;br /&gt;
&lt;br /&gt;
* Character devices-&amp;gt; Virtual terminal&lt;br /&gt;
&lt;br /&gt;
* Character devices-&amp;gt; Support for console on virtual terminal&lt;br /&gt;
&lt;br /&gt;
* Console drivers-&amp;gt; VGA text console&lt;br /&gt;
&lt;br /&gt;
* General setup-&amp;gt; PCI support&lt;br /&gt;
&lt;br /&gt;
* I driver delle schede di rete che interessa supportare (ne, ne2k, rtl8139too, rtl8139c, pcnet32, e1000)&lt;br /&gt;
&lt;br /&gt;
* Iptables se si necessita di un firewall&lt;br /&gt;
&lt;br /&gt;
* Un driver IDE generico (generic ATA) su libata&lt;br /&gt;
&lt;br /&gt;
* Block devices-&amp;gt; Normal PC floppy disk support, se ci interesse il supporto al floppy&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Se si deve limitare al massimo la grandezza dell'immagine del kernel (bzImage) si può scegliere con un algoritmo di compressione come lzma. Questo però aumenterà il consumo di RAM e per macchine molto vecchie come i386 o i486 probabilmente è meglio optare per gz o al massimo bz2.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Configurazione generale==&lt;br /&gt;
 $ make menuconfig&lt;br /&gt;
&lt;br /&gt;
Indicare:&lt;br /&gt;
&lt;br /&gt;
* Architettura di destinazione (i386, i486, i586…)&lt;br /&gt;
&lt;br /&gt;
* Opzioni di compilazione&lt;br /&gt;
&lt;br /&gt;
* Versione del kernel da usare&lt;br /&gt;
&lt;br /&gt;
* Configurazione di partenza del kernel&lt;br /&gt;
 Kernel  ---&amp;gt; Kernel configuration (Use the architecture default configuration)&lt;br /&gt;
&lt;br /&gt;
* Eventuali altri programmi non presenti in busybox (es.: mdev, dropbear, nano, iptables, ncftp, lynx, mutt)&lt;br /&gt;
&lt;br /&gt;
* Si consiglia l'opzione di compilazione gcc '''-Os''' al fine di ridurre al minimo la grandezza dei binari &lt;br /&gt;
&lt;br /&gt;
===Filesystem images===&lt;br /&gt;
Esistono varie tipologie di filesystem da utilizzare per il sistema che verrà compilato: immagini ext2, squashfs, direttamente nel initramfs o semplicemente in un tarball. Nel caso ci interessi costruire un floppy, al fine di sfruttare al meglio lo spazio, consiglio di scegliere ext2 compresso, anche in questo caso con lzma si ottengono filesystem fino al 20% più piccoli rispetto a quelli compressi con bzip2, ma il sistema  necessiterà di maggiore RAM per caricarli (70-80MB). &lt;br /&gt;
&lt;br /&gt;
Terminata la fase di configurazione si può procedere con la compilazione&lt;br /&gt;
 $ make&lt;br /&gt;
&lt;br /&gt;
===output===&lt;br /&gt;
Nella directory buildroot-2026.02/output/images risiede il prodotto finito.&lt;br /&gt;
Se lasciate le impostazioni standard si tratterà di 3 file: bzImage, rootfs.ext2, rootfs.tar.&lt;br /&gt;
&lt;br /&gt;
==Immagine per floppy disk==&lt;br /&gt;
Le dimensioni dei file bzImage e rootfs.i486.ext2.lzma devono essere sufficientemente contenute per entrare su un floppy.&lt;br /&gt;
Nel caso fossero solo di poco più grandi (100-200 KB), si può rimediare con la formattazione non standard del floppy: a 1.72 MB invece che a 1.44MB.&lt;br /&gt;
 $ sudo mknod /dev/fd0u1722 b 2 60&lt;br /&gt;
 $ fdformat /dev/fd0u1722&lt;br /&gt;
 $ mkfs.vfat /dev/fd0u1722&lt;br /&gt;
&lt;br /&gt;
Se non presente creare un mount point per il floppy&lt;br /&gt;
 $ sudo mkdir /mnt/floppy&lt;br /&gt;
&lt;br /&gt;
Montare il floppy&lt;br /&gt;
 $ sudo mount /dev/fd0u1722 /mnt/floppy&lt;br /&gt;
&lt;br /&gt;
Copiarvi i due file&lt;br /&gt;
 $ sudo cp buildroot/output/images/bzImage /mnt/floppy&lt;br /&gt;
 $ sudo cp buildroot/output/images/rootfs.i486.ext2.lzma /mnt/floppy&lt;br /&gt;
&lt;br /&gt;
Adesso occorre installare un boot loader sul floppy. Essendo leggero, semplice da usare e supportando la FAT16 si consiglia di usare syslinux.&lt;br /&gt;
&lt;br /&gt;
Se syslinux non fosse presente sul vostro sistema installatelo con:&lt;br /&gt;
&lt;br /&gt;
 $ sudo apt-get install syslinux&lt;br /&gt;
per sistemi Debian-based&lt;br /&gt;
&lt;br /&gt;
O con&lt;br /&gt;
 # pacman -S syslinux&lt;br /&gt;
su Arch Linux&lt;br /&gt;
&lt;br /&gt;
Con un editor di testo (es. nano) create il file di configurazione per il boot loader: syslinux.cfg&lt;br /&gt;
 $ sudo nano /mnt/floppy/syslinux.cfg&lt;br /&gt;
&lt;br /&gt;
Riportate quanto segue, eventualmente adattandolo alle vostre esigenze:&lt;br /&gt;
&lt;br /&gt;
 default start&lt;br /&gt;
 timeout 5&lt;br /&gt;
 prompt 1&lt;br /&gt;
 label start&lt;br /&gt;
 kernel bzImage&lt;br /&gt;
 append initrd=rootfs.i486.ext2.lzma BOOTDEV=fd0 ramdisk_size=16384 vga=0 root=/dev/ram0&lt;br /&gt;
&lt;br /&gt;
Se è stato usato un altro tipo di filesystem sostituire rootfs.i486.ext2.lzma con rootfs.i486.ext2.bz2, rootfs.i486.ext2.squashfs…&lt;br /&gt;
&lt;br /&gt;
Installare il bootloader sul floppy&lt;br /&gt;
 $ sudo syslinux /dev/fd0&lt;br /&gt;
&lt;br /&gt;
Smontare il floppy&lt;br /&gt;
 $ cd&lt;br /&gt;
 $ sudo umount /mnt/floppy&lt;br /&gt;
&lt;br /&gt;
In caso di necessità di modifiche al ramdisk bisognerà copiarlo sul disco fisso, decomprimerlo, montarlo in loop ed effettuare le modifiche in questo modo:&lt;br /&gt;
 $ sudo mount /mnt/floppy&lt;br /&gt;
 $ sudo cp /mnt/floppy/rootfs.i486.ext2.lzma&lt;br /&gt;
 $ sudo lzma -d rootfs.i486.ext2.lzma&lt;br /&gt;
 $ sudo mkdir /mnt/tmp&lt;br /&gt;
 $ sudo mount -o loop rootfs.i486.ext2 /mnt/tmp&lt;br /&gt;
 $ cd /mnt/tmp&lt;br /&gt;
&lt;br /&gt;
Effettuare le modifiche e poi smontare il tutto&lt;br /&gt;
 $ cd&lt;br /&gt;
 $ sudo umount /mnt/tmp&lt;br /&gt;
&lt;br /&gt;
Ricomprimere il ramdisk e copiarlo sul floppy per sostituire quello vecchio&lt;br /&gt;
 $ sudo lzma -c9 rootfs.i486.ext2 &amp;gt; rootfs.i486.ext2.lzma&lt;br /&gt;
 $ sudo cp rootfs.i486.ext2.lzma /mnt/floppy&lt;br /&gt;
 $ sudo umount /mnt/floppy&lt;br /&gt;
&lt;br /&gt;
==Immagine per hard disk==&lt;br /&gt;
Se un floppy è troppo piccolo per le nostre esigenze si può costruire il sistema dentro ad un file d'immagine da copiare sull'hard disk della nostra macchina direttamente con dd. Creiamo quindi un'immagine da 250 MB, che dovrebbe essere più che sufficiente per un sistema testuale&lt;br /&gt;
 dd if=/dev/zero of=output/images/486linux.img bs=1M count=250&lt;br /&gt;
&lt;br /&gt;
Montiamo l'immagine per poter formattare il filesystem e copiarci i dati&lt;br /&gt;
 # losetup -Pf 486linux.img&lt;br /&gt;
 # mkfs.ext2 /dev/loop0p1&lt;br /&gt;
Probabilmente il miglior filesystem per un sistema così vecchio è ext2, si rinuncia al journaling, ma ci si guadagna parecchio in performance.&lt;br /&gt;
 # mkfs.ext2 -m 0 -O none /dev/loop0p1&lt;br /&gt;
&lt;br /&gt;
Montiamo il tutto&lt;br /&gt;
 # mount /dev/loop0p1 /mnt/img&lt;br /&gt;
&lt;br /&gt;
Copiamoci il filesystem ed il kernel&lt;br /&gt;
 # tar xf buildroot-2026.02/output/images/rootfs.tar -C /mnt/img&lt;br /&gt;
 # mkdir -p /mnt/img/boot&lt;br /&gt;
 # cp buildroot-2026.02/output/images/bzImage /mnt/img/boot/bzImage&lt;br /&gt;
&lt;br /&gt;
Come bootloader, anche in questo caso si è optato per il semplicissimo syslinux.&lt;br /&gt;
 sudo pacman -S syslinux&lt;br /&gt;
 sudo extlinux --install /mnt/img/boot/&lt;br /&gt;
&lt;br /&gt;
Configuriamo il bootloader (/mnt/boot/syslinux.cfg)&lt;br /&gt;
 DEFAULT linux&lt;br /&gt;
 timeout 5&lt;br /&gt;
 prompt 1&lt;br /&gt;
 LABEL linux&lt;br /&gt;
    KERNEL /boot/bzImage&lt;br /&gt;
    APPEND root=/dev/sda1 ro&lt;br /&gt;
&lt;br /&gt;
===Tastiera italiana===&lt;br /&gt;
Se ci interessa la tastiera italiana creiamo dal nostro sistema host il file .bmap da far caricare a busybox &lt;br /&gt;
 # loadkeys -qb it &amp;gt; it.bmap&lt;br /&gt;
 # mv it.bmap output/target/etc/&lt;br /&gt;
 # make&lt;br /&gt;
&lt;br /&gt;
Possiamo creare uno script d'avvio tipo per far caricare automaticamente la tastiera italiana (ricordatevi di renderlo eseguibile).&lt;br /&gt;
&lt;br /&gt;
'''/etc/init.d/S40keyboard'''&lt;br /&gt;
 #!/bin/sh&lt;br /&gt;
 loadkmap &amp;lt; /etc/it.bmap&lt;br /&gt;
&lt;br /&gt;
===Hotplug===&lt;br /&gt;
Per l'hotplug dei moduli occorre aver installato il programma mdev, anche in questo caso converrà scrivere uno script di avvio&lt;br /&gt;
&lt;br /&gt;
'''/etc/init.d/S10mdev'''&lt;br /&gt;
 #!/bin/sh&lt;br /&gt;
 case &amp;quot;$1&amp;quot; in&lt;br /&gt;
    start)&lt;br /&gt;
        echo &amp;quot;Starting mdev...&amp;quot;&lt;br /&gt;
        # Scansiona /sys per creare i device node per l'hardware già presente&lt;br /&gt;
        /sbin/mdev -s&lt;br /&gt;
        # Questo è il &amp;quot;coldplug&amp;quot;: trova tutti i moduli dell'hardware già presente e li carica&lt;br /&gt;
        echo &amp;quot;Loading kernel modules for existing hardware...&amp;quot;&lt;br /&gt;
        find /sys/ -name modalias | xargs sort -u | xargs modprobe -abq&lt;br /&gt;
        ;;&lt;br /&gt;
    stop)&lt;br /&gt;
        echo &amp;quot;Stopping mdev...&amp;quot;&lt;br /&gt;
        ;;&lt;br /&gt;
    *)&lt;br /&gt;
        echo &amp;quot;Usage: $0 {start|stop}&amp;quot;&lt;br /&gt;
        exit 1&lt;br /&gt;
        ;;&lt;br /&gt;
 esac&lt;br /&gt;
[[Category:howto]]&lt;/div&gt;</summary>
		<author><name>$pooky Hunter</name></author>
	</entry>
	<entry>
		<id>https://wiki.golem.linux.it/index.php?title=UEFI_e_GPT&amp;diff=9983</id>
		<title>UEFI e GPT</title>
		<link rel="alternate" type="text/html" href="https://wiki.golem.linux.it/index.php?title=UEFI_e_GPT&amp;diff=9983"/>
		<updated>2026-05-18T21:47:26Z</updated>

		<summary type="html">&lt;p&gt;$pooky Hunter: /* Partizionamento */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Introduzione a UEFI e GPT=&lt;br /&gt;
&lt;br /&gt;
UEFI è il nuovo standard che sostituirà il BIOS, ovvero quel programma di base che viene lanciato all'avvio del computer e ne consente la configurazione base e l'avvio dei sistemi operativi. UEFI ha destato attenzione nel mondo '''Linux''' per tre motivi:&lt;br /&gt;
&lt;br /&gt;
# adotta nuovi metodi di '''avvio''' e di '''partizionamento''', infatti non è più presente la scelta di avvio dal primo/secondo disco o dal CD, bensì è UEFI a rilevare i supporti avviabili. Anche i CD e le pennine di installazione devono quindi essere '''UEFI-compatibili''', ma la maggior parte lo è (Ubuntu, Mint, Debian, ArchLinux...);&lt;br /&gt;
# il sistema di partizionamento MBR è stato soppiantato da '''GPT''', quindi bisogna imparare a partizionare i dischi seguendo questo standard: la nuova tabella partizioni consente di creare più di 4 partizioni primarie (fino a 128, e non esiste più il concetto di partizione estesa). Inoltre è necessaria una partizione dedicata per l'avvio, detta ''ESP (EFI System Partition)'', che contiene i file di avvio dei sistemi installati. I comandi fdisk e cfdisk sono stati aggiornati e supportano anche GPT. Su distro vecchie (precedenti al 2016-2017) è necessario usare rispettivamente '''gdisk''' e '''cgdisk''';&lt;br /&gt;
# '''Microsoft''' ha messo lo zampino nella tecnologia del '''secure boot''': un controllo che consente di bloccare l'installazione di sistemi non autorizzati; l'opzione sulla maggior parte dei dispositivi venduti può essere disabilitata, e se non può esserlo, spesso si riesce comunque a installare Linux, anche se con qualche grattacapo in più;&lt;br /&gt;
&lt;br /&gt;
In questa pagina si cerca di riassumere tutto quello che c'è da sapere su UEFI prendendo come obiettivo l'installazione della distribuzione '''ArchLinux'''.&lt;br /&gt;
&lt;br /&gt;
=Configurare UEFI=&lt;br /&gt;
Il primo passo da compiere è entrare nel menù di UEFI, premendo il tasto giusto all'avvio (di solito '''DEL/CANC''' o '''F2''', ma varia in base al modello). L'interfaccia grafica non è identica su tutti i computer: alcuni produttori usano quella simile al vecchio bios (bianca e blu/grigia), altri aggiungono a questa una versione più intuitiva e grafica dove è addirittura possibile usare il mouse, navigare un filesystem, catturare screenshot e navigare con un browser web.&lt;br /&gt;
 &lt;br /&gt;
Per installare sistemi ''diversi da Windows'' vanno disabilitati i parametri '''Fast Boot''' e '''Secure Boot''', dopodiché è possibile inserire il CD di installazione, da cui fare il boot (a volte è necessario riavviare per far rilevare il disco a UEFI).&lt;br /&gt;
&lt;br /&gt;
=Partizionamento=&lt;br /&gt;
Fatto il boot con il live CD, è possibile vedere tutti i dischi e le relative partizioni con il comando&lt;br /&gt;
 fdisk -l&lt;br /&gt;
&lt;br /&gt;
Eventualmente si può specificare un disco solo di cui si vogliono informazioni.&lt;br /&gt;
&lt;br /&gt;
 # fdisk -l /dev/sda&lt;br /&gt;
 Found valid GPT with protective MBR; using GPT.&lt;br /&gt;
 Disk /dev/sda: 976773168 sectors, 465.8 GiB&lt;br /&gt;
 Logical sector size: 512 bytes&lt;br /&gt;
 Disk identifier (GUID): XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX&lt;br /&gt;
 [...]&lt;br /&gt;
&lt;br /&gt;
Individuato il disco, è possibile passare al ''partizionamento''.&lt;br /&gt;
&lt;br /&gt;
'''ATTENZIONE''' la procedura seguente eliminerà ogni dato già presente sul disco, ma in genere a nessuno importa...&lt;br /&gt;
&lt;br /&gt;
Utilizzare il comando&lt;br /&gt;
 cfdisk /dev/sda&lt;br /&gt;
&lt;br /&gt;
È possibile eliminare tutte le partizioni, tenendo a mente le '''dimensioni della prima''', contrassegnata dal codice '''EF00'''. Tale partizione va ricreata, per sicurezza '''della stessa dimensione e allineata allo stesso blocco''', dopodiché è possibile creare le altre partizioni (root, home, windows-dedicata) seguendo la medesima procedura:&lt;br /&gt;
&lt;br /&gt;
# Nello '''spazio libero''' (inizialmente tutto il disco) crea una ''nuova partizione'' (New);&lt;br /&gt;
# Richiesta del '''primo settore''' (First sector): premi invio per lasciare quello di default, ovvero a seguito della precedente partizione;&lt;br /&gt;
# '''Dimensione''' della partizione: questo è a scelta libera, il valore può essere inserito nelle unità comuni (Kilo, Mega, Giga), mentre dando invio usa il massimo spazio disponibile. Tieni sempre conto delle seguenti soglie minime&lt;br /&gt;
#*'''EFI''' - come detto prima, è bene ricrearla della dimensione originaria, nel mio caso era 300M&lt;br /&gt;
#*'''Root''' - senza la home, ovvero solo i file di sistema Linux, occupa al massimo una decina di Gb, quindi per lasciare un margine è bene assegnare 15G&lt;br /&gt;
#*'''/home''' - i dati utente hanno dimensione variabile, quindi è a propria discrezione&lt;br /&gt;
# Inserisci il tipo di partizione: '''EF00''' per la EFI, '''8300''' per Linux, '''8200'' per la swap, '''0700''' per Windows;&lt;br /&gt;
# Etichetta: sempre utile per identificare a occhio una partizione, è a discrezione dell'utente (esempio ''LinuxHome'' per la home);&lt;br /&gt;
# Ripeti dal punto 1 per tutte le partizioni necessarie&lt;br /&gt;
&lt;br /&gt;
Le partizioni possono essere formattate normalmente (mkfs.ext4 /dev/sdy), eccetto la partizione '''EFI''', che va formattata in '''FAT''' con&lt;br /&gt;
&lt;br /&gt;
 mkfs.vfat -F 32 /dev/sda1&lt;br /&gt;
&lt;br /&gt;
Nel caso tu voglia installare anche Windows è preferibile installarlo dopo il partizionamento e prima di installare Linux.&lt;br /&gt;
&lt;br /&gt;
=Configurazione di GRUB=&lt;br /&gt;
Installato il sistema, bisogna configurare il bootloader per funzionare con EFI. GRUB ha una versione compatibile, da installare mentre si è chrootati. Per prima cosa la partizione EFI (in questo caso &amp;lt;code&amp;gt;/dev/sda1&amp;lt;/code&amp;gt;) deve essere montata in una qualsiasi cartella, in modo da consentirne la scrittura dei file di avvio. Successivamente si può installare GRUB e creare il file di configurazione relativo. In caso di dual-boot altri sistemi installati saranno rilevati automaticamente soltanto se la partizione EFI è montata.&lt;br /&gt;
&lt;br /&gt;
 # mkdir /boot/efi&lt;br /&gt;
 # mount /dev/sda1 /boot/efi&lt;br /&gt;
 # grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=grub --recheck --debug&lt;br /&gt;
 # grub-mkconfig -o /boot/grub/grub.cfg&lt;br /&gt;
&lt;br /&gt;
{{Note&lt;br /&gt;
|type=info&lt;br /&gt;
|text=Convenzionalmente, la partizione EFI viene montata in &amp;lt;code&amp;gt;/boot/efi&amp;lt;/code&amp;gt; e, al suo interno, contiene una directory denominata &amp;lt;code&amp;gt;EFI&amp;lt;/code&amp;gt; che, a sua volta, contiene una directory per ogni sistema operativo installato.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Configurazione della BootList==&lt;br /&gt;
Il comando grub-install inserisce automaticamente Linux all'interno dei menù di avvio di EFI. In caso di dual boot sta poi all'utente decidere se impostarlo come scelta di avvio automatica, cosa che va fatta manualmente dai menù di EFI, all'avvio.&lt;br /&gt;
&lt;br /&gt;
Ci è stato riferito che a volte il metodo manuale da EFI può fallire: c'è anche il modo di modificare la lista degli avvii di EFI dall'interno di Linux.&lt;br /&gt;
&lt;br /&gt;
 $ efibootmgr&lt;br /&gt;
&lt;br /&gt;
 BootCurrent: 0000&lt;br /&gt;
 Timeout: 0 seconds&lt;br /&gt;
 BootOrder: 0000,0004&lt;br /&gt;
 Boot0000* Windows Boot Manager&lt;br /&gt;
 Boot0004* ArchLinux&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
L'output del comando efibootmgr è la lista dei sistemi installati (in questo caso ArchLinux e Windows), insieme alla lista di avvio (BootOrder), che in questo caso privilegia Windows.&lt;br /&gt;
&lt;br /&gt;
Per modificarla basta aggiungere la relativa opzione, elencando gli ID dei sistemi operativi nell'ordine desiderato, separandoli da virgola&lt;br /&gt;
&lt;br /&gt;
 # efibootmgr --bootorder 0004,0000&lt;br /&gt;
&lt;br /&gt;
In questo esempio si imposta Linux come primo sistema.&lt;br /&gt;
&lt;br /&gt;
= Problemi =&lt;br /&gt;
Problema: avete rotto tutto, avete sovrascritto le variabili EFI, non funziona più nulla, vi rannicchiate in posizione fetale.&lt;br /&gt;
&lt;br /&gt;
Soluzione: impostare il boot da CD e procurarsi un disco di [http://www.rodsbooks.com/refind/ rEFInd]. rEFInd trova i sistemi che hanno un file di avvio nella ''ESP'' (EFI System Partition) e vi chiederà di sceglierne uno (vedi figura). rEFInd è utile anche per avviare altri utili ''strumentopoli'' che possono venire in nostro soccorso, come la ''EFI shell''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
File:refind.png&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Procurarsi la EFI-Shell (almeno v2), da qualche parte, es [https://github.com/tianocore/edk2/tree/master/ShellBinPkg github] o [https://aur.archlinux.org/packages/uefi-shell-git/ AUR].&lt;br /&gt;
&lt;br /&gt;
'''Attenzione''': alcune schede madri ce l'hanno integrata, ma potrebbe non essere completa (es schede MSI), perciò scaricarla ugualmente.&lt;br /&gt;
&lt;br /&gt;
Creare una directory &amp;lt;code&amp;gt;ESP/efishell/&amp;lt;/code&amp;gt; in cui mettere l'eseguibile della ''EFI Shell'' &amp;lt;code&amp;gt;shellx64_v2.efi&amp;lt;/code&amp;gt;, e avviarlo tramite il disco di rEFInd (o con la EFI shell già integrata)&lt;br /&gt;
&lt;br /&gt;
Prendere un po' di dimestichezza con l'EFI-Shell. È case-sensitive, ma fa cose &amp;quot;alla Windows&amp;quot;, quindi occhio:&lt;br /&gt;
* Vedere i device riconosciuti:&lt;br /&gt;
 &amp;gt; map&lt;br /&gt;
* ''fs0'', ''fs1'', ecc... indicano i filesystem delle ESP trovate; potete navigarci:&lt;br /&gt;
 &amp;gt; fs0:&lt;br /&gt;
 &amp;gt; ls&lt;br /&gt;
* ''blk0'', ''blk1'', ecc... indicano le partizioni trovate ma non leggibili (NTFS, EXT)&lt;br /&gt;
&lt;br /&gt;
Eliminare tutto ciò che non è necessario (file di avvio di Windows e cartelle). ''rm'' funziona sia con file che con directory:&lt;br /&gt;
 &amp;gt; rm filename&lt;br /&gt;
&lt;br /&gt;
Mostrare la lista della sequenza d'avvio. Ad ogni entry corrisponde un numero.&lt;br /&gt;
 &amp;gt; bcfg boot dump&lt;br /&gt;
&lt;br /&gt;
Prima di modificare qualunque cosa, cancellare tutto ciò che non è necessario (ma occhio a non cancellare cose preziose, tipo la ''EFI Shell'' integrata). Il numero indica l'entry desiderata. Occhio perché potrebbero riordinarsi automaticamente.&lt;br /&gt;
 &amp;gt; bcfg boot rm 3&lt;br /&gt;
&lt;br /&gt;
Aggiungere l'entry necessaria:&lt;br /&gt;
 &amp;gt; bcfg boot add 1 fs0:/EFI/arch/grubx64.efi &amp;quot;Arch&amp;quot;&lt;br /&gt;
&lt;br /&gt;
'''Attenzione''' a volte la scheda madre vuole avviare per forza Windows. Facciamoglielo credere mettendo il ''grubx64.efi'' nella ESP sotto ''EFI/Microsoft/Boot/bootmgfw.efi'' (attenzione alle maiuscole, anche se è FAT).&lt;br /&gt;
&lt;br /&gt;
[[Category: Howto]]&lt;/div&gt;</summary>
		<author><name>$pooky Hunter</name></author>
	</entry>
	<entry>
		<id>https://wiki.golem.linux.it/index.php?title=Linux_minimale_per_PC_i386/i486&amp;diff=9981</id>
		<title>Linux minimale per PC i386/i486</title>
		<link rel="alternate" type="text/html" href="https://wiki.golem.linux.it/index.php?title=Linux_minimale_per_PC_i386/i486&amp;diff=9981"/>
		<updated>2026-05-17T18:38:23Z</updated>

		<summary type="html">&lt;p&gt;$pooky Hunter: /* Tastiera italiana */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Distribuzioni per i386-i486=&lt;br /&gt;
Per il recupero di macchine particolarmente vecchie esistono delle mini distribuzioni prive di ambiente grafico e talmente compatte da poter essere contenute in un unico floppy.&lt;br /&gt;
&lt;br /&gt;
NB: i386 non più supportato dal kernel 3.8 (2012), i486 dal kernel 7.1&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! Distribuzione&lt;br /&gt;
! Versione Kernel&lt;br /&gt;
! Supporto avvio&lt;br /&gt;
! CPU minima&lt;br /&gt;
! RAM minima&lt;br /&gt;
! Uso ideale&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [http://delicate-linux.net/ DeLi(cate) Linux]&lt;br /&gt;
| 2.4.37.11&lt;br /&gt;
| CDROM&lt;br /&gt;
| i386&lt;br /&gt;
| 8 MB (console) - 64 MB (GUI)&lt;br /&gt;
| Trashware&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.fdlinux.com/download.php FD Linux]&lt;br /&gt;
| 2.4.20&lt;br /&gt;
| 1 floppy&lt;br /&gt;
| 386SX&lt;br /&gt;
| 4 MB&lt;br /&gt;
| DOS/Linux compatto&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.zelow.no/floppyfw floppyfw]&lt;br /&gt;
| 2.4.37.11&lt;br /&gt;
| 1 floppy&lt;br /&gt;
| 386SX&lt;br /&gt;
| 12 MB&lt;br /&gt;
| Router/firewall embedded (iptables)&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [https://web.archive.org/web/20190312063410/http://chris.silmor.de/hal91/ HAL91]&lt;br /&gt;
| 2.0.39&lt;br /&gt;
| 1 floppy&lt;br /&gt;
| i386&lt;br /&gt;
| 8 MB&lt;br /&gt;
| Network solo con scheda NE2000 ISA&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [https://micheleandreoli.org/public/Software/mulinux// muLinux]&lt;br /&gt;
| 2.0.36&lt;br /&gt;
| 1+ floppy modulari&lt;br /&gt;
| 386SX&lt;br /&gt;
| 4 MB&lt;br /&gt;
| Recupero PC vintage&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.tinycorelinux.com Tiny Core Linux]&lt;br /&gt;
| 6.18.2&lt;br /&gt;
| CDROM&lt;br /&gt;
| i486DX&lt;br /&gt;
| 80 MB&lt;br /&gt;
| Minimalismo estremo, appliance&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [https://sourceforge.net/projects/zool5remastered/ Zool]&lt;br /&gt;
| 2.4.37.11&lt;br /&gt;
| 1 floppy&lt;br /&gt;
| i386&lt;br /&gt;
| 12 MB&lt;br /&gt;
| Networking completo (httpd, ftpd, telnetd)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Distribuzioni per i586-i686=&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! Distribuzione Linux&lt;br /&gt;
! Versione Kernel&lt;br /&gt;
! CPU minima&lt;br /&gt;
! RAM minima&lt;br /&gt;
! Uso ideale&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [http://alpinelinux.org Alpine]&lt;br /&gt;
| 6.18.1-lts&lt;br /&gt;
| i686&lt;br /&gt;
| 128 MB (console)&lt;br /&gt;
| Server Minimali, Container&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.damnsmalllinux.org  Damn Small Linux 2024]&lt;br /&gt;
| 5.10.188&lt;br /&gt;
| i686&lt;br /&gt;
| 128 MB (console)&lt;br /&gt;
| Desktop leggero&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.puppylinux.com Puppy]&lt;br /&gt;
| 6.6.137&lt;br /&gt;
| i686&lt;br /&gt;
| 128 MB (console)&lt;br /&gt;
| Desktop leggero (Slackware 15 base)&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.slitaz.org SliTaz]&lt;br /&gt;
| 3.16.55&lt;br /&gt;
| i686&lt;br /&gt;
| 64 MB (console) - 256 MB (GUI)&lt;br /&gt;
| Desktop leggero&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! BSD&lt;br /&gt;
! Versione&lt;br /&gt;
! CPU minima&lt;br /&gt;
! RAM minima&lt;br /&gt;
! Uso ideale&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.openbsd.org OpenBSD]&lt;br /&gt;
| 7.8&lt;br /&gt;
| i586&lt;br /&gt;
| 32 MB (console)&lt;br /&gt;
| Server/router&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.netbsd.org NetBSD]&lt;br /&gt;
| 10&lt;br /&gt;
| i586&lt;br /&gt;
| 64 MB (console)&lt;br /&gt;
| Server/router&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Se si cerca un'esperienza desktop per un Pentium 100-200Mhz con 32-64 MB RAM ci si dovrà rassegnare a recuperare una distribuzione dell'epoca come [https://archive.org/download/mandrake-7.2-i386_202304/mandrake-7.2-i386.iso Mandrake 7.2]&lt;br /&gt;
&lt;br /&gt;
=Buildroot=&lt;br /&gt;
Soluzioni preconfezionate (come quelle sopra elencate) potrebbero non rispondere alle nostre esigenze: kernel datati, driver o applicativi mancanti.&lt;br /&gt;
&lt;br /&gt;
In questi casi la soluzione più rapida è quella di costruirsi un sistema Linux personalizzato. Per farlo il metodo più semplice è utilizzare [https://buildroot.org/download.html Buildroot], un tool che permette la cross-compilazione di un ambiente Linux completo di librerie (glibc, uclibc-ng o musl), applicazioni e l'indispensabile busybox.&lt;br /&gt;
&lt;br /&gt;
Scompattare il tool&lt;br /&gt;
 $ tar -xzvf buildroot-2026.02.tar.gz&lt;br /&gt;
&lt;br /&gt;
Entrare nella directory principale&lt;br /&gt;
 $ cd buildroot-2026.02/&lt;br /&gt;
&lt;br /&gt;
==BusyBox==&lt;br /&gt;
Configurare busybox selezionando i programmi che si ritengono necessari&lt;br /&gt;
 $ make busybox-menuconfig&lt;br /&gt;
&lt;br /&gt;
==Kernel==&lt;br /&gt;
Configurare il kernel per la compilazione&lt;br /&gt;
 $ make linux-menuconfig&lt;br /&gt;
&lt;br /&gt;
Escludere tutto ciò che non è strettamente necessario per risparmiare spazio su disco, quanto segue dovrà essere necessariamente presente per ottenere un sistema minimo avviabile.&lt;br /&gt;
&lt;br /&gt;
* Code maturity level-&amp;gt; Prompt for development&lt;br /&gt;
&lt;br /&gt;
* Processor type and features-&amp;gt; Support for your processor&lt;br /&gt;
&lt;br /&gt;
* General setup-&amp;gt; kernel support for ELF binaries&lt;br /&gt;
&lt;br /&gt;
* Block devices-&amp;gt; RAM disk support&lt;br /&gt;
&lt;br /&gt;
* File systems-&amp;gt; /proc filesystem, tmpfs, ext2&lt;br /&gt;
&lt;br /&gt;
* Character devices-&amp;gt; Virtual terminal&lt;br /&gt;
&lt;br /&gt;
* Character devices-&amp;gt; Support for console on virtual terminal&lt;br /&gt;
&lt;br /&gt;
* Console drivers-&amp;gt; VGA text console&lt;br /&gt;
&lt;br /&gt;
* General setup-&amp;gt; PCI support&lt;br /&gt;
&lt;br /&gt;
* I driver delle schede di rete che interessa supportare (ne, ne2k, rtl8139too, rtl8139c, pcnet32, e1000)&lt;br /&gt;
&lt;br /&gt;
* Iptables se si necessita di un firewall&lt;br /&gt;
&lt;br /&gt;
* Un driver IDE generico (generic ATA) su libata&lt;br /&gt;
&lt;br /&gt;
* Block devices-&amp;gt; Normal PC floppy disk support, se ci interesse il supporto al floppy&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Se si deve limitare al massimo la grandezza dell'immagine del kernel (bzImage) si può scegliere con un algoritmo di compressione come lzma. Questo però aumenterà il consumo di RAM e per macchine molto vecchie come i386 o i486 probabilmente è meglio optare per gz o al massimo bz2.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Configurazione generale==&lt;br /&gt;
 $ make menuconfig&lt;br /&gt;
&lt;br /&gt;
Indicare:&lt;br /&gt;
&lt;br /&gt;
* Architettura di destinazione (i386, i486, i586…)&lt;br /&gt;
&lt;br /&gt;
* Opzioni di compilazione&lt;br /&gt;
&lt;br /&gt;
* Versione del kernel da usare&lt;br /&gt;
&lt;br /&gt;
* Configurazione di partenza del kernel&lt;br /&gt;
 Kernel  ---&amp;gt; Kernel configuration (Use the architecture default configuration)&lt;br /&gt;
&lt;br /&gt;
* Eventuali altri programmi non presenti in busybox (es.: mdev, dropbear, nano, iptables, ncftp, lynx, mutt)&lt;br /&gt;
&lt;br /&gt;
* Si consiglia l'opzione di compilazione gcc '''-Os''' al fine di ridurre al minimo la grandezza dei binari &lt;br /&gt;
&lt;br /&gt;
===Filesystem images===&lt;br /&gt;
Esistono varie tipologie di filesystem da utilizzare per il sistema che verrà compilato: immagini ext2, squashfs, direttamente nel initramfs o semplicemente in un tarball. Nel caso ci interessi costruire un floppy, al fine di sfruttare al meglio lo spazio, consiglio di scegliere ext2 compresso, anche in questo caso con lzma si ottengono filesystem fino al 20% più piccoli rispetto a quelli compressi con bzip2, ma il sistema  necessiterà di maggiore RAM per caricarli (70-80MB). &lt;br /&gt;
&lt;br /&gt;
Terminata la fase di configurazione si può procedere con la compilazione&lt;br /&gt;
 $ make&lt;br /&gt;
&lt;br /&gt;
==output==&lt;br /&gt;
Nella directory buildroot-2026.02/output/images risiede il prodotto finito.&lt;br /&gt;
Se lasciate le impostazioni standard si tratterà di 3 file: bzImage, rootfs.ext2, rootfs.tar.&lt;br /&gt;
&lt;br /&gt;
==Immagine per floppy disk==&lt;br /&gt;
Le dimensioni dei file bzImage e rootfs.i486.ext2.lzma devono essere sufficientemente contenute per entrare su un floppy.&lt;br /&gt;
Nel caso fossero solo di poco più grandi (100-200 KB), si può rimediare con la formattazione non standard del floppy: a 1.72 MB invece che a 1.44MB.&lt;br /&gt;
 $ sudo mknod /dev/fd0u1722 b 2 60&lt;br /&gt;
 $ fdformat /dev/fd0u1722&lt;br /&gt;
 $ mkfs.vfat /dev/fd0u1722&lt;br /&gt;
&lt;br /&gt;
Se non presente creare un mount point per il floppy&lt;br /&gt;
 $ sudo mkdir /mnt/floppy&lt;br /&gt;
&lt;br /&gt;
Montare il floppy&lt;br /&gt;
 $ sudo mount /dev/fd0u1722 /mnt/floppy&lt;br /&gt;
&lt;br /&gt;
Copiarvi i due file&lt;br /&gt;
 $ sudo cp buildroot/output/images/bzImage /mnt/floppy&lt;br /&gt;
 $ sudo cp buildroot/output/images/rootfs.i486.ext2.lzma /mnt/floppy&lt;br /&gt;
&lt;br /&gt;
Adesso occorre installare un boot loader sul floppy. Essendo leggero, semplice da usare e supportando la FAT16 si consiglia di usare syslinux.&lt;br /&gt;
&lt;br /&gt;
Se syslinux non fosse presente sul vostro sistema installatelo con:&lt;br /&gt;
&lt;br /&gt;
 $ sudo apt-get install syslinux&lt;br /&gt;
per sistemi Debian-based&lt;br /&gt;
&lt;br /&gt;
O con&lt;br /&gt;
 # pacman -S syslinux&lt;br /&gt;
su Arch Linux&lt;br /&gt;
&lt;br /&gt;
Con un editor di testo (es. nano) create il file di configurazione per il boot loader: syslinux.cfg&lt;br /&gt;
 $ sudo nano /mnt/floppy/syslinux.cfg&lt;br /&gt;
&lt;br /&gt;
Riportate quanto segue, eventualmente adattandolo alle vostre esigenze:&lt;br /&gt;
&lt;br /&gt;
 default start&lt;br /&gt;
 timeout 5&lt;br /&gt;
 prompt 1&lt;br /&gt;
 label start&lt;br /&gt;
 kernel bzImage&lt;br /&gt;
 append initrd=rootfs.i486.ext2.lzma BOOTDEV=fd0 ramdisk_size=16384 vga=0 root=/dev/ram0&lt;br /&gt;
&lt;br /&gt;
Se è stato usato un altro tipo di filesystem sostituire rootfs.i486.ext2.lzma con rootfs.i486.ext2.bz2, rootfs.i486.ext2.squashfs…&lt;br /&gt;
&lt;br /&gt;
Installare il bootloader sul floppy&lt;br /&gt;
 $ sudo syslinux /dev/fd0&lt;br /&gt;
&lt;br /&gt;
Smontare il floppy&lt;br /&gt;
 $ cd&lt;br /&gt;
 $ sudo umount /mnt/floppy&lt;br /&gt;
&lt;br /&gt;
In caso di necessità di modifiche al ramdisk bisognerà copiarlo sul disco fisso, decomprimerlo, montarlo in loop ed effettuare le modifiche in questo modo:&lt;br /&gt;
 $ sudo mount /mnt/floppy&lt;br /&gt;
 $ sudo cp /mnt/floppy/rootfs.i486.ext2.lzma&lt;br /&gt;
 $ sudo lzma -d rootfs.i486.ext2.lzma&lt;br /&gt;
 $ sudo mkdir /mnt/tmp&lt;br /&gt;
 $ sudo mount -o loop rootfs.i486.ext2 /mnt/tmp&lt;br /&gt;
 $ cd /mnt/tmp&lt;br /&gt;
&lt;br /&gt;
Effettuare le modifiche e poi smontare il tutto&lt;br /&gt;
 $ cd&lt;br /&gt;
 $ sudo umount /mnt/tmp&lt;br /&gt;
&lt;br /&gt;
Ricomprimere il ramdisk e copiarlo sul floppy per sostituire quello vecchio&lt;br /&gt;
 $ sudo lzma -c9 rootfs.i486.ext2 &amp;gt; rootfs.i486.ext2.lzma&lt;br /&gt;
 $ sudo cp rootfs.i486.ext2.lzma /mnt/floppy&lt;br /&gt;
 $ sudo umount /mnt/floppy&lt;br /&gt;
&lt;br /&gt;
==Immagine per hard disk==&lt;br /&gt;
Se un floppy è troppo piccolo per le nostre esigenze si può costruire il sistema dentro ad un file d'immagine da copiare sull'hard disk della nostra macchina direttamente con dd. Creiamo quindi un'immagine da 250 MB, che dovrebbe essere più che sufficiente per un sistema testuale&lt;br /&gt;
 dd if=/dev/zero of=output/images/486linux.img bs=1M count=250&lt;br /&gt;
&lt;br /&gt;
Montiamo l'immagine per poter formattare il filesystem e copiarci i dati&lt;br /&gt;
 # losetup -Pf 486linux.img&lt;br /&gt;
 # mkfs.ext2 /dev/loop0p1&lt;br /&gt;
Probabilmente il miglior filesystem per un sistema così vecchio è ext2, si rinuncia al journaling, ma ci si guadagna parecchio in performance.&lt;br /&gt;
 # mkfs.ext2 -m 0 -O none /dev/loop0p1&lt;br /&gt;
&lt;br /&gt;
Montiamo il tutto&lt;br /&gt;
 # mount /dev/loop0p1 /mnt/img&lt;br /&gt;
&lt;br /&gt;
Copiamoci il filesystem ed il kernel&lt;br /&gt;
 # tar xf buildroot-2026.02/output/images/rootfs.tar -C /mnt/img&lt;br /&gt;
 # mkdir -p /mnt/img/boot&lt;br /&gt;
 # cp buildroot-2026.02/output/images/bzImage /mnt/img/boot/bzImage&lt;br /&gt;
&lt;br /&gt;
Come bootloader, anche in questo caso si è optato per il semplicissimo syslinux.&lt;br /&gt;
 sudo pacman -S syslinux&lt;br /&gt;
 sudo extlinux --install /mnt/img/boot/&lt;br /&gt;
&lt;br /&gt;
Configuriamo il bootloader (/mnt/boot/syslinux.cfg)&lt;br /&gt;
 DEFAULT linux&lt;br /&gt;
 timeout 5&lt;br /&gt;
 prompt 1&lt;br /&gt;
 LABEL linux&lt;br /&gt;
    KERNEL /boot/bzImage&lt;br /&gt;
    APPEND root=/dev/sda1 ro&lt;br /&gt;
&lt;br /&gt;
===Tastiera italiana===&lt;br /&gt;
Se ci interessa la tastiera italiana creiamo dal nostro sistema host il file .bmap da far caricare a busybox &lt;br /&gt;
 # loadkeys -qb it &amp;gt; it.bmap&lt;br /&gt;
 # mv it.bmap output/target/etc/&lt;br /&gt;
 # make&lt;br /&gt;
&lt;br /&gt;
Possiamo creare uno script d'avvio tipo per far caricare automaticamente la tastiera italiana (ricordatevi di renderlo eseguibile).&lt;br /&gt;
&lt;br /&gt;
'''/etc/init.d/S40keyboard'''&lt;br /&gt;
 #!/bin/sh&lt;br /&gt;
 loadkmap &amp;lt; /etc/it.bmap&lt;br /&gt;
&lt;br /&gt;
===Hotplug===&lt;br /&gt;
Per l'hotplug dei moduli occorre aver installato il programma mdev, anche in questo caso converrà scrivere uno script di avvio&lt;br /&gt;
&lt;br /&gt;
'''/etc/init.d/S10mdev'''&lt;br /&gt;
 #!/bin/sh&lt;br /&gt;
 case &amp;quot;$1&amp;quot; in&lt;br /&gt;
    start)&lt;br /&gt;
        echo &amp;quot;Starting mdev...&amp;quot;&lt;br /&gt;
        # Scansiona /sys per creare i device node per l'hardware già presente&lt;br /&gt;
        /sbin/mdev -s&lt;br /&gt;
        # Questo è il &amp;quot;coldplug&amp;quot;: trova tutti i moduli dell'hardware già presente e li carica&lt;br /&gt;
        echo &amp;quot;Loading kernel modules for existing hardware...&amp;quot;&lt;br /&gt;
        find /sys/ -name modalias | xargs sort -u | xargs modprobe -abq&lt;br /&gt;
        ;;&lt;br /&gt;
    stop)&lt;br /&gt;
        echo &amp;quot;Stopping mdev...&amp;quot;&lt;br /&gt;
        ;;&lt;br /&gt;
    *)&lt;br /&gt;
        echo &amp;quot;Usage: $0 {start|stop}&amp;quot;&lt;br /&gt;
        exit 1&lt;br /&gt;
        ;;&lt;br /&gt;
 esac&lt;br /&gt;
[[Category:howto]]&lt;/div&gt;</summary>
		<author><name>$pooky Hunter</name></author>
	</entry>
	<entry>
		<id>https://wiki.golem.linux.it/index.php?title=Linux_minimale_per_PC_i386/i486&amp;diff=9980</id>
		<title>Linux minimale per PC i386/i486</title>
		<link rel="alternate" type="text/html" href="https://wiki.golem.linux.it/index.php?title=Linux_minimale_per_PC_i386/i486&amp;diff=9980"/>
		<updated>2026-05-17T18:36:26Z</updated>

		<summary type="html">&lt;p&gt;$pooky Hunter: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Distribuzioni per i386-i486=&lt;br /&gt;
Per il recupero di macchine particolarmente vecchie esistono delle mini distribuzioni prive di ambiente grafico e talmente compatte da poter essere contenute in un unico floppy.&lt;br /&gt;
&lt;br /&gt;
NB: i386 non più supportato dal kernel 3.8 (2012), i486 dal kernel 7.1&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! Distribuzione&lt;br /&gt;
! Versione Kernel&lt;br /&gt;
! Supporto avvio&lt;br /&gt;
! CPU minima&lt;br /&gt;
! RAM minima&lt;br /&gt;
! Uso ideale&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [http://delicate-linux.net/ DeLi(cate) Linux]&lt;br /&gt;
| 2.4.37.11&lt;br /&gt;
| CDROM&lt;br /&gt;
| i386&lt;br /&gt;
| 8 MB (console) - 64 MB (GUI)&lt;br /&gt;
| Trashware&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.fdlinux.com/download.php FD Linux]&lt;br /&gt;
| 2.4.20&lt;br /&gt;
| 1 floppy&lt;br /&gt;
| 386SX&lt;br /&gt;
| 4 MB&lt;br /&gt;
| DOS/Linux compatto&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.zelow.no/floppyfw floppyfw]&lt;br /&gt;
| 2.4.37.11&lt;br /&gt;
| 1 floppy&lt;br /&gt;
| 386SX&lt;br /&gt;
| 12 MB&lt;br /&gt;
| Router/firewall embedded (iptables)&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [https://web.archive.org/web/20190312063410/http://chris.silmor.de/hal91/ HAL91]&lt;br /&gt;
| 2.0.39&lt;br /&gt;
| 1 floppy&lt;br /&gt;
| i386&lt;br /&gt;
| 8 MB&lt;br /&gt;
| Network solo con scheda NE2000 ISA&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [https://micheleandreoli.org/public/Software/mulinux// muLinux]&lt;br /&gt;
| 2.0.36&lt;br /&gt;
| 1+ floppy modulari&lt;br /&gt;
| 386SX&lt;br /&gt;
| 4 MB&lt;br /&gt;
| Recupero PC vintage&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.tinycorelinux.com Tiny Core Linux]&lt;br /&gt;
| 6.18.2&lt;br /&gt;
| CDROM&lt;br /&gt;
| i486DX&lt;br /&gt;
| 80 MB&lt;br /&gt;
| Minimalismo estremo, appliance&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [https://sourceforge.net/projects/zool5remastered/ Zool]&lt;br /&gt;
| 2.4.37.11&lt;br /&gt;
| 1 floppy&lt;br /&gt;
| i386&lt;br /&gt;
| 12 MB&lt;br /&gt;
| Networking completo (httpd, ftpd, telnetd)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Distribuzioni per i586-i686=&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! Distribuzione Linux&lt;br /&gt;
! Versione Kernel&lt;br /&gt;
! CPU minima&lt;br /&gt;
! RAM minima&lt;br /&gt;
! Uso ideale&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [http://alpinelinux.org Alpine]&lt;br /&gt;
| 6.18.1-lts&lt;br /&gt;
| i686&lt;br /&gt;
| 128 MB (console)&lt;br /&gt;
| Server Minimali, Container&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.damnsmalllinux.org  Damn Small Linux 2024]&lt;br /&gt;
| 5.10.188&lt;br /&gt;
| i686&lt;br /&gt;
| 128 MB (console)&lt;br /&gt;
| Desktop leggero&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.puppylinux.com Puppy]&lt;br /&gt;
| 6.6.137&lt;br /&gt;
| i686&lt;br /&gt;
| 128 MB (console)&lt;br /&gt;
| Desktop leggero (Slackware 15 base)&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.slitaz.org SliTaz]&lt;br /&gt;
| 3.16.55&lt;br /&gt;
| i686&lt;br /&gt;
| 64 MB (console) - 256 MB (GUI)&lt;br /&gt;
| Desktop leggero&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! BSD&lt;br /&gt;
! Versione&lt;br /&gt;
! CPU minima&lt;br /&gt;
! RAM minima&lt;br /&gt;
! Uso ideale&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.openbsd.org OpenBSD]&lt;br /&gt;
| 7.8&lt;br /&gt;
| i586&lt;br /&gt;
| 32 MB (console)&lt;br /&gt;
| Server/router&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.netbsd.org NetBSD]&lt;br /&gt;
| 10&lt;br /&gt;
| i586&lt;br /&gt;
| 64 MB (console)&lt;br /&gt;
| Server/router&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Se si cerca un'esperienza desktop per un Pentium 100-200Mhz con 32-64 MB RAM ci si dovrà rassegnare a recuperare una distribuzione dell'epoca come [https://archive.org/download/mandrake-7.2-i386_202304/mandrake-7.2-i386.iso Mandrake 7.2]&lt;br /&gt;
&lt;br /&gt;
=Buildroot=&lt;br /&gt;
Soluzioni preconfezionate (come quelle sopra elencate) potrebbero non rispondere alle nostre esigenze: kernel datati, driver o applicativi mancanti.&lt;br /&gt;
&lt;br /&gt;
In questi casi la soluzione più rapida è quella di costruirsi un sistema Linux personalizzato. Per farlo il metodo più semplice è utilizzare [https://buildroot.org/download.html Buildroot], un tool che permette la cross-compilazione di un ambiente Linux completo di librerie (glibc, uclibc-ng o musl), applicazioni e l'indispensabile busybox.&lt;br /&gt;
&lt;br /&gt;
Scompattare il tool&lt;br /&gt;
 $ tar -xzvf buildroot-2026.02.tar.gz&lt;br /&gt;
&lt;br /&gt;
Entrare nella directory principale&lt;br /&gt;
 $ cd buildroot-2026.02/&lt;br /&gt;
&lt;br /&gt;
==BusyBox==&lt;br /&gt;
Configurare busybox selezionando i programmi che si ritengono necessari&lt;br /&gt;
 $ make busybox-menuconfig&lt;br /&gt;
&lt;br /&gt;
==Kernel==&lt;br /&gt;
Configurare il kernel per la compilazione&lt;br /&gt;
 $ make linux-menuconfig&lt;br /&gt;
&lt;br /&gt;
Escludere tutto ciò che non è strettamente necessario per risparmiare spazio su disco, quanto segue dovrà essere necessariamente presente per ottenere un sistema minimo avviabile.&lt;br /&gt;
&lt;br /&gt;
* Code maturity level-&amp;gt; Prompt for development&lt;br /&gt;
&lt;br /&gt;
* Processor type and features-&amp;gt; Support for your processor&lt;br /&gt;
&lt;br /&gt;
* General setup-&amp;gt; kernel support for ELF binaries&lt;br /&gt;
&lt;br /&gt;
* Block devices-&amp;gt; RAM disk support&lt;br /&gt;
&lt;br /&gt;
* File systems-&amp;gt; /proc filesystem, tmpfs, ext2&lt;br /&gt;
&lt;br /&gt;
* Character devices-&amp;gt; Virtual terminal&lt;br /&gt;
&lt;br /&gt;
* Character devices-&amp;gt; Support for console on virtual terminal&lt;br /&gt;
&lt;br /&gt;
* Console drivers-&amp;gt; VGA text console&lt;br /&gt;
&lt;br /&gt;
* General setup-&amp;gt; PCI support&lt;br /&gt;
&lt;br /&gt;
* I driver delle schede di rete che interessa supportare (ne, ne2k, rtl8139too, rtl8139c, pcnet32, e1000)&lt;br /&gt;
&lt;br /&gt;
* Iptables se si necessita di un firewall&lt;br /&gt;
&lt;br /&gt;
* Un driver IDE generico (generic ATA) su libata&lt;br /&gt;
&lt;br /&gt;
* Block devices-&amp;gt; Normal PC floppy disk support, se ci interesse il supporto al floppy&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Se si deve limitare al massimo la grandezza dell'immagine del kernel (bzImage) si può scegliere con un algoritmo di compressione come lzma. Questo però aumenterà il consumo di RAM e per macchine molto vecchie come i386 o i486 probabilmente è meglio optare per gz o al massimo bz2.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Configurazione generale==&lt;br /&gt;
 $ make menuconfig&lt;br /&gt;
&lt;br /&gt;
Indicare:&lt;br /&gt;
&lt;br /&gt;
* Architettura di destinazione (i386, i486, i586…)&lt;br /&gt;
&lt;br /&gt;
* Opzioni di compilazione&lt;br /&gt;
&lt;br /&gt;
* Versione del kernel da usare&lt;br /&gt;
&lt;br /&gt;
* Configurazione di partenza del kernel&lt;br /&gt;
 Kernel  ---&amp;gt; Kernel configuration (Use the architecture default configuration)&lt;br /&gt;
&lt;br /&gt;
* Eventuali altri programmi non presenti in busybox (es.: mdev, dropbear, nano, iptables, ncftp, lynx, mutt)&lt;br /&gt;
&lt;br /&gt;
* Si consiglia l'opzione di compilazione gcc '''-Os''' al fine di ridurre al minimo la grandezza dei binari &lt;br /&gt;
&lt;br /&gt;
===Filesystem images===&lt;br /&gt;
Esistono varie tipologie di filesystem da utilizzare per il sistema che verrà compilato: immagini ext2, squashfs, direttamente nel initramfs o semplicemente in un tarball. Nel caso ci interessi costruire un floppy, al fine di sfruttare al meglio lo spazio, consiglio di scegliere ext2 compresso, anche in questo caso con lzma si ottengono filesystem fino al 20% più piccoli rispetto a quelli compressi con bzip2, ma il sistema  necessiterà di maggiore RAM per caricarli (70-80MB). &lt;br /&gt;
&lt;br /&gt;
Terminata la fase di configurazione si può procedere con la compilazione&lt;br /&gt;
 $ make&lt;br /&gt;
&lt;br /&gt;
==output==&lt;br /&gt;
Nella directory buildroot-2026.02/output/images risiede il prodotto finito.&lt;br /&gt;
Se lasciate le impostazioni standard si tratterà di 3 file: bzImage, rootfs.ext2, rootfs.tar.&lt;br /&gt;
&lt;br /&gt;
==Immagine per floppy disk==&lt;br /&gt;
Le dimensioni dei file bzImage e rootfs.i486.ext2.lzma devono essere sufficientemente contenute per entrare su un floppy.&lt;br /&gt;
Nel caso fossero solo di poco più grandi (100-200 KB), si può rimediare con la formattazione non standard del floppy: a 1.72 MB invece che a 1.44MB.&lt;br /&gt;
 $ sudo mknod /dev/fd0u1722 b 2 60&lt;br /&gt;
 $ fdformat /dev/fd0u1722&lt;br /&gt;
 $ mkfs.vfat /dev/fd0u1722&lt;br /&gt;
&lt;br /&gt;
Se non presente creare un mount point per il floppy&lt;br /&gt;
 $ sudo mkdir /mnt/floppy&lt;br /&gt;
&lt;br /&gt;
Montare il floppy&lt;br /&gt;
 $ sudo mount /dev/fd0u1722 /mnt/floppy&lt;br /&gt;
&lt;br /&gt;
Copiarvi i due file&lt;br /&gt;
 $ sudo cp buildroot/output/images/bzImage /mnt/floppy&lt;br /&gt;
 $ sudo cp buildroot/output/images/rootfs.i486.ext2.lzma /mnt/floppy&lt;br /&gt;
&lt;br /&gt;
Adesso occorre installare un boot loader sul floppy. Essendo leggero, semplice da usare e supportando la FAT16 si consiglia di usare syslinux.&lt;br /&gt;
&lt;br /&gt;
Se syslinux non fosse presente sul vostro sistema installatelo con:&lt;br /&gt;
&lt;br /&gt;
 $ sudo apt-get install syslinux&lt;br /&gt;
per sistemi Debian-based&lt;br /&gt;
&lt;br /&gt;
O con&lt;br /&gt;
 # pacman -S syslinux&lt;br /&gt;
su Arch Linux&lt;br /&gt;
&lt;br /&gt;
Con un editor di testo (es. nano) create il file di configurazione per il boot loader: syslinux.cfg&lt;br /&gt;
 $ sudo nano /mnt/floppy/syslinux.cfg&lt;br /&gt;
&lt;br /&gt;
Riportate quanto segue, eventualmente adattandolo alle vostre esigenze:&lt;br /&gt;
&lt;br /&gt;
 default start&lt;br /&gt;
 timeout 5&lt;br /&gt;
 prompt 1&lt;br /&gt;
 label start&lt;br /&gt;
 kernel bzImage&lt;br /&gt;
 append initrd=rootfs.i486.ext2.lzma BOOTDEV=fd0 ramdisk_size=16384 vga=0 root=/dev/ram0&lt;br /&gt;
&lt;br /&gt;
Se è stato usato un altro tipo di filesystem sostituire rootfs.i486.ext2.lzma con rootfs.i486.ext2.bz2, rootfs.i486.ext2.squashfs…&lt;br /&gt;
&lt;br /&gt;
Installare il bootloader sul floppy&lt;br /&gt;
 $ sudo syslinux /dev/fd0&lt;br /&gt;
&lt;br /&gt;
Smontare il floppy&lt;br /&gt;
 $ cd&lt;br /&gt;
 $ sudo umount /mnt/floppy&lt;br /&gt;
&lt;br /&gt;
In caso di necessità di modifiche al ramdisk bisognerà copiarlo sul disco fisso, decomprimerlo, montarlo in loop ed effettuare le modifiche in questo modo:&lt;br /&gt;
 $ sudo mount /mnt/floppy&lt;br /&gt;
 $ sudo cp /mnt/floppy/rootfs.i486.ext2.lzma&lt;br /&gt;
 $ sudo lzma -d rootfs.i486.ext2.lzma&lt;br /&gt;
 $ sudo mkdir /mnt/tmp&lt;br /&gt;
 $ sudo mount -o loop rootfs.i486.ext2 /mnt/tmp&lt;br /&gt;
 $ cd /mnt/tmp&lt;br /&gt;
&lt;br /&gt;
Effettuare le modifiche e poi smontare il tutto&lt;br /&gt;
 $ cd&lt;br /&gt;
 $ sudo umount /mnt/tmp&lt;br /&gt;
&lt;br /&gt;
Ricomprimere il ramdisk e copiarlo sul floppy per sostituire quello vecchio&lt;br /&gt;
 $ sudo lzma -c9 rootfs.i486.ext2 &amp;gt; rootfs.i486.ext2.lzma&lt;br /&gt;
 $ sudo cp rootfs.i486.ext2.lzma /mnt/floppy&lt;br /&gt;
 $ sudo umount /mnt/floppy&lt;br /&gt;
&lt;br /&gt;
==Immagine per hard disk==&lt;br /&gt;
Se un floppy è troppo piccolo per le nostre esigenze si può costruire il sistema dentro ad un file d'immagine da copiare sull'hard disk della nostra macchina direttamente con dd. Creiamo quindi un'immagine da 250 MB, che dovrebbe essere più che sufficiente per un sistema testuale&lt;br /&gt;
 dd if=/dev/zero of=output/images/486linux.img bs=1M count=250&lt;br /&gt;
&lt;br /&gt;
Montiamo l'immagine per poter formattare il filesystem e copiarci i dati&lt;br /&gt;
 # losetup -Pf 486linux.img&lt;br /&gt;
 # mkfs.ext2 /dev/loop0p1&lt;br /&gt;
Probabilmente il miglior filesystem per un sistema così vecchio è ext2, si rinuncia al journaling, ma ci si guadagna parecchio in performance.&lt;br /&gt;
 # mkfs.ext2 -m 0 -O none /dev/loop0p1&lt;br /&gt;
&lt;br /&gt;
Montiamo il tutto&lt;br /&gt;
 # mount /dev/loop0p1 /mnt/img&lt;br /&gt;
&lt;br /&gt;
Copiamoci il filesystem ed il kernel&lt;br /&gt;
 # tar xf buildroot-2026.02/output/images/rootfs.tar -C /mnt/img&lt;br /&gt;
 # mkdir -p /mnt/img/boot&lt;br /&gt;
 # cp buildroot-2026.02/output/images/bzImage /mnt/img/boot/bzImage&lt;br /&gt;
&lt;br /&gt;
Come bootloader, anche in questo caso si è optato per il semplicissimo syslinux.&lt;br /&gt;
 sudo pacman -S syslinux&lt;br /&gt;
 sudo extlinux --install /mnt/img/boot/&lt;br /&gt;
&lt;br /&gt;
Configuriamo il bootloader (/mnt/boot/syslinux.cfg)&lt;br /&gt;
 DEFAULT linux&lt;br /&gt;
 timeout 5&lt;br /&gt;
 prompt 1&lt;br /&gt;
 LABEL linux&lt;br /&gt;
    KERNEL /boot/bzImage&lt;br /&gt;
    APPEND root=/dev/sda1 ro&lt;br /&gt;
&lt;br /&gt;
===Tastiera italiana===&lt;br /&gt;
Se ci interessa la tastiera italiana creiamo dal nostro sistema host il file .bmap da far caricare a busybox &lt;br /&gt;
 # loadkeys -qb it &amp;gt; it.bmap&lt;br /&gt;
 # mv it.bmap /mnt/img/etc&lt;br /&gt;
&lt;br /&gt;
Possiamo creare uno script d'avvio tipo per far caricare automaticamente la tastiera italiana (ricordatevi di renderlo eseguibile).&lt;br /&gt;
&lt;br /&gt;
'''/etc/init.d/S40keyboard'''&lt;br /&gt;
 #!/bin/sh&lt;br /&gt;
 loadkmap &amp;lt; /etc/it.bmap&lt;br /&gt;
&lt;br /&gt;
===Hotplug===&lt;br /&gt;
Per l'hotplug dei moduli occorre aver installato il programma mdev, anche in questo caso converrà scrivere uno script di avvio&lt;br /&gt;
&lt;br /&gt;
'''/etc/init.d/S10mdev'''&lt;br /&gt;
 #!/bin/sh&lt;br /&gt;
 case &amp;quot;$1&amp;quot; in&lt;br /&gt;
    start)&lt;br /&gt;
        echo &amp;quot;Starting mdev...&amp;quot;&lt;br /&gt;
        # Scansiona /sys per creare i device node per l'hardware già presente&lt;br /&gt;
        /sbin/mdev -s&lt;br /&gt;
        # Questo è il &amp;quot;coldplug&amp;quot;: trova tutti i moduli dell'hardware già presente e li carica&lt;br /&gt;
        echo &amp;quot;Loading kernel modules for existing hardware...&amp;quot;&lt;br /&gt;
        find /sys/ -name modalias | xargs sort -u | xargs modprobe -abq&lt;br /&gt;
        ;;&lt;br /&gt;
    stop)&lt;br /&gt;
        echo &amp;quot;Stopping mdev...&amp;quot;&lt;br /&gt;
        ;;&lt;br /&gt;
    *)&lt;br /&gt;
        echo &amp;quot;Usage: $0 {start|stop}&amp;quot;&lt;br /&gt;
        exit 1&lt;br /&gt;
        ;;&lt;br /&gt;
 esac&lt;br /&gt;
[[Category:howto]]&lt;/div&gt;</summary>
		<author><name>$pooky Hunter</name></author>
	</entry>
	<entry>
		<id>https://wiki.golem.linux.it/index.php?title=Linux_minimale_per_PC_i386/i486&amp;diff=9979</id>
		<title>Linux minimale per PC i386/i486</title>
		<link rel="alternate" type="text/html" href="https://wiki.golem.linux.it/index.php?title=Linux_minimale_per_PC_i386/i486&amp;diff=9979"/>
		<updated>2026-05-17T18:35:49Z</updated>

		<summary type="html">&lt;p&gt;$pooky Hunter: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Distribuzioni per i386-i486=&lt;br /&gt;
Per il recupero di macchine particolarmente vecchie esistono delle mini distribuzioni prive di ambiente grafico e talmente compatte da poter essere contenute in un unico floppy.&lt;br /&gt;
&lt;br /&gt;
NB: i386 non più supportato dal kernel 3.8 (2012), i486 dal kernel 7.1&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! Distribuzione&lt;br /&gt;
! Versione Kernel&lt;br /&gt;
! Supporto avvio&lt;br /&gt;
! CPU minima&lt;br /&gt;
! RAM minima&lt;br /&gt;
! Uso ideale&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [http://delicate-linux.net/ DeLi(cate) Linux]&lt;br /&gt;
| 2.4.37.11&lt;br /&gt;
| CDROM&lt;br /&gt;
| i386&lt;br /&gt;
| 8 MB (console) - 64 MB (GUI)&lt;br /&gt;
| Trashware&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.fdlinux.com/download.php FD Linux]&lt;br /&gt;
| 2.4.20&lt;br /&gt;
| 1 floppy&lt;br /&gt;
| 386SX&lt;br /&gt;
| 4 MB&lt;br /&gt;
| DOS/Linux compatto&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.zelow.no/floppyfw floppyfw]&lt;br /&gt;
| 2.4.37.11&lt;br /&gt;
| 1 floppy&lt;br /&gt;
| 386SX&lt;br /&gt;
| 12 MB&lt;br /&gt;
| Router/firewall embedded (iptables)&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [https://web.archive.org/web/20190312063410/http://chris.silmor.de/hal91/ HAL91]&lt;br /&gt;
| 2.0.39&lt;br /&gt;
| 1 floppy&lt;br /&gt;
| i386&lt;br /&gt;
| 8 MB&lt;br /&gt;
| Network solo con scheda NE2000 ISA&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [https://micheleandreoli.org/public/Software/mulinux// muLinux]&lt;br /&gt;
| 2.0.36&lt;br /&gt;
| 1+ floppy modulari&lt;br /&gt;
| 386SX&lt;br /&gt;
| 4 MB&lt;br /&gt;
| Recupero PC vintage&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.tinycorelinux.com Tiny Core Linux]&lt;br /&gt;
| 6.18.2&lt;br /&gt;
| CDROM&lt;br /&gt;
| i486DX&lt;br /&gt;
| 80 MB&lt;br /&gt;
| Minimalismo estremo, appliance&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [https://sourceforge.net/projects/zool5remastered/ Zool]&lt;br /&gt;
| 2.4.37.11&lt;br /&gt;
| 1 floppy&lt;br /&gt;
| i386&lt;br /&gt;
| 12 MB&lt;br /&gt;
| Networking completo (httpd, ftpd, telnetd)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Distribuzioni per i586-i686=&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! Distribuzione Linux&lt;br /&gt;
! Versione Kernel&lt;br /&gt;
! CPU minima&lt;br /&gt;
! RAM minima&lt;br /&gt;
! Uso ideale&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [http://alpinelinux.org Alpine]&lt;br /&gt;
| 6.18.1-lts&lt;br /&gt;
| i686&lt;br /&gt;
| 128 MB (console)&lt;br /&gt;
| Server Minimali, Container&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.damnsmalllinux.org  Damn Small Linux 2024]&lt;br /&gt;
| 5.10.188&lt;br /&gt;
| i686&lt;br /&gt;
| 128 MB (console)&lt;br /&gt;
| Desktop leggero&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.puppylinux.com Puppy]&lt;br /&gt;
| 6.6.137&lt;br /&gt;
| i686&lt;br /&gt;
| 128 MB (console)&lt;br /&gt;
| Desktop leggero (Slackware 15 base)&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.slitaz.org SliTaz]&lt;br /&gt;
| 3.16.55&lt;br /&gt;
| i686&lt;br /&gt;
| 64 MB (console) - 256 MB (GUI)&lt;br /&gt;
| Desktop leggero&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! BSD&lt;br /&gt;
! Versione&lt;br /&gt;
! CPU minima&lt;br /&gt;
! RAM minima&lt;br /&gt;
! Uso ideale&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.openbsd.org OpenBSD]&lt;br /&gt;
| 7.8&lt;br /&gt;
| i586&lt;br /&gt;
| 32 MB (console)&lt;br /&gt;
| Server/router&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.netbsd.org NetBSD]&lt;br /&gt;
| 10&lt;br /&gt;
| i586&lt;br /&gt;
| 64 MB (console)&lt;br /&gt;
| Server/router&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Se si cerca un'esperienza desktop per un Pentium 100-200Mhz con 32-64 MB RAM ci si dovrà rassegnare a recuperare una distribuzione dell'epoca come [https://archive.org/download/mandrake-7.2-i386_202304/mandrake-7.2-i386.iso Mandrake 7.2]&lt;br /&gt;
&lt;br /&gt;
=Buildroot=&lt;br /&gt;
Soluzioni preconfezionate (come quelle sopra elencate) potrebbero non rispondere alle nostre esigenze: kernel datati, driver o applicativi mancanti.&lt;br /&gt;
&lt;br /&gt;
In questi casi la soluzione più rapida è quella di costruirsi un sistema Linux personalizzato. Per farlo il metodo più semplice è utilizzare [https://buildroot.org/download.html Buildroot], un tool che permette la cross-compilazione di un ambiente Linux completo di librerie (glibc, uclibc-ng o musl), applicazioni e l'indispensabile busybox.&lt;br /&gt;
&lt;br /&gt;
Scompattare il tool&lt;br /&gt;
 $ tar -xzvf buildroot-2026.02.tar.gz&lt;br /&gt;
&lt;br /&gt;
Entrare nella directory principale&lt;br /&gt;
 $ cd buildroot-2026.02/&lt;br /&gt;
&lt;br /&gt;
==BusyBox==&lt;br /&gt;
Configurare busybox selezionando i programmi che si ritengono necessari&lt;br /&gt;
 $ make busybox-menuconfig&lt;br /&gt;
&lt;br /&gt;
==Kernel==&lt;br /&gt;
Configurare il kernel per la compilazione&lt;br /&gt;
 $ make linux-menuconfig&lt;br /&gt;
&lt;br /&gt;
Escludere tutto ciò che non è strettamente necessario per risparmiare spazio su disco, quanto segue dovrà essere necessariamente presente per ottenere un sistema minimo avviabile.&lt;br /&gt;
&lt;br /&gt;
* Code maturity level-&amp;gt; Prompt for development&lt;br /&gt;
&lt;br /&gt;
* Processor type and features-&amp;gt; Support for your processor&lt;br /&gt;
&lt;br /&gt;
* General setup-&amp;gt; kernel support for ELF binaries&lt;br /&gt;
&lt;br /&gt;
* Block devices-&amp;gt; RAM disk support&lt;br /&gt;
&lt;br /&gt;
* File systems-&amp;gt; /proc filesystem, tmpfs, ext2&lt;br /&gt;
&lt;br /&gt;
* Character devices-&amp;gt; Virtual terminal&lt;br /&gt;
&lt;br /&gt;
* Character devices-&amp;gt; Support for console on virtual terminal&lt;br /&gt;
&lt;br /&gt;
* Console drivers-&amp;gt; VGA text console&lt;br /&gt;
&lt;br /&gt;
* General setup-&amp;gt; PCI support&lt;br /&gt;
&lt;br /&gt;
* I driver delle schede di rete che interessa supportare (ne, ne2k, rtl8139too, rtl8139c, pcnet32, e1000)&lt;br /&gt;
&lt;br /&gt;
* Iptables se si necessita di un firewall&lt;br /&gt;
&lt;br /&gt;
* Un driver IDE generico (generic ATA) su libata&lt;br /&gt;
&lt;br /&gt;
* Block devices-&amp;gt; Normal PC floppy disk support, se ci interesse il supporto al floppy&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Se si deve limitare al massimo la grandezza dell'immagine del kernel (bzImage) si può scegliere con un algoritmo di compressione come lzma. Questo però aumenterà il consumo di RAM e per macchine molto vecchie come i386 o i486 probabilmente è meglio optare per gz o al massimo bz2.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Configurazione generale==&lt;br /&gt;
 $ make menuconfig&lt;br /&gt;
&lt;br /&gt;
Indicare:&lt;br /&gt;
&lt;br /&gt;
* Architettura di destinazione (i386, i486, i586…)&lt;br /&gt;
&lt;br /&gt;
* Opzioni di compilazione&lt;br /&gt;
&lt;br /&gt;
* Versione del kernel da usare&lt;br /&gt;
&lt;br /&gt;
* Configurazione di partenza del kernel&lt;br /&gt;
 Kernel  ---&amp;gt; Kernel configuration (Use the architecture default configuration)&lt;br /&gt;
&lt;br /&gt;
* Eventuali altri programmi non presenti in busybox (es.: mdev, dropbear, nano, iptables, ncftp, lynx, mutt)&lt;br /&gt;
&lt;br /&gt;
* Si consiglia l'opzione di compilazione gcc '''-Os''' al fine di ridurre al minimo la grandezza dei binari &lt;br /&gt;
&lt;br /&gt;
===Filesystem images===&lt;br /&gt;
Esistono varie tipologie di filesystem da utilizzare per il sistema che verrà compilato: immagini ext2, squashfs, direttamente nel initramfs o semplicemente in un tarball. Nel caso ci interessi costruire un floppy, al fine di sfruttare al meglio lo spazio, consiglio di scegliere ext2 compresso, anche in questo caso con lzma si ottengono filesystem fino al 20% più piccoli rispetto a quelli compressi con bzip2, ma il sistema  necessiterà di maggiore RAM per caricarli (70-80MB). &lt;br /&gt;
&lt;br /&gt;
Terminata la fase di configurazione si può procedere con la compilazione&lt;br /&gt;
 $ make&lt;br /&gt;
&lt;br /&gt;
==output==&lt;br /&gt;
Nella directory buildroot-2026.02/output/images risiede il prodotto finito.&lt;br /&gt;
Se lasciate le impostazioni standard si tratterà di 3 file: bzImage, rootfs.ext2, rootfs.tar.&lt;br /&gt;
&lt;br /&gt;
==Immagine per floppy disk==&lt;br /&gt;
Le dimensioni dei file bzImage e rootfs.i486.ext2.lzma devono essere sufficientemente contenute per entrare su un floppy.&lt;br /&gt;
Nel caso fossero solo di poco più grandi (100-200 KB), si può rimediare con la formattazione non standard del floppy: a 1.72 MB invece che a 1.44MB.&lt;br /&gt;
 $ sudo mknod /dev/fd0u1722 b 2 60&lt;br /&gt;
 $ fdformat /dev/fd0u1722&lt;br /&gt;
 $ mkfs.vfat /dev/fd0u1722&lt;br /&gt;
&lt;br /&gt;
Se non presente creare un mount point per il floppy&lt;br /&gt;
 $ sudo mkdir /mnt/floppy&lt;br /&gt;
&lt;br /&gt;
Montare il floppy&lt;br /&gt;
 $ sudo mount /dev/fd0u1722 /mnt/floppy&lt;br /&gt;
&lt;br /&gt;
Copiarvi i due file&lt;br /&gt;
 $ sudo cp buildroot/output/images/bzImage /mnt/floppy&lt;br /&gt;
 $ sudo cp buildroot/output/images/rootfs.i486.ext2.lzma /mnt/floppy&lt;br /&gt;
&lt;br /&gt;
Adesso occorre installare un boot loader sul floppy. Essendo leggero, semplice da usare e supportando la FAT16 si consiglia di usare syslinux.&lt;br /&gt;
&lt;br /&gt;
Se syslinux non fosse presente sul vostro sistema installatelo con:&lt;br /&gt;
&lt;br /&gt;
 $ sudo apt-get install syslinux&lt;br /&gt;
per sistemi Debian-based&lt;br /&gt;
&lt;br /&gt;
O con&lt;br /&gt;
 # pacman -S syslinux&lt;br /&gt;
su Arch Linux&lt;br /&gt;
&lt;br /&gt;
Con un editor di testo (es. nano) create il file di configurazione per il boot loader: syslinux.cfg&lt;br /&gt;
 $ sudo nano /mnt/floppy/syslinux.cfg&lt;br /&gt;
&lt;br /&gt;
Riportate quanto segue, eventualmente adattandolo alle vostre esigenze:&lt;br /&gt;
&lt;br /&gt;
 default start&lt;br /&gt;
 timeout 5&lt;br /&gt;
 prompt 1&lt;br /&gt;
 label start&lt;br /&gt;
 kernel bzImage&lt;br /&gt;
 append initrd=rootfs.i486.ext2.lzma BOOTDEV=fd0 ramdisk_size=16384 vga=0 root=/dev/ram0&lt;br /&gt;
&lt;br /&gt;
Se è stato usato un altro tipo di filesystem sostituire rootfs.i486.ext2.lzma con rootfs.i486.ext2.bz2, rootfs.i486.ext2.squashfs…&lt;br /&gt;
&lt;br /&gt;
Installare il bootloader sul floppy&lt;br /&gt;
 $ sudo syslinux /dev/fd0&lt;br /&gt;
&lt;br /&gt;
Smontare il floppy&lt;br /&gt;
 $ cd&lt;br /&gt;
 $ sudo umount /mnt/floppy&lt;br /&gt;
&lt;br /&gt;
In caso di necessità di modifiche al ramdisk bisognerà copiarlo sul disco fisso, decomprimerlo, montarlo in loop ed effettuare le modifiche in questo modo:&lt;br /&gt;
 $ sudo mount /mnt/floppy&lt;br /&gt;
 $ sudo cp /mnt/floppy/rootfs.i486.ext2.lzma&lt;br /&gt;
 $ sudo lzma -d rootfs.i486.ext2.lzma&lt;br /&gt;
 $ sudo mkdir /mnt/tmp&lt;br /&gt;
 $ sudo mount -o loop rootfs.i486.ext2 /mnt/tmp&lt;br /&gt;
 $ cd /mnt/tmp&lt;br /&gt;
&lt;br /&gt;
Effettuare le modifiche e poi smontare il tutto&lt;br /&gt;
 $ cd&lt;br /&gt;
 $ sudo umount /mnt/tmp&lt;br /&gt;
&lt;br /&gt;
Ricomprimere il ramdisk e copiarlo sul floppy per sostituire quello vecchio&lt;br /&gt;
 $ sudo lzma -c9 rootfs.i486.ext2 &amp;gt; rootfs.i486.ext2.lzma&lt;br /&gt;
 $ sudo cp rootfs.i486.ext2.lzma /mnt/floppy&lt;br /&gt;
 $ sudo umount /mnt/floppy&lt;br /&gt;
&lt;br /&gt;
==Immagine per hard disk==&lt;br /&gt;
Se un floppy è troppo piccolo per le nostre esigenze si può costruire il sistema dentro ad un file d'immagine da copiare sull'hard disk della nostra macchina direttamente con dd. Creiamo quindi un'immagine da 250 MB, che dovrebbe essere più che sufficiente per un sistema testuale&lt;br /&gt;
 dd if=/dev/zero of=output/images/486linux.img bs=1M count=250&lt;br /&gt;
&lt;br /&gt;
Montiamo l'immagine per poter formattare il filesystem e copiarci i dati&lt;br /&gt;
 # losetup -Pf 486linux.img&lt;br /&gt;
 # mkfs.ext2 /dev/loop0p1&lt;br /&gt;
Probabilmente il miglior filesystem per un sistema così vecchio è ext2, si rinuncia al journaling, ma ci si guadagna parecchio in performance.&lt;br /&gt;
 # mkfs.ext2 -m 0 -O none /dev/loop0p1&lt;br /&gt;
&lt;br /&gt;
Montiamo il tutto&lt;br /&gt;
 # mount /dev/loop0p1 /mnt/img&lt;br /&gt;
&lt;br /&gt;
Copiamoci il filesystem ed il kernel&lt;br /&gt;
 # tar xf buildroot-2026.02/output/images/rootfs.tar -C /mnt/img&lt;br /&gt;
 # mkdir -p /mnt/img/boot&lt;br /&gt;
 # cp buildroot-2026.02/output/images/bzImage /mnt/img/boot/bzImage&lt;br /&gt;
&lt;br /&gt;
Come bootloader, anche in questo caso si è optato per il semplicissimo syslinux.&lt;br /&gt;
 sudo pacman -S syslinux&lt;br /&gt;
 sudo extlinux --install /mnt/img/boot/&lt;br /&gt;
&lt;br /&gt;
Configuriamo il bootloader (/mnt/boot/syslinux.cfg)&lt;br /&gt;
 DEFAULT linux&lt;br /&gt;
 timeout 5&lt;br /&gt;
 prompt 1&lt;br /&gt;
 LABEL linux&lt;br /&gt;
    KERNEL /boot/bzImage&lt;br /&gt;
    APPEND root=/dev/sda1 ro&lt;br /&gt;
&lt;br /&gt;
Se ci interessa la tastiera italiana creiamo dal nostro sistema host il file .bmap da far caricare a busybox &lt;br /&gt;
 # loadkeys -qb it &amp;gt; it.bmap&lt;br /&gt;
 # mv it.bmap /mnt/img/etc&lt;br /&gt;
&lt;br /&gt;
===Tastiera italiana===&lt;br /&gt;
Possiamo creare uno script d'avvio tipo per far caricare automaticamente la tastiera italiana (ricordatevi di renderlo eseguibile).&lt;br /&gt;
&lt;br /&gt;
'''/etc/init.d/S40keyboard'''&lt;br /&gt;
 #!/bin/sh&lt;br /&gt;
 loadkmap &amp;lt; /etc/it.bmap&lt;br /&gt;
&lt;br /&gt;
===Hotplug===&lt;br /&gt;
Per l'hotplug dei moduli occorre aver installato il programma mdev, anche in questo caso converrà scrivere uno script di avvio&lt;br /&gt;
&lt;br /&gt;
'''/etc/init.d/S10mdev'''&lt;br /&gt;
 #!/bin/sh&lt;br /&gt;
 case &amp;quot;$1&amp;quot; in&lt;br /&gt;
    start)&lt;br /&gt;
        echo &amp;quot;Starting mdev...&amp;quot;&lt;br /&gt;
        # Scansiona /sys per creare i device node per l'hardware già presente&lt;br /&gt;
        /sbin/mdev -s&lt;br /&gt;
        # Questo è il &amp;quot;coldplug&amp;quot;: trova tutti i moduli dell'hardware già presente e li carica&lt;br /&gt;
        echo &amp;quot;Loading kernel modules for existing hardware...&amp;quot;&lt;br /&gt;
        find /sys/ -name modalias | xargs sort -u | xargs modprobe -abq&lt;br /&gt;
        ;;&lt;br /&gt;
    stop)&lt;br /&gt;
        echo &amp;quot;Stopping mdev...&amp;quot;&lt;br /&gt;
        ;;&lt;br /&gt;
    *)&lt;br /&gt;
        echo &amp;quot;Usage: $0 {start|stop}&amp;quot;&lt;br /&gt;
        exit 1&lt;br /&gt;
        ;;&lt;br /&gt;
 esac&lt;br /&gt;
[[Category:howto]]&lt;/div&gt;</summary>
		<author><name>$pooky Hunter</name></author>
	</entry>
	<entry>
		<id>https://wiki.golem.linux.it/index.php?title=Linux_minimale_per_PC_i386/i486&amp;diff=9978</id>
		<title>Linux minimale per PC i386/i486</title>
		<link rel="alternate" type="text/html" href="https://wiki.golem.linux.it/index.php?title=Linux_minimale_per_PC_i386/i486&amp;diff=9978"/>
		<updated>2026-05-17T18:33:04Z</updated>

		<summary type="html">&lt;p&gt;$pooky Hunter: /* Hotplug */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Distribuzioni per i386-i486=&lt;br /&gt;
Per il recupero di macchine particolarmente vecchie esistono delle mini distribuzioni prive di ambiente grafico e talmente compatte da poter essere contenute in un unico floppy.&lt;br /&gt;
&lt;br /&gt;
NB: i386 non più supportato dal kernel 3.8 (2012), i486 dal kernel 7.1&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! Distribuzione&lt;br /&gt;
! Versione Kernel&lt;br /&gt;
! Supporto avvio&lt;br /&gt;
! CPU minima&lt;br /&gt;
! RAM minima&lt;br /&gt;
! Uso ideale&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [http://delicate-linux.net/ DeLi(cate) Linux]&lt;br /&gt;
| 2.4.37.11&lt;br /&gt;
| CDROM&lt;br /&gt;
| i386&lt;br /&gt;
| 8 MB (console) - 64 MB (GUI)&lt;br /&gt;
| Trashware&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.fdlinux.com/download.php FD Linux]&lt;br /&gt;
| 2.4.20&lt;br /&gt;
| 1 floppy&lt;br /&gt;
| 386SX&lt;br /&gt;
| 4 MB&lt;br /&gt;
| DOS/Linux compatto&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.zelow.no/floppyfw floppyfw]&lt;br /&gt;
| 2.4.37.11&lt;br /&gt;
| 1 floppy&lt;br /&gt;
| 386SX&lt;br /&gt;
| 12 MB&lt;br /&gt;
| Router/firewall embedded (iptables)&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [https://web.archive.org/web/20190312063410/http://chris.silmor.de/hal91/ HAL91]&lt;br /&gt;
| 2.0.39&lt;br /&gt;
| 1 floppy&lt;br /&gt;
| i386&lt;br /&gt;
| 8 MB&lt;br /&gt;
| Network solo con scheda NE2000 ISA&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [https://micheleandreoli.org/public/Software/mulinux// muLinux]&lt;br /&gt;
| 2.0.36&lt;br /&gt;
| 1+ floppy modulari&lt;br /&gt;
| 386SX&lt;br /&gt;
| 4 MB&lt;br /&gt;
| Recupero PC vintage&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.tinycorelinux.com Tiny Core Linux]&lt;br /&gt;
| 6.18.2&lt;br /&gt;
| CDROM&lt;br /&gt;
| i486DX&lt;br /&gt;
| 80 MB&lt;br /&gt;
| Minimalismo estremo, appliance&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [https://sourceforge.net/projects/zool5remastered/ Zool]&lt;br /&gt;
| 2.4.37.11&lt;br /&gt;
| 1 floppy&lt;br /&gt;
| i386&lt;br /&gt;
| 12 MB&lt;br /&gt;
| Networking completo (httpd, ftpd, telnetd)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Distribuzioni per i586-i686=&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! Distribuzione Linux&lt;br /&gt;
! Versione Kernel&lt;br /&gt;
! CPU minima&lt;br /&gt;
! RAM minima&lt;br /&gt;
! Uso ideale&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [http://alpinelinux.org Alpine]&lt;br /&gt;
| 6.18.1-lts&lt;br /&gt;
| i686&lt;br /&gt;
| 128 MB (console)&lt;br /&gt;
| Server Minimali, Container&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.damnsmalllinux.org  Damn Small Linux 2024]&lt;br /&gt;
| 5.10.188&lt;br /&gt;
| i686&lt;br /&gt;
| 128 MB (console)&lt;br /&gt;
| Desktop leggero&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.puppylinux.com Puppy]&lt;br /&gt;
| 6.6.137&lt;br /&gt;
| i686&lt;br /&gt;
| 128 MB (console)&lt;br /&gt;
| Desktop leggero (Slackware 15 base)&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.slitaz.org SliTaz]&lt;br /&gt;
| 3.16.55&lt;br /&gt;
| i686&lt;br /&gt;
| 64 MB (console) - 256 MB (GUI)&lt;br /&gt;
| Desktop leggero&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! BSD&lt;br /&gt;
! Versione&lt;br /&gt;
! CPU minima&lt;br /&gt;
! RAM minima&lt;br /&gt;
! Uso ideale&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.openbsd.org OpenBSD]&lt;br /&gt;
| 7.8&lt;br /&gt;
| i586&lt;br /&gt;
| 32 MB (console)&lt;br /&gt;
| Server/router&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.netbsd.org NetBSD]&lt;br /&gt;
| 10&lt;br /&gt;
| i586&lt;br /&gt;
| 64 MB (console)&lt;br /&gt;
| Server/router&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Se si cerca un'esperienza desktop per un Pentium 100-200Mhz con 32-64 MB RAM ci si dovrà rassegnare a recuperare una distribuzione dell'epoca come [https://archive.org/download/mandrake-7.2-i386_202304/mandrake-7.2-i386.iso Mandrake 7.2]&lt;br /&gt;
&lt;br /&gt;
=Buildroot=&lt;br /&gt;
Soluzioni preconfezionate (come quelle sopra elencate) potrebbero non rispondere alle nostre esigenze: kernel datati, driver o applicativi mancanti.&lt;br /&gt;
&lt;br /&gt;
In questi casi la soluzione più rapida è quella di costruirsi un sistema Linux personalizzato. Per farlo il metodo più semplice è utilizzare [https://buildroot.org/download.html Buildroot], un tool che permette la cross-compilazione di un ambiente Linux completo di librerie (glibc, uclibc-ng o musl), applicazioni e l'indispensabile busybox.&lt;br /&gt;
&lt;br /&gt;
Scompattare il tool&lt;br /&gt;
 $ tar -xzvf buildroot-2026.02.tar.gz&lt;br /&gt;
&lt;br /&gt;
Entrare nella directory principale&lt;br /&gt;
 $ cd buildroot-2026.02/&lt;br /&gt;
&lt;br /&gt;
==BusyBox==&lt;br /&gt;
Configurare busybox selezionando i programmi che si ritengono necessari&lt;br /&gt;
 $ make busybox-menuconfig&lt;br /&gt;
&lt;br /&gt;
==Kernel==&lt;br /&gt;
Configurare il kernel per la compilazione&lt;br /&gt;
 $ make linux-menuconfig&lt;br /&gt;
&lt;br /&gt;
Escludere tutto ciò che non è strettamente necessario per risparmiare spazio su disco, quanto segue dovrà essere necessariamente presente per ottenere un sistema minimo avviabile.&lt;br /&gt;
&lt;br /&gt;
* Code maturity level-&amp;gt; Prompt for development&lt;br /&gt;
&lt;br /&gt;
* Processor type and features-&amp;gt; Support for your processor&lt;br /&gt;
&lt;br /&gt;
* General setup-&amp;gt; kernel support for ELF binaries&lt;br /&gt;
&lt;br /&gt;
* Block devices-&amp;gt; RAM disk support&lt;br /&gt;
&lt;br /&gt;
* File systems-&amp;gt; /proc filesystem, tmpfs, ext2&lt;br /&gt;
&lt;br /&gt;
* Character devices-&amp;gt; Virtual terminal&lt;br /&gt;
&lt;br /&gt;
* Character devices-&amp;gt; Support for console on virtual terminal&lt;br /&gt;
&lt;br /&gt;
* Console drivers-&amp;gt; VGA text console&lt;br /&gt;
&lt;br /&gt;
* General setup-&amp;gt; PCI support&lt;br /&gt;
&lt;br /&gt;
* I driver delle schede di rete che interessa supportare (ne, ne2k, rtl8139too, rtl8139c, pcnet32, e1000)&lt;br /&gt;
&lt;br /&gt;
* Iptables se si necessita di un firewall&lt;br /&gt;
&lt;br /&gt;
* Un driver IDE generico (generic ATA) su libata&lt;br /&gt;
&lt;br /&gt;
* Block devices-&amp;gt; Normal PC floppy disk support, se ci interesse il supporto al floppy&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Se si deve limitare al massimo la grandezza dell'immagine del kernel (bzImage) si può scegliere con un algoritmo di compressione come lzma. Questo però aumenterà il consumo di RAM e per macchine molto vecchie come i386 o i486 probabilmente è meglio optare per gz o al massimo bz2.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Configurazione generale==&lt;br /&gt;
 $ make menuconfig&lt;br /&gt;
&lt;br /&gt;
Indicare:&lt;br /&gt;
&lt;br /&gt;
* Architettura di destinazione (i386, i486, i586…)&lt;br /&gt;
&lt;br /&gt;
* Opzioni di compilazione&lt;br /&gt;
&lt;br /&gt;
* Versione del kernel da usare&lt;br /&gt;
&lt;br /&gt;
* Configurazione di partenza del kernel&lt;br /&gt;
 Kernel  ---&amp;gt; Kernel configuration (Use the architecture default configuration)&lt;br /&gt;
&lt;br /&gt;
* Eventuali altri programmi non presenti in busybox (es.: mdev, dropbear, nano, iptables, ncftp, lynx, mutt)&lt;br /&gt;
&lt;br /&gt;
* Si consiglia l'opzione di compilazione gcc '''-Os''' al fine di ridurre al minimo la grandezza dei binari &lt;br /&gt;
&lt;br /&gt;
===Filesystem images===&lt;br /&gt;
Esistono varie tipologie di filesystem da utilizzare per il sistema che verrà compilato: immagini ext2, squashfs, direttamente nel initramfs o semplicemente in un tarball. Nel caso ci interessi costruire un floppy, al fine di sfruttare al meglio lo spazio, consiglio di scegliere ext2 compresso, anche in questo caso con lzma si ottengono filesystem fino al 20% più piccoli rispetto a quelli compressi con bzip2, ma il sistema  necessiterà di maggiore RAM per caricarli (70-80MB). &lt;br /&gt;
&lt;br /&gt;
Terminata la fase di configurazione si può procedere con la compilazione&lt;br /&gt;
 $ make&lt;br /&gt;
&lt;br /&gt;
==output==&lt;br /&gt;
Nella directory buildroot-2026.02/output/images risiede il prodotto finito.&lt;br /&gt;
Se lasciate le impostazioni standard si tratterà di 3 file: bzImage, rootfs.ext2, rootfs.tar.&lt;br /&gt;
&lt;br /&gt;
==Immagine per floppy disk==&lt;br /&gt;
Le dimensioni dei file bzImage e rootfs.i486.ext2.lzma devono essere sufficientemente contenute per entrare su un floppy.&lt;br /&gt;
Nel caso fossero solo di poco più grandi (100-200 KB), si può rimediare con la formattazione non standard del floppy: a 1.72 MB invece che a 1.44MB.&lt;br /&gt;
 $ sudo mknod /dev/fd0u1722 b 2 60&lt;br /&gt;
 $ fdformat /dev/fd0u1722&lt;br /&gt;
 $ mkfs.vfat /dev/fd0u1722&lt;br /&gt;
&lt;br /&gt;
Se non presente creare un mount point per il floppy&lt;br /&gt;
 $ sudo mkdir /mnt/floppy&lt;br /&gt;
&lt;br /&gt;
Montare il floppy&lt;br /&gt;
 $ sudo mount /dev/fd0u1722 /mnt/floppy&lt;br /&gt;
&lt;br /&gt;
Copiarvi i due file&lt;br /&gt;
 $ sudo cp buildroot/output/images/bzImage /mnt/floppy&lt;br /&gt;
 $ sudo cp buildroot/output/images/rootfs.i486.ext2.lzma /mnt/floppy&lt;br /&gt;
&lt;br /&gt;
Adesso occorre installare un boot loader sul floppy. Essendo leggero, semplice da usare e supportando la FAT16 si consiglia di usare syslinux.&lt;br /&gt;
&lt;br /&gt;
Se syslinux non fosse presente sul vostro sistema installatelo con:&lt;br /&gt;
&lt;br /&gt;
 $ sudo apt-get install syslinux&lt;br /&gt;
per sistemi Debian-based&lt;br /&gt;
&lt;br /&gt;
O con&lt;br /&gt;
 # pacman -S syslinux&lt;br /&gt;
su Arch Linux&lt;br /&gt;
&lt;br /&gt;
Con un editor di testo (es. nano) create il file di configurazione per il boot loader: syslinux.cfg&lt;br /&gt;
 $ sudo nano /mnt/floppy/syslinux.cfg&lt;br /&gt;
&lt;br /&gt;
Riportate quanto segue, eventualmente adattandolo alle vostre esigenze:&lt;br /&gt;
&lt;br /&gt;
 default start&lt;br /&gt;
 timeout 5&lt;br /&gt;
 prompt 1&lt;br /&gt;
 label start&lt;br /&gt;
 kernel bzImage&lt;br /&gt;
 append initrd=rootfs.i486.ext2.lzma BOOTDEV=fd0 ramdisk_size=16384 vga=0 root=/dev/ram0&lt;br /&gt;
&lt;br /&gt;
Se è stato usato un altro tipo di filesystem sostituire rootfs.i486.ext2.lzma con rootfs.i486.ext2.bz2, rootfs.i486.ext2.squashfs…&lt;br /&gt;
&lt;br /&gt;
Installare il bootloader sul floppy&lt;br /&gt;
 $ sudo syslinux /dev/fd0&lt;br /&gt;
&lt;br /&gt;
Smontare il floppy&lt;br /&gt;
 $ cd&lt;br /&gt;
 $ sudo umount /mnt/floppy&lt;br /&gt;
&lt;br /&gt;
In caso di necessità di modifiche al ramdisk bisognerà copiarlo sul disco fisso, decomprimerlo, montarlo in loop ed effettuare le modifiche in questo modo:&lt;br /&gt;
 $ sudo mount /mnt/floppy&lt;br /&gt;
 $ sudo cp /mnt/floppy/rootfs.i486.ext2.lzma&lt;br /&gt;
 $ sudo lzma -d rootfs.i486.ext2.lzma&lt;br /&gt;
 $ sudo mkdir /mnt/tmp&lt;br /&gt;
 $ sudo mount -o loop rootfs.i486.ext2 /mnt/tmp&lt;br /&gt;
 $ cd /mnt/tmp&lt;br /&gt;
&lt;br /&gt;
Effettuare le modifiche e poi smontare il tutto&lt;br /&gt;
 $ cd&lt;br /&gt;
 $ sudo umount /mnt/tmp&lt;br /&gt;
&lt;br /&gt;
Ricomprimere il ramdisk e copiarlo sul floppy per sostituire quello vecchio&lt;br /&gt;
 $ sudo lzma -c9 rootfs.i486.ext2 &amp;gt; rootfs.i486.ext2.lzma&lt;br /&gt;
 $ sudo cp rootfs.i486.ext2.lzma /mnt/floppy&lt;br /&gt;
 $ sudo umount /mnt/floppy&lt;br /&gt;
&lt;br /&gt;
==Immagine per hard disk==&lt;br /&gt;
Se un floppy è troppo piccolo per le nostre esigenze si può costruire il sistema dentro ad un file d'immagine da copiare sull'hard disk della nostra macchina direttamente con dd. Creiamo quindi un'immagine da 250 MB, che dovrebbe essere più che sufficiente per un sistema testuale&lt;br /&gt;
 dd if=/dev/zero of=output/images/486linux.img bs=1M count=250&lt;br /&gt;
&lt;br /&gt;
Montiamo l'immagine per poter formattare il filesystem e copiarci i dati&lt;br /&gt;
 # losetup -Pf 486linux.img&lt;br /&gt;
 # mkfs.ext2 /dev/loop0p1&lt;br /&gt;
Probabilmente il miglior filesystem per un sistema così vecchio è ext2, si rinuncia al journaling, ma ci si guadagna parecchio in performance.&lt;br /&gt;
 # mkfs.ext2 -m 0 -O none /dev/loop0p1&lt;br /&gt;
&lt;br /&gt;
Montiamo il tutto&lt;br /&gt;
 # mount /dev/loop0p1 /mnt/img&lt;br /&gt;
&lt;br /&gt;
Copiamoci il filesystem ed il kernel&lt;br /&gt;
 # tar xf buildroot-2026.02/output/images/rootfs.tar -C /mnt/img&lt;br /&gt;
 # mkdir -p /mnt/img/boot&lt;br /&gt;
 # cp buildroot-2026.02/output/images/bzImage /mnt/img/boot/bzImage&lt;br /&gt;
&lt;br /&gt;
Come bootloader, anche in questo caso si è optato per il semplicissimo syslinux.&lt;br /&gt;
 sudo pacman -S syslinux&lt;br /&gt;
 sudo extlinux --install /mnt/img/boot/&lt;br /&gt;
&lt;br /&gt;
Configuriamo il bootloader (/mnt/boot/syslinux.cfg)&lt;br /&gt;
 DEFAULT linux&lt;br /&gt;
 timeout 5&lt;br /&gt;
 prompt 1&lt;br /&gt;
 LABEL linux&lt;br /&gt;
    KERNEL /boot/bzImage&lt;br /&gt;
    APPEND root=/dev/sda1 ro&lt;br /&gt;
&lt;br /&gt;
Se ci interessa la tastiera italiana creiamo dal nostro sistema host il file .bmap da far caricare a busybox &lt;br /&gt;
 # loadkeys -qb it &amp;gt; it.bmap&lt;br /&gt;
 # mv it.bmap /mnt/img/etc&lt;br /&gt;
&lt;br /&gt;
===Tastiera italiana===&lt;br /&gt;
Possiamo creare uno script d'avvio tipo ''/etc/init.d/S40keyboard'' per far in modo che il sistema lo carichi automaticamente (ricordatevi di renderlo eseguibile).&lt;br /&gt;
 #!/bin/sh&lt;br /&gt;
 loadkmap &amp;lt; /etc/it.bmap&lt;br /&gt;
&lt;br /&gt;
===Hotplug===&lt;br /&gt;
Per l'hotplug dei moduli occorre aver installato il programma mdev, anche in questo caso converrà scrivere uno script di avvio tipo il seguente (/etc/init.d/S10mdev) &lt;br /&gt;
 #!/bin/sh&lt;br /&gt;
 case &amp;quot;$1&amp;quot; in&lt;br /&gt;
    start)&lt;br /&gt;
        echo &amp;quot;Starting mdev...&amp;quot;&lt;br /&gt;
        # Scansiona /sys per creare i device node per l'hardware già presente&lt;br /&gt;
        /sbin/mdev -s&lt;br /&gt;
        # Questo è il &amp;quot;coldplug&amp;quot;: trova tutti i moduli dell'hardware già presente e li carica&lt;br /&gt;
        echo &amp;quot;Loading kernel modules for existing hardware...&amp;quot;&lt;br /&gt;
        find /sys/ -name modalias | xargs sort -u | xargs modprobe -abq&lt;br /&gt;
        ;;&lt;br /&gt;
    stop)&lt;br /&gt;
        echo &amp;quot;Stopping mdev...&amp;quot;&lt;br /&gt;
        ;;&lt;br /&gt;
    *)&lt;br /&gt;
        echo &amp;quot;Usage: $0 {start|stop}&amp;quot;&lt;br /&gt;
        exit 1&lt;br /&gt;
        ;;&lt;br /&gt;
 esac&lt;br /&gt;
[[Category:howto]]&lt;/div&gt;</summary>
		<author><name>$pooky Hunter</name></author>
	</entry>
	<entry>
		<id>https://wiki.golem.linux.it/index.php?title=Linux_minimale_per_PC_i386/i486&amp;diff=9977</id>
		<title>Linux minimale per PC i386/i486</title>
		<link rel="alternate" type="text/html" href="https://wiki.golem.linux.it/index.php?title=Linux_minimale_per_PC_i386/i486&amp;diff=9977"/>
		<updated>2026-05-16T12:04:23Z</updated>

		<summary type="html">&lt;p&gt;$pooky Hunter: /* Immagine per floppy disk */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Distribuzioni per i386-i486=&lt;br /&gt;
Per il recupero di macchine particolarmente vecchie esistono delle mini distribuzioni prive di ambiente grafico e talmente compatte da poter essere contenute in un unico floppy.&lt;br /&gt;
&lt;br /&gt;
NB: i386 non più supportato dal kernel 3.8 (2012), i486 dal kernel 7.1&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! Distribuzione&lt;br /&gt;
! Versione Kernel&lt;br /&gt;
! Supporto avvio&lt;br /&gt;
! CPU minima&lt;br /&gt;
! RAM minima&lt;br /&gt;
! Uso ideale&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [http://delicate-linux.net/ DeLi(cate) Linux]&lt;br /&gt;
| 2.4.37.11&lt;br /&gt;
| CDROM&lt;br /&gt;
| i386&lt;br /&gt;
| 8 MB (console) - 64 MB (GUI)&lt;br /&gt;
| Trashware&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.fdlinux.com/download.php FD Linux]&lt;br /&gt;
| 2.4.20&lt;br /&gt;
| 1 floppy&lt;br /&gt;
| 386SX&lt;br /&gt;
| 4 MB&lt;br /&gt;
| DOS/Linux compatto&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.zelow.no/floppyfw floppyfw]&lt;br /&gt;
| 2.4.37.11&lt;br /&gt;
| 1 floppy&lt;br /&gt;
| 386SX&lt;br /&gt;
| 12 MB&lt;br /&gt;
| Router/firewall embedded (iptables)&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [https://web.archive.org/web/20190312063410/http://chris.silmor.de/hal91/ HAL91]&lt;br /&gt;
| 2.0.39&lt;br /&gt;
| 1 floppy&lt;br /&gt;
| i386&lt;br /&gt;
| 8 MB&lt;br /&gt;
| Network solo con scheda NE2000 ISA&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [https://micheleandreoli.org/public/Software/mulinux// muLinux]&lt;br /&gt;
| 2.0.36&lt;br /&gt;
| 1+ floppy modulari&lt;br /&gt;
| 386SX&lt;br /&gt;
| 4 MB&lt;br /&gt;
| Recupero PC vintage&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.tinycorelinux.com Tiny Core Linux]&lt;br /&gt;
| 6.18.2&lt;br /&gt;
| CDROM&lt;br /&gt;
| i486DX&lt;br /&gt;
| 80 MB&lt;br /&gt;
| Minimalismo estremo, appliance&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [https://sourceforge.net/projects/zool5remastered/ Zool]&lt;br /&gt;
| 2.4.37.11&lt;br /&gt;
| 1 floppy&lt;br /&gt;
| i386&lt;br /&gt;
| 12 MB&lt;br /&gt;
| Networking completo (httpd, ftpd, telnetd)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Distribuzioni per i586-i686=&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! Distribuzione Linux&lt;br /&gt;
! Versione Kernel&lt;br /&gt;
! CPU minima&lt;br /&gt;
! RAM minima&lt;br /&gt;
! Uso ideale&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [http://alpinelinux.org Alpine]&lt;br /&gt;
| 6.18.1-lts&lt;br /&gt;
| i686&lt;br /&gt;
| 128 MB (console)&lt;br /&gt;
| Server Minimali, Container&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.damnsmalllinux.org  Damn Small Linux 2024]&lt;br /&gt;
| 5.10.188&lt;br /&gt;
| i686&lt;br /&gt;
| 128 MB (console)&lt;br /&gt;
| Desktop leggero&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.puppylinux.com Puppy]&lt;br /&gt;
| 6.6.137&lt;br /&gt;
| i686&lt;br /&gt;
| 128 MB (console)&lt;br /&gt;
| Desktop leggero (Slackware 15 base)&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.slitaz.org SliTaz]&lt;br /&gt;
| 3.16.55&lt;br /&gt;
| i686&lt;br /&gt;
| 64 MB (console) - 256 MB (GUI)&lt;br /&gt;
| Desktop leggero&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! BSD&lt;br /&gt;
! Versione&lt;br /&gt;
! CPU minima&lt;br /&gt;
! RAM minima&lt;br /&gt;
! Uso ideale&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.openbsd.org OpenBSD]&lt;br /&gt;
| 7.8&lt;br /&gt;
| i586&lt;br /&gt;
| 32 MB (console)&lt;br /&gt;
| Server/router&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.netbsd.org NetBSD]&lt;br /&gt;
| 10&lt;br /&gt;
| i586&lt;br /&gt;
| 64 MB (console)&lt;br /&gt;
| Server/router&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Se si cerca un'esperienza desktop per un Pentium 100-200Mhz con 32-64 MB RAM ci si dovrà rassegnare a recuperare una distribuzione dell'epoca come [https://archive.org/download/mandrake-7.2-i386_202304/mandrake-7.2-i386.iso Mandrake 7.2]&lt;br /&gt;
&lt;br /&gt;
=Buildroot=&lt;br /&gt;
Soluzioni preconfezionate (come quelle sopra elencate) potrebbero non rispondere alle nostre esigenze: kernel datati, driver o applicativi mancanti.&lt;br /&gt;
&lt;br /&gt;
In questi casi la soluzione più rapida è quella di costruirsi un sistema Linux personalizzato. Per farlo il metodo più semplice è utilizzare [https://buildroot.org/download.html Buildroot], un tool che permette la cross-compilazione di un ambiente Linux completo di librerie (glibc, uclibc-ng o musl), applicazioni e l'indispensabile busybox.&lt;br /&gt;
&lt;br /&gt;
Scompattare il tool&lt;br /&gt;
 $ tar -xzvf buildroot-2026.02.tar.gz&lt;br /&gt;
&lt;br /&gt;
Entrare nella directory principale&lt;br /&gt;
 $ cd buildroot-2026.02/&lt;br /&gt;
&lt;br /&gt;
==BusyBox==&lt;br /&gt;
Configurare busybox selezionando i programmi che si ritengono necessari&lt;br /&gt;
 $ make busybox-menuconfig&lt;br /&gt;
&lt;br /&gt;
==Kernel==&lt;br /&gt;
Configurare il kernel per la compilazione&lt;br /&gt;
 $ make linux-menuconfig&lt;br /&gt;
&lt;br /&gt;
Escludere tutto ciò che non è strettamente necessario per risparmiare spazio su disco, quanto segue dovrà essere necessariamente presente per ottenere un sistema minimo avviabile.&lt;br /&gt;
&lt;br /&gt;
* Code maturity level-&amp;gt; Prompt for development&lt;br /&gt;
&lt;br /&gt;
* Processor type and features-&amp;gt; Support for your processor&lt;br /&gt;
&lt;br /&gt;
* General setup-&amp;gt; kernel support for ELF binaries&lt;br /&gt;
&lt;br /&gt;
* Block devices-&amp;gt; RAM disk support&lt;br /&gt;
&lt;br /&gt;
* File systems-&amp;gt; /proc filesystem, tmpfs, ext2&lt;br /&gt;
&lt;br /&gt;
* Character devices-&amp;gt; Virtual terminal&lt;br /&gt;
&lt;br /&gt;
* Character devices-&amp;gt; Support for console on virtual terminal&lt;br /&gt;
&lt;br /&gt;
* Console drivers-&amp;gt; VGA text console&lt;br /&gt;
&lt;br /&gt;
* General setup-&amp;gt; PCI support&lt;br /&gt;
&lt;br /&gt;
* I driver delle schede di rete che interessa supportare (ne, ne2k, rtl8139too, rtl8139c, pcnet32, e1000)&lt;br /&gt;
&lt;br /&gt;
* Iptables se si necessita di un firewall&lt;br /&gt;
&lt;br /&gt;
* Un driver IDE generico (generic ATA) su libata&lt;br /&gt;
&lt;br /&gt;
* Block devices-&amp;gt; Normal PC floppy disk support, se ci interesse il supporto al floppy&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Se si deve limitare al massimo la grandezza dell'immagine del kernel (bzImage) si può scegliere con un algoritmo di compressione come lzma. Questo però aumenterà il consumo di RAM e per macchine molto vecchie come i386 o i486 probabilmente è meglio optare per gz o al massimo bz2.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Configurazione generale==&lt;br /&gt;
 $ make menuconfig&lt;br /&gt;
&lt;br /&gt;
Indicare:&lt;br /&gt;
&lt;br /&gt;
* Architettura di destinazione (i386, i486, i586…)&lt;br /&gt;
&lt;br /&gt;
* Opzioni di compilazione&lt;br /&gt;
&lt;br /&gt;
* Versione del kernel da usare&lt;br /&gt;
&lt;br /&gt;
* Configurazione di partenza del kernel&lt;br /&gt;
 Kernel  ---&amp;gt; Kernel configuration (Use the architecture default configuration)&lt;br /&gt;
&lt;br /&gt;
* Eventuali altri programmi non presenti in busybox (es.: mdev, dropbear, nano, iptables, ncftp, lynx, mutt)&lt;br /&gt;
&lt;br /&gt;
* Si consiglia l'opzione di compilazione gcc '''-Os''' al fine di ridurre al minimo la grandezza dei binari &lt;br /&gt;
&lt;br /&gt;
===Filesystem images===&lt;br /&gt;
Esistono varie tipologie di filesystem da utilizzare per il sistema che verrà compilato: immagini ext2, squashfs, direttamente nel initramfs o semplicemente in un tarball. Nel caso ci interessi costruire un floppy, al fine di sfruttare al meglio lo spazio, consiglio di scegliere ext2 compresso, anche in questo caso con lzma si ottengono filesystem fino al 20% più piccoli rispetto a quelli compressi con bzip2, ma il sistema  necessiterà di maggiore RAM per caricarli (70-80MB). &lt;br /&gt;
&lt;br /&gt;
Terminata la fase di configurazione si può procedere con la compilazione&lt;br /&gt;
 $ make&lt;br /&gt;
&lt;br /&gt;
==output==&lt;br /&gt;
Nella directory buildroot-2026.02/output/images risiede il prodotto finito.&lt;br /&gt;
Se lasciate le impostazioni standard si tratterà di 3 file: bzImage, rootfs.ext2, rootfs.tar.&lt;br /&gt;
&lt;br /&gt;
==Immagine per floppy disk==&lt;br /&gt;
Le dimensioni dei file bzImage e rootfs.i486.ext2.lzma devono essere sufficientemente contenute per entrare su un floppy.&lt;br /&gt;
Nel caso fossero solo di poco più grandi (100-200 KB), si può rimediare con la formattazione non standard del floppy: a 1.72 MB invece che a 1.44MB.&lt;br /&gt;
 $ sudo mknod /dev/fd0u1722 b 2 60&lt;br /&gt;
 $ fdformat /dev/fd0u1722&lt;br /&gt;
 $ mkfs.vfat /dev/fd0u1722&lt;br /&gt;
&lt;br /&gt;
Se non presente creare un mount point per il floppy&lt;br /&gt;
 $ sudo mkdir /mnt/floppy&lt;br /&gt;
&lt;br /&gt;
Montare il floppy&lt;br /&gt;
 $ sudo mount /dev/fd0u1722 /mnt/floppy&lt;br /&gt;
&lt;br /&gt;
Copiarvi i due file&lt;br /&gt;
 $ sudo cp buildroot/output/images/bzImage /mnt/floppy&lt;br /&gt;
 $ sudo cp buildroot/output/images/rootfs.i486.ext2.lzma /mnt/floppy&lt;br /&gt;
&lt;br /&gt;
Adesso occorre installare un boot loader sul floppy. Essendo leggero, semplice da usare e supportando la FAT16 si consiglia di usare syslinux.&lt;br /&gt;
&lt;br /&gt;
Se syslinux non fosse presente sul vostro sistema installatelo con:&lt;br /&gt;
&lt;br /&gt;
 $ sudo apt-get install syslinux&lt;br /&gt;
per sistemi Debian-based&lt;br /&gt;
&lt;br /&gt;
O con&lt;br /&gt;
 # pacman -S syslinux&lt;br /&gt;
su Arch Linux&lt;br /&gt;
&lt;br /&gt;
Con un editor di testo (es. nano) create il file di configurazione per il boot loader: syslinux.cfg&lt;br /&gt;
 $ sudo nano /mnt/floppy/syslinux.cfg&lt;br /&gt;
&lt;br /&gt;
Riportate quanto segue, eventualmente adattandolo alle vostre esigenze:&lt;br /&gt;
&lt;br /&gt;
 default start&lt;br /&gt;
 timeout 5&lt;br /&gt;
 prompt 1&lt;br /&gt;
 label start&lt;br /&gt;
 kernel bzImage&lt;br /&gt;
 append initrd=rootfs.i486.ext2.lzma BOOTDEV=fd0 ramdisk_size=16384 vga=0 root=/dev/ram0&lt;br /&gt;
&lt;br /&gt;
Se è stato usato un altro tipo di filesystem sostituire rootfs.i486.ext2.lzma con rootfs.i486.ext2.bz2, rootfs.i486.ext2.squashfs…&lt;br /&gt;
&lt;br /&gt;
Installare il bootloader sul floppy&lt;br /&gt;
 $ sudo syslinux /dev/fd0&lt;br /&gt;
&lt;br /&gt;
Smontare il floppy&lt;br /&gt;
 $ cd&lt;br /&gt;
 $ sudo umount /mnt/floppy&lt;br /&gt;
&lt;br /&gt;
In caso di necessità di modifiche al ramdisk bisognerà copiarlo sul disco fisso, decomprimerlo, montarlo in loop ed effettuare le modifiche in questo modo:&lt;br /&gt;
 $ sudo mount /mnt/floppy&lt;br /&gt;
 $ sudo cp /mnt/floppy/rootfs.i486.ext2.lzma&lt;br /&gt;
 $ sudo lzma -d rootfs.i486.ext2.lzma&lt;br /&gt;
 $ sudo mkdir /mnt/tmp&lt;br /&gt;
 $ sudo mount -o loop rootfs.i486.ext2 /mnt/tmp&lt;br /&gt;
 $ cd /mnt/tmp&lt;br /&gt;
&lt;br /&gt;
Effettuare le modifiche e poi smontare il tutto&lt;br /&gt;
 $ cd&lt;br /&gt;
 $ sudo umount /mnt/tmp&lt;br /&gt;
&lt;br /&gt;
Ricomprimere il ramdisk e copiarlo sul floppy per sostituire quello vecchio&lt;br /&gt;
 $ sudo lzma -c9 rootfs.i486.ext2 &amp;gt; rootfs.i486.ext2.lzma&lt;br /&gt;
 $ sudo cp rootfs.i486.ext2.lzma /mnt/floppy&lt;br /&gt;
 $ sudo umount /mnt/floppy&lt;br /&gt;
&lt;br /&gt;
==Immagine per hard disk==&lt;br /&gt;
Se un floppy è troppo piccolo per le nostre esigenze si può costruire il sistema dentro ad un file d'immagine da copiare sull'hard disk della nostra macchina direttamente con dd. Creiamo quindi un'immagine da 250 MB, che dovrebbe essere più che sufficiente per un sistema testuale&lt;br /&gt;
 dd if=/dev/zero of=output/images/486linux.img bs=1M count=250&lt;br /&gt;
&lt;br /&gt;
Montiamo l'immagine per poter formattare il filesystem e copiarci i dati&lt;br /&gt;
 # losetup -Pf 486linux.img&lt;br /&gt;
 # mkfs.ext2 /dev/loop0p1&lt;br /&gt;
Probabilmente il miglior filesystem per un sistema così vecchio è ext2, si rinuncia al journaling, ma ci si guadagna parecchio in performance.&lt;br /&gt;
 # mkfs.ext2 -m 0 -O none /dev/loop0p1&lt;br /&gt;
&lt;br /&gt;
Montiamo il tutto&lt;br /&gt;
 # mount /dev/loop0p1 /mnt/img&lt;br /&gt;
&lt;br /&gt;
Copiamoci il filesystem ed il kernel&lt;br /&gt;
 # tar xf buildroot-2026.02/output/images/rootfs.tar -C /mnt/img&lt;br /&gt;
 # mkdir -p /mnt/img/boot&lt;br /&gt;
 # cp buildroot-2026.02/output/images/bzImage /mnt/img/boot/bzImage&lt;br /&gt;
&lt;br /&gt;
Come bootloader, anche in questo caso si è optato per il semplicissimo syslinux.&lt;br /&gt;
 sudo pacman -S syslinux&lt;br /&gt;
 sudo extlinux --install /mnt/img/boot/&lt;br /&gt;
&lt;br /&gt;
Configuriamo il bootloader (/mnt/boot/syslinux.cfg)&lt;br /&gt;
 DEFAULT linux&lt;br /&gt;
 timeout 5&lt;br /&gt;
 prompt 1&lt;br /&gt;
 LABEL linux&lt;br /&gt;
    KERNEL /boot/bzImage&lt;br /&gt;
    APPEND root=/dev/sda1 ro&lt;br /&gt;
&lt;br /&gt;
Se ci interessa la tastiera italiana creiamo dal nostro sistema host il file .bmap da far caricare a busybox &lt;br /&gt;
 # loadkeys -qb it &amp;gt; it.bmap&lt;br /&gt;
 # mv it.bmap /mnt/img/etc&lt;br /&gt;
&lt;br /&gt;
===Tastiera italiana===&lt;br /&gt;
Possiamo creare uno script d'avvio tipo ''/etc/init.d/S40keyboard'' per far in modo che il sistema lo carichi automaticamente (ricordatevi di renderlo eseguibile).&lt;br /&gt;
 #!/bin/sh&lt;br /&gt;
 loadkmap &amp;lt; /etc/it.bmap&lt;br /&gt;
&lt;br /&gt;
===Hotplug===&lt;br /&gt;
Per l'hotplug dei moduli occorre aver installato il programma mdev, anche in questo caso converrà scrivere uno script di avvio tipo il seguente (/etc/init.d/S10mdev) &lt;br /&gt;
 #!/bin/sh&lt;br /&gt;
 case &amp;quot;$1&amp;quot; in&lt;br /&gt;
    start)&lt;br /&gt;
        echo &amp;quot;Starting mdev...&amp;quot;&lt;br /&gt;
        # Imposta mdev come gestore degli eventi hotplug&lt;br /&gt;
        echo /sbin/mdev &amp;gt; /proc/sys/kernel/hotplug&lt;br /&gt;
        # Scansiona /sys per creare i device node per l'hardware già presente&lt;br /&gt;
        /sbin/mdev -s&lt;br /&gt;
        # Questo è il &amp;quot;coldplug&amp;quot;: trova tutti i moduli dell'hardware già presente e li carica&lt;br /&gt;
        echo &amp;quot;Loading kernel modules for existing hardware...&amp;quot;&lt;br /&gt;
        find /sys/ -name modalias | xargs sort -u | xargs modprobe -abq&lt;br /&gt;
        ;;&lt;br /&gt;
    stop)&lt;br /&gt;
        echo &amp;quot;Stopping mdev...&amp;quot;&lt;br /&gt;
        ;;&lt;br /&gt;
    *)&lt;br /&gt;
        echo &amp;quot;Usage: $0 {start|stop}&amp;quot;&lt;br /&gt;
        exit 1&lt;br /&gt;
        ;;&lt;br /&gt;
 esac&lt;br /&gt;
[[Category:howto]]&lt;/div&gt;</summary>
		<author><name>$pooky Hunter</name></author>
	</entry>
	<entry>
		<id>https://wiki.golem.linux.it/index.php?title=Linux_minimale_per_PC_i386/i486&amp;diff=9976</id>
		<title>Linux minimale per PC i386/i486</title>
		<link rel="alternate" type="text/html" href="https://wiki.golem.linux.it/index.php?title=Linux_minimale_per_PC_i386/i486&amp;diff=9976"/>
		<updated>2026-05-16T09:59:11Z</updated>

		<summary type="html">&lt;p&gt;$pooky Hunter: /* Distribuzioni per i386-i486 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Distribuzioni per i386-i486=&lt;br /&gt;
Per il recupero di macchine particolarmente vecchie esistono delle mini distribuzioni prive di ambiente grafico e talmente compatte da poter essere contenute in un unico floppy.&lt;br /&gt;
&lt;br /&gt;
NB: i386 non più supportato dal kernel 3.8 (2012), i486 dal kernel 7.1&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! Distribuzione&lt;br /&gt;
! Versione Kernel&lt;br /&gt;
! Supporto avvio&lt;br /&gt;
! CPU minima&lt;br /&gt;
! RAM minima&lt;br /&gt;
! Uso ideale&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [http://delicate-linux.net/ DeLi(cate) Linux]&lt;br /&gt;
| 2.4.37.11&lt;br /&gt;
| CDROM&lt;br /&gt;
| i386&lt;br /&gt;
| 8 MB (console) - 64 MB (GUI)&lt;br /&gt;
| Trashware&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.fdlinux.com/download.php FD Linux]&lt;br /&gt;
| 2.4.20&lt;br /&gt;
| 1 floppy&lt;br /&gt;
| 386SX&lt;br /&gt;
| 4 MB&lt;br /&gt;
| DOS/Linux compatto&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.zelow.no/floppyfw floppyfw]&lt;br /&gt;
| 2.4.37.11&lt;br /&gt;
| 1 floppy&lt;br /&gt;
| 386SX&lt;br /&gt;
| 12 MB&lt;br /&gt;
| Router/firewall embedded (iptables)&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [https://web.archive.org/web/20190312063410/http://chris.silmor.de/hal91/ HAL91]&lt;br /&gt;
| 2.0.39&lt;br /&gt;
| 1 floppy&lt;br /&gt;
| i386&lt;br /&gt;
| 8 MB&lt;br /&gt;
| Network solo con scheda NE2000 ISA&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [https://micheleandreoli.org/public/Software/mulinux// muLinux]&lt;br /&gt;
| 2.0.36&lt;br /&gt;
| 1+ floppy modulari&lt;br /&gt;
| 386SX&lt;br /&gt;
| 4 MB&lt;br /&gt;
| Recupero PC vintage&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.tinycorelinux.com Tiny Core Linux]&lt;br /&gt;
| 6.18.2&lt;br /&gt;
| CDROM&lt;br /&gt;
| i486DX&lt;br /&gt;
| 80 MB&lt;br /&gt;
| Minimalismo estremo, appliance&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [https://sourceforge.net/projects/zool5remastered/ Zool]&lt;br /&gt;
| 2.4.37.11&lt;br /&gt;
| 1 floppy&lt;br /&gt;
| i386&lt;br /&gt;
| 12 MB&lt;br /&gt;
| Networking completo (httpd, ftpd, telnetd)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Distribuzioni per i586-i686=&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! Distribuzione Linux&lt;br /&gt;
! Versione Kernel&lt;br /&gt;
! CPU minima&lt;br /&gt;
! RAM minima&lt;br /&gt;
! Uso ideale&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [http://alpinelinux.org Alpine]&lt;br /&gt;
| 6.18.1-lts&lt;br /&gt;
| i686&lt;br /&gt;
| 128 MB (console)&lt;br /&gt;
| Server Minimali, Container&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.damnsmalllinux.org  Damn Small Linux 2024]&lt;br /&gt;
| 5.10.188&lt;br /&gt;
| i686&lt;br /&gt;
| 128 MB (console)&lt;br /&gt;
| Desktop leggero&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.puppylinux.com Puppy]&lt;br /&gt;
| 6.6.137&lt;br /&gt;
| i686&lt;br /&gt;
| 128 MB (console)&lt;br /&gt;
| Desktop leggero (Slackware 15 base)&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.slitaz.org SliTaz]&lt;br /&gt;
| 3.16.55&lt;br /&gt;
| i686&lt;br /&gt;
| 64 MB (console) - 256 MB (GUI)&lt;br /&gt;
| Desktop leggero&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! BSD&lt;br /&gt;
! Versione&lt;br /&gt;
! CPU minima&lt;br /&gt;
! RAM minima&lt;br /&gt;
! Uso ideale&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.openbsd.org OpenBSD]&lt;br /&gt;
| 7.8&lt;br /&gt;
| i586&lt;br /&gt;
| 32 MB (console)&lt;br /&gt;
| Server/router&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.netbsd.org NetBSD]&lt;br /&gt;
| 10&lt;br /&gt;
| i586&lt;br /&gt;
| 64 MB (console)&lt;br /&gt;
| Server/router&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Se si cerca un'esperienza desktop per un Pentium 100-200Mhz con 32-64 MB RAM ci si dovrà rassegnare a recuperare una distribuzione dell'epoca come [https://archive.org/download/mandrake-7.2-i386_202304/mandrake-7.2-i386.iso Mandrake 7.2]&lt;br /&gt;
&lt;br /&gt;
=Buildroot=&lt;br /&gt;
Soluzioni preconfezionate (come quelle sopra elencate) potrebbero non rispondere alle nostre esigenze: kernel datati, driver o applicativi mancanti.&lt;br /&gt;
&lt;br /&gt;
In questi casi la soluzione più rapida è quella di costruirsi un sistema Linux personalizzato. Per farlo il metodo più semplice è utilizzare [https://buildroot.org/download.html Buildroot], un tool che permette la cross-compilazione di un ambiente Linux completo di librerie (glibc, uclibc-ng o musl), applicazioni e l'indispensabile busybox.&lt;br /&gt;
&lt;br /&gt;
Scompattare il tool&lt;br /&gt;
 $ tar -xzvf buildroot-2026.02.tar.gz&lt;br /&gt;
&lt;br /&gt;
Entrare nella directory principale&lt;br /&gt;
 $ cd buildroot-2026.02/&lt;br /&gt;
&lt;br /&gt;
==BusyBox==&lt;br /&gt;
Configurare busybox selezionando i programmi che si ritengono necessari&lt;br /&gt;
 $ make busybox-menuconfig&lt;br /&gt;
&lt;br /&gt;
==Kernel==&lt;br /&gt;
Configurare il kernel per la compilazione&lt;br /&gt;
 $ make linux-menuconfig&lt;br /&gt;
&lt;br /&gt;
Escludere tutto ciò che non è strettamente necessario per risparmiare spazio su disco, quanto segue dovrà essere necessariamente presente per ottenere un sistema minimo avviabile.&lt;br /&gt;
&lt;br /&gt;
* Code maturity level-&amp;gt; Prompt for development&lt;br /&gt;
&lt;br /&gt;
* Processor type and features-&amp;gt; Support for your processor&lt;br /&gt;
&lt;br /&gt;
* General setup-&amp;gt; kernel support for ELF binaries&lt;br /&gt;
&lt;br /&gt;
* Block devices-&amp;gt; RAM disk support&lt;br /&gt;
&lt;br /&gt;
* File systems-&amp;gt; /proc filesystem, tmpfs, ext2&lt;br /&gt;
&lt;br /&gt;
* Character devices-&amp;gt; Virtual terminal&lt;br /&gt;
&lt;br /&gt;
* Character devices-&amp;gt; Support for console on virtual terminal&lt;br /&gt;
&lt;br /&gt;
* Console drivers-&amp;gt; VGA text console&lt;br /&gt;
&lt;br /&gt;
* General setup-&amp;gt; PCI support&lt;br /&gt;
&lt;br /&gt;
* I driver delle schede di rete che interessa supportare (ne, ne2k, rtl8139too, rtl8139c, pcnet32, e1000)&lt;br /&gt;
&lt;br /&gt;
* Iptables se si necessita di un firewall&lt;br /&gt;
&lt;br /&gt;
* Un driver IDE generico (generic ATA) su libata&lt;br /&gt;
&lt;br /&gt;
* Block devices-&amp;gt; Normal PC floppy disk support, se ci interesse il supporto al floppy&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Se si deve limitare al massimo la grandezza dell'immagine del kernel (bzImage) si può scegliere con un algoritmo di compressione come lzma. Questo però aumenterà il consumo di RAM e per macchine molto vecchie come i386 o i486 probabilmente è meglio optare per gz o al massimo bz2.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Configurazione generale==&lt;br /&gt;
 $ make menuconfig&lt;br /&gt;
&lt;br /&gt;
Indicare:&lt;br /&gt;
&lt;br /&gt;
* Architettura di destinazione (i386, i486, i586…)&lt;br /&gt;
&lt;br /&gt;
* Opzioni di compilazione&lt;br /&gt;
&lt;br /&gt;
* Versione del kernel da usare&lt;br /&gt;
&lt;br /&gt;
* Configurazione di partenza del kernel&lt;br /&gt;
 Kernel  ---&amp;gt; Kernel configuration (Use the architecture default configuration)&lt;br /&gt;
&lt;br /&gt;
* Eventuali altri programmi non presenti in busybox (es.: mdev, dropbear, nano, iptables, ncftp, lynx, mutt)&lt;br /&gt;
&lt;br /&gt;
* Si consiglia l'opzione di compilazione gcc '''-Os''' al fine di ridurre al minimo la grandezza dei binari &lt;br /&gt;
&lt;br /&gt;
===Filesystem images===&lt;br /&gt;
Esistono varie tipologie di filesystem da utilizzare per il sistema che verrà compilato: immagini ext2, squashfs, direttamente nel initramfs o semplicemente in un tarball. Nel caso ci interessi costruire un floppy, al fine di sfruttare al meglio lo spazio, consiglio di scegliere ext2 compresso, anche in questo caso con lzma si ottengono filesystem fino al 20% più piccoli rispetto a quelli compressi con bzip2, ma il sistema  necessiterà di maggiore RAM per caricarli (70-80MB). &lt;br /&gt;
&lt;br /&gt;
Terminata la fase di configurazione si può procedere con la compilazione&lt;br /&gt;
 $ make&lt;br /&gt;
&lt;br /&gt;
==output==&lt;br /&gt;
Nella directory buildroot-2026.02/output/images risiede il prodotto finito.&lt;br /&gt;
Se lasciate le impostazioni standard si tratterà di 3 file: bzImage, rootfs.ext2, rootfs.tar.&lt;br /&gt;
&lt;br /&gt;
==Immagine per floppy disk==&lt;br /&gt;
Le dimensioni dei file bzImage e rootfs.i486.ext2.lzma devono essere sufficientemente contenute per entrare su un floppy.&lt;br /&gt;
Nel caso fossero solo di poco più grandi (100-200 KB), si può rimediare con la formattazione non standard del floppy: a 1.72 MB invece che a 1.44MB.&lt;br /&gt;
 $ sudo mknod /dev/fd0u1722 b 2 60&lt;br /&gt;
 $ fdformat /dev/fd0u1722&lt;br /&gt;
 $ mkfs.vfat /dev/fd0u1722&lt;br /&gt;
&lt;br /&gt;
Se non presente creare un mount point per il floppy&lt;br /&gt;
 $ sudo mkdir /mnt/floppy&lt;br /&gt;
&lt;br /&gt;
Montare il floppy&lt;br /&gt;
 $ sudo mount /dev/fd0u1722 /mnt/floppy&lt;br /&gt;
&lt;br /&gt;
Copiarvi i due file&lt;br /&gt;
 $ sudo cp buildroot/output/images/bzImage /mnt/floppy&lt;br /&gt;
 $ sudo cp buildroot/output/images/rootfs.i486.ext2.lzma /mnt/floppy&lt;br /&gt;
&lt;br /&gt;
Adesso occorre installare un boot loader sul floppy. Essendo leggero, semplice da usare e supportando la FAT16 si consiglia di usare syslinux.&lt;br /&gt;
&lt;br /&gt;
Se syslinux non fosse presente sul vostro sistema installatelo con:&lt;br /&gt;
&lt;br /&gt;
 $ sudo apt-get install syslinux&lt;br /&gt;
per sistemi Debian-based&lt;br /&gt;
&lt;br /&gt;
O con&lt;br /&gt;
 # pacman -S syslinux&lt;br /&gt;
su Arch Linux&lt;br /&gt;
&lt;br /&gt;
Con un editor di testo (es. nano) create il file di configurazione per il boot loader: syslinux.cfg&lt;br /&gt;
 $ sudo nano /mnt/floppy/syslinux.cfg&lt;br /&gt;
&lt;br /&gt;
Riportate quanto segue, eventualmente adattandolo alle vostre esigenze:&lt;br /&gt;
&lt;br /&gt;
 default start&lt;br /&gt;
 timeout 5&lt;br /&gt;
 prompt 1&lt;br /&gt;
 label start&lt;br /&gt;
 kernel bzImage&lt;br /&gt;
 append initrd=rootfs.i486.ext2.lzma BOOTDEV=fd0 ramdisk_size=16384 vga=0 root=/dev/ram0&lt;br /&gt;
&lt;br /&gt;
Se è stato usato un altro tipo di filesystem sostituire rootfs.i486.ext2.lzma con rootfs.i486.ext2.bz2, rootfs.i486.ext2.squashfs…&lt;br /&gt;
&lt;br /&gt;
Installare il bootloader sul floppy&lt;br /&gt;
 $ sudo syslinux /dev/fd0&lt;br /&gt;
&lt;br /&gt;
Smontare il floppy&lt;br /&gt;
 $ cd&lt;br /&gt;
 $ sudo umount /mnt/floppy&lt;br /&gt;
&lt;br /&gt;
In caso di necessità di modifiche al ramdisk bisognerà copiarlo sul disco fisso, decomprimerlo, montarlo in loop ed effettuare le modifiche in questo modo:&lt;br /&gt;
 $ sudo mount /mnt/floppy&lt;br /&gt;
 $ sudo cp /mnt/floppy/rootfs.i486.ext2.lzma&lt;br /&gt;
 $ sudo lzma -d rootfs.i486.ext2.lzma&lt;br /&gt;
 $ sudo mkdir /mnt/tmp&lt;br /&gt;
 $ sudo mount -o loop rootfs.i486.ext2 /mnt/tmp&lt;br /&gt;
 $ cd /mnt/tmp&lt;br /&gt;
&lt;br /&gt;
Effettuare le modifiche e poi smontare il tutto&lt;br /&gt;
 $ cd&lt;br /&gt;
 $ sudo umount /mnt/tmp&lt;br /&gt;
&lt;br /&gt;
Ricomprimere il ramdisk e copiarlo sul floppy per sostituire quello vecchio&lt;br /&gt;
 $ sudo lzma -c9 rootfs.i486.ext2 &amp;gt; rootfs.i486.ext2.lzma&lt;br /&gt;
 $ sudo cp rootfs.i486.ext2.lzma /mnt/floppy&lt;br /&gt;
 $ sudo umount /mnt/floppy&lt;br /&gt;
&lt;br /&gt;
Un floppy già pronto con le seguenti caratteristiche ''era'' presente [http://golem.linux.it/files/spookyh/fspooky_v05.tar.xz qui]&lt;br /&gt;
&lt;br /&gt;
* Linux kernel 3.2.9&lt;br /&gt;
&lt;br /&gt;
* Busybox 1.19.4&lt;br /&gt;
&lt;br /&gt;
* Programmi inclusi: ftpd, ncftp, dropbear (ssh client/server), httpd, iptables, dhcp client/server, nc, wget, fdisk.&lt;br /&gt;
&lt;br /&gt;
* Requisiti minimi: i586 (60 MHz), 74 Mb RAM, floppy driver 3,5&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* Hardware supportato: processori i586 compatibili, Bus PCI (niente ISA), Controller Generic ATA disk; schede di rete Novell NE2000 (e cloni), RealTek 8129, Intel PRO/1000 Gigabit Adapter.&lt;br /&gt;
&lt;br /&gt;
==Immagine per hard disk==&lt;br /&gt;
Se un floppy è troppo piccolo per le nostre esigenze si può costruire il sistema dentro ad un file d'immagine da copiare sull'hard disk della nostra macchina direttamente con dd. Creiamo quindi un'immagine da 250 MB, che dovrebbe essere più che sufficiente per un sistema testuale&lt;br /&gt;
 dd if=/dev/zero of=output/images/486linux.img bs=1M count=250&lt;br /&gt;
&lt;br /&gt;
Montiamo l'immagine per poter formattare il filesystem e copiarci i dati&lt;br /&gt;
 # losetup -Pf 486linux.img&lt;br /&gt;
 # mkfs.ext2 /dev/loop0p1&lt;br /&gt;
Probabilmente il miglior filesystem per un sistema così vecchio è ext2, si rinuncia al journaling, ma ci si guadagna parecchio in performance.&lt;br /&gt;
 # mkfs.ext2 -m 0 -O none /dev/loop0p1&lt;br /&gt;
&lt;br /&gt;
Montiamo il tutto&lt;br /&gt;
 # mount /dev/loop0p1 /mnt/img&lt;br /&gt;
&lt;br /&gt;
Copiamoci il filesystem ed il kernel&lt;br /&gt;
 # tar xf buildroot-2026.02/output/images/rootfs.tar -C /mnt/img&lt;br /&gt;
 # mkdir -p /mnt/img/boot&lt;br /&gt;
 # cp buildroot-2026.02/output/images/bzImage /mnt/img/boot/bzImage&lt;br /&gt;
&lt;br /&gt;
Come bootloader, anche in questo caso si è optato per il semplicissimo syslinux.&lt;br /&gt;
 sudo pacman -S syslinux&lt;br /&gt;
 sudo extlinux --install /mnt/img/boot/&lt;br /&gt;
&lt;br /&gt;
Configuriamo il bootloader (/mnt/boot/syslinux.cfg)&lt;br /&gt;
 DEFAULT linux&lt;br /&gt;
 timeout 5&lt;br /&gt;
 prompt 1&lt;br /&gt;
 LABEL linux&lt;br /&gt;
    KERNEL /boot/bzImage&lt;br /&gt;
    APPEND root=/dev/sda1 ro&lt;br /&gt;
&lt;br /&gt;
Se ci interessa la tastiera italiana creiamo dal nostro sistema host il file .bmap da far caricare a busybox &lt;br /&gt;
 # loadkeys -qb it &amp;gt; it.bmap&lt;br /&gt;
 # mv it.bmap /mnt/img/etc&lt;br /&gt;
&lt;br /&gt;
===Tastiera italiana===&lt;br /&gt;
Possiamo creare uno script d'avvio tipo ''/etc/init.d/S40keyboard'' per far in modo che il sistema lo carichi automaticamente (ricordatevi di renderlo eseguibile).&lt;br /&gt;
 #!/bin/sh&lt;br /&gt;
 loadkmap &amp;lt; /etc/it.bmap&lt;br /&gt;
&lt;br /&gt;
===Hotplug===&lt;br /&gt;
Per l'hotplug dei moduli occorre aver installato il programma mdev, anche in questo caso converrà scrivere uno script di avvio tipo il seguente (/etc/init.d/S10mdev) &lt;br /&gt;
 #!/bin/sh&lt;br /&gt;
 case &amp;quot;$1&amp;quot; in&lt;br /&gt;
    start)&lt;br /&gt;
        echo &amp;quot;Starting mdev...&amp;quot;&lt;br /&gt;
        # Imposta mdev come gestore degli eventi hotplug&lt;br /&gt;
        echo /sbin/mdev &amp;gt; /proc/sys/kernel/hotplug&lt;br /&gt;
        # Scansiona /sys per creare i device node per l'hardware già presente&lt;br /&gt;
        /sbin/mdev -s&lt;br /&gt;
        # Questo è il &amp;quot;coldplug&amp;quot;: trova tutti i moduli dell'hardware già presente e li carica&lt;br /&gt;
        echo &amp;quot;Loading kernel modules for existing hardware...&amp;quot;&lt;br /&gt;
        find /sys/ -name modalias | xargs sort -u | xargs modprobe -abq&lt;br /&gt;
        ;;&lt;br /&gt;
    stop)&lt;br /&gt;
        echo &amp;quot;Stopping mdev...&amp;quot;&lt;br /&gt;
        ;;&lt;br /&gt;
    *)&lt;br /&gt;
        echo &amp;quot;Usage: $0 {start|stop}&amp;quot;&lt;br /&gt;
        exit 1&lt;br /&gt;
        ;;&lt;br /&gt;
 esac&lt;br /&gt;
[[Category:howto]]&lt;/div&gt;</summary>
		<author><name>$pooky Hunter</name></author>
	</entry>
	<entry>
		<id>https://wiki.golem.linux.it/index.php?title=Linux_minimale_per_PC_i386/i486&amp;diff=9975</id>
		<title>Linux minimale per PC i386/i486</title>
		<link rel="alternate" type="text/html" href="https://wiki.golem.linux.it/index.php?title=Linux_minimale_per_PC_i386/i486&amp;diff=9975"/>
		<updated>2026-05-16T09:48:15Z</updated>

		<summary type="html">&lt;p&gt;$pooky Hunter: /* Buildroot */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Distribuzioni per i386-i486=&lt;br /&gt;
Per il recupero di macchine particolarmente vecchie esistono delle mini distribuzioni prive di ambiente grafico e talmente compatte da poter essere contenute in un unico floppy.&lt;br /&gt;
&lt;br /&gt;
NB: i386 non più supportato dal kernel 3.8 (2012), i486 dal kernel 7.1&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! Distribuzione&lt;br /&gt;
! Versione Kernel&lt;br /&gt;
! Supporto avvio&lt;br /&gt;
! CPU minima&lt;br /&gt;
! RAM minima&lt;br /&gt;
! Uso ideale&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [http://delicate-linux.net/ DeLi(cate) Linux]&lt;br /&gt;
| 2.4.37.11&lt;br /&gt;
| CDROM&lt;br /&gt;
| i386&lt;br /&gt;
| 8 MB (console)- 64 MB (GUI)&lt;br /&gt;
| Trashware&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.fdlinux.com/download.php FD Linux]&lt;br /&gt;
| 2.4.20&lt;br /&gt;
| 1 floppy&lt;br /&gt;
| 386SX&lt;br /&gt;
| 4 MB&lt;br /&gt;
| DOS/Linux compatto&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.zelow.no/floppyfw floppyfw]&lt;br /&gt;
| 2.4.37.11&lt;br /&gt;
| 1 floppy&lt;br /&gt;
| 386SX&lt;br /&gt;
| 12 MB&lt;br /&gt;
| Router/firewall embedded (iptables)&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [https://web.archive.org/web/20190312063410/http://chris.silmor.de/hal91/ HAL91]&lt;br /&gt;
| 2.0.39&lt;br /&gt;
| 1 floppy&lt;br /&gt;
| i386&lt;br /&gt;
| 8 MB&lt;br /&gt;
| Network solo con scheda NE2000 ISA&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [https://micheleandreoli.org/public/Software/mulinux// muLinux]&lt;br /&gt;
| 2.0.36&lt;br /&gt;
| 1+ floppy modulari&lt;br /&gt;
| 386SX&lt;br /&gt;
| 4 MB&lt;br /&gt;
| Recupero PC vintage&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.tinycorelinux.com Tiny Core Linux]&lt;br /&gt;
| 6.18.2&lt;br /&gt;
| CDROM&lt;br /&gt;
| i486DX&lt;br /&gt;
| 80 MB&lt;br /&gt;
| Minimalismo estremo, appliance&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [https://sourceforge.net/projects/zool5remastered/ Zool]&lt;br /&gt;
| 2.4.37.11&lt;br /&gt;
| 1 floppy&lt;br /&gt;
| i386&lt;br /&gt;
| 12 MB&lt;br /&gt;
| Networking completo (httpd, ftpd, telnetd)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Distribuzioni per i586-i686=&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! Distribuzione Linux&lt;br /&gt;
! Versione Kernel&lt;br /&gt;
! CPU minima&lt;br /&gt;
! RAM minima&lt;br /&gt;
! Uso ideale&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [http://alpinelinux.org Alpine]&lt;br /&gt;
| 6.18.1-lts&lt;br /&gt;
| i686&lt;br /&gt;
| 128 MB (console)&lt;br /&gt;
| Server Minimali, Container&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.damnsmalllinux.org  Damn Small Linux 2024]&lt;br /&gt;
| 5.10.188&lt;br /&gt;
| i686&lt;br /&gt;
| 128 MB (console)&lt;br /&gt;
| Desktop leggero&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.puppylinux.com Puppy]&lt;br /&gt;
| 6.6.137&lt;br /&gt;
| i686&lt;br /&gt;
| 128 MB (console)&lt;br /&gt;
| Desktop leggero (Slackware 15 base)&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.slitaz.org SliTaz]&lt;br /&gt;
| 3.16.55&lt;br /&gt;
| i686&lt;br /&gt;
| 64 MB (console) - 256 MB (GUI)&lt;br /&gt;
| Desktop leggero&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! BSD&lt;br /&gt;
! Versione&lt;br /&gt;
! CPU minima&lt;br /&gt;
! RAM minima&lt;br /&gt;
! Uso ideale&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.openbsd.org OpenBSD]&lt;br /&gt;
| 7.8&lt;br /&gt;
| i586&lt;br /&gt;
| 32 MB (console)&lt;br /&gt;
| Server/router&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.netbsd.org NetBSD]&lt;br /&gt;
| 10&lt;br /&gt;
| i586&lt;br /&gt;
| 64 MB (console)&lt;br /&gt;
| Server/router&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Se si cerca un'esperienza desktop per un Pentium 100-200Mhz con 32-64 MB RAM ci si dovrà rassegnare a recuperare una distribuzione dell'epoca come [https://archive.org/download/mandrake-7.2-i386_202304/mandrake-7.2-i386.iso Mandrake 7.2]&lt;br /&gt;
&lt;br /&gt;
=Buildroot=&lt;br /&gt;
Soluzioni preconfezionate (come quelle sopra elencate) potrebbero non rispondere alle nostre esigenze: kernel datati, driver o applicativi mancanti.&lt;br /&gt;
&lt;br /&gt;
In questi casi la soluzione più rapida è quella di costruirsi un sistema Linux personalizzato. Per farlo il metodo più semplice è utilizzare [https://buildroot.org/download.html Buildroot], un tool che permette la cross-compilazione di un ambiente Linux completo di librerie (glibc, uclibc-ng o musl), applicazioni e l'indispensabile busybox.&lt;br /&gt;
&lt;br /&gt;
Scompattare il tool&lt;br /&gt;
 $ tar -xzvf buildroot-2026.02.tar.gz&lt;br /&gt;
&lt;br /&gt;
Entrare nella directory principale&lt;br /&gt;
 $ cd buildroot-2026.02/&lt;br /&gt;
&lt;br /&gt;
==BusyBox==&lt;br /&gt;
Configurare busybox selezionando i programmi che si ritengono necessari&lt;br /&gt;
 $ make busybox-menuconfig&lt;br /&gt;
&lt;br /&gt;
==Kernel==&lt;br /&gt;
Configurare il kernel per la compilazione&lt;br /&gt;
 $ make linux-menuconfig&lt;br /&gt;
&lt;br /&gt;
Escludere tutto ciò che non è strettamente necessario per risparmiare spazio su disco, quanto segue dovrà essere necessariamente presente per ottenere un sistema minimo avviabile.&lt;br /&gt;
&lt;br /&gt;
* Code maturity level-&amp;gt; Prompt for development&lt;br /&gt;
&lt;br /&gt;
* Processor type and features-&amp;gt; Support for your processor&lt;br /&gt;
&lt;br /&gt;
* General setup-&amp;gt; kernel support for ELF binaries&lt;br /&gt;
&lt;br /&gt;
* Block devices-&amp;gt; RAM disk support&lt;br /&gt;
&lt;br /&gt;
* File systems-&amp;gt; /proc filesystem, tmpfs, ext2&lt;br /&gt;
&lt;br /&gt;
* Character devices-&amp;gt; Virtual terminal&lt;br /&gt;
&lt;br /&gt;
* Character devices-&amp;gt; Support for console on virtual terminal&lt;br /&gt;
&lt;br /&gt;
* Console drivers-&amp;gt; VGA text console&lt;br /&gt;
&lt;br /&gt;
* General setup-&amp;gt; PCI support&lt;br /&gt;
&lt;br /&gt;
* I driver delle schede di rete che interessa supportare (ne, ne2k, rtl8139too, rtl8139c, pcnet32, e1000)&lt;br /&gt;
&lt;br /&gt;
* Iptables se si necessita di un firewall&lt;br /&gt;
&lt;br /&gt;
* Un driver IDE generico (generic ATA) su libata&lt;br /&gt;
&lt;br /&gt;
* Block devices-&amp;gt; Normal PC floppy disk support, se ci interesse il supporto al floppy&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Se si deve limitare al massimo la grandezza dell'immagine del kernel (bzImage) si può scegliere con un algoritmo di compressione come lzma. Questo però aumenterà il consumo di RAM e per macchine molto vecchie come i386 o i486 probabilmente è meglio optare per gz o al massimo bz2.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Configurazione generale==&lt;br /&gt;
 $ make menuconfig&lt;br /&gt;
&lt;br /&gt;
Indicare:&lt;br /&gt;
&lt;br /&gt;
* Architettura di destinazione (i386, i486, i586…)&lt;br /&gt;
&lt;br /&gt;
* Opzioni di compilazione&lt;br /&gt;
&lt;br /&gt;
* Versione del kernel da usare&lt;br /&gt;
&lt;br /&gt;
* Configurazione di partenza del kernel&lt;br /&gt;
 Kernel  ---&amp;gt; Kernel configuration (Use the architecture default configuration)&lt;br /&gt;
&lt;br /&gt;
* Eventuali altri programmi non presenti in busybox (es.: mdev, dropbear, nano, iptables, ncftp, lynx, mutt)&lt;br /&gt;
&lt;br /&gt;
* Si consiglia l'opzione di compilazione gcc '''-Os''' al fine di ridurre al minimo la grandezza dei binari &lt;br /&gt;
&lt;br /&gt;
===Filesystem images===&lt;br /&gt;
Esistono varie tipologie di filesystem da utilizzare per il sistema che verrà compilato: immagini ext2, squashfs, direttamente nel initramfs o semplicemente in un tarball. Nel caso ci interessi costruire un floppy, al fine di sfruttare al meglio lo spazio, consiglio di scegliere ext2 compresso, anche in questo caso con lzma si ottengono filesystem fino al 20% più piccoli rispetto a quelli compressi con bzip2, ma il sistema  necessiterà di maggiore RAM per caricarli (70-80MB). &lt;br /&gt;
&lt;br /&gt;
Terminata la fase di configurazione si può procedere con la compilazione&lt;br /&gt;
 $ make&lt;br /&gt;
&lt;br /&gt;
==output==&lt;br /&gt;
Nella directory buildroot-2026.02/output/images risiede il prodotto finito.&lt;br /&gt;
Se lasciate le impostazioni standard si tratterà di 3 file: bzImage, rootfs.ext2, rootfs.tar.&lt;br /&gt;
&lt;br /&gt;
==Immagine per floppy disk==&lt;br /&gt;
Le dimensioni dei file bzImage e rootfs.i486.ext2.lzma devono essere sufficientemente contenute per entrare su un floppy.&lt;br /&gt;
Nel caso fossero solo di poco più grandi (100-200 KB), si può rimediare con la formattazione non standard del floppy: a 1.72 MB invece che a 1.44MB.&lt;br /&gt;
 $ sudo mknod /dev/fd0u1722 b 2 60&lt;br /&gt;
 $ fdformat /dev/fd0u1722&lt;br /&gt;
 $ mkfs.vfat /dev/fd0u1722&lt;br /&gt;
&lt;br /&gt;
Se non presente creare un mount point per il floppy&lt;br /&gt;
 $ sudo mkdir /mnt/floppy&lt;br /&gt;
&lt;br /&gt;
Montare il floppy&lt;br /&gt;
 $ sudo mount /dev/fd0u1722 /mnt/floppy&lt;br /&gt;
&lt;br /&gt;
Copiarvi i due file&lt;br /&gt;
 $ sudo cp buildroot/output/images/bzImage /mnt/floppy&lt;br /&gt;
 $ sudo cp buildroot/output/images/rootfs.i486.ext2.lzma /mnt/floppy&lt;br /&gt;
&lt;br /&gt;
Adesso occorre installare un boot loader sul floppy. Essendo leggero, semplice da usare e supportando la FAT16 si consiglia di usare syslinux.&lt;br /&gt;
&lt;br /&gt;
Se syslinux non fosse presente sul vostro sistema installatelo con:&lt;br /&gt;
&lt;br /&gt;
 $ sudo apt-get install syslinux&lt;br /&gt;
per sistemi Debian-based&lt;br /&gt;
&lt;br /&gt;
O con&lt;br /&gt;
 # pacman -S syslinux&lt;br /&gt;
su Arch Linux&lt;br /&gt;
&lt;br /&gt;
Con un editor di testo (es. nano) create il file di configurazione per il boot loader: syslinux.cfg&lt;br /&gt;
 $ sudo nano /mnt/floppy/syslinux.cfg&lt;br /&gt;
&lt;br /&gt;
Riportate quanto segue, eventualmente adattandolo alle vostre esigenze:&lt;br /&gt;
&lt;br /&gt;
 default start&lt;br /&gt;
 timeout 5&lt;br /&gt;
 prompt 1&lt;br /&gt;
 label start&lt;br /&gt;
 kernel bzImage&lt;br /&gt;
 append initrd=rootfs.i486.ext2.lzma BOOTDEV=fd0 ramdisk_size=16384 vga=0 root=/dev/ram0&lt;br /&gt;
&lt;br /&gt;
Se è stato usato un altro tipo di filesystem sostituire rootfs.i486.ext2.lzma con rootfs.i486.ext2.bz2, rootfs.i486.ext2.squashfs…&lt;br /&gt;
&lt;br /&gt;
Installare il bootloader sul floppy&lt;br /&gt;
 $ sudo syslinux /dev/fd0&lt;br /&gt;
&lt;br /&gt;
Smontare il floppy&lt;br /&gt;
 $ cd&lt;br /&gt;
 $ sudo umount /mnt/floppy&lt;br /&gt;
&lt;br /&gt;
In caso di necessità di modifiche al ramdisk bisognerà copiarlo sul disco fisso, decomprimerlo, montarlo in loop ed effettuare le modifiche in questo modo:&lt;br /&gt;
 $ sudo mount /mnt/floppy&lt;br /&gt;
 $ sudo cp /mnt/floppy/rootfs.i486.ext2.lzma&lt;br /&gt;
 $ sudo lzma -d rootfs.i486.ext2.lzma&lt;br /&gt;
 $ sudo mkdir /mnt/tmp&lt;br /&gt;
 $ sudo mount -o loop rootfs.i486.ext2 /mnt/tmp&lt;br /&gt;
 $ cd /mnt/tmp&lt;br /&gt;
&lt;br /&gt;
Effettuare le modifiche e poi smontare il tutto&lt;br /&gt;
 $ cd&lt;br /&gt;
 $ sudo umount /mnt/tmp&lt;br /&gt;
&lt;br /&gt;
Ricomprimere il ramdisk e copiarlo sul floppy per sostituire quello vecchio&lt;br /&gt;
 $ sudo lzma -c9 rootfs.i486.ext2 &amp;gt; rootfs.i486.ext2.lzma&lt;br /&gt;
 $ sudo cp rootfs.i486.ext2.lzma /mnt/floppy&lt;br /&gt;
 $ sudo umount /mnt/floppy&lt;br /&gt;
&lt;br /&gt;
Un floppy già pronto con le seguenti caratteristiche ''era'' presente [http://golem.linux.it/files/spookyh/fspooky_v05.tar.xz qui]&lt;br /&gt;
&lt;br /&gt;
* Linux kernel 3.2.9&lt;br /&gt;
&lt;br /&gt;
* Busybox 1.19.4&lt;br /&gt;
&lt;br /&gt;
* Programmi inclusi: ftpd, ncftp, dropbear (ssh client/server), httpd, iptables, dhcp client/server, nc, wget, fdisk.&lt;br /&gt;
&lt;br /&gt;
* Requisiti minimi: i586 (60 MHz), 74 Mb RAM, floppy driver 3,5&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* Hardware supportato: processori i586 compatibili, Bus PCI (niente ISA), Controller Generic ATA disk; schede di rete Novell NE2000 (e cloni), RealTek 8129, Intel PRO/1000 Gigabit Adapter.&lt;br /&gt;
&lt;br /&gt;
==Immagine per hard disk==&lt;br /&gt;
Se un floppy è troppo piccolo per le nostre esigenze si può costruire il sistema dentro ad un file d'immagine da copiare sull'hard disk della nostra macchina direttamente con dd. Creiamo quindi un'immagine da 250 MB, che dovrebbe essere più che sufficiente per un sistema testuale&lt;br /&gt;
 dd if=/dev/zero of=output/images/486linux.img bs=1M count=250&lt;br /&gt;
&lt;br /&gt;
Montiamo l'immagine per poter formattare il filesystem e copiarci i dati&lt;br /&gt;
 # losetup -Pf 486linux.img&lt;br /&gt;
 # mkfs.ext2 /dev/loop0p1&lt;br /&gt;
Probabilmente il miglior filesystem per un sistema così vecchio è ext2, si rinuncia al journaling, ma ci si guadagna parecchio in performance.&lt;br /&gt;
 # mkfs.ext2 -m 0 -O none /dev/loop0p1&lt;br /&gt;
&lt;br /&gt;
Montiamo il tutto&lt;br /&gt;
 # mount /dev/loop0p1 /mnt/img&lt;br /&gt;
&lt;br /&gt;
Copiamoci il filesystem ed il kernel&lt;br /&gt;
 # tar xf buildroot-2026.02/output/images/rootfs.tar -C /mnt/img&lt;br /&gt;
 # mkdir -p /mnt/img/boot&lt;br /&gt;
 # cp buildroot-2026.02/output/images/bzImage /mnt/img/boot/bzImage&lt;br /&gt;
&lt;br /&gt;
Come bootloader, anche in questo caso si è optato per il semplicissimo syslinux.&lt;br /&gt;
 sudo pacman -S syslinux&lt;br /&gt;
 sudo extlinux --install /mnt/img/boot/&lt;br /&gt;
&lt;br /&gt;
Configuriamo il bootloader (/mnt/boot/syslinux.cfg)&lt;br /&gt;
 DEFAULT linux&lt;br /&gt;
 timeout 5&lt;br /&gt;
 prompt 1&lt;br /&gt;
 LABEL linux&lt;br /&gt;
    KERNEL /boot/bzImage&lt;br /&gt;
    APPEND root=/dev/sda1 ro&lt;br /&gt;
&lt;br /&gt;
Se ci interessa la tastiera italiana creiamo dal nostro sistema host il file .bmap da far caricare a busybox &lt;br /&gt;
 # loadkeys -qb it &amp;gt; it.bmap&lt;br /&gt;
 # mv it.bmap /mnt/img/etc&lt;br /&gt;
&lt;br /&gt;
===Tastiera italiana===&lt;br /&gt;
Possiamo creare uno script d'avvio tipo ''/etc/init.d/S40keyboard'' per far in modo che il sistema lo carichi automaticamente (ricordatevi di renderlo eseguibile).&lt;br /&gt;
 #!/bin/sh&lt;br /&gt;
 loadkmap &amp;lt; /etc/it.bmap&lt;br /&gt;
&lt;br /&gt;
===Hotplug===&lt;br /&gt;
Per l'hotplug dei moduli occorre aver installato il programma mdev, anche in questo caso converrà scrivere uno script di avvio tipo il seguente (/etc/init.d/S10mdev) &lt;br /&gt;
 #!/bin/sh&lt;br /&gt;
 case &amp;quot;$1&amp;quot; in&lt;br /&gt;
    start)&lt;br /&gt;
        echo &amp;quot;Starting mdev...&amp;quot;&lt;br /&gt;
        # Imposta mdev come gestore degli eventi hotplug&lt;br /&gt;
        echo /sbin/mdev &amp;gt; /proc/sys/kernel/hotplug&lt;br /&gt;
        # Scansiona /sys per creare i device node per l'hardware già presente&lt;br /&gt;
        /sbin/mdev -s&lt;br /&gt;
        # Questo è il &amp;quot;coldplug&amp;quot;: trova tutti i moduli dell'hardware già presente e li carica&lt;br /&gt;
        echo &amp;quot;Loading kernel modules for existing hardware...&amp;quot;&lt;br /&gt;
        find /sys/ -name modalias | xargs sort -u | xargs modprobe -abq&lt;br /&gt;
        ;;&lt;br /&gt;
    stop)&lt;br /&gt;
        echo &amp;quot;Stopping mdev...&amp;quot;&lt;br /&gt;
        ;;&lt;br /&gt;
    *)&lt;br /&gt;
        echo &amp;quot;Usage: $0 {start|stop}&amp;quot;&lt;br /&gt;
        exit 1&lt;br /&gt;
        ;;&lt;br /&gt;
 esac&lt;br /&gt;
[[Category:howto]]&lt;/div&gt;</summary>
		<author><name>$pooky Hunter</name></author>
	</entry>
	<entry>
		<id>https://wiki.golem.linux.it/index.php?title=Linux_minimale_per_PC_i386/i486&amp;diff=9974</id>
		<title>Linux minimale per PC i386/i486</title>
		<link rel="alternate" type="text/html" href="https://wiki.golem.linux.it/index.php?title=Linux_minimale_per_PC_i386/i486&amp;diff=9974"/>
		<updated>2026-05-16T09:45:47Z</updated>

		<summary type="html">&lt;p&gt;$pooky Hunter: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Distribuzioni per i386-i486=&lt;br /&gt;
Per il recupero di macchine particolarmente vecchie esistono delle mini distribuzioni prive di ambiente grafico e talmente compatte da poter essere contenute in un unico floppy.&lt;br /&gt;
&lt;br /&gt;
NB: i386 non più supportato dal kernel 3.8 (2012), i486 dal kernel 7.1&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! Distribuzione&lt;br /&gt;
! Versione Kernel&lt;br /&gt;
! Supporto avvio&lt;br /&gt;
! CPU minima&lt;br /&gt;
! RAM minima&lt;br /&gt;
! Uso ideale&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [http://delicate-linux.net/ DeLi(cate) Linux]&lt;br /&gt;
| 2.4.37.11&lt;br /&gt;
| CDROM&lt;br /&gt;
| i386&lt;br /&gt;
| 8 MB (console)- 64 MB (GUI)&lt;br /&gt;
| Trashware&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.fdlinux.com/download.php FD Linux]&lt;br /&gt;
| 2.4.20&lt;br /&gt;
| 1 floppy&lt;br /&gt;
| 386SX&lt;br /&gt;
| 4 MB&lt;br /&gt;
| DOS/Linux compatto&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.zelow.no/floppyfw floppyfw]&lt;br /&gt;
| 2.4.37.11&lt;br /&gt;
| 1 floppy&lt;br /&gt;
| 386SX&lt;br /&gt;
| 12 MB&lt;br /&gt;
| Router/firewall embedded (iptables)&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [https://web.archive.org/web/20190312063410/http://chris.silmor.de/hal91/ HAL91]&lt;br /&gt;
| 2.0.39&lt;br /&gt;
| 1 floppy&lt;br /&gt;
| i386&lt;br /&gt;
| 8 MB&lt;br /&gt;
| Network solo con scheda NE2000 ISA&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [https://micheleandreoli.org/public/Software/mulinux// muLinux]&lt;br /&gt;
| 2.0.36&lt;br /&gt;
| 1+ floppy modulari&lt;br /&gt;
| 386SX&lt;br /&gt;
| 4 MB&lt;br /&gt;
| Recupero PC vintage&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.tinycorelinux.com Tiny Core Linux]&lt;br /&gt;
| 6.18.2&lt;br /&gt;
| CDROM&lt;br /&gt;
| i486DX&lt;br /&gt;
| 80 MB&lt;br /&gt;
| Minimalismo estremo, appliance&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [https://sourceforge.net/projects/zool5remastered/ Zool]&lt;br /&gt;
| 2.4.37.11&lt;br /&gt;
| 1 floppy&lt;br /&gt;
| i386&lt;br /&gt;
| 12 MB&lt;br /&gt;
| Networking completo (httpd, ftpd, telnetd)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Distribuzioni per i586-i686=&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! Distribuzione Linux&lt;br /&gt;
! Versione Kernel&lt;br /&gt;
! CPU minima&lt;br /&gt;
! RAM minima&lt;br /&gt;
! Uso ideale&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [http://alpinelinux.org Alpine]&lt;br /&gt;
| 6.18.1-lts&lt;br /&gt;
| i686&lt;br /&gt;
| 128 MB (console)&lt;br /&gt;
| Server Minimali, Container&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.damnsmalllinux.org  Damn Small Linux 2024]&lt;br /&gt;
| 5.10.188&lt;br /&gt;
| i686&lt;br /&gt;
| 128 MB (console)&lt;br /&gt;
| Desktop leggero&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.puppylinux.com Puppy]&lt;br /&gt;
| 6.6.137&lt;br /&gt;
| i686&lt;br /&gt;
| 128 MB (console)&lt;br /&gt;
| Desktop leggero (Slackware 15 base)&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.slitaz.org SliTaz]&lt;br /&gt;
| 3.16.55&lt;br /&gt;
| i686&lt;br /&gt;
| 64 MB (console) - 256 MB (GUI)&lt;br /&gt;
| Desktop leggero&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! BSD&lt;br /&gt;
! Versione&lt;br /&gt;
! CPU minima&lt;br /&gt;
! RAM minima&lt;br /&gt;
! Uso ideale&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.openbsd.org OpenBSD]&lt;br /&gt;
| 7.8&lt;br /&gt;
| i586&lt;br /&gt;
| 32 MB (console)&lt;br /&gt;
| Server/router&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.netbsd.org NetBSD]&lt;br /&gt;
| 10&lt;br /&gt;
| i586&lt;br /&gt;
| 64 MB (console)&lt;br /&gt;
| Server/router&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Se si cerca un'esperienza desktop per un Pentium 100-200Mhz con 32-64 MB RAM ci si dovrà rassegnare a recuperare una distribuzione dell'epoca come [https://archive.org/download/mandrake-7.2-i386_202304/mandrake-7.2-i386.iso Mandrake 7.2]&lt;br /&gt;
&lt;br /&gt;
=Buildroot=&lt;br /&gt;
Soluzioni preconfezionate (come quelle sopra elencate) potrebbero non rispondere alle nostre esigenze: kernel datati (2.0, 2.2), driver mancanti o magari mancano proprio dell'applicazione di cui abbiamo bisogno.&lt;br /&gt;
&lt;br /&gt;
In questi casi la soluzione più rapida è quella di costruirsi il proprio sistema Linux personalizzato. Per farlo il metodo più semplice è utilizzare [https://buildroot.org/download.html Buildroot], un tool che permette la cross-compilazione di un ambiente Linux completo di librerie (glibc, uclibc-ng o musl), numerose applicazioni e l'eseguibile busybox.&lt;br /&gt;
&lt;br /&gt;
Questa procedura è analoga a quella usata per la realizzazione di qualsiasi sistema embedded Linux-based: router, decoder, lettory DVD...&lt;br /&gt;
&lt;br /&gt;
Scompattare il tool&lt;br /&gt;
 $ tar -xzvf buildroot-2026.02.tar.gz&lt;br /&gt;
&lt;br /&gt;
Entrare nella directory principale&lt;br /&gt;
 $ cd buildroot-2026.02/&lt;br /&gt;
&lt;br /&gt;
==BusyBox==&lt;br /&gt;
Configurare busybox selezionando i programmi che si ritengono necessari&lt;br /&gt;
 $ make busybox-menuconfig&lt;br /&gt;
&lt;br /&gt;
==Kernel==&lt;br /&gt;
Configurare il kernel per la compilazione&lt;br /&gt;
 $ make linux-menuconfig&lt;br /&gt;
&lt;br /&gt;
Escludere tutto ciò che non è strettamente necessario per risparmiare spazio su disco, quanto segue dovrà essere necessariamente presente per ottenere un sistema minimo avviabile.&lt;br /&gt;
&lt;br /&gt;
* Code maturity level-&amp;gt; Prompt for development&lt;br /&gt;
&lt;br /&gt;
* Processor type and features-&amp;gt; Support for your processor&lt;br /&gt;
&lt;br /&gt;
* General setup-&amp;gt; kernel support for ELF binaries&lt;br /&gt;
&lt;br /&gt;
* Block devices-&amp;gt; RAM disk support&lt;br /&gt;
&lt;br /&gt;
* File systems-&amp;gt; /proc filesystem, tmpfs, ext2&lt;br /&gt;
&lt;br /&gt;
* Character devices-&amp;gt; Virtual terminal&lt;br /&gt;
&lt;br /&gt;
* Character devices-&amp;gt; Support for console on virtual terminal&lt;br /&gt;
&lt;br /&gt;
* Console drivers-&amp;gt; VGA text console&lt;br /&gt;
&lt;br /&gt;
* General setup-&amp;gt; PCI support&lt;br /&gt;
&lt;br /&gt;
* I driver delle schede di rete che interessa supportare (ne, ne2k, rtl8139too, rtl8139c, pcnet32, e1000)&lt;br /&gt;
&lt;br /&gt;
* Iptables se si necessita di un firewall&lt;br /&gt;
&lt;br /&gt;
* Un driver IDE generico (generic ATA) su libata&lt;br /&gt;
&lt;br /&gt;
* Block devices-&amp;gt; Normal PC floppy disk support, se ci interesse il supporto al floppy&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Se si deve limitare al massimo la grandezza dell'immagine del kernel (bzImage) si può scegliere con un algoritmo di compressione come lzma. Questo però aumenterà il consumo di RAM e per macchine molto vecchie come i386 o i486 probabilmente è meglio optare per gz o al massimo bz2.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Configurazione generale==&lt;br /&gt;
 $ make menuconfig&lt;br /&gt;
&lt;br /&gt;
Indicare:&lt;br /&gt;
&lt;br /&gt;
* Architettura di destinazione (i386, i486, i586…)&lt;br /&gt;
&lt;br /&gt;
* Opzioni di compilazione&lt;br /&gt;
&lt;br /&gt;
* Versione del kernel da usare&lt;br /&gt;
&lt;br /&gt;
* Configurazione di partenza del kernel&lt;br /&gt;
 Kernel  ---&amp;gt; Kernel configuration (Use the architecture default configuration)&lt;br /&gt;
&lt;br /&gt;
* Eventuali altri programmi non presenti in busybox (es.: mdev, dropbear, nano, iptables, ncftp, lynx, mutt)&lt;br /&gt;
&lt;br /&gt;
* Si consiglia l'opzione di compilazione gcc '''-Os''' al fine di ridurre al minimo la grandezza dei binari &lt;br /&gt;
&lt;br /&gt;
===Filesystem images===&lt;br /&gt;
Esistono varie tipologie di filesystem da utilizzare per il sistema che verrà compilato: immagini ext2, squashfs, direttamente nel initramfs o semplicemente in un tarball. Nel caso ci interessi costruire un floppy, al fine di sfruttare al meglio lo spazio, consiglio di scegliere ext2 compresso, anche in questo caso con lzma si ottengono filesystem fino al 20% più piccoli rispetto a quelli compressi con bzip2, ma il sistema  necessiterà di maggiore RAM per caricarli (70-80MB). &lt;br /&gt;
&lt;br /&gt;
Terminata la fase di configurazione si può procedere con la compilazione&lt;br /&gt;
 $ make&lt;br /&gt;
&lt;br /&gt;
==output==&lt;br /&gt;
Nella directory buildroot-2026.02/output/images risiede il prodotto finito.&lt;br /&gt;
Se lasciate le impostazioni standard si tratterà di 3 file: bzImage, rootfs.ext2, rootfs.tar.&lt;br /&gt;
&lt;br /&gt;
==Immagine per floppy disk==&lt;br /&gt;
Le dimensioni dei file bzImage e rootfs.i486.ext2.lzma devono essere sufficientemente contenute per entrare su un floppy.&lt;br /&gt;
Nel caso fossero solo di poco più grandi (100-200 KB), si può rimediare con la formattazione non standard del floppy: a 1.72 MB invece che a 1.44MB.&lt;br /&gt;
 $ sudo mknod /dev/fd0u1722 b 2 60&lt;br /&gt;
 $ fdformat /dev/fd0u1722&lt;br /&gt;
 $ mkfs.vfat /dev/fd0u1722&lt;br /&gt;
&lt;br /&gt;
Se non presente creare un mount point per il floppy&lt;br /&gt;
 $ sudo mkdir /mnt/floppy&lt;br /&gt;
&lt;br /&gt;
Montare il floppy&lt;br /&gt;
 $ sudo mount /dev/fd0u1722 /mnt/floppy&lt;br /&gt;
&lt;br /&gt;
Copiarvi i due file&lt;br /&gt;
 $ sudo cp buildroot/output/images/bzImage /mnt/floppy&lt;br /&gt;
 $ sudo cp buildroot/output/images/rootfs.i486.ext2.lzma /mnt/floppy&lt;br /&gt;
&lt;br /&gt;
Adesso occorre installare un boot loader sul floppy. Essendo leggero, semplice da usare e supportando la FAT16 si consiglia di usare syslinux.&lt;br /&gt;
&lt;br /&gt;
Se syslinux non fosse presente sul vostro sistema installatelo con:&lt;br /&gt;
&lt;br /&gt;
 $ sudo apt-get install syslinux&lt;br /&gt;
per sistemi Debian-based&lt;br /&gt;
&lt;br /&gt;
O con&lt;br /&gt;
 # pacman -S syslinux&lt;br /&gt;
su Arch Linux&lt;br /&gt;
&lt;br /&gt;
Con un editor di testo (es. nano) create il file di configurazione per il boot loader: syslinux.cfg&lt;br /&gt;
 $ sudo nano /mnt/floppy/syslinux.cfg&lt;br /&gt;
&lt;br /&gt;
Riportate quanto segue, eventualmente adattandolo alle vostre esigenze:&lt;br /&gt;
&lt;br /&gt;
 default start&lt;br /&gt;
 timeout 5&lt;br /&gt;
 prompt 1&lt;br /&gt;
 label start&lt;br /&gt;
 kernel bzImage&lt;br /&gt;
 append initrd=rootfs.i486.ext2.lzma BOOTDEV=fd0 ramdisk_size=16384 vga=0 root=/dev/ram0&lt;br /&gt;
&lt;br /&gt;
Se è stato usato un altro tipo di filesystem sostituire rootfs.i486.ext2.lzma con rootfs.i486.ext2.bz2, rootfs.i486.ext2.squashfs…&lt;br /&gt;
&lt;br /&gt;
Installare il bootloader sul floppy&lt;br /&gt;
 $ sudo syslinux /dev/fd0&lt;br /&gt;
&lt;br /&gt;
Smontare il floppy&lt;br /&gt;
 $ cd&lt;br /&gt;
 $ sudo umount /mnt/floppy&lt;br /&gt;
&lt;br /&gt;
In caso di necessità di modifiche al ramdisk bisognerà copiarlo sul disco fisso, decomprimerlo, montarlo in loop ed effettuare le modifiche in questo modo:&lt;br /&gt;
 $ sudo mount /mnt/floppy&lt;br /&gt;
 $ sudo cp /mnt/floppy/rootfs.i486.ext2.lzma&lt;br /&gt;
 $ sudo lzma -d rootfs.i486.ext2.lzma&lt;br /&gt;
 $ sudo mkdir /mnt/tmp&lt;br /&gt;
 $ sudo mount -o loop rootfs.i486.ext2 /mnt/tmp&lt;br /&gt;
 $ cd /mnt/tmp&lt;br /&gt;
&lt;br /&gt;
Effettuare le modifiche e poi smontare il tutto&lt;br /&gt;
 $ cd&lt;br /&gt;
 $ sudo umount /mnt/tmp&lt;br /&gt;
&lt;br /&gt;
Ricomprimere il ramdisk e copiarlo sul floppy per sostituire quello vecchio&lt;br /&gt;
 $ sudo lzma -c9 rootfs.i486.ext2 &amp;gt; rootfs.i486.ext2.lzma&lt;br /&gt;
 $ sudo cp rootfs.i486.ext2.lzma /mnt/floppy&lt;br /&gt;
 $ sudo umount /mnt/floppy&lt;br /&gt;
&lt;br /&gt;
Un floppy già pronto con le seguenti caratteristiche ''era'' presente [http://golem.linux.it/files/spookyh/fspooky_v05.tar.xz qui]&lt;br /&gt;
&lt;br /&gt;
* Linux kernel 3.2.9&lt;br /&gt;
&lt;br /&gt;
* Busybox 1.19.4&lt;br /&gt;
&lt;br /&gt;
* Programmi inclusi: ftpd, ncftp, dropbear (ssh client/server), httpd, iptables, dhcp client/server, nc, wget, fdisk.&lt;br /&gt;
&lt;br /&gt;
* Requisiti minimi: i586 (60 MHz), 74 Mb RAM, floppy driver 3,5&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* Hardware supportato: processori i586 compatibili, Bus PCI (niente ISA), Controller Generic ATA disk; schede di rete Novell NE2000 (e cloni), RealTek 8129, Intel PRO/1000 Gigabit Adapter.&lt;br /&gt;
&lt;br /&gt;
==Immagine per hard disk==&lt;br /&gt;
Se un floppy è troppo piccolo per le nostre esigenze si può costruire il sistema dentro ad un file d'immagine da copiare sull'hard disk della nostra macchina direttamente con dd. Creiamo quindi un'immagine da 250 MB, che dovrebbe essere più che sufficiente per un sistema testuale&lt;br /&gt;
 dd if=/dev/zero of=output/images/486linux.img bs=1M count=250&lt;br /&gt;
&lt;br /&gt;
Montiamo l'immagine per poter formattare il filesystem e copiarci i dati&lt;br /&gt;
 # losetup -Pf 486linux.img&lt;br /&gt;
 # mkfs.ext2 /dev/loop0p1&lt;br /&gt;
Probabilmente il miglior filesystem per un sistema così vecchio è ext2, si rinuncia al journaling, ma ci si guadagna parecchio in performance.&lt;br /&gt;
 # mkfs.ext2 -m 0 -O none /dev/loop0p1&lt;br /&gt;
&lt;br /&gt;
Montiamo il tutto&lt;br /&gt;
 # mount /dev/loop0p1 /mnt/img&lt;br /&gt;
&lt;br /&gt;
Copiamoci il filesystem ed il kernel&lt;br /&gt;
 # tar xf buildroot-2026.02/output/images/rootfs.tar -C /mnt/img&lt;br /&gt;
 # mkdir -p /mnt/img/boot&lt;br /&gt;
 # cp buildroot-2026.02/output/images/bzImage /mnt/img/boot/bzImage&lt;br /&gt;
&lt;br /&gt;
Come bootloader, anche in questo caso si è optato per il semplicissimo syslinux.&lt;br /&gt;
 sudo pacman -S syslinux&lt;br /&gt;
 sudo extlinux --install /mnt/img/boot/&lt;br /&gt;
&lt;br /&gt;
Configuriamo il bootloader (/mnt/boot/syslinux.cfg)&lt;br /&gt;
 DEFAULT linux&lt;br /&gt;
 timeout 5&lt;br /&gt;
 prompt 1&lt;br /&gt;
 LABEL linux&lt;br /&gt;
    KERNEL /boot/bzImage&lt;br /&gt;
    APPEND root=/dev/sda1 ro&lt;br /&gt;
&lt;br /&gt;
Se ci interessa la tastiera italiana creiamo dal nostro sistema host il file .bmap da far caricare a busybox &lt;br /&gt;
 # loadkeys -qb it &amp;gt; it.bmap&lt;br /&gt;
 # mv it.bmap /mnt/img/etc&lt;br /&gt;
&lt;br /&gt;
===Tastiera italiana===&lt;br /&gt;
Possiamo creare uno script d'avvio tipo ''/etc/init.d/S40keyboard'' per far in modo che il sistema lo carichi automaticamente (ricordatevi di renderlo eseguibile).&lt;br /&gt;
 #!/bin/sh&lt;br /&gt;
 loadkmap &amp;lt; /etc/it.bmap&lt;br /&gt;
&lt;br /&gt;
===Hotplug===&lt;br /&gt;
Per l'hotplug dei moduli occorre aver installato il programma mdev, anche in questo caso converrà scrivere uno script di avvio tipo il seguente (/etc/init.d/S10mdev) &lt;br /&gt;
 #!/bin/sh&lt;br /&gt;
 case &amp;quot;$1&amp;quot; in&lt;br /&gt;
    start)&lt;br /&gt;
        echo &amp;quot;Starting mdev...&amp;quot;&lt;br /&gt;
        # Imposta mdev come gestore degli eventi hotplug&lt;br /&gt;
        echo /sbin/mdev &amp;gt; /proc/sys/kernel/hotplug&lt;br /&gt;
        # Scansiona /sys per creare i device node per l'hardware già presente&lt;br /&gt;
        /sbin/mdev -s&lt;br /&gt;
        # Questo è il &amp;quot;coldplug&amp;quot;: trova tutti i moduli dell'hardware già presente e li carica&lt;br /&gt;
        echo &amp;quot;Loading kernel modules for existing hardware...&amp;quot;&lt;br /&gt;
        find /sys/ -name modalias | xargs sort -u | xargs modprobe -abq&lt;br /&gt;
        ;;&lt;br /&gt;
    stop)&lt;br /&gt;
        echo &amp;quot;Stopping mdev...&amp;quot;&lt;br /&gt;
        ;;&lt;br /&gt;
    *)&lt;br /&gt;
        echo &amp;quot;Usage: $0 {start|stop}&amp;quot;&lt;br /&gt;
        exit 1&lt;br /&gt;
        ;;&lt;br /&gt;
 esac&lt;br /&gt;
[[Category:howto]]&lt;/div&gt;</summary>
		<author><name>$pooky Hunter</name></author>
	</entry>
	<entry>
		<id>https://wiki.golem.linux.it/index.php?title=Linux_minimale_per_PC_i386/i486&amp;diff=9973</id>
		<title>Linux minimale per PC i386/i486</title>
		<link rel="alternate" type="text/html" href="https://wiki.golem.linux.it/index.php?title=Linux_minimale_per_PC_i386/i486&amp;diff=9973"/>
		<updated>2026-05-16T09:27:05Z</updated>

		<summary type="html">&lt;p&gt;$pooky Hunter: /* Distribuzioni per i586-i686 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Distribuzioni per i586-i686=&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! Distribuzione Linux&lt;br /&gt;
! Versione Kernel&lt;br /&gt;
! CPU minima&lt;br /&gt;
! RAM minima&lt;br /&gt;
! Uso ideale&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [http://alpinelinux.org Alpine]&lt;br /&gt;
| 6.18.1-lts&lt;br /&gt;
| i686&lt;br /&gt;
| 128 MB&lt;br /&gt;
| Server Minimali, Container&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.damnsmalllinux.org  Damn Small Linux 2024]&lt;br /&gt;
| 5.10.188&lt;br /&gt;
| i686&lt;br /&gt;
| 128 MB&lt;br /&gt;
| Desktop leggero&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.puppylinux.com Puppy]&lt;br /&gt;
| 6.6.137&lt;br /&gt;
| i686&lt;br /&gt;
| 128 MB (text)&lt;br /&gt;
| Desktop leggero (Slackware 15 base)&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.slitaz.org SliTaz]&lt;br /&gt;
| 3.16.55&lt;br /&gt;
| i686&lt;br /&gt;
| 64 MB (text) - 256 MB (X11)&lt;br /&gt;
| Desktop leggero&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! BSD&lt;br /&gt;
! Versione&lt;br /&gt;
! CPU minima&lt;br /&gt;
! RAM minima&lt;br /&gt;
! Uso ideale&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.openbsd.org OpenBSD]&lt;br /&gt;
| 7.8&lt;br /&gt;
| i586&lt;br /&gt;
| 32 MB&lt;br /&gt;
| Server/router&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.netbsd.org NetBSD]&lt;br /&gt;
| 10&lt;br /&gt;
| i586&lt;br /&gt;
| 64 MB&lt;br /&gt;
| Server/router&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Se si cerca un'esperienza desktop per un Pentium 100-200Mhz con 32-64 MB RAM ci si dovrà rassegnare a recuperare una distribuzione dell'epoca come [https://archive.org/download/mandrake-7.2-i386_202304/mandrake-7.2-i386.iso Mandrake 7.2]&lt;br /&gt;
&lt;br /&gt;
=Distribuzioni per i386-i486=&lt;br /&gt;
Se si tenta di recuperare una macchina particolarmente vecchia possono venire in nostro soccorso delle mini distribuzioni prive di ambiente grafico e talmente compatte da poter essere contenute in un unico floppy.&lt;br /&gt;
&lt;br /&gt;
NB: è stato rimosso il supporto ai 386 nel 2012 (kernel 3.8) ed ai 486 nel 2026 (kernel 7.1)&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! Distribuzione&lt;br /&gt;
! Versione Kernel&lt;br /&gt;
! Supporto avvio&lt;br /&gt;
! CPU minima&lt;br /&gt;
! RAM minima&lt;br /&gt;
! Uso ideale&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [http://delicate-linux.net/ DeLi(cate) Linux]&lt;br /&gt;
| 2.4.37.11&lt;br /&gt;
| CDROM&lt;br /&gt;
| i386&lt;br /&gt;
| 8 MB&lt;br /&gt;
| Retrocomputing puro, PC anni '90&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.fdlinux.com/download.php FD Linux]&lt;br /&gt;
| 2.4.20&lt;br /&gt;
| 1 floppy&lt;br /&gt;
| 386SX&lt;br /&gt;
| 4 MB&lt;br /&gt;
| DOS/Linux compatto&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.zelow.no/floppyfw floppyfw]&lt;br /&gt;
| 2.4.37.11&lt;br /&gt;
| 1 floppy&lt;br /&gt;
| 386SX&lt;br /&gt;
| 12 MB&lt;br /&gt;
| Router/firewall embedded (iptables)&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [https://web.archive.org/web/20190312063410/http://chris.silmor.de/hal91/ HAL91]&lt;br /&gt;
| 2.0.39&lt;br /&gt;
| 1 floppy&lt;br /&gt;
| i386&lt;br /&gt;
| 8 MB&lt;br /&gt;
| Network solo con scheda NE2000 ISA&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [https://micheleandreoli.org/public/Software/mulinux// muLinux]&lt;br /&gt;
| 2.0.36&lt;br /&gt;
| 1+ floppy modulari&lt;br /&gt;
| 386SX&lt;br /&gt;
| 4 MB&lt;br /&gt;
| Recupero PC vintage&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.tinycorelinux.com Tiny Core Linux]&lt;br /&gt;
| 6.18.2&lt;br /&gt;
| CDROM&lt;br /&gt;
| i486DX&lt;br /&gt;
| 80 MB&lt;br /&gt;
| Minimalismo estremo, appliance&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [https://sourceforge.net/projects/zool5remastered/ Zool]&lt;br /&gt;
| 2.4.37.11&lt;br /&gt;
| 1 floppy&lt;br /&gt;
| i386&lt;br /&gt;
| 12 MB&lt;br /&gt;
| Networking completo (httpd, ftpd, telnetd)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Buildroot=&lt;br /&gt;
Soluzioni preconfezionate (come quelle sopra elencate) potrebbero non rispondere alle nostre esigenze: kernel datati (2.0, 2.2), driver mancanti o magari mancano proprio dell'applicazione di cui abbiamo bisogno.&lt;br /&gt;
&lt;br /&gt;
In questi casi la soluzione più rapida è quella di costruirsi il proprio sistema Linux personalizzato. Per farlo il metodo più semplice è utilizzare [https://buildroot.org/download.html Buildroot], un tool che permette la cross-compilazione di un ambiente Linux completo di librerie (glibc, uclibc-ng o musl), numerose applicazioni e l'eseguibile busybox.&lt;br /&gt;
&lt;br /&gt;
Questa procedura è analoga a quella usata per la realizzazione di qualsiasi sistema embedded Linux-based: router, decoder, lettory DVD...&lt;br /&gt;
&lt;br /&gt;
Scompattare il tool&lt;br /&gt;
 $ tar -xzvf buildroot-2026.02.tar.gz&lt;br /&gt;
&lt;br /&gt;
Entrare nella directory principale&lt;br /&gt;
 $ cd buildroot-2026.02/&lt;br /&gt;
&lt;br /&gt;
==BusyBox==&lt;br /&gt;
Configurare busybox selezionando i programmi che si ritengono necessari&lt;br /&gt;
 $ make busybox-menuconfig&lt;br /&gt;
&lt;br /&gt;
==Kernel==&lt;br /&gt;
Configurare il kernel per la compilazione&lt;br /&gt;
 $ make linux-menuconfig&lt;br /&gt;
&lt;br /&gt;
Escludere tutto ciò che non è strettamente necessario per risparmiare spazio su disco, quanto segue dovrà essere necessariamente presente per ottenere un sistema minimo avviabile.&lt;br /&gt;
&lt;br /&gt;
* Code maturity level-&amp;gt; Prompt for development&lt;br /&gt;
&lt;br /&gt;
* Processor type and features-&amp;gt; Support for your processor&lt;br /&gt;
&lt;br /&gt;
* General setup-&amp;gt; kernel support for ELF binaries&lt;br /&gt;
&lt;br /&gt;
* Block devices-&amp;gt; RAM disk support&lt;br /&gt;
&lt;br /&gt;
* File systems-&amp;gt; /proc filesystem, tmpfs, ext2&lt;br /&gt;
&lt;br /&gt;
* Character devices-&amp;gt; Virtual terminal&lt;br /&gt;
&lt;br /&gt;
* Character devices-&amp;gt; Support for console on virtual terminal&lt;br /&gt;
&lt;br /&gt;
* Console drivers-&amp;gt; VGA text console&lt;br /&gt;
&lt;br /&gt;
* General setup-&amp;gt; PCI support&lt;br /&gt;
&lt;br /&gt;
* I driver delle schede di rete che interessa supportare (ne, ne2k, rtl8139too, rtl8139c, pcnet32, e1000)&lt;br /&gt;
&lt;br /&gt;
* Iptables se si necessita di un firewall&lt;br /&gt;
&lt;br /&gt;
* Un driver IDE generico (generic ATA) su libata&lt;br /&gt;
&lt;br /&gt;
* Block devices-&amp;gt; Normal PC floppy disk support, se ci interesse il supporto al floppy&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Se si deve limitare al massimo la grandezza dell'immagine del kernel (bzImage) si può scegliere con un algoritmo di compressione come lzma. Questo però aumenterà il consumo di RAM e per macchine molto vecchie come i386 o i486 probabilmente è meglio optare per gz o al massimo bz2.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Configurazione generale==&lt;br /&gt;
 $ make menuconfig&lt;br /&gt;
&lt;br /&gt;
Indicare:&lt;br /&gt;
&lt;br /&gt;
* Architettura di destinazione (i386, i486, i586…)&lt;br /&gt;
&lt;br /&gt;
* Opzioni di compilazione&lt;br /&gt;
&lt;br /&gt;
* Versione del kernel da usare&lt;br /&gt;
&lt;br /&gt;
* Configurazione di partenza del kernel&lt;br /&gt;
 Kernel  ---&amp;gt; Kernel configuration (Use the architecture default configuration)&lt;br /&gt;
&lt;br /&gt;
* Eventuali altri programmi non presenti in busybox (es.: mdev, dropbear, nano, iptables, ncftp, lynx, mutt)&lt;br /&gt;
&lt;br /&gt;
* Si consiglia l'opzione di compilazione gcc '''-Os''' al fine di ridurre al minimo la grandezza dei binari &lt;br /&gt;
&lt;br /&gt;
===Filesystem images===&lt;br /&gt;
Esistono varie tipologie di filesystem da utilizzare per il sistema che verrà compilato: immagini ext2, squashfs, direttamente nel initramfs o semplicemente in un tarball. Nel caso ci interessi costruire un floppy, al fine di sfruttare al meglio lo spazio, consiglio di scegliere ext2 compresso, anche in questo caso con lzma si ottengono filesystem fino al 20% più piccoli rispetto a quelli compressi con bzip2, ma il sistema  necessiterà di maggiore RAM per caricarli (70-80MB). &lt;br /&gt;
&lt;br /&gt;
Terminata la fase di configurazione si può procedere con la compilazione&lt;br /&gt;
 $ make&lt;br /&gt;
&lt;br /&gt;
==output==&lt;br /&gt;
Nella directory buildroot-2026.02/output/images risiede il prodotto finito.&lt;br /&gt;
Se lasciate le impostazioni standard si tratterà di 3 file: bzImage, rootfs.ext2, rootfs.tar.&lt;br /&gt;
&lt;br /&gt;
==Immagine per floppy disk==&lt;br /&gt;
Le dimensioni dei file bzImage e rootfs.i486.ext2.lzma devono essere sufficientemente contenute per entrare su un floppy.&lt;br /&gt;
Nel caso fossero solo di poco più grandi (100-200 KB), si può rimediare con la formattazione non standard del floppy: a 1.72 MB invece che a 1.44MB.&lt;br /&gt;
 $ sudo mknod /dev/fd0u1722 b 2 60&lt;br /&gt;
 $ fdformat /dev/fd0u1722&lt;br /&gt;
 $ mkfs.vfat /dev/fd0u1722&lt;br /&gt;
&lt;br /&gt;
Se non presente creare un mount point per il floppy&lt;br /&gt;
 $ sudo mkdir /mnt/floppy&lt;br /&gt;
&lt;br /&gt;
Montare il floppy&lt;br /&gt;
 $ sudo mount /dev/fd0u1722 /mnt/floppy&lt;br /&gt;
&lt;br /&gt;
Copiarvi i due file&lt;br /&gt;
 $ sudo cp buildroot/output/images/bzImage /mnt/floppy&lt;br /&gt;
 $ sudo cp buildroot/output/images/rootfs.i486.ext2.lzma /mnt/floppy&lt;br /&gt;
&lt;br /&gt;
Adesso occorre installare un boot loader sul floppy. Essendo leggero, semplice da usare e supportando la FAT16 si consiglia di usare syslinux.&lt;br /&gt;
&lt;br /&gt;
Se syslinux non fosse presente sul vostro sistema installatelo con:&lt;br /&gt;
&lt;br /&gt;
 $ sudo apt-get install syslinux&lt;br /&gt;
per sistemi Debian-based&lt;br /&gt;
&lt;br /&gt;
O con&lt;br /&gt;
 # pacman -S syslinux&lt;br /&gt;
su Arch Linux&lt;br /&gt;
&lt;br /&gt;
Con un editor di testo (es. nano) create il file di configurazione per il boot loader: syslinux.cfg&lt;br /&gt;
 $ sudo nano /mnt/floppy/syslinux.cfg&lt;br /&gt;
&lt;br /&gt;
Riportate quanto segue, eventualmente adattandolo alle vostre esigenze:&lt;br /&gt;
&lt;br /&gt;
 default start&lt;br /&gt;
 timeout 5&lt;br /&gt;
 prompt 1&lt;br /&gt;
 label start&lt;br /&gt;
 kernel bzImage&lt;br /&gt;
 append initrd=rootfs.i486.ext2.lzma BOOTDEV=fd0 ramdisk_size=16384 vga=0 root=/dev/ram0&lt;br /&gt;
&lt;br /&gt;
Se è stato usato un altro tipo di filesystem sostituire rootfs.i486.ext2.lzma con rootfs.i486.ext2.bz2, rootfs.i486.ext2.squashfs…&lt;br /&gt;
&lt;br /&gt;
Installare il bootloader sul floppy&lt;br /&gt;
 $ sudo syslinux /dev/fd0&lt;br /&gt;
&lt;br /&gt;
Smontare il floppy&lt;br /&gt;
 $ cd&lt;br /&gt;
 $ sudo umount /mnt/floppy&lt;br /&gt;
&lt;br /&gt;
In caso di necessità di modifiche al ramdisk bisognerà copiarlo sul disco fisso, decomprimerlo, montarlo in loop ed effettuare le modifiche in questo modo:&lt;br /&gt;
 $ sudo mount /mnt/floppy&lt;br /&gt;
 $ sudo cp /mnt/floppy/rootfs.i486.ext2.lzma&lt;br /&gt;
 $ sudo lzma -d rootfs.i486.ext2.lzma&lt;br /&gt;
 $ sudo mkdir /mnt/tmp&lt;br /&gt;
 $ sudo mount -o loop rootfs.i486.ext2 /mnt/tmp&lt;br /&gt;
 $ cd /mnt/tmp&lt;br /&gt;
&lt;br /&gt;
Effettuare le modifiche e poi smontare il tutto&lt;br /&gt;
 $ cd&lt;br /&gt;
 $ sudo umount /mnt/tmp&lt;br /&gt;
&lt;br /&gt;
Ricomprimere il ramdisk e copiarlo sul floppy per sostituire quello vecchio&lt;br /&gt;
 $ sudo lzma -c9 rootfs.i486.ext2 &amp;gt; rootfs.i486.ext2.lzma&lt;br /&gt;
 $ sudo cp rootfs.i486.ext2.lzma /mnt/floppy&lt;br /&gt;
 $ sudo umount /mnt/floppy&lt;br /&gt;
&lt;br /&gt;
Un floppy già pronto con le seguenti caratteristiche ''era'' presente [http://golem.linux.it/files/spookyh/fspooky_v05.tar.xz qui]&lt;br /&gt;
&lt;br /&gt;
* Linux kernel 3.2.9&lt;br /&gt;
&lt;br /&gt;
* Busybox 1.19.4&lt;br /&gt;
&lt;br /&gt;
* Programmi inclusi: ftpd, ncftp, dropbear (ssh client/server), httpd, iptables, dhcp client/server, nc, wget, fdisk.&lt;br /&gt;
&lt;br /&gt;
* Requisiti minimi: i586 (60 MHz), 74 Mb RAM, floppy driver 3,5&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* Hardware supportato: processori i586 compatibili, Bus PCI (niente ISA), Controller Generic ATA disk; schede di rete Novell NE2000 (e cloni), RealTek 8129, Intel PRO/1000 Gigabit Adapter.&lt;br /&gt;
&lt;br /&gt;
==Immagine per hard disk==&lt;br /&gt;
Se un floppy è troppo piccolo per le nostre esigenze si può costruire il sistema dentro ad un file d'immagine da copiare sull'hard disk della nostra macchina direttamente con dd. Creiamo quindi un'immagine da 250 MB, che dovrebbe essere più che sufficiente per un sistema testuale&lt;br /&gt;
 dd if=/dev/zero of=output/images/486linux.img bs=1M count=250&lt;br /&gt;
&lt;br /&gt;
Montiamo l'immagine per poter formattare il filesystem e copiarci i dati&lt;br /&gt;
 # losetup -Pf 486linux.img&lt;br /&gt;
 # mkfs.ext2 /dev/loop0p1&lt;br /&gt;
Probabilmente il miglior filesystem per un sistema così vecchio è ext2, si rinuncia al journaling, ma ci si guadagna parecchio in performance.&lt;br /&gt;
 # mkfs.ext2 -m 0 -O none /dev/loop0p1&lt;br /&gt;
&lt;br /&gt;
Montiamo il tutto&lt;br /&gt;
 # mount /dev/loop0p1 /mnt/img&lt;br /&gt;
&lt;br /&gt;
Copiamoci il filesystem ed il kernel&lt;br /&gt;
 # tar xf buildroot-2026.02/output/images/rootfs.tar -C /mnt/img&lt;br /&gt;
 # mkdir -p /mnt/img/boot&lt;br /&gt;
 # cp buildroot-2026.02/output/images/bzImage /mnt/img/boot/bzImage&lt;br /&gt;
&lt;br /&gt;
Come bootloader, anche in questo caso si è optato per il semplicissimo syslinux.&lt;br /&gt;
 sudo pacman -S syslinux&lt;br /&gt;
 sudo extlinux --install /mnt/img/boot/&lt;br /&gt;
&lt;br /&gt;
Configuriamo il bootloader (/mnt/boot/syslinux.cfg)&lt;br /&gt;
 DEFAULT linux&lt;br /&gt;
 timeout 5&lt;br /&gt;
 prompt 1&lt;br /&gt;
 LABEL linux&lt;br /&gt;
    KERNEL /boot/bzImage&lt;br /&gt;
    APPEND root=/dev/sda1 ro&lt;br /&gt;
&lt;br /&gt;
Se ci interessa la tastiera italiana creiamo dal nostro sistema host il file .bmap da far caricare a busybox &lt;br /&gt;
 # loadkeys -qb it &amp;gt; it.bmap&lt;br /&gt;
 # mv it.bmap /mnt/img/etc&lt;br /&gt;
&lt;br /&gt;
===Tastiera italiana===&lt;br /&gt;
Possiamo creare uno script d'avvio tipo ''/etc/init.d/S40keyboard'' per far in modo che il sistema lo carichi automaticamente (ricordatevi di renderlo eseguibile).&lt;br /&gt;
 #!/bin/sh&lt;br /&gt;
 loadkmap &amp;lt; /etc/it.bmap&lt;br /&gt;
&lt;br /&gt;
===Hotplug===&lt;br /&gt;
Per l'hotplug dei moduli occorre aver installato il programma mdev, anche in questo caso converrà scrivere uno script di avvio tipo il seguente (/etc/init.d/S10mdev) &lt;br /&gt;
 #!/bin/sh&lt;br /&gt;
 case &amp;quot;$1&amp;quot; in&lt;br /&gt;
    start)&lt;br /&gt;
        echo &amp;quot;Starting mdev...&amp;quot;&lt;br /&gt;
        # Imposta mdev come gestore degli eventi hotplug&lt;br /&gt;
        echo /sbin/mdev &amp;gt; /proc/sys/kernel/hotplug&lt;br /&gt;
        # Scansiona /sys per creare i device node per l'hardware già presente&lt;br /&gt;
        /sbin/mdev -s&lt;br /&gt;
        # Questo è il &amp;quot;coldplug&amp;quot;: trova tutti i moduli dell'hardware già presente e li carica&lt;br /&gt;
        echo &amp;quot;Loading kernel modules for existing hardware...&amp;quot;&lt;br /&gt;
        find /sys/ -name modalias | xargs sort -u | xargs modprobe -abq&lt;br /&gt;
        ;;&lt;br /&gt;
    stop)&lt;br /&gt;
        echo &amp;quot;Stopping mdev...&amp;quot;&lt;br /&gt;
        ;;&lt;br /&gt;
    *)&lt;br /&gt;
        echo &amp;quot;Usage: $0 {start|stop}&amp;quot;&lt;br /&gt;
        exit 1&lt;br /&gt;
        ;;&lt;br /&gt;
 esac&lt;br /&gt;
[[Category:howto]]&lt;/div&gt;</summary>
		<author><name>$pooky Hunter</name></author>
	</entry>
	<entry>
		<id>https://wiki.golem.linux.it/index.php?title=Linux_minimale_per_PC_i386/i486&amp;diff=9972</id>
		<title>Linux minimale per PC i386/i486</title>
		<link rel="alternate" type="text/html" href="https://wiki.golem.linux.it/index.php?title=Linux_minimale_per_PC_i386/i486&amp;diff=9972"/>
		<updated>2026-05-16T06:09:50Z</updated>

		<summary type="html">&lt;p&gt;$pooky Hunter: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Distribuzioni per i586-i686=&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! Distro&lt;br /&gt;
! Versione Kernel&lt;br /&gt;
! CPU minima&lt;br /&gt;
! RAM minima&lt;br /&gt;
! Uso ideale&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [http://alpinelinux.org Alpine]&lt;br /&gt;
| 6.18.1-lts&lt;br /&gt;
| i686&lt;br /&gt;
| 128 MB&lt;br /&gt;
| Server Minimali, Container&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.damnsmalllinux.org  Damn Small Linux 2024]&lt;br /&gt;
| 5.10.188&lt;br /&gt;
| i686&lt;br /&gt;
| 128 MB&lt;br /&gt;
| Pentium II&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.slitaz.org SliTaz]&lt;br /&gt;
| 3.16.55&lt;br /&gt;
| i686&lt;br /&gt;
| 64 MB&lt;br /&gt;
| Pentium II&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.puppylinux.com Puppy Linux]&lt;br /&gt;
|&lt;br /&gt;
| i686&lt;br /&gt;
| 128-256 MB&lt;br /&gt;
| Desktop leggero usabile&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.openbsd.org OpenBSD]&lt;br /&gt;
| 7.8&lt;br /&gt;
| i586&lt;br /&gt;
| 32 MB&lt;br /&gt;
| Trashware su Pentium I&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.netbsd.org NetBSD]&lt;br /&gt;
| 10&lt;br /&gt;
| i586&lt;br /&gt;
| 64 MB&lt;br /&gt;
| Trashware su Pentium I&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Distribuzioni per i386-i486=&lt;br /&gt;
Se si tenta di recuperare una macchina particolarmente vecchia possono venire in nostro soccorso delle mini distribuzioni prive di ambiente grafico e talmente compatte da poter essere contenute in un unico floppy.&lt;br /&gt;
&lt;br /&gt;
NB: è stato rimosso il supporto ai 386 nel 2012 (kernel 3.8) ed ai 486 nel 2026 (kernel 7.1)&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! Distribuzione&lt;br /&gt;
! Versione Kernel&lt;br /&gt;
! Supporto avvio&lt;br /&gt;
! CPU minima&lt;br /&gt;
! RAM minima&lt;br /&gt;
! Uso ideale&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [http://delicate-linux.net/ DeLi(cate) Linux]&lt;br /&gt;
| 2.4.37.11&lt;br /&gt;
| CDROM&lt;br /&gt;
| i386&lt;br /&gt;
| 8 MB&lt;br /&gt;
| Retrocomputing puro, PC anni '90&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.fdlinux.com/download.php FD Linux]&lt;br /&gt;
| 2.4.20&lt;br /&gt;
| 1 floppy&lt;br /&gt;
| 386SX&lt;br /&gt;
| 4 MB&lt;br /&gt;
| DOS/Linux compatto&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.zelow.no/floppyfw floppyfw]&lt;br /&gt;
| 2.4.37.11&lt;br /&gt;
| 1 floppy&lt;br /&gt;
| 386SX&lt;br /&gt;
| 12 MB&lt;br /&gt;
| Router/firewall embedded (iptables)&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [https://web.archive.org/web/20190312063410/http://chris.silmor.de/hal91/ HAL91]&lt;br /&gt;
| 2.0.39&lt;br /&gt;
| 1 floppy&lt;br /&gt;
| i386&lt;br /&gt;
| 8 MB&lt;br /&gt;
| Network solo con scheda NE2000 ISA&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [https://micheleandreoli.org/public/Software/mulinux// muLinux]&lt;br /&gt;
| 2.0.36&lt;br /&gt;
| 1+ floppy modulari&lt;br /&gt;
| 386SX&lt;br /&gt;
| 4 MB&lt;br /&gt;
| Recupero PC vintage&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.tinycorelinux.com Tiny Core Linux]&lt;br /&gt;
| 6.18.2&lt;br /&gt;
| CDROM&lt;br /&gt;
| i486DX&lt;br /&gt;
| 80 MB&lt;br /&gt;
| Minimalismo estremo, appliance&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [https://sourceforge.net/projects/zool5remastered/ Zool]&lt;br /&gt;
| 2.4.37.11&lt;br /&gt;
| 1 floppy&lt;br /&gt;
| i386&lt;br /&gt;
| 12 MB&lt;br /&gt;
| Networking completo (httpd, ftpd, telnetd)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Buildroot=&lt;br /&gt;
Soluzioni preconfezionate (come quelle sopra elencate) potrebbero non rispondere alle nostre esigenze: kernel datati (2.0, 2.2), driver mancanti o magari mancano proprio dell'applicazione di cui abbiamo bisogno.&lt;br /&gt;
&lt;br /&gt;
In questi casi la soluzione più rapida è quella di costruirsi il proprio sistema Linux personalizzato. Per farlo il metodo più semplice è utilizzare [https://buildroot.org/download.html Buildroot], un tool che permette la cross-compilazione di un ambiente Linux completo di librerie (glibc, uclibc-ng o musl), numerose applicazioni e l'eseguibile busybox.&lt;br /&gt;
&lt;br /&gt;
Questa procedura è analoga a quella usata per la realizzazione di qualsiasi sistema embedded Linux-based: router, decoder, lettory DVD...&lt;br /&gt;
&lt;br /&gt;
Scompattare il tool&lt;br /&gt;
 $ tar -xzvf buildroot-2026.02.tar.gz&lt;br /&gt;
&lt;br /&gt;
Entrare nella directory principale&lt;br /&gt;
 $ cd buildroot-2026.02/&lt;br /&gt;
&lt;br /&gt;
==BusyBox==&lt;br /&gt;
Configurare busybox selezionando i programmi che si ritengono necessari&lt;br /&gt;
 $ make busybox-menuconfig&lt;br /&gt;
&lt;br /&gt;
==Kernel==&lt;br /&gt;
Configurare il kernel per la compilazione&lt;br /&gt;
 $ make linux-menuconfig&lt;br /&gt;
&lt;br /&gt;
Escludere tutto ciò che non è strettamente necessario per risparmiare spazio su disco, quanto segue dovrà essere necessariamente presente per ottenere un sistema minimo avviabile.&lt;br /&gt;
&lt;br /&gt;
* Code maturity level-&amp;gt; Prompt for development&lt;br /&gt;
&lt;br /&gt;
* Processor type and features-&amp;gt; Support for your processor&lt;br /&gt;
&lt;br /&gt;
* General setup-&amp;gt; kernel support for ELF binaries&lt;br /&gt;
&lt;br /&gt;
* Block devices-&amp;gt; RAM disk support&lt;br /&gt;
&lt;br /&gt;
* File systems-&amp;gt; /proc filesystem, tmpfs, ext2&lt;br /&gt;
&lt;br /&gt;
* Character devices-&amp;gt; Virtual terminal&lt;br /&gt;
&lt;br /&gt;
* Character devices-&amp;gt; Support for console on virtual terminal&lt;br /&gt;
&lt;br /&gt;
* Console drivers-&amp;gt; VGA text console&lt;br /&gt;
&lt;br /&gt;
* General setup-&amp;gt; PCI support&lt;br /&gt;
&lt;br /&gt;
* I driver delle schede di rete che interessa supportare (ne, ne2k, rtl8139too, rtl8139c, pcnet32, e1000)&lt;br /&gt;
&lt;br /&gt;
* Iptables se si necessita di un firewall&lt;br /&gt;
&lt;br /&gt;
* Un driver IDE generico (generic ATA) su libata&lt;br /&gt;
&lt;br /&gt;
* Block devices-&amp;gt; Normal PC floppy disk support, se ci interesse il supporto al floppy&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Se si deve limitare al massimo la grandezza dell'immagine del kernel (bzImage) si può scegliere con un algoritmo di compressione come lzma. Questo però aumenterà il consumo di RAM e per macchine molto vecchie come i386 o i486 probabilmente è meglio optare per gz o al massimo bz2.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Configurazione generale==&lt;br /&gt;
 $ make menuconfig&lt;br /&gt;
&lt;br /&gt;
Indicare:&lt;br /&gt;
&lt;br /&gt;
* Architettura di destinazione (i386, i486, i586…)&lt;br /&gt;
&lt;br /&gt;
* Opzioni di compilazione&lt;br /&gt;
&lt;br /&gt;
* Versione del kernel da usare&lt;br /&gt;
&lt;br /&gt;
* Configurazione di partenza del kernel&lt;br /&gt;
 Kernel  ---&amp;gt; Kernel configuration (Use the architecture default configuration)&lt;br /&gt;
&lt;br /&gt;
* Eventuali altri programmi non presenti in busybox (es.: mdev, dropbear, nano, iptables, ncftp, lynx, mutt)&lt;br /&gt;
&lt;br /&gt;
* Si consiglia l'opzione di compilazione gcc '''-Os''' al fine di ridurre al minimo la grandezza dei binari &lt;br /&gt;
&lt;br /&gt;
===Filesystem images===&lt;br /&gt;
Esistono varie tipologie di filesystem da utilizzare per il sistema che verrà compilato: immagini ext2, squashfs, direttamente nel initramfs o semplicemente in un tarball. Nel caso ci interessi costruire un floppy, al fine di sfruttare al meglio lo spazio, consiglio di scegliere ext2 compresso, anche in questo caso con lzma si ottengono filesystem fino al 20% più piccoli rispetto a quelli compressi con bzip2, ma il sistema  necessiterà di maggiore RAM per caricarli (70-80MB). &lt;br /&gt;
&lt;br /&gt;
Terminata la fase di configurazione si può procedere con la compilazione&lt;br /&gt;
 $ make&lt;br /&gt;
&lt;br /&gt;
==output==&lt;br /&gt;
Nella directory buildroot-2026.02/output/images risiede il prodotto finito.&lt;br /&gt;
Se lasciate le impostazioni standard si tratterà di 3 file: bzImage, rootfs.ext2, rootfs.tar.&lt;br /&gt;
&lt;br /&gt;
==Immagine per floppy disk==&lt;br /&gt;
Le dimensioni dei file bzImage e rootfs.i486.ext2.lzma devono essere sufficientemente contenute per entrare su un floppy.&lt;br /&gt;
Nel caso fossero solo di poco più grandi (100-200 KB), si può rimediare con la formattazione non standard del floppy: a 1.72 MB invece che a 1.44MB.&lt;br /&gt;
 $ sudo mknod /dev/fd0u1722 b 2 60&lt;br /&gt;
 $ fdformat /dev/fd0u1722&lt;br /&gt;
 $ mkfs.vfat /dev/fd0u1722&lt;br /&gt;
&lt;br /&gt;
Se non presente creare un mount point per il floppy&lt;br /&gt;
 $ sudo mkdir /mnt/floppy&lt;br /&gt;
&lt;br /&gt;
Montare il floppy&lt;br /&gt;
 $ sudo mount /dev/fd0u1722 /mnt/floppy&lt;br /&gt;
&lt;br /&gt;
Copiarvi i due file&lt;br /&gt;
 $ sudo cp buildroot/output/images/bzImage /mnt/floppy&lt;br /&gt;
 $ sudo cp buildroot/output/images/rootfs.i486.ext2.lzma /mnt/floppy&lt;br /&gt;
&lt;br /&gt;
Adesso occorre installare un boot loader sul floppy. Essendo leggero, semplice da usare e supportando la FAT16 si consiglia di usare syslinux.&lt;br /&gt;
&lt;br /&gt;
Se syslinux non fosse presente sul vostro sistema installatelo con:&lt;br /&gt;
&lt;br /&gt;
 $ sudo apt-get install syslinux&lt;br /&gt;
per sistemi Debian-based&lt;br /&gt;
&lt;br /&gt;
O con&lt;br /&gt;
 # pacman -S syslinux&lt;br /&gt;
su Arch Linux&lt;br /&gt;
&lt;br /&gt;
Con un editor di testo (es. nano) create il file di configurazione per il boot loader: syslinux.cfg&lt;br /&gt;
 $ sudo nano /mnt/floppy/syslinux.cfg&lt;br /&gt;
&lt;br /&gt;
Riportate quanto segue, eventualmente adattandolo alle vostre esigenze:&lt;br /&gt;
&lt;br /&gt;
 default start&lt;br /&gt;
 timeout 5&lt;br /&gt;
 prompt 1&lt;br /&gt;
 label start&lt;br /&gt;
 kernel bzImage&lt;br /&gt;
 append initrd=rootfs.i486.ext2.lzma BOOTDEV=fd0 ramdisk_size=16384 vga=0 root=/dev/ram0&lt;br /&gt;
&lt;br /&gt;
Se è stato usato un altro tipo di filesystem sostituire rootfs.i486.ext2.lzma con rootfs.i486.ext2.bz2, rootfs.i486.ext2.squashfs…&lt;br /&gt;
&lt;br /&gt;
Installare il bootloader sul floppy&lt;br /&gt;
 $ sudo syslinux /dev/fd0&lt;br /&gt;
&lt;br /&gt;
Smontare il floppy&lt;br /&gt;
 $ cd&lt;br /&gt;
 $ sudo umount /mnt/floppy&lt;br /&gt;
&lt;br /&gt;
In caso di necessità di modifiche al ramdisk bisognerà copiarlo sul disco fisso, decomprimerlo, montarlo in loop ed effettuare le modifiche in questo modo:&lt;br /&gt;
 $ sudo mount /mnt/floppy&lt;br /&gt;
 $ sudo cp /mnt/floppy/rootfs.i486.ext2.lzma&lt;br /&gt;
 $ sudo lzma -d rootfs.i486.ext2.lzma&lt;br /&gt;
 $ sudo mkdir /mnt/tmp&lt;br /&gt;
 $ sudo mount -o loop rootfs.i486.ext2 /mnt/tmp&lt;br /&gt;
 $ cd /mnt/tmp&lt;br /&gt;
&lt;br /&gt;
Effettuare le modifiche e poi smontare il tutto&lt;br /&gt;
 $ cd&lt;br /&gt;
 $ sudo umount /mnt/tmp&lt;br /&gt;
&lt;br /&gt;
Ricomprimere il ramdisk e copiarlo sul floppy per sostituire quello vecchio&lt;br /&gt;
 $ sudo lzma -c9 rootfs.i486.ext2 &amp;gt; rootfs.i486.ext2.lzma&lt;br /&gt;
 $ sudo cp rootfs.i486.ext2.lzma /mnt/floppy&lt;br /&gt;
 $ sudo umount /mnt/floppy&lt;br /&gt;
&lt;br /&gt;
Un floppy già pronto con le seguenti caratteristiche ''era'' presente [http://golem.linux.it/files/spookyh/fspooky_v05.tar.xz qui]&lt;br /&gt;
&lt;br /&gt;
* Linux kernel 3.2.9&lt;br /&gt;
&lt;br /&gt;
* Busybox 1.19.4&lt;br /&gt;
&lt;br /&gt;
* Programmi inclusi: ftpd, ncftp, dropbear (ssh client/server), httpd, iptables, dhcp client/server, nc, wget, fdisk.&lt;br /&gt;
&lt;br /&gt;
* Requisiti minimi: i586 (60 MHz), 74 Mb RAM, floppy driver 3,5&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* Hardware supportato: processori i586 compatibili, Bus PCI (niente ISA), Controller Generic ATA disk; schede di rete Novell NE2000 (e cloni), RealTek 8129, Intel PRO/1000 Gigabit Adapter.&lt;br /&gt;
&lt;br /&gt;
==Immagine per hard disk==&lt;br /&gt;
Se un floppy è troppo piccolo per le nostre esigenze si può costruire il sistema dentro ad un file d'immagine da copiare sull'hard disk della nostra macchina direttamente con dd. Creiamo quindi un'immagine da 250 MB, che dovrebbe essere più che sufficiente per un sistema testuale&lt;br /&gt;
 dd if=/dev/zero of=output/images/486linux.img bs=1M count=250&lt;br /&gt;
&lt;br /&gt;
Montiamo l'immagine per poter formattare il filesystem e copiarci i dati&lt;br /&gt;
 # losetup -Pf 486linux.img&lt;br /&gt;
 # mkfs.ext2 /dev/loop0p1&lt;br /&gt;
Probabilmente il miglior filesystem per un sistema così vecchio è ext2, si rinuncia al journaling, ma ci si guadagna parecchio in performance.&lt;br /&gt;
 # mkfs.ext2 -m 0 -O none /dev/loop0p1&lt;br /&gt;
&lt;br /&gt;
Montiamo il tutto&lt;br /&gt;
 # mount /dev/loop0p1 /mnt/img&lt;br /&gt;
&lt;br /&gt;
Copiamoci il filesystem ed il kernel&lt;br /&gt;
 # tar xf buildroot-2026.02/output/images/rootfs.tar -C /mnt/img&lt;br /&gt;
 # mkdir -p /mnt/img/boot&lt;br /&gt;
 # cp buildroot-2026.02/output/images/bzImage /mnt/img/boot/bzImage&lt;br /&gt;
&lt;br /&gt;
Come bootloader, anche in questo caso si è optato per il semplicissimo syslinux.&lt;br /&gt;
 sudo pacman -S syslinux&lt;br /&gt;
 sudo extlinux --install /mnt/img/boot/&lt;br /&gt;
&lt;br /&gt;
Configuriamo il bootloader (/mnt/boot/syslinux.cfg)&lt;br /&gt;
 DEFAULT linux&lt;br /&gt;
 timeout 5&lt;br /&gt;
 prompt 1&lt;br /&gt;
 LABEL linux&lt;br /&gt;
    KERNEL /boot/bzImage&lt;br /&gt;
    APPEND root=/dev/sda1 ro&lt;br /&gt;
&lt;br /&gt;
Se ci interessa la tastiera italiana creiamo dal nostro sistema host il file .bmap da far caricare a busybox &lt;br /&gt;
 # loadkeys -qb it &amp;gt; it.bmap&lt;br /&gt;
 # mv it.bmap /mnt/img/etc&lt;br /&gt;
&lt;br /&gt;
===Tastiera italiana===&lt;br /&gt;
Possiamo creare uno script d'avvio tipo ''/etc/init.d/S40keyboard'' per far in modo che il sistema lo carichi automaticamente (ricordatevi di renderlo eseguibile).&lt;br /&gt;
 #!/bin/sh&lt;br /&gt;
 loadkmap &amp;lt; /etc/it.bmap&lt;br /&gt;
&lt;br /&gt;
===Hotplug===&lt;br /&gt;
Per l'hotplug dei moduli occorre aver installato il programma mdev, anche in questo caso converrà scrivere uno script di avvio tipo il seguente (/etc/init.d/S10mdev) &lt;br /&gt;
 #!/bin/sh&lt;br /&gt;
 case &amp;quot;$1&amp;quot; in&lt;br /&gt;
    start)&lt;br /&gt;
        echo &amp;quot;Starting mdev...&amp;quot;&lt;br /&gt;
        # Imposta mdev come gestore degli eventi hotplug&lt;br /&gt;
        echo /sbin/mdev &amp;gt; /proc/sys/kernel/hotplug&lt;br /&gt;
        # Scansiona /sys per creare i device node per l'hardware già presente&lt;br /&gt;
        /sbin/mdev -s&lt;br /&gt;
        # Questo è il &amp;quot;coldplug&amp;quot;: trova tutti i moduli dell'hardware già presente e li carica&lt;br /&gt;
        echo &amp;quot;Loading kernel modules for existing hardware...&amp;quot;&lt;br /&gt;
        find /sys/ -name modalias | xargs sort -u | xargs modprobe -abq&lt;br /&gt;
        ;;&lt;br /&gt;
    stop)&lt;br /&gt;
        echo &amp;quot;Stopping mdev...&amp;quot;&lt;br /&gt;
        ;;&lt;br /&gt;
    *)&lt;br /&gt;
        echo &amp;quot;Usage: $0 {start|stop}&amp;quot;&lt;br /&gt;
        exit 1&lt;br /&gt;
        ;;&lt;br /&gt;
 esac&lt;br /&gt;
[[Category:howto]]&lt;/div&gt;</summary>
		<author><name>$pooky Hunter</name></author>
	</entry>
	<entry>
		<id>https://wiki.golem.linux.it/index.php?title=Linux_minimale_per_PC_i386/i486&amp;diff=9971</id>
		<title>Linux minimale per PC i386/i486</title>
		<link rel="alternate" type="text/html" href="https://wiki.golem.linux.it/index.php?title=Linux_minimale_per_PC_i386/i486&amp;diff=9971"/>
		<updated>2026-05-16T05:27:32Z</updated>

		<summary type="html">&lt;p&gt;$pooky Hunter: /* Floppy Linux */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Distribuzioni per i486-i586=&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! Distro&lt;br /&gt;
! Versione Kernel&lt;br /&gt;
! CPU minima&lt;br /&gt;
! RAM minima&lt;br /&gt;
! Uso ideale&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [http://delicate-linux.net/ DeLi(cate) Linux]&lt;br /&gt;
| 2.4.37.11&lt;br /&gt;
| i386&lt;br /&gt;
| 8 MB&lt;br /&gt;
| Retrocomputing puro, PC anni '90&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.slitaz.org SliTaz]&lt;br /&gt;
| 3.16.55&lt;br /&gt;
| i686&lt;br /&gt;
| 64 MB&lt;br /&gt;
| Pentium II&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.tinycorelinux.com Tiny Core Linux]&lt;br /&gt;
| 6.18.2&lt;br /&gt;
| i486DX&lt;br /&gt;
| 80 MB&lt;br /&gt;
| Minimalismo estremo, appliance&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.puppylinux.com Puppy Linux]&lt;br /&gt;
|&lt;br /&gt;
| i686&lt;br /&gt;
| 128-256 MB&lt;br /&gt;
| Desktop leggero usabile&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.damnsmalllinux.org  Damn Small Linux 2024]&lt;br /&gt;
| 5.10.188&lt;br /&gt;
| i686&lt;br /&gt;
| 128 MB&lt;br /&gt;
| Hardware datato ma moderno&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Distribuzioni per i386-i486=&lt;br /&gt;
Se si tenta di recuperare una macchina particolarmente vecchia possono venire in nostro soccorso delle mini distribuzioni prive di ambiente grafico e talmente compatte da poter essere contenute in un unico floppy.&lt;br /&gt;
&lt;br /&gt;
NB: è stato rimosso il supporto ai 386 nel 2012 (kernel 3.8) ed ai 486 nel 2026 (kernel 7.1)&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! Distribuzione&lt;br /&gt;
! Versione Kernel&lt;br /&gt;
! Supporto avvio&lt;br /&gt;
! CPU minima&lt;br /&gt;
! RAM minima&lt;br /&gt;
! Uso ideale&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.fdlinux.com/download.php FD Linux]&lt;br /&gt;
| 2.4.20&lt;br /&gt;
| 1 floppy&lt;br /&gt;
| 386SX&lt;br /&gt;
| 4 MB&lt;br /&gt;
| DOS/Linux compatto&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.zelow.no/floppyfw floppyfw]&lt;br /&gt;
| 2.4.37.11&lt;br /&gt;
| 1 floppy&lt;br /&gt;
| 386 / 386SX&lt;br /&gt;
| 12 MB&lt;br /&gt;
| Router/firewall embedded (iptables)&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [https://web.archive.org/web/20190312063410/http://chris.silmor.de/hal91/ HAL91]&lt;br /&gt;
| 2.0.39&lt;br /&gt;
| 1 floppy&lt;br /&gt;
| 386&lt;br /&gt;
| 8 MB&lt;br /&gt;
| Network solo con scheda NE2000 ISA&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [https://micheleandreoli.org/public/Software/mulinux// muLinux]&lt;br /&gt;
| 2.0.36&lt;br /&gt;
| 1+ floppy modulari&lt;br /&gt;
| 386SX&lt;br /&gt;
| 4 MB&lt;br /&gt;
| Recupero PC vintage&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [https://sourceforge.net/projects/zool5remastered/ Zool]&lt;br /&gt;
| 2.4.37.11&lt;br /&gt;
| 1 floppy&lt;br /&gt;
| 386&lt;br /&gt;
| 12 MB&lt;br /&gt;
| Networking completo (httpd, ftpd, telnetd)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Buildroot=&lt;br /&gt;
Soluzioni preconfezionate (come quelle sopra elencate) potrebbero non rispondere alle nostre esigenze: kernel datati (2.0, 2.2), driver mancanti o magari mancano proprio dell'applicazione di cui abbiamo bisogno.&lt;br /&gt;
&lt;br /&gt;
In questi casi la soluzione più rapida è quella di costruirsi il proprio sistema Linux personalizzato. Per farlo il metodo più semplice è utilizzare [https://buildroot.org/download.html Buildroot], un tool che permette la cross-compilazione di un ambiente Linux completo di librerie (glibc, uclibc-ng o musl), numerose applicazioni e l'eseguibile busybox.&lt;br /&gt;
&lt;br /&gt;
Questa procedura è analoga a quella usata per la realizzazione di qualsiasi sistema embedded Linux-based: router, decoder, lettory DVD...&lt;br /&gt;
&lt;br /&gt;
Scompattare il tool&lt;br /&gt;
 $ tar -xzvf buildroot-2026.02.tar.gz&lt;br /&gt;
&lt;br /&gt;
Entrare nella directory principale&lt;br /&gt;
 $ cd buildroot-2026.02/&lt;br /&gt;
&lt;br /&gt;
==BusyBox==&lt;br /&gt;
Configurare busybox selezionando i programmi che si ritengono necessari&lt;br /&gt;
 $ make busybox-menuconfig&lt;br /&gt;
&lt;br /&gt;
==Kernel==&lt;br /&gt;
Configurare il kernel per la compilazione&lt;br /&gt;
 $ make linux-menuconfig&lt;br /&gt;
&lt;br /&gt;
Escludere tutto ciò che non è strettamente necessario per risparmiare spazio su disco, quanto segue dovrà essere necessariamente presente per ottenere un sistema minimo avviabile.&lt;br /&gt;
&lt;br /&gt;
* Code maturity level-&amp;gt; Prompt for development&lt;br /&gt;
&lt;br /&gt;
* Processor type and features-&amp;gt; Support for your processor&lt;br /&gt;
&lt;br /&gt;
* General setup-&amp;gt; kernel support for ELF binaries&lt;br /&gt;
&lt;br /&gt;
* Block devices-&amp;gt; RAM disk support&lt;br /&gt;
&lt;br /&gt;
* File systems-&amp;gt; /proc filesystem, tmpfs, ext2&lt;br /&gt;
&lt;br /&gt;
* Character devices-&amp;gt; Virtual terminal&lt;br /&gt;
&lt;br /&gt;
* Character devices-&amp;gt; Support for console on virtual terminal&lt;br /&gt;
&lt;br /&gt;
* Console drivers-&amp;gt; VGA text console&lt;br /&gt;
&lt;br /&gt;
* General setup-&amp;gt; PCI support&lt;br /&gt;
&lt;br /&gt;
* I driver delle schede di rete che interessa supportare (ne, ne2k, rtl8139too, rtl8139c, pcnet32, e1000)&lt;br /&gt;
&lt;br /&gt;
* Iptables se si necessita di un firewall&lt;br /&gt;
&lt;br /&gt;
* Un driver IDE generico (generic ATA) su libata&lt;br /&gt;
&lt;br /&gt;
* Block devices-&amp;gt; Normal PC floppy disk support, se ci interesse il supporto al floppy&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Se si deve limitare al massimo la grandezza dell'immagine del kernel (bzImage) si può scegliere con un algoritmo di compressione come lzma. Questo però aumenterà il consumo di RAM e per macchine molto vecchie come i386 o i486 probabilmente è meglio optare per gz o al massimo bz2.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Configurazione generale==&lt;br /&gt;
 $ make menuconfig&lt;br /&gt;
&lt;br /&gt;
Indicare:&lt;br /&gt;
&lt;br /&gt;
* Architettura di destinazione (i386, i486, i586…)&lt;br /&gt;
&lt;br /&gt;
* Opzioni di compilazione&lt;br /&gt;
&lt;br /&gt;
* Versione del kernel da usare&lt;br /&gt;
&lt;br /&gt;
* Configurazione di partenza del kernel&lt;br /&gt;
 Kernel  ---&amp;gt; Kernel configuration (Use the architecture default configuration)&lt;br /&gt;
&lt;br /&gt;
* Eventuali altri programmi non presenti in busybox (es.: mdev, dropbear, nano, iptables, ncftp, lynx, mutt)&lt;br /&gt;
&lt;br /&gt;
* Si consiglia l'opzione di compilazione gcc '''-Os''' al fine di ridurre al minimo la grandezza dei binari &lt;br /&gt;
&lt;br /&gt;
===Filesystem images===&lt;br /&gt;
Esistono varie tipologie di filesystem da utilizzare per il sistema che verrà compilato: immagini ext2, squashfs, direttamente nel initramfs o semplicemente in un tarball. Nel caso ci interessi costruire un floppy, al fine di sfruttare al meglio lo spazio, consiglio di scegliere ext2 compresso, anche in questo caso con lzma si ottengono filesystem fino al 20% più piccoli rispetto a quelli compressi con bzip2, ma il sistema  necessiterà di maggiore RAM per caricarli (70-80MB). &lt;br /&gt;
&lt;br /&gt;
Terminata la fase di configurazione si può procedere con la compilazione&lt;br /&gt;
 $ make&lt;br /&gt;
&lt;br /&gt;
==output==&lt;br /&gt;
Nella directory buildroot-2026.02/output/images risiede il prodotto finito.&lt;br /&gt;
Se lasciate le impostazioni standard si tratterà di 3 file: bzImage, rootfs.ext2, rootfs.tar.&lt;br /&gt;
&lt;br /&gt;
==Immagine per floppy disk==&lt;br /&gt;
Le dimensioni dei file bzImage e rootfs.i486.ext2.lzma devono essere sufficientemente contenute per entrare su un floppy.&lt;br /&gt;
Nel caso fossero solo di poco più grandi (100-200 KB), si può rimediare con la formattazione non standard del floppy: a 1.72 MB invece che a 1.44MB.&lt;br /&gt;
 $ sudo mknod /dev/fd0u1722 b 2 60&lt;br /&gt;
 $ fdformat /dev/fd0u1722&lt;br /&gt;
 $ mkfs.vfat /dev/fd0u1722&lt;br /&gt;
&lt;br /&gt;
Se non presente creare un mount point per il floppy&lt;br /&gt;
 $ sudo mkdir /mnt/floppy&lt;br /&gt;
&lt;br /&gt;
Montare il floppy&lt;br /&gt;
 $ sudo mount /dev/fd0u1722 /mnt/floppy&lt;br /&gt;
&lt;br /&gt;
Copiarvi i due file&lt;br /&gt;
 $ sudo cp buildroot/output/images/bzImage /mnt/floppy&lt;br /&gt;
 $ sudo cp buildroot/output/images/rootfs.i486.ext2.lzma /mnt/floppy&lt;br /&gt;
&lt;br /&gt;
Adesso occorre installare un boot loader sul floppy. Essendo leggero, semplice da usare e supportando la FAT16 si consiglia di usare syslinux.&lt;br /&gt;
&lt;br /&gt;
Se syslinux non fosse presente sul vostro sistema installatelo con:&lt;br /&gt;
&lt;br /&gt;
 $ sudo apt-get install syslinux&lt;br /&gt;
per sistemi Debian-based&lt;br /&gt;
&lt;br /&gt;
O con&lt;br /&gt;
 # pacman -S syslinux&lt;br /&gt;
su Arch Linux&lt;br /&gt;
&lt;br /&gt;
Con un editor di testo (es. nano) create il file di configurazione per il boot loader: syslinux.cfg&lt;br /&gt;
 $ sudo nano /mnt/floppy/syslinux.cfg&lt;br /&gt;
&lt;br /&gt;
Riportate quanto segue, eventualmente adattandolo alle vostre esigenze:&lt;br /&gt;
&lt;br /&gt;
 default start&lt;br /&gt;
 timeout 5&lt;br /&gt;
 prompt 1&lt;br /&gt;
 label start&lt;br /&gt;
 kernel bzImage&lt;br /&gt;
 append initrd=rootfs.i486.ext2.lzma BOOTDEV=fd0 ramdisk_size=16384 vga=0 root=/dev/ram0&lt;br /&gt;
&lt;br /&gt;
Se è stato usato un altro tipo di filesystem sostituire rootfs.i486.ext2.lzma con rootfs.i486.ext2.bz2, rootfs.i486.ext2.squashfs…&lt;br /&gt;
&lt;br /&gt;
Installare il bootloader sul floppy&lt;br /&gt;
 $ sudo syslinux /dev/fd0&lt;br /&gt;
&lt;br /&gt;
Smontare il floppy&lt;br /&gt;
 $ cd&lt;br /&gt;
 $ sudo umount /mnt/floppy&lt;br /&gt;
&lt;br /&gt;
In caso di necessità di modifiche al ramdisk bisognerà copiarlo sul disco fisso, decomprimerlo, montarlo in loop ed effettuare le modifiche in questo modo:&lt;br /&gt;
 $ sudo mount /mnt/floppy&lt;br /&gt;
 $ sudo cp /mnt/floppy/rootfs.i486.ext2.lzma&lt;br /&gt;
 $ sudo lzma -d rootfs.i486.ext2.lzma&lt;br /&gt;
 $ sudo mkdir /mnt/tmp&lt;br /&gt;
 $ sudo mount -o loop rootfs.i486.ext2 /mnt/tmp&lt;br /&gt;
 $ cd /mnt/tmp&lt;br /&gt;
&lt;br /&gt;
Effettuare le modifiche e poi smontare il tutto&lt;br /&gt;
 $ cd&lt;br /&gt;
 $ sudo umount /mnt/tmp&lt;br /&gt;
&lt;br /&gt;
Ricomprimere il ramdisk e copiarlo sul floppy per sostituire quello vecchio&lt;br /&gt;
 $ sudo lzma -c9 rootfs.i486.ext2 &amp;gt; rootfs.i486.ext2.lzma&lt;br /&gt;
 $ sudo cp rootfs.i486.ext2.lzma /mnt/floppy&lt;br /&gt;
 $ sudo umount /mnt/floppy&lt;br /&gt;
&lt;br /&gt;
Un floppy già pronto con le seguenti caratteristiche ''era'' presente [http://golem.linux.it/files/spookyh/fspooky_v05.tar.xz qui]&lt;br /&gt;
&lt;br /&gt;
* Linux kernel 3.2.9&lt;br /&gt;
&lt;br /&gt;
* Busybox 1.19.4&lt;br /&gt;
&lt;br /&gt;
* Programmi inclusi: ftpd, ncftp, dropbear (ssh client/server), httpd, iptables, dhcp client/server, nc, wget, fdisk.&lt;br /&gt;
&lt;br /&gt;
* Requisiti minimi: i586 (60 MHz), 74 Mb RAM, floppy driver 3,5&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* Hardware supportato: processori i586 compatibili, Bus PCI (niente ISA), Controller Generic ATA disk; schede di rete Novell NE2000 (e cloni), RealTek 8129, Intel PRO/1000 Gigabit Adapter.&lt;br /&gt;
&lt;br /&gt;
==Immagine per hard disk==&lt;br /&gt;
Se un floppy è troppo piccolo per le nostre esigenze si può costruire il sistema dentro ad un file d'immagine da copiare sull'hard disk della nostra macchina direttamente con dd. Creiamo quindi un'immagine da 250 MB, che dovrebbe essere più che sufficiente per un sistema testuale&lt;br /&gt;
 dd if=/dev/zero of=output/images/486linux.img bs=1M count=250&lt;br /&gt;
&lt;br /&gt;
Montiamo l'immagine per poter formattare il filesystem e copiarci i dati&lt;br /&gt;
 # losetup -Pf 486linux.img&lt;br /&gt;
 # mkfs.ext2 /dev/loop0p1&lt;br /&gt;
Probabilmente il miglior filesystem per un sistema così vecchio è ext2, si rinuncia al journaling, ma ci si guadagna parecchio in performance.&lt;br /&gt;
 # mkfs.ext2 -m 0 -O none /dev/loop0p1&lt;br /&gt;
&lt;br /&gt;
Montiamo il tutto&lt;br /&gt;
 # mount /dev/loop0p1 /mnt/img&lt;br /&gt;
&lt;br /&gt;
Copiamoci il filesystem ed il kernel&lt;br /&gt;
 # tar xf buildroot-2026.02/output/images/rootfs.tar -C /mnt/img&lt;br /&gt;
 # mkdir -p /mnt/img/boot&lt;br /&gt;
 # cp buildroot-2026.02/output/images/bzImage /mnt/img/boot/bzImage&lt;br /&gt;
&lt;br /&gt;
Come bootloader, anche in questo caso si è optato per il semplicissimo syslinux.&lt;br /&gt;
 sudo pacman -S syslinux&lt;br /&gt;
 sudo extlinux --install /mnt/img/boot/&lt;br /&gt;
&lt;br /&gt;
Configuriamo il bootloader (/mnt/boot/syslinux.cfg)&lt;br /&gt;
 DEFAULT linux&lt;br /&gt;
 timeout 5&lt;br /&gt;
 prompt 1&lt;br /&gt;
 LABEL linux&lt;br /&gt;
    KERNEL /boot/bzImage&lt;br /&gt;
    APPEND root=/dev/sda1 ro&lt;br /&gt;
&lt;br /&gt;
Se ci interessa la tastiera italiana creiamo dal nostro sistema host il file .bmap da far caricare a busybox &lt;br /&gt;
 # loadkeys -qb it &amp;gt; it.bmap&lt;br /&gt;
 # mv it.bmap /mnt/img/etc&lt;br /&gt;
&lt;br /&gt;
===Tastiera italiana===&lt;br /&gt;
Possiamo creare uno script d'avvio tipo ''/etc/init.d/S40keyboard'' per far in modo che il sistema lo carichi automaticamente (ricordatevi di renderlo eseguibile).&lt;br /&gt;
 #!/bin/sh&lt;br /&gt;
 loadkmap &amp;lt; /etc/it.bmap&lt;br /&gt;
&lt;br /&gt;
===Hotplug===&lt;br /&gt;
Per l'hotplug dei moduli occorre aver installato il programma mdev, anche in questo caso converrà scrivere uno script di avvio tipo il seguente (/etc/init.d/S10mdev) &lt;br /&gt;
 #!/bin/sh&lt;br /&gt;
 case &amp;quot;$1&amp;quot; in&lt;br /&gt;
    start)&lt;br /&gt;
        echo &amp;quot;Starting mdev...&amp;quot;&lt;br /&gt;
        # Imposta mdev come gestore degli eventi hotplug&lt;br /&gt;
        echo /sbin/mdev &amp;gt; /proc/sys/kernel/hotplug&lt;br /&gt;
        # Scansiona /sys per creare i device node per l'hardware già presente&lt;br /&gt;
        /sbin/mdev -s&lt;br /&gt;
        # Questo è il &amp;quot;coldplug&amp;quot;: trova tutti i moduli dell'hardware già presente e li carica&lt;br /&gt;
        echo &amp;quot;Loading kernel modules for existing hardware...&amp;quot;&lt;br /&gt;
        find /sys/ -name modalias | xargs sort -u | xargs modprobe -abq&lt;br /&gt;
        ;;&lt;br /&gt;
    stop)&lt;br /&gt;
        echo &amp;quot;Stopping mdev...&amp;quot;&lt;br /&gt;
        ;;&lt;br /&gt;
    *)&lt;br /&gt;
        echo &amp;quot;Usage: $0 {start|stop}&amp;quot;&lt;br /&gt;
        exit 1&lt;br /&gt;
        ;;&lt;br /&gt;
 esac&lt;br /&gt;
[[Category:howto]]&lt;/div&gt;</summary>
		<author><name>$pooky Hunter</name></author>
	</entry>
	<entry>
		<id>https://wiki.golem.linux.it/index.php?title=Linux_minimale_per_PC_i386/i486&amp;diff=9970</id>
		<title>Linux minimale per PC i386/i486</title>
		<link rel="alternate" type="text/html" href="https://wiki.golem.linux.it/index.php?title=Linux_minimale_per_PC_i386/i486&amp;diff=9970"/>
		<updated>2026-05-15T18:00:16Z</updated>

		<summary type="html">&lt;p&gt;$pooky Hunter: /* Distribuzioni per i486-i586 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Distribuzioni per i486-i586=&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! Distro&lt;br /&gt;
! Versione Kernel&lt;br /&gt;
! CPU minima&lt;br /&gt;
! RAM minima&lt;br /&gt;
! Uso ideale&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [http://delicate-linux.net/ DeLi(cate) Linux]&lt;br /&gt;
| 2.4.37.11&lt;br /&gt;
| i386&lt;br /&gt;
| 8 MB&lt;br /&gt;
| Retrocomputing puro, PC anni '90&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.slitaz.org SliTaz]&lt;br /&gt;
| 3.16.55&lt;br /&gt;
| i686&lt;br /&gt;
| 64 MB&lt;br /&gt;
| Pentium II&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.tinycorelinux.com Tiny Core Linux]&lt;br /&gt;
| 6.18.2&lt;br /&gt;
| i486DX&lt;br /&gt;
| 80 MB&lt;br /&gt;
| Minimalismo estremo, appliance&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.puppylinux.com Puppy Linux]&lt;br /&gt;
|&lt;br /&gt;
| i686&lt;br /&gt;
| 128-256 MB&lt;br /&gt;
| Desktop leggero usabile&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.damnsmalllinux.org  Damn Small Linux 2024]&lt;br /&gt;
| 5.10.188&lt;br /&gt;
| i686&lt;br /&gt;
| 128 MB&lt;br /&gt;
| Hardware datato ma moderno&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Distribuzioni per i386-i486=&lt;br /&gt;
Se si tenta di recuperare una macchina particolarmente vecchia possono venire in nostro soccorso delle mini distribuzioni prive di ambiente grafico e talmente compatte da poter essere contenute in un unico floppy.&lt;br /&gt;
&lt;br /&gt;
NB: è stato rimosso il supporto ai 386 nel 2012 (kernel 3.8) ed ai 486 nel 2026 (kernel 7.1)&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! Distribuzione&lt;br /&gt;
! Versione Kernel&lt;br /&gt;
! Supporto avvio&lt;br /&gt;
! CPU minima&lt;br /&gt;
! RAM minima&lt;br /&gt;
! Uso ideale&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.fdlinux.com/download.php FD Linux]&lt;br /&gt;
| 2.4.20&lt;br /&gt;
| 1 floppy&lt;br /&gt;
| 386SX&lt;br /&gt;
| 4 MB&lt;br /&gt;
| DOS/Linux compatto&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.zelow.no/floppyfw floppyfw]&lt;br /&gt;
| 2.4.37.11&lt;br /&gt;
| 1 floppy&lt;br /&gt;
| 386 / 386SX&lt;br /&gt;
| 12 MB&lt;br /&gt;
| Router/firewall embedded (iptables)&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [https://web.archive.org/web/20190312063410/http://chris.silmor.de/hal91/ HAL91]&lt;br /&gt;
| 2.0.39&lt;br /&gt;
| 1 floppy&lt;br /&gt;
| 386&lt;br /&gt;
| 8 MB&lt;br /&gt;
| Network solo con scheda NE2000 ISA&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [https://micheleandreoli.org/public/Software/mulinux// muLinux]&lt;br /&gt;
| 2.0.36&lt;br /&gt;
| 1+ floppy modulari&lt;br /&gt;
| 386SX&lt;br /&gt;
| 4 MB&lt;br /&gt;
| Recupero PC vintage&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [https://sourceforge.net/projects/zool5remastered/ Zool]&lt;br /&gt;
| 2.4.37.11&lt;br /&gt;
| 1 floppy&lt;br /&gt;
| 386&lt;br /&gt;
| 12 MB&lt;br /&gt;
| Networking completo (httpd, ftpd, telnetd)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Buildroot=&lt;br /&gt;
Soluzioni preconfezionate (come quelle sopra elencate) potrebbero non rispondere alle nostre esigenze: kernel datati (2.0, 2.2), driver mancanti o magari mancano proprio dell'applicazione di cui abbiamo bisogno.&lt;br /&gt;
&lt;br /&gt;
In questi casi la soluzione più rapida è quella di costruirsi il proprio sistema Linux personalizzato. Per farlo il metodo più semplice è utilizzare [https://buildroot.org/download.html Buildroot], un tool che permette la cross-compilazione di un ambiente Linux completo di librerie (glibc, uclibc-ng o musl), numerose applicazioni e l'eseguibile busybox.&lt;br /&gt;
&lt;br /&gt;
Questa procedura è analoga a quella usata per la realizzazione di qualsiasi sistema embedded Linux-based: router, decoder, lettory DVD...&lt;br /&gt;
&lt;br /&gt;
Scompattare il tool&lt;br /&gt;
 $ tar -xzvf buildroot-2026.02.tar.gz&lt;br /&gt;
&lt;br /&gt;
Entrare nella directory principale&lt;br /&gt;
 $ cd buildroot-2026.02/&lt;br /&gt;
&lt;br /&gt;
==BusyBox==&lt;br /&gt;
Configurare busybox selezionando i programmi che si ritengono necessari&lt;br /&gt;
 $ make busybox-menuconfig&lt;br /&gt;
&lt;br /&gt;
==Kernel==&lt;br /&gt;
Configurare il kernel per la compilazione&lt;br /&gt;
 $ make linux-menuconfig&lt;br /&gt;
&lt;br /&gt;
Escludere tutto ciò che non è strettamente necessario per risparmiare spazio su disco, quanto segue dovrà essere necessariamente presente per ottenere un sistema minimo avviabile.&lt;br /&gt;
&lt;br /&gt;
* Code maturity level-&amp;gt; Prompt for development&lt;br /&gt;
&lt;br /&gt;
* Processor type and features-&amp;gt; Support for your processor&lt;br /&gt;
&lt;br /&gt;
* General setup-&amp;gt; kernel support for ELF binaries&lt;br /&gt;
&lt;br /&gt;
* Block devices-&amp;gt; RAM disk support&lt;br /&gt;
&lt;br /&gt;
* File systems-&amp;gt; /proc filesystem, tmpfs, ext2&lt;br /&gt;
&lt;br /&gt;
* Character devices-&amp;gt; Virtual terminal&lt;br /&gt;
&lt;br /&gt;
* Character devices-&amp;gt; Support for console on virtual terminal&lt;br /&gt;
&lt;br /&gt;
* Console drivers-&amp;gt; VGA text console&lt;br /&gt;
&lt;br /&gt;
* General setup-&amp;gt; PCI support&lt;br /&gt;
&lt;br /&gt;
* I driver delle schede di rete che interessa supportare (ne, ne2k, rtl8139too, rtl8139c, pcnet32, e1000)&lt;br /&gt;
&lt;br /&gt;
* Iptables se si necessita di un firewall&lt;br /&gt;
&lt;br /&gt;
* Un driver IDE generico (generic ATA) su libata&lt;br /&gt;
&lt;br /&gt;
* Block devices-&amp;gt; Normal PC floppy disk support, se ci interesse il supporto al floppy&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Se si deve limitare al massimo la grandezza dell'immagine del kernel (bzImage) si può scegliere con un algoritmo di compressione come lzma. Questo però aumenterà il consumo di RAM e per macchine molto vecchie come i386 o i486 probabilmente è meglio optare per gz o al massimo bz2.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Configurazione generale==&lt;br /&gt;
 $ make menuconfig&lt;br /&gt;
&lt;br /&gt;
Indicare:&lt;br /&gt;
&lt;br /&gt;
* Architettura di destinazione (i386, i486, i586…)&lt;br /&gt;
&lt;br /&gt;
* Opzioni di compilazione&lt;br /&gt;
&lt;br /&gt;
* Versione del kernel da usare&lt;br /&gt;
&lt;br /&gt;
* Configurazione di partenza del kernel&lt;br /&gt;
 Kernel  ---&amp;gt; Kernel configuration (Use the architecture default configuration)&lt;br /&gt;
&lt;br /&gt;
* Eventuali altri programmi non presenti in busybox (es.: mdev, dropbear, nano, iptables, ncftp, lynx, mutt)&lt;br /&gt;
&lt;br /&gt;
* Si consiglia l'opzione di compilazione gcc '''-Os''' al fine di ridurre al minimo la grandezza dei binari &lt;br /&gt;
&lt;br /&gt;
===Filesystem images===&lt;br /&gt;
Esistono varie tipologie di filesystem da utilizzare per il sistema che verrà compilato: immagini ext2, squashfs, direttamente nel initramfs o semplicemente in un tarball. Nel caso ci interessi costruire un floppy, al fine di sfruttare al meglio lo spazio, consiglio di scegliere ext2 compresso, anche in questo caso con lzma si ottengono filesystem fino al 20% più piccoli rispetto a quelli compressi con bzip2, ma il sistema  necessiterà di maggiore RAM per caricarli (70-80MB). &lt;br /&gt;
&lt;br /&gt;
Terminata la fase di configurazione si può procedere con la compilazione&lt;br /&gt;
 $ make&lt;br /&gt;
&lt;br /&gt;
==output==&lt;br /&gt;
Nella directory buildroot-2026.02/output/images risiede il prodotto finito.&lt;br /&gt;
Se lasciate le impostazioni standard si tratterà di 3 file: bzImage, rootfs.ext2, rootfs.tar.&lt;br /&gt;
&lt;br /&gt;
==Floppy Linux==&lt;br /&gt;
Le dimensioni dei file bzImage e rootfs.i486.ext2.lzma devono essere sufficientemente contenute per entrare su un floppy.&lt;br /&gt;
Nel caso fossero solo di poco più grandi (100-200 KB), si può rimediare con la formattazione non standard del floppy: a 1.72 MB invece che a 1.44MB.&lt;br /&gt;
 $ sudo mknod /dev/fd0u1722 b 2 60&lt;br /&gt;
 $ fdformat /dev/fd0u1722&lt;br /&gt;
 $ mkfs.vfat /dev/fd0u1722&lt;br /&gt;
&lt;br /&gt;
Se non presente creare un mount point per il floppy&lt;br /&gt;
 $ sudo mkdir /mnt/floppy&lt;br /&gt;
&lt;br /&gt;
Montare il floppy&lt;br /&gt;
 $ sudo mount /dev/fd0u1722 /mnt/floppy&lt;br /&gt;
&lt;br /&gt;
Copiarvi i due file&lt;br /&gt;
 $ sudo cp buildroot/output/images/bzImage /mnt/floppy&lt;br /&gt;
 $ sudo cp buildroot/output/images/rootfs.i486.ext2.lzma /mnt/floppy&lt;br /&gt;
&lt;br /&gt;
Adesso occorre installare un boot loader sul floppy. Essendo leggero, semplice da usare e supportando la FAT16 si consiglia di usare syslinux.&lt;br /&gt;
&lt;br /&gt;
Se syslinux non fosse presente sul vostro sistema installatelo con:&lt;br /&gt;
&lt;br /&gt;
 $ sudo apt-get install syslinux&lt;br /&gt;
per sistemi Debian-based&lt;br /&gt;
&lt;br /&gt;
O con&lt;br /&gt;
 # pacman -S syslinux&lt;br /&gt;
su Arch Linux&lt;br /&gt;
&lt;br /&gt;
Con un editor di testo (es. nano) create il file di configurazione per il boot loader: syslinux.cfg&lt;br /&gt;
 $ sudo nano /mnt/floppy/syslinux.cfg&lt;br /&gt;
&lt;br /&gt;
Riportate quanto segue, eventualmente adattandolo alle vostre esigenze:&lt;br /&gt;
&lt;br /&gt;
 default start&lt;br /&gt;
 timeout 5&lt;br /&gt;
 prompt 1&lt;br /&gt;
 label start&lt;br /&gt;
 kernel bzImage&lt;br /&gt;
 append initrd=rootfs.i486.ext2.lzma BOOTDEV=fd0 ramdisk_size=16384 vga=0 root=/dev/ram0&lt;br /&gt;
&lt;br /&gt;
Se è stato usato un altro tipo di filesystem sostituire rootfs.i486.ext2.lzma con rootfs.i486.ext2.bz2, rootfs.i486.ext2.squashfs…&lt;br /&gt;
&lt;br /&gt;
Installare il bootloader sul floppy&lt;br /&gt;
 $ sudo syslinux /dev/fd0&lt;br /&gt;
&lt;br /&gt;
Smontare il floppy&lt;br /&gt;
 $ cd&lt;br /&gt;
 $ sudo umount /mnt/floppy&lt;br /&gt;
&lt;br /&gt;
In caso di necessità di modifiche al ramdisk bisognerà copiarlo sul disco fisso, decomprimerlo, montarlo in loop ed effettuare le modifiche in questo modo:&lt;br /&gt;
 $ sudo mount /mnt/floppy&lt;br /&gt;
 $ sudo cp /mnt/floppy/rootfs.i486.ext2.lzma&lt;br /&gt;
 $ sudo lzma -d rootfs.i486.ext2.lzma&lt;br /&gt;
 $ sudo mkdir /mnt/tmp&lt;br /&gt;
 $ sudo mount -o loop rootfs.i486.ext2 /mnt/tmp&lt;br /&gt;
 $ cd /mnt/tmp&lt;br /&gt;
&lt;br /&gt;
Effettuare le modifiche e poi smontare il tutto&lt;br /&gt;
 $ cd&lt;br /&gt;
 $ sudo umount /mnt/tmp&lt;br /&gt;
&lt;br /&gt;
Ricomprimere il ramdisk e copiarlo sul floppy per sostituire quello vecchio&lt;br /&gt;
 $ sudo lzma -c9 rootfs.i486.ext2 &amp;gt; rootfs.i486.ext2.lzma&lt;br /&gt;
 $ sudo cp rootfs.i486.ext2.lzma /mnt/floppy&lt;br /&gt;
 $ sudo umount /mnt/floppy&lt;br /&gt;
&lt;br /&gt;
Un floppy già pronto con le seguenti caratteristiche ''era'' presente [http://golem.linux.it/files/spookyh/fspooky_v05.tar.xz qui]&lt;br /&gt;
&lt;br /&gt;
* Linux kernel 3.2.9&lt;br /&gt;
&lt;br /&gt;
* Busybox 1.19.4&lt;br /&gt;
&lt;br /&gt;
* Programmi inclusi: ftpd, ncftp, dropbear (ssh client/server), httpd, iptables, dhcp client/server, nc, wget, fdisk.&lt;br /&gt;
&lt;br /&gt;
* Requisiti minimi: i586 (60 MHz), 74 Mb RAM, floppy driver 3,5&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* Hardware supportato: processori i586 compatibili, Bus PCI (niente ISA), Controller Generic ATA disk; schede di rete Novell NE2000 (e cloni), RealTek 8129, Intel PRO/1000 Gigabit Adapter.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Immagine per hard disk==&lt;br /&gt;
Se un floppy è troppo piccolo per le nostre esigenze si può costruire il sistema dentro ad un file d'immagine da copiare sull'hard disk della nostra macchina direttamente con dd. Creiamo quindi un'immagine da 250 MB, che dovrebbe essere più che sufficiente per un sistema testuale&lt;br /&gt;
 dd if=/dev/zero of=output/images/486linux.img bs=1M count=250&lt;br /&gt;
&lt;br /&gt;
Montiamo l'immagine per poter formattare il filesystem e copiarci i dati&lt;br /&gt;
 # losetup -Pf 486linux.img&lt;br /&gt;
 # mkfs.ext2 /dev/loop0p1&lt;br /&gt;
Probabilmente il miglior filesystem per un sistema così vecchio è ext2, si rinuncia al journaling, ma ci si guadagna parecchio in performance.&lt;br /&gt;
 # mkfs.ext2 -m 0 -O none /dev/loop0p1&lt;br /&gt;
&lt;br /&gt;
Montiamo il tutto&lt;br /&gt;
 # mount /dev/loop0p1 /mnt/img&lt;br /&gt;
&lt;br /&gt;
Copiamoci il filesystem ed il kernel&lt;br /&gt;
 # tar xf buildroot-2026.02/output/images/rootfs.tar -C /mnt/img&lt;br /&gt;
 # mkdir -p /mnt/img/boot&lt;br /&gt;
 # cp buildroot-2026.02/output/images/bzImage /mnt/img/boot/bzImage&lt;br /&gt;
&lt;br /&gt;
Come bootloader, anche in questo caso si è optato per il semplicissimo syslinux.&lt;br /&gt;
 sudo pacman -S syslinux&lt;br /&gt;
 sudo extlinux --install /mnt/img/boot/&lt;br /&gt;
&lt;br /&gt;
Configuriamo il bootloader (/mnt/boot/syslinux.cfg)&lt;br /&gt;
 DEFAULT linux&lt;br /&gt;
 timeout 5&lt;br /&gt;
 prompt 1&lt;br /&gt;
 LABEL linux&lt;br /&gt;
    KERNEL /boot/bzImage&lt;br /&gt;
    APPEND root=/dev/sda1 ro&lt;br /&gt;
&lt;br /&gt;
Se ci interessa la tastiera italiana creiamo dal nostro sistema host il file .bmap da far caricare a busybox &lt;br /&gt;
 # loadkeys -qb it &amp;gt; it.bmap&lt;br /&gt;
 # mv it.bmap /mnt/img/etc&lt;br /&gt;
&lt;br /&gt;
===Tastiera italiana===&lt;br /&gt;
Possiamo creare uno script d'avvio tipo ''/etc/init.d/S40keyboard'' per far in modo che il sistema lo carichi automaticamente (ricordatevi di renderlo eseguibile).&lt;br /&gt;
 #!/bin/sh&lt;br /&gt;
 loadkmap &amp;lt; /etc/it.bmap&lt;br /&gt;
&lt;br /&gt;
===Hotplug===&lt;br /&gt;
Per l'hotplug dei moduli occorre aver installato il programma mdev, anche in questo caso converrà scrivere uno script di avvio tipo il seguente (/etc/init.d/S10mdev) &lt;br /&gt;
 #!/bin/sh&lt;br /&gt;
 case &amp;quot;$1&amp;quot; in&lt;br /&gt;
    start)&lt;br /&gt;
        echo &amp;quot;Starting mdev...&amp;quot;&lt;br /&gt;
        # Imposta mdev come gestore degli eventi hotplug&lt;br /&gt;
        echo /sbin/mdev &amp;gt; /proc/sys/kernel/hotplug&lt;br /&gt;
        # Scansiona /sys per creare i device node per l'hardware già presente&lt;br /&gt;
        /sbin/mdev -s&lt;br /&gt;
        # Questo è il &amp;quot;coldplug&amp;quot;: trova tutti i moduli dell'hardware già presente e li carica&lt;br /&gt;
        echo &amp;quot;Loading kernel modules for existing hardware...&amp;quot;&lt;br /&gt;
        find /sys/ -name modalias | xargs sort -u | xargs modprobe -abq&lt;br /&gt;
        ;;&lt;br /&gt;
    stop)&lt;br /&gt;
        echo &amp;quot;Stopping mdev...&amp;quot;&lt;br /&gt;
        ;;&lt;br /&gt;
    *)&lt;br /&gt;
        echo &amp;quot;Usage: $0 {start|stop}&amp;quot;&lt;br /&gt;
        exit 1&lt;br /&gt;
        ;;&lt;br /&gt;
 esac&lt;br /&gt;
[[Category:howto]]&lt;/div&gt;</summary>
		<author><name>$pooky Hunter</name></author>
	</entry>
	<entry>
		<id>https://wiki.golem.linux.it/index.php?title=Linux_minimale_per_PC_i386/i486&amp;diff=9969</id>
		<title>Linux minimale per PC i386/i486</title>
		<link rel="alternate" type="text/html" href="https://wiki.golem.linux.it/index.php?title=Linux_minimale_per_PC_i386/i486&amp;diff=9969"/>
		<updated>2026-05-15T17:08:10Z</updated>

		<summary type="html">&lt;p&gt;$pooky Hunter: /* Distribuzioni per i386-i486 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Distribuzioni per i486-i586=&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! Distro&lt;br /&gt;
! CPU minima&lt;br /&gt;
! RAM minima&lt;br /&gt;
! Disco/ISO&lt;br /&gt;
! Uso ideale&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [http://delicate-linux.net/ DeLi Linux]&lt;br /&gt;
| i486&lt;br /&gt;
| 8–16 MB&lt;br /&gt;
| ~200 MB installazione&lt;br /&gt;
| Retrocomputing puro, PC anni '90&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.slitaz.org SliTaz]&lt;br /&gt;
| i486&lt;br /&gt;
| 24–64 MB&lt;br /&gt;
| ISO 30–60 MB&lt;br /&gt;
| Pentium II/III molto leggeri&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.tinycorelinux.com Tiny Core Linux]&lt;br /&gt;
| i486DX&lt;br /&gt;
| 46 MB&lt;br /&gt;
| 20–200 MB&lt;br /&gt;
| Minimalismo estremo, appliance&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.puppylinux.com Puppy Linux]&lt;br /&gt;
| Pentium II&lt;br /&gt;
| 128-256 MB&lt;br /&gt;
| 300–500 MB ISO&lt;br /&gt;
| Desktop leggero usabile&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.damnsmalllinux.org  Damn Small Linux 2024]&lt;br /&gt;
| i686&lt;br /&gt;
| 256-512 MB&lt;br /&gt;
| ~700 MB ISO&lt;br /&gt;
| Hardware datato ma moderno&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Distribuzioni per i386-i486=&lt;br /&gt;
Se si tenta di recuperare una macchina particolarmente vecchia possono venire in nostro soccorso delle mini distribuzioni prive di ambiente grafico e talmente compatte da poter essere contenute in un unico floppy.&lt;br /&gt;
&lt;br /&gt;
NB: è stato rimosso il supporto ai 386 nel 2012 (kernel 3.8) ed ai 486 nel 2026 (kernel 7.1)&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! Distribuzione&lt;br /&gt;
! Versione Kernel&lt;br /&gt;
! Supporto avvio&lt;br /&gt;
! CPU minima&lt;br /&gt;
! RAM minima&lt;br /&gt;
! Uso ideale&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.fdlinux.com/download.php FD Linux]&lt;br /&gt;
| 2.4.20&lt;br /&gt;
| 1 floppy&lt;br /&gt;
| 386SX&lt;br /&gt;
| 4 MB&lt;br /&gt;
| DOS/Linux compatto&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.zelow.no/floppyfw floppyfw]&lt;br /&gt;
| 2.4.37.11&lt;br /&gt;
| 1 floppy&lt;br /&gt;
| 386 / 386SX&lt;br /&gt;
| 12 MB&lt;br /&gt;
| Router/firewall embedded (iptables)&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [https://web.archive.org/web/20190312063410/http://chris.silmor.de/hal91/ HAL91]&lt;br /&gt;
| 2.0.39&lt;br /&gt;
| 1 floppy&lt;br /&gt;
| 386&lt;br /&gt;
| 8 MB&lt;br /&gt;
| Network solo con scheda NE2000 ISA&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [https://micheleandreoli.org/public/Software/mulinux// muLinux]&lt;br /&gt;
| 2.0.36&lt;br /&gt;
| 1+ floppy modulari&lt;br /&gt;
| 386SX&lt;br /&gt;
| 4 MB&lt;br /&gt;
| Recupero PC vintage&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [https://sourceforge.net/projects/zool5remastered/ Zool]&lt;br /&gt;
| 2.4.37.11&lt;br /&gt;
| 1 floppy&lt;br /&gt;
| 386&lt;br /&gt;
| 12 MB&lt;br /&gt;
| Networking completo (httpd, ftpd, telnetd)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Buildroot=&lt;br /&gt;
Soluzioni preconfezionate (come quelle sopra elencate) potrebbero non rispondere alle nostre esigenze: kernel datati (2.0, 2.2), driver mancanti o magari mancano proprio dell'applicazione di cui abbiamo bisogno.&lt;br /&gt;
&lt;br /&gt;
In questi casi la soluzione più rapida è quella di costruirsi il proprio sistema Linux personalizzato. Per farlo il metodo più semplice è utilizzare [https://buildroot.org/download.html Buildroot], un tool che permette la cross-compilazione di un ambiente Linux completo di librerie (glibc, uclibc-ng o musl), numerose applicazioni e l'eseguibile busybox.&lt;br /&gt;
&lt;br /&gt;
Questa procedura è analoga a quella usata per la realizzazione di qualsiasi sistema embedded Linux-based: router, decoder, lettory DVD...&lt;br /&gt;
&lt;br /&gt;
Scompattare il tool&lt;br /&gt;
 $ tar -xzvf buildroot-2026.02.tar.gz&lt;br /&gt;
&lt;br /&gt;
Entrare nella directory principale&lt;br /&gt;
 $ cd buildroot-2026.02/&lt;br /&gt;
&lt;br /&gt;
==BusyBox==&lt;br /&gt;
Configurare busybox selezionando i programmi che si ritengono necessari&lt;br /&gt;
 $ make busybox-menuconfig&lt;br /&gt;
&lt;br /&gt;
==Kernel==&lt;br /&gt;
Configurare il kernel per la compilazione&lt;br /&gt;
 $ make linux-menuconfig&lt;br /&gt;
&lt;br /&gt;
Escludere tutto ciò che non è strettamente necessario per risparmiare spazio su disco, quanto segue dovrà essere necessariamente presente per ottenere un sistema minimo avviabile.&lt;br /&gt;
&lt;br /&gt;
* Code maturity level-&amp;gt; Prompt for development&lt;br /&gt;
&lt;br /&gt;
* Processor type and features-&amp;gt; Support for your processor&lt;br /&gt;
&lt;br /&gt;
* General setup-&amp;gt; kernel support for ELF binaries&lt;br /&gt;
&lt;br /&gt;
* Block devices-&amp;gt; RAM disk support&lt;br /&gt;
&lt;br /&gt;
* File systems-&amp;gt; /proc filesystem, tmpfs, ext2&lt;br /&gt;
&lt;br /&gt;
* Character devices-&amp;gt; Virtual terminal&lt;br /&gt;
&lt;br /&gt;
* Character devices-&amp;gt; Support for console on virtual terminal&lt;br /&gt;
&lt;br /&gt;
* Console drivers-&amp;gt; VGA text console&lt;br /&gt;
&lt;br /&gt;
* General setup-&amp;gt; PCI support&lt;br /&gt;
&lt;br /&gt;
* I driver delle schede di rete che interessa supportare (ne, ne2k, rtl8139too, rtl8139c, pcnet32, e1000)&lt;br /&gt;
&lt;br /&gt;
* Iptables se si necessita di un firewall&lt;br /&gt;
&lt;br /&gt;
* Un driver IDE generico (generic ATA) su libata&lt;br /&gt;
&lt;br /&gt;
* Block devices-&amp;gt; Normal PC floppy disk support, se ci interesse il supporto al floppy&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Se si deve limitare al massimo la grandezza dell'immagine del kernel (bzImage) si può scegliere con un algoritmo di compressione come lzma. Questo però aumenterà il consumo di RAM e per macchine molto vecchie come i386 o i486 probabilmente è meglio optare per gz o al massimo bz2.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Configurazione generale==&lt;br /&gt;
 $ make menuconfig&lt;br /&gt;
&lt;br /&gt;
Indicare:&lt;br /&gt;
&lt;br /&gt;
* Architettura di destinazione (i386, i486, i586…)&lt;br /&gt;
&lt;br /&gt;
* Opzioni di compilazione&lt;br /&gt;
&lt;br /&gt;
* Versione del kernel da usare&lt;br /&gt;
&lt;br /&gt;
* Configurazione di partenza del kernel&lt;br /&gt;
 Kernel  ---&amp;gt; Kernel configuration (Use the architecture default configuration)&lt;br /&gt;
&lt;br /&gt;
* Eventuali altri programmi non presenti in busybox (es.: mdev, dropbear, nano, iptables, ncftp, lynx, mutt)&lt;br /&gt;
&lt;br /&gt;
* Si consiglia l'opzione di compilazione gcc '''-Os''' al fine di ridurre al minimo la grandezza dei binari &lt;br /&gt;
&lt;br /&gt;
===Filesystem images===&lt;br /&gt;
Esistono varie tipologie di filesystem da utilizzare per il sistema che verrà compilato: immagini ext2, squashfs, direttamente nel initramfs o semplicemente in un tarball. Nel caso ci interessi costruire un floppy, al fine di sfruttare al meglio lo spazio, consiglio di scegliere ext2 compresso, anche in questo caso con lzma si ottengono filesystem fino al 20% più piccoli rispetto a quelli compressi con bzip2, ma il sistema  necessiterà di maggiore RAM per caricarli (70-80MB). &lt;br /&gt;
&lt;br /&gt;
Terminata la fase di configurazione si può procedere con la compilazione&lt;br /&gt;
 $ make&lt;br /&gt;
&lt;br /&gt;
==output==&lt;br /&gt;
Nella directory buildroot-2026.02/output/images risiede il prodotto finito.&lt;br /&gt;
Se lasciate le impostazioni standard si tratterà di 3 file: bzImage, rootfs.ext2, rootfs.tar.&lt;br /&gt;
&lt;br /&gt;
==Floppy Linux==&lt;br /&gt;
Le dimensioni dei file bzImage e rootfs.i486.ext2.lzma devono essere sufficientemente contenute per entrare su un floppy.&lt;br /&gt;
Nel caso fossero solo di poco più grandi (100-200 KB), si può rimediare con la formattazione non standard del floppy: a 1.72 MB invece che a 1.44MB.&lt;br /&gt;
 $ sudo mknod /dev/fd0u1722 b 2 60&lt;br /&gt;
 $ fdformat /dev/fd0u1722&lt;br /&gt;
 $ mkfs.vfat /dev/fd0u1722&lt;br /&gt;
&lt;br /&gt;
Se non presente creare un mount point per il floppy&lt;br /&gt;
 $ sudo mkdir /mnt/floppy&lt;br /&gt;
&lt;br /&gt;
Montare il floppy&lt;br /&gt;
 $ sudo mount /dev/fd0u1722 /mnt/floppy&lt;br /&gt;
&lt;br /&gt;
Copiarvi i due file&lt;br /&gt;
 $ sudo cp buildroot/output/images/bzImage /mnt/floppy&lt;br /&gt;
 $ sudo cp buildroot/output/images/rootfs.i486.ext2.lzma /mnt/floppy&lt;br /&gt;
&lt;br /&gt;
Adesso occorre installare un boot loader sul floppy. Essendo leggero, semplice da usare e supportando la FAT16 si consiglia di usare syslinux.&lt;br /&gt;
&lt;br /&gt;
Se syslinux non fosse presente sul vostro sistema installatelo con:&lt;br /&gt;
&lt;br /&gt;
 $ sudo apt-get install syslinux&lt;br /&gt;
per sistemi Debian-based&lt;br /&gt;
&lt;br /&gt;
O con&lt;br /&gt;
 # pacman -S syslinux&lt;br /&gt;
su Arch Linux&lt;br /&gt;
&lt;br /&gt;
Con un editor di testo (es. nano) create il file di configurazione per il boot loader: syslinux.cfg&lt;br /&gt;
 $ sudo nano /mnt/floppy/syslinux.cfg&lt;br /&gt;
&lt;br /&gt;
Riportate quanto segue, eventualmente adattandolo alle vostre esigenze:&lt;br /&gt;
&lt;br /&gt;
 default start&lt;br /&gt;
 timeout 5&lt;br /&gt;
 prompt 1&lt;br /&gt;
 label start&lt;br /&gt;
 kernel bzImage&lt;br /&gt;
 append initrd=rootfs.i486.ext2.lzma BOOTDEV=fd0 ramdisk_size=16384 vga=0 root=/dev/ram0&lt;br /&gt;
&lt;br /&gt;
Se è stato usato un altro tipo di filesystem sostituire rootfs.i486.ext2.lzma con rootfs.i486.ext2.bz2, rootfs.i486.ext2.squashfs…&lt;br /&gt;
&lt;br /&gt;
Installare il bootloader sul floppy&lt;br /&gt;
 $ sudo syslinux /dev/fd0&lt;br /&gt;
&lt;br /&gt;
Smontare il floppy&lt;br /&gt;
 $ cd&lt;br /&gt;
 $ sudo umount /mnt/floppy&lt;br /&gt;
&lt;br /&gt;
In caso di necessità di modifiche al ramdisk bisognerà copiarlo sul disco fisso, decomprimerlo, montarlo in loop ed effettuare le modifiche in questo modo:&lt;br /&gt;
 $ sudo mount /mnt/floppy&lt;br /&gt;
 $ sudo cp /mnt/floppy/rootfs.i486.ext2.lzma&lt;br /&gt;
 $ sudo lzma -d rootfs.i486.ext2.lzma&lt;br /&gt;
 $ sudo mkdir /mnt/tmp&lt;br /&gt;
 $ sudo mount -o loop rootfs.i486.ext2 /mnt/tmp&lt;br /&gt;
 $ cd /mnt/tmp&lt;br /&gt;
&lt;br /&gt;
Effettuare le modifiche e poi smontare il tutto&lt;br /&gt;
 $ cd&lt;br /&gt;
 $ sudo umount /mnt/tmp&lt;br /&gt;
&lt;br /&gt;
Ricomprimere il ramdisk e copiarlo sul floppy per sostituire quello vecchio&lt;br /&gt;
 $ sudo lzma -c9 rootfs.i486.ext2 &amp;gt; rootfs.i486.ext2.lzma&lt;br /&gt;
 $ sudo cp rootfs.i486.ext2.lzma /mnt/floppy&lt;br /&gt;
 $ sudo umount /mnt/floppy&lt;br /&gt;
&lt;br /&gt;
Un floppy già pronto con le seguenti caratteristiche ''era'' presente [http://golem.linux.it/files/spookyh/fspooky_v05.tar.xz qui]&lt;br /&gt;
&lt;br /&gt;
* Linux kernel 3.2.9&lt;br /&gt;
&lt;br /&gt;
* Busybox 1.19.4&lt;br /&gt;
&lt;br /&gt;
* Programmi inclusi: ftpd, ncftp, dropbear (ssh client/server), httpd, iptables, dhcp client/server, nc, wget, fdisk.&lt;br /&gt;
&lt;br /&gt;
* Requisiti minimi: i586 (60 MHz), 74 Mb RAM, floppy driver 3,5&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* Hardware supportato: processori i586 compatibili, Bus PCI (niente ISA), Controller Generic ATA disk; schede di rete Novell NE2000 (e cloni), RealTek 8129, Intel PRO/1000 Gigabit Adapter.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Immagine per hard disk==&lt;br /&gt;
Se un floppy è troppo piccolo per le nostre esigenze si può costruire il sistema dentro ad un file d'immagine da copiare sull'hard disk della nostra macchina direttamente con dd. Creiamo quindi un'immagine da 250 MB, che dovrebbe essere più che sufficiente per un sistema testuale&lt;br /&gt;
 dd if=/dev/zero of=output/images/486linux.img bs=1M count=250&lt;br /&gt;
&lt;br /&gt;
Montiamo l'immagine per poter formattare il filesystem e copiarci i dati&lt;br /&gt;
 # losetup -Pf 486linux.img&lt;br /&gt;
 # mkfs.ext2 /dev/loop0p1&lt;br /&gt;
Probabilmente il miglior filesystem per un sistema così vecchio è ext2, si rinuncia al journaling, ma ci si guadagna parecchio in performance.&lt;br /&gt;
 # mkfs.ext2 -m 0 -O none /dev/loop0p1&lt;br /&gt;
&lt;br /&gt;
Montiamo il tutto&lt;br /&gt;
 # mount /dev/loop0p1 /mnt/img&lt;br /&gt;
&lt;br /&gt;
Copiamoci il filesystem ed il kernel&lt;br /&gt;
 # tar xf buildroot-2026.02/output/images/rootfs.tar -C /mnt/img&lt;br /&gt;
 # mkdir -p /mnt/img/boot&lt;br /&gt;
 # cp buildroot-2026.02/output/images/bzImage /mnt/img/boot/bzImage&lt;br /&gt;
&lt;br /&gt;
Come bootloader, anche in questo caso si è optato per il semplicissimo syslinux.&lt;br /&gt;
 sudo pacman -S syslinux&lt;br /&gt;
 sudo extlinux --install /mnt/img/boot/&lt;br /&gt;
&lt;br /&gt;
Configuriamo il bootloader (/mnt/boot/syslinux.cfg)&lt;br /&gt;
 DEFAULT linux&lt;br /&gt;
 timeout 5&lt;br /&gt;
 prompt 1&lt;br /&gt;
 LABEL linux&lt;br /&gt;
    KERNEL /boot/bzImage&lt;br /&gt;
    APPEND root=/dev/sda1 ro&lt;br /&gt;
&lt;br /&gt;
Se ci interessa la tastiera italiana creiamo dal nostro sistema host il file .bmap da far caricare a busybox &lt;br /&gt;
 # loadkeys -qb it &amp;gt; it.bmap&lt;br /&gt;
 # mv it.bmap /mnt/img/etc&lt;br /&gt;
&lt;br /&gt;
===Tastiera italiana===&lt;br /&gt;
Possiamo creare uno script d'avvio tipo ''/etc/init.d/S40keyboard'' per far in modo che il sistema lo carichi automaticamente (ricordatevi di renderlo eseguibile).&lt;br /&gt;
 #!/bin/sh&lt;br /&gt;
 loadkmap &amp;lt; /etc/it.bmap&lt;br /&gt;
&lt;br /&gt;
===Hotplug===&lt;br /&gt;
Per l'hotplug dei moduli occorre aver installato il programma mdev, anche in questo caso converrà scrivere uno script di avvio tipo il seguente (/etc/init.d/S10mdev) &lt;br /&gt;
 #!/bin/sh&lt;br /&gt;
 case &amp;quot;$1&amp;quot; in&lt;br /&gt;
    start)&lt;br /&gt;
        echo &amp;quot;Starting mdev...&amp;quot;&lt;br /&gt;
        # Imposta mdev come gestore degli eventi hotplug&lt;br /&gt;
        echo /sbin/mdev &amp;gt; /proc/sys/kernel/hotplug&lt;br /&gt;
        # Scansiona /sys per creare i device node per l'hardware già presente&lt;br /&gt;
        /sbin/mdev -s&lt;br /&gt;
        # Questo è il &amp;quot;coldplug&amp;quot;: trova tutti i moduli dell'hardware già presente e li carica&lt;br /&gt;
        echo &amp;quot;Loading kernel modules for existing hardware...&amp;quot;&lt;br /&gt;
        find /sys/ -name modalias | xargs sort -u | xargs modprobe -abq&lt;br /&gt;
        ;;&lt;br /&gt;
    stop)&lt;br /&gt;
        echo &amp;quot;Stopping mdev...&amp;quot;&lt;br /&gt;
        ;;&lt;br /&gt;
    *)&lt;br /&gt;
        echo &amp;quot;Usage: $0 {start|stop}&amp;quot;&lt;br /&gt;
        exit 1&lt;br /&gt;
        ;;&lt;br /&gt;
 esac&lt;br /&gt;
[[Category:howto]]&lt;/div&gt;</summary>
		<author><name>$pooky Hunter</name></author>
	</entry>
	<entry>
		<id>https://wiki.golem.linux.it/index.php?title=Linux_minimale_per_PC_i386/i486&amp;diff=9968</id>
		<title>Linux minimale per PC i386/i486</title>
		<link rel="alternate" type="text/html" href="https://wiki.golem.linux.it/index.php?title=Linux_minimale_per_PC_i386/i486&amp;diff=9968"/>
		<updated>2026-05-15T16:59:22Z</updated>

		<summary type="html">&lt;p&gt;$pooky Hunter: /* Distribuzioni per i386-i486 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Distribuzioni per i486-i586=&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! Distro&lt;br /&gt;
! CPU minima&lt;br /&gt;
! RAM minima&lt;br /&gt;
! Disco/ISO&lt;br /&gt;
! Uso ideale&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [http://delicate-linux.net/ DeLi Linux]&lt;br /&gt;
| i486&lt;br /&gt;
| 8–16 MB&lt;br /&gt;
| ~200 MB installazione&lt;br /&gt;
| Retrocomputing puro, PC anni '90&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.slitaz.org SliTaz]&lt;br /&gt;
| i486&lt;br /&gt;
| 24–64 MB&lt;br /&gt;
| ISO 30–60 MB&lt;br /&gt;
| Pentium II/III molto leggeri&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.tinycorelinux.com Tiny Core Linux]&lt;br /&gt;
| i486DX&lt;br /&gt;
| 46 MB&lt;br /&gt;
| 20–200 MB&lt;br /&gt;
| Minimalismo estremo, appliance&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.puppylinux.com Puppy Linux]&lt;br /&gt;
| Pentium II&lt;br /&gt;
| 128-256 MB&lt;br /&gt;
| 300–500 MB ISO&lt;br /&gt;
| Desktop leggero usabile&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.damnsmalllinux.org  Damn Small Linux 2024]&lt;br /&gt;
| i686&lt;br /&gt;
| 256-512 MB&lt;br /&gt;
| ~700 MB ISO&lt;br /&gt;
| Hardware datato ma moderno&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Distribuzioni per i386-i486=&lt;br /&gt;
Se si tenta di recuperare una macchina particolarmente vecchia possono venire in nostro soccorso delle mini distribuzioni prive di ambiente grafico e talmente compatte da poter essere contenute in un unico floppy.&lt;br /&gt;
&lt;br /&gt;
NB: è stato rimosso il supporto ai 386 nel 2012 (kernel 3.8) ed ai 486 nel 2026 (kernel 7.1)&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! Distribuzione&lt;br /&gt;
! Versione Kernel&lt;br /&gt;
! Supporto avvio&lt;br /&gt;
! CPU minima&lt;br /&gt;
! RAM minima&lt;br /&gt;
! Dimensione tipica&lt;br /&gt;
! Uso ideale&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.fdlinux.com/download.php FD Linux]&lt;br /&gt;
| 2.4.20&lt;br /&gt;
| 1 floppy&lt;br /&gt;
| 386SX&lt;br /&gt;
| 4 MB&lt;br /&gt;
| 1.44 MB&lt;br /&gt;
| DOS/Linux compatto&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.zelow.no/floppyfw floppyfw]&lt;br /&gt;
| 2.4.37.11&lt;br /&gt;
| 1 floppy&lt;br /&gt;
| 386 / 386SX&lt;br /&gt;
| 12 MB&lt;br /&gt;
| 1.44 MB&lt;br /&gt;
| Router/firewall embedded (iptables)&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [https://web.archive.org/web/20190312063410/http://chris.silmor.de/hal91/ HAL91]&lt;br /&gt;
| 2.0.39&lt;br /&gt;
| 1 floppy&lt;br /&gt;
| 386&lt;br /&gt;
| 8 MB&lt;br /&gt;
| 1.44 MB&lt;br /&gt;
| Network solo con scheda NE2000 ISA&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [https://micheleandreoli.org/public/Software/mulinux// muLinux]&lt;br /&gt;
| 2.0.36&lt;br /&gt;
| 1+ floppy modulari&lt;br /&gt;
| 386SX&lt;br /&gt;
| 4 MB&lt;br /&gt;
| 1.44 MB base&lt;br /&gt;
| Recupero PC vintage&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [https://sourceforge.net/projects/zool5remastered/ Zool]&lt;br /&gt;
| 2.4.37.11&lt;br /&gt;
| 1 floppy&lt;br /&gt;
| 386&lt;br /&gt;
| 12 MB&lt;br /&gt;
| 1.44 MB&lt;br /&gt;
| Networking completo (httpd, ftpd, telnetd)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Buildroot=&lt;br /&gt;
Soluzioni preconfezionate (come quelle sopra elencate) potrebbero non rispondere alle nostre esigenze: kernel datati (2.0, 2.2), driver mancanti o magari mancano proprio dell'applicazione di cui abbiamo bisogno.&lt;br /&gt;
&lt;br /&gt;
In questi casi la soluzione più rapida è quella di costruirsi il proprio sistema Linux personalizzato. Per farlo il metodo più semplice è utilizzare [https://buildroot.org/download.html Buildroot], un tool che permette la cross-compilazione di un ambiente Linux completo di librerie (glibc, uclibc-ng o musl), numerose applicazioni e l'eseguibile busybox.&lt;br /&gt;
&lt;br /&gt;
Questa procedura è analoga a quella usata per la realizzazione di qualsiasi sistema embedded Linux-based: router, decoder, lettory DVD...&lt;br /&gt;
&lt;br /&gt;
Scompattare il tool&lt;br /&gt;
 $ tar -xzvf buildroot-2026.02.tar.gz&lt;br /&gt;
&lt;br /&gt;
Entrare nella directory principale&lt;br /&gt;
 $ cd buildroot-2026.02/&lt;br /&gt;
&lt;br /&gt;
==BusyBox==&lt;br /&gt;
Configurare busybox selezionando i programmi che si ritengono necessari&lt;br /&gt;
 $ make busybox-menuconfig&lt;br /&gt;
&lt;br /&gt;
==Kernel==&lt;br /&gt;
Configurare il kernel per la compilazione&lt;br /&gt;
 $ make linux-menuconfig&lt;br /&gt;
&lt;br /&gt;
Escludere tutto ciò che non è strettamente necessario per risparmiare spazio su disco, quanto segue dovrà essere necessariamente presente per ottenere un sistema minimo avviabile.&lt;br /&gt;
&lt;br /&gt;
* Code maturity level-&amp;gt; Prompt for development&lt;br /&gt;
&lt;br /&gt;
* Processor type and features-&amp;gt; Support for your processor&lt;br /&gt;
&lt;br /&gt;
* General setup-&amp;gt; kernel support for ELF binaries&lt;br /&gt;
&lt;br /&gt;
* Block devices-&amp;gt; RAM disk support&lt;br /&gt;
&lt;br /&gt;
* File systems-&amp;gt; /proc filesystem, tmpfs, ext2&lt;br /&gt;
&lt;br /&gt;
* Character devices-&amp;gt; Virtual terminal&lt;br /&gt;
&lt;br /&gt;
* Character devices-&amp;gt; Support for console on virtual terminal&lt;br /&gt;
&lt;br /&gt;
* Console drivers-&amp;gt; VGA text console&lt;br /&gt;
&lt;br /&gt;
* General setup-&amp;gt; PCI support&lt;br /&gt;
&lt;br /&gt;
* I driver delle schede di rete che interessa supportare (ne, ne2k, rtl8139too, rtl8139c, pcnet32, e1000)&lt;br /&gt;
&lt;br /&gt;
* Iptables se si necessita di un firewall&lt;br /&gt;
&lt;br /&gt;
* Un driver IDE generico (generic ATA) su libata&lt;br /&gt;
&lt;br /&gt;
* Block devices-&amp;gt; Normal PC floppy disk support, se ci interesse il supporto al floppy&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Se si deve limitare al massimo la grandezza dell'immagine del kernel (bzImage) si può scegliere con un algoritmo di compressione come lzma. Questo però aumenterà il consumo di RAM e per macchine molto vecchie come i386 o i486 probabilmente è meglio optare per gz o al massimo bz2.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Configurazione generale==&lt;br /&gt;
 $ make menuconfig&lt;br /&gt;
&lt;br /&gt;
Indicare:&lt;br /&gt;
&lt;br /&gt;
* Architettura di destinazione (i386, i486, i586…)&lt;br /&gt;
&lt;br /&gt;
* Opzioni di compilazione&lt;br /&gt;
&lt;br /&gt;
* Versione del kernel da usare&lt;br /&gt;
&lt;br /&gt;
* Configurazione di partenza del kernel&lt;br /&gt;
 Kernel  ---&amp;gt; Kernel configuration (Use the architecture default configuration)&lt;br /&gt;
&lt;br /&gt;
* Eventuali altri programmi non presenti in busybox (es.: mdev, dropbear, nano, iptables, ncftp, lynx, mutt)&lt;br /&gt;
&lt;br /&gt;
* Si consiglia l'opzione di compilazione gcc '''-Os''' al fine di ridurre al minimo la grandezza dei binari &lt;br /&gt;
&lt;br /&gt;
===Filesystem images===&lt;br /&gt;
Esistono varie tipologie di filesystem da utilizzare per il sistema che verrà compilato: immagini ext2, squashfs, direttamente nel initramfs o semplicemente in un tarball. Nel caso ci interessi costruire un floppy, al fine di sfruttare al meglio lo spazio, consiglio di scegliere ext2 compresso, anche in questo caso con lzma si ottengono filesystem fino al 20% più piccoli rispetto a quelli compressi con bzip2, ma il sistema  necessiterà di maggiore RAM per caricarli (70-80MB). &lt;br /&gt;
&lt;br /&gt;
Terminata la fase di configurazione si può procedere con la compilazione&lt;br /&gt;
 $ make&lt;br /&gt;
&lt;br /&gt;
==output==&lt;br /&gt;
Nella directory buildroot-2026.02/output/images risiede il prodotto finito.&lt;br /&gt;
Se lasciate le impostazioni standard si tratterà di 3 file: bzImage, rootfs.ext2, rootfs.tar.&lt;br /&gt;
&lt;br /&gt;
==Floppy Linux==&lt;br /&gt;
Le dimensioni dei file bzImage e rootfs.i486.ext2.lzma devono essere sufficientemente contenute per entrare su un floppy.&lt;br /&gt;
Nel caso fossero solo di poco più grandi (100-200 KB), si può rimediare con la formattazione non standard del floppy: a 1.72 MB invece che a 1.44MB.&lt;br /&gt;
 $ sudo mknod /dev/fd0u1722 b 2 60&lt;br /&gt;
 $ fdformat /dev/fd0u1722&lt;br /&gt;
 $ mkfs.vfat /dev/fd0u1722&lt;br /&gt;
&lt;br /&gt;
Se non presente creare un mount point per il floppy&lt;br /&gt;
 $ sudo mkdir /mnt/floppy&lt;br /&gt;
&lt;br /&gt;
Montare il floppy&lt;br /&gt;
 $ sudo mount /dev/fd0u1722 /mnt/floppy&lt;br /&gt;
&lt;br /&gt;
Copiarvi i due file&lt;br /&gt;
 $ sudo cp buildroot/output/images/bzImage /mnt/floppy&lt;br /&gt;
 $ sudo cp buildroot/output/images/rootfs.i486.ext2.lzma /mnt/floppy&lt;br /&gt;
&lt;br /&gt;
Adesso occorre installare un boot loader sul floppy. Essendo leggero, semplice da usare e supportando la FAT16 si consiglia di usare syslinux.&lt;br /&gt;
&lt;br /&gt;
Se syslinux non fosse presente sul vostro sistema installatelo con:&lt;br /&gt;
&lt;br /&gt;
 $ sudo apt-get install syslinux&lt;br /&gt;
per sistemi Debian-based&lt;br /&gt;
&lt;br /&gt;
O con&lt;br /&gt;
 # pacman -S syslinux&lt;br /&gt;
su Arch Linux&lt;br /&gt;
&lt;br /&gt;
Con un editor di testo (es. nano) create il file di configurazione per il boot loader: syslinux.cfg&lt;br /&gt;
 $ sudo nano /mnt/floppy/syslinux.cfg&lt;br /&gt;
&lt;br /&gt;
Riportate quanto segue, eventualmente adattandolo alle vostre esigenze:&lt;br /&gt;
&lt;br /&gt;
 default start&lt;br /&gt;
 timeout 5&lt;br /&gt;
 prompt 1&lt;br /&gt;
 label start&lt;br /&gt;
 kernel bzImage&lt;br /&gt;
 append initrd=rootfs.i486.ext2.lzma BOOTDEV=fd0 ramdisk_size=16384 vga=0 root=/dev/ram0&lt;br /&gt;
&lt;br /&gt;
Se è stato usato un altro tipo di filesystem sostituire rootfs.i486.ext2.lzma con rootfs.i486.ext2.bz2, rootfs.i486.ext2.squashfs…&lt;br /&gt;
&lt;br /&gt;
Installare il bootloader sul floppy&lt;br /&gt;
 $ sudo syslinux /dev/fd0&lt;br /&gt;
&lt;br /&gt;
Smontare il floppy&lt;br /&gt;
 $ cd&lt;br /&gt;
 $ sudo umount /mnt/floppy&lt;br /&gt;
&lt;br /&gt;
In caso di necessità di modifiche al ramdisk bisognerà copiarlo sul disco fisso, decomprimerlo, montarlo in loop ed effettuare le modifiche in questo modo:&lt;br /&gt;
 $ sudo mount /mnt/floppy&lt;br /&gt;
 $ sudo cp /mnt/floppy/rootfs.i486.ext2.lzma&lt;br /&gt;
 $ sudo lzma -d rootfs.i486.ext2.lzma&lt;br /&gt;
 $ sudo mkdir /mnt/tmp&lt;br /&gt;
 $ sudo mount -o loop rootfs.i486.ext2 /mnt/tmp&lt;br /&gt;
 $ cd /mnt/tmp&lt;br /&gt;
&lt;br /&gt;
Effettuare le modifiche e poi smontare il tutto&lt;br /&gt;
 $ cd&lt;br /&gt;
 $ sudo umount /mnt/tmp&lt;br /&gt;
&lt;br /&gt;
Ricomprimere il ramdisk e copiarlo sul floppy per sostituire quello vecchio&lt;br /&gt;
 $ sudo lzma -c9 rootfs.i486.ext2 &amp;gt; rootfs.i486.ext2.lzma&lt;br /&gt;
 $ sudo cp rootfs.i486.ext2.lzma /mnt/floppy&lt;br /&gt;
 $ sudo umount /mnt/floppy&lt;br /&gt;
&lt;br /&gt;
Un floppy già pronto con le seguenti caratteristiche ''era'' presente [http://golem.linux.it/files/spookyh/fspooky_v05.tar.xz qui]&lt;br /&gt;
&lt;br /&gt;
* Linux kernel 3.2.9&lt;br /&gt;
&lt;br /&gt;
* Busybox 1.19.4&lt;br /&gt;
&lt;br /&gt;
* Programmi inclusi: ftpd, ncftp, dropbear (ssh client/server), httpd, iptables, dhcp client/server, nc, wget, fdisk.&lt;br /&gt;
&lt;br /&gt;
* Requisiti minimi: i586 (60 MHz), 74 Mb RAM, floppy driver 3,5&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* Hardware supportato: processori i586 compatibili, Bus PCI (niente ISA), Controller Generic ATA disk; schede di rete Novell NE2000 (e cloni), RealTek 8129, Intel PRO/1000 Gigabit Adapter.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Immagine per hard disk==&lt;br /&gt;
Se un floppy è troppo piccolo per le nostre esigenze si può costruire il sistema dentro ad un file d'immagine da copiare sull'hard disk della nostra macchina direttamente con dd. Creiamo quindi un'immagine da 250 MB, che dovrebbe essere più che sufficiente per un sistema testuale&lt;br /&gt;
 dd if=/dev/zero of=output/images/486linux.img bs=1M count=250&lt;br /&gt;
&lt;br /&gt;
Montiamo l'immagine per poter formattare il filesystem e copiarci i dati&lt;br /&gt;
 # losetup -Pf 486linux.img&lt;br /&gt;
 # mkfs.ext2 /dev/loop0p1&lt;br /&gt;
Probabilmente il miglior filesystem per un sistema così vecchio è ext2, si rinuncia al journaling, ma ci si guadagna parecchio in performance.&lt;br /&gt;
 # mkfs.ext2 -m 0 -O none /dev/loop0p1&lt;br /&gt;
&lt;br /&gt;
Montiamo il tutto&lt;br /&gt;
 # mount /dev/loop0p1 /mnt/img&lt;br /&gt;
&lt;br /&gt;
Copiamoci il filesystem ed il kernel&lt;br /&gt;
 # tar xf buildroot-2026.02/output/images/rootfs.tar -C /mnt/img&lt;br /&gt;
 # mkdir -p /mnt/img/boot&lt;br /&gt;
 # cp buildroot-2026.02/output/images/bzImage /mnt/img/boot/bzImage&lt;br /&gt;
&lt;br /&gt;
Come bootloader, anche in questo caso si è optato per il semplicissimo syslinux.&lt;br /&gt;
 sudo pacman -S syslinux&lt;br /&gt;
 sudo extlinux --install /mnt/img/boot/&lt;br /&gt;
&lt;br /&gt;
Configuriamo il bootloader (/mnt/boot/syslinux.cfg)&lt;br /&gt;
 DEFAULT linux&lt;br /&gt;
 timeout 5&lt;br /&gt;
 prompt 1&lt;br /&gt;
 LABEL linux&lt;br /&gt;
    KERNEL /boot/bzImage&lt;br /&gt;
    APPEND root=/dev/sda1 ro&lt;br /&gt;
&lt;br /&gt;
Se ci interessa la tastiera italiana creiamo dal nostro sistema host il file .bmap da far caricare a busybox &lt;br /&gt;
 # loadkeys -qb it &amp;gt; it.bmap&lt;br /&gt;
 # mv it.bmap /mnt/img/etc&lt;br /&gt;
&lt;br /&gt;
===Tastiera italiana===&lt;br /&gt;
Possiamo creare uno script d'avvio tipo ''/etc/init.d/S40keyboard'' per far in modo che il sistema lo carichi automaticamente (ricordatevi di renderlo eseguibile).&lt;br /&gt;
 #!/bin/sh&lt;br /&gt;
 loadkmap &amp;lt; /etc/it.bmap&lt;br /&gt;
&lt;br /&gt;
===Hotplug===&lt;br /&gt;
Per l'hotplug dei moduli occorre aver installato il programma mdev, anche in questo caso converrà scrivere uno script di avvio tipo il seguente (/etc/init.d/S10mdev) &lt;br /&gt;
 #!/bin/sh&lt;br /&gt;
 case &amp;quot;$1&amp;quot; in&lt;br /&gt;
    start)&lt;br /&gt;
        echo &amp;quot;Starting mdev...&amp;quot;&lt;br /&gt;
        # Imposta mdev come gestore degli eventi hotplug&lt;br /&gt;
        echo /sbin/mdev &amp;gt; /proc/sys/kernel/hotplug&lt;br /&gt;
        # Scansiona /sys per creare i device node per l'hardware già presente&lt;br /&gt;
        /sbin/mdev -s&lt;br /&gt;
        # Questo è il &amp;quot;coldplug&amp;quot;: trova tutti i moduli dell'hardware già presente e li carica&lt;br /&gt;
        echo &amp;quot;Loading kernel modules for existing hardware...&amp;quot;&lt;br /&gt;
        find /sys/ -name modalias | xargs sort -u | xargs modprobe -abq&lt;br /&gt;
        ;;&lt;br /&gt;
    stop)&lt;br /&gt;
        echo &amp;quot;Stopping mdev...&amp;quot;&lt;br /&gt;
        ;;&lt;br /&gt;
    *)&lt;br /&gt;
        echo &amp;quot;Usage: $0 {start|stop}&amp;quot;&lt;br /&gt;
        exit 1&lt;br /&gt;
        ;;&lt;br /&gt;
 esac&lt;br /&gt;
[[Category:howto]]&lt;/div&gt;</summary>
		<author><name>$pooky Hunter</name></author>
	</entry>
	<entry>
		<id>https://wiki.golem.linux.it/index.php?title=Linux_minimale_per_PC_i386/i486&amp;diff=9967</id>
		<title>Linux minimale per PC i386/i486</title>
		<link rel="alternate" type="text/html" href="https://wiki.golem.linux.it/index.php?title=Linux_minimale_per_PC_i386/i486&amp;diff=9967"/>
		<updated>2026-05-15T14:08:45Z</updated>

		<summary type="html">&lt;p&gt;$pooky Hunter: /* Distribuzioni per i386-i486 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Distribuzioni per i486-i586=&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! Distro&lt;br /&gt;
! CPU minima&lt;br /&gt;
! RAM minima&lt;br /&gt;
! Disco/ISO&lt;br /&gt;
! Uso ideale&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [http://delicate-linux.net/ DeLi Linux]&lt;br /&gt;
| i486&lt;br /&gt;
| 8–16 MB&lt;br /&gt;
| ~200 MB installazione&lt;br /&gt;
| Retrocomputing puro, PC anni '90&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.slitaz.org SliTaz]&lt;br /&gt;
| i486&lt;br /&gt;
| 24–64 MB&lt;br /&gt;
| ISO 30–60 MB&lt;br /&gt;
| Pentium II/III molto leggeri&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.tinycorelinux.com Tiny Core Linux]&lt;br /&gt;
| i486DX&lt;br /&gt;
| 46 MB&lt;br /&gt;
| 20–200 MB&lt;br /&gt;
| Minimalismo estremo, appliance&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.puppylinux.com Puppy Linux]&lt;br /&gt;
| Pentium II&lt;br /&gt;
| 128-256 MB&lt;br /&gt;
| 300–500 MB ISO&lt;br /&gt;
| Desktop leggero usabile&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.damnsmalllinux.org  Damn Small Linux 2024]&lt;br /&gt;
| i686&lt;br /&gt;
| 256-512 MB&lt;br /&gt;
| ~700 MB ISO&lt;br /&gt;
| Hardware datato ma moderno&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Distribuzioni per i386-i486=&lt;br /&gt;
Se si tenta di recuperare una macchina particolarmente vecchia possono venire in nostro soccorso delle mini distribuzioni prive di ambiente grafico e talmente compatte da poter essere contenute in un unico floppy.&lt;br /&gt;
&lt;br /&gt;
NB: è stato rimosso il supporto ai 386 nel 2012 (kernel 3.8) ed ai 486 nel 2026 (kernel 7.1)&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! Distribuzione&lt;br /&gt;
! Versione Kernel&lt;br /&gt;
! Supporto avvio&lt;br /&gt;
! CPU minima&lt;br /&gt;
! RAM minima&lt;br /&gt;
! Dimensione tipica&lt;br /&gt;
! Uso ideale&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [https://krzysztofjankowski.com/floppinux/ FLOPPINUX]&lt;br /&gt;
| 6.14.11&lt;br /&gt;
| 1 floppy&lt;br /&gt;
| 486DX&lt;br /&gt;
| 20 MB&lt;br /&gt;
| 1.44 MB&lt;br /&gt;
| Mini Linux educativo/sperimentale&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/snacsnoc/fluxflop/releases Fluxflop]&lt;br /&gt;
| 6.9.3&lt;br /&gt;
| 1–2 floppy&lt;br /&gt;
| 486&lt;br /&gt;
| ~4 MB&lt;br /&gt;
| 1.44–2.88 MB&lt;br /&gt;
| Networking minimale&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.fdlinux.com/download.php FD Linux]&lt;br /&gt;
| 2.4.20&lt;br /&gt;
| 1 floppy&lt;br /&gt;
| 386SX&lt;br /&gt;
| 4 MB&lt;br /&gt;
| 1.44 MB&lt;br /&gt;
| DOS/Linux compatto&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.zelow.no/floppyfw floppyfw]&lt;br /&gt;
| 2.4.37.11&lt;br /&gt;
| 1 floppy&lt;br /&gt;
| 386 / 386SX&lt;br /&gt;
| 12 MB&lt;br /&gt;
| 1.44 MB&lt;br /&gt;
| Router/firewall embedded (iptables)&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [https://web.archive.org/web/20190312063410/http://chris.silmor.de/hal91/ HAL91]&lt;br /&gt;
| 2.0.39&lt;br /&gt;
| 1 floppy&lt;br /&gt;
| 386&lt;br /&gt;
| 8 MB&lt;br /&gt;
| 1.44 MB&lt;br /&gt;
| Network solo con scheda NE2000 ISA&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [https://micheleandreoli.org/public/Software/mulinux// muLinux]&lt;br /&gt;
| 2.0.36&lt;br /&gt;
| 1+ floppy modulari&lt;br /&gt;
| 386SX&lt;br /&gt;
| 4 MB&lt;br /&gt;
| 1.44 MB base&lt;br /&gt;
| Recupero PC vintage&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [https://sourceforge.net/projects/zool5remastered/ Zool]&lt;br /&gt;
| 2.4.37.11&lt;br /&gt;
| 1 floppy&lt;br /&gt;
| 386&lt;br /&gt;
| 12 MB&lt;br /&gt;
| 1.44 MB&lt;br /&gt;
| Networking completo (httpd, ftpd, telnetd)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Buildroot=&lt;br /&gt;
Soluzioni preconfezionate (come quelle sopra elencate) potrebbero non rispondere alle nostre esigenze: kernel datati (2.0, 2.2), driver mancanti o magari mancano proprio dell'applicazione di cui abbiamo bisogno.&lt;br /&gt;
&lt;br /&gt;
In questi casi la soluzione più rapida è quella di costruirsi il proprio sistema Linux personalizzato. Per farlo il metodo più semplice è utilizzare [https://buildroot.org/download.html Buildroot], un tool che permette la cross-compilazione di un ambiente Linux completo di librerie (glibc, uclibc-ng o musl), numerose applicazioni e l'eseguibile busybox.&lt;br /&gt;
&lt;br /&gt;
Questa procedura è analoga a quella usata per la realizzazione di qualsiasi sistema embedded Linux-based: router, decoder, lettory DVD...&lt;br /&gt;
&lt;br /&gt;
Scompattare il tool&lt;br /&gt;
 $ tar -xzvf buildroot-2026.02.tar.gz&lt;br /&gt;
&lt;br /&gt;
Entrare nella directory principale&lt;br /&gt;
 $ cd buildroot-2026.02/&lt;br /&gt;
&lt;br /&gt;
==BusyBox==&lt;br /&gt;
Configurare busybox selezionando i programmi che si ritengono necessari&lt;br /&gt;
 $ make busybox-menuconfig&lt;br /&gt;
&lt;br /&gt;
==Kernel==&lt;br /&gt;
Configurare il kernel per la compilazione&lt;br /&gt;
 $ make linux-menuconfig&lt;br /&gt;
&lt;br /&gt;
Escludere tutto ciò che non è strettamente necessario per risparmiare spazio su disco, quanto segue dovrà essere necessariamente presente per ottenere un sistema minimo avviabile.&lt;br /&gt;
&lt;br /&gt;
* Code maturity level-&amp;gt; Prompt for development&lt;br /&gt;
&lt;br /&gt;
* Processor type and features-&amp;gt; Support for your processor&lt;br /&gt;
&lt;br /&gt;
* General setup-&amp;gt; kernel support for ELF binaries&lt;br /&gt;
&lt;br /&gt;
* Block devices-&amp;gt; RAM disk support&lt;br /&gt;
&lt;br /&gt;
* File systems-&amp;gt; /proc filesystem, tmpfs, ext2&lt;br /&gt;
&lt;br /&gt;
* Character devices-&amp;gt; Virtual terminal&lt;br /&gt;
&lt;br /&gt;
* Character devices-&amp;gt; Support for console on virtual terminal&lt;br /&gt;
&lt;br /&gt;
* Console drivers-&amp;gt; VGA text console&lt;br /&gt;
&lt;br /&gt;
* General setup-&amp;gt; PCI support&lt;br /&gt;
&lt;br /&gt;
* I driver delle schede di rete che interessa supportare (ne, ne2k, rtl8139too, rtl8139c, pcnet32, e1000)&lt;br /&gt;
&lt;br /&gt;
* Iptables se si necessita di un firewall&lt;br /&gt;
&lt;br /&gt;
* Un driver IDE generico (generic ATA) su libata&lt;br /&gt;
&lt;br /&gt;
* Block devices-&amp;gt; Normal PC floppy disk support, se ci interesse il supporto al floppy&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Se si deve limitare al massimo la grandezza dell'immagine del kernel (bzImage) si può scegliere con un algoritmo di compressione come lzma. Questo però aumenterà il consumo di RAM e per macchine molto vecchie come i386 o i486 probabilmente è meglio optare per gz o al massimo bz2.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Configurazione generale==&lt;br /&gt;
 $ make menuconfig&lt;br /&gt;
&lt;br /&gt;
Indicare:&lt;br /&gt;
&lt;br /&gt;
* Architettura di destinazione (i386, i486, i586…)&lt;br /&gt;
&lt;br /&gt;
* Opzioni di compilazione&lt;br /&gt;
&lt;br /&gt;
* Versione del kernel da usare&lt;br /&gt;
&lt;br /&gt;
* Configurazione di partenza del kernel&lt;br /&gt;
 Kernel  ---&amp;gt; Kernel configuration (Use the architecture default configuration)&lt;br /&gt;
&lt;br /&gt;
* Eventuali altri programmi non presenti in busybox (es.: mdev, dropbear, nano, iptables, ncftp, lynx, mutt)&lt;br /&gt;
&lt;br /&gt;
* Si consiglia l'opzione di compilazione gcc '''-Os''' al fine di ridurre al minimo la grandezza dei binari &lt;br /&gt;
&lt;br /&gt;
===Filesystem images===&lt;br /&gt;
Esistono varie tipologie di filesystem da utilizzare per il sistema che verrà compilato: immagini ext2, squashfs, direttamente nel initramfs o semplicemente in un tarball. Nel caso ci interessi costruire un floppy, al fine di sfruttare al meglio lo spazio, consiglio di scegliere ext2 compresso, anche in questo caso con lzma si ottengono filesystem fino al 20% più piccoli rispetto a quelli compressi con bzip2, ma il sistema  necessiterà di maggiore RAM per caricarli (70-80MB). &lt;br /&gt;
&lt;br /&gt;
Terminata la fase di configurazione si può procedere con la compilazione&lt;br /&gt;
 $ make&lt;br /&gt;
&lt;br /&gt;
==output==&lt;br /&gt;
Nella directory buildroot-2026.02/output/images risiede il prodotto finito.&lt;br /&gt;
Se lasciate le impostazioni standard si tratterà di 3 file: bzImage, rootfs.ext2, rootfs.tar.&lt;br /&gt;
&lt;br /&gt;
==Floppy Linux==&lt;br /&gt;
Le dimensioni dei file bzImage e rootfs.i486.ext2.lzma devono essere sufficientemente contenute per entrare su un floppy.&lt;br /&gt;
Nel caso fossero solo di poco più grandi (100-200 KB), si può rimediare con la formattazione non standard del floppy: a 1.72 MB invece che a 1.44MB.&lt;br /&gt;
 $ sudo mknod /dev/fd0u1722 b 2 60&lt;br /&gt;
 $ fdformat /dev/fd0u1722&lt;br /&gt;
 $ mkfs.vfat /dev/fd0u1722&lt;br /&gt;
&lt;br /&gt;
Se non presente creare un mount point per il floppy&lt;br /&gt;
 $ sudo mkdir /mnt/floppy&lt;br /&gt;
&lt;br /&gt;
Montare il floppy&lt;br /&gt;
 $ sudo mount /dev/fd0u1722 /mnt/floppy&lt;br /&gt;
&lt;br /&gt;
Copiarvi i due file&lt;br /&gt;
 $ sudo cp buildroot/output/images/bzImage /mnt/floppy&lt;br /&gt;
 $ sudo cp buildroot/output/images/rootfs.i486.ext2.lzma /mnt/floppy&lt;br /&gt;
&lt;br /&gt;
Adesso occorre installare un boot loader sul floppy. Essendo leggero, semplice da usare e supportando la FAT16 si consiglia di usare syslinux.&lt;br /&gt;
&lt;br /&gt;
Se syslinux non fosse presente sul vostro sistema installatelo con:&lt;br /&gt;
&lt;br /&gt;
 $ sudo apt-get install syslinux&lt;br /&gt;
per sistemi Debian-based&lt;br /&gt;
&lt;br /&gt;
O con&lt;br /&gt;
 # pacman -S syslinux&lt;br /&gt;
su Arch Linux&lt;br /&gt;
&lt;br /&gt;
Con un editor di testo (es. nano) create il file di configurazione per il boot loader: syslinux.cfg&lt;br /&gt;
 $ sudo nano /mnt/floppy/syslinux.cfg&lt;br /&gt;
&lt;br /&gt;
Riportate quanto segue, eventualmente adattandolo alle vostre esigenze:&lt;br /&gt;
&lt;br /&gt;
 default start&lt;br /&gt;
 timeout 5&lt;br /&gt;
 prompt 1&lt;br /&gt;
 label start&lt;br /&gt;
 kernel bzImage&lt;br /&gt;
 append initrd=rootfs.i486.ext2.lzma BOOTDEV=fd0 ramdisk_size=16384 vga=0 root=/dev/ram0&lt;br /&gt;
&lt;br /&gt;
Se è stato usato un altro tipo di filesystem sostituire rootfs.i486.ext2.lzma con rootfs.i486.ext2.bz2, rootfs.i486.ext2.squashfs…&lt;br /&gt;
&lt;br /&gt;
Installare il bootloader sul floppy&lt;br /&gt;
 $ sudo syslinux /dev/fd0&lt;br /&gt;
&lt;br /&gt;
Smontare il floppy&lt;br /&gt;
 $ cd&lt;br /&gt;
 $ sudo umount /mnt/floppy&lt;br /&gt;
&lt;br /&gt;
In caso di necessità di modifiche al ramdisk bisognerà copiarlo sul disco fisso, decomprimerlo, montarlo in loop ed effettuare le modifiche in questo modo:&lt;br /&gt;
 $ sudo mount /mnt/floppy&lt;br /&gt;
 $ sudo cp /mnt/floppy/rootfs.i486.ext2.lzma&lt;br /&gt;
 $ sudo lzma -d rootfs.i486.ext2.lzma&lt;br /&gt;
 $ sudo mkdir /mnt/tmp&lt;br /&gt;
 $ sudo mount -o loop rootfs.i486.ext2 /mnt/tmp&lt;br /&gt;
 $ cd /mnt/tmp&lt;br /&gt;
&lt;br /&gt;
Effettuare le modifiche e poi smontare il tutto&lt;br /&gt;
 $ cd&lt;br /&gt;
 $ sudo umount /mnt/tmp&lt;br /&gt;
&lt;br /&gt;
Ricomprimere il ramdisk e copiarlo sul floppy per sostituire quello vecchio&lt;br /&gt;
 $ sudo lzma -c9 rootfs.i486.ext2 &amp;gt; rootfs.i486.ext2.lzma&lt;br /&gt;
 $ sudo cp rootfs.i486.ext2.lzma /mnt/floppy&lt;br /&gt;
 $ sudo umount /mnt/floppy&lt;br /&gt;
&lt;br /&gt;
Un floppy già pronto con le seguenti caratteristiche ''era'' presente [http://golem.linux.it/files/spookyh/fspooky_v05.tar.xz qui]&lt;br /&gt;
&lt;br /&gt;
* Linux kernel 3.2.9&lt;br /&gt;
&lt;br /&gt;
* Busybox 1.19.4&lt;br /&gt;
&lt;br /&gt;
* Programmi inclusi: ftpd, ncftp, dropbear (ssh client/server), httpd, iptables, dhcp client/server, nc, wget, fdisk.&lt;br /&gt;
&lt;br /&gt;
* Requisiti minimi: i586 (60 MHz), 74 Mb RAM, floppy driver 3,5&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* Hardware supportato: processori i586 compatibili, Bus PCI (niente ISA), Controller Generic ATA disk; schede di rete Novell NE2000 (e cloni), RealTek 8129, Intel PRO/1000 Gigabit Adapter.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Immagine per hard disk==&lt;br /&gt;
Se un floppy è troppo piccolo per le nostre esigenze si può costruire il sistema dentro ad un file d'immagine da copiare sull'hard disk della nostra macchina direttamente con dd. Creiamo quindi un'immagine da 250 MB, che dovrebbe essere più che sufficiente per un sistema testuale&lt;br /&gt;
 dd if=/dev/zero of=output/images/486linux.img bs=1M count=250&lt;br /&gt;
&lt;br /&gt;
Montiamo l'immagine per poter formattare il filesystem e copiarci i dati&lt;br /&gt;
 # losetup -Pf 486linux.img&lt;br /&gt;
 # mkfs.ext2 /dev/loop0p1&lt;br /&gt;
Probabilmente il miglior filesystem per un sistema così vecchio è ext2, si rinuncia al journaling, ma ci si guadagna parecchio in performance.&lt;br /&gt;
 # mkfs.ext2 -m 0 -O none /dev/loop0p1&lt;br /&gt;
&lt;br /&gt;
Montiamo il tutto&lt;br /&gt;
 # mount /dev/loop0p1 /mnt/img&lt;br /&gt;
&lt;br /&gt;
Copiamoci il filesystem ed il kernel&lt;br /&gt;
 # tar xf buildroot-2026.02/output/images/rootfs.tar -C /mnt/img&lt;br /&gt;
 # mkdir -p /mnt/img/boot&lt;br /&gt;
 # cp buildroot-2026.02/output/images/bzImage /mnt/img/boot/bzImage&lt;br /&gt;
&lt;br /&gt;
Come bootloader, anche in questo caso si è optato per il semplicissimo syslinux.&lt;br /&gt;
 sudo pacman -S syslinux&lt;br /&gt;
 sudo extlinux --install /mnt/img/boot/&lt;br /&gt;
&lt;br /&gt;
Configuriamo il bootloader (/mnt/boot/syslinux.cfg)&lt;br /&gt;
 DEFAULT linux&lt;br /&gt;
 timeout 5&lt;br /&gt;
 prompt 1&lt;br /&gt;
 LABEL linux&lt;br /&gt;
    KERNEL /boot/bzImage&lt;br /&gt;
    APPEND root=/dev/sda1 ro&lt;br /&gt;
&lt;br /&gt;
Se ci interessa la tastiera italiana creiamo dal nostro sistema host il file .bmap da far caricare a busybox &lt;br /&gt;
 # loadkeys -qb it &amp;gt; it.bmap&lt;br /&gt;
 # mv it.bmap /mnt/img/etc&lt;br /&gt;
&lt;br /&gt;
===Tastiera italiana===&lt;br /&gt;
Possiamo creare uno script d'avvio tipo ''/etc/init.d/S40keyboard'' per far in modo che il sistema lo carichi automaticamente (ricordatevi di renderlo eseguibile).&lt;br /&gt;
 #!/bin/sh&lt;br /&gt;
 loadkmap &amp;lt; /etc/it.bmap&lt;br /&gt;
&lt;br /&gt;
===Hotplug===&lt;br /&gt;
Per l'hotplug dei moduli occorre aver installato il programma mdev, anche in questo caso converrà scrivere uno script di avvio tipo il seguente (/etc/init.d/S10mdev) &lt;br /&gt;
 #!/bin/sh&lt;br /&gt;
 case &amp;quot;$1&amp;quot; in&lt;br /&gt;
    start)&lt;br /&gt;
        echo &amp;quot;Starting mdev...&amp;quot;&lt;br /&gt;
        # Imposta mdev come gestore degli eventi hotplug&lt;br /&gt;
        echo /sbin/mdev &amp;gt; /proc/sys/kernel/hotplug&lt;br /&gt;
        # Scansiona /sys per creare i device node per l'hardware già presente&lt;br /&gt;
        /sbin/mdev -s&lt;br /&gt;
        # Questo è il &amp;quot;coldplug&amp;quot;: trova tutti i moduli dell'hardware già presente e li carica&lt;br /&gt;
        echo &amp;quot;Loading kernel modules for existing hardware...&amp;quot;&lt;br /&gt;
        find /sys/ -name modalias | xargs sort -u | xargs modprobe -abq&lt;br /&gt;
        ;;&lt;br /&gt;
    stop)&lt;br /&gt;
        echo &amp;quot;Stopping mdev...&amp;quot;&lt;br /&gt;
        ;;&lt;br /&gt;
    *)&lt;br /&gt;
        echo &amp;quot;Usage: $0 {start|stop}&amp;quot;&lt;br /&gt;
        exit 1&lt;br /&gt;
        ;;&lt;br /&gt;
 esac&lt;br /&gt;
[[Category:howto]]&lt;/div&gt;</summary>
		<author><name>$pooky Hunter</name></author>
	</entry>
	<entry>
		<id>https://wiki.golem.linux.it/index.php?title=Linux_minimale_per_PC_i386/i486&amp;diff=9966</id>
		<title>Linux minimale per PC i386/i486</title>
		<link rel="alternate" type="text/html" href="https://wiki.golem.linux.it/index.php?title=Linux_minimale_per_PC_i386/i486&amp;diff=9966"/>
		<updated>2026-05-15T13:46:04Z</updated>

		<summary type="html">&lt;p&gt;$pooky Hunter: /* Distribuzioni per i386-i486 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Distribuzioni per i486-i586=&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! Distro&lt;br /&gt;
! CPU minima&lt;br /&gt;
! RAM minima&lt;br /&gt;
! Disco/ISO&lt;br /&gt;
! Uso ideale&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [http://delicate-linux.net/ DeLi Linux]&lt;br /&gt;
| i486&lt;br /&gt;
| 8–16 MB&lt;br /&gt;
| ~200 MB installazione&lt;br /&gt;
| Retrocomputing puro, PC anni '90&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.slitaz.org SliTaz]&lt;br /&gt;
| i486&lt;br /&gt;
| 24–64 MB&lt;br /&gt;
| ISO 30–60 MB&lt;br /&gt;
| Pentium II/III molto leggeri&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.tinycorelinux.com Tiny Core Linux]&lt;br /&gt;
| i486DX&lt;br /&gt;
| 46 MB&lt;br /&gt;
| 20–200 MB&lt;br /&gt;
| Minimalismo estremo, appliance&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.puppylinux.com Puppy Linux]&lt;br /&gt;
| Pentium II&lt;br /&gt;
| 128-256 MB&lt;br /&gt;
| 300–500 MB ISO&lt;br /&gt;
| Desktop leggero usabile&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.damnsmalllinux.org  Damn Small Linux 2024]&lt;br /&gt;
| i686&lt;br /&gt;
| 256-512 MB&lt;br /&gt;
| ~700 MB ISO&lt;br /&gt;
| Hardware datato ma moderno&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Distribuzioni per i386-i486=&lt;br /&gt;
Se si tenta di recuperare una macchina particolarmente vecchia possono venire in nostro soccorso delle mini distribuzioni prive di ambiente grafico e talmente compatte da poter essere contenute in un unico floppy.&lt;br /&gt;
&lt;br /&gt;
NB: è stato rimosso il supporto ai 386 nel 2012 (kernel 3.8) ed ai 486 nel 2026 (kernel 7.1)&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! Distribuzione&lt;br /&gt;
! Versione Kernel&lt;br /&gt;
! Supporto avvio&lt;br /&gt;
! CPU minima&lt;br /&gt;
! RAM minima&lt;br /&gt;
! Dimensione tipica&lt;br /&gt;
! Uso ideale&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [https://krzysztofjankowski.com/floppinux/ FLOPPINUX]&lt;br /&gt;
| 6.14.11&lt;br /&gt;
| 1 floppy&lt;br /&gt;
| 486DX&lt;br /&gt;
| 20 MB&lt;br /&gt;
| 1.44 MB&lt;br /&gt;
| Mini Linux educativo/sperimentale&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/snacsnoc/fluxflop/releases Fluxflop]&lt;br /&gt;
| 6.9.3&lt;br /&gt;
| 1–2 floppy&lt;br /&gt;
| 486&lt;br /&gt;
| ~4 MB&lt;br /&gt;
| 1.44–2.88 MB&lt;br /&gt;
| Networking minimale&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.fdlinux.com/download.php FD Linux]&lt;br /&gt;
| 2.4.20&lt;br /&gt;
| 1 floppy&lt;br /&gt;
| 386SX&lt;br /&gt;
| 4 MB&lt;br /&gt;
| 1.44 MB&lt;br /&gt;
| DOS/Linux compatto&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.zelow.no/floppyfw floppyfw]&lt;br /&gt;
| 2.4.37.9&lt;br /&gt;
| 1 floppy&lt;br /&gt;
| 386 / 386SX&lt;br /&gt;
| 12 MB&lt;br /&gt;
| 1.44 MB&lt;br /&gt;
| Router/firewall embedded&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [https://web.archive.org/web/20190312063410/http://chris.silmor.de/hal91/ HAL91]&lt;br /&gt;
| 2.0.36&lt;br /&gt;
| 1 floppy&lt;br /&gt;
| 386&lt;br /&gt;
| 8 MB&lt;br /&gt;
| 1.44 MB&lt;br /&gt;
| Esperimenti ultra-minimali&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [https://micheleandreoli.org/public/Software/mulinux// muLinux]&lt;br /&gt;
| 2.0.36&lt;br /&gt;
| 1+ floppy modulari&lt;br /&gt;
| 386SX&lt;br /&gt;
| 4 MB&lt;br /&gt;
| 1.44 MB base&lt;br /&gt;
| Recupero PC vintage&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [http://smartlinux.sourceforge.net S.M.A.R.T. Linux]&lt;br /&gt;
| 2.4.26&lt;br /&gt;
| 1 floppy&lt;br /&gt;
| 386&lt;br /&gt;
| 4–8 MB&lt;br /&gt;
| 1.44 MB&lt;br /&gt;
| Toolkit floppy generale, no network&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [http://distro.ibiblio.org/polypux/external/smalllinux/ Small Linux]&lt;br /&gt;
| 2.0.0&lt;br /&gt;
| 2 floppy&lt;br /&gt;
| 386&lt;br /&gt;
| 4–8 MB&lt;br /&gt;
| ~2 MB&lt;br /&gt;
| Sistema Linux minimale&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceforge.net/projects/trinux/files/ Trinux]&lt;br /&gt;
| 2.4.21&lt;br /&gt;
| 1–2 floppy&lt;br /&gt;
| 486&lt;br /&gt;
| 12 MB&lt;br /&gt;
| 1.44–3 MB&lt;br /&gt;
| Sicurezza/network auditing&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [https://sourceforge.net/projects/zool5remastered/ Zool]&lt;br /&gt;
| 2.4.37.11&lt;br /&gt;
| 1 floppy&lt;br /&gt;
| 386&lt;br /&gt;
| 12 MB&lt;br /&gt;
| 1.44 MB&lt;br /&gt;
| Linux ultra-compatto, networking completo&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Buildroot=&lt;br /&gt;
Soluzioni preconfezionate (come quelle sopra elencate) potrebbero non rispondere alle nostre esigenze: kernel datati (2.0, 2.2), driver mancanti o magari mancano proprio dell'applicazione di cui abbiamo bisogno.&lt;br /&gt;
&lt;br /&gt;
In questi casi la soluzione più rapida è quella di costruirsi il proprio sistema Linux personalizzato. Per farlo il metodo più semplice è utilizzare [https://buildroot.org/download.html Buildroot], un tool che permette la cross-compilazione di un ambiente Linux completo di librerie (glibc, uclibc-ng o musl), numerose applicazioni e l'eseguibile busybox.&lt;br /&gt;
&lt;br /&gt;
Questa procedura è analoga a quella usata per la realizzazione di qualsiasi sistema embedded Linux-based: router, decoder, lettory DVD...&lt;br /&gt;
&lt;br /&gt;
Scompattare il tool&lt;br /&gt;
 $ tar -xzvf buildroot-2026.02.tar.gz&lt;br /&gt;
&lt;br /&gt;
Entrare nella directory principale&lt;br /&gt;
 $ cd buildroot-2026.02/&lt;br /&gt;
&lt;br /&gt;
==BusyBox==&lt;br /&gt;
Configurare busybox selezionando i programmi che si ritengono necessari&lt;br /&gt;
 $ make busybox-menuconfig&lt;br /&gt;
&lt;br /&gt;
==Kernel==&lt;br /&gt;
Configurare il kernel per la compilazione&lt;br /&gt;
 $ make linux-menuconfig&lt;br /&gt;
&lt;br /&gt;
Escludere tutto ciò che non è strettamente necessario per risparmiare spazio su disco, quanto segue dovrà essere necessariamente presente per ottenere un sistema minimo avviabile.&lt;br /&gt;
&lt;br /&gt;
* Code maturity level-&amp;gt; Prompt for development&lt;br /&gt;
&lt;br /&gt;
* Processor type and features-&amp;gt; Support for your processor&lt;br /&gt;
&lt;br /&gt;
* General setup-&amp;gt; kernel support for ELF binaries&lt;br /&gt;
&lt;br /&gt;
* Block devices-&amp;gt; RAM disk support&lt;br /&gt;
&lt;br /&gt;
* File systems-&amp;gt; /proc filesystem, tmpfs, ext2&lt;br /&gt;
&lt;br /&gt;
* Character devices-&amp;gt; Virtual terminal&lt;br /&gt;
&lt;br /&gt;
* Character devices-&amp;gt; Support for console on virtual terminal&lt;br /&gt;
&lt;br /&gt;
* Console drivers-&amp;gt; VGA text console&lt;br /&gt;
&lt;br /&gt;
* General setup-&amp;gt; PCI support&lt;br /&gt;
&lt;br /&gt;
* I driver delle schede di rete che interessa supportare (ne, ne2k, rtl8139too, rtl8139c, pcnet32, e1000)&lt;br /&gt;
&lt;br /&gt;
* Iptables se si necessita di un firewall&lt;br /&gt;
&lt;br /&gt;
* Un driver IDE generico (generic ATA) su libata&lt;br /&gt;
&lt;br /&gt;
* Block devices-&amp;gt; Normal PC floppy disk support, se ci interesse il supporto al floppy&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Se si deve limitare al massimo la grandezza dell'immagine del kernel (bzImage) si può scegliere con un algoritmo di compressione come lzma. Questo però aumenterà il consumo di RAM e per macchine molto vecchie come i386 o i486 probabilmente è meglio optare per gz o al massimo bz2.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Configurazione generale==&lt;br /&gt;
 $ make menuconfig&lt;br /&gt;
&lt;br /&gt;
Indicare:&lt;br /&gt;
&lt;br /&gt;
* Architettura di destinazione (i386, i486, i586…)&lt;br /&gt;
&lt;br /&gt;
* Opzioni di compilazione&lt;br /&gt;
&lt;br /&gt;
* Versione del kernel da usare&lt;br /&gt;
&lt;br /&gt;
* Configurazione di partenza del kernel&lt;br /&gt;
 Kernel  ---&amp;gt; Kernel configuration (Use the architecture default configuration)&lt;br /&gt;
&lt;br /&gt;
* Eventuali altri programmi non presenti in busybox (es.: mdev, dropbear, nano, iptables, ncftp, lynx, mutt)&lt;br /&gt;
&lt;br /&gt;
* Si consiglia l'opzione di compilazione gcc '''-Os''' al fine di ridurre al minimo la grandezza dei binari &lt;br /&gt;
&lt;br /&gt;
===Filesystem images===&lt;br /&gt;
Esistono varie tipologie di filesystem da utilizzare per il sistema che verrà compilato: immagini ext2, squashfs, direttamente nel initramfs o semplicemente in un tarball. Nel caso ci interessi costruire un floppy, al fine di sfruttare al meglio lo spazio, consiglio di scegliere ext2 compresso, anche in questo caso con lzma si ottengono filesystem fino al 20% più piccoli rispetto a quelli compressi con bzip2, ma il sistema  necessiterà di maggiore RAM per caricarli (70-80MB). &lt;br /&gt;
&lt;br /&gt;
Terminata la fase di configurazione si può procedere con la compilazione&lt;br /&gt;
 $ make&lt;br /&gt;
&lt;br /&gt;
==output==&lt;br /&gt;
Nella directory buildroot-2026.02/output/images risiede il prodotto finito.&lt;br /&gt;
Se lasciate le impostazioni standard si tratterà di 3 file: bzImage, rootfs.ext2, rootfs.tar.&lt;br /&gt;
&lt;br /&gt;
==Floppy Linux==&lt;br /&gt;
Le dimensioni dei file bzImage e rootfs.i486.ext2.lzma devono essere sufficientemente contenute per entrare su un floppy.&lt;br /&gt;
Nel caso fossero solo di poco più grandi (100-200 KB), si può rimediare con la formattazione non standard del floppy: a 1.72 MB invece che a 1.44MB.&lt;br /&gt;
 $ sudo mknod /dev/fd0u1722 b 2 60&lt;br /&gt;
 $ fdformat /dev/fd0u1722&lt;br /&gt;
 $ mkfs.vfat /dev/fd0u1722&lt;br /&gt;
&lt;br /&gt;
Se non presente creare un mount point per il floppy&lt;br /&gt;
 $ sudo mkdir /mnt/floppy&lt;br /&gt;
&lt;br /&gt;
Montare il floppy&lt;br /&gt;
 $ sudo mount /dev/fd0u1722 /mnt/floppy&lt;br /&gt;
&lt;br /&gt;
Copiarvi i due file&lt;br /&gt;
 $ sudo cp buildroot/output/images/bzImage /mnt/floppy&lt;br /&gt;
 $ sudo cp buildroot/output/images/rootfs.i486.ext2.lzma /mnt/floppy&lt;br /&gt;
&lt;br /&gt;
Adesso occorre installare un boot loader sul floppy. Essendo leggero, semplice da usare e supportando la FAT16 si consiglia di usare syslinux.&lt;br /&gt;
&lt;br /&gt;
Se syslinux non fosse presente sul vostro sistema installatelo con:&lt;br /&gt;
&lt;br /&gt;
 $ sudo apt-get install syslinux&lt;br /&gt;
per sistemi Debian-based&lt;br /&gt;
&lt;br /&gt;
O con&lt;br /&gt;
 # pacman -S syslinux&lt;br /&gt;
su Arch Linux&lt;br /&gt;
&lt;br /&gt;
Con un editor di testo (es. nano) create il file di configurazione per il boot loader: syslinux.cfg&lt;br /&gt;
 $ sudo nano /mnt/floppy/syslinux.cfg&lt;br /&gt;
&lt;br /&gt;
Riportate quanto segue, eventualmente adattandolo alle vostre esigenze:&lt;br /&gt;
&lt;br /&gt;
 default start&lt;br /&gt;
 timeout 5&lt;br /&gt;
 prompt 1&lt;br /&gt;
 label start&lt;br /&gt;
 kernel bzImage&lt;br /&gt;
 append initrd=rootfs.i486.ext2.lzma BOOTDEV=fd0 ramdisk_size=16384 vga=0 root=/dev/ram0&lt;br /&gt;
&lt;br /&gt;
Se è stato usato un altro tipo di filesystem sostituire rootfs.i486.ext2.lzma con rootfs.i486.ext2.bz2, rootfs.i486.ext2.squashfs…&lt;br /&gt;
&lt;br /&gt;
Installare il bootloader sul floppy&lt;br /&gt;
 $ sudo syslinux /dev/fd0&lt;br /&gt;
&lt;br /&gt;
Smontare il floppy&lt;br /&gt;
 $ cd&lt;br /&gt;
 $ sudo umount /mnt/floppy&lt;br /&gt;
&lt;br /&gt;
In caso di necessità di modifiche al ramdisk bisognerà copiarlo sul disco fisso, decomprimerlo, montarlo in loop ed effettuare le modifiche in questo modo:&lt;br /&gt;
 $ sudo mount /mnt/floppy&lt;br /&gt;
 $ sudo cp /mnt/floppy/rootfs.i486.ext2.lzma&lt;br /&gt;
 $ sudo lzma -d rootfs.i486.ext2.lzma&lt;br /&gt;
 $ sudo mkdir /mnt/tmp&lt;br /&gt;
 $ sudo mount -o loop rootfs.i486.ext2 /mnt/tmp&lt;br /&gt;
 $ cd /mnt/tmp&lt;br /&gt;
&lt;br /&gt;
Effettuare le modifiche e poi smontare il tutto&lt;br /&gt;
 $ cd&lt;br /&gt;
 $ sudo umount /mnt/tmp&lt;br /&gt;
&lt;br /&gt;
Ricomprimere il ramdisk e copiarlo sul floppy per sostituire quello vecchio&lt;br /&gt;
 $ sudo lzma -c9 rootfs.i486.ext2 &amp;gt; rootfs.i486.ext2.lzma&lt;br /&gt;
 $ sudo cp rootfs.i486.ext2.lzma /mnt/floppy&lt;br /&gt;
 $ sudo umount /mnt/floppy&lt;br /&gt;
&lt;br /&gt;
Un floppy già pronto con le seguenti caratteristiche ''era'' presente [http://golem.linux.it/files/spookyh/fspooky_v05.tar.xz qui]&lt;br /&gt;
&lt;br /&gt;
* Linux kernel 3.2.9&lt;br /&gt;
&lt;br /&gt;
* Busybox 1.19.4&lt;br /&gt;
&lt;br /&gt;
* Programmi inclusi: ftpd, ncftp, dropbear (ssh client/server), httpd, iptables, dhcp client/server, nc, wget, fdisk.&lt;br /&gt;
&lt;br /&gt;
* Requisiti minimi: i586 (60 MHz), 74 Mb RAM, floppy driver 3,5&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* Hardware supportato: processori i586 compatibili, Bus PCI (niente ISA), Controller Generic ATA disk; schede di rete Novell NE2000 (e cloni), RealTek 8129, Intel PRO/1000 Gigabit Adapter.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Immagine per hard disk==&lt;br /&gt;
Se un floppy è troppo piccolo per le nostre esigenze si può costruire il sistema dentro ad un file d'immagine da copiare sull'hard disk della nostra macchina direttamente con dd. Creiamo quindi un'immagine da 250 MB, che dovrebbe essere più che sufficiente per un sistema testuale&lt;br /&gt;
 dd if=/dev/zero of=output/images/486linux.img bs=1M count=250&lt;br /&gt;
&lt;br /&gt;
Montiamo l'immagine per poter formattare il filesystem e copiarci i dati&lt;br /&gt;
 # losetup -Pf 486linux.img&lt;br /&gt;
 # mkfs.ext2 /dev/loop0p1&lt;br /&gt;
Probabilmente il miglior filesystem per un sistema così vecchio è ext2, si rinuncia al journaling, ma ci si guadagna parecchio in performance.&lt;br /&gt;
 # mkfs.ext2 -m 0 -O none /dev/loop0p1&lt;br /&gt;
&lt;br /&gt;
Montiamo il tutto&lt;br /&gt;
 # mount /dev/loop0p1 /mnt/img&lt;br /&gt;
&lt;br /&gt;
Copiamoci il filesystem ed il kernel&lt;br /&gt;
 # tar xf buildroot-2026.02/output/images/rootfs.tar -C /mnt/img&lt;br /&gt;
 # mkdir -p /mnt/img/boot&lt;br /&gt;
 # cp buildroot-2026.02/output/images/bzImage /mnt/img/boot/bzImage&lt;br /&gt;
&lt;br /&gt;
Come bootloader, anche in questo caso si è optato per il semplicissimo syslinux.&lt;br /&gt;
 sudo pacman -S syslinux&lt;br /&gt;
 sudo extlinux --install /mnt/img/boot/&lt;br /&gt;
&lt;br /&gt;
Configuriamo il bootloader (/mnt/boot/syslinux.cfg)&lt;br /&gt;
 DEFAULT linux&lt;br /&gt;
 timeout 5&lt;br /&gt;
 prompt 1&lt;br /&gt;
 LABEL linux&lt;br /&gt;
    KERNEL /boot/bzImage&lt;br /&gt;
    APPEND root=/dev/sda1 ro&lt;br /&gt;
&lt;br /&gt;
Se ci interessa la tastiera italiana creiamo dal nostro sistema host il file .bmap da far caricare a busybox &lt;br /&gt;
 # loadkeys -qb it &amp;gt; it.bmap&lt;br /&gt;
 # mv it.bmap /mnt/img/etc&lt;br /&gt;
&lt;br /&gt;
===Tastiera italiana===&lt;br /&gt;
Possiamo creare uno script d'avvio tipo ''/etc/init.d/S40keyboard'' per far in modo che il sistema lo carichi automaticamente (ricordatevi di renderlo eseguibile).&lt;br /&gt;
 #!/bin/sh&lt;br /&gt;
 loadkmap &amp;lt; /etc/it.bmap&lt;br /&gt;
&lt;br /&gt;
===Hotplug===&lt;br /&gt;
Per l'hotplug dei moduli occorre aver installato il programma mdev, anche in questo caso converrà scrivere uno script di avvio tipo il seguente (/etc/init.d/S10mdev) &lt;br /&gt;
 #!/bin/sh&lt;br /&gt;
 case &amp;quot;$1&amp;quot; in&lt;br /&gt;
    start)&lt;br /&gt;
        echo &amp;quot;Starting mdev...&amp;quot;&lt;br /&gt;
        # Imposta mdev come gestore degli eventi hotplug&lt;br /&gt;
        echo /sbin/mdev &amp;gt; /proc/sys/kernel/hotplug&lt;br /&gt;
        # Scansiona /sys per creare i device node per l'hardware già presente&lt;br /&gt;
        /sbin/mdev -s&lt;br /&gt;
        # Questo è il &amp;quot;coldplug&amp;quot;: trova tutti i moduli dell'hardware già presente e li carica&lt;br /&gt;
        echo &amp;quot;Loading kernel modules for existing hardware...&amp;quot;&lt;br /&gt;
        find /sys/ -name modalias | xargs sort -u | xargs modprobe -abq&lt;br /&gt;
        ;;&lt;br /&gt;
    stop)&lt;br /&gt;
        echo &amp;quot;Stopping mdev...&amp;quot;&lt;br /&gt;
        ;;&lt;br /&gt;
    *)&lt;br /&gt;
        echo &amp;quot;Usage: $0 {start|stop}&amp;quot;&lt;br /&gt;
        exit 1&lt;br /&gt;
        ;;&lt;br /&gt;
 esac&lt;br /&gt;
[[Category:howto]]&lt;/div&gt;</summary>
		<author><name>$pooky Hunter</name></author>
	</entry>
	<entry>
		<id>https://wiki.golem.linux.it/index.php?title=Linux_minimale_per_PC_i386/i486&amp;diff=9965</id>
		<title>Linux minimale per PC i386/i486</title>
		<link rel="alternate" type="text/html" href="https://wiki.golem.linux.it/index.php?title=Linux_minimale_per_PC_i386/i486&amp;diff=9965"/>
		<updated>2026-05-15T12:59:10Z</updated>

		<summary type="html">&lt;p&gt;$pooky Hunter: /* Distribuzioni per i386-i486 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Distribuzioni per i486-i586=&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! Distro&lt;br /&gt;
! CPU minima&lt;br /&gt;
! RAM minima&lt;br /&gt;
! Disco/ISO&lt;br /&gt;
! Uso ideale&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [http://delicate-linux.net/ DeLi Linux]&lt;br /&gt;
| i486&lt;br /&gt;
| 8–16 MB&lt;br /&gt;
| ~200 MB installazione&lt;br /&gt;
| Retrocomputing puro, PC anni '90&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.slitaz.org SliTaz]&lt;br /&gt;
| i486&lt;br /&gt;
| 24–64 MB&lt;br /&gt;
| ISO 30–60 MB&lt;br /&gt;
| Pentium II/III molto leggeri&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.tinycorelinux.com Tiny Core Linux]&lt;br /&gt;
| i486DX&lt;br /&gt;
| 46 MB&lt;br /&gt;
| 20–200 MB&lt;br /&gt;
| Minimalismo estremo, appliance&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.puppylinux.com Puppy Linux]&lt;br /&gt;
| Pentium II&lt;br /&gt;
| 128-256 MB&lt;br /&gt;
| 300–500 MB ISO&lt;br /&gt;
| Desktop leggero usabile&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.damnsmalllinux.org  Damn Small Linux 2024]&lt;br /&gt;
| i686&lt;br /&gt;
| 256-512 MB&lt;br /&gt;
| ~700 MB ISO&lt;br /&gt;
| Hardware datato ma moderno&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Distribuzioni per i386-i486=&lt;br /&gt;
Se si tenta di recuperare una macchina particolarmente vecchia possono venire in nostro soccorso delle mini distribuzioni prive di ambiente grafico e talmente compatte da poter essere contenute in un unico floppy.&lt;br /&gt;
&lt;br /&gt;
NB: è stato rimosso il supporto ai 386 nel 2012 (kernel 3.8) ed ai 486 nel 2026 (kernel 7.1)&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! Distribuzione&lt;br /&gt;
! Supporto avvio&lt;br /&gt;
! CPU minima&lt;br /&gt;
! RAM minima&lt;br /&gt;
! Dimensione tipica&lt;br /&gt;
! Uso ideale&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [https://krzysztofjankowski.com/floppinux/ FLOPPINUX]&lt;br /&gt;
| 1 floppy&lt;br /&gt;
| 486&lt;br /&gt;
| 4–8 MB&lt;br /&gt;
| 1.44 MB&lt;br /&gt;
| Mini Linux educativo/sperimentale&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/snacsnoc/fluxflop/releases Fluxflop]&lt;br /&gt;
| 1–2 floppy&lt;br /&gt;
| 486&lt;br /&gt;
| ~4 MB&lt;br /&gt;
| 1.44–2.88 MB&lt;br /&gt;
| Networking minimale&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.fdlinux.com/download.php FD Linux]&lt;br /&gt;
| 1 floppy&lt;br /&gt;
| 386SX&lt;br /&gt;
| 4 MB&lt;br /&gt;
| 1.44 MB&lt;br /&gt;
| DOS/Linux compatto&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.zelow.no/floppyfw floppyfw]&lt;br /&gt;
| 1 floppy&lt;br /&gt;
| 386&lt;br /&gt;
| 8 MB&lt;br /&gt;
| 1.44 MB&lt;br /&gt;
| Router/firewall embedded&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [https://web.archive.org/web/20190312063410/http://chris.silmor.de/hal91/ HAL91]&lt;br /&gt;
| 1 floppy&lt;br /&gt;
| 386&lt;br /&gt;
| 2–4 MB&lt;br /&gt;
| 1.44 MB&lt;br /&gt;
| Esperimenti ultra-minimali&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [http://micheleandreoli.org/public/Software/mulinux/ muLinux]&lt;br /&gt;
| 1+ floppy modulari&lt;br /&gt;
| 386SX&lt;br /&gt;
| 4 MB&lt;br /&gt;
| 1.44 MB base&lt;br /&gt;
| Recupero PC vintage&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [http://smartlinux.sourceforge.net S.M.A.R.T. Linux]&lt;br /&gt;
| 1 floppy&lt;br /&gt;
| 386&lt;br /&gt;
| 4–8 MB&lt;br /&gt;
| 1.44 MB&lt;br /&gt;
| Toolkit floppy generale&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [http://distro.ibiblio.org/polypux/external/smalllinux/ Small Linux]&lt;br /&gt;
| 1–2 floppy&lt;br /&gt;
| 386&lt;br /&gt;
| 4–8 MB&lt;br /&gt;
| ~2 MB&lt;br /&gt;
| Sistema Linux minimale&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [https://archiveos.org/tomsrtbt/ tomsrtbt]&lt;br /&gt;
| 1 floppy&lt;br /&gt;
| 386SX&lt;br /&gt;
| 8 MB&lt;br /&gt;
| 1.72 MB&lt;br /&gt;
| Rescue disk&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceforge.net/projects/trinux/files/ Trinux]&lt;br /&gt;
| 1–2 floppy&lt;br /&gt;
| 486&lt;br /&gt;
| 8–16 MB&lt;br /&gt;
| 1.44–3 MB&lt;br /&gt;
| Sicurezza/network auditing&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [https://web.archive.org/web/20070629142617/http://zoollinux.berlios.de/doku.php Zool]&lt;br /&gt;
| 1 floppy&lt;br /&gt;
| 386&lt;br /&gt;
| ~4 MB&lt;br /&gt;
| 1.44 MB&lt;br /&gt;
| Linux ultra-compatto&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Buildroot=&lt;br /&gt;
Soluzioni preconfezionate (come quelle sopra elencate) potrebbero non rispondere alle nostre esigenze: kernel datati (2.0, 2.2), driver mancanti o magari mancano proprio dell'applicazione di cui abbiamo bisogno.&lt;br /&gt;
&lt;br /&gt;
In questi casi la soluzione più rapida è quella di costruirsi il proprio sistema Linux personalizzato. Per farlo il metodo più semplice è utilizzare [https://buildroot.org/download.html Buildroot], un tool che permette la cross-compilazione di un ambiente Linux completo di librerie (glibc, uclibc-ng o musl), numerose applicazioni e l'eseguibile busybox.&lt;br /&gt;
&lt;br /&gt;
Questa procedura è analoga a quella usata per la realizzazione di qualsiasi sistema embedded Linux-based: router, decoder, lettory DVD...&lt;br /&gt;
&lt;br /&gt;
Scompattare il tool&lt;br /&gt;
 $ tar -xzvf buildroot-2026.02.tar.gz&lt;br /&gt;
&lt;br /&gt;
Entrare nella directory principale&lt;br /&gt;
 $ cd buildroot-2026.02/&lt;br /&gt;
&lt;br /&gt;
==BusyBox==&lt;br /&gt;
Configurare busybox selezionando i programmi che si ritengono necessari&lt;br /&gt;
 $ make busybox-menuconfig&lt;br /&gt;
&lt;br /&gt;
==Kernel==&lt;br /&gt;
Configurare il kernel per la compilazione&lt;br /&gt;
 $ make linux-menuconfig&lt;br /&gt;
&lt;br /&gt;
Escludere tutto ciò che non è strettamente necessario per risparmiare spazio su disco, quanto segue dovrà essere necessariamente presente per ottenere un sistema minimo avviabile.&lt;br /&gt;
&lt;br /&gt;
* Code maturity level-&amp;gt; Prompt for development&lt;br /&gt;
&lt;br /&gt;
* Processor type and features-&amp;gt; Support for your processor&lt;br /&gt;
&lt;br /&gt;
* General setup-&amp;gt; kernel support for ELF binaries&lt;br /&gt;
&lt;br /&gt;
* Block devices-&amp;gt; RAM disk support&lt;br /&gt;
&lt;br /&gt;
* File systems-&amp;gt; /proc filesystem, tmpfs, ext2&lt;br /&gt;
&lt;br /&gt;
* Character devices-&amp;gt; Virtual terminal&lt;br /&gt;
&lt;br /&gt;
* Character devices-&amp;gt; Support for console on virtual terminal&lt;br /&gt;
&lt;br /&gt;
* Console drivers-&amp;gt; VGA text console&lt;br /&gt;
&lt;br /&gt;
* General setup-&amp;gt; PCI support&lt;br /&gt;
&lt;br /&gt;
* I driver delle schede di rete che interessa supportare (ne, ne2k, rtl8139too, rtl8139c, pcnet32, e1000)&lt;br /&gt;
&lt;br /&gt;
* Iptables se si necessita di un firewall&lt;br /&gt;
&lt;br /&gt;
* Un driver IDE generico (generic ATA) su libata&lt;br /&gt;
&lt;br /&gt;
* Block devices-&amp;gt; Normal PC floppy disk support, se ci interesse il supporto al floppy&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Se si deve limitare al massimo la grandezza dell'immagine del kernel (bzImage) si può scegliere con un algoritmo di compressione come lzma. Questo però aumenterà il consumo di RAM e per macchine molto vecchie come i386 o i486 probabilmente è meglio optare per gz o al massimo bz2.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Configurazione generale==&lt;br /&gt;
 $ make menuconfig&lt;br /&gt;
&lt;br /&gt;
Indicare:&lt;br /&gt;
&lt;br /&gt;
* Architettura di destinazione (i386, i486, i586…)&lt;br /&gt;
&lt;br /&gt;
* Opzioni di compilazione&lt;br /&gt;
&lt;br /&gt;
* Versione del kernel da usare&lt;br /&gt;
&lt;br /&gt;
* Configurazione di partenza del kernel&lt;br /&gt;
 Kernel  ---&amp;gt; Kernel configuration (Use the architecture default configuration)&lt;br /&gt;
&lt;br /&gt;
* Eventuali altri programmi non presenti in busybox (es.: mdev, dropbear, nano, iptables, ncftp, lynx, mutt)&lt;br /&gt;
&lt;br /&gt;
* Si consiglia l'opzione di compilazione gcc '''-Os''' al fine di ridurre al minimo la grandezza dei binari &lt;br /&gt;
&lt;br /&gt;
===Filesystem images===&lt;br /&gt;
Esistono varie tipologie di filesystem da utilizzare per il sistema che verrà compilato: immagini ext2, squashfs, direttamente nel initramfs o semplicemente in un tarball. Nel caso ci interessi costruire un floppy, al fine di sfruttare al meglio lo spazio, consiglio di scegliere ext2 compresso, anche in questo caso con lzma si ottengono filesystem fino al 20% più piccoli rispetto a quelli compressi con bzip2, ma il sistema  necessiterà di maggiore RAM per caricarli (70-80MB). &lt;br /&gt;
&lt;br /&gt;
Terminata la fase di configurazione si può procedere con la compilazione&lt;br /&gt;
 $ make&lt;br /&gt;
&lt;br /&gt;
==output==&lt;br /&gt;
Nella directory buildroot-2026.02/output/images risiede il prodotto finito.&lt;br /&gt;
Se lasciate le impostazioni standard si tratterà di 3 file: bzImage, rootfs.ext2, rootfs.tar.&lt;br /&gt;
&lt;br /&gt;
==Floppy Linux==&lt;br /&gt;
Le dimensioni dei file bzImage e rootfs.i486.ext2.lzma devono essere sufficientemente contenute per entrare su un floppy.&lt;br /&gt;
Nel caso fossero solo di poco più grandi (100-200 KB), si può rimediare con la formattazione non standard del floppy: a 1.72 MB invece che a 1.44MB.&lt;br /&gt;
 $ sudo mknod /dev/fd0u1722 b 2 60&lt;br /&gt;
 $ fdformat /dev/fd0u1722&lt;br /&gt;
 $ mkfs.vfat /dev/fd0u1722&lt;br /&gt;
&lt;br /&gt;
Se non presente creare un mount point per il floppy&lt;br /&gt;
 $ sudo mkdir /mnt/floppy&lt;br /&gt;
&lt;br /&gt;
Montare il floppy&lt;br /&gt;
 $ sudo mount /dev/fd0u1722 /mnt/floppy&lt;br /&gt;
&lt;br /&gt;
Copiarvi i due file&lt;br /&gt;
 $ sudo cp buildroot/output/images/bzImage /mnt/floppy&lt;br /&gt;
 $ sudo cp buildroot/output/images/rootfs.i486.ext2.lzma /mnt/floppy&lt;br /&gt;
&lt;br /&gt;
Adesso occorre installare un boot loader sul floppy. Essendo leggero, semplice da usare e supportando la FAT16 si consiglia di usare syslinux.&lt;br /&gt;
&lt;br /&gt;
Se syslinux non fosse presente sul vostro sistema installatelo con:&lt;br /&gt;
&lt;br /&gt;
 $ sudo apt-get install syslinux&lt;br /&gt;
per sistemi Debian-based&lt;br /&gt;
&lt;br /&gt;
O con&lt;br /&gt;
 # pacman -S syslinux&lt;br /&gt;
su Arch Linux&lt;br /&gt;
&lt;br /&gt;
Con un editor di testo (es. nano) create il file di configurazione per il boot loader: syslinux.cfg&lt;br /&gt;
 $ sudo nano /mnt/floppy/syslinux.cfg&lt;br /&gt;
&lt;br /&gt;
Riportate quanto segue, eventualmente adattandolo alle vostre esigenze:&lt;br /&gt;
&lt;br /&gt;
 default start&lt;br /&gt;
 timeout 5&lt;br /&gt;
 prompt 1&lt;br /&gt;
 label start&lt;br /&gt;
 kernel bzImage&lt;br /&gt;
 append initrd=rootfs.i486.ext2.lzma BOOTDEV=fd0 ramdisk_size=16384 vga=0 root=/dev/ram0&lt;br /&gt;
&lt;br /&gt;
Se è stato usato un altro tipo di filesystem sostituire rootfs.i486.ext2.lzma con rootfs.i486.ext2.bz2, rootfs.i486.ext2.squashfs…&lt;br /&gt;
&lt;br /&gt;
Installare il bootloader sul floppy&lt;br /&gt;
 $ sudo syslinux /dev/fd0&lt;br /&gt;
&lt;br /&gt;
Smontare il floppy&lt;br /&gt;
 $ cd&lt;br /&gt;
 $ sudo umount /mnt/floppy&lt;br /&gt;
&lt;br /&gt;
In caso di necessità di modifiche al ramdisk bisognerà copiarlo sul disco fisso, decomprimerlo, montarlo in loop ed effettuare le modifiche in questo modo:&lt;br /&gt;
 $ sudo mount /mnt/floppy&lt;br /&gt;
 $ sudo cp /mnt/floppy/rootfs.i486.ext2.lzma&lt;br /&gt;
 $ sudo lzma -d rootfs.i486.ext2.lzma&lt;br /&gt;
 $ sudo mkdir /mnt/tmp&lt;br /&gt;
 $ sudo mount -o loop rootfs.i486.ext2 /mnt/tmp&lt;br /&gt;
 $ cd /mnt/tmp&lt;br /&gt;
&lt;br /&gt;
Effettuare le modifiche e poi smontare il tutto&lt;br /&gt;
 $ cd&lt;br /&gt;
 $ sudo umount /mnt/tmp&lt;br /&gt;
&lt;br /&gt;
Ricomprimere il ramdisk e copiarlo sul floppy per sostituire quello vecchio&lt;br /&gt;
 $ sudo lzma -c9 rootfs.i486.ext2 &amp;gt; rootfs.i486.ext2.lzma&lt;br /&gt;
 $ sudo cp rootfs.i486.ext2.lzma /mnt/floppy&lt;br /&gt;
 $ sudo umount /mnt/floppy&lt;br /&gt;
&lt;br /&gt;
Un floppy già pronto con le seguenti caratteristiche ''era'' presente [http://golem.linux.it/files/spookyh/fspooky_v05.tar.xz qui]&lt;br /&gt;
&lt;br /&gt;
* Linux kernel 3.2.9&lt;br /&gt;
&lt;br /&gt;
* Busybox 1.19.4&lt;br /&gt;
&lt;br /&gt;
* Programmi inclusi: ftpd, ncftp, dropbear (ssh client/server), httpd, iptables, dhcp client/server, nc, wget, fdisk.&lt;br /&gt;
&lt;br /&gt;
* Requisiti minimi: i586 (60 MHz), 74 Mb RAM, floppy driver 3,5&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* Hardware supportato: processori i586 compatibili, Bus PCI (niente ISA), Controller Generic ATA disk; schede di rete Novell NE2000 (e cloni), RealTek 8129, Intel PRO/1000 Gigabit Adapter.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Immagine per hard disk==&lt;br /&gt;
Se un floppy è troppo piccolo per le nostre esigenze si può costruire il sistema dentro ad un file d'immagine da copiare sull'hard disk della nostra macchina direttamente con dd. Creiamo quindi un'immagine da 250 MB, che dovrebbe essere più che sufficiente per un sistema testuale&lt;br /&gt;
 dd if=/dev/zero of=output/images/486linux.img bs=1M count=250&lt;br /&gt;
&lt;br /&gt;
Montiamo l'immagine per poter formattare il filesystem e copiarci i dati&lt;br /&gt;
 # losetup -Pf 486linux.img&lt;br /&gt;
 # mkfs.ext2 /dev/loop0p1&lt;br /&gt;
Probabilmente il miglior filesystem per un sistema così vecchio è ext2, si rinuncia al journaling, ma ci si guadagna parecchio in performance.&lt;br /&gt;
 # mkfs.ext2 -m 0 -O none /dev/loop0p1&lt;br /&gt;
&lt;br /&gt;
Montiamo il tutto&lt;br /&gt;
 # mount /dev/loop0p1 /mnt/img&lt;br /&gt;
&lt;br /&gt;
Copiamoci il filesystem ed il kernel&lt;br /&gt;
 # tar xf buildroot-2026.02/output/images/rootfs.tar -C /mnt/img&lt;br /&gt;
 # mkdir -p /mnt/img/boot&lt;br /&gt;
 # cp buildroot-2026.02/output/images/bzImage /mnt/img/boot/bzImage&lt;br /&gt;
&lt;br /&gt;
Come bootloader, anche in questo caso si è optato per il semplicissimo syslinux.&lt;br /&gt;
 sudo pacman -S syslinux&lt;br /&gt;
 sudo extlinux --install /mnt/img/boot/&lt;br /&gt;
&lt;br /&gt;
Configuriamo il bootloader (/mnt/boot/syslinux.cfg)&lt;br /&gt;
 DEFAULT linux&lt;br /&gt;
 timeout 5&lt;br /&gt;
 prompt 1&lt;br /&gt;
 LABEL linux&lt;br /&gt;
    KERNEL /boot/bzImage&lt;br /&gt;
    APPEND root=/dev/sda1 ro&lt;br /&gt;
&lt;br /&gt;
Se ci interessa la tastiera italiana creiamo dal nostro sistema host il file .bmap da far caricare a busybox &lt;br /&gt;
 # loadkeys -qb it &amp;gt; it.bmap&lt;br /&gt;
 # mv it.bmap /mnt/img/etc&lt;br /&gt;
&lt;br /&gt;
===Tastiera italiana===&lt;br /&gt;
Possiamo creare uno script d'avvio tipo ''/etc/init.d/S40keyboard'' per far in modo che il sistema lo carichi automaticamente (ricordatevi di renderlo eseguibile).&lt;br /&gt;
 #!/bin/sh&lt;br /&gt;
 loadkmap &amp;lt; /etc/it.bmap&lt;br /&gt;
&lt;br /&gt;
===Hotplug===&lt;br /&gt;
Per l'hotplug dei moduli occorre aver installato il programma mdev, anche in questo caso converrà scrivere uno script di avvio tipo il seguente (/etc/init.d/S10mdev) &lt;br /&gt;
 #!/bin/sh&lt;br /&gt;
 case &amp;quot;$1&amp;quot; in&lt;br /&gt;
    start)&lt;br /&gt;
        echo &amp;quot;Starting mdev...&amp;quot;&lt;br /&gt;
        # Imposta mdev come gestore degli eventi hotplug&lt;br /&gt;
        echo /sbin/mdev &amp;gt; /proc/sys/kernel/hotplug&lt;br /&gt;
        # Scansiona /sys per creare i device node per l'hardware già presente&lt;br /&gt;
        /sbin/mdev -s&lt;br /&gt;
        # Questo è il &amp;quot;coldplug&amp;quot;: trova tutti i moduli dell'hardware già presente e li carica&lt;br /&gt;
        echo &amp;quot;Loading kernel modules for existing hardware...&amp;quot;&lt;br /&gt;
        find /sys/ -name modalias | xargs sort -u | xargs modprobe -abq&lt;br /&gt;
        ;;&lt;br /&gt;
    stop)&lt;br /&gt;
        echo &amp;quot;Stopping mdev...&amp;quot;&lt;br /&gt;
        ;;&lt;br /&gt;
    *)&lt;br /&gt;
        echo &amp;quot;Usage: $0 {start|stop}&amp;quot;&lt;br /&gt;
        exit 1&lt;br /&gt;
        ;;&lt;br /&gt;
 esac&lt;br /&gt;
[[Category:howto]]&lt;/div&gt;</summary>
		<author><name>$pooky Hunter</name></author>
	</entry>
	<entry>
		<id>https://wiki.golem.linux.it/index.php?title=Howto&amp;diff=9964</id>
		<title>Howto</title>
		<link rel="alternate" type="text/html" href="https://wiki.golem.linux.it/index.php?title=Howto&amp;diff=9964"/>
		<updated>2026-05-14T22:54:13Z</updated>

		<summary type="html">&lt;p&gt;$pooky Hunter: /* Per le macchine dell'Officina */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Tutti gli Howto sono visibili nella [[:Category:Howto | categoria dedicata]].&lt;br /&gt;
== Howto attuali ==&lt;br /&gt;
{|&lt;br /&gt;
|&lt;br /&gt;
=== Per le macchine dell'Officina ===&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
    _  _____ _____ _____ _   _ ________ ___  _   _ _____ &lt;br /&gt;
   / \|_   _|_   _| ____| \ | |__  /_ _/ _ \| \ | | ____|&lt;br /&gt;
  / _ \ | |   | | |  _| |  \| | / / | | | | |  \| |  _|  &lt;br /&gt;
 / ___ \| |   | | | |___| |\  |/ /_ | | |_| | |\  | |___ &lt;br /&gt;
/_/   \_\_|   |_| |_____|_| \_/____|___\___/|_| \_|_____|&lt;br /&gt;
                                                         &lt;br /&gt;
        Per favore rispettare l'ordine alfabetico!&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
; [[Android_USB_tethering | Android USB tethering]]&lt;br /&gt;
; [[A10-OLinuXino-LIME]]&lt;br /&gt;
; [[apt-cacher|Apt-Cacher]]&lt;br /&gt;
; [[Boot loader | Ripristino del Boot Loader]]&lt;br /&gt;
; [[Btrfs]]&lt;br /&gt;
; [[Condividere_connessione|Condividere la connessione]]&lt;br /&gt;
; [[Docker]]&lt;br /&gt;
; [[File img]]&lt;br /&gt;
; [[GOLEM Dolly 2014 | GOLEM Dolly]]&lt;br /&gt;
; [[GPG_Gnu_Privacy_Guard|GPG]]&lt;br /&gt;
; [[Linux minimale per PC i386/i486]]&lt;br /&gt;
; [[Installare_Arch_Linux_in_una_partizione_cifrata | Partizione cifrata su Arch Linux]]&lt;br /&gt;
; [[Netcat]]&lt;br /&gt;
; [[Pillole hardware]]&lt;br /&gt;
; [[PXE|PXE (Boot da Rete)]]&lt;br /&gt;
; [[RAID | Restore RAID 1]]&lt;br /&gt;
; [[Rete del GOLEM]]&lt;br /&gt;
; [[Ricompilazione Kernel]] Prontuario veloce  &lt;br /&gt;
; [[Ricompilazione Kernel per Niubbi]]&lt;br /&gt;
; [[Riconoscere il materiale]]&lt;br /&gt;
; [[Ubuntu e privacy]]&lt;br /&gt;
; [[UEFI e GPT]]&lt;br /&gt;
; [[Installare Arch Linux su ZFS|ZFS su Arch Linux]]&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
=== Altre guide ===&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
    _  _____ _____ _____ _   _ ________ ___  _   _ _____ &lt;br /&gt;
   / \|_   _|_   _| ____| \ | |__  /_ _/ _ \| \ | | ____|&lt;br /&gt;
  / _ \ | |   | | |  _| |  \| | / / | | | | |  \| |  _|  &lt;br /&gt;
 / ___ \| |   | | | |___| |\  |/ /_ | | |_| | |\  | |___ &lt;br /&gt;
/_/   \_\_|   |_| |_____|_| \_/____|___\___/|_| \_|_____|&lt;br /&gt;
                                                         &lt;br /&gt;
        Per favore rispettare l'ordine alfabetico!&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
; [[Arduino_ed_Internet | Arduino ed Internet]]&lt;br /&gt;
; [[Biscotti_open_source | Biscotti Open Source]]&lt;br /&gt;
; [[Conversioni_video|Convertire Video]]&lt;br /&gt;
; [[Installare Debian GNU/Linux su NAS Intel SS4000-E ARM e cloni|Debian su NAS arm]]&lt;br /&gt;
; [[Filesystem esotici]]&lt;br /&gt;
; [[FreeDOS Networking]]&lt;br /&gt;
; [[IPv6_@_GOLEM | IPv6]]&lt;br /&gt;
; [[KDE5_file_template | Modello di file personalizzato su KDE5]]&lt;br /&gt;
; [[Minidlna]] (file sharing in rete locale)&lt;br /&gt;
; [[MySQL]]&lt;br /&gt;
; [[Motion | Videosorveglianza casalinga]]&lt;br /&gt;
; [[OpenBSD]]&lt;br /&gt;
; [[Connessioni_alternative | PLIP]]&lt;br /&gt;
; [[PDF Batch]]&lt;br /&gt;
; [[Pkgsrc_su_Slackware | pkgsrc su Slackware]]&lt;br /&gt;
; [[Postfix Relay]]&lt;br /&gt;
; [[QGIS]]&lt;br /&gt;
; [[Resize Immagini | Manipolazione Immagini (ImageMagick)]]&lt;br /&gt;
; [[Storia dei sistemi UNIX]]&lt;br /&gt;
; [[Telegram]]&lt;br /&gt;
; [[Tor]]&lt;br /&gt;
; [[VLAN]]&lt;br /&gt;
; [[Wordpress]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Howto vecchi o da rivedere ==&lt;br /&gt;
&lt;br /&gt;
; [[Appunti Arch Linux]]&lt;br /&gt;
; [[Appunti NixOS]]&lt;br /&gt;
; [[Copiare floppy]]&lt;br /&gt;
; [[Webcam | Creative Live! Cam Vista IM]]&lt;br /&gt;
; [[Device_rete|Fissare device name per schede di rete]]&lt;br /&gt;
; [[Estrarre_audio_da_dvd|Estrarre audio da DVD]]&lt;br /&gt;
; [[Net-HOWTO | GOLEM Networking Howto]]&lt;br /&gt;
; [[The_Gimp_come_tradurre_Script-Fu|Gimp, tradurre Script-Fu]]&lt;br /&gt;
; [[Linea_di_comando|Linea di comando]]&lt;br /&gt;
; [[Reti Alternative | Reti Alternative]]&lt;br /&gt;
; [[Ricevitore GPS]]&lt;br /&gt;
; [[LibreofficeRubrica | Rubrica su Libreoffice]]&lt;br /&gt;
; [[Vodafone_Station_2_AP|Vodafone Station 2 come Access Point]]&lt;br /&gt;
&lt;br /&gt;
[[Category:howto]]&lt;/div&gt;</summary>
		<author><name>$pooky Hunter</name></author>
	</entry>
	<entry>
		<id>https://wiki.golem.linux.it/index.php?title=Floppy_Linux&amp;diff=9963</id>
		<title>Floppy Linux</title>
		<link rel="alternate" type="text/html" href="https://wiki.golem.linux.it/index.php?title=Floppy_Linux&amp;diff=9963"/>
		<updated>2026-05-14T22:52:31Z</updated>

		<summary type="html">&lt;p&gt;$pooky Hunter: $pooky Hunter ha spostato la pagina Floppy Linux a Linux minimale per PC i386/i486&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#RINVIA [[Linux minimale per PC i386/i486]]&lt;/div&gt;</summary>
		<author><name>$pooky Hunter</name></author>
	</entry>
	<entry>
		<id>https://wiki.golem.linux.it/index.php?title=Linux_minimale_per_PC_i386/i486&amp;diff=9962</id>
		<title>Linux minimale per PC i386/i486</title>
		<link rel="alternate" type="text/html" href="https://wiki.golem.linux.it/index.php?title=Linux_minimale_per_PC_i386/i486&amp;diff=9962"/>
		<updated>2026-05-14T22:52:31Z</updated>

		<summary type="html">&lt;p&gt;$pooky Hunter: $pooky Hunter ha spostato la pagina Floppy Linux a Linux minimale per PC i386/i486&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Distribuzioni per i486-i586=&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! Distro&lt;br /&gt;
! CPU minima&lt;br /&gt;
! RAM minima&lt;br /&gt;
! Disco/ISO&lt;br /&gt;
! Uso ideale&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [http://delicate-linux.net/ DeLi Linux]&lt;br /&gt;
| i486&lt;br /&gt;
| 8–16 MB&lt;br /&gt;
| ~200 MB installazione&lt;br /&gt;
| Retrocomputing puro, PC anni '90&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.slitaz.org SliTaz]&lt;br /&gt;
| i486&lt;br /&gt;
| 24–64 MB&lt;br /&gt;
| ISO 30–60 MB&lt;br /&gt;
| Pentium II/III molto leggeri&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.tinycorelinux.com Tiny Core Linux]&lt;br /&gt;
| i486DX&lt;br /&gt;
| 46 MB&lt;br /&gt;
| 20–200 MB&lt;br /&gt;
| Minimalismo estremo, appliance&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.puppylinux.com Puppy Linux]&lt;br /&gt;
| Pentium II&lt;br /&gt;
| 128-256 MB&lt;br /&gt;
| 300–500 MB ISO&lt;br /&gt;
| Desktop leggero usabile&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.damnsmalllinux.org  Damn Small Linux 2024]&lt;br /&gt;
| i686&lt;br /&gt;
| 256-512 MB&lt;br /&gt;
| ~700 MB ISO&lt;br /&gt;
| Hardware datato ma moderno&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Distribuzioni per i386-i486=&lt;br /&gt;
Se si tenta di recuperare una macchina particolarmente vecchia possono venire in nostro soccorso delle mini distribuzioni prive di ambiente grafico e talmente compatte da poter essere contenute in un unico floppy.&lt;br /&gt;
&lt;br /&gt;
NB: è stato rimosso il supporto ai 386 nel 2012 (kernel 3.8) ed ai 486 nel 2026 (kernel 7.1)&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! Distribuzione&lt;br /&gt;
! Supporto avvio&lt;br /&gt;
! CPU minima&lt;br /&gt;
! RAM minima&lt;br /&gt;
! Dimensione tipica&lt;br /&gt;
! Uso ideale&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [https://krzysztofjankowski.com/floppinux/ FLOPPINUX]&lt;br /&gt;
| 1 floppy&lt;br /&gt;
| 386&lt;br /&gt;
| 4–8 MB&lt;br /&gt;
| 1.44 MB&lt;br /&gt;
| Mini Linux educativo/sperimentale&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/snacsnoc/fluxflop/releases Fluxflop]&lt;br /&gt;
| 1–2 floppy&lt;br /&gt;
| 386&lt;br /&gt;
| ~4 MB&lt;br /&gt;
| 1.44–2.88 MB&lt;br /&gt;
| Networking minimale&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.fdlinux.com/download.php FD Linux]&lt;br /&gt;
| 1 floppy&lt;br /&gt;
| 386SX&lt;br /&gt;
| 4 MB&lt;br /&gt;
| 1.44 MB&lt;br /&gt;
| DOS/Linux compatto&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.zelow.no/floppyfw floppyfw]&lt;br /&gt;
| 1 floppy&lt;br /&gt;
| 386&lt;br /&gt;
| 8 MB&lt;br /&gt;
| 1.44 MB&lt;br /&gt;
| Router/firewall embedded&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [https://web.archive.org/web/20190312063410/http://chris.silmor.de/hal91/ HAL91]&lt;br /&gt;
| 1 floppy&lt;br /&gt;
| 386&lt;br /&gt;
| 2–4 MB&lt;br /&gt;
| 1.44 MB&lt;br /&gt;
| Esperimenti ultra-minimali&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [http://micheleandreoli.org/public/Software/mulinux/ muLinux]&lt;br /&gt;
| 1+ floppy modulari&lt;br /&gt;
| 386SX&lt;br /&gt;
| 4 MB&lt;br /&gt;
| 1.44 MB base&lt;br /&gt;
| Recupero PC vintage&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [http://smartlinux.sourceforge.net S.M.A.R.T. Linux]&lt;br /&gt;
| 1 floppy&lt;br /&gt;
| 386&lt;br /&gt;
| 4–8 MB&lt;br /&gt;
| 1.44 MB&lt;br /&gt;
| Toolkit floppy generale&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [http://distro.ibiblio.org/polypux/external/smalllinux/ Small Linux]&lt;br /&gt;
| 1–2 floppy&lt;br /&gt;
| 386&lt;br /&gt;
| 4–8 MB&lt;br /&gt;
| ~2 MB&lt;br /&gt;
| Sistema Linux minimale&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [https://archiveos.org/tomsrtbt/ tomsrtbt]&lt;br /&gt;
| 1 floppy&lt;br /&gt;
| 386SX&lt;br /&gt;
| 8 MB&lt;br /&gt;
| 1.72 MB&lt;br /&gt;
| Rescue disk&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceforge.net/projects/trinux/files/ Trinux]&lt;br /&gt;
| 1–2 floppy&lt;br /&gt;
| 486&lt;br /&gt;
| 8–16 MB&lt;br /&gt;
| 1.44–3 MB&lt;br /&gt;
| Sicurezza/network auditing&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [https://web.archive.org/web/20070629142617/http://zoollinux.berlios.de/doku.php Zool]&lt;br /&gt;
| 1 floppy&lt;br /&gt;
| 386&lt;br /&gt;
| ~4 MB&lt;br /&gt;
| 1.44 MB&lt;br /&gt;
| Linux ultra-compatto&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Buildroot=&lt;br /&gt;
Soluzioni preconfezionate (come quelle sopra elencate) potrebbero non rispondere alle nostre esigenze: kernel datati (2.0, 2.2), driver mancanti o magari mancano proprio dell'applicazione di cui abbiamo bisogno.&lt;br /&gt;
&lt;br /&gt;
In questi casi la soluzione più rapida è quella di costruirsi il proprio sistema Linux personalizzato. Per farlo il metodo più semplice è utilizzare [https://buildroot.org/download.html Buildroot], un tool che permette la cross-compilazione di un ambiente Linux completo di librerie (glibc, uclibc-ng o musl), numerose applicazioni e l'eseguibile busybox.&lt;br /&gt;
&lt;br /&gt;
Questa procedura è analoga a quella usata per la realizzazione di qualsiasi sistema embedded Linux-based: router, decoder, lettory DVD...&lt;br /&gt;
&lt;br /&gt;
Scompattare il tool&lt;br /&gt;
 $ tar -xzvf buildroot-2026.02.tar.gz&lt;br /&gt;
&lt;br /&gt;
Entrare nella directory principale&lt;br /&gt;
 $ cd buildroot-2026.02/&lt;br /&gt;
&lt;br /&gt;
==BusyBox==&lt;br /&gt;
Configurare busybox selezionando i programmi che si ritengono necessari&lt;br /&gt;
 $ make busybox-menuconfig&lt;br /&gt;
&lt;br /&gt;
==Kernel==&lt;br /&gt;
Configurare il kernel per la compilazione&lt;br /&gt;
 $ make linux-menuconfig&lt;br /&gt;
&lt;br /&gt;
Escludere tutto ciò che non è strettamente necessario per risparmiare spazio su disco, quanto segue dovrà essere necessariamente presente per ottenere un sistema minimo avviabile.&lt;br /&gt;
&lt;br /&gt;
* Code maturity level-&amp;gt; Prompt for development&lt;br /&gt;
&lt;br /&gt;
* Processor type and features-&amp;gt; Support for your processor&lt;br /&gt;
&lt;br /&gt;
* General setup-&amp;gt; kernel support for ELF binaries&lt;br /&gt;
&lt;br /&gt;
* Block devices-&amp;gt; RAM disk support&lt;br /&gt;
&lt;br /&gt;
* File systems-&amp;gt; /proc filesystem, tmpfs, ext2&lt;br /&gt;
&lt;br /&gt;
* Character devices-&amp;gt; Virtual terminal&lt;br /&gt;
&lt;br /&gt;
* Character devices-&amp;gt; Support for console on virtual terminal&lt;br /&gt;
&lt;br /&gt;
* Console drivers-&amp;gt; VGA text console&lt;br /&gt;
&lt;br /&gt;
* General setup-&amp;gt; PCI support&lt;br /&gt;
&lt;br /&gt;
* I driver delle schede di rete che interessa supportare (ne, ne2k, rtl8139too, rtl8139c, pcnet32, e1000)&lt;br /&gt;
&lt;br /&gt;
* Iptables se si necessita di un firewall&lt;br /&gt;
&lt;br /&gt;
* Un driver IDE generico (generic ATA) su libata&lt;br /&gt;
&lt;br /&gt;
* Block devices-&amp;gt; Normal PC floppy disk support, se ci interesse il supporto al floppy&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Se si deve limitare al massimo la grandezza dell'immagine del kernel (bzImage) si può scegliere con un algoritmo di compressione come lzma. Questo però aumenterà il consumo di RAM e per macchine molto vecchie come i386 o i486 probabilmente è meglio optare per gz o al massimo bz2.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Configurazione generale==&lt;br /&gt;
 $ make menuconfig&lt;br /&gt;
&lt;br /&gt;
Indicare:&lt;br /&gt;
&lt;br /&gt;
* Architettura di destinazione (i386, i486, i586…)&lt;br /&gt;
&lt;br /&gt;
* Opzioni di compilazione&lt;br /&gt;
&lt;br /&gt;
* Versione del kernel da usare&lt;br /&gt;
&lt;br /&gt;
* Configurazione di partenza del kernel&lt;br /&gt;
 Kernel  ---&amp;gt; Kernel configuration (Use the architecture default configuration)&lt;br /&gt;
&lt;br /&gt;
* Eventuali altri programmi non presenti in busybox (es.: mdev, dropbear, nano, iptables, ncftp, lynx, mutt)&lt;br /&gt;
&lt;br /&gt;
* Si consiglia l'opzione di compilazione gcc '''-Os''' al fine di ridurre al minimo la grandezza dei binari &lt;br /&gt;
&lt;br /&gt;
===Filesystem images===&lt;br /&gt;
Esistono varie tipologie di filesystem da utilizzare per il sistema che verrà compilato: immagini ext2, squashfs, direttamente nel initramfs o semplicemente in un tarball. Nel caso ci interessi costruire un floppy, al fine di sfruttare al meglio lo spazio, consiglio di scegliere ext2 compresso, anche in questo caso con lzma si ottengono filesystem fino al 20% più piccoli rispetto a quelli compressi con bzip2, ma il sistema  necessiterà di maggiore RAM per caricarli (70-80MB). &lt;br /&gt;
&lt;br /&gt;
Terminata la fase di configurazione si può procedere con la compilazione&lt;br /&gt;
 $ make&lt;br /&gt;
&lt;br /&gt;
==output==&lt;br /&gt;
Nella directory buildroot-2026.02/output/images risiede il prodotto finito.&lt;br /&gt;
Se lasciate le impostazioni standard si tratterà di 3 file: bzImage, rootfs.ext2, rootfs.tar.&lt;br /&gt;
&lt;br /&gt;
==Floppy Linux==&lt;br /&gt;
Le dimensioni dei file bzImage e rootfs.i486.ext2.lzma devono essere sufficientemente contenute per entrare su un floppy.&lt;br /&gt;
Nel caso fossero solo di poco più grandi (100-200 KB), si può rimediare con la formattazione non standard del floppy: a 1.72 MB invece che a 1.44MB.&lt;br /&gt;
 $ sudo mknod /dev/fd0u1722 b 2 60&lt;br /&gt;
 $ fdformat /dev/fd0u1722&lt;br /&gt;
 $ mkfs.vfat /dev/fd0u1722&lt;br /&gt;
&lt;br /&gt;
Se non presente creare un mount point per il floppy&lt;br /&gt;
 $ sudo mkdir /mnt/floppy&lt;br /&gt;
&lt;br /&gt;
Montare il floppy&lt;br /&gt;
 $ sudo mount /dev/fd0u1722 /mnt/floppy&lt;br /&gt;
&lt;br /&gt;
Copiarvi i due file&lt;br /&gt;
 $ sudo cp buildroot/output/images/bzImage /mnt/floppy&lt;br /&gt;
 $ sudo cp buildroot/output/images/rootfs.i486.ext2.lzma /mnt/floppy&lt;br /&gt;
&lt;br /&gt;
Adesso occorre installare un boot loader sul floppy. Essendo leggero, semplice da usare e supportando la FAT16 si consiglia di usare syslinux.&lt;br /&gt;
&lt;br /&gt;
Se syslinux non fosse presente sul vostro sistema installatelo con:&lt;br /&gt;
&lt;br /&gt;
 $ sudo apt-get install syslinux&lt;br /&gt;
per sistemi Debian-based&lt;br /&gt;
&lt;br /&gt;
O con&lt;br /&gt;
 # pacman -S syslinux&lt;br /&gt;
su Arch Linux&lt;br /&gt;
&lt;br /&gt;
Con un editor di testo (es. nano) create il file di configurazione per il boot loader: syslinux.cfg&lt;br /&gt;
 $ sudo nano /mnt/floppy/syslinux.cfg&lt;br /&gt;
&lt;br /&gt;
Riportate quanto segue, eventualmente adattandolo alle vostre esigenze:&lt;br /&gt;
&lt;br /&gt;
 default start&lt;br /&gt;
 timeout 5&lt;br /&gt;
 prompt 1&lt;br /&gt;
 label start&lt;br /&gt;
 kernel bzImage&lt;br /&gt;
 append initrd=rootfs.i486.ext2.lzma BOOTDEV=fd0 ramdisk_size=16384 vga=0 root=/dev/ram0&lt;br /&gt;
&lt;br /&gt;
Se è stato usato un altro tipo di filesystem sostituire rootfs.i486.ext2.lzma con rootfs.i486.ext2.bz2, rootfs.i486.ext2.squashfs…&lt;br /&gt;
&lt;br /&gt;
Installare il bootloader sul floppy&lt;br /&gt;
 $ sudo syslinux /dev/fd0&lt;br /&gt;
&lt;br /&gt;
Smontare il floppy&lt;br /&gt;
 $ cd&lt;br /&gt;
 $ sudo umount /mnt/floppy&lt;br /&gt;
&lt;br /&gt;
In caso di necessità di modifiche al ramdisk bisognerà copiarlo sul disco fisso, decomprimerlo, montarlo in loop ed effettuare le modifiche in questo modo:&lt;br /&gt;
 $ sudo mount /mnt/floppy&lt;br /&gt;
 $ sudo cp /mnt/floppy/rootfs.i486.ext2.lzma&lt;br /&gt;
 $ sudo lzma -d rootfs.i486.ext2.lzma&lt;br /&gt;
 $ sudo mkdir /mnt/tmp&lt;br /&gt;
 $ sudo mount -o loop rootfs.i486.ext2 /mnt/tmp&lt;br /&gt;
 $ cd /mnt/tmp&lt;br /&gt;
&lt;br /&gt;
Effettuare le modifiche e poi smontare il tutto&lt;br /&gt;
 $ cd&lt;br /&gt;
 $ sudo umount /mnt/tmp&lt;br /&gt;
&lt;br /&gt;
Ricomprimere il ramdisk e copiarlo sul floppy per sostituire quello vecchio&lt;br /&gt;
 $ sudo lzma -c9 rootfs.i486.ext2 &amp;gt; rootfs.i486.ext2.lzma&lt;br /&gt;
 $ sudo cp rootfs.i486.ext2.lzma /mnt/floppy&lt;br /&gt;
 $ sudo umount /mnt/floppy&lt;br /&gt;
&lt;br /&gt;
Un floppy già pronto con le seguenti caratteristiche ''era'' presente [http://golem.linux.it/files/spookyh/fspooky_v05.tar.xz qui]&lt;br /&gt;
&lt;br /&gt;
* Linux kernel 3.2.9&lt;br /&gt;
&lt;br /&gt;
* Busybox 1.19.4&lt;br /&gt;
&lt;br /&gt;
* Programmi inclusi: ftpd, ncftp, dropbear (ssh client/server), httpd, iptables, dhcp client/server, nc, wget, fdisk.&lt;br /&gt;
&lt;br /&gt;
* Requisiti minimi: i586 (60 MHz), 74 Mb RAM, floppy driver 3,5&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* Hardware supportato: processori i586 compatibili, Bus PCI (niente ISA), Controller Generic ATA disk; schede di rete Novell NE2000 (e cloni), RealTek 8129, Intel PRO/1000 Gigabit Adapter.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Immagine per hard disk==&lt;br /&gt;
Se un floppy è troppo piccolo per le nostre esigenze si può costruire il sistema dentro ad un file d'immagine da copiare sull'hard disk della nostra macchina direttamente con dd. Creiamo quindi un'immagine da 250 MB, che dovrebbe essere più che sufficiente per un sistema testuale&lt;br /&gt;
 dd if=/dev/zero of=output/images/486linux.img bs=1M count=250&lt;br /&gt;
&lt;br /&gt;
Montiamo l'immagine per poter formattare il filesystem e copiarci i dati&lt;br /&gt;
 # losetup -Pf 486linux.img&lt;br /&gt;
 # mkfs.ext2 /dev/loop0p1&lt;br /&gt;
Probabilmente il miglior filesystem per un sistema così vecchio è ext2, si rinuncia al journaling, ma ci si guadagna parecchio in performance.&lt;br /&gt;
 # mkfs.ext2 -m 0 -O none /dev/loop0p1&lt;br /&gt;
&lt;br /&gt;
Montiamo il tutto&lt;br /&gt;
 # mount /dev/loop0p1 /mnt/img&lt;br /&gt;
&lt;br /&gt;
Copiamoci il filesystem ed il kernel&lt;br /&gt;
 # tar xf buildroot-2026.02/output/images/rootfs.tar -C /mnt/img&lt;br /&gt;
 # mkdir -p /mnt/img/boot&lt;br /&gt;
 # cp buildroot-2026.02/output/images/bzImage /mnt/img/boot/bzImage&lt;br /&gt;
&lt;br /&gt;
Come bootloader, anche in questo caso si è optato per il semplicissimo syslinux.&lt;br /&gt;
 sudo pacman -S syslinux&lt;br /&gt;
 sudo extlinux --install /mnt/img/boot/&lt;br /&gt;
&lt;br /&gt;
Configuriamo il bootloader (/mnt/boot/syslinux.cfg)&lt;br /&gt;
 DEFAULT linux&lt;br /&gt;
 timeout 5&lt;br /&gt;
 prompt 1&lt;br /&gt;
 LABEL linux&lt;br /&gt;
    KERNEL /boot/bzImage&lt;br /&gt;
    APPEND root=/dev/sda1 ro&lt;br /&gt;
&lt;br /&gt;
Se ci interessa la tastiera italiana creiamo dal nostro sistema host il file .bmap da far caricare a busybox &lt;br /&gt;
 # loadkeys -qb it &amp;gt; it.bmap&lt;br /&gt;
 # mv it.bmap /mnt/img/etc&lt;br /&gt;
&lt;br /&gt;
===Tastiera italiana===&lt;br /&gt;
Possiamo creare uno script d'avvio tipo ''/etc/init.d/S40keyboard'' per far in modo che il sistema lo carichi automaticamente (ricordatevi di renderlo eseguibile).&lt;br /&gt;
 #!/bin/sh&lt;br /&gt;
 loadkmap &amp;lt; /etc/it.bmap&lt;br /&gt;
&lt;br /&gt;
===Hotplug===&lt;br /&gt;
Per l'hotplug dei moduli occorre aver installato il programma mdev, anche in questo caso converrà scrivere uno script di avvio tipo il seguente (/etc/init.d/S10mdev) &lt;br /&gt;
 #!/bin/sh&lt;br /&gt;
 case &amp;quot;$1&amp;quot; in&lt;br /&gt;
    start)&lt;br /&gt;
        echo &amp;quot;Starting mdev...&amp;quot;&lt;br /&gt;
        # Imposta mdev come gestore degli eventi hotplug&lt;br /&gt;
        echo /sbin/mdev &amp;gt; /proc/sys/kernel/hotplug&lt;br /&gt;
        # Scansiona /sys per creare i device node per l'hardware già presente&lt;br /&gt;
        /sbin/mdev -s&lt;br /&gt;
        # Questo è il &amp;quot;coldplug&amp;quot;: trova tutti i moduli dell'hardware già presente e li carica&lt;br /&gt;
        echo &amp;quot;Loading kernel modules for existing hardware...&amp;quot;&lt;br /&gt;
        find /sys/ -name modalias | xargs sort -u | xargs modprobe -abq&lt;br /&gt;
        ;;&lt;br /&gt;
    stop)&lt;br /&gt;
        echo &amp;quot;Stopping mdev...&amp;quot;&lt;br /&gt;
        ;;&lt;br /&gt;
    *)&lt;br /&gt;
        echo &amp;quot;Usage: $0 {start|stop}&amp;quot;&lt;br /&gt;
        exit 1&lt;br /&gt;
        ;;&lt;br /&gt;
 esac&lt;br /&gt;
[[Category:howto]]&lt;/div&gt;</summary>
		<author><name>$pooky Hunter</name></author>
	</entry>
	<entry>
		<id>https://wiki.golem.linux.it/index.php?title=Linux_minimale_per_PC_i386/i486&amp;diff=9961</id>
		<title>Linux minimale per PC i386/i486</title>
		<link rel="alternate" type="text/html" href="https://wiki.golem.linux.it/index.php?title=Linux_minimale_per_PC_i386/i486&amp;diff=9961"/>
		<updated>2026-05-14T22:32:42Z</updated>

		<summary type="html">&lt;p&gt;$pooky Hunter: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Distribuzioni per i486-i586=&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! Distro&lt;br /&gt;
! CPU minima&lt;br /&gt;
! RAM minima&lt;br /&gt;
! Disco/ISO&lt;br /&gt;
! Uso ideale&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [http://delicate-linux.net/ DeLi Linux]&lt;br /&gt;
| i486&lt;br /&gt;
| 8–16 MB&lt;br /&gt;
| ~200 MB installazione&lt;br /&gt;
| Retrocomputing puro, PC anni '90&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.slitaz.org SliTaz]&lt;br /&gt;
| i486&lt;br /&gt;
| 24–64 MB&lt;br /&gt;
| ISO 30–60 MB&lt;br /&gt;
| Pentium II/III molto leggeri&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.tinycorelinux.com Tiny Core Linux]&lt;br /&gt;
| i486DX&lt;br /&gt;
| 46 MB&lt;br /&gt;
| 20–200 MB&lt;br /&gt;
| Minimalismo estremo, appliance&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.puppylinux.com Puppy Linux]&lt;br /&gt;
| Pentium II&lt;br /&gt;
| 128-256 MB&lt;br /&gt;
| 300–500 MB ISO&lt;br /&gt;
| Desktop leggero usabile&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.damnsmalllinux.org  Damn Small Linux 2024]&lt;br /&gt;
| i686&lt;br /&gt;
| 256-512 MB&lt;br /&gt;
| ~700 MB ISO&lt;br /&gt;
| Hardware datato ma moderno&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Distribuzioni per i386-i486=&lt;br /&gt;
Se si tenta di recuperare una macchina particolarmente vecchia possono venire in nostro soccorso delle mini distribuzioni prive di ambiente grafico e talmente compatte da poter essere contenute in un unico floppy.&lt;br /&gt;
&lt;br /&gt;
NB: è stato rimosso il supporto ai 386 nel 2012 (kernel 3.8) ed ai 486 nel 2026 (kernel 7.1)&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! Distribuzione&lt;br /&gt;
! Supporto avvio&lt;br /&gt;
! CPU minima&lt;br /&gt;
! RAM minima&lt;br /&gt;
! Dimensione tipica&lt;br /&gt;
! Uso ideale&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [https://krzysztofjankowski.com/floppinux/ FLOPPINUX]&lt;br /&gt;
| 1 floppy&lt;br /&gt;
| 386&lt;br /&gt;
| 4–8 MB&lt;br /&gt;
| 1.44 MB&lt;br /&gt;
| Mini Linux educativo/sperimentale&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/snacsnoc/fluxflop/releases Fluxflop]&lt;br /&gt;
| 1–2 floppy&lt;br /&gt;
| 386&lt;br /&gt;
| ~4 MB&lt;br /&gt;
| 1.44–2.88 MB&lt;br /&gt;
| Networking minimale&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.fdlinux.com/download.php FD Linux]&lt;br /&gt;
| 1 floppy&lt;br /&gt;
| 386SX&lt;br /&gt;
| 4 MB&lt;br /&gt;
| 1.44 MB&lt;br /&gt;
| DOS/Linux compatto&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.zelow.no/floppyfw floppyfw]&lt;br /&gt;
| 1 floppy&lt;br /&gt;
| 386&lt;br /&gt;
| 8 MB&lt;br /&gt;
| 1.44 MB&lt;br /&gt;
| Router/firewall embedded&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [https://web.archive.org/web/20190312063410/http://chris.silmor.de/hal91/ HAL91]&lt;br /&gt;
| 1 floppy&lt;br /&gt;
| 386&lt;br /&gt;
| 2–4 MB&lt;br /&gt;
| 1.44 MB&lt;br /&gt;
| Esperimenti ultra-minimali&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [http://micheleandreoli.org/public/Software/mulinux/ muLinux]&lt;br /&gt;
| 1+ floppy modulari&lt;br /&gt;
| 386SX&lt;br /&gt;
| 4 MB&lt;br /&gt;
| 1.44 MB base&lt;br /&gt;
| Recupero PC vintage&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [http://smartlinux.sourceforge.net S.M.A.R.T. Linux]&lt;br /&gt;
| 1 floppy&lt;br /&gt;
| 386&lt;br /&gt;
| 4–8 MB&lt;br /&gt;
| 1.44 MB&lt;br /&gt;
| Toolkit floppy generale&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [http://distro.ibiblio.org/polypux/external/smalllinux/ Small Linux]&lt;br /&gt;
| 1–2 floppy&lt;br /&gt;
| 386&lt;br /&gt;
| 4–8 MB&lt;br /&gt;
| ~2 MB&lt;br /&gt;
| Sistema Linux minimale&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [https://archiveos.org/tomsrtbt/ tomsrtbt]&lt;br /&gt;
| 1 floppy&lt;br /&gt;
| 386SX&lt;br /&gt;
| 8 MB&lt;br /&gt;
| 1.72 MB&lt;br /&gt;
| Rescue disk&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceforge.net/projects/trinux/files/ Trinux]&lt;br /&gt;
| 1–2 floppy&lt;br /&gt;
| 486&lt;br /&gt;
| 8–16 MB&lt;br /&gt;
| 1.44–3 MB&lt;br /&gt;
| Sicurezza/network auditing&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [https://web.archive.org/web/20070629142617/http://zoollinux.berlios.de/doku.php Zool]&lt;br /&gt;
| 1 floppy&lt;br /&gt;
| 386&lt;br /&gt;
| ~4 MB&lt;br /&gt;
| 1.44 MB&lt;br /&gt;
| Linux ultra-compatto&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Buildroot=&lt;br /&gt;
Soluzioni preconfezionate (come quelle sopra elencate) potrebbero non rispondere alle nostre esigenze: kernel datati (2.0, 2.2), driver mancanti o magari mancano proprio dell'applicazione di cui abbiamo bisogno.&lt;br /&gt;
&lt;br /&gt;
In questi casi la soluzione più rapida è quella di costruirsi il proprio sistema Linux personalizzato. Per farlo il metodo più semplice è utilizzare [https://buildroot.org/download.html Buildroot], un tool che permette la cross-compilazione di un ambiente Linux completo di librerie (glibc, uclibc-ng o musl), numerose applicazioni e l'eseguibile busybox.&lt;br /&gt;
&lt;br /&gt;
Questa procedura è analoga a quella usata per la realizzazione di qualsiasi sistema embedded Linux-based: router, decoder, lettory DVD...&lt;br /&gt;
&lt;br /&gt;
Scompattare il tool&lt;br /&gt;
 $ tar -xzvf buildroot-2026.02.tar.gz&lt;br /&gt;
&lt;br /&gt;
Entrare nella directory principale&lt;br /&gt;
 $ cd buildroot-2026.02/&lt;br /&gt;
&lt;br /&gt;
==BusyBox==&lt;br /&gt;
Configurare busybox selezionando i programmi che si ritengono necessari&lt;br /&gt;
 $ make busybox-menuconfig&lt;br /&gt;
&lt;br /&gt;
==Kernel==&lt;br /&gt;
Configurare il kernel per la compilazione&lt;br /&gt;
 $ make linux-menuconfig&lt;br /&gt;
&lt;br /&gt;
Escludere tutto ciò che non è strettamente necessario per risparmiare spazio su disco, quanto segue dovrà essere necessariamente presente per ottenere un sistema minimo avviabile.&lt;br /&gt;
&lt;br /&gt;
* Code maturity level-&amp;gt; Prompt for development&lt;br /&gt;
&lt;br /&gt;
* Processor type and features-&amp;gt; Support for your processor&lt;br /&gt;
&lt;br /&gt;
* General setup-&amp;gt; kernel support for ELF binaries&lt;br /&gt;
&lt;br /&gt;
* Block devices-&amp;gt; RAM disk support&lt;br /&gt;
&lt;br /&gt;
* File systems-&amp;gt; /proc filesystem, tmpfs, ext2&lt;br /&gt;
&lt;br /&gt;
* Character devices-&amp;gt; Virtual terminal&lt;br /&gt;
&lt;br /&gt;
* Character devices-&amp;gt; Support for console on virtual terminal&lt;br /&gt;
&lt;br /&gt;
* Console drivers-&amp;gt; VGA text console&lt;br /&gt;
&lt;br /&gt;
* General setup-&amp;gt; PCI support&lt;br /&gt;
&lt;br /&gt;
* I driver delle schede di rete che interessa supportare (ne, ne2k, rtl8139too, rtl8139c, pcnet32, e1000)&lt;br /&gt;
&lt;br /&gt;
* Iptables se si necessita di un firewall&lt;br /&gt;
&lt;br /&gt;
* Un driver IDE generico (generic ATA) su libata&lt;br /&gt;
&lt;br /&gt;
* Block devices-&amp;gt; Normal PC floppy disk support, se ci interesse il supporto al floppy&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Se si deve limitare al massimo la grandezza dell'immagine del kernel (bzImage) si può scegliere con un algoritmo di compressione come lzma. Questo però aumenterà il consumo di RAM e per macchine molto vecchie come i386 o i486 probabilmente è meglio optare per gz o al massimo bz2.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Configurazione generale==&lt;br /&gt;
 $ make menuconfig&lt;br /&gt;
&lt;br /&gt;
Indicare:&lt;br /&gt;
&lt;br /&gt;
* Architettura di destinazione (i386, i486, i586…)&lt;br /&gt;
&lt;br /&gt;
* Opzioni di compilazione&lt;br /&gt;
&lt;br /&gt;
* Versione del kernel da usare&lt;br /&gt;
&lt;br /&gt;
* Configurazione di partenza del kernel&lt;br /&gt;
 Kernel  ---&amp;gt; Kernel configuration (Use the architecture default configuration)&lt;br /&gt;
&lt;br /&gt;
* Eventuali altri programmi non presenti in busybox (es.: mdev, dropbear, nano, iptables, ncftp, lynx, mutt)&lt;br /&gt;
&lt;br /&gt;
* Si consiglia l'opzione di compilazione gcc '''-Os''' al fine di ridurre al minimo la grandezza dei binari &lt;br /&gt;
&lt;br /&gt;
===Filesystem images===&lt;br /&gt;
Esistono varie tipologie di filesystem da utilizzare per il sistema che verrà compilato: immagini ext2, squashfs, direttamente nel initramfs o semplicemente in un tarball. Nel caso ci interessi costruire un floppy, al fine di sfruttare al meglio lo spazio, consiglio di scegliere ext2 compresso, anche in questo caso con lzma si ottengono filesystem fino al 20% più piccoli rispetto a quelli compressi con bzip2, ma il sistema  necessiterà di maggiore RAM per caricarli (70-80MB). &lt;br /&gt;
&lt;br /&gt;
Terminata la fase di configurazione si può procedere con la compilazione&lt;br /&gt;
 $ make&lt;br /&gt;
&lt;br /&gt;
==output==&lt;br /&gt;
Nella directory buildroot-2026.02/output/images risiede il prodotto finito.&lt;br /&gt;
Se lasciate le impostazioni standard si tratterà di 3 file: bzImage, rootfs.ext2, rootfs.tar.&lt;br /&gt;
&lt;br /&gt;
==Floppy Linux==&lt;br /&gt;
Le dimensioni dei file bzImage e rootfs.i486.ext2.lzma devono essere sufficientemente contenute per entrare su un floppy.&lt;br /&gt;
Nel caso fossero solo di poco più grandi (100-200 KB), si può rimediare con la formattazione non standard del floppy: a 1.72 MB invece che a 1.44MB.&lt;br /&gt;
 $ sudo mknod /dev/fd0u1722 b 2 60&lt;br /&gt;
 $ fdformat /dev/fd0u1722&lt;br /&gt;
 $ mkfs.vfat /dev/fd0u1722&lt;br /&gt;
&lt;br /&gt;
Se non presente creare un mount point per il floppy&lt;br /&gt;
 $ sudo mkdir /mnt/floppy&lt;br /&gt;
&lt;br /&gt;
Montare il floppy&lt;br /&gt;
 $ sudo mount /dev/fd0u1722 /mnt/floppy&lt;br /&gt;
&lt;br /&gt;
Copiarvi i due file&lt;br /&gt;
 $ sudo cp buildroot/output/images/bzImage /mnt/floppy&lt;br /&gt;
 $ sudo cp buildroot/output/images/rootfs.i486.ext2.lzma /mnt/floppy&lt;br /&gt;
&lt;br /&gt;
Adesso occorre installare un boot loader sul floppy. Essendo leggero, semplice da usare e supportando la FAT16 si consiglia di usare syslinux.&lt;br /&gt;
&lt;br /&gt;
Se syslinux non fosse presente sul vostro sistema installatelo con:&lt;br /&gt;
&lt;br /&gt;
 $ sudo apt-get install syslinux&lt;br /&gt;
per sistemi Debian-based&lt;br /&gt;
&lt;br /&gt;
O con&lt;br /&gt;
 # pacman -S syslinux&lt;br /&gt;
su Arch Linux&lt;br /&gt;
&lt;br /&gt;
Con un editor di testo (es. nano) create il file di configurazione per il boot loader: syslinux.cfg&lt;br /&gt;
 $ sudo nano /mnt/floppy/syslinux.cfg&lt;br /&gt;
&lt;br /&gt;
Riportate quanto segue, eventualmente adattandolo alle vostre esigenze:&lt;br /&gt;
&lt;br /&gt;
 default start&lt;br /&gt;
 timeout 5&lt;br /&gt;
 prompt 1&lt;br /&gt;
 label start&lt;br /&gt;
 kernel bzImage&lt;br /&gt;
 append initrd=rootfs.i486.ext2.lzma BOOTDEV=fd0 ramdisk_size=16384 vga=0 root=/dev/ram0&lt;br /&gt;
&lt;br /&gt;
Se è stato usato un altro tipo di filesystem sostituire rootfs.i486.ext2.lzma con rootfs.i486.ext2.bz2, rootfs.i486.ext2.squashfs…&lt;br /&gt;
&lt;br /&gt;
Installare il bootloader sul floppy&lt;br /&gt;
 $ sudo syslinux /dev/fd0&lt;br /&gt;
&lt;br /&gt;
Smontare il floppy&lt;br /&gt;
 $ cd&lt;br /&gt;
 $ sudo umount /mnt/floppy&lt;br /&gt;
&lt;br /&gt;
In caso di necessità di modifiche al ramdisk bisognerà copiarlo sul disco fisso, decomprimerlo, montarlo in loop ed effettuare le modifiche in questo modo:&lt;br /&gt;
 $ sudo mount /mnt/floppy&lt;br /&gt;
 $ sudo cp /mnt/floppy/rootfs.i486.ext2.lzma&lt;br /&gt;
 $ sudo lzma -d rootfs.i486.ext2.lzma&lt;br /&gt;
 $ sudo mkdir /mnt/tmp&lt;br /&gt;
 $ sudo mount -o loop rootfs.i486.ext2 /mnt/tmp&lt;br /&gt;
 $ cd /mnt/tmp&lt;br /&gt;
&lt;br /&gt;
Effettuare le modifiche e poi smontare il tutto&lt;br /&gt;
 $ cd&lt;br /&gt;
 $ sudo umount /mnt/tmp&lt;br /&gt;
&lt;br /&gt;
Ricomprimere il ramdisk e copiarlo sul floppy per sostituire quello vecchio&lt;br /&gt;
 $ sudo lzma -c9 rootfs.i486.ext2 &amp;gt; rootfs.i486.ext2.lzma&lt;br /&gt;
 $ sudo cp rootfs.i486.ext2.lzma /mnt/floppy&lt;br /&gt;
 $ sudo umount /mnt/floppy&lt;br /&gt;
&lt;br /&gt;
Un floppy già pronto con le seguenti caratteristiche ''era'' presente [http://golem.linux.it/files/spookyh/fspooky_v05.tar.xz qui]&lt;br /&gt;
&lt;br /&gt;
* Linux kernel 3.2.9&lt;br /&gt;
&lt;br /&gt;
* Busybox 1.19.4&lt;br /&gt;
&lt;br /&gt;
* Programmi inclusi: ftpd, ncftp, dropbear (ssh client/server), httpd, iptables, dhcp client/server, nc, wget, fdisk.&lt;br /&gt;
&lt;br /&gt;
* Requisiti minimi: i586 (60 MHz), 74 Mb RAM, floppy driver 3,5&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* Hardware supportato: processori i586 compatibili, Bus PCI (niente ISA), Controller Generic ATA disk; schede di rete Novell NE2000 (e cloni), RealTek 8129, Intel PRO/1000 Gigabit Adapter.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Immagine per hard disk==&lt;br /&gt;
Se un floppy è troppo piccolo per le nostre esigenze si può costruire il sistema dentro ad un file d'immagine da copiare sull'hard disk della nostra macchina direttamente con dd. Creiamo quindi un'immagine da 250 MB, che dovrebbe essere più che sufficiente per un sistema testuale&lt;br /&gt;
 dd if=/dev/zero of=output/images/486linux.img bs=1M count=250&lt;br /&gt;
&lt;br /&gt;
Montiamo l'immagine per poter formattare il filesystem e copiarci i dati&lt;br /&gt;
 # losetup -Pf 486linux.img&lt;br /&gt;
 # mkfs.ext2 /dev/loop0p1&lt;br /&gt;
Probabilmente il miglior filesystem per un sistema così vecchio è ext2, si rinuncia al journaling, ma ci si guadagna parecchio in performance.&lt;br /&gt;
 # mkfs.ext2 -m 0 -O none /dev/loop0p1&lt;br /&gt;
&lt;br /&gt;
Montiamo il tutto&lt;br /&gt;
 # mount /dev/loop0p1 /mnt/img&lt;br /&gt;
&lt;br /&gt;
Copiamoci il filesystem ed il kernel&lt;br /&gt;
 # tar xf buildroot-2026.02/output/images/rootfs.tar -C /mnt/img&lt;br /&gt;
 # mkdir -p /mnt/img/boot&lt;br /&gt;
 # cp buildroot-2026.02/output/images/bzImage /mnt/img/boot/bzImage&lt;br /&gt;
&lt;br /&gt;
Come bootloader, anche in questo caso si è optato per il semplicissimo syslinux.&lt;br /&gt;
 sudo pacman -S syslinux&lt;br /&gt;
 sudo extlinux --install /mnt/img/boot/&lt;br /&gt;
&lt;br /&gt;
Configuriamo il bootloader (/mnt/boot/syslinux.cfg)&lt;br /&gt;
 DEFAULT linux&lt;br /&gt;
 timeout 5&lt;br /&gt;
 prompt 1&lt;br /&gt;
 LABEL linux&lt;br /&gt;
    KERNEL /boot/bzImage&lt;br /&gt;
    APPEND root=/dev/sda1 ro&lt;br /&gt;
&lt;br /&gt;
Se ci interessa la tastiera italiana creiamo dal nostro sistema host il file .bmap da far caricare a busybox &lt;br /&gt;
 # loadkeys -qb it &amp;gt; it.bmap&lt;br /&gt;
 # mv it.bmap /mnt/img/etc&lt;br /&gt;
&lt;br /&gt;
===Tastiera italiana===&lt;br /&gt;
Possiamo creare uno script d'avvio tipo ''/etc/init.d/S40keyboard'' per far in modo che il sistema lo carichi automaticamente (ricordatevi di renderlo eseguibile).&lt;br /&gt;
 #!/bin/sh&lt;br /&gt;
 loadkmap &amp;lt; /etc/it.bmap&lt;br /&gt;
&lt;br /&gt;
===Hotplug===&lt;br /&gt;
Per l'hotplug dei moduli occorre aver installato il programma mdev, anche in questo caso converrà scrivere uno script di avvio tipo il seguente (/etc/init.d/S10mdev) &lt;br /&gt;
 #!/bin/sh&lt;br /&gt;
 case &amp;quot;$1&amp;quot; in&lt;br /&gt;
    start)&lt;br /&gt;
        echo &amp;quot;Starting mdev...&amp;quot;&lt;br /&gt;
        # Imposta mdev come gestore degli eventi hotplug&lt;br /&gt;
        echo /sbin/mdev &amp;gt; /proc/sys/kernel/hotplug&lt;br /&gt;
        # Scansiona /sys per creare i device node per l'hardware già presente&lt;br /&gt;
        /sbin/mdev -s&lt;br /&gt;
        # Questo è il &amp;quot;coldplug&amp;quot;: trova tutti i moduli dell'hardware già presente e li carica&lt;br /&gt;
        echo &amp;quot;Loading kernel modules for existing hardware...&amp;quot;&lt;br /&gt;
        find /sys/ -name modalias | xargs sort -u | xargs modprobe -abq&lt;br /&gt;
        ;;&lt;br /&gt;
    stop)&lt;br /&gt;
        echo &amp;quot;Stopping mdev...&amp;quot;&lt;br /&gt;
        ;;&lt;br /&gt;
    *)&lt;br /&gt;
        echo &amp;quot;Usage: $0 {start|stop}&amp;quot;&lt;br /&gt;
        exit 1&lt;br /&gt;
        ;;&lt;br /&gt;
 esac&lt;br /&gt;
[[Category:howto]]&lt;/div&gt;</summary>
		<author><name>$pooky Hunter</name></author>
	</entry>
	<entry>
		<id>https://wiki.golem.linux.it/index.php?title=Linux_minimale_per_PC_i386/i486&amp;diff=9960</id>
		<title>Linux minimale per PC i386/i486</title>
		<link rel="alternate" type="text/html" href="https://wiki.golem.linux.it/index.php?title=Linux_minimale_per_PC_i386/i486&amp;diff=9960"/>
		<updated>2026-05-14T22:16:47Z</updated>

		<summary type="html">&lt;p&gt;$pooky Hunter: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Distribuzioni per i486-i586=&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! Distro&lt;br /&gt;
! CPU minima&lt;br /&gt;
! RAM minima&lt;br /&gt;
! Disco/ISO&lt;br /&gt;
! Uso ideale&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [http://delicate-linux.net/ DeLi Linux]&lt;br /&gt;
| i486&lt;br /&gt;
| 8–16 MB&lt;br /&gt;
| ~200 MB installazione&lt;br /&gt;
| Retrocomputing puro, PC anni '90&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.slitaz.org SliTaz]&lt;br /&gt;
| i486&lt;br /&gt;
| 24–64 MB&lt;br /&gt;
| ISO 30–60 MB&lt;br /&gt;
| Pentium II/III molto leggeri&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.tinycorelinux.com Tiny Core Linux]&lt;br /&gt;
| i486DX&lt;br /&gt;
| 46 MB&lt;br /&gt;
| 20–200 MB&lt;br /&gt;
| Minimalismo estremo, appliance&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.puppylinux.com Puppy Linux]&lt;br /&gt;
| Pentium II&lt;br /&gt;
| 128-256 MB&lt;br /&gt;
| 300–500 MB ISO&lt;br /&gt;
| Desktop leggero usabile&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.damnsmalllinux.org  Damn Small Linux 2024]&lt;br /&gt;
| i686&lt;br /&gt;
| 256-512 MB&lt;br /&gt;
| ~700 MB ISO&lt;br /&gt;
| Hardware datato ma moderno&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Floppy Linux=&lt;br /&gt;
Se si tenta di recuperare una macchina particolarmente vecchia possono venire in nostro soccorso delle mini distribuzioni prive di ambiente grafico e talmente compatte da poter essere contenute in un unico floppy.&lt;br /&gt;
&lt;br /&gt;
NB: su Linux è stato rimosso il supporto al 386 nel 2012 (kernel 3.8) ed al 486 nel 2026 (kernel 7.1)&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! Distribuzione&lt;br /&gt;
! Supporto avvio&lt;br /&gt;
! CPU minima&lt;br /&gt;
! RAM minima&lt;br /&gt;
! Dimensione tipica&lt;br /&gt;
! Uso ideale&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [https://krzysztofjankowski.com/floppinux/ FLOPPINUX]&lt;br /&gt;
| 1 floppy&lt;br /&gt;
| 386&lt;br /&gt;
| 4–8 MB&lt;br /&gt;
| 1.44 MB&lt;br /&gt;
| Mini Linux educativo/sperimentale&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/snacsnoc/fluxflop/releases Fluxflop]&lt;br /&gt;
| 1–2 floppy&lt;br /&gt;
| 386&lt;br /&gt;
| ~4 MB&lt;br /&gt;
| 1.44–2.88 MB&lt;br /&gt;
| Networking minimale&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.fdlinux.com/download.php FD Linux]&lt;br /&gt;
| 1 floppy&lt;br /&gt;
| 386SX&lt;br /&gt;
| 4 MB&lt;br /&gt;
| 1.44 MB&lt;br /&gt;
| DOS/Linux compatto&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.zelow.no/floppyfw floppyfw]&lt;br /&gt;
| 1 floppy&lt;br /&gt;
| 386&lt;br /&gt;
| 8 MB&lt;br /&gt;
| 1.44 MB&lt;br /&gt;
| Router/firewall embedded&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [https://web.archive.org/web/20190312063410/http://chris.silmor.de/hal91/ HAL91]&lt;br /&gt;
| 1 floppy&lt;br /&gt;
| 386&lt;br /&gt;
| 2–4 MB&lt;br /&gt;
| 1.44 MB&lt;br /&gt;
| Esperimenti ultra-minimali&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [http://micheleandreoli.org/public/Software/mulinux/ muLinux]&lt;br /&gt;
| 1+ floppy modulari&lt;br /&gt;
| 386SX&lt;br /&gt;
| 4 MB&lt;br /&gt;
| 1.44 MB base&lt;br /&gt;
| Recupero PC vintage&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [http://smartlinux.sourceforge.net S.M.A.R.T. Linux]&lt;br /&gt;
| 1 floppy&lt;br /&gt;
| 386&lt;br /&gt;
| 4–8 MB&lt;br /&gt;
| 1.44 MB&lt;br /&gt;
| Toolkit floppy generale&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [http://distro.ibiblio.org/polypux/external/smalllinux/ Small Linux]&lt;br /&gt;
| 1–2 floppy&lt;br /&gt;
| 386&lt;br /&gt;
| 4–8 MB&lt;br /&gt;
| ~2 MB&lt;br /&gt;
| Sistema Linux minimale&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [https://archiveos.org/tomsrtbt/ tomsrtbt]&lt;br /&gt;
| 1 floppy&lt;br /&gt;
| 386SX&lt;br /&gt;
| 8 MB&lt;br /&gt;
| 1.72 MB&lt;br /&gt;
| Rescue disk&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceforge.net/projects/trinux/files/ Trinux]&lt;br /&gt;
| 1–2 floppy&lt;br /&gt;
| 486&lt;br /&gt;
| 8–16 MB&lt;br /&gt;
| 1.44–3 MB&lt;br /&gt;
| Sicurezza/network auditing&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [https://web.archive.org/web/20070629142617/http://zoollinux.berlios.de/doku.php Zool]&lt;br /&gt;
| 1 floppy&lt;br /&gt;
| 386&lt;br /&gt;
| ~4 MB&lt;br /&gt;
| 1.44 MB&lt;br /&gt;
| Linux ultra-compatto&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Buildroot=&lt;br /&gt;
Soluzioni preconfezionate (come quelle sopra elencate) potrebbero non rispondere alle nostre esigenze: kernel datati (2.0, 2.2), driver mancanti o magari mancano proprio dell'applicazione di cui abbiamo bisogno.&lt;br /&gt;
&lt;br /&gt;
In questi casi la soluzione più rapida è quella di costruirsi il proprio sistema Linux personalizzato. Per farlo il metodo più semplice è utilizzare [https://buildroot.org/download.html Buildroot], un tool che permette la cross-compilazione di un ambiente Linux completo di librerie (glibc, uclibc-ng o musl), numerose applicazioni e l'eseguibile busybox.&lt;br /&gt;
&lt;br /&gt;
Questa procedura è analoga a quella usata per la realizzazione di qualsiasi sistema embedded Linux-based: router, decoder, lettory DVD...&lt;br /&gt;
&lt;br /&gt;
Scompattare il tool&lt;br /&gt;
 $ tar -xzvf buildroot-2026.02.tar.gz&lt;br /&gt;
&lt;br /&gt;
Entrare nella directory principale&lt;br /&gt;
 $ cd buildroot-2026.02/&lt;br /&gt;
&lt;br /&gt;
==BusyBox==&lt;br /&gt;
Configurare busybox selezionando i programmi che si ritengono necessari&lt;br /&gt;
 $ make busybox-menuconfig&lt;br /&gt;
&lt;br /&gt;
==Kernel==&lt;br /&gt;
Configurare il kernel per la compilazione&lt;br /&gt;
 $ make linux-menuconfig&lt;br /&gt;
&lt;br /&gt;
Escludere tutto ciò che non è strettamente necessario per risparmiare spazio su disco, quanto segue dovrà essere necessariamente presente per ottenere un sistema minimo avviabile.&lt;br /&gt;
&lt;br /&gt;
* Code maturity level-&amp;gt; Prompt for development&lt;br /&gt;
&lt;br /&gt;
* Processor type and features-&amp;gt; Support for your processor&lt;br /&gt;
&lt;br /&gt;
* General setup-&amp;gt; kernel support for ELF binaries&lt;br /&gt;
&lt;br /&gt;
* Block devices-&amp;gt; RAM disk support&lt;br /&gt;
&lt;br /&gt;
* File systems-&amp;gt; /proc filesystem, tmpfs, ext2&lt;br /&gt;
&lt;br /&gt;
* Character devices-&amp;gt; Virtual terminal&lt;br /&gt;
&lt;br /&gt;
* Character devices-&amp;gt; Support for console on virtual terminal&lt;br /&gt;
&lt;br /&gt;
* Console drivers-&amp;gt; VGA text console&lt;br /&gt;
&lt;br /&gt;
* General setup-&amp;gt; PCI support&lt;br /&gt;
&lt;br /&gt;
* I driver delle schede di rete che interessa supportare (ne, ne2k, rtl8139too, rtl8139c, pcnet32, e1000)&lt;br /&gt;
&lt;br /&gt;
* Iptables se si necessita di un firewall&lt;br /&gt;
&lt;br /&gt;
* Un driver IDE generico (generic ATA) su libata&lt;br /&gt;
&lt;br /&gt;
* Block devices-&amp;gt; Normal PC floppy disk support, se ci interesse il supporto al floppy&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Se si deve limitare al massimo la grandezza dell'immagine del kernel (bzImage) si può scegliere con un algoritmo di compressione come lzma. Questo però aumenterà il consumo di RAM e per macchine molto vecchie come i386 o i486 probabilmente è meglio optare per gz o al massimo bz2.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Configurazione generale==&lt;br /&gt;
 $ make menuconfig&lt;br /&gt;
&lt;br /&gt;
Indicare:&lt;br /&gt;
&lt;br /&gt;
* Architettura di destinazione (i386, i486, i586…)&lt;br /&gt;
&lt;br /&gt;
* Opzioni di compilazione&lt;br /&gt;
&lt;br /&gt;
* Versione del kernel da usare&lt;br /&gt;
&lt;br /&gt;
* Configurazione di partenza del kernel&lt;br /&gt;
 Kernel  ---&amp;gt; Kernel configuration (Use the architecture default configuration)&lt;br /&gt;
&lt;br /&gt;
* Eventuali altri programmi non presenti in busybox (es.: mdev, dropbear, nano, iptables, ncftp, lynx, mutt)&lt;br /&gt;
&lt;br /&gt;
* Si consiglia l'opzione di compilazione gcc '''-Os''' al fine di ridurre al minimo la grandezza dei binari &lt;br /&gt;
&lt;br /&gt;
===Filesystem images===&lt;br /&gt;
Esistono varie tipologie di filesystem da utilizzare per il sistema che verrà compilato: immagini ext2, squashfs, direttamente nel initramfs o semplicemente in un tarball. Nel caso ci interessi costruire un floppy, al fine di sfruttare al meglio lo spazio, consiglio di scegliere ext2 compresso, anche in questo caso con lzma si ottengono filesystem fino al 20% più piccoli rispetto a quelli compressi con bzip2, ma il sistema  necessiterà di maggiore RAM per caricarli (70-80MB). &lt;br /&gt;
&lt;br /&gt;
Terminata la fase di configurazione si può procedere con la compilazione&lt;br /&gt;
 $ make&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nella directory buildroot-2026.02/output/images risiede il prodotto finito.&lt;br /&gt;
Si tratterà di 2 o 3 file: bzImage, rootfs.i486.ext2 e la sua versione compressa rootfs.i486.ext2.lzma.&lt;br /&gt;
Le dimensioni dei file bzImage e rootfs.i486.ext2.lzma devono essere sufficientemente contenute per entrare su un floppy.&lt;br /&gt;
Nel caso fossero solo di poco più grandi (100-200 KB), si può rimediare con la formattazione non standard del floppy: a 1.72 MB invece che a 1.44MB.&lt;br /&gt;
 $ sudo mknod /dev/fd0u1722 b 2 60&lt;br /&gt;
 $ fdformat /dev/fd0u1722&lt;br /&gt;
 $ mkfs.vfat /dev/fd0u1722&lt;br /&gt;
&lt;br /&gt;
Se non presente creare un mount point per il floppy&lt;br /&gt;
 $ sudo mkdir /mnt/floppy&lt;br /&gt;
&lt;br /&gt;
Montare il floppy&lt;br /&gt;
 $ sudo mount /dev/fd0u1722 /mnt/floppy&lt;br /&gt;
&lt;br /&gt;
Copiarvi i due file&lt;br /&gt;
 $ sudo cp buildroot/output/images/bzImage /mnt/floppy&lt;br /&gt;
 $ sudo cp buildroot/output/images/rootfs.i486.ext2.lzma /mnt/floppy&lt;br /&gt;
&lt;br /&gt;
Adesso occorre installare un boot loader sul floppy. Essendo leggero, semplice da usare e supportando la FAT16 si consiglia di usare syslinux.&lt;br /&gt;
&lt;br /&gt;
Se syslinux non fosse presente sul vostro sistema installatelo con:&lt;br /&gt;
&lt;br /&gt;
 $ sudo apt-get install syslinux&lt;br /&gt;
per sistemi Debian-based&lt;br /&gt;
&lt;br /&gt;
O con&lt;br /&gt;
 # pacman -S syslinux&lt;br /&gt;
su Arch Linux&lt;br /&gt;
&lt;br /&gt;
Con un editor di testo (es. nano) create il file di configurazione per il boot loader: syslinux.cfg&lt;br /&gt;
 $ sudo nano /mnt/floppy/syslinux.cfg&lt;br /&gt;
&lt;br /&gt;
Riportate quanto segue, eventualmente adattandolo alle vostre esigenze:&lt;br /&gt;
&lt;br /&gt;
 default start&lt;br /&gt;
 timeout 5&lt;br /&gt;
 prompt 1&lt;br /&gt;
 label start&lt;br /&gt;
 kernel bzImage&lt;br /&gt;
 append initrd=rootfs.i486.ext2.lzma BOOTDEV=fd0 ramdisk_size=16384 vga=0 root=/dev/ram0&lt;br /&gt;
&lt;br /&gt;
Se è stato usato un altro tipo di filesystem sostituire rootfs.i486.ext2.lzma con rootfs.i486.ext2.bz2, rootfs.i486.ext2.squashfs…&lt;br /&gt;
&lt;br /&gt;
Installare il bootloader sul floppy&lt;br /&gt;
 $ sudo syslinux /dev/fd0&lt;br /&gt;
&lt;br /&gt;
Smontare il floppy&lt;br /&gt;
 $ cd&lt;br /&gt;
 $ sudo umount /mnt/floppy&lt;br /&gt;
&lt;br /&gt;
In caso di necessità di modifiche al ramdisk bisognerà copiarlo sul disco fisso, decomprimerlo, montarlo in loop ed effettuare le modifiche in questo modo:&lt;br /&gt;
 $ sudo mount /mnt/floppy&lt;br /&gt;
 $ sudo cp /mnt/floppy/rootfs.i486.ext2.lzma&lt;br /&gt;
 $ sudo lzma -d rootfs.i486.ext2.lzma&lt;br /&gt;
 $ sudo mkdir /mnt/tmp&lt;br /&gt;
 $ sudo mount -o loop rootfs.i486.ext2 /mnt/tmp&lt;br /&gt;
 $ cd /mnt/tmp&lt;br /&gt;
&lt;br /&gt;
Effettuare le modifiche e poi smontare il tutto&lt;br /&gt;
 $ cd&lt;br /&gt;
 $ sudo umount /mnt/tmp&lt;br /&gt;
&lt;br /&gt;
Ricomprimere il ramdisk e copiarlo sul floppy per sostituire quello vecchio&lt;br /&gt;
 $ sudo lzma -c9 rootfs.i486.ext2 &amp;gt; rootfs.i486.ext2.lzma&lt;br /&gt;
 $ sudo cp rootfs.i486.ext2.lzma /mnt/floppy&lt;br /&gt;
 $ sudo umount /mnt/floppy&lt;br /&gt;
&lt;br /&gt;
Un floppy già pronto con le seguenti caratteristiche e presente [http://golem.linux.it/files/spookyh/fspooky_v05.tar.xz qui]&lt;br /&gt;
&lt;br /&gt;
* Linux kernel 3.2.9&lt;br /&gt;
&lt;br /&gt;
* Busybox 1.19.4&lt;br /&gt;
&lt;br /&gt;
* Programmi inclusi: ftpd, ncftp, dropbear (ssh client/server), httpd, iptables, dhcp client/server, nc, wget, fdisk.&lt;br /&gt;
&lt;br /&gt;
* Requisiti minimi: i586 (60 MHz), 74 Mb RAM, floppy driver 3,5&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* Hardware supportato: processori i586 compatibili, Bus PCI (niente ISA), Controller Generic ATA disk; schede di rete Novell NE2000 (e cloni), RealTek 8129, Intel PRO/1000 Gigabit Adapter.&lt;br /&gt;
&lt;br /&gt;
[[Category:howto]]&lt;/div&gt;</summary>
		<author><name>$pooky Hunter</name></author>
	</entry>
	<entry>
		<id>https://wiki.golem.linux.it/index.php?title=Linux_minimale_per_PC_i386/i486&amp;diff=9959</id>
		<title>Linux minimale per PC i386/i486</title>
		<link rel="alternate" type="text/html" href="https://wiki.golem.linux.it/index.php?title=Linux_minimale_per_PC_i386/i486&amp;diff=9959"/>
		<updated>2026-05-14T21:37:45Z</updated>

		<summary type="html">&lt;p&gt;$pooky Hunter: /* Buildroot */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Distribuzioni per i486-i586=&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! Distro&lt;br /&gt;
! CPU minima&lt;br /&gt;
! RAM minima&lt;br /&gt;
! Disco/ISO&lt;br /&gt;
! Uso ideale&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [http://delicate-linux.net/ DeLi Linux]&lt;br /&gt;
| i486&lt;br /&gt;
| 8–16 MB&lt;br /&gt;
| ~200 MB installazione&lt;br /&gt;
| Retrocomputing puro, PC anni '90&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.slitaz.org SliTaz]&lt;br /&gt;
| i486&lt;br /&gt;
| 24–64 MB&lt;br /&gt;
| ISO 30–60 MB&lt;br /&gt;
| Pentium II/III molto leggeri&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.tinycorelinux.com Tiny Core Linux]&lt;br /&gt;
| i486DX&lt;br /&gt;
| 46 MB&lt;br /&gt;
| 20–200 MB&lt;br /&gt;
| Minimalismo estremo, appliance&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.puppylinux.com Puppy Linux]&lt;br /&gt;
| Pentium II&lt;br /&gt;
| 128-256 MB&lt;br /&gt;
| 300–500 MB ISO&lt;br /&gt;
| Desktop leggero usabile&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.damnsmalllinux.org  Damn Small Linux 2024]&lt;br /&gt;
| i686&lt;br /&gt;
| 256-512 MB&lt;br /&gt;
| ~700 MB ISO&lt;br /&gt;
| Hardware datato ma moderno&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Floppy Linux=&lt;br /&gt;
Se si tenta di recuperare una macchina particolarmente vecchia possono venire in nostro soccorso delle mini distribuzioni prive di ambiente grafico e talmente compatte da poter essere contenute in un unico floppy.&lt;br /&gt;
&lt;br /&gt;
NB: su Linux è stato rimosso il supporto al 386 nel 2012 (kernel 3.8) ed al 486 nel 2026 (kernel 7.1)&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! Distribuzione&lt;br /&gt;
! Supporto avvio&lt;br /&gt;
! CPU minima&lt;br /&gt;
! RAM minima&lt;br /&gt;
! Dimensione tipica&lt;br /&gt;
! Uso ideale&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [https://krzysztofjankowski.com/floppinux/ FLOPPINUX]&lt;br /&gt;
| 1 floppy&lt;br /&gt;
| 386&lt;br /&gt;
| 4–8 MB&lt;br /&gt;
| 1.44 MB&lt;br /&gt;
| Mini Linux educativo/sperimentale&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/snacsnoc/fluxflop/releases Fluxflop]&lt;br /&gt;
| 1–2 floppy&lt;br /&gt;
| 386&lt;br /&gt;
| ~4 MB&lt;br /&gt;
| 1.44–2.88 MB&lt;br /&gt;
| Networking minimale&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.fdlinux.com/download.php FD Linux]&lt;br /&gt;
| 1 floppy&lt;br /&gt;
| 386SX&lt;br /&gt;
| 4 MB&lt;br /&gt;
| 1.44 MB&lt;br /&gt;
| DOS/Linux compatto&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.zelow.no/floppyfw floppyfw]&lt;br /&gt;
| 1 floppy&lt;br /&gt;
| 386&lt;br /&gt;
| 8 MB&lt;br /&gt;
| 1.44 MB&lt;br /&gt;
| Router/firewall embedded&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [https://web.archive.org/web/20190312063410/http://chris.silmor.de/hal91/ HAL91]&lt;br /&gt;
| 1 floppy&lt;br /&gt;
| 386&lt;br /&gt;
| 2–4 MB&lt;br /&gt;
| 1.44 MB&lt;br /&gt;
| Esperimenti ultra-minimali&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [http://micheleandreoli.org/public/Software/mulinux/ muLinux]&lt;br /&gt;
| 1+ floppy modulari&lt;br /&gt;
| 386SX&lt;br /&gt;
| 4 MB&lt;br /&gt;
| 1.44 MB base&lt;br /&gt;
| Recupero PC vintage&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [http://smartlinux.sourceforge.net S.M.A.R.T. Linux]&lt;br /&gt;
| 1 floppy&lt;br /&gt;
| 386&lt;br /&gt;
| 4–8 MB&lt;br /&gt;
| 1.44 MB&lt;br /&gt;
| Toolkit floppy generale&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [http://distro.ibiblio.org/polypux/external/smalllinux/ Small Linux]&lt;br /&gt;
| 1–2 floppy&lt;br /&gt;
| 386&lt;br /&gt;
| 4–8 MB&lt;br /&gt;
| ~2 MB&lt;br /&gt;
| Sistema Linux minimale&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [https://archiveos.org/tomsrtbt/ tomsrtbt]&lt;br /&gt;
| 1 floppy&lt;br /&gt;
| 386SX&lt;br /&gt;
| 8 MB&lt;br /&gt;
| 1.72 MB&lt;br /&gt;
| Rescue disk&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceforge.net/projects/trinux/files/ Trinux]&lt;br /&gt;
| 1–2 floppy&lt;br /&gt;
| 486&lt;br /&gt;
| 8–16 MB&lt;br /&gt;
| 1.44–3 MB&lt;br /&gt;
| Sicurezza/network auditing&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [https://web.archive.org/web/20070629142617/http://zoollinux.berlios.de/doku.php Zool]&lt;br /&gt;
| 1 floppy&lt;br /&gt;
| 386&lt;br /&gt;
| ~4 MB&lt;br /&gt;
| 1.44 MB&lt;br /&gt;
| Linux ultra-compatto&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Buildroot=&lt;br /&gt;
Soluzioni preconfezionate (come quelle sopra elencate) potrebbero non rispondere alle nostre esigenze: kernel datati (2.0, 2.2), driver mancanti o magari mancano proprio dell'applicazione di cui abbiamo bisogno.&lt;br /&gt;
&lt;br /&gt;
In questi casi la soluzione più rapida è quella di costruirsi il proprio sistema Linux personalizzato. Per farlo il metodo più semplice è utilizzare [http://buildroot.org Buildroot], un tarball che permette la cross-compilazione di un ambiente Linux (con glibc, uclibc-ng o musl) e l'eseguibile busybox. L'ultima versione disponibile e scaricabile da questo [http://buildroot.uclibc.org/downloads/snapshots/buildroot-snapshot.tar.bz2 indirizzo].&lt;br /&gt;
&lt;br /&gt;
Questa procedura è analoga a quella usata per la realizzazione di qualsiasi sistema embedded Linux-based: router, decoder, lettory DVD...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Scompattare il buildroot&lt;br /&gt;
 $ tar -xjvf buildroot-snapshot.tar.bz2&lt;br /&gt;
&lt;br /&gt;
Entrare nella directory principale&lt;br /&gt;
 $ cd buildroot-snapshot&lt;br /&gt;
&lt;br /&gt;
==BusyBox==&lt;br /&gt;
Configurare busybox selezionando i programmi che si ritengono necessari&lt;br /&gt;
 $ make busybox-menuconfig&lt;br /&gt;
&lt;br /&gt;
==Kernel==&lt;br /&gt;
Configurare il kernel per la compilazione&lt;br /&gt;
 $ make linux-menuconfig&lt;br /&gt;
&lt;br /&gt;
Escludere tutto ciò che non è strettamente necessario per risparmiare spazio su disco, quanto segue dovrà essere necessariamente presente per ottenere un sistema minimo avviabile.&lt;br /&gt;
&lt;br /&gt;
* Code maturity level-&amp;gt; Prompt for development&lt;br /&gt;
&lt;br /&gt;
* Processor type and features-&amp;gt; Support for your processor&lt;br /&gt;
&lt;br /&gt;
* General setup-&amp;gt; kernel support for ELF binaries&lt;br /&gt;
&lt;br /&gt;
* Block devices-&amp;gt; RAM disk support&lt;br /&gt;
&lt;br /&gt;
* File systems-&amp;gt; /proc filesystem, tmpfs, ext2&lt;br /&gt;
&lt;br /&gt;
* Character devices-&amp;gt; Virtual terminal&lt;br /&gt;
&lt;br /&gt;
* Character devices-&amp;gt; Support for console on virtual terminal&lt;br /&gt;
&lt;br /&gt;
* Console drivers-&amp;gt; VGA text console&lt;br /&gt;
&lt;br /&gt;
* General setup-&amp;gt; PCI support&lt;br /&gt;
&lt;br /&gt;
* I driver delle schede di rete che interessa supportare (ne, ne2k, rtl8139too, rtl8139c, pcnet32, e1000)&lt;br /&gt;
&lt;br /&gt;
* Iptables se si necessita di un firewall&lt;br /&gt;
&lt;br /&gt;
* Un driver IDE generico (generic ATA) su libata&lt;br /&gt;
&lt;br /&gt;
* Block devices-&amp;gt; Normal PC floppy disk support, se ci interesse il supporto al floppy&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Per risparmiare spazio si può comprimere l'immagine del kernel (bzImage) con un algoritmo di compressione come lzma, ma questo aumenterà il consumo di RAM. Per macchine molto vecchie come i386 o i486 probabilmente è meglio optare per gz o al massimo bz2.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Configurazione generale==&lt;br /&gt;
 $ make menuconfig&lt;br /&gt;
&lt;br /&gt;
Indicare:&lt;br /&gt;
&lt;br /&gt;
* Architettura di destinazione (i386, i486, i586…)&lt;br /&gt;
&lt;br /&gt;
* Opzioni di compilazione&lt;br /&gt;
&lt;br /&gt;
* Versione del kernel da usare&lt;br /&gt;
&lt;br /&gt;
* Configurazione di partenza del kernel&lt;br /&gt;
 Kernel  ---&amp;gt; Kernel configuration (Use the architecture default configuration)&lt;br /&gt;
&lt;br /&gt;
* Eventuali altri programmi non presenti in busybox (es.: mdev, dropbear, nano, iptables, mutt)&lt;br /&gt;
&lt;br /&gt;
root filesystem di destinazione&lt;br /&gt;
&lt;br /&gt;
Esistono varie tipologie di filesystem tra cui scegliere, tra queste l'ext2 compresso con bzip2 o lzma.&lt;br /&gt;
Con lzma si ottengono filesystem fino al 20% più piccoli rispetto a quelli compressi con bzip2, ma il sistema  necessiterà di maggiore memoria (RAM) per caricarli.&lt;br /&gt;
&lt;br /&gt;
Se il PC che che avete a disposizione non ha almeno 70-80 MB di RAM è preferibile optare per la compressione con bzip2, se la quantità di memoria non è un problema la compressione con lzma è sicuramente preferibile.&lt;br /&gt;
&lt;br /&gt;
 '''Per poter caricare correttamente il prompt del login è necessario sostituire'''&lt;br /&gt;
 '''ttyS0 con tty1 nelle opzioni di configurazione del getty.'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Terminata la fase di configurazione si può procedere con la compilazione&lt;br /&gt;
 $ make&lt;br /&gt;
&lt;br /&gt;
Se qualcosa dovesse andare storto normalmente è sufficiente identificare il programma incriminato e vedere se cambiando versione la compilazione va buon fine.&lt;br /&gt;
&lt;br /&gt;
Nella directory buildroot/output/images risiede il prodotto finito.&lt;br /&gt;
Si tratterà di 2 o 3 file: bzImage, rootfs.i486.ext2 e la sua versione compressa rootfs.i486.ext2.lzma.&lt;br /&gt;
Le dimensioni dei file bzImage e rootfs.i486.ext2.lzma devono essere sufficientemente contenute per entrare su un floppy.&lt;br /&gt;
Nel caso fossero solo di poco più grandi (100-200 KB), si può rimediare con la formattazione non standard del floppy: a 1.72 MB invece che a 1.44MB.&lt;br /&gt;
 $ sudo mknod /dev/fd0u1722 b 2 60&lt;br /&gt;
 $ fdformat /dev/fd0u1722&lt;br /&gt;
 $ mkfs.vfat /dev/fd0u1722&lt;br /&gt;
&lt;br /&gt;
Se non presente creare un mount point per il floppy&lt;br /&gt;
 $ sudo mkdir /mnt/floppy&lt;br /&gt;
&lt;br /&gt;
Montare il floppy&lt;br /&gt;
 $ sudo mount /dev/fd0u1722 /mnt/floppy&lt;br /&gt;
&lt;br /&gt;
Copiarvi i due file&lt;br /&gt;
 $ sudo cp buildroot/output/images/bzImage /mnt/floppy&lt;br /&gt;
 $ sudo cp buildroot/output/images/rootfs.i486.ext2.lzma /mnt/floppy&lt;br /&gt;
&lt;br /&gt;
Adesso occorre installare un boot loader sul floppy. Essendo leggero, semplice da usare e supportando la FAT16 si consiglia di usare syslinux.&lt;br /&gt;
&lt;br /&gt;
Se syslinux non fosse presente sul vostro sistema installatelo con:&lt;br /&gt;
&lt;br /&gt;
 $ sudo apt-get install syslinux&lt;br /&gt;
per sistemi Debian-based&lt;br /&gt;
&lt;br /&gt;
O con&lt;br /&gt;
 # pacman -S syslinux&lt;br /&gt;
su Arch Linux&lt;br /&gt;
&lt;br /&gt;
Con un editor di testo (es. nano) create il file di configurazione per il boot loader: syslinux.cfg&lt;br /&gt;
 $ sudo nano /mnt/floppy/syslinux.cfg&lt;br /&gt;
&lt;br /&gt;
Riportate quanto segue, eventualmente adattandolo alle vostre esigenze:&lt;br /&gt;
&lt;br /&gt;
 default start&lt;br /&gt;
 timeout 5&lt;br /&gt;
 prompt 1&lt;br /&gt;
 label start&lt;br /&gt;
 kernel bzImage&lt;br /&gt;
 append initrd=rootfs.i486.ext2.lzma BOOTDEV=fd0 ramdisk_size=16384 vga=0 root=/dev/ram0&lt;br /&gt;
&lt;br /&gt;
Se è stato usato un altro tipo di filesystem sostituire rootfs.i486.ext2.lzma con rootfs.i486.ext2.bz2, rootfs.i486.ext2.squashfs…&lt;br /&gt;
&lt;br /&gt;
Installare il bootloader sul floppy&lt;br /&gt;
 $ sudo syslinux /dev/fd0&lt;br /&gt;
&lt;br /&gt;
Smontare il floppy&lt;br /&gt;
 $ cd&lt;br /&gt;
 $ sudo umount /mnt/floppy&lt;br /&gt;
&lt;br /&gt;
In caso di necessità di modifiche al ramdisk bisognerà copiarlo sul disco fisso, decomprimerlo, montarlo in loop ed effettuare le modifiche in questo modo:&lt;br /&gt;
 $ sudo mount /mnt/floppy&lt;br /&gt;
 $ sudo cp /mnt/floppy/rootfs.i486.ext2.lzma&lt;br /&gt;
 $ sudo lzma -d rootfs.i486.ext2.lzma&lt;br /&gt;
 $ sudo mkdir /mnt/tmp&lt;br /&gt;
 $ sudo mount -o loop rootfs.i486.ext2 /mnt/tmp&lt;br /&gt;
 $ cd /mnt/tmp&lt;br /&gt;
&lt;br /&gt;
Effettuare le modifiche e poi smontare il tutto&lt;br /&gt;
 $ cd&lt;br /&gt;
 $ sudo umount /mnt/tmp&lt;br /&gt;
&lt;br /&gt;
Ricomprimere il ramdisk e copiarlo sul floppy per sostituire quello vecchio&lt;br /&gt;
 $ sudo lzma -c9 rootfs.i486.ext2 &amp;gt; rootfs.i486.ext2.lzma&lt;br /&gt;
 $ sudo cp rootfs.i486.ext2.lzma /mnt/floppy&lt;br /&gt;
 $ sudo umount /mnt/floppy&lt;br /&gt;
&lt;br /&gt;
Un floppy già pronto con le seguenti caratteristiche e presente [http://golem.linux.it/files/spookyh/fspooky_v05.tar.xz qui]&lt;br /&gt;
&lt;br /&gt;
* Linux kernel 3.2.9&lt;br /&gt;
&lt;br /&gt;
* Busybox 1.19.4&lt;br /&gt;
&lt;br /&gt;
* Programmi inclusi: ftpd, ncftp, dropbear (ssh client/server), httpd, iptables, dhcp client/server, nc, wget, fdisk.&lt;br /&gt;
&lt;br /&gt;
* Requisiti minimi: i586 (60 MHz), 74 Mb RAM, floppy driver 3,5&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* Hardware supportato: processori i586 compatibili, Bus PCI (niente ISA), Controller Generic ATA disk; schede di rete Novell NE2000 (e cloni), RealTek 8129, Intel PRO/1000 Gigabit Adapter.&lt;br /&gt;
&lt;br /&gt;
[[Category:howto]]&lt;/div&gt;</summary>
		<author><name>$pooky Hunter</name></author>
	</entry>
	<entry>
		<id>https://wiki.golem.linux.it/index.php?title=Linux_minimale_per_PC_i386/i486&amp;diff=9958</id>
		<title>Linux minimale per PC i386/i486</title>
		<link rel="alternate" type="text/html" href="https://wiki.golem.linux.it/index.php?title=Linux_minimale_per_PC_i386/i486&amp;diff=9958"/>
		<updated>2026-05-14T20:59:39Z</updated>

		<summary type="html">&lt;p&gt;$pooky Hunter: /* Floppy Linux */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Distribuzioni per i486-i586=&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! Distro&lt;br /&gt;
! CPU minima&lt;br /&gt;
! RAM minima&lt;br /&gt;
! Disco/ISO&lt;br /&gt;
! Uso ideale&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [http://delicate-linux.net/ DeLi Linux]&lt;br /&gt;
| i486&lt;br /&gt;
| 8–16 MB&lt;br /&gt;
| ~200 MB installazione&lt;br /&gt;
| Retrocomputing puro, PC anni '90&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.slitaz.org SliTaz]&lt;br /&gt;
| i486&lt;br /&gt;
| 24–64 MB&lt;br /&gt;
| ISO 30–60 MB&lt;br /&gt;
| Pentium II/III molto leggeri&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.tinycorelinux.com Tiny Core Linux]&lt;br /&gt;
| i486DX&lt;br /&gt;
| 46 MB&lt;br /&gt;
| 20–200 MB&lt;br /&gt;
| Minimalismo estremo, appliance&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.puppylinux.com Puppy Linux]&lt;br /&gt;
| Pentium II&lt;br /&gt;
| 128-256 MB&lt;br /&gt;
| 300–500 MB ISO&lt;br /&gt;
| Desktop leggero usabile&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.damnsmalllinux.org  Damn Small Linux 2024]&lt;br /&gt;
| i686&lt;br /&gt;
| 256-512 MB&lt;br /&gt;
| ~700 MB ISO&lt;br /&gt;
| Hardware datato ma moderno&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Floppy Linux=&lt;br /&gt;
Se si tenta di recuperare una macchina particolarmente vecchia possono venire in nostro soccorso delle mini distribuzioni prive di ambiente grafico e talmente compatte da poter essere contenute in un unico floppy.&lt;br /&gt;
&lt;br /&gt;
NB: su Linux è stato rimosso il supporto al 386 nel 2012 (kernel 3.8) ed al 486 nel 2026 (kernel 7.1)&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! Distribuzione&lt;br /&gt;
! Supporto avvio&lt;br /&gt;
! CPU minima&lt;br /&gt;
! RAM minima&lt;br /&gt;
! Dimensione tipica&lt;br /&gt;
! Uso ideale&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [https://krzysztofjankowski.com/floppinux/ FLOPPINUX]&lt;br /&gt;
| 1 floppy&lt;br /&gt;
| 386&lt;br /&gt;
| 4–8 MB&lt;br /&gt;
| 1.44 MB&lt;br /&gt;
| Mini Linux educativo/sperimentale&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/snacsnoc/fluxflop/releases Fluxflop]&lt;br /&gt;
| 1–2 floppy&lt;br /&gt;
| 386&lt;br /&gt;
| ~4 MB&lt;br /&gt;
| 1.44–2.88 MB&lt;br /&gt;
| Networking minimale&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.fdlinux.com/download.php FD Linux]&lt;br /&gt;
| 1 floppy&lt;br /&gt;
| 386SX&lt;br /&gt;
| 4 MB&lt;br /&gt;
| 1.44 MB&lt;br /&gt;
| DOS/Linux compatto&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.zelow.no/floppyfw floppyfw]&lt;br /&gt;
| 1 floppy&lt;br /&gt;
| 386&lt;br /&gt;
| 8 MB&lt;br /&gt;
| 1.44 MB&lt;br /&gt;
| Router/firewall embedded&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [https://web.archive.org/web/20190312063410/http://chris.silmor.de/hal91/ HAL91]&lt;br /&gt;
| 1 floppy&lt;br /&gt;
| 386&lt;br /&gt;
| 2–4 MB&lt;br /&gt;
| 1.44 MB&lt;br /&gt;
| Esperimenti ultra-minimali&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [http://micheleandreoli.org/public/Software/mulinux/ muLinux]&lt;br /&gt;
| 1+ floppy modulari&lt;br /&gt;
| 386SX&lt;br /&gt;
| 4 MB&lt;br /&gt;
| 1.44 MB base&lt;br /&gt;
| Recupero PC vintage&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [http://smartlinux.sourceforge.net S.M.A.R.T. Linux]&lt;br /&gt;
| 1 floppy&lt;br /&gt;
| 386&lt;br /&gt;
| 4–8 MB&lt;br /&gt;
| 1.44 MB&lt;br /&gt;
| Toolkit floppy generale&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [http://distro.ibiblio.org/polypux/external/smalllinux/ Small Linux]&lt;br /&gt;
| 1–2 floppy&lt;br /&gt;
| 386&lt;br /&gt;
| 4–8 MB&lt;br /&gt;
| ~2 MB&lt;br /&gt;
| Sistema Linux minimale&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [https://archiveos.org/tomsrtbt/ tomsrtbt]&lt;br /&gt;
| 1 floppy&lt;br /&gt;
| 386SX&lt;br /&gt;
| 8 MB&lt;br /&gt;
| 1.72 MB&lt;br /&gt;
| Rescue disk&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceforge.net/projects/trinux/files/ Trinux]&lt;br /&gt;
| 1–2 floppy&lt;br /&gt;
| 486&lt;br /&gt;
| 8–16 MB&lt;br /&gt;
| 1.44–3 MB&lt;br /&gt;
| Sicurezza/network auditing&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [https://web.archive.org/web/20070629142617/http://zoollinux.berlios.de/doku.php Zool]&lt;br /&gt;
| 1 floppy&lt;br /&gt;
| 386&lt;br /&gt;
| ~4 MB&lt;br /&gt;
| 1.44 MB&lt;br /&gt;
| Linux ultra-compatto&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Buildroot=&lt;br /&gt;
Soluzioni preconfezionate (come quelle sopra elencate) possono talvolta non rispondere completamente alle nostre esigenze. Spesso hanno kernel datati (2.0, 2.2) o magari mancano proprio dell'applicazione o del driver di cui abbiamo bisogno.&lt;br /&gt;
&lt;br /&gt;
In questi casi l'unica strada percorribile è quella di costruirsi il proprio floppy Linux personalizzato. Per farlo il metodo più semplice è utilizzare [http://buildroot.uclibc.org Buildroot], un tarball che permette la cross-compilazione di un ambiente Linux completo usando le leggerissime librerie uClibc o musl e l'eseguibile busybox.&lt;br /&gt;
L'ultima versione disponibile e scaricabile da questo [http://buildroot.uclibc.org/downloads/snapshots/buildroot-snapshot.tar.bz2 indirizzo].&lt;br /&gt;
&lt;br /&gt;
Questa procedura è analoga a quella usata per la realizzazione di qualsiasi sistema embedded Linux-based: router, decoder, lettory DVD...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Scompattare il buildroot&lt;br /&gt;
 $ tar -xjvf buildroot-snapshot.tar.bz2&lt;br /&gt;
&lt;br /&gt;
Entrare nella directory principale&lt;br /&gt;
 $ cd buildroot&lt;br /&gt;
&lt;br /&gt;
Configurare il toolchain&lt;br /&gt;
 $ make menuconfig&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Indicare:&lt;br /&gt;
&lt;br /&gt;
architettura di destinazione (i386, i486, i586…)&lt;br /&gt;
&lt;br /&gt;
opzioni di compilazione&lt;br /&gt;
&lt;br /&gt;
versione del kernel da usare&lt;br /&gt;
&lt;br /&gt;
impostare la configurazione di default del kernel&lt;br /&gt;
 Kernel  ---&amp;gt; Kernel configuration (Use the architecture default configuration)&lt;br /&gt;
&lt;br /&gt;
eventuali altri programmi non presenti in busybox (es.: dropbear, nano, iptables, mutt)&lt;br /&gt;
&lt;br /&gt;
root filesystem di destinazione&lt;br /&gt;
&lt;br /&gt;
Esistono varie tipologie di filesystem tra cui scegliere, tra queste l'ext2 compresso con bzip2 o lzma.&lt;br /&gt;
Con lzma si ottengono filesystem fino al 20% più piccoli rispetto a quelli compressi con bzip2, ma il sistema  necessiterà di maggiore memoria (RAM) per caricarli.&lt;br /&gt;
&lt;br /&gt;
Se il PC che che avete a disposizione non ha almeno 70-80 MB di RAM è preferibile optare per la compressione con bzip2, se la quantità di memoria non è un problema la compressione con lzma è sicuramente preferibile.&lt;br /&gt;
&lt;br /&gt;
 '''Per poter caricare correttamente il prompt del login è necessario sostituire'''&lt;br /&gt;
 '''ttyS0 con tty1 nelle opzioni di configurazione del getty.'''&lt;br /&gt;
&lt;br /&gt;
Configurare busybox selezionando i programmi che si ritengono necessari&lt;br /&gt;
 $ make busybox-menuconfig&lt;br /&gt;
&lt;br /&gt;
Configurare il kernel per la compilazione&lt;br /&gt;
 $ make linux-menuconfig&lt;br /&gt;
&lt;br /&gt;
Escludere tutto ciò che non è strettamente necessario per risparmiare spazio su disco, quanto segue dovrà essere necessariamente presente per ottenere un sistema minimo avviabile.&lt;br /&gt;
&lt;br /&gt;
Code maturity level-&amp;gt; Prompt for development&lt;br /&gt;
&lt;br /&gt;
Processor type and features-&amp;gt; Support for your processor&lt;br /&gt;
&lt;br /&gt;
General setup-&amp;gt; kernel support for ELF binaries&lt;br /&gt;
&lt;br /&gt;
Block devices-&amp;gt; Normal PC floppy disk support&lt;br /&gt;
&lt;br /&gt;
Block devices-&amp;gt; RAM disk support&lt;br /&gt;
&lt;br /&gt;
File systems-&amp;gt; /proc filesystem, tmpfs, ext2&lt;br /&gt;
&lt;br /&gt;
Character devices-&amp;gt; Virtual terminal&lt;br /&gt;
&lt;br /&gt;
Character devices-&amp;gt; Support for console on virtual terminal&lt;br /&gt;
&lt;br /&gt;
Console drivers-&amp;gt; VGA text console&lt;br /&gt;
&lt;br /&gt;
General setup-&amp;gt; PCI support&lt;br /&gt;
&lt;br /&gt;
I driver delle schede di rete che interessa supportare, iptables se si necessita di un firewall, un driver ide generico per poter montare un hard disk ATA.&lt;br /&gt;
&lt;br /&gt;
Per risparmiare spazio è preferibile comprimere l'immagine del kernel (bzImage) con l'algoritmo di compressione lzma.&lt;br /&gt;
&lt;br /&gt;
Terminata la fase di configurazione si può procedere con la compilazione&lt;br /&gt;
 $ make&lt;br /&gt;
&lt;br /&gt;
Se qualcosa dovesse andare storto normalmente è sufficiente identificare il programma incriminato e vedere se cambiando versione la compilazione va buon fine.&lt;br /&gt;
&lt;br /&gt;
Nella directory buildroot/output/images risiede il prodotto finito.&lt;br /&gt;
Si tratterà di 2 o 3 file: bzImage, rootfs.i486.ext2 e la sua versione compressa rootfs.i486.ext2.lzma.&lt;br /&gt;
Le dimensioni dei file bzImage e rootfs.i486.ext2.lzma devono essere sufficientemente contenute per entrare su un floppy.&lt;br /&gt;
Nel caso fossero solo di poco più grandi (100-200 KB), si può rimediare con la formattazione non standard del floppy: a 1.72 MB invece che a 1.44MB.&lt;br /&gt;
 $ sudo mknod /dev/fd0u1722 b 2 60&lt;br /&gt;
 $ fdformat /dev/fd0u1722&lt;br /&gt;
 $ mkfs.vfat /dev/fd0u1722&lt;br /&gt;
&lt;br /&gt;
Se non presente creare un mount point per il floppy&lt;br /&gt;
 $ sudo mkdir /mnt/floppy&lt;br /&gt;
&lt;br /&gt;
Montare il floppy&lt;br /&gt;
 $ sudo mount /dev/fd0u1722 /mnt/floppy&lt;br /&gt;
&lt;br /&gt;
Copiarvi i due file&lt;br /&gt;
 $ sudo cp buildroot/output/images/bzImage /mnt/floppy&lt;br /&gt;
 $ sudo cp buildroot/output/images/rootfs.i486.ext2.lzma /mnt/floppy&lt;br /&gt;
&lt;br /&gt;
Adesso occorre installare un boot loader sul floppy. Essendo leggero, semplice da usare e supportando la FAT16 si consiglia di usare syslinux.&lt;br /&gt;
&lt;br /&gt;
Se syslinux non fosse presente sul vostro sistema installatelo con:&lt;br /&gt;
&lt;br /&gt;
 $ sudo apt-get install syslinux&lt;br /&gt;
per sistemi Debian-based&lt;br /&gt;
&lt;br /&gt;
O con&lt;br /&gt;
 # pacman -S syslinux&lt;br /&gt;
su Arch Linux&lt;br /&gt;
&lt;br /&gt;
Con un editor di testo (es. nano) create il file di configurazione per il boot loader: syslinux.cfg&lt;br /&gt;
 $ sudo nano /mnt/floppy/syslinux.cfg&lt;br /&gt;
&lt;br /&gt;
Riportate quanto segue, eventualmente adattandolo alle vostre esigenze:&lt;br /&gt;
&lt;br /&gt;
 default start&lt;br /&gt;
 timeout 5&lt;br /&gt;
 prompt 1&lt;br /&gt;
 label start&lt;br /&gt;
 kernel bzImage&lt;br /&gt;
 append initrd=rootfs.i486.ext2.lzma BOOTDEV=fd0 ramdisk_size=16384 vga=0 root=/dev/ram0&lt;br /&gt;
&lt;br /&gt;
Se è stato usato un altro tipo di filesystem sostituire rootfs.i486.ext2.lzma con rootfs.i486.ext2.bz2, rootfs.i486.ext2.squashfs…&lt;br /&gt;
&lt;br /&gt;
Installare il bootloader sul floppy&lt;br /&gt;
 $ sudo syslinux /dev/fd0&lt;br /&gt;
&lt;br /&gt;
Smontare il floppy&lt;br /&gt;
 $ cd&lt;br /&gt;
 $ sudo umount /mnt/floppy&lt;br /&gt;
&lt;br /&gt;
In caso di necessità di modifiche al ramdisk bisognerà copiarlo sul disco fisso, decomprimerlo, montarlo in loop ed effettuare le modifiche in questo modo:&lt;br /&gt;
 $ sudo mount /mnt/floppy&lt;br /&gt;
 $ sudo cp /mnt/floppy/rootfs.i486.ext2.lzma&lt;br /&gt;
 $ sudo lzma -d rootfs.i486.ext2.lzma&lt;br /&gt;
 $ sudo mkdir /mnt/tmp&lt;br /&gt;
 $ sudo mount -o loop rootfs.i486.ext2 /mnt/tmp&lt;br /&gt;
 $ cd /mnt/tmp&lt;br /&gt;
&lt;br /&gt;
Effettuare le modifiche e poi smontare il tutto&lt;br /&gt;
 $ cd&lt;br /&gt;
 $ sudo umount /mnt/tmp&lt;br /&gt;
&lt;br /&gt;
Ricomprimere il ramdisk e copiarlo sul floppy per sostituire quello vecchio&lt;br /&gt;
 $ sudo lzma -c9 rootfs.i486.ext2 &amp;gt; rootfs.i486.ext2.lzma&lt;br /&gt;
 $ sudo cp rootfs.i486.ext2.lzma /mnt/floppy&lt;br /&gt;
 $ sudo umount /mnt/floppy&lt;br /&gt;
&lt;br /&gt;
Un floppy già pronto con le seguenti caratteristiche e presente [http://golem.linux.it/files/spookyh/fspooky_v05.tar.xz qui]&lt;br /&gt;
&lt;br /&gt;
* Linux kernel 3.2.9&lt;br /&gt;
&lt;br /&gt;
* Busybox 1.19.4&lt;br /&gt;
&lt;br /&gt;
* Programmi inclusi: ftpd, ncftp, dropbear (ssh client/server), httpd, iptables, dhcp client/server, nc, wget, fdisk.&lt;br /&gt;
&lt;br /&gt;
* Requisiti minimi: i586 (60 MHz), 74 Mb RAM, floppy driver 3,5&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* Hardware supportato: processori i586 compatibili, Bus PCI (niente ISA), Controller Generic ATA disk; schede di rete Novell NE2000 (e cloni), RealTek 8129, Intel PRO/1000 Gigabit Adapter.&lt;br /&gt;
&lt;br /&gt;
[[Category:howto]]&lt;/div&gt;</summary>
		<author><name>$pooky Hunter</name></author>
	</entry>
	<entry>
		<id>https://wiki.golem.linux.it/index.php?title=Linux_minimale_per_PC_i386/i486&amp;diff=9957</id>
		<title>Linux minimale per PC i386/i486</title>
		<link rel="alternate" type="text/html" href="https://wiki.golem.linux.it/index.php?title=Linux_minimale_per_PC_i386/i486&amp;diff=9957"/>
		<updated>2026-05-14T18:04:24Z</updated>

		<summary type="html">&lt;p&gt;$pooky Hunter: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Distribuzioni per i486-i586=&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! Distro&lt;br /&gt;
! CPU minima&lt;br /&gt;
! RAM minima&lt;br /&gt;
! Disco/ISO&lt;br /&gt;
! Uso ideale&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [http://delicate-linux.net/ DeLi Linux]&lt;br /&gt;
| i486&lt;br /&gt;
| 8–16 MB&lt;br /&gt;
| ~200 MB installazione&lt;br /&gt;
| Retrocomputing puro, PC anni '90&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.slitaz.org SliTaz]&lt;br /&gt;
| i486&lt;br /&gt;
| 24–64 MB&lt;br /&gt;
| ISO 30–60 MB&lt;br /&gt;
| Pentium II/III molto leggeri&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.tinycorelinux.com Tiny Core Linux]&lt;br /&gt;
| i486DX&lt;br /&gt;
| 46 MB&lt;br /&gt;
| 20–200 MB&lt;br /&gt;
| Minimalismo estremo, appliance&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.puppylinux.com Puppy Linux]&lt;br /&gt;
| Pentium II&lt;br /&gt;
| 128-256 MB&lt;br /&gt;
| 300–500 MB ISO&lt;br /&gt;
| Desktop leggero usabile&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.damnsmalllinux.org  Damn Small Linux 2024]&lt;br /&gt;
| i686&lt;br /&gt;
| 256-512 MB&lt;br /&gt;
| ~700 MB ISO&lt;br /&gt;
| Hardware datato ma moderno&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Floppy Linux=&lt;br /&gt;
Se si tenta di recuperare una macchina particolarmente vecchia possono venire in nostro soccorso delle mini distribuzioni prive di ambiente grafico e talmente compatte da poter essere contenute in un unico floppy.&lt;br /&gt;
&lt;br /&gt;
NB: su Linux è stato rimosso il supporto al 386 nel 2012 (kernel 3.8) ed al 486 nel 2026 (kernel 7.1)&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! Distribuzione&lt;br /&gt;
! Supporto avvio&lt;br /&gt;
! CPU minima&lt;br /&gt;
! RAM minima&lt;br /&gt;
! Dimensione tipica&lt;br /&gt;
! Uso ideale&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [https://krzysztofjankowski.com/floppinux/ FLOPPINUX]&lt;br /&gt;
| 1 floppy&lt;br /&gt;
| 386&lt;br /&gt;
| 4–8 MB&lt;br /&gt;
| 1.44 MB&lt;br /&gt;
| Mini Linux educativo/sperimentale&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/snacsnoc/fluxflop/releases Fluxflop]&lt;br /&gt;
| 1–2 floppy&lt;br /&gt;
| 386&lt;br /&gt;
| ~4 MB&lt;br /&gt;
| 1.44–2.88 MB&lt;br /&gt;
| Networking minimale&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.fdlinux.com/download.php FD Linux]&lt;br /&gt;
| 1 floppy&lt;br /&gt;
| 386SX&lt;br /&gt;
| 4 MB&lt;br /&gt;
| 1.44 MB&lt;br /&gt;
| DOS/Linux compatto&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.zelow.no/floppyfw floppyfw]&lt;br /&gt;
| 1 floppy&lt;br /&gt;
| 386&lt;br /&gt;
| 8 MB&lt;br /&gt;
| 1.44 MB&lt;br /&gt;
| Router/firewall embedded&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [https://web.archive.org/web/20190312063410/http://chris.silmor.de/hal91/ HAL91]&lt;br /&gt;
| 1 floppy&lt;br /&gt;
| 386&lt;br /&gt;
| 2–4 MB&lt;br /&gt;
| 1.44 MB&lt;br /&gt;
| Esperimenti ultra-minimali&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [http://micheleandreoli.org/public/Software/mulinux/ muLinux]&lt;br /&gt;
| 1+ floppy modulari&lt;br /&gt;
| 386SX&lt;br /&gt;
| 4 MB&lt;br /&gt;
| 1.44 MB base&lt;br /&gt;
| Recupero PC vintage&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [http://smartlinux.sourceforge.net S.M.A.R.T. Linux]&lt;br /&gt;
| 1 floppy&lt;br /&gt;
| 386&lt;br /&gt;
| 4–8 MB&lt;br /&gt;
| 1.44 MB&lt;br /&gt;
| Toolkit floppy generale&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [http://distro.ibiblio.org/polypux/external/smalllinux/ Small Linux]&lt;br /&gt;
| 1–2 floppy&lt;br /&gt;
| 386&lt;br /&gt;
| 4–8 MB&lt;br /&gt;
| ~2 MB&lt;br /&gt;
| Sistema Linux minimale&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [https://archiveos.org/tomsrtbt/ tomsrtbt]&lt;br /&gt;
| 1 floppy&lt;br /&gt;
| 386SX&lt;br /&gt;
| 8 MB&lt;br /&gt;
| 1.72 MB&lt;br /&gt;
| Rescue disk leggendario&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceforge.net/projects/trinux/files/ Trinux]&lt;br /&gt;
| 1–2 floppy&lt;br /&gt;
| 486&lt;br /&gt;
| 8–16 MB&lt;br /&gt;
| 1.44–3 MB&lt;br /&gt;
| Sicurezza/network auditing&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [https://web.archive.org/web/20070629142617/http://zoollinux.berlios.de/doku.php Zool]&lt;br /&gt;
| 1 floppy&lt;br /&gt;
| 386&lt;br /&gt;
| ~4 MB&lt;br /&gt;
| 1.44 MB&lt;br /&gt;
| Linux ultra-compatto&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Buildroot=&lt;br /&gt;
Soluzioni preconfezionate (come quelle sopra elencate) possono talvolta non rispondere completamente alle nostre esigenze. Spesso hanno kernel datati (2.0, 2.2) o magari mancano proprio dell'applicazione o del driver di cui abbiamo bisogno.&lt;br /&gt;
&lt;br /&gt;
In questi casi l'unica strada percorribile è quella di costruirsi il proprio floppy Linux personalizzato. Per farlo il metodo più semplice è utilizzare [http://buildroot.uclibc.org Buildroot], un tarball che permette la cross-compilazione di un ambiente Linux completo usando le leggerissime librerie uClibc o musl e l'eseguibile busybox.&lt;br /&gt;
L'ultima versione disponibile e scaricabile da questo [http://buildroot.uclibc.org/downloads/snapshots/buildroot-snapshot.tar.bz2 indirizzo].&lt;br /&gt;
&lt;br /&gt;
Questa procedura è analoga a quella usata per la realizzazione di qualsiasi sistema embedded Linux-based: router, decoder, lettory DVD...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Scompattare il buildroot&lt;br /&gt;
 $ tar -xjvf buildroot-snapshot.tar.bz2&lt;br /&gt;
&lt;br /&gt;
Entrare nella directory principale&lt;br /&gt;
 $ cd buildroot&lt;br /&gt;
&lt;br /&gt;
Configurare il toolchain&lt;br /&gt;
 $ make menuconfig&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Indicare:&lt;br /&gt;
&lt;br /&gt;
architettura di destinazione (i386, i486, i586…)&lt;br /&gt;
&lt;br /&gt;
opzioni di compilazione&lt;br /&gt;
&lt;br /&gt;
versione del kernel da usare&lt;br /&gt;
&lt;br /&gt;
impostare la configurazione di default del kernel&lt;br /&gt;
 Kernel  ---&amp;gt; Kernel configuration (Use the architecture default configuration)&lt;br /&gt;
&lt;br /&gt;
eventuali altri programmi non presenti in busybox (es.: dropbear, nano, iptables, mutt)&lt;br /&gt;
&lt;br /&gt;
root filesystem di destinazione&lt;br /&gt;
&lt;br /&gt;
Esistono varie tipologie di filesystem tra cui scegliere, tra queste l'ext2 compresso con bzip2 o lzma.&lt;br /&gt;
Con lzma si ottengono filesystem fino al 20% più piccoli rispetto a quelli compressi con bzip2, ma il sistema  necessiterà di maggiore memoria (RAM) per caricarli.&lt;br /&gt;
&lt;br /&gt;
Se il PC che che avete a disposizione non ha almeno 70-80 MB di RAM è preferibile optare per la compressione con bzip2, se la quantità di memoria non è un problema la compressione con lzma è sicuramente preferibile.&lt;br /&gt;
&lt;br /&gt;
 '''Per poter caricare correttamente il prompt del login è necessario sostituire'''&lt;br /&gt;
 '''ttyS0 con tty1 nelle opzioni di configurazione del getty.'''&lt;br /&gt;
&lt;br /&gt;
Configurare busybox selezionando i programmi che si ritengono necessari&lt;br /&gt;
 $ make busybox-menuconfig&lt;br /&gt;
&lt;br /&gt;
Configurare il kernel per la compilazione&lt;br /&gt;
 $ make linux-menuconfig&lt;br /&gt;
&lt;br /&gt;
Escludere tutto ciò che non è strettamente necessario per risparmiare spazio su disco, quanto segue dovrà essere necessariamente presente per ottenere un sistema minimo avviabile.&lt;br /&gt;
&lt;br /&gt;
Code maturity level-&amp;gt; Prompt for development&lt;br /&gt;
&lt;br /&gt;
Processor type and features-&amp;gt; Support for your processor&lt;br /&gt;
&lt;br /&gt;
General setup-&amp;gt; kernel support for ELF binaries&lt;br /&gt;
&lt;br /&gt;
Block devices-&amp;gt; Normal PC floppy disk support&lt;br /&gt;
&lt;br /&gt;
Block devices-&amp;gt; RAM disk support&lt;br /&gt;
&lt;br /&gt;
File systems-&amp;gt; /proc filesystem, tmpfs, ext2&lt;br /&gt;
&lt;br /&gt;
Character devices-&amp;gt; Virtual terminal&lt;br /&gt;
&lt;br /&gt;
Character devices-&amp;gt; Support for console on virtual terminal&lt;br /&gt;
&lt;br /&gt;
Console drivers-&amp;gt; VGA text console&lt;br /&gt;
&lt;br /&gt;
General setup-&amp;gt; PCI support&lt;br /&gt;
&lt;br /&gt;
I driver delle schede di rete che interessa supportare, iptables se si necessita di un firewall, un driver ide generico per poter montare un hard disk ATA.&lt;br /&gt;
&lt;br /&gt;
Per risparmiare spazio è preferibile comprimere l'immagine del kernel (bzImage) con l'algoritmo di compressione lzma.&lt;br /&gt;
&lt;br /&gt;
Terminata la fase di configurazione si può procedere con la compilazione&lt;br /&gt;
 $ make&lt;br /&gt;
&lt;br /&gt;
Se qualcosa dovesse andare storto normalmente è sufficiente identificare il programma incriminato e vedere se cambiando versione la compilazione va buon fine.&lt;br /&gt;
&lt;br /&gt;
Nella directory buildroot/output/images risiede il prodotto finito.&lt;br /&gt;
Si tratterà di 2 o 3 file: bzImage, rootfs.i486.ext2 e la sua versione compressa rootfs.i486.ext2.lzma.&lt;br /&gt;
Le dimensioni dei file bzImage e rootfs.i486.ext2.lzma devono essere sufficientemente contenute per entrare su un floppy.&lt;br /&gt;
Nel caso fossero solo di poco più grandi (100-200 KB), si può rimediare con la formattazione non standard del floppy: a 1.72 MB invece che a 1.44MB.&lt;br /&gt;
 $ sudo mknod /dev/fd0u1722 b 2 60&lt;br /&gt;
 $ fdformat /dev/fd0u1722&lt;br /&gt;
 $ mkfs.vfat /dev/fd0u1722&lt;br /&gt;
&lt;br /&gt;
Se non presente creare un mount point per il floppy&lt;br /&gt;
 $ sudo mkdir /mnt/floppy&lt;br /&gt;
&lt;br /&gt;
Montare il floppy&lt;br /&gt;
 $ sudo mount /dev/fd0u1722 /mnt/floppy&lt;br /&gt;
&lt;br /&gt;
Copiarvi i due file&lt;br /&gt;
 $ sudo cp buildroot/output/images/bzImage /mnt/floppy&lt;br /&gt;
 $ sudo cp buildroot/output/images/rootfs.i486.ext2.lzma /mnt/floppy&lt;br /&gt;
&lt;br /&gt;
Adesso occorre installare un boot loader sul floppy. Essendo leggero, semplice da usare e supportando la FAT16 si consiglia di usare syslinux.&lt;br /&gt;
&lt;br /&gt;
Se syslinux non fosse presente sul vostro sistema installatelo con:&lt;br /&gt;
&lt;br /&gt;
 $ sudo apt-get install syslinux&lt;br /&gt;
per sistemi Debian-based&lt;br /&gt;
&lt;br /&gt;
O con&lt;br /&gt;
 # pacman -S syslinux&lt;br /&gt;
su Arch Linux&lt;br /&gt;
&lt;br /&gt;
Con un editor di testo (es. nano) create il file di configurazione per il boot loader: syslinux.cfg&lt;br /&gt;
 $ sudo nano /mnt/floppy/syslinux.cfg&lt;br /&gt;
&lt;br /&gt;
Riportate quanto segue, eventualmente adattandolo alle vostre esigenze:&lt;br /&gt;
&lt;br /&gt;
 default start&lt;br /&gt;
 timeout 5&lt;br /&gt;
 prompt 1&lt;br /&gt;
 label start&lt;br /&gt;
 kernel bzImage&lt;br /&gt;
 append initrd=rootfs.i486.ext2.lzma BOOTDEV=fd0 ramdisk_size=16384 vga=0 root=/dev/ram0&lt;br /&gt;
&lt;br /&gt;
Se è stato usato un altro tipo di filesystem sostituire rootfs.i486.ext2.lzma con rootfs.i486.ext2.bz2, rootfs.i486.ext2.squashfs…&lt;br /&gt;
&lt;br /&gt;
Installare il bootloader sul floppy&lt;br /&gt;
 $ sudo syslinux /dev/fd0&lt;br /&gt;
&lt;br /&gt;
Smontare il floppy&lt;br /&gt;
 $ cd&lt;br /&gt;
 $ sudo umount /mnt/floppy&lt;br /&gt;
&lt;br /&gt;
In caso di necessità di modifiche al ramdisk bisognerà copiarlo sul disco fisso, decomprimerlo, montarlo in loop ed effettuare le modifiche in questo modo:&lt;br /&gt;
 $ sudo mount /mnt/floppy&lt;br /&gt;
 $ sudo cp /mnt/floppy/rootfs.i486.ext2.lzma&lt;br /&gt;
 $ sudo lzma -d rootfs.i486.ext2.lzma&lt;br /&gt;
 $ sudo mkdir /mnt/tmp&lt;br /&gt;
 $ sudo mount -o loop rootfs.i486.ext2 /mnt/tmp&lt;br /&gt;
 $ cd /mnt/tmp&lt;br /&gt;
&lt;br /&gt;
Effettuare le modifiche e poi smontare il tutto&lt;br /&gt;
 $ cd&lt;br /&gt;
 $ sudo umount /mnt/tmp&lt;br /&gt;
&lt;br /&gt;
Ricomprimere il ramdisk e copiarlo sul floppy per sostituire quello vecchio&lt;br /&gt;
 $ sudo lzma -c9 rootfs.i486.ext2 &amp;gt; rootfs.i486.ext2.lzma&lt;br /&gt;
 $ sudo cp rootfs.i486.ext2.lzma /mnt/floppy&lt;br /&gt;
 $ sudo umount /mnt/floppy&lt;br /&gt;
&lt;br /&gt;
Un floppy già pronto con le seguenti caratteristiche e presente [http://golem.linux.it/files/spookyh/fspooky_v05.tar.xz qui]&lt;br /&gt;
&lt;br /&gt;
* Linux kernel 3.2.9&lt;br /&gt;
&lt;br /&gt;
* Busybox 1.19.4&lt;br /&gt;
&lt;br /&gt;
* Programmi inclusi: ftpd, ncftp, dropbear (ssh client/server), httpd, iptables, dhcp client/server, nc, wget, fdisk.&lt;br /&gt;
&lt;br /&gt;
* Requisiti minimi: i586 (60 MHz), 74 Mb RAM, floppy driver 3,5&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* Hardware supportato: processori i586 compatibili, Bus PCI (niente ISA), Controller Generic ATA disk; schede di rete Novell NE2000 (e cloni), RealTek 8129, Intel PRO/1000 Gigabit Adapter.&lt;br /&gt;
&lt;br /&gt;
[[Category:howto]]&lt;/div&gt;</summary>
		<author><name>$pooky Hunter</name></author>
	</entry>
	<entry>
		<id>https://wiki.golem.linux.it/index.php?title=Linux_minimale_per_PC_i386/i486&amp;diff=9956</id>
		<title>Linux minimale per PC i386/i486</title>
		<link rel="alternate" type="text/html" href="https://wiki.golem.linux.it/index.php?title=Linux_minimale_per_PC_i386/i486&amp;diff=9956"/>
		<updated>2026-05-14T16:59:07Z</updated>

		<summary type="html">&lt;p&gt;$pooky Hunter: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Distribuzioni per i486-i586=&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! Distro&lt;br /&gt;
! CPU minima&lt;br /&gt;
! RAM minima&lt;br /&gt;
! Disco/ISO&lt;br /&gt;
! Uso ideale&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [http://delicate-linux.net/ DeLi Linux]&lt;br /&gt;
| i486&lt;br /&gt;
| 8–16 MB&lt;br /&gt;
| ~200 MB installazione&lt;br /&gt;
| Retrocomputing puro, PC anni '90&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.slitaz.org SliTaz]&lt;br /&gt;
| i486&lt;br /&gt;
| 24–64 MB&lt;br /&gt;
| ISO 30–60 MB&lt;br /&gt;
| Pentium II/III molto leggeri&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.tinycorelinux.com Tiny Core Linux]&lt;br /&gt;
| i486DX&lt;br /&gt;
| 46 MB&lt;br /&gt;
| 20–200 MB&lt;br /&gt;
| Minimalismo estremo, appliance&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.puppylinux.com Puppy Linux]&lt;br /&gt;
| Pentium II&lt;br /&gt;
| 128-256 MB&lt;br /&gt;
| 300–500 MB ISO&lt;br /&gt;
| Desktop leggero usabile&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.damnsmalllinux.org  Damn Small Linux 2024]&lt;br /&gt;
| i686&lt;br /&gt;
| 256-512 MB&lt;br /&gt;
| ~700 MB ISO&lt;br /&gt;
| Hardware datato ma moderno&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Floppy Linux=&lt;br /&gt;
Se si tenta di recuperare una macchina particolarmente vecchia possono venire in nostro soccorso delle mini distribuzioni prive di ambiente grafico e talmente compatte da poter essere contenute in un unico floppy.&lt;br /&gt;
&lt;br /&gt;
NB: su Linux è stato rimosso il supporto al 386 nel 2012 (kernel 3.8) ed al 486 nel 2026 (kernel 7.1)&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! Distribuzione&lt;br /&gt;
! Supporto avvio&lt;br /&gt;
! CPU minima&lt;br /&gt;
! RAM minima&lt;br /&gt;
! Dimensione tipica&lt;br /&gt;
! Uso ideale&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [https://krzysztofjankowski.com/floppinux/ FLOPPINUX]&lt;br /&gt;
| 1 floppy&lt;br /&gt;
| 386&lt;br /&gt;
| 4–8 MB&lt;br /&gt;
| 1.44 MB&lt;br /&gt;
| Mini Linux educativo/sperimentale&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/snacsnoc/fluxflop/releases Fluxflop]&lt;br /&gt;
| 1–2 floppy&lt;br /&gt;
| 386&lt;br /&gt;
| ~4 MB&lt;br /&gt;
| 1.44–2.88 MB&lt;br /&gt;
| Networking minimale&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.fdlinux.com/download.php FD Linux]&lt;br /&gt;
| 1 floppy&lt;br /&gt;
| 386SX&lt;br /&gt;
| 4 MB&lt;br /&gt;
| 1.44 MB&lt;br /&gt;
| DOS/Linux compatto&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.zelow.no/floppyfw floppyfw]&lt;br /&gt;
| 1 floppy&lt;br /&gt;
| 386&lt;br /&gt;
| 8 MB&lt;br /&gt;
| 1.44 MB&lt;br /&gt;
| Router/firewall embedded&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [https://web.archive.org/web/20190312063410/http://chris.silmor.de/hal91/ HAL91]&lt;br /&gt;
| 1 floppy&lt;br /&gt;
| 386&lt;br /&gt;
| 2–4 MB&lt;br /&gt;
| 1.44 MB&lt;br /&gt;
| Esperimenti ultra-minimali&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [http://micheleandreoli.org/public/Software/mulinux/ muLinux]&lt;br /&gt;
| 1+ floppy modulari&lt;br /&gt;
| 386SX&lt;br /&gt;
| 4 MB&lt;br /&gt;
| 1.44 MB base&lt;br /&gt;
| Recupero PC vintage&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [http://smartlinux.sourceforge.net S.M.A.R.T. Linux]&lt;br /&gt;
| 1 floppy&lt;br /&gt;
| 386&lt;br /&gt;
| 4–8 MB&lt;br /&gt;
| 1.44 MB&lt;br /&gt;
| Toolkit floppy generale&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [http://distro.ibiblio.org/polypux/external/smalllinux/ Small Linux]&lt;br /&gt;
| 1–2 floppy&lt;br /&gt;
| 386&lt;br /&gt;
| 4–8 MB&lt;br /&gt;
| ~2 MB&lt;br /&gt;
| Sistema Linux minimale&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [https://archiveos.org/tomsrtbt/ tomsrtbt]&lt;br /&gt;
| 1 floppy&lt;br /&gt;
| 386SX&lt;br /&gt;
| 8 MB&lt;br /&gt;
| 1.72 MB&lt;br /&gt;
| Rescue disk leggendario&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceforge.net/projects/trinux/files/ Trinux]&lt;br /&gt;
| 1–2 floppy&lt;br /&gt;
| 486&lt;br /&gt;
| 8–16 MB&lt;br /&gt;
| 1.44–3 MB&lt;br /&gt;
| Sicurezza/network auditing&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [https://web.archive.org/web/20070629142617/http://zoollinux.berlios.de/doku.php Zool]&lt;br /&gt;
| 1 floppy&lt;br /&gt;
| 386&lt;br /&gt;
| ~4 MB&lt;br /&gt;
| 1.44 MB&lt;br /&gt;
| Linux ultra-compatto&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Buildroot=&lt;br /&gt;
Soluzioni preconfezionate (come quelle sopra elencate) possono talvolta non rispondere completamente alle nostre esigenze. Spesso hanno kernel datati (2.0, 2.2) o magari mancano proprio dell'applicazione o del driver di cui abbiamo bisogno.&lt;br /&gt;
&lt;br /&gt;
In questi casi l'unica strada percorribile è quella di costruirsi il proprio floppy Linux personalizzato. Per farlo il metodo più semplice è utilizzare [http://buildroot.uclibc.org Buildroot], un tarball che permette la cross-compilazione di un ambiente Linux completo usando le leggerissime librerie uClibc o musl e l'eseguibile busybox.&lt;br /&gt;
L'ultima versione disponibile e scaricabile da questo [http://buildroot.uclibc.org/downloads/snapshots/buildroot-snapshot.tar.bz2 indirizzo].&lt;br /&gt;
&lt;br /&gt;
Questa procedura è analoga a quella usata per la realizzazione di qualsiasi sistema embedded Linux-based: router, decoder, lettory DVD...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Scompattare il buildroot&lt;br /&gt;
 $ tar -xjvf buildroot-snapshot.tar.bz2&lt;br /&gt;
&lt;br /&gt;
Entrare nella directory principale&lt;br /&gt;
 $ cd buildroot&lt;br /&gt;
&lt;br /&gt;
Configurare il toolchain&lt;br /&gt;
 $ make menuconfig&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Indicare:&lt;br /&gt;
&lt;br /&gt;
architettura di destinazione (i386, i486, i586…)&lt;br /&gt;
&lt;br /&gt;
opzioni di compilazione&lt;br /&gt;
&lt;br /&gt;
versione del kernel da usare&lt;br /&gt;
&lt;br /&gt;
eventuali altri programmi non presenti in busybox (es. dropbear, un client/server ssh)&lt;br /&gt;
&lt;br /&gt;
root filesystem di destinazione&lt;br /&gt;
&lt;br /&gt;
Esistono varie tipologie di filesystem tra cui scegliere, tra queste l'ext2 compresso con bzip2 o lzma.&lt;br /&gt;
Con lzma si ottengono filesystem fino al 20% più piccoli rispetto a quelli compressi con bzip2, ma il sistema  necessiterà di maggiore memoria (RAM) per caricarli.&lt;br /&gt;
&lt;br /&gt;
Se il PC che che avete a disposizione non ha almeno 70-80 MB di RAM è preferibile optare per la compressione con bzip2, se la quantità di memoria non è un problema la compressione con lzma è sicuramente preferibile.&lt;br /&gt;
&lt;br /&gt;
 '''Per poter caricare correttamente il prompt del login è necessario sostituire'''&lt;br /&gt;
 '''ttyS0 con tty1 nelle opzioni di configurazione del getty.'''&lt;br /&gt;
&lt;br /&gt;
Configurare busybox selezionando i programmi che si ritengono necessari&lt;br /&gt;
 $ make busybox-menuconfig&lt;br /&gt;
&lt;br /&gt;
Configurare il kernel per la compilazione&lt;br /&gt;
 $ make linux-menuconfig&lt;br /&gt;
&lt;br /&gt;
Escludere tutto ciò che non è strettamente necessario per risparmiare spazio su disco, quanto segue dovrà essere necessariamente presente per ottenere un sistema minimo avviabile.&lt;br /&gt;
&lt;br /&gt;
Code maturity level-&amp;gt; Prompt for development&lt;br /&gt;
&lt;br /&gt;
Processor type and features-&amp;gt; Support for your processor&lt;br /&gt;
&lt;br /&gt;
General setup-&amp;gt; kernel support for ELF binaries&lt;br /&gt;
&lt;br /&gt;
Block devices-&amp;gt; Normal PC floppy disk support&lt;br /&gt;
&lt;br /&gt;
Block devices-&amp;gt; RAM disk support&lt;br /&gt;
&lt;br /&gt;
File systems-&amp;gt; /proc filesystem, tmpfs, ext2&lt;br /&gt;
&lt;br /&gt;
Character devices-&amp;gt; Virtual terminal&lt;br /&gt;
&lt;br /&gt;
Character devices-&amp;gt; Support for console on virtual terminal&lt;br /&gt;
&lt;br /&gt;
Console drivers-&amp;gt; VGA text console&lt;br /&gt;
&lt;br /&gt;
General setup-&amp;gt; PCI support&lt;br /&gt;
&lt;br /&gt;
I driver delle schede di rete che interessa supportare, iptables se si necessita di un firewall, un driver ide generico per poter montare un hard disk ATA.&lt;br /&gt;
&lt;br /&gt;
Per risparmiare spazio è preferibile comprimere l'immagine del kernel (bzImage) con l'algoritmo di compressione lzma.&lt;br /&gt;
&lt;br /&gt;
Terminata la fase di configurazione si può procedere con la compilazione&lt;br /&gt;
 $ make&lt;br /&gt;
&lt;br /&gt;
Se qualcosa dovesse andare storto normalmente è sufficiente identificare il programma incriminato e vedere se cambiando versione la compilazione va buon fine.&lt;br /&gt;
&lt;br /&gt;
Nella directory buildroot/output/images risiede il prodotto finito.&lt;br /&gt;
Si tratterà di 2 o 3 file: bzImage, rootfs.i486.ext2 e la sua versione compressa rootfs.i486.ext2.lzma.&lt;br /&gt;
Le dimensioni dei file bzImage e rootfs.i486.ext2.lzma devono essere sufficientemente contenute per entrare su un floppy.&lt;br /&gt;
Nel caso fossero solo di poco più grandi (100-200 KB), si può rimediare con la formattazione non standard del floppy: a 1.72 MB invece che a 1.44MB.&lt;br /&gt;
 $ sudo mknod /dev/fd0u1722 b 2 60&lt;br /&gt;
 $ fdformat /dev/fd0u1722&lt;br /&gt;
 $ mkfs.vfat /dev/fd0u1722&lt;br /&gt;
&lt;br /&gt;
Se non presente creare un mount point per il floppy&lt;br /&gt;
 $ sudo mkdir /mnt/floppy&lt;br /&gt;
&lt;br /&gt;
Montare il floppy&lt;br /&gt;
 $ sudo mount /dev/fd0u1722 /mnt/floppy&lt;br /&gt;
&lt;br /&gt;
Copiarvi i due file&lt;br /&gt;
 $ sudo cp buildroot/output/images/bzImage /mnt/floppy&lt;br /&gt;
 $ sudo cp buildroot/output/images/rootfs.i486.ext2.lzma /mnt/floppy&lt;br /&gt;
&lt;br /&gt;
Adesso occorre installare un boot loader sul floppy. Essendo leggero, semplice da usare e supportando la FAT16 si consiglia di usare syslinux.&lt;br /&gt;
&lt;br /&gt;
Se syslinux non fosse presente sul vostro sistema installatelo con:&lt;br /&gt;
&lt;br /&gt;
 $ sudo apt-get install syslinux&lt;br /&gt;
per sistemi Debian-based&lt;br /&gt;
&lt;br /&gt;
O con&lt;br /&gt;
 # pacman -S syslinux&lt;br /&gt;
su Arch Linux&lt;br /&gt;
&lt;br /&gt;
Con un editor di testo (es. nano) create il file di configurazione per il boot loader: syslinux.cfg&lt;br /&gt;
 $ sudo nano /mnt/floppy/syslinux.cfg&lt;br /&gt;
&lt;br /&gt;
Riportate quanto segue, eventualmente adattandolo alle vostre esigenze:&lt;br /&gt;
&lt;br /&gt;
 default start&lt;br /&gt;
 timeout 5&lt;br /&gt;
 prompt 1&lt;br /&gt;
 label start&lt;br /&gt;
 kernel bzImage&lt;br /&gt;
 append initrd=rootfs.i486.ext2.lzma BOOTDEV=fd0 ramdisk_size=16384 vga=0 root=/dev/ram0&lt;br /&gt;
&lt;br /&gt;
Se è stato usato un altro tipo di filesystem sostituire rootfs.i486.ext2.lzma con rootfs.i486.ext2.bz2, rootfs.i486.ext2.squashfs…&lt;br /&gt;
&lt;br /&gt;
Installare il bootloader sul floppy&lt;br /&gt;
 $ sudo syslinux /dev/fd0&lt;br /&gt;
&lt;br /&gt;
Smontare il floppy&lt;br /&gt;
 $ cd&lt;br /&gt;
 $ sudo umount /mnt/floppy&lt;br /&gt;
&lt;br /&gt;
In caso di necessità di modifiche al ramdisk bisognerà copiarlo sul disco fisso, decomprimerlo, montarlo in loop ed effettuare le modifiche in questo modo:&lt;br /&gt;
 $ sudo mount /mnt/floppy&lt;br /&gt;
 $ sudo cp /mnt/floppy/rootfs.i486.ext2.lzma&lt;br /&gt;
 $ sudo lzma -d rootfs.i486.ext2.lzma&lt;br /&gt;
 $ sudo mkdir /mnt/tmp&lt;br /&gt;
 $ sudo mount -o loop rootfs.i486.ext2 /mnt/tmp&lt;br /&gt;
 $ cd /mnt/tmp&lt;br /&gt;
&lt;br /&gt;
Effettuare le modifiche e poi smontare il tutto&lt;br /&gt;
 $ cd&lt;br /&gt;
 $ sudo umount /mnt/tmp&lt;br /&gt;
&lt;br /&gt;
Ricomprimere il ramdisk e copiarlo sul floppy per sostituire quello vecchio&lt;br /&gt;
 $ sudo lzma -c9 rootfs.i486.ext2 &amp;gt; rootfs.i486.ext2.lzma&lt;br /&gt;
 $ sudo cp rootfs.i486.ext2.lzma /mnt/floppy&lt;br /&gt;
 $ sudo umount /mnt/floppy&lt;br /&gt;
&lt;br /&gt;
Un floppy già pronto con le seguenti caratteristiche e presente [http://golem.linux.it/files/spookyh/fspooky_v05.tar.xz qui]&lt;br /&gt;
&lt;br /&gt;
* Linux kernel 3.2.9&lt;br /&gt;
&lt;br /&gt;
* Busybox 1.19.4&lt;br /&gt;
&lt;br /&gt;
* Programmi inclusi: ftpd, ncftp, dropbear (ssh client/server), httpd, iptables, dhcp client/server, nc, wget, fdisk.&lt;br /&gt;
&lt;br /&gt;
* Requisiti minimi: i586 (60 MHz), 74 Mb RAM, floppy driver 3,5&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* Hardware supportato: processori i586 compatibili, Bus PCI (niente ISA), Controller Generic ATA disk; schede di rete Novell NE2000 (e cloni), RealTek 8129, Intel PRO/1000 Gigabit Adapter.&lt;br /&gt;
&lt;br /&gt;
[[Category:howto]]&lt;/div&gt;</summary>
		<author><name>$pooky Hunter</name></author>
	</entry>
	<entry>
		<id>https://wiki.golem.linux.it/index.php?title=Linux_minimale_per_PC_i386/i486&amp;diff=9955</id>
		<title>Linux minimale per PC i386/i486</title>
		<link rel="alternate" type="text/html" href="https://wiki.golem.linux.it/index.php?title=Linux_minimale_per_PC_i386/i486&amp;diff=9955"/>
		<updated>2026-05-14T16:49:20Z</updated>

		<summary type="html">&lt;p&gt;$pooky Hunter: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Distribuzioni per i486-i586=&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! Distro&lt;br /&gt;
! CPU minima&lt;br /&gt;
! RAM minima&lt;br /&gt;
! Disco/ISO&lt;br /&gt;
! Uso ideale&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [http://delicate-linux.net/ DeLi Linux]&lt;br /&gt;
| i486&lt;br /&gt;
| 8–16 MB&lt;br /&gt;
| ~200 MB installazione&lt;br /&gt;
| Retrocomputing puro, PC anni '90&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.slitaz.org SliTaz]&lt;br /&gt;
| i486&lt;br /&gt;
| 24–64 MB&lt;br /&gt;
| ISO 30–60 MB&lt;br /&gt;
| Pentium II/III molto leggeri&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.tinycorelinux.com Tiny Core Linux]&lt;br /&gt;
| i486DX&lt;br /&gt;
| 46 MB&lt;br /&gt;
| 20–200 MB&lt;br /&gt;
| Minimalismo estremo, appliance&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.puppylinux.com Puppy Linux]&lt;br /&gt;
| Pentium II&lt;br /&gt;
| 128-256 MB&lt;br /&gt;
| 300–500 MB ISO&lt;br /&gt;
| Desktop leggero usabile&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.damnsmalllinux.org  Damn Small Linux 2024]&lt;br /&gt;
| i686&lt;br /&gt;
| 256-512 MB&lt;br /&gt;
| ~700 MB ISO&lt;br /&gt;
| Hardware datato ma moderno&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Floppy Linux=&lt;br /&gt;
Se si tenta di recuperare una macchina particolarmente vecchia possono venire in nostro soccorso delle mini distribuzioni prive di ambiente grafico e talmente compatte da poter essere contenute in un unico floppy.&lt;br /&gt;
&lt;br /&gt;
NB: su Linux è stato rimosso il supporto al 386 nel 2012 (kernel 3.8) ed al 486 nel 2025 (kernel 6.15)&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! Distribuzione&lt;br /&gt;
! Supporto avvio&lt;br /&gt;
! CPU minima&lt;br /&gt;
! RAM minima&lt;br /&gt;
! Dimensione tipica&lt;br /&gt;
! Uso ideale&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [https://krzysztofjankowski.com/floppinux/ FLOPPINUX]&lt;br /&gt;
| 1 floppy&lt;br /&gt;
| 386&lt;br /&gt;
| 4–8 MB&lt;br /&gt;
| 1.44 MB&lt;br /&gt;
| Mini Linux educativo/sperimentale&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/snacsnoc/fluxflop/releases Fluxflop]&lt;br /&gt;
| 1–2 floppy&lt;br /&gt;
| 386&lt;br /&gt;
| ~4 MB&lt;br /&gt;
| 1.44–2.88 MB&lt;br /&gt;
| Networking minimale&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.fdlinux.com/download.php FD Linux]&lt;br /&gt;
| 1 floppy&lt;br /&gt;
| 386SX&lt;br /&gt;
| 4 MB&lt;br /&gt;
| 1.44 MB&lt;br /&gt;
| DOS/Linux compatto&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.zelow.no/floppyfw floppyfw]&lt;br /&gt;
| 1 floppy&lt;br /&gt;
| 386&lt;br /&gt;
| 8 MB&lt;br /&gt;
| 1.44 MB&lt;br /&gt;
| Router/firewall embedded&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [https://web.archive.org/web/20190312063410/http://chris.silmor.de/hal91/ HAL91]&lt;br /&gt;
| 1 floppy&lt;br /&gt;
| 386&lt;br /&gt;
| 2–4 MB&lt;br /&gt;
| 1.44 MB&lt;br /&gt;
| Esperimenti ultra-minimali&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [http://micheleandreoli.org/public/Software/mulinux/ muLinux]&lt;br /&gt;
| 1+ floppy modulari&lt;br /&gt;
| 386SX&lt;br /&gt;
| 4 MB&lt;br /&gt;
| 1.44 MB base&lt;br /&gt;
| Recupero PC vintage&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [http://smartlinux.sourceforge.net S.M.A.R.T. Linux]&lt;br /&gt;
| 1 floppy&lt;br /&gt;
| 386&lt;br /&gt;
| 4–8 MB&lt;br /&gt;
| 1.44 MB&lt;br /&gt;
| Toolkit floppy generale&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [http://distro.ibiblio.org/polypux/external/smalllinux/ Small Linux]&lt;br /&gt;
| 1–2 floppy&lt;br /&gt;
| 386&lt;br /&gt;
| 4–8 MB&lt;br /&gt;
| ~2 MB&lt;br /&gt;
| Sistema Linux minimale&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [https://archiveos.org/tomsrtbt/ tomsrtbt]&lt;br /&gt;
| 1 floppy&lt;br /&gt;
| 386SX&lt;br /&gt;
| 8 MB&lt;br /&gt;
| 1.72 MB&lt;br /&gt;
| Rescue disk leggendario&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [http://sourceforge.net/projects/trinux/files/ Trinux]&lt;br /&gt;
| 1–2 floppy&lt;br /&gt;
| 486&lt;br /&gt;
| 8–16 MB&lt;br /&gt;
| 1.44–3 MB&lt;br /&gt;
| Sicurezza/network auditing&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [https://web.archive.org/web/20070629142617/http://zoollinux.berlios.de/doku.php Zool]&lt;br /&gt;
| 1 floppy&lt;br /&gt;
| 386&lt;br /&gt;
| ~4 MB&lt;br /&gt;
| 1.44 MB&lt;br /&gt;
| Linux ultra-compatto&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Buildroot=&lt;br /&gt;
Soluzioni preconfezionate (come quelle sopra elencate) possono talvolta non rispondere completamente alle nostre esigenze. Spesso hanno kernel datati (2.0, 2.2) o magari mancano proprio dell'applicazione o del driver di cui abbiamo bisogno.&lt;br /&gt;
&lt;br /&gt;
In questi casi l'unica strada percorribile è quella di costruirsi il proprio floppy Linux personalizzato. Per farlo il metodo più semplice è utilizzare [http://buildroot.uclibc.org Buildroot], un tarball che permette la cross-compilazione di un ambiente Linux completo usando le leggerissime librerie uClibc o musl e l'eseguibile busybox.&lt;br /&gt;
L'ultima versione disponibile e scaricabile da questo [http://buildroot.uclibc.org/downloads/snapshots/buildroot-snapshot.tar.bz2 indirizzo].&lt;br /&gt;
&lt;br /&gt;
Questa procedura è analoga a quella usata per la realizzazione di qualsiasi sistema embedded Linux-based: router, decoder, lettory DVD...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Scompattare il buildroot&lt;br /&gt;
 $ tar -xjvf buildroot-snapshot.tar.bz2&lt;br /&gt;
&lt;br /&gt;
Entrare nella directory principale&lt;br /&gt;
 $ cd buildroot&lt;br /&gt;
&lt;br /&gt;
Configurare il toolchain&lt;br /&gt;
 $ make menuconfig&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Indicare:&lt;br /&gt;
&lt;br /&gt;
architettura di destinazione (i386, i486, i586…)&lt;br /&gt;
&lt;br /&gt;
opzioni di compilazione&lt;br /&gt;
&lt;br /&gt;
versione del kernel da usare&lt;br /&gt;
&lt;br /&gt;
eventuali altri programmi non presenti in busybox (es. dropbear, un client/server ssh)&lt;br /&gt;
&lt;br /&gt;
root filesystem di destinazione&lt;br /&gt;
&lt;br /&gt;
Esistono varie tipologie di filesystem tra cui scegliere, tra queste l'ext2 compresso con bzip2 o lzma.&lt;br /&gt;
Con lzma si ottengono filesystem fino al 20% più piccoli rispetto a quelli compressi con bzip2, ma il sistema  necessiterà di maggiore memoria (RAM) per caricarli.&lt;br /&gt;
&lt;br /&gt;
Se il PC che che avete a disposizione non ha almeno 70-80 MB di RAM è preferibile optare per la compressione con bzip2, se la quantità di memoria non è un problema la compressione con lzma è sicuramente preferibile.&lt;br /&gt;
&lt;br /&gt;
 '''Per poter caricare correttamente il prompt del login è necessario sostituire'''&lt;br /&gt;
 '''ttyS0 con tty1 nelle opzioni di configurazione del getty.'''&lt;br /&gt;
&lt;br /&gt;
Configurare busybox selezionando i programmi che si ritengono necessari&lt;br /&gt;
 $ make busybox-menuconfig&lt;br /&gt;
&lt;br /&gt;
Configurare il kernel per la compilazione&lt;br /&gt;
 $ make linux-menuconfig&lt;br /&gt;
&lt;br /&gt;
Escludere tutto ciò che non è strettamente necessario per risparmiare spazio su disco, quanto segue dovrà essere necessariamente presente per ottenere un sistema minimo avviabile.&lt;br /&gt;
&lt;br /&gt;
Code maturity level-&amp;gt; Prompt for development&lt;br /&gt;
&lt;br /&gt;
Processor type and features-&amp;gt; Support for your processor&lt;br /&gt;
&lt;br /&gt;
General setup-&amp;gt; kernel support for ELF binaries&lt;br /&gt;
&lt;br /&gt;
Block devices-&amp;gt; Normal PC floppy disk support&lt;br /&gt;
&lt;br /&gt;
Block devices-&amp;gt; RAM disk support&lt;br /&gt;
&lt;br /&gt;
File systems-&amp;gt; /proc filesystem, tmpfs, ext2&lt;br /&gt;
&lt;br /&gt;
Character devices-&amp;gt; Virtual terminal&lt;br /&gt;
&lt;br /&gt;
Character devices-&amp;gt; Support for console on virtual terminal&lt;br /&gt;
&lt;br /&gt;
Console drivers-&amp;gt; VGA text console&lt;br /&gt;
&lt;br /&gt;
General setup-&amp;gt; PCI support&lt;br /&gt;
&lt;br /&gt;
I driver delle schede di rete che interessa supportare, iptables se si necessita di un firewall, un driver ide generico per poter montare un hard disk ATA.&lt;br /&gt;
&lt;br /&gt;
Per risparmiare spazio è preferibile comprimere l'immagine del kernel (bzImage) con l'algoritmo di compressione lzma.&lt;br /&gt;
&lt;br /&gt;
Terminata la fase di configurazione si può procedere con la compilazione&lt;br /&gt;
 $ make&lt;br /&gt;
&lt;br /&gt;
Se qualcosa dovesse andare storto normalmente è sufficiente identificare il programma incriminato e vedere se cambiando versione la compilazione va buon fine.&lt;br /&gt;
&lt;br /&gt;
Nella directory buildroot/output/images risiede il prodotto finito.&lt;br /&gt;
Si tratterà di 2 o 3 file: bzImage, rootfs.i486.ext2 e la sua versione compressa rootfs.i486.ext2.lzma.&lt;br /&gt;
Le dimensioni dei file bzImage e rootfs.i486.ext2.lzma devono essere sufficientemente contenute per entrare su un floppy.&lt;br /&gt;
Nel caso fossero solo di poco più grandi (100-200 KB), si può rimediare con la formattazione non standard del floppy: a 1.72 MB invece che a 1.44MB.&lt;br /&gt;
 $ sudo mknod /dev/fd0u1722 b 2 60&lt;br /&gt;
 $ fdformat /dev/fd0u1722&lt;br /&gt;
 $ mkfs.vfat /dev/fd0u1722&lt;br /&gt;
&lt;br /&gt;
Se non presente creare un mount point per il floppy&lt;br /&gt;
 $ sudo mkdir /mnt/floppy&lt;br /&gt;
&lt;br /&gt;
Montare il floppy&lt;br /&gt;
 $ sudo mount /dev/fd0u1722 /mnt/floppy&lt;br /&gt;
&lt;br /&gt;
Copiarvi i due file&lt;br /&gt;
 $ sudo cp buildroot/output/images/bzImage /mnt/floppy&lt;br /&gt;
 $ sudo cp buildroot/output/images/rootfs.i486.ext2.lzma /mnt/floppy&lt;br /&gt;
&lt;br /&gt;
Adesso occorre installare un boot loader sul floppy. Essendo leggero, semplice da usare e supportando la FAT16 si consiglia di usare syslinux.&lt;br /&gt;
&lt;br /&gt;
Se syslinux non fosse presente sul vostro sistema installatelo con:&lt;br /&gt;
&lt;br /&gt;
 $ sudo apt-get install syslinux&lt;br /&gt;
per sistemi Debian-based&lt;br /&gt;
&lt;br /&gt;
O con&lt;br /&gt;
 # pacman -S syslinux&lt;br /&gt;
su Arch Linux&lt;br /&gt;
&lt;br /&gt;
Con un editor di testo (es. nano) create il file di configurazione per il boot loader: syslinux.cfg&lt;br /&gt;
 $ sudo nano /mnt/floppy/syslinux.cfg&lt;br /&gt;
&lt;br /&gt;
Riportate quanto segue, eventualmente adattandolo alle vostre esigenze:&lt;br /&gt;
&lt;br /&gt;
 default start&lt;br /&gt;
 timeout 5&lt;br /&gt;
 prompt 1&lt;br /&gt;
 label start&lt;br /&gt;
 kernel bzImage&lt;br /&gt;
 append initrd=rootfs.i486.ext2.lzma BOOTDEV=fd0 ramdisk_size=16384 vga=0 root=/dev/ram0&lt;br /&gt;
&lt;br /&gt;
Se è stato usato un altro tipo di filesystem sostituire rootfs.i486.ext2.lzma con rootfs.i486.ext2.bz2, rootfs.i486.ext2.squashfs…&lt;br /&gt;
&lt;br /&gt;
Installare il bootloader sul floppy&lt;br /&gt;
 $ sudo syslinux /dev/fd0&lt;br /&gt;
&lt;br /&gt;
Smontare il floppy&lt;br /&gt;
 $ cd&lt;br /&gt;
 $ sudo umount /mnt/floppy&lt;br /&gt;
&lt;br /&gt;
In caso di necessità di modifiche al ramdisk bisognerà copiarlo sul disco fisso, decomprimerlo, montarlo in loop ed effettuare le modifiche in questo modo:&lt;br /&gt;
 $ sudo mount /mnt/floppy&lt;br /&gt;
 $ sudo cp /mnt/floppy/rootfs.i486.ext2.lzma&lt;br /&gt;
 $ sudo lzma -d rootfs.i486.ext2.lzma&lt;br /&gt;
 $ sudo mkdir /mnt/tmp&lt;br /&gt;
 $ sudo mount -o loop rootfs.i486.ext2 /mnt/tmp&lt;br /&gt;
 $ cd /mnt/tmp&lt;br /&gt;
&lt;br /&gt;
Effettuare le modifiche e poi smontare il tutto&lt;br /&gt;
 $ cd&lt;br /&gt;
 $ sudo umount /mnt/tmp&lt;br /&gt;
&lt;br /&gt;
Ricomprimere il ramdisk e copiarlo sul floppy per sostituire quello vecchio&lt;br /&gt;
 $ sudo lzma -c9 rootfs.i486.ext2 &amp;gt; rootfs.i486.ext2.lzma&lt;br /&gt;
 $ sudo cp rootfs.i486.ext2.lzma /mnt/floppy&lt;br /&gt;
 $ sudo umount /mnt/floppy&lt;br /&gt;
&lt;br /&gt;
Un floppy già pronto con le seguenti caratteristiche e presente [http://golem.linux.it/files/spookyh/fspooky_v05.tar.xz qui]&lt;br /&gt;
&lt;br /&gt;
* Linux kernel 3.2.9&lt;br /&gt;
&lt;br /&gt;
* Busybox 1.19.4&lt;br /&gt;
&lt;br /&gt;
* Programmi inclusi: ftpd, ncftp, dropbear (ssh client/server), httpd, iptables, dhcp client/server, nc, wget, fdisk.&lt;br /&gt;
&lt;br /&gt;
* Requisiti minimi: i586 (60 MHz), 74 Mb RAM, floppy driver 3,5&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* Hardware supportato: processori i586 compatibili, Bus PCI (niente ISA), Controller Generic ATA disk; schede di rete Novell NE2000 (e cloni), RealTek 8129, Intel PRO/1000 Gigabit Adapter.&lt;br /&gt;
&lt;br /&gt;
[[Category:howto]]&lt;/div&gt;</summary>
		<author><name>$pooky Hunter</name></author>
	</entry>
	<entry>
		<id>https://wiki.golem.linux.it/index.php?title=Linux_minimale_per_PC_i386/i486&amp;diff=9954</id>
		<title>Linux minimale per PC i386/i486</title>
		<link rel="alternate" type="text/html" href="https://wiki.golem.linux.it/index.php?title=Linux_minimale_per_PC_i386/i486&amp;diff=9954"/>
		<updated>2026-05-14T16:31:48Z</updated>

		<summary type="html">&lt;p&gt;$pooky Hunter: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Distribuzioni per i486-i586=&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! Distro&lt;br /&gt;
! CPU minima&lt;br /&gt;
! RAM minima&lt;br /&gt;
! Disco/ISO&lt;br /&gt;
! Uso ideale&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [http://delicate-linux.net/ DeLi Linux]&lt;br /&gt;
| i486&lt;br /&gt;
| 8–16 MB&lt;br /&gt;
| ~200 MB installazione&lt;br /&gt;
| Retrocomputing puro, PC anni '90&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.slitaz.org SliTaz]&lt;br /&gt;
| i486&lt;br /&gt;
| 24–64 MB&lt;br /&gt;
| ISO 30–60 MB&lt;br /&gt;
| Pentium II/III molto leggeri&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.tinycorelinux.com Tiny Core Linux]&lt;br /&gt;
| i486DX&lt;br /&gt;
| 46 MB&lt;br /&gt;
| 20–200 MB&lt;br /&gt;
| Minimalismo estremo, appliance&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.puppylinux.com Puppy Linux]&lt;br /&gt;
| Pentium II&lt;br /&gt;
| 128-256 MB&lt;br /&gt;
| 300–500 MB ISO&lt;br /&gt;
| Desktop leggero usabile&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.damnsmalllinux.org  Damn Small Linux 2024]&lt;br /&gt;
| i686&lt;br /&gt;
| 256-512 MB&lt;br /&gt;
| ~700 MB ISO&lt;br /&gt;
| Hardware datato ma moderno&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
A volte però, quando si tenta di recuperare qualche macchina particolarmente vecchia (magari per trasformarla in router, server web o proxy), anche queste soluzioni possono risultare inadeguate.&lt;br /&gt;
Ecco che possono venire in nostro soccorso delle mini distribuzioni Linux prive di ambiente grafico e talmente compatte da poter essere contenute in un unico floppy.&lt;br /&gt;
&lt;br /&gt;
=Floppy Linux=&lt;br /&gt;
[https://krzysztofjankowski.com/floppinux/ FLOPPINUX], [https://github.com/snacsnoc/fluxflop/releases Fluxflop], [http://www.fdlinux.com/download.php Fd Linux], [http://www.zelow.no/floppyfw/ floppyfw], [https://web.archive.org/web/20190312063410/http://chris.silmor.de/hal91/ HAL91], [http://micheleandreoli.org/public/Software/mulinux/ MuLinux], [http://smartlinux.sourceforge.net S.M.A.R.T.], [http://distro.ibiblio.org/polypux/external/smalllinux/ Small Linux], [https://archiveos.org/tomsrtbt/ tomsrtbt], [http://sourceforge.net/projects/trinux/files/ Trinux], [https://web.archive.org/web/20070629142617/http://zoollinux.berlios.de/doku.php Zool]&lt;br /&gt;
&lt;br /&gt;
Soluzioni preconfezionate (come quelle sopra elencate) possono talvolta non rispondere completamente alle nostre esigenze. Spesso hanno kernel datati (2.0, 2.2) o magari mancano proprio dell'applicazione o del driver di cui abbiamo bisogno.&lt;br /&gt;
&lt;br /&gt;
In questi casi l'unica strada percorribile è quella di costruirsi il proprio floppy Linux personalizzato. Per farlo il metodo più semplice è utilizzare [http://buildroot.uclibc.org Buildroot], un tarball che permette la cross-compilazione di un ambiente Linux completo usando le leggerissime librerie uClibc o musl e l'eseguibile busybox.&lt;br /&gt;
L'ultima versione disponibile e scaricabile da questo [http://buildroot.uclibc.org/downloads/snapshots/buildroot-snapshot.tar.bz2 indirizzo].&lt;br /&gt;
&lt;br /&gt;
Questa procedura è analoga a quella usata per la realizzazione di qualsiasi sistema embedded Linux-based: router, decoder, lettory DVD...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Scompattare il buildroot&lt;br /&gt;
 $ tar -xjvf buildroot-snapshot.tar.bz2&lt;br /&gt;
&lt;br /&gt;
Entrare nella directory principale&lt;br /&gt;
 $ cd buildroot&lt;br /&gt;
&lt;br /&gt;
Configurare il toolchain&lt;br /&gt;
 $ make menuconfig&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Indicare:&lt;br /&gt;
&lt;br /&gt;
architettura di destinazione (i386, i486, i586…)&lt;br /&gt;
&lt;br /&gt;
opzioni di compilazione&lt;br /&gt;
&lt;br /&gt;
versione del kernel da usare&lt;br /&gt;
&lt;br /&gt;
eventuali altri programmi non presenti in busybox (es. dropbear, un client/server ssh)&lt;br /&gt;
&lt;br /&gt;
root filesystem di destinazione&lt;br /&gt;
&lt;br /&gt;
Esistono varie tipologie di filesystem tra cui scegliere, tra queste l'ext2 compresso con bzip2 o lzma.&lt;br /&gt;
Con lzma si ottengono filesystem fino al 20% più piccoli rispetto a quelli compressi con bzip2, ma il sistema  necessiterà di maggiore memoria (RAM) per caricarli.&lt;br /&gt;
&lt;br /&gt;
Se il PC che che avete a disposizione non ha almeno 70-80 MB di RAM è preferibile optare per la compressione con bzip2, se la quantità di memoria non è un problema la compressione con lzma è sicuramente preferibile.&lt;br /&gt;
&lt;br /&gt;
 '''Per poter caricare correttamente il prompt del login è necessario sostituire'''&lt;br /&gt;
 '''ttyS0 con tty1 nelle opzioni di configurazione del getty.'''&lt;br /&gt;
&lt;br /&gt;
Configurare busybox selezionando i programmi che si ritengono necessari&lt;br /&gt;
 $ make busybox-menuconfig&lt;br /&gt;
&lt;br /&gt;
Configurare il kernel per la compilazione&lt;br /&gt;
 $ make linux-menuconfig&lt;br /&gt;
&lt;br /&gt;
Escludere tutto ciò che non è strettamente necessario per risparmiare spazio su disco, quanto segue dovrà essere necessariamente presente per ottenere un sistema minimo avviabile.&lt;br /&gt;
&lt;br /&gt;
Code maturity level-&amp;gt; Prompt for development&lt;br /&gt;
&lt;br /&gt;
Processor type and features-&amp;gt; Support for your processor&lt;br /&gt;
&lt;br /&gt;
General setup-&amp;gt; kernel support for ELF binaries&lt;br /&gt;
&lt;br /&gt;
Block devices-&amp;gt; Normal PC floppy disk support&lt;br /&gt;
&lt;br /&gt;
Block devices-&amp;gt; RAM disk support&lt;br /&gt;
&lt;br /&gt;
File systems-&amp;gt; /proc filesystem, tmpfs, ext2&lt;br /&gt;
&lt;br /&gt;
Character devices-&amp;gt; Virtual terminal&lt;br /&gt;
&lt;br /&gt;
Character devices-&amp;gt; Support for console on virtual terminal&lt;br /&gt;
&lt;br /&gt;
Console drivers-&amp;gt; VGA text console&lt;br /&gt;
&lt;br /&gt;
General setup-&amp;gt; PCI support&lt;br /&gt;
&lt;br /&gt;
I driver delle schede di rete che interessa supportare, iptables se si necessita di un firewall, un driver ide generico per poter montare un hard disk ATA.&lt;br /&gt;
&lt;br /&gt;
Per risparmiare spazio è preferibile comprimere l'immagine del kernel (bzImage) con l'algoritmo di compressione lzma.&lt;br /&gt;
&lt;br /&gt;
Terminata la fase di configurazione si può procedere con la compilazione&lt;br /&gt;
 $ make&lt;br /&gt;
&lt;br /&gt;
Se qualcosa dovesse andare storto normalmente è sufficiente identificare il programma incriminato e vedere se cambiando versione la compilazione va buon fine.&lt;br /&gt;
&lt;br /&gt;
Nella directory buildroot/output/images risiede il prodotto finito.&lt;br /&gt;
Si tratterà di 2 o 3 file: bzImage, rootfs.i486.ext2 e la sua versione compressa rootfs.i486.ext2.lzma.&lt;br /&gt;
Le dimensioni dei file bzImage e rootfs.i486.ext2.lzma devono essere sufficientemente contenute per entrare su un floppy.&lt;br /&gt;
Nel caso fossero solo di poco più grandi (100-200 KB), si può rimediare con la formattazione non standard del floppy: a 1.72 MB invece che a 1.44MB.&lt;br /&gt;
 $ sudo mknod /dev/fd0u1722 b 2 60&lt;br /&gt;
 $ fdformat /dev/fd0u1722&lt;br /&gt;
 $ mkfs.vfat /dev/fd0u1722&lt;br /&gt;
&lt;br /&gt;
Se non presente creare un mount point per il floppy&lt;br /&gt;
 $ sudo mkdir /mnt/floppy&lt;br /&gt;
&lt;br /&gt;
Montare il floppy&lt;br /&gt;
 $ sudo mount /dev/fd0u1722 /mnt/floppy&lt;br /&gt;
&lt;br /&gt;
Copiarvi i due file&lt;br /&gt;
 $ sudo cp buildroot/output/images/bzImage /mnt/floppy&lt;br /&gt;
 $ sudo cp buildroot/output/images/rootfs.i486.ext2.lzma /mnt/floppy&lt;br /&gt;
&lt;br /&gt;
Adesso occorre installare un boot loader sul floppy. Essendo leggero, semplice da usare e supportando la FAT16 si consiglia di usare syslinux.&lt;br /&gt;
&lt;br /&gt;
Se syslinux non fosse presente sul vostro sistema installatelo con:&lt;br /&gt;
&lt;br /&gt;
 $ sudo apt-get install syslinux&lt;br /&gt;
per sistemi Debian-based&lt;br /&gt;
&lt;br /&gt;
O con&lt;br /&gt;
 # pacman -S syslinux&lt;br /&gt;
su Arch Linux&lt;br /&gt;
&lt;br /&gt;
Con un editor di testo (es. nano) create il file di configurazione per il boot loader: syslinux.cfg&lt;br /&gt;
 $ sudo nano /mnt/floppy/syslinux.cfg&lt;br /&gt;
&lt;br /&gt;
Riportate quanto segue, eventualmente adattandolo alle vostre esigenze:&lt;br /&gt;
&lt;br /&gt;
 default start&lt;br /&gt;
 timeout 5&lt;br /&gt;
 prompt 1&lt;br /&gt;
 label start&lt;br /&gt;
 kernel bzImage&lt;br /&gt;
 append initrd=rootfs.i486.ext2.lzma BOOTDEV=fd0 ramdisk_size=16384 vga=0 root=/dev/ram0&lt;br /&gt;
&lt;br /&gt;
Se è stato usato un altro tipo di filesystem sostituire rootfs.i486.ext2.lzma con rootfs.i486.ext2.bz2, rootfs.i486.ext2.squashfs…&lt;br /&gt;
&lt;br /&gt;
Installare il bootloader sul floppy&lt;br /&gt;
 $ sudo syslinux /dev/fd0&lt;br /&gt;
&lt;br /&gt;
Smontare il floppy&lt;br /&gt;
 $ cd&lt;br /&gt;
 $ sudo umount /mnt/floppy&lt;br /&gt;
&lt;br /&gt;
In caso di necessità di modifiche al ramdisk bisognerà copiarlo sul disco fisso, decomprimerlo, montarlo in loop ed effettuare le modifiche in questo modo:&lt;br /&gt;
 $ sudo mount /mnt/floppy&lt;br /&gt;
 $ sudo cp /mnt/floppy/rootfs.i486.ext2.lzma&lt;br /&gt;
 $ sudo lzma -d rootfs.i486.ext2.lzma&lt;br /&gt;
 $ sudo mkdir /mnt/tmp&lt;br /&gt;
 $ sudo mount -o loop rootfs.i486.ext2 /mnt/tmp&lt;br /&gt;
 $ cd /mnt/tmp&lt;br /&gt;
&lt;br /&gt;
Effettuare le modifiche e poi smontare il tutto&lt;br /&gt;
 $ cd&lt;br /&gt;
 $ sudo umount /mnt/tmp&lt;br /&gt;
&lt;br /&gt;
Ricomprimere il ramdisk e copiarlo sul floppy per sostituire quello vecchio&lt;br /&gt;
 $ sudo lzma -c9 rootfs.i486.ext2 &amp;gt; rootfs.i486.ext2.lzma&lt;br /&gt;
 $ sudo cp rootfs.i486.ext2.lzma /mnt/floppy&lt;br /&gt;
 $ sudo umount /mnt/floppy&lt;br /&gt;
&lt;br /&gt;
Un floppy già pronto con le seguenti caratteristiche e presente [http://golem.linux.it/files/spookyh/fspooky_v05.tar.xz qui]&lt;br /&gt;
&lt;br /&gt;
* Linux kernel 3.2.9&lt;br /&gt;
&lt;br /&gt;
* Busybox 1.19.4&lt;br /&gt;
&lt;br /&gt;
* Programmi inclusi: ftpd, ncftp, dropbear (ssh client/server), httpd, iptables, dhcp client/server, nc, wget, fdisk.&lt;br /&gt;
&lt;br /&gt;
* Requisiti minimi: i586 (60 MHz), 74 Mb RAM, floppy driver 3,5&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* Hardware supportato: processori i586 compatibili, Bus PCI (niente ISA), Controller Generic ATA disk; schede di rete Novell NE2000 (e cloni), RealTek 8129, Intel PRO/1000 Gigabit Adapter.&lt;br /&gt;
&lt;br /&gt;
[[Category:howto]]&lt;/div&gt;</summary>
		<author><name>$pooky Hunter</name></author>
	</entry>
	<entry>
		<id>https://wiki.golem.linux.it/index.php?title=Linux_minimale_per_PC_i386/i486&amp;diff=9953</id>
		<title>Linux minimale per PC i386/i486</title>
		<link rel="alternate" type="text/html" href="https://wiki.golem.linux.it/index.php?title=Linux_minimale_per_PC_i386/i486&amp;diff=9953"/>
		<updated>2026-05-14T13:28:49Z</updated>

		<summary type="html">&lt;p&gt;$pooky Hunter: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Esistono decine di distribuzioni Linux leggere, studiate appositamente per girare su hardware obsoleto:&lt;br /&gt;
&lt;br /&gt;
[http://www.damnsmalllinux.org Damn Small], [http://delicate-linux.net/ DeLi(cate) Linux], [http://www.puppylinux.com Puppy], [http://www.slitaz.org SliTaz], [http://www.tinycorelinux.com Tiny Core]&lt;br /&gt;
&lt;br /&gt;
A volte però, quando si tenta di recuperare qualche macchina particolarmente vecchia (magari per trasformarla in router, server web o proxy), anche queste soluzioni possono risultare inadeguate.&lt;br /&gt;
Ecco che possono venire in nostro soccorso delle mini distribuzioni Linux prive di ambiente grafico e talmente compatte da poter essere contenute in un unico floppy.&lt;br /&gt;
&lt;br /&gt;
[http://www.fdlinux.com/download.php Fd Linux], [http://www.zelow.no/floppyfw/ floppyfw], [https://web.archive.org/web/20190312063410/http://chris.silmor.de/hal91/ HAL91], [http://micheleandreoli.org/public/Software/mulinux/ MuLinux], [http://smartlinux.sourceforge.net S.M.A.R.T.], [http://distro.ibiblio.org/polypux/external/smalllinux/ Small Linux], [https://archiveos.org/tomsrtbt/ tomsrtbt], [http://sourceforge.net/projects/trinux/files/ Trinux], [https://web.archive.org/web/20070629142617/http://zoollinux.berlios.de/doku.php Zool]&lt;br /&gt;
&lt;br /&gt;
Soluzioni preconfezionate (come quelle sopra elencate) possono talvolta non rispondere completamente alle nostre esigenze. Spesso hanno kernel datati (2.0, 2.2) o magari mancano proprio dell'applicazione o del driver di cui abbiamo bisogno.&lt;br /&gt;
&lt;br /&gt;
In questi casi l'unica strada percorribile è quella di costruirsi il proprio floppy Linux personalizzato. Per farlo il metodo più semplice è utilizzare [http://buildroot.uclibc.org Buildroot], un tarball che permette la cross-compilazione di un ambiente Linux completo usando le leggerissime librerie uClibc e l'eseguibile busybox.&lt;br /&gt;
L'ultima versione disponibile e scaricabile da questo [http://buildroot.uclibc.org/downloads/snapshots/buildroot-snapshot.tar.bz2 indirizzo].&lt;br /&gt;
&lt;br /&gt;
Questa procedura è analoga a quella usata per la realizzazione di qualsiasi sistema embedded Linux-based: router, decoder, lettory DVD...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Scompattare il buildroot&lt;br /&gt;
 $ tar -xjvf buildroot-snapshot.tar.bz2&lt;br /&gt;
&lt;br /&gt;
Entrare nella directory principale&lt;br /&gt;
 $ cd buildroot&lt;br /&gt;
&lt;br /&gt;
Configurare il toolchain&lt;br /&gt;
 $ make menuconfig&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Indicare:&lt;br /&gt;
&lt;br /&gt;
architettura di destinazione (i386, i486, i586…)&lt;br /&gt;
&lt;br /&gt;
opzioni di compilazione&lt;br /&gt;
&lt;br /&gt;
versione del kernel da usare&lt;br /&gt;
&lt;br /&gt;
eventuali altri programmi non presenti in busybox (es. dropbear, un client/server ssh)&lt;br /&gt;
&lt;br /&gt;
root filesystem di destinazione&lt;br /&gt;
&lt;br /&gt;
Esistono varie tipologie di filesystem tra cui scegliere, tra queste l'ext2 compresso con bzip2 o lzma.&lt;br /&gt;
Con lzma si ottengono filesystem fino al 20% più piccoli rispetto a quelli compressi con bzip2, ma il sistema  necessiterà di maggiore memoria (RAM) per caricarli.&lt;br /&gt;
&lt;br /&gt;
Se il PC che che avete a disposizione non ha almeno 70-80 MB di RAM è preferibile optare per la compressione con bzip2, se la quantità di memoria non è un problema la compressione con lzma è sicuramente preferibile.&lt;br /&gt;
&lt;br /&gt;
 '''Per poter caricare correttamente il prompt del login è necessario sostituire'''&lt;br /&gt;
 '''ttyS0 con tty1 nelle opzioni di configurazione del getty.'''&lt;br /&gt;
&lt;br /&gt;
Configurare busybox selezionando i programmi che si ritengono necessari&lt;br /&gt;
 $ make busybox-menuconfig&lt;br /&gt;
&lt;br /&gt;
Configurare il kernel per la compilazione&lt;br /&gt;
 $ make linux-menuconfig&lt;br /&gt;
&lt;br /&gt;
Escludere tutto ciò che non è strettamente necessario per risparmiare spazio su disco, quanto segue dovrà essere necessariamente presente per ottenere un sistema minimo avviabile.&lt;br /&gt;
&lt;br /&gt;
Code maturity level-&amp;gt; Prompt for development&lt;br /&gt;
&lt;br /&gt;
Processor type and features-&amp;gt; Support for your processor&lt;br /&gt;
&lt;br /&gt;
General setup-&amp;gt; kernel support for ELF binaries&lt;br /&gt;
&lt;br /&gt;
Block devices-&amp;gt; Normal PC floppy disk support&lt;br /&gt;
&lt;br /&gt;
Block devices-&amp;gt; RAM disk support&lt;br /&gt;
&lt;br /&gt;
File systems-&amp;gt; /proc filesystem, tmpfs, ext2&lt;br /&gt;
&lt;br /&gt;
Character devices-&amp;gt; Virtual terminal&lt;br /&gt;
&lt;br /&gt;
Character devices-&amp;gt; Support for console on virtual terminal&lt;br /&gt;
&lt;br /&gt;
Console drivers-&amp;gt; VGA text console&lt;br /&gt;
&lt;br /&gt;
General setup-&amp;gt; PCI support&lt;br /&gt;
&lt;br /&gt;
I driver delle schede di rete che interessa supportare, iptables se si necessita di un firewall, un driver ide generico per poter montare un hard disk ATA.&lt;br /&gt;
&lt;br /&gt;
Per risparmiare spazio è preferibile comprimere l'immagine del kernel (bzImage) con l'algoritmo di compressione lzma.&lt;br /&gt;
&lt;br /&gt;
Terminata la fase di configurazione si può procedere con la compilazione&lt;br /&gt;
 $ make&lt;br /&gt;
&lt;br /&gt;
Se qualcosa dovesse andare storto normalmente è sufficiente identificare il programma incriminato e vedere se cambiando versione la compilazione va buon fine.&lt;br /&gt;
&lt;br /&gt;
Nella directory buildroot/output/images risiede il prodotto finito.&lt;br /&gt;
Si tratterà di 2 o 3 file: bzImage, rootfs.i486.ext2 e la sua versione compressa rootfs.i486.ext2.lzma.&lt;br /&gt;
Le dimensioni dei file bzImage e rootfs.i486.ext2.lzma devono essere sufficientemente contenute per entrare su un floppy.&lt;br /&gt;
Nel caso fossero solo di poco più grandi (100-200 KB), si può rimediare con la formattazione non standard del floppy: a 1.72 MB invece che a 1.44MB.&lt;br /&gt;
 $ sudo mknod /dev/fd0u1722 b 2 60&lt;br /&gt;
 $ fdformat /dev/fd0u1722&lt;br /&gt;
 $ mkfs.vfat /dev/fd0u1722&lt;br /&gt;
&lt;br /&gt;
Se non presente creare un mount point per il floppy&lt;br /&gt;
 $ sudo mkdir /mnt/floppy&lt;br /&gt;
&lt;br /&gt;
Montare il floppy&lt;br /&gt;
 $ sudo mount /dev/fd0u1722 /mnt/floppy&lt;br /&gt;
&lt;br /&gt;
Copiarvi i due file&lt;br /&gt;
 $ sudo cp buildroot/output/images/bzImage /mnt/floppy&lt;br /&gt;
 $ sudo cp buildroot/output/images/rootfs.i486.ext2.lzma /mnt/floppy&lt;br /&gt;
&lt;br /&gt;
Adesso occorre installare un boot loader sul floppy. Essendo leggero, semplice da usare e supportando la FAT16 si consiglia di usare syslinux.&lt;br /&gt;
&lt;br /&gt;
Se syslinux non fosse presente sul vostro sistema installatelo con:&lt;br /&gt;
&lt;br /&gt;
 $ sudo apt-get install syslinux&lt;br /&gt;
per sistemi Debian-based&lt;br /&gt;
&lt;br /&gt;
O con&lt;br /&gt;
 # pacman -S syslinux&lt;br /&gt;
su Arch Linux&lt;br /&gt;
&lt;br /&gt;
Con un editor di testo (es. nano) create il file di configurazione per il boot loader: syslinux.cfg&lt;br /&gt;
 $ sudo nano /mnt/floppy/syslinux.cfg&lt;br /&gt;
&lt;br /&gt;
Riportate quanto segue, eventualmente adattandolo alle vostre esigenze:&lt;br /&gt;
&lt;br /&gt;
 default start&lt;br /&gt;
 timeout 5&lt;br /&gt;
 prompt 1&lt;br /&gt;
 label start&lt;br /&gt;
 kernel bzImage&lt;br /&gt;
 append initrd=rootfs.i486.ext2.lzma BOOTDEV=fd0 ramdisk_size=16384 vga=0 root=/dev/ram0&lt;br /&gt;
&lt;br /&gt;
Se è stato usato un altro tipo di filesystem sostituire rootfs.i486.ext2.lzma con rootfs.i486.ext2.bz2, rootfs.i486.ext2.squashfs…&lt;br /&gt;
&lt;br /&gt;
Installare il bootloader sul floppy&lt;br /&gt;
 $ sudo syslinux /dev/fd0&lt;br /&gt;
&lt;br /&gt;
Smontare il floppy&lt;br /&gt;
 $ cd&lt;br /&gt;
 $ sudo umount /mnt/floppy&lt;br /&gt;
&lt;br /&gt;
In caso di necessità di modifiche al ramdisk bisognerà copiarlo sul disco fisso, decomprimerlo, montarlo in loop ed effettuare le modifiche in questo modo:&lt;br /&gt;
 $ sudo mount /mnt/floppy&lt;br /&gt;
 $ sudo cp /mnt/floppy/rootfs.i486.ext2.lzma&lt;br /&gt;
 $ sudo lzma -d rootfs.i486.ext2.lzma&lt;br /&gt;
 $ sudo mkdir /mnt/tmp&lt;br /&gt;
 $ sudo mount -o loop rootfs.i486.ext2 /mnt/tmp&lt;br /&gt;
 $ cd /mnt/tmp&lt;br /&gt;
&lt;br /&gt;
Effettuare le modifiche e poi smontare il tutto&lt;br /&gt;
 $ cd&lt;br /&gt;
 $ sudo umount /mnt/tmp&lt;br /&gt;
&lt;br /&gt;
Ricomprimere il ramdisk e copiarlo sul floppy per sostituire quello vecchio&lt;br /&gt;
 $ sudo lzma -c9 rootfs.i486.ext2 &amp;gt; rootfs.i486.ext2.lzma&lt;br /&gt;
 $ sudo cp rootfs.i486.ext2.lzma /mnt/floppy&lt;br /&gt;
 $ sudo umount /mnt/floppy&lt;br /&gt;
&lt;br /&gt;
Un floppy già pronto con le seguenti caratteristiche e presente [http://golem.linux.it/files/spookyh/fspooky_v05.tar.xz qui]&lt;br /&gt;
&lt;br /&gt;
* Linux kernel 3.2.9&lt;br /&gt;
&lt;br /&gt;
* Busybox 1.19.4&lt;br /&gt;
&lt;br /&gt;
* Programmi inclusi: ftpd, ncftp, dropbear (ssh client/server), httpd, iptables, dhcp client/server, nc, wget, fdisk.&lt;br /&gt;
&lt;br /&gt;
* Requisiti minimi: i586 (60 MHz), 74 Mb RAM, floppy driver 3,5&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* Hardware supportato: processori i586 compatibili, Bus PCI (niente ISA), Controller Generic ATA disk; schede di rete Novell NE2000 (e cloni), RealTek 8129, Intel PRO/1000 Gigabit Adapter.&lt;br /&gt;
&lt;br /&gt;
[[Category:howto]]&lt;/div&gt;</summary>
		<author><name>$pooky Hunter</name></author>
	</entry>
	<entry>
		<id>https://wiki.golem.linux.it/index.php?title=Howto&amp;diff=9811</id>
		<title>Howto</title>
		<link rel="alternate" type="text/html" href="https://wiki.golem.linux.it/index.php?title=Howto&amp;diff=9811"/>
		<updated>2026-03-31T22:44:49Z</updated>

		<summary type="html">&lt;p&gt;$pooky Hunter: /* Howto vecchi o da rivedere */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Tutti gli Howto sono visibili nella [[:Category:Howto | categoria dedicata]].&lt;br /&gt;
== Howto attuali ==&lt;br /&gt;
{|&lt;br /&gt;
|&lt;br /&gt;
=== Per le macchine dell'Officina ===&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
    _  _____ _____ _____ _   _ ________ ___  _   _ _____ &lt;br /&gt;
   / \|_   _|_   _| ____| \ | |__  /_ _/ _ \| \ | | ____|&lt;br /&gt;
  / _ \ | |   | | |  _| |  \| | / / | | | | |  \| |  _|  &lt;br /&gt;
 / ___ \| |   | | | |___| |\  |/ /_ | | |_| | |\  | |___ &lt;br /&gt;
/_/   \_\_|   |_| |_____|_| \_/____|___\___/|_| \_|_____|&lt;br /&gt;
                                                         &lt;br /&gt;
        Per favore rispettare l'ordine alfabetico!&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
; [[Android_USB_tethering | Android USB tethering]]&lt;br /&gt;
; [[A10-OLinuXino-LIME]]&lt;br /&gt;
; [[apt-cacher|Apt-Cacher]]&lt;br /&gt;
; [[Boot loader | Ripristino del Boot Loader]]&lt;br /&gt;
; [[Btrfs]]&lt;br /&gt;
; [[Condividere_connessione|Condividere la connessione]]&lt;br /&gt;
; [[Docker]]&lt;br /&gt;
; [[File img]]&lt;br /&gt;
; [[Floppy_Linux|Floppy Linux]]&lt;br /&gt;
; [[GOLEM Dolly 2014 | GOLEM Dolly]]&lt;br /&gt;
; [[GPG_Gnu_Privacy_Guard|GPG]]&lt;br /&gt;
; [[Installare_Arch_Linux_in_una_partizione_cifrata | Partizione cifrata su Arch Linux]]&lt;br /&gt;
; [[Netcat]]&lt;br /&gt;
; [[Pillole hardware]]&lt;br /&gt;
; [[PXE|PXE (Boot da Rete)]]&lt;br /&gt;
; [[RAID | Restore RAID 1]]&lt;br /&gt;
; [[Rete del GOLEM]]&lt;br /&gt;
; [[Ricompilazione Kernel]] Prontuario veloce  &lt;br /&gt;
; [[Ricompilazione Kernel per Niubbi]]&lt;br /&gt;
; [[Riconoscere il materiale]]&lt;br /&gt;
; [[Ubuntu e privacy]]&lt;br /&gt;
; [[UEFI e GPT]]&lt;br /&gt;
; [[VPN del GOLEM]]&lt;br /&gt;
; [[Installare Arch Linux su ZFS|ZFS su Arch Linux]]&lt;br /&gt;
|&lt;br /&gt;
=== Altre guide ===&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
    _  _____ _____ _____ _   _ ________ ___  _   _ _____ &lt;br /&gt;
   / \|_   _|_   _| ____| \ | |__  /_ _/ _ \| \ | | ____|&lt;br /&gt;
  / _ \ | |   | | |  _| |  \| | / / | | | | |  \| |  _|  &lt;br /&gt;
 / ___ \| |   | | | |___| |\  |/ /_ | | |_| | |\  | |___ &lt;br /&gt;
/_/   \_\_|   |_| |_____|_| \_/____|___\___/|_| \_|_____|&lt;br /&gt;
                                                         &lt;br /&gt;
        Per favore rispettare l'ordine alfabetico!&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
; [[Arduino_ed_Internet | Arduino ed Internet]]&lt;br /&gt;
; [[Biscotti_open_source | Biscotti Open Source]]&lt;br /&gt;
; [[Conversioni_video|Convertire Video]]&lt;br /&gt;
; [[Installare Debian GNU/Linux su NAS Intel SS4000-E ARM e cloni|Debian su NAS arm]]&lt;br /&gt;
; [[Filesystem esotici]]&lt;br /&gt;
; [[FreeDOS Networking]]&lt;br /&gt;
; [[IPv6_@_GOLEM | IPv6]]&lt;br /&gt;
; [[KDE5_file_template | Modello di file personalizzato su KDE5]]&lt;br /&gt;
; [[Minidlna]] (file sharing in rete locale)&lt;br /&gt;
; [[MySQL]]&lt;br /&gt;
; [[Motion | Videosorveglianza casalinga]]&lt;br /&gt;
; [[OpenBSD]]&lt;br /&gt;
; [[Connessioni_alternative | PLIP]]&lt;br /&gt;
; [[PDF Batch]]&lt;br /&gt;
; [[Pkgsrc_su_Slackware | pkgsrc su Slackware]]&lt;br /&gt;
; [[Postfix Relay]]&lt;br /&gt;
; [[QGIS]]&lt;br /&gt;
; [[Resize Immagini | Manipolazione Immagini (ImageMagick)]]&lt;br /&gt;
; [[Storia dei sistemi UNIX]]&lt;br /&gt;
; [[Telegram]]&lt;br /&gt;
; [[Tor]]&lt;br /&gt;
; [[VLAN]]&lt;br /&gt;
; [[Wordpress]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Howto vecchi o da rivedere ==&lt;br /&gt;
&lt;br /&gt;
; [[Appunti Arch Linux]]&lt;br /&gt;
; [[Appunti NixOS]]&lt;br /&gt;
; [[Copiare floppy]]&lt;br /&gt;
; [[Webcam | Creative Live! Cam Vista IM]]&lt;br /&gt;
; [[Device_rete|Fissare device name per schede di rete]]&lt;br /&gt;
; [[Estrarre_audio_da_dvd|Estrarre audio da DVD]]&lt;br /&gt;
; [[Net-HOWTO | GOLEM Networking Howto]]&lt;br /&gt;
; [[The_Gimp_come_tradurre_Script-Fu|Gimp, tradurre Script-Fu]]&lt;br /&gt;
; [[Linea_di_comando|Linea di comando]]&lt;br /&gt;
; [[Reti Alternative | Reti Alternative]]&lt;br /&gt;
; [[Ricevitore GPS]]&lt;br /&gt;
; [[LibreofficeRubrica | Rubrica su Libreoffice]]&lt;br /&gt;
; [[Vodafone_Station_2_AP|Vodafone Station 2 come Access Point]]&lt;br /&gt;
&lt;br /&gt;
[[Category:howto]]&lt;/div&gt;</summary>
		<author><name>$pooky Hunter</name></author>
	</entry>
	<entry>
		<id>https://wiki.golem.linux.it/index.php?title=Howto&amp;diff=9810</id>
		<title>Howto</title>
		<link rel="alternate" type="text/html" href="https://wiki.golem.linux.it/index.php?title=Howto&amp;diff=9810"/>
		<updated>2026-03-31T22:44:25Z</updated>

		<summary type="html">&lt;p&gt;$pooky Hunter: /* Howto attuali */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Tutti gli Howto sono visibili nella [[:Category:Howto | categoria dedicata]].&lt;br /&gt;
== Howto attuali ==&lt;br /&gt;
{|&lt;br /&gt;
|&lt;br /&gt;
=== Per le macchine dell'Officina ===&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
    _  _____ _____ _____ _   _ ________ ___  _   _ _____ &lt;br /&gt;
   / \|_   _|_   _| ____| \ | |__  /_ _/ _ \| \ | | ____|&lt;br /&gt;
  / _ \ | |   | | |  _| |  \| | / / | | | | |  \| |  _|  &lt;br /&gt;
 / ___ \| |   | | | |___| |\  |/ /_ | | |_| | |\  | |___ &lt;br /&gt;
/_/   \_\_|   |_| |_____|_| \_/____|___\___/|_| \_|_____|&lt;br /&gt;
                                                         &lt;br /&gt;
        Per favore rispettare l'ordine alfabetico!&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
; [[Android_USB_tethering | Android USB tethering]]&lt;br /&gt;
; [[A10-OLinuXino-LIME]]&lt;br /&gt;
; [[apt-cacher|Apt-Cacher]]&lt;br /&gt;
; [[Boot loader | Ripristino del Boot Loader]]&lt;br /&gt;
; [[Btrfs]]&lt;br /&gt;
; [[Condividere_connessione|Condividere la connessione]]&lt;br /&gt;
; [[Docker]]&lt;br /&gt;
; [[File img]]&lt;br /&gt;
; [[Floppy_Linux|Floppy Linux]]&lt;br /&gt;
; [[GOLEM Dolly 2014 | GOLEM Dolly]]&lt;br /&gt;
; [[GPG_Gnu_Privacy_Guard|GPG]]&lt;br /&gt;
; [[Installare_Arch_Linux_in_una_partizione_cifrata | Partizione cifrata su Arch Linux]]&lt;br /&gt;
; [[Netcat]]&lt;br /&gt;
; [[Pillole hardware]]&lt;br /&gt;
; [[PXE|PXE (Boot da Rete)]]&lt;br /&gt;
; [[RAID | Restore RAID 1]]&lt;br /&gt;
; [[Rete del GOLEM]]&lt;br /&gt;
; [[Ricompilazione Kernel]] Prontuario veloce  &lt;br /&gt;
; [[Ricompilazione Kernel per Niubbi]]&lt;br /&gt;
; [[Riconoscere il materiale]]&lt;br /&gt;
; [[Ubuntu e privacy]]&lt;br /&gt;
; [[UEFI e GPT]]&lt;br /&gt;
; [[VPN del GOLEM]]&lt;br /&gt;
; [[Installare Arch Linux su ZFS|ZFS su Arch Linux]]&lt;br /&gt;
|&lt;br /&gt;
=== Altre guide ===&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
    _  _____ _____ _____ _   _ ________ ___  _   _ _____ &lt;br /&gt;
   / \|_   _|_   _| ____| \ | |__  /_ _/ _ \| \ | | ____|&lt;br /&gt;
  / _ \ | |   | | |  _| |  \| | / / | | | | |  \| |  _|  &lt;br /&gt;
 / ___ \| |   | | | |___| |\  |/ /_ | | |_| | |\  | |___ &lt;br /&gt;
/_/   \_\_|   |_| |_____|_| \_/____|___\___/|_| \_|_____|&lt;br /&gt;
                                                         &lt;br /&gt;
        Per favore rispettare l'ordine alfabetico!&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
; [[Arduino_ed_Internet | Arduino ed Internet]]&lt;br /&gt;
; [[Biscotti_open_source | Biscotti Open Source]]&lt;br /&gt;
; [[Conversioni_video|Convertire Video]]&lt;br /&gt;
; [[Installare Debian GNU/Linux su NAS Intel SS4000-E ARM e cloni|Debian su NAS arm]]&lt;br /&gt;
; [[Filesystem esotici]]&lt;br /&gt;
; [[FreeDOS Networking]]&lt;br /&gt;
; [[IPv6_@_GOLEM | IPv6]]&lt;br /&gt;
; [[KDE5_file_template | Modello di file personalizzato su KDE5]]&lt;br /&gt;
; [[Minidlna]] (file sharing in rete locale)&lt;br /&gt;
; [[MySQL]]&lt;br /&gt;
; [[Motion | Videosorveglianza casalinga]]&lt;br /&gt;
; [[OpenBSD]]&lt;br /&gt;
; [[Connessioni_alternative | PLIP]]&lt;br /&gt;
; [[PDF Batch]]&lt;br /&gt;
; [[Pkgsrc_su_Slackware | pkgsrc su Slackware]]&lt;br /&gt;
; [[Postfix Relay]]&lt;br /&gt;
; [[QGIS]]&lt;br /&gt;
; [[Resize Immagini | Manipolazione Immagini (ImageMagick)]]&lt;br /&gt;
; [[Storia dei sistemi UNIX]]&lt;br /&gt;
; [[Telegram]]&lt;br /&gt;
; [[Tor]]&lt;br /&gt;
; [[VLAN]]&lt;br /&gt;
; [[Wordpress]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Howto vecchi o da rivedere ==&lt;br /&gt;
&lt;br /&gt;
; [[Appunti Arch Linux]]&lt;br /&gt;
; [[Appunti NixOS]]&lt;br /&gt;
; [[Copiare floppy]]&lt;br /&gt;
; [[Webcam | Creative Live! Cam Vista IM]]&lt;br /&gt;
; [[Device_rete|Fissare device name per schede di rete]]&lt;br /&gt;
; [[Estrarre_audio_da_dvd|Estrarre audio da DVD]]&lt;br /&gt;
; [[Net-HOWTO | GOLEM Networking Howto]]&lt;br /&gt;
; [[The_Gimp_come_tradurre_Script-Fu|Gimp, tradurre Script-Fu]]&lt;br /&gt;
; [[Linea_di_comando|Linea di comando]]&lt;br /&gt;
; [[Ricevitore GPS]]&lt;br /&gt;
; [[LibreofficeRubrica | Rubrica su Libreoffice]]&lt;br /&gt;
; [[Vodafone_Station_2_AP|Vodafone Station 2 come Access Point]]&lt;br /&gt;
&lt;br /&gt;
[[Category:howto]]&lt;/div&gt;</summary>
		<author><name>$pooky Hunter</name></author>
	</entry>
	<entry>
		<id>https://wiki.golem.linux.it/index.php?title=Carta_Nazionale_dei_Servizi_e_Firma_Digitale&amp;diff=9763</id>
		<title>Carta Nazionale dei Servizi e Firma Digitale</title>
		<link rel="alternate" type="text/html" href="https://wiki.golem.linux.it/index.php?title=Carta_Nazionale_dei_Servizi_e_Firma_Digitale&amp;diff=9763"/>
		<updated>2026-02-06T19:16:39Z</updated>

		<summary type="html">&lt;p&gt;$pooky Hunter: /* Debian/Ubuntu/Mint */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Questa pagina ha lo scopo di fare chiarezza sul &amp;quot;mondo&amp;quot; delle '''smartcard''' con microchip crittografico, delle funzioni che tramite esse vengono veicolate e del loro utilizzo con Linux.&lt;br /&gt;
&lt;br /&gt;
= CNS =&lt;br /&gt;
&lt;br /&gt;
Una smartcard si definisce [http://www.digitpa.gov.it/carta-nazionale-dei-servizi «Carta Nazionale dei Servizi»] quando ha a bordo del suo microchip un certificato utile per l'autenticazione online, strutturato secondo quanto richiesto [http://www.digitpa.gov.it/node/689 dalla legge italiana].&lt;br /&gt;
&lt;br /&gt;
Anche la '''CIE''' «Carta d'Identità Elettronica», la «tessera sanitaria regionale» '''TS''' e le carte regionali dei servizi '''CRS''' sono a tutti gli effetti CNS.&lt;br /&gt;
&lt;br /&gt;
Sono strumenti di riconoscimento online d'identità e possono essere utilizzate anche per [http://www.digitpa.gov.it/firme-elettroniche-certificatori Firma Digitale] '''FD'''.&lt;br /&gt;
&lt;br /&gt;
La smartcard è quindi l'oggetto fisico. Può contenere '''soltanto''' la funzionalità CNS, '''soltanto''' la funzionalità FD o '''entrambe''', oppure '''nessuna''' (come nel caso delle tessere sanitarie con microchip appena giunte al cittadino e non ancora &amp;quot;attivate&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
Per ulteriori approfondimenti è possibile consultare [https://golem.linux.it/cloud/index.php/s/fCLGQzyRBpKfN45 Strumenti di Cittadinanza digitale] a cura di Giulia del GOLEM.&lt;br /&gt;
&lt;br /&gt;
=Produttori di smartcard=&lt;br /&gt;
&lt;br /&gt;
I produttori di smartcard (o meglio di microchip) dovrebbero rispettare lo standard [http://www.rsa.com/rsalabs/node.asp?id=2141 pkcs#15], ma non sempre lo fanno. Per questo abbiamo bisogno di driver specifici (spesso binari e non-Liberi).&lt;br /&gt;
&lt;br /&gt;
==Athena==&lt;br /&gt;
&lt;br /&gt;
Smartcard fra le più diffuse (CRS Lombardia, TS Toscana, TS Sardegna, ArubaPEC), sono del produttore [http://www.athena-scs.com/ Athena] è possibile scaricare i driver binari dal sito [http://www.pec.it/Download.aspx Aruba].&lt;br /&gt;
&lt;br /&gt;
==Incard==&lt;br /&gt;
&lt;br /&gt;
Alcune smartcard utilizzate in Italia (Camere di Commercio, Infocert, ArubaPEC) sono del produttore [http://www.incard.it/ Incard]. I driver di queste smartcard sembrano essere sviluppati da Bit4id e sono rilasciati gratuitamente, ma non-Liberi, in formato binario su [https://www.pec.it/download-software-driver.aspx Aruba]. &lt;br /&gt;
&lt;br /&gt;
==Oberthur==&lt;br /&gt;
&lt;br /&gt;
Le smartcard [http://www.oberthur.com/ Oberthur] sono utilizzate per la firma digitale da [https://www.pec.it ArubaPEC], molti ordini professionali emettono per i loro associati smartcard di questo produttore. Utilizzano il medesimo driver di Incard scaricabile su [https://www.pec.it/download-software-driver.aspx Aruba]&lt;br /&gt;
&lt;br /&gt;
==Siemens==&lt;br /&gt;
&lt;br /&gt;
Molto usate in passato dalle Camere di Commercio e adesso dalla [http://www.regione.liguria.it/argomenti/diritti-e-doveri-del-cittadino/carta-regionale-dei-servizi.html CRS ligure], le smartcard Siemens richiedono il software [http://supportcrs.fascicolo-sanitario.it/modulistica/ CardOS]. &lt;br /&gt;
&lt;br /&gt;
==Vecchie smartcard==&lt;br /&gt;
&lt;br /&gt;
Un bell'elenco, storico, molto dettagliato, di microchip e dei relativi produttori si trova nella [https://www.firma.infocert.it/pdf/CARD_1.pdf documentazione Infocert]. Sysgillo, InCrypto, Siemens... le vecchie firme digitali delle Camere di Commercio.&lt;br /&gt;
&lt;br /&gt;
=Lettori di smartcard=&lt;br /&gt;
&lt;br /&gt;
Chi produce i lettori spesso rispetta lo standard [http://www.rsa.com/rsalabs/node.asp?id=2133 pkcs#11], quindi i lettori più nuovi dovrebbero risultare compatibili con Linux.&lt;br /&gt;
&lt;br /&gt;
I seguenti lettori di smartcard sono stati testati e funzionano con Linux&lt;br /&gt;
&lt;br /&gt;
==Bit4id==&lt;br /&gt;
[https://support.bit4id.com/#!/it/product/miniLector_Piano miniLector Piano] di Bit4id: funziona.&lt;br /&gt;
&lt;br /&gt;
==Manhattan==&lt;br /&gt;
[http://www.manhattan-products.com/en-US/products/5605-smart-card-reader Manhattan]&lt;br /&gt;
&lt;br /&gt;
Lo vende (per esempio) [http://www.icintracom.biz/lettore-di-smart-card-usb-esterno-1822.html icintracom]: funziona.&lt;br /&gt;
&lt;br /&gt;
Sembra lo stesso lettore che vende anche [http://www.digicom.it/digisit/prodotti.nsf/ITProdottiIDX/SmartCardReader Digicom]. Visto da Trony a 17,99 euro (settembre 2012). Logo Linux sull'esterno della scatola.&lt;br /&gt;
&lt;br /&gt;
==Hamlet==&lt;br /&gt;
[http://www.hamletcom.com/products/huscr2.aspx Hamlet]: funziona.&lt;br /&gt;
&lt;br /&gt;
==Gemalto==&lt;br /&gt;
&lt;br /&gt;
Lettori di smartcard [http://www.gemalto.com/products/pc_link_readers/ IDBridge CT family]. Secondo [http://www.programmiamoinsieme.eu/blog/2012/02/11/firma-digitale-con-smart-card-cns-su-linux/ Ludo] funzionano.&lt;br /&gt;
&lt;br /&gt;
Dal [http://support.gemalto.com/index.php?id=download_driver_pc-link_readers sito web] di Gemalto, sia per i lettori [http://support.gemalto.com/index.php?id=pc_usb_sl PC USB SL], sia per quelli [http://support.gemalto.com/index.php?id=pc_usb_tr_and_pc_twin PC USB TR e PC TWIN] si hanno buone notizie per quanto riguarda Linux: &lt;br /&gt;
&lt;br /&gt;
''«This USB CCID device is supported by the '''libccid''' library. This library provides a PC/SC IFD handler implementation for the USB smart card interface devices compliant to the CCID protocol. Gemalto '''is actively involved''' in the development and improvement of this library. This library is packaged and distributed by most of the Linux distributions. TIPS: Use the package manager from your specific Linux distribution to search for the libccid library and install it. The libccid source code is available on the following web site: [http://pcsclite.alioth.debian.org/ccid.html Alioth].»''&lt;br /&gt;
&lt;br /&gt;
==ASEDrive - Athena==&lt;br /&gt;
&lt;br /&gt;
Athena produce non soltanto le smartcard, ma anche i lettori [https://www.partnerdata.it/athena/ ASEDrive]: dovrebbero funzionare.&lt;br /&gt;
&lt;br /&gt;
=Firma digitale FD=&lt;br /&gt;
&lt;br /&gt;
Supponendo di avere fatto bene tutte le configurazioni utili per i lettori e anche per la smartcard in nostro possesso, possiamo provare a firmare con un software di firma. Ce ne sono pochi di Liberi (o Open Source), molti sono a pagamento, alcuni sono non-Liberi ma gratuiti.&lt;br /&gt;
&lt;br /&gt;
==Aruba Sign==&lt;br /&gt;
Il miglior software multi-piattaforma disponibile è probabilmente [https://www.pec.it/download-software-driver.aspx Aruba Sign].&lt;br /&gt;
Prodotto da Aruba, gratuito ma non libero, è scritto in Java e disponibile per Windows, MacOS X e Linux.&lt;br /&gt;
Permette di firmare documenti, apporre marcature temporali ed ulteriori operazioni come la modifica del PIN di una CNS.&lt;br /&gt;
Affinché riconosca correttamente il proprio lettore è necessario inserire il percorso del driver nella sezione Opzioni e Parametri, es. su Arch Linux con lettore Bit4id: /usr/lib/bit4id/libbit4xpki.so&lt;br /&gt;
&lt;br /&gt;
==Marcatura temporale - Timestamp==&lt;br /&gt;
&lt;br /&gt;
Una marcatura temporale si può apporre con File Protector. Quello di marcatura temporale è un servizio che viene fornito, tramite un server, da una [http://en.wikipedia.org/wiki/Trusted_timestamping#Trusted_.28digital.29_timestamping TSA] Time Stamping Authority (per dirla in modo grossolano un server terzo firma col suo certificato l'[http://it.wikipedia.org/wiki/Secure_Hash_Algorithm impronta] del nostro file dopo averci aggiunto data e ora).&lt;br /&gt;
&lt;br /&gt;
Le marcature devono essere acquistate (per esempio su [http://www.pec.it/MarcheTemporali.aspx pec.it]).&lt;br /&gt;
&lt;br /&gt;
=== FreeSigner ===&lt;br /&gt;
&lt;br /&gt;
Basato su [http://j4sign.sourceforge.net/ j4sign], è un programma che permette di effettuare e verificare firme digitali. E' multipiattaforma ed è possibile scaricarlo a [https://de.osdn.net/projects/sfnet_j4sign/downloads/freesigner/freesigner-0.3.4/freesigner-0.3.4-setup.jar questo indirizzo]. Supporta i più recenti standard normativi di firma CADeS e la maggior parte delle smartcard compatibili con lo standard PKCS#11 e Linux.&lt;br /&gt;
&lt;br /&gt;
=Tessera Sanitaria=&lt;br /&gt;
&lt;br /&gt;
La cosiddetta [http://www.sistemats.it/ Tessera Sanitaria] non è altro che una Carta Nazionale dei Servizi.&lt;br /&gt;
&lt;br /&gt;
Le prime tessere sanitarie non avevano il microchip, servivano soltanto perché funzionavano da codice fiscale (che poteva essere letto in automatico dal codice a barre stampato su di esse).&lt;br /&gt;
&lt;br /&gt;
=== Tipologie ===&lt;br /&gt;
&lt;br /&gt;
[[File:Tessera_sanitaria.jpeg]]&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| Sigla&lt;br /&gt;
| Tipologia Carta&lt;br /&gt;
| Linux&lt;br /&gt;
| Driver&lt;br /&gt;
|-&lt;br /&gt;
| AT 2012&lt;br /&gt;
| Siemens / ATOS&lt;br /&gt;
| OK&lt;br /&gt;
| OpenSC, [https://www.regione.toscana.it/-/area-download Proprietario]&lt;br /&gt;
|-&lt;br /&gt;
| AC 2013, 2014, 2018&lt;br /&gt;
| Actalis&lt;br /&gt;
| OK&lt;br /&gt;
| OpenSC, [https://sistemats1.sanita.finanze.it/portale/elenco-driver-cittadini-modalita-accesso Proprietario]&lt;br /&gt;
|-&lt;br /&gt;
| ACx 2021&lt;br /&gt;
| Actalis&lt;br /&gt;
| OK&lt;br /&gt;
| [https://sistemats1.sanita.finanze.it/portale/elenco-driver-cittadini-modalita-accesso Proprietario]&lt;br /&gt;
|-&lt;br /&gt;
| ACe 2021&lt;br /&gt;
| Actalis&lt;br /&gt;
| OK&lt;br /&gt;
| [https://sistemats1.sanita.finanze.it/portale/elenco-driver-cittadini-modalita-accesso Proprietario]&lt;br /&gt;
|-&lt;br /&gt;
| OT 2015, 2016&lt;br /&gt;
| OBERTHUR&lt;br /&gt;
| OK&lt;br /&gt;
| OpsnSC, [https://sistemats1.sanita.finanze.it/portale/elenco-driver-cittadini-modalita-accesso Proprietario]&lt;br /&gt;
|-&lt;br /&gt;
| ID 2019&lt;br /&gt;
| IDEMIA&lt;br /&gt;
| OK&lt;br /&gt;
| [https://sistemats1.sanita.finanze.it/portale/elenco-driver-cittadini-modalita-accesso Proprietario]&lt;br /&gt;
|-&lt;br /&gt;
| ST 2021&lt;br /&gt;
| STMICROELECTRONICS&lt;br /&gt;
| OK&lt;br /&gt;
| [https://sistemats1.sanita.finanze.it/portale/elenco-driver-cittadini-modalita-accesso Proprietario]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Nel caso la vostra carta non fosse supportata da questi driver provate: [https://sistemats4.sanita.finanze.it/CardDriverDownloaderWeb/pages/home.xhtml Ricerca], [https://www.cartaidentita.interno.gov.it/fornitori-di-servizi/documentazione-middleware-cie/ CIE], [https://www.firma.infocert.it/installazione/ Infocert].&lt;br /&gt;
&lt;br /&gt;
==Portali Regionali==&lt;br /&gt;
&lt;br /&gt;
* Tessera Sanitaria e Carta Provinciale dei Servizi della [http://www.provincia.bz.it/cartaservizi/ Provincia Autonoma di Bolzano]&lt;br /&gt;
&lt;br /&gt;
* La [http://www.regione.calabria.it/sanita/index.php?option=com_content&amp;amp;task=view&amp;amp;id=405&amp;amp;Itemid=100 Regione Calabria]&lt;br /&gt;
&lt;br /&gt;
* Carta dei Servizi del [http://cartaservizi.regione.fvg.it/ Friuli Venezia Giulia]&lt;br /&gt;
&lt;br /&gt;
* Carta regionale dei Servizi [http://www.regione.liguria.it/argomenti/diritti-e-doveri-del-cittadino/carta-regionale-dei-servizi.html Regione Liguria]&lt;br /&gt;
&lt;br /&gt;
* Carta Regionale dei Servizi [http://www.crs.regione.lombardia.it/ Regione Lombardia]&lt;br /&gt;
&lt;br /&gt;
* Tessera Sanitaria [http://www.regione.toscana.it/cartasanitaria Regione Toscana] [http://www.regione.toscana.it/servizi-online/servizi-sicuri/carta-sanitaria-elettronica/guida-all-uso Guida all'uso] Lettore di smartcard a [https://www.regione.toscana.it/servizi-online/servizi-sicuri/carta-sanitaria-elettronica/lettore-smart-card 4,20 euro]&lt;br /&gt;
&lt;br /&gt;
* Tessera Sanitaria [https://tscns.regione.sardegna.it/articoli/linux Regione Sardegna]&lt;br /&gt;
&lt;br /&gt;
* Tessera Sanitaria e Carta Provinciale dei Servizi [http://www.cartaservizi.provincia.tn.it/ Provincia Autonoma di Trento].&lt;br /&gt;
&lt;br /&gt;
=Carta d'Identità Elettronica =&lt;br /&gt;
&lt;br /&gt;
La CIE è una CNS identica alle altre. I driver proprietari per le varie piattaforme sono scaricabili [https://www.cartaidentita.interno.gov.it/fornitori-di-servizi/documentazione-middleware-cie/ qui].&lt;br /&gt;
&lt;br /&gt;
= Installazione SmartCard su Linux =&lt;br /&gt;
== Distribuzioni ==&lt;br /&gt;
=== Debian/Ubuntu/Mint ===&lt;br /&gt;
Installare i seguenti pacchetti&lt;br /&gt;
 # apt install pcsc-tools pcscd opensc opensc-pkcs11&lt;br /&gt;
&lt;br /&gt;
Il demone &amp;lt;code&amp;gt;pcscd&amp;lt;/code&amp;gt; si avvierà automaticamente.&lt;br /&gt;
&lt;br /&gt;
Le carte ACx 2021 non sono supportate da OpenSC, per poterle utilizzare occorrerà scaricare ed installare manualmente il pacchetto  &lt;br /&gt;
* [https://swdownload1.agenziaentrate.gov.it/pub/sanita/libbit4xpki-idemia-amd64.1.4.10-647.deb libbit4xpki-idemia-amd64.1.4.10-647.deb]&lt;br /&gt;
&lt;br /&gt;
Per le nuove carte ACx, ACe ed ACj 2025 occorre invece il pacchetto:&lt;br /&gt;
* [https://swdownload1.agenziaentrate.gov.it/pub/sanita/Cyberneid-Middleware_1.3.8.10_all.deb Cyberneid-Middleware_1.3.8.10_all.deb]&lt;br /&gt;
&lt;br /&gt;
=== Arch Linux ===&lt;br /&gt;
Installare i seguenti pacchetti, utili solo per smartcard del produttore Athena (libaseCnsP11)&lt;br /&gt;
 # pacman -Sy ccid pcsclite pcsc-tools opensc&lt;br /&gt;
&lt;br /&gt;
Abilitare e avviare pcscd&lt;br /&gt;
 # systemctl enable pcscd.socket&lt;br /&gt;
 # systemctl start pcscd.socket&lt;br /&gt;
&lt;br /&gt;
Alcune recenti tessere sanitarie non sono ancora supportate da OpenSC, sarà necessario scaricare e compilare manualmente il pacchetto&lt;br /&gt;
* [https://spookyh.altervista.org/altro/bit4id-xpki.tar.gz bit4id-xpki.tar.gz].&lt;br /&gt;
&lt;br /&gt;
=== NixOS ===&lt;br /&gt;
Aggiungere i seguenti pacchetti al file &amp;lt;code&amp;gt;/etc/nixos/configuration.nix&amp;lt;/code&amp;gt; nella sezione ''environment.systemPackages = with pkgs;''&lt;br /&gt;
 pcsclite opensc openssl pcsctools ccid usbutils acsccid &lt;br /&gt;
&lt;br /&gt;
Abilitare demone per la gestione delle smartcard aggiungendo la riga seguente al &amp;lt;code&amp;gt;configuration.nix&amp;lt;/code&amp;gt;&lt;br /&gt;
  services.pcscd.enable = true;&lt;br /&gt;
&lt;br /&gt;
Effettuare il rebuild del sistema e riavviare&lt;br /&gt;
 # nixos-rebuild switch&lt;br /&gt;
&lt;br /&gt;
Alcune recenti tessere sanitarie non sono ancora supportate da OpenSC, per farlo create il file &amp;lt;code&amp;gt;[https://github.com/spookyh83/nixpkgs/blob/spookix/pkgs/misc/drivers/bit4id-xpki/default.nix /etc/nixos/cns_ita_new.nix]&amp;lt;/code&amp;gt;&lt;br /&gt;
 { lib, stdenv, fetchurl, dpkg, pcsclite, opensc, pcsctools, ccid }:&lt;br /&gt;
 stdenv.mkDerivation rec {&lt;br /&gt;
  name = &amp;quot;bit4xpki&amp;quot;;&lt;br /&gt;
  src = fetchurl {&lt;br /&gt;
    url = &amp;quot;https://swdownload1.agenziaentrate.gov.it/pub/sanita/libbit4xpki-idemia-amd64.1.4.10-622.deb&amp;quot;;&lt;br /&gt;
    sha256 = &amp;quot;1mq6xng97d5s94h84p1clsnh56g245xcr1pbjm3ryjf43w7jlqlx&amp;quot;;&lt;br /&gt;
  };&lt;br /&gt;
  unpackPhase = &amp;quot;dpkg-deb -x $src $out&amp;quot;;&lt;br /&gt;
  meta = with lib; {&lt;br /&gt;
    description = &amp;quot;Libraries for the XPKI client used by the Italian CNS.&amp;quot;;&lt;br /&gt;
    homepage = &amp;quot;https://sistemats1.sanita.finanze.it/portale/elenco-driver-cittadini-modalita-accesso&amp;quot;;&lt;br /&gt;
    platforms = [ &amp;quot;x86_64-linux&amp;quot; ];&lt;br /&gt;
    license = licenses.unfree;&lt;br /&gt;
  };&lt;br /&gt;
    buildInputs = [ dpkg ];&lt;br /&gt;
    shellHook = ''&lt;br /&gt;
    export PATH=&amp;quot;${dpkg}/bin:$PATH&amp;quot;&lt;br /&gt;
  '';&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Aggiungere una riga tra le import di &amp;lt;code&amp;gt;/etc/nixos/configuration.nix&amp;lt;/code&amp;gt;&lt;br /&gt;
 {&lt;br /&gt;
  imports =&lt;br /&gt;
    [ # Include the results of the hardware scan.&lt;br /&gt;
      ./hardware-configuration.nix&lt;br /&gt;
      ./bit4id.nix   #'''File nella directory /etc/nixos per caricare il driver &lt;br /&gt;
     ];&lt;br /&gt;
&lt;br /&gt;
Creare il file &amp;lt;code&amp;gt;/etc/nixos/bit4id.nix&amp;lt;/code&amp;gt;&lt;br /&gt;
 { config, pkgs, ... }:&lt;br /&gt;
 let&lt;br /&gt;
  bit4id = pkgs.callPackage /etc/nixos/cns_ita_new.nix {};&lt;br /&gt;
 in&lt;br /&gt;
 {&lt;br /&gt;
  environment.systemPackages = [ bit4id ];&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Effettuare il rebuild del sistema&lt;br /&gt;
  # nixos-rebuild switch&lt;br /&gt;
&lt;br /&gt;
== Testare il funzionamento della carta ==&lt;br /&gt;
 # pcsc_scan&lt;br /&gt;
&lt;br /&gt;
Dovrebbe produrre un output di questo genere, contenente alcune informazioni sulla CNS, tra cui dovreste riconoscere le vostre generalità.&lt;br /&gt;
&lt;br /&gt;
 PC/SC device scanner&lt;br /&gt;
 V 1.4.22 (c) 2001-2011, Ludovic Rousseau &amp;lt;ludovic.rousseau@free.fr&amp;gt;&lt;br /&gt;
 Compiled with PC/SC lite version: 1.8.10&lt;br /&gt;
 Using reader plug'n play mechanism&lt;br /&gt;
 Scanning present readers...&lt;br /&gt;
 0: ACS ACR38U-CCID 00 00&lt;br /&gt;
 Mon May  5 22:52:40 2014&lt;br /&gt;
 Reader 0: ACS ACR38U-CCID 00 00&lt;br /&gt;
   Card state: Card inserted, &lt;br /&gt;
   ATR: 3B DF 18 00 81 31 FE 7D 00 6B 15 0C 01 81 01 11 01 43 4E 53 10 31 80 E8&lt;br /&gt;
&lt;br /&gt;
== Localizzare la libreria ==&lt;br /&gt;
Al termine dell'installazione, è necessario individuare la libreria &amp;lt;code&amp;gt;opensc-pkcs11.so&amp;lt;/code&amp;gt;, che serve per configurare il browser e utilizzare la tessera con esso.&lt;br /&gt;
&lt;br /&gt;
Generalmente può essere trovata in uno dei seguenti percorsi:&lt;br /&gt;
* ''/usr/lib/opensc-pkcs11.so''&lt;br /&gt;
* ''/usr/lib/x86_64-linux-gnu/opensc-pkcs11.so''&lt;br /&gt;
&lt;br /&gt;
Oppure qua per i nuovi driver proprietari aggiornati al 2021&lt;br /&gt;
* ''/usr/lib/bit4id/libbit4xpki.so''&lt;br /&gt;
&lt;br /&gt;
Se non si riesce a localizzarla, si può provare a cercarla col seguente comando:&lt;br /&gt;
 $ find / -name &amp;quot;opensc-pkcs11.so&amp;quot; 2&amp;gt; /dev/null&lt;br /&gt;
&lt;br /&gt;
= Applicazioni =&lt;br /&gt;
Molte applicazioni possono usare il certificato della CNS per autenticarvi, come il browser o ssh.&lt;br /&gt;
== Browser ==&lt;br /&gt;
'''Attenzione:''' collegare sempre il lettore '''prima''' di aprire il browser!&lt;br /&gt;
&lt;br /&gt;
Dopo la configurazione, è possibile verificare il funzionamento collegandosi alla [https://ca.arubapec.it/crtest/showcert.php pagina test di Aruba] ed inserendo il PIN.&lt;br /&gt;
&lt;br /&gt;
=== Firefox ===&lt;br /&gt;
# Collegare il lettore di smartcard&lt;br /&gt;
# Avviare Firefox&lt;br /&gt;
# Inserire la tessera sanitaria nel lettore&lt;br /&gt;
# In Firefox, selezionare ''Modifica'' &amp;amp;rarr; ''Preferenze'' &amp;amp;rarr; ''Privacy e sicurezza'' &amp;amp;rarr; ''Dispositivi di sicurezza''&lt;br /&gt;
# Cliccare su ''Carica'', inserire una descrizione (es: ''TesseraSanitaria'') ed il percorso corretto del file &amp;lt;code&amp;gt;opensc-pkcs11.so&amp;lt;/code&amp;gt; o &amp;lt;code&amp;gt;libbit4xpki.so&amp;lt;/code&amp;gt;, come individuati precedentemente.&lt;br /&gt;
&lt;br /&gt;
=== Chrome/Chromium ===&lt;br /&gt;
Chiudere il browser, quindi aprire un terminale e lanciare i seguenti comandi, modificando opportunamente il percorso del file  &amp;lt;code&amp;gt;opensc-pkcs11.so&amp;lt;/code&amp;gt;, come individuato precedentemente.&lt;br /&gt;
&lt;br /&gt;
 $ cd ~&lt;br /&gt;
 $ modutil -dbdir sql:.pki/nssdb/ -add &amp;quot;OpenSC&amp;quot; -libfile /usr/lib/opensc-pkcs11.so&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nel caso dei driver del 2021 sarà invece necessario usare quest'altro comando&lt;br /&gt;
&lt;br /&gt;
 $ cd ~&lt;br /&gt;
 $ modutil -dbdir sql:.pki/nssdb/ -add &amp;quot;CNS2021&amp;quot; -libfile /usr/lib/bit4id/libbit4xpki.so&lt;br /&gt;
&lt;br /&gt;
=== SSH ===&lt;br /&gt;
Estrarre la chiave pubblica (il percorso della libreria dipende dalla distribuzione):&lt;br /&gt;
 ssh-keygen -D /usr/lib/i386-linux-gnu/opensc-pkcs11.so&lt;br /&gt;
Oppure, se si usa una scheda con l'altro tipo di chip&lt;br /&gt;
 ssh-keygen -D /usr/lib/bit4id/libbit4xpki.so&lt;br /&gt;
&lt;br /&gt;
Dopo aver copiato la chiave pubblica sul sistema remoto (ad es. in ~/.ssh/authorized_keys), è possibile collegarsi fornendo il PIN quando richiesto:&lt;br /&gt;
 ssh ­-I /usr/lib/i386­linux­gnu/opensc­-pkcs11.so ''indirizzo-del-server''&lt;br /&gt;
Oppure&lt;br /&gt;
 ssh ­-I /usr/lib/bit4id/libbit4xpki.so ''indirizzo-del-server''&lt;br /&gt;
&lt;br /&gt;
= Utilità =&lt;br /&gt;
== Modificare PIN ==&lt;br /&gt;
 $ pkcs15-tool --change-pin&lt;br /&gt;
&lt;br /&gt;
[[Category:Howto]]&lt;/div&gt;</summary>
		<author><name>$pooky Hunter</name></author>
	</entry>
	<entry>
		<id>https://wiki.golem.linux.it/index.php?title=Carta_Nazionale_dei_Servizi_e_Firma_Digitale&amp;diff=9762</id>
		<title>Carta Nazionale dei Servizi e Firma Digitale</title>
		<link rel="alternate" type="text/html" href="https://wiki.golem.linux.it/index.php?title=Carta_Nazionale_dei_Servizi_e_Firma_Digitale&amp;diff=9762"/>
		<updated>2026-02-06T19:14:59Z</updated>

		<summary type="html">&lt;p&gt;$pooky Hunter: /* Debian/Ubuntu/Mint */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Questa pagina ha lo scopo di fare chiarezza sul &amp;quot;mondo&amp;quot; delle '''smartcard''' con microchip crittografico, delle funzioni che tramite esse vengono veicolate e del loro utilizzo con Linux.&lt;br /&gt;
&lt;br /&gt;
= CNS =&lt;br /&gt;
&lt;br /&gt;
Una smartcard si definisce [http://www.digitpa.gov.it/carta-nazionale-dei-servizi «Carta Nazionale dei Servizi»] quando ha a bordo del suo microchip un certificato utile per l'autenticazione online, strutturato secondo quanto richiesto [http://www.digitpa.gov.it/node/689 dalla legge italiana].&lt;br /&gt;
&lt;br /&gt;
Anche la '''CIE''' «Carta d'Identità Elettronica», la «tessera sanitaria regionale» '''TS''' e le carte regionali dei servizi '''CRS''' sono a tutti gli effetti CNS.&lt;br /&gt;
&lt;br /&gt;
Sono strumenti di riconoscimento online d'identità e possono essere utilizzate anche per [http://www.digitpa.gov.it/firme-elettroniche-certificatori Firma Digitale] '''FD'''.&lt;br /&gt;
&lt;br /&gt;
La smartcard è quindi l'oggetto fisico. Può contenere '''soltanto''' la funzionalità CNS, '''soltanto''' la funzionalità FD o '''entrambe''', oppure '''nessuna''' (come nel caso delle tessere sanitarie con microchip appena giunte al cittadino e non ancora &amp;quot;attivate&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
Per ulteriori approfondimenti è possibile consultare [https://golem.linux.it/cloud/index.php/s/fCLGQzyRBpKfN45 Strumenti di Cittadinanza digitale] a cura di Giulia del GOLEM.&lt;br /&gt;
&lt;br /&gt;
=Produttori di smartcard=&lt;br /&gt;
&lt;br /&gt;
I produttori di smartcard (o meglio di microchip) dovrebbero rispettare lo standard [http://www.rsa.com/rsalabs/node.asp?id=2141 pkcs#15], ma non sempre lo fanno. Per questo abbiamo bisogno di driver specifici (spesso binari e non-Liberi).&lt;br /&gt;
&lt;br /&gt;
==Athena==&lt;br /&gt;
&lt;br /&gt;
Smartcard fra le più diffuse (CRS Lombardia, TS Toscana, TS Sardegna, ArubaPEC), sono del produttore [http://www.athena-scs.com/ Athena] è possibile scaricare i driver binari dal sito [http://www.pec.it/Download.aspx Aruba].&lt;br /&gt;
&lt;br /&gt;
==Incard==&lt;br /&gt;
&lt;br /&gt;
Alcune smartcard utilizzate in Italia (Camere di Commercio, Infocert, ArubaPEC) sono del produttore [http://www.incard.it/ Incard]. I driver di queste smartcard sembrano essere sviluppati da Bit4id e sono rilasciati gratuitamente, ma non-Liberi, in formato binario su [https://www.pec.it/download-software-driver.aspx Aruba]. &lt;br /&gt;
&lt;br /&gt;
==Oberthur==&lt;br /&gt;
&lt;br /&gt;
Le smartcard [http://www.oberthur.com/ Oberthur] sono utilizzate per la firma digitale da [https://www.pec.it ArubaPEC], molti ordini professionali emettono per i loro associati smartcard di questo produttore. Utilizzano il medesimo driver di Incard scaricabile su [https://www.pec.it/download-software-driver.aspx Aruba]&lt;br /&gt;
&lt;br /&gt;
==Siemens==&lt;br /&gt;
&lt;br /&gt;
Molto usate in passato dalle Camere di Commercio e adesso dalla [http://www.regione.liguria.it/argomenti/diritti-e-doveri-del-cittadino/carta-regionale-dei-servizi.html CRS ligure], le smartcard Siemens richiedono il software [http://supportcrs.fascicolo-sanitario.it/modulistica/ CardOS]. &lt;br /&gt;
&lt;br /&gt;
==Vecchie smartcard==&lt;br /&gt;
&lt;br /&gt;
Un bell'elenco, storico, molto dettagliato, di microchip e dei relativi produttori si trova nella [https://www.firma.infocert.it/pdf/CARD_1.pdf documentazione Infocert]. Sysgillo, InCrypto, Siemens... le vecchie firme digitali delle Camere di Commercio.&lt;br /&gt;
&lt;br /&gt;
=Lettori di smartcard=&lt;br /&gt;
&lt;br /&gt;
Chi produce i lettori spesso rispetta lo standard [http://www.rsa.com/rsalabs/node.asp?id=2133 pkcs#11], quindi i lettori più nuovi dovrebbero risultare compatibili con Linux.&lt;br /&gt;
&lt;br /&gt;
I seguenti lettori di smartcard sono stati testati e funzionano con Linux&lt;br /&gt;
&lt;br /&gt;
==Bit4id==&lt;br /&gt;
[https://support.bit4id.com/#!/it/product/miniLector_Piano miniLector Piano] di Bit4id: funziona.&lt;br /&gt;
&lt;br /&gt;
==Manhattan==&lt;br /&gt;
[http://www.manhattan-products.com/en-US/products/5605-smart-card-reader Manhattan]&lt;br /&gt;
&lt;br /&gt;
Lo vende (per esempio) [http://www.icintracom.biz/lettore-di-smart-card-usb-esterno-1822.html icintracom]: funziona.&lt;br /&gt;
&lt;br /&gt;
Sembra lo stesso lettore che vende anche [http://www.digicom.it/digisit/prodotti.nsf/ITProdottiIDX/SmartCardReader Digicom]. Visto da Trony a 17,99 euro (settembre 2012). Logo Linux sull'esterno della scatola.&lt;br /&gt;
&lt;br /&gt;
==Hamlet==&lt;br /&gt;
[http://www.hamletcom.com/products/huscr2.aspx Hamlet]: funziona.&lt;br /&gt;
&lt;br /&gt;
==Gemalto==&lt;br /&gt;
&lt;br /&gt;
Lettori di smartcard [http://www.gemalto.com/products/pc_link_readers/ IDBridge CT family]. Secondo [http://www.programmiamoinsieme.eu/blog/2012/02/11/firma-digitale-con-smart-card-cns-su-linux/ Ludo] funzionano.&lt;br /&gt;
&lt;br /&gt;
Dal [http://support.gemalto.com/index.php?id=download_driver_pc-link_readers sito web] di Gemalto, sia per i lettori [http://support.gemalto.com/index.php?id=pc_usb_sl PC USB SL], sia per quelli [http://support.gemalto.com/index.php?id=pc_usb_tr_and_pc_twin PC USB TR e PC TWIN] si hanno buone notizie per quanto riguarda Linux: &lt;br /&gt;
&lt;br /&gt;
''«This USB CCID device is supported by the '''libccid''' library. This library provides a PC/SC IFD handler implementation for the USB smart card interface devices compliant to the CCID protocol. Gemalto '''is actively involved''' in the development and improvement of this library. This library is packaged and distributed by most of the Linux distributions. TIPS: Use the package manager from your specific Linux distribution to search for the libccid library and install it. The libccid source code is available on the following web site: [http://pcsclite.alioth.debian.org/ccid.html Alioth].»''&lt;br /&gt;
&lt;br /&gt;
==ASEDrive - Athena==&lt;br /&gt;
&lt;br /&gt;
Athena produce non soltanto le smartcard, ma anche i lettori [https://www.partnerdata.it/athena/ ASEDrive]: dovrebbero funzionare.&lt;br /&gt;
&lt;br /&gt;
=Firma digitale FD=&lt;br /&gt;
&lt;br /&gt;
Supponendo di avere fatto bene tutte le configurazioni utili per i lettori e anche per la smartcard in nostro possesso, possiamo provare a firmare con un software di firma. Ce ne sono pochi di Liberi (o Open Source), molti sono a pagamento, alcuni sono non-Liberi ma gratuiti.&lt;br /&gt;
&lt;br /&gt;
==Aruba Sign==&lt;br /&gt;
Il miglior software multi-piattaforma disponibile è probabilmente [https://www.pec.it/download-software-driver.aspx Aruba Sign].&lt;br /&gt;
Prodotto da Aruba, gratuito ma non libero, è scritto in Java e disponibile per Windows, MacOS X e Linux.&lt;br /&gt;
Permette di firmare documenti, apporre marcature temporali ed ulteriori operazioni come la modifica del PIN di una CNS.&lt;br /&gt;
Affinché riconosca correttamente il proprio lettore è necessario inserire il percorso del driver nella sezione Opzioni e Parametri, es. su Arch Linux con lettore Bit4id: /usr/lib/bit4id/libbit4xpki.so&lt;br /&gt;
&lt;br /&gt;
==Marcatura temporale - Timestamp==&lt;br /&gt;
&lt;br /&gt;
Una marcatura temporale si può apporre con File Protector. Quello di marcatura temporale è un servizio che viene fornito, tramite un server, da una [http://en.wikipedia.org/wiki/Trusted_timestamping#Trusted_.28digital.29_timestamping TSA] Time Stamping Authority (per dirla in modo grossolano un server terzo firma col suo certificato l'[http://it.wikipedia.org/wiki/Secure_Hash_Algorithm impronta] del nostro file dopo averci aggiunto data e ora).&lt;br /&gt;
&lt;br /&gt;
Le marcature devono essere acquistate (per esempio su [http://www.pec.it/MarcheTemporali.aspx pec.it]).&lt;br /&gt;
&lt;br /&gt;
=== FreeSigner ===&lt;br /&gt;
&lt;br /&gt;
Basato su [http://j4sign.sourceforge.net/ j4sign], è un programma che permette di effettuare e verificare firme digitali. E' multipiattaforma ed è possibile scaricarlo a [https://de.osdn.net/projects/sfnet_j4sign/downloads/freesigner/freesigner-0.3.4/freesigner-0.3.4-setup.jar questo indirizzo]. Supporta i più recenti standard normativi di firma CADeS e la maggior parte delle smartcard compatibili con lo standard PKCS#11 e Linux.&lt;br /&gt;
&lt;br /&gt;
=Tessera Sanitaria=&lt;br /&gt;
&lt;br /&gt;
La cosiddetta [http://www.sistemats.it/ Tessera Sanitaria] non è altro che una Carta Nazionale dei Servizi.&lt;br /&gt;
&lt;br /&gt;
Le prime tessere sanitarie non avevano il microchip, servivano soltanto perché funzionavano da codice fiscale (che poteva essere letto in automatico dal codice a barre stampato su di esse).&lt;br /&gt;
&lt;br /&gt;
=== Tipologie ===&lt;br /&gt;
&lt;br /&gt;
[[File:Tessera_sanitaria.jpeg]]&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| Sigla&lt;br /&gt;
| Tipologia Carta&lt;br /&gt;
| Linux&lt;br /&gt;
| Driver&lt;br /&gt;
|-&lt;br /&gt;
| AT 2012&lt;br /&gt;
| Siemens / ATOS&lt;br /&gt;
| OK&lt;br /&gt;
| OpenSC, [https://www.regione.toscana.it/-/area-download Proprietario]&lt;br /&gt;
|-&lt;br /&gt;
| AC 2013, 2014, 2018&lt;br /&gt;
| Actalis&lt;br /&gt;
| OK&lt;br /&gt;
| OpenSC, [https://sistemats1.sanita.finanze.it/portale/elenco-driver-cittadini-modalita-accesso Proprietario]&lt;br /&gt;
|-&lt;br /&gt;
| ACx 2021&lt;br /&gt;
| Actalis&lt;br /&gt;
| OK&lt;br /&gt;
| [https://sistemats1.sanita.finanze.it/portale/elenco-driver-cittadini-modalita-accesso Proprietario]&lt;br /&gt;
|-&lt;br /&gt;
| ACe 2021&lt;br /&gt;
| Actalis&lt;br /&gt;
| OK&lt;br /&gt;
| [https://sistemats1.sanita.finanze.it/portale/elenco-driver-cittadini-modalita-accesso Proprietario]&lt;br /&gt;
|-&lt;br /&gt;
| OT 2015, 2016&lt;br /&gt;
| OBERTHUR&lt;br /&gt;
| OK&lt;br /&gt;
| OpsnSC, [https://sistemats1.sanita.finanze.it/portale/elenco-driver-cittadini-modalita-accesso Proprietario]&lt;br /&gt;
|-&lt;br /&gt;
| ID 2019&lt;br /&gt;
| IDEMIA&lt;br /&gt;
| OK&lt;br /&gt;
| [https://sistemats1.sanita.finanze.it/portale/elenco-driver-cittadini-modalita-accesso Proprietario]&lt;br /&gt;
|-&lt;br /&gt;
| ST 2021&lt;br /&gt;
| STMICROELECTRONICS&lt;br /&gt;
| OK&lt;br /&gt;
| [https://sistemats1.sanita.finanze.it/portale/elenco-driver-cittadini-modalita-accesso Proprietario]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Nel caso la vostra carta non fosse supportata da questi driver provate: [https://sistemats4.sanita.finanze.it/CardDriverDownloaderWeb/pages/home.xhtml Ricerca], [https://www.cartaidentita.interno.gov.it/fornitori-di-servizi/documentazione-middleware-cie/ CIE], [https://www.firma.infocert.it/installazione/ Infocert].&lt;br /&gt;
&lt;br /&gt;
==Portali Regionali==&lt;br /&gt;
&lt;br /&gt;
* Tessera Sanitaria e Carta Provinciale dei Servizi della [http://www.provincia.bz.it/cartaservizi/ Provincia Autonoma di Bolzano]&lt;br /&gt;
&lt;br /&gt;
* La [http://www.regione.calabria.it/sanita/index.php?option=com_content&amp;amp;task=view&amp;amp;id=405&amp;amp;Itemid=100 Regione Calabria]&lt;br /&gt;
&lt;br /&gt;
* Carta dei Servizi del [http://cartaservizi.regione.fvg.it/ Friuli Venezia Giulia]&lt;br /&gt;
&lt;br /&gt;
* Carta regionale dei Servizi [http://www.regione.liguria.it/argomenti/diritti-e-doveri-del-cittadino/carta-regionale-dei-servizi.html Regione Liguria]&lt;br /&gt;
&lt;br /&gt;
* Carta Regionale dei Servizi [http://www.crs.regione.lombardia.it/ Regione Lombardia]&lt;br /&gt;
&lt;br /&gt;
* Tessera Sanitaria [http://www.regione.toscana.it/cartasanitaria Regione Toscana] [http://www.regione.toscana.it/servizi-online/servizi-sicuri/carta-sanitaria-elettronica/guida-all-uso Guida all'uso] Lettore di smartcard a [https://www.regione.toscana.it/servizi-online/servizi-sicuri/carta-sanitaria-elettronica/lettore-smart-card 4,20 euro]&lt;br /&gt;
&lt;br /&gt;
* Tessera Sanitaria [https://tscns.regione.sardegna.it/articoli/linux Regione Sardegna]&lt;br /&gt;
&lt;br /&gt;
* Tessera Sanitaria e Carta Provinciale dei Servizi [http://www.cartaservizi.provincia.tn.it/ Provincia Autonoma di Trento].&lt;br /&gt;
&lt;br /&gt;
=Carta d'Identità Elettronica =&lt;br /&gt;
&lt;br /&gt;
La CIE è una CNS identica alle altre. I driver proprietari per le varie piattaforme sono scaricabili [https://www.cartaidentita.interno.gov.it/fornitori-di-servizi/documentazione-middleware-cie/ qui].&lt;br /&gt;
&lt;br /&gt;
= Installazione SmartCard su Linux =&lt;br /&gt;
== Distribuzioni ==&lt;br /&gt;
=== Debian/Ubuntu/Mint ===&lt;br /&gt;
Installare i seguenti pacchetti&lt;br /&gt;
 # apt install pcsc-tools pcscd opensc opensc-pkcs11&lt;br /&gt;
&lt;br /&gt;
Il demone &amp;lt;code&amp;gt;pcscd&amp;lt;/code&amp;gt; si avvierà automaticamente.&lt;br /&gt;
&lt;br /&gt;
Le nuove carte ACx 2021 non sono ancora supportate da OpenSC, per poterle utilizzare occorrerà scaricare ed installare manualmente il pacchetto  &lt;br /&gt;
* [https://swdownload1.agenziaentrate.gov.it/pub/sanita/libbit4xpki-idemia-amd64.1.4.10-647.deb libbit4xpki-idemia-amd64.1.4.10-647.deb]&lt;br /&gt;
&lt;br /&gt;
=== Arch Linux ===&lt;br /&gt;
Installare i seguenti pacchetti, utili solo per smartcard del produttore Athena (libaseCnsP11)&lt;br /&gt;
 # pacman -Sy ccid pcsclite pcsc-tools opensc&lt;br /&gt;
&lt;br /&gt;
Abilitare e avviare pcscd&lt;br /&gt;
 # systemctl enable pcscd.socket&lt;br /&gt;
 # systemctl start pcscd.socket&lt;br /&gt;
&lt;br /&gt;
Alcune recenti tessere sanitarie non sono ancora supportate da OpenSC, sarà necessario scaricare e compilare manualmente il pacchetto&lt;br /&gt;
* [https://spookyh.altervista.org/altro/bit4id-xpki.tar.gz bit4id-xpki.tar.gz].&lt;br /&gt;
&lt;br /&gt;
=== NixOS ===&lt;br /&gt;
Aggiungere i seguenti pacchetti al file &amp;lt;code&amp;gt;/etc/nixos/configuration.nix&amp;lt;/code&amp;gt; nella sezione ''environment.systemPackages = with pkgs;''&lt;br /&gt;
 pcsclite opensc openssl pcsctools ccid usbutils acsccid &lt;br /&gt;
&lt;br /&gt;
Abilitare demone per la gestione delle smartcard aggiungendo la riga seguente al &amp;lt;code&amp;gt;configuration.nix&amp;lt;/code&amp;gt;&lt;br /&gt;
  services.pcscd.enable = true;&lt;br /&gt;
&lt;br /&gt;
Effettuare il rebuild del sistema e riavviare&lt;br /&gt;
 # nixos-rebuild switch&lt;br /&gt;
&lt;br /&gt;
Alcune recenti tessere sanitarie non sono ancora supportate da OpenSC, per farlo create il file &amp;lt;code&amp;gt;[https://github.com/spookyh83/nixpkgs/blob/spookix/pkgs/misc/drivers/bit4id-xpki/default.nix /etc/nixos/cns_ita_new.nix]&amp;lt;/code&amp;gt;&lt;br /&gt;
 { lib, stdenv, fetchurl, dpkg, pcsclite, opensc, pcsctools, ccid }:&lt;br /&gt;
 stdenv.mkDerivation rec {&lt;br /&gt;
  name = &amp;quot;bit4xpki&amp;quot;;&lt;br /&gt;
  src = fetchurl {&lt;br /&gt;
    url = &amp;quot;https://swdownload1.agenziaentrate.gov.it/pub/sanita/libbit4xpki-idemia-amd64.1.4.10-622.deb&amp;quot;;&lt;br /&gt;
    sha256 = &amp;quot;1mq6xng97d5s94h84p1clsnh56g245xcr1pbjm3ryjf43w7jlqlx&amp;quot;;&lt;br /&gt;
  };&lt;br /&gt;
  unpackPhase = &amp;quot;dpkg-deb -x $src $out&amp;quot;;&lt;br /&gt;
  meta = with lib; {&lt;br /&gt;
    description = &amp;quot;Libraries for the XPKI client used by the Italian CNS.&amp;quot;;&lt;br /&gt;
    homepage = &amp;quot;https://sistemats1.sanita.finanze.it/portale/elenco-driver-cittadini-modalita-accesso&amp;quot;;&lt;br /&gt;
    platforms = [ &amp;quot;x86_64-linux&amp;quot; ];&lt;br /&gt;
    license = licenses.unfree;&lt;br /&gt;
  };&lt;br /&gt;
    buildInputs = [ dpkg ];&lt;br /&gt;
    shellHook = ''&lt;br /&gt;
    export PATH=&amp;quot;${dpkg}/bin:$PATH&amp;quot;&lt;br /&gt;
  '';&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Aggiungere una riga tra le import di &amp;lt;code&amp;gt;/etc/nixos/configuration.nix&amp;lt;/code&amp;gt;&lt;br /&gt;
 {&lt;br /&gt;
  imports =&lt;br /&gt;
    [ # Include the results of the hardware scan.&lt;br /&gt;
      ./hardware-configuration.nix&lt;br /&gt;
      ./bit4id.nix   #'''File nella directory /etc/nixos per caricare il driver &lt;br /&gt;
     ];&lt;br /&gt;
&lt;br /&gt;
Creare il file &amp;lt;code&amp;gt;/etc/nixos/bit4id.nix&amp;lt;/code&amp;gt;&lt;br /&gt;
 { config, pkgs, ... }:&lt;br /&gt;
 let&lt;br /&gt;
  bit4id = pkgs.callPackage /etc/nixos/cns_ita_new.nix {};&lt;br /&gt;
 in&lt;br /&gt;
 {&lt;br /&gt;
  environment.systemPackages = [ bit4id ];&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Effettuare il rebuild del sistema&lt;br /&gt;
  # nixos-rebuild switch&lt;br /&gt;
&lt;br /&gt;
== Testare il funzionamento della carta ==&lt;br /&gt;
 # pcsc_scan&lt;br /&gt;
&lt;br /&gt;
Dovrebbe produrre un output di questo genere, contenente alcune informazioni sulla CNS, tra cui dovreste riconoscere le vostre generalità.&lt;br /&gt;
&lt;br /&gt;
 PC/SC device scanner&lt;br /&gt;
 V 1.4.22 (c) 2001-2011, Ludovic Rousseau &amp;lt;ludovic.rousseau@free.fr&amp;gt;&lt;br /&gt;
 Compiled with PC/SC lite version: 1.8.10&lt;br /&gt;
 Using reader plug'n play mechanism&lt;br /&gt;
 Scanning present readers...&lt;br /&gt;
 0: ACS ACR38U-CCID 00 00&lt;br /&gt;
 Mon May  5 22:52:40 2014&lt;br /&gt;
 Reader 0: ACS ACR38U-CCID 00 00&lt;br /&gt;
   Card state: Card inserted, &lt;br /&gt;
   ATR: 3B DF 18 00 81 31 FE 7D 00 6B 15 0C 01 81 01 11 01 43 4E 53 10 31 80 E8&lt;br /&gt;
&lt;br /&gt;
== Localizzare la libreria ==&lt;br /&gt;
Al termine dell'installazione, è necessario individuare la libreria &amp;lt;code&amp;gt;opensc-pkcs11.so&amp;lt;/code&amp;gt;, che serve per configurare il browser e utilizzare la tessera con esso.&lt;br /&gt;
&lt;br /&gt;
Generalmente può essere trovata in uno dei seguenti percorsi:&lt;br /&gt;
* ''/usr/lib/opensc-pkcs11.so''&lt;br /&gt;
* ''/usr/lib/x86_64-linux-gnu/opensc-pkcs11.so''&lt;br /&gt;
&lt;br /&gt;
Oppure qua per i nuovi driver proprietari aggiornati al 2021&lt;br /&gt;
* ''/usr/lib/bit4id/libbit4xpki.so''&lt;br /&gt;
&lt;br /&gt;
Se non si riesce a localizzarla, si può provare a cercarla col seguente comando:&lt;br /&gt;
 $ find / -name &amp;quot;opensc-pkcs11.so&amp;quot; 2&amp;gt; /dev/null&lt;br /&gt;
&lt;br /&gt;
= Applicazioni =&lt;br /&gt;
Molte applicazioni possono usare il certificato della CNS per autenticarvi, come il browser o ssh.&lt;br /&gt;
== Browser ==&lt;br /&gt;
'''Attenzione:''' collegare sempre il lettore '''prima''' di aprire il browser!&lt;br /&gt;
&lt;br /&gt;
Dopo la configurazione, è possibile verificare il funzionamento collegandosi alla [https://ca.arubapec.it/crtest/showcert.php pagina test di Aruba] ed inserendo il PIN.&lt;br /&gt;
&lt;br /&gt;
=== Firefox ===&lt;br /&gt;
# Collegare il lettore di smartcard&lt;br /&gt;
# Avviare Firefox&lt;br /&gt;
# Inserire la tessera sanitaria nel lettore&lt;br /&gt;
# In Firefox, selezionare ''Modifica'' &amp;amp;rarr; ''Preferenze'' &amp;amp;rarr; ''Privacy e sicurezza'' &amp;amp;rarr; ''Dispositivi di sicurezza''&lt;br /&gt;
# Cliccare su ''Carica'', inserire una descrizione (es: ''TesseraSanitaria'') ed il percorso corretto del file &amp;lt;code&amp;gt;opensc-pkcs11.so&amp;lt;/code&amp;gt; o &amp;lt;code&amp;gt;libbit4xpki.so&amp;lt;/code&amp;gt;, come individuati precedentemente.&lt;br /&gt;
&lt;br /&gt;
=== Chrome/Chromium ===&lt;br /&gt;
Chiudere il browser, quindi aprire un terminale e lanciare i seguenti comandi, modificando opportunamente il percorso del file  &amp;lt;code&amp;gt;opensc-pkcs11.so&amp;lt;/code&amp;gt;, come individuato precedentemente.&lt;br /&gt;
&lt;br /&gt;
 $ cd ~&lt;br /&gt;
 $ modutil -dbdir sql:.pki/nssdb/ -add &amp;quot;OpenSC&amp;quot; -libfile /usr/lib/opensc-pkcs11.so&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nel caso dei driver del 2021 sarà invece necessario usare quest'altro comando&lt;br /&gt;
&lt;br /&gt;
 $ cd ~&lt;br /&gt;
 $ modutil -dbdir sql:.pki/nssdb/ -add &amp;quot;CNS2021&amp;quot; -libfile /usr/lib/bit4id/libbit4xpki.so&lt;br /&gt;
&lt;br /&gt;
=== SSH ===&lt;br /&gt;
Estrarre la chiave pubblica (il percorso della libreria dipende dalla distribuzione):&lt;br /&gt;
 ssh-keygen -D /usr/lib/i386-linux-gnu/opensc-pkcs11.so&lt;br /&gt;
Oppure, se si usa una scheda con l'altro tipo di chip&lt;br /&gt;
 ssh-keygen -D /usr/lib/bit4id/libbit4xpki.so&lt;br /&gt;
&lt;br /&gt;
Dopo aver copiato la chiave pubblica sul sistema remoto (ad es. in ~/.ssh/authorized_keys), è possibile collegarsi fornendo il PIN quando richiesto:&lt;br /&gt;
 ssh ­-I /usr/lib/i386­linux­gnu/opensc­-pkcs11.so ''indirizzo-del-server''&lt;br /&gt;
Oppure&lt;br /&gt;
 ssh ­-I /usr/lib/bit4id/libbit4xpki.so ''indirizzo-del-server''&lt;br /&gt;
&lt;br /&gt;
= Utilità =&lt;br /&gt;
== Modificare PIN ==&lt;br /&gt;
 $ pkcs15-tool --change-pin&lt;br /&gt;
&lt;br /&gt;
[[Category:Howto]]&lt;/div&gt;</summary>
		<author><name>$pooky Hunter</name></author>
	</entry>
	<entry>
		<id>https://wiki.golem.linux.it/index.php?title=Howto&amp;diff=9748</id>
		<title>Howto</title>
		<link rel="alternate" type="text/html" href="https://wiki.golem.linux.it/index.php?title=Howto&amp;diff=9748"/>
		<updated>2025-11-22T12:12:10Z</updated>

		<summary type="html">&lt;p&gt;$pooky Hunter: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Tutti gli Howto sono visibili nella [[:Category:Howto | categoria dedicata]].&lt;br /&gt;
== Howto attuali ==&lt;br /&gt;
{|&lt;br /&gt;
|&lt;br /&gt;
=== Per le macchine dell'Officina ===&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
    _  _____ _____ _____ _   _ ________ ___  _   _ _____ &lt;br /&gt;
   / \|_   _|_   _| ____| \ | |__  /_ _/ _ \| \ | | ____|&lt;br /&gt;
  / _ \ | |   | | |  _| |  \| | / / | | | | |  \| |  _|  &lt;br /&gt;
 / ___ \| |   | | | |___| |\  |/ /_ | | |_| | |\  | |___ &lt;br /&gt;
/_/   \_\_|   |_| |_____|_| \_/____|___\___/|_| \_|_____|&lt;br /&gt;
                                                         &lt;br /&gt;
        Per favore rispettare l'ordine alfabetico!&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
; [[Android_USB_tethering | Android USB tethering]]&lt;br /&gt;
; [[A10-OLinuXino-LIME]]&lt;br /&gt;
; [[apt-cacher|Apt-Cacher]]&lt;br /&gt;
; [[Boot loader | Ripristino del Boot Loader]]&lt;br /&gt;
; [[Btrfs]]&lt;br /&gt;
; [[Condividere_connessione|Condividere la connessione]]&lt;br /&gt;
; [[Docker]]&lt;br /&gt;
; [[File img]]&lt;br /&gt;
; [[Floppy_Linux|Floppy Linux]]&lt;br /&gt;
; [[GOLEM Dolly 2014 | GOLEM Dolly]]&lt;br /&gt;
; [[GPG_Gnu_Privacy_Guard|GPG]]&lt;br /&gt;
; [[Installare_Arch_Linux_in_una_partizione_cifrata | Partizione cifrata su Arch Linux]]&lt;br /&gt;
; [[Netcat]]&lt;br /&gt;
; [[Pillole hardware]]&lt;br /&gt;
; [[PXE|PXE (Boot da Rete)]]&lt;br /&gt;
; [[RAID | Restore RAID 1]]&lt;br /&gt;
; [[Rete del GOLEM]]&lt;br /&gt;
; [[Ricompilazione Kernel]] Prontuario veloce  &lt;br /&gt;
; [[Ricompilazione Kernel per Niubbi]]&lt;br /&gt;
; [[Riconoscere il materiale]]&lt;br /&gt;
; [[Ubuntu e privacy]]&lt;br /&gt;
; [[UEFI e GPT]]&lt;br /&gt;
; [[VPN del GOLEM]]&lt;br /&gt;
; [[Installare Arch Linux su ZFS|ZFS su Arch Linux]]&lt;br /&gt;
|&lt;br /&gt;
=== Altre guide ===&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
    _  _____ _____ _____ _   _ ________ ___  _   _ _____ &lt;br /&gt;
   / \|_   _|_   _| ____| \ | |__  /_ _/ _ \| \ | | ____|&lt;br /&gt;
  / _ \ | |   | | |  _| |  \| | / / | | | | |  \| |  _|  &lt;br /&gt;
 / ___ \| |   | | | |___| |\  |/ /_ | | |_| | |\  | |___ &lt;br /&gt;
/_/   \_\_|   |_| |_____|_| \_/____|___\___/|_| \_|_____|&lt;br /&gt;
                                                         &lt;br /&gt;
        Per favore rispettare l'ordine alfabetico!&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
; [[Arduino_ed_Internet | Arduino ed Internet]]&lt;br /&gt;
; [[Biscotti_open_source | Biscotti Open Source]]&lt;br /&gt;
; [[Conversioni_video|Convertire Video]]&lt;br /&gt;
; [[Installare Debian GNU/Linux su NAS Intel SS4000-E ARM e cloni|Debian su NAS arm]]&lt;br /&gt;
; [[Filesystem esotici]]&lt;br /&gt;
; [[FreeDOS Networking]]&lt;br /&gt;
; [[IPv6_@_GOLEM | IPv6]]&lt;br /&gt;
; [[KDE5_file_template | Modello di file personalizzato su KDE5]]&lt;br /&gt;
; [[Minidlna]] (file sharing in rete locale)&lt;br /&gt;
; [[MySQL]]&lt;br /&gt;
; [[Motion | Videosorveglianza casalinga]]&lt;br /&gt;
; [[OpenBSD]]&lt;br /&gt;
; [[Connessioni_alternative | PLIP]]&lt;br /&gt;
; [[PDF Batch]]&lt;br /&gt;
; [[Pkgsrc_su_Slackware | pkgsrc su Slackware]]&lt;br /&gt;
; [[Postfix Relay]]&lt;br /&gt;
; [[QGIS]]&lt;br /&gt;
; [[Reti Alternative | Reti Alternative]]&lt;br /&gt;
; [[Resize Immagini | Manipolazione Immagini (ImageMagick)]]&lt;br /&gt;
; [[Storia dei sistemi UNIX]]&lt;br /&gt;
; [[Telegram]]&lt;br /&gt;
; [[Tor]]&lt;br /&gt;
; [[VLAN]]&lt;br /&gt;
; [[Wordpress]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Howto vecchi o da rivedere ==&lt;br /&gt;
&lt;br /&gt;
; [[Appunti Arch Linux]]&lt;br /&gt;
; [[Appunti NixOS]]&lt;br /&gt;
; [[Copiare floppy]]&lt;br /&gt;
; [[Webcam | Creative Live! Cam Vista IM]]&lt;br /&gt;
; [[Device_rete|Fissare device name per schede di rete]]&lt;br /&gt;
; [[Estrarre_audio_da_dvd|Estrarre audio da DVD]]&lt;br /&gt;
; [[Net-HOWTO | GOLEM Networking Howto]]&lt;br /&gt;
; [[The_Gimp_come_tradurre_Script-Fu|Gimp, tradurre Script-Fu]]&lt;br /&gt;
; [[Linea_di_comando|Linea di comando]]&lt;br /&gt;
; [[Ricevitore GPS]]&lt;br /&gt;
; [[LibreofficeRubrica | Rubrica su Libreoffice]]&lt;br /&gt;
; [[Vodafone_Station_2_AP|Vodafone Station 2 come Access Point]]&lt;br /&gt;
&lt;br /&gt;
[[Category:howto]]&lt;/div&gt;</summary>
		<author><name>$pooky Hunter</name></author>
	</entry>
	<entry>
		<id>https://wiki.golem.linux.it/index.php?title=Reti_Alternative&amp;diff=9747</id>
		<title>Reti Alternative</title>
		<link rel="alternate" type="text/html" href="https://wiki.golem.linux.it/index.php?title=Reti_Alternative&amp;diff=9747"/>
		<updated>2025-11-22T12:10:13Z</updated>

		<summary type="html">&lt;p&gt;$pooky Hunter: Creata pagina con &amp;quot;=Contenuti distribuiti= ==IPFS== Protocollo di comunicazione e rete P2P per l'archiviazione e la condivisione di dati in un file system distribuito   =Reti Anonime / Privacy-f...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Contenuti distribuiti=&lt;br /&gt;
==IPFS==&lt;br /&gt;
Protocollo di comunicazione e rete P2P per l'archiviazione e la condivisione di dati in un file system distribuito&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Reti Anonime / Privacy-focused=&lt;br /&gt;
==Tor==&lt;br /&gt;
Accesso anonimo al web ed ai servizi onion&lt;br /&gt;
&lt;br /&gt;
==I2P==&lt;br /&gt;
Rete anonima alternativa con focus su servizi interni (eepsites)&lt;br /&gt;
&lt;br /&gt;
==Lokinet==&lt;br /&gt;
https://lokinet.org/&lt;br /&gt;
&lt;br /&gt;
=Reti Overlay / Mesh IPv6=&lt;br /&gt;
==Yggdrasil==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Reti di Test=&lt;br /&gt;
==DN42==&lt;br /&gt;
Simulare AS, imparare BGP e routing&lt;br /&gt;
    &lt;br /&gt;
 &lt;br /&gt;
=Condivisione Mesh della rete=&lt;br /&gt;
==LibreMesh==&lt;br /&gt;
Reti community wireless&lt;br /&gt;
&lt;br /&gt;
==Althea==&lt;br /&gt;
Mesh network con pagamenti automatici DeFi per il traffico consumato&lt;br /&gt;
&lt;br /&gt;
    &lt;br /&gt;
=Comunicazione P2P=&lt;br /&gt;
==Briar==&lt;br /&gt;
Messaggistica P2P via Bluetooth/WiFi diretto&lt;br /&gt;
        Internet (via Tor)&lt;br /&gt;
        Bluetooth (device-to-device)&lt;br /&gt;
        WiFi Locale (senza Internet!)&lt;br /&gt;
&lt;br /&gt;
==Cwtch==&lt;br /&gt;
Messaggistica anonima decentralizzata con meta-dati resistenti&lt;br /&gt;
&lt;br /&gt;
Cwtch/Matrix&lt;br /&gt;
    Matrix: Federato (server interconnessi)&lt;br /&gt;
    Cwtch: P2P puro (nessun server centrale)&lt;br /&gt;
    Entrambi evitano piattaforme centralizzate&lt;br /&gt;
&lt;br /&gt;
2. Privacy e Sicurezza&lt;br /&gt;
    Matrix: E2E encryption opzionale (obbligatoria in Element)&lt;br /&gt;
    Cwtch: E2E encryption by design + metadata protection&lt;br /&gt;
&lt;br /&gt;
3. Architettura&lt;br /&gt;
Matrix: Client ---&amp;gt; Server Homeserver &amp;lt;---&amp;gt; Altri Homeserver&lt;br /&gt;
Cwtch:  Client &amp;lt;-----&amp;gt; Client (direttamente, P2P)&lt;br /&gt;
&lt;br /&gt;
4. Protezione Metadati&lt;br /&gt;
    Matrix: I server possono vedere &amp;quot;chi parla con chi&amp;quot;&lt;br /&gt;
    Cwtch: Nessun metadato - nemmeno la rete sa chi comunica&lt;br /&gt;
&lt;br /&gt;
5. Anonimato vs. Identità&lt;br /&gt;
    Matrix: Identità persistenti (@user:server.org)&lt;br /&gt;
    Cwtch: Identità effimere, sessioni anonime&lt;br /&gt;
    &lt;br /&gt;
6. Casi d'Uso&lt;br /&gt;
    Matrix: Alternative a Slack/Teams, comunicazione organizzata&lt;br /&gt;
    Cwtch: Comunicazione &amp;quot;sensibile&amp;quot;, whistleblowing, incontri anonimi&lt;br /&gt;
    &lt;br /&gt;
    Matrix usa il Double Ratchet (come Signal)&lt;br /&gt;
    Cwtch è basato su Tor e protocolli crypto moderni&lt;/div&gt;</summary>
		<author><name>$pooky Hunter</name></author>
	</entry>
	<entry>
		<id>https://wiki.golem.linux.it/index.php?title=Utente:$pooky_Hunter&amp;diff=9684</id>
		<title>Utente:$pooky Hunter</title>
		<link rel="alternate" type="text/html" href="https://wiki.golem.linux.it/index.php?title=Utente:$pooky_Hunter&amp;diff=9684"/>
		<updated>2025-04-19T23:38:11Z</updated>

		<summary type="html">&lt;p&gt;$pooky Hunter: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''[https://spookyh.altervista.org/ $pooky Hunter]'''&lt;br /&gt;
&lt;br /&gt;
[[Immagine:Linux_counter_259052.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
e-mail: spookyh+golem@gmail.com&lt;br /&gt;
&lt;br /&gt;
PGP [https://keyserver.ubuntu.com/pks/lookup?search=0x9DF79404AEB75693&amp;amp;fingerprint=on&amp;amp;op=index Key]&lt;br /&gt;
&lt;br /&gt;
[https://spookyh.altervista.org/ Sito web]&lt;/div&gt;</summary>
		<author><name>$pooky Hunter</name></author>
	</entry>
	<entry>
		<id>https://wiki.golem.linux.it/index.php?title=Appunti_Arch_Linux&amp;diff=9677</id>
		<title>Appunti Arch Linux</title>
		<link rel="alternate" type="text/html" href="https://wiki.golem.linux.it/index.php?title=Appunti_Arch_Linux&amp;diff=9677"/>
		<updated>2025-04-15T15:09:34Z</updated>

		<summary type="html">&lt;p&gt;$pooky Hunter: /* Rete Bridge */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[https://archlinux.org/ Arch Linux] è una distribuzione Linux leggera e veloce; ma la cui installazione, configurazione e amministrazione avviene prevalentemente da terminale attraverso la modifica manuale di file di configurazione testuali.&lt;br /&gt;
&lt;br /&gt;
Fornisce, seguendo un modello di distribuzione detto &amp;quot;rolling-release&amp;quot;, l'ultima versione stabile della maggior parte del software opensource disponibile per Linux. Dato che è in costante aggiornamento non richiede periodici passaggi da una versione stabile alla successiva. Il lato negativo è che aggiornamenti di componenti importanti come quelli di: '''kernel, boot loader, driver video, librerie...''' potrebbero determinare problemi tali da rendere il sistema inutilizzabile. Accorgimenti come lo snapshot periodico del filesystem riescono, per fortuna, a contrastare l'impatto di questi inconvenienti.&lt;br /&gt;
&lt;br /&gt;
= Installazione =&lt;br /&gt;
== Guida ==&lt;br /&gt;
[https://wiki.archlinux.org/title/Installation_guide Guida ufficiale]&lt;br /&gt;
&lt;br /&gt;
== Supporti ==&lt;br /&gt;
* ISO ufficiale [http://archlinux.mirror.garr.it/archlinux/iso/latest/archlinux-x86_64.iso archlinux-x86_64.iso]&lt;br /&gt;
&lt;br /&gt;
* ISO con supporto per lo [https://openzfs.github.io/openzfs-docs/Getting%20Started/Arch%20Linux/index.html ZFS] [https://archzfs.leibelt.de/media/data/archlinux-archzfs-linux.iso archlinux-archzfs-linux.iso]&lt;br /&gt;
&lt;br /&gt;
* ISO con installer grafico Calamares [https://sourceforge.net/projects/alci/files/alci-iso/ ALCI]&lt;br /&gt;
&lt;br /&gt;
* ISO live CD/USB con interfaccia Xfce, utile per operazioni di ripristino o installazione [https://www.system-rescue.org/Download/ SystemRescue]:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== ISO personalizzata ==&lt;br /&gt;
Con '''archiso''' è possibile creare un'immagine con pacchetti aggiuntivi rispetto a quelli contenuti nella versione ufficiale. &lt;br /&gt;
&lt;br /&gt;
 # pacman -S archiso&lt;br /&gt;
&lt;br /&gt;
Copiare il contenuto del pacchetto in una directory di lavoro, es.: ''/root/media''&lt;br /&gt;
 # cp -r /usr/share/archiso/configs/releng /root/media&lt;br /&gt;
&lt;br /&gt;
Se volessimo aggiungere il supporto ad un pacchetto non contenuto nei repository ufficiali come, per esempio, lo ZFS occorrerebbe:&lt;br /&gt;
&lt;br /&gt;
* Importare la chiave pubblica del suo repository&lt;br /&gt;
 # pacman-key -r DDF7DB817396A49B2A2723F7403BD972F75D9D76&lt;br /&gt;
 # pacman-key --lsign-key DDF7DB817396A49B2A2723F7403BD972F75D9D76&lt;br /&gt;
 &lt;br /&gt;
* Modificare le seguenti righe al file '''pacman.conf''' di archiso per aggiungere il repository&lt;br /&gt;
 [archzfs]&lt;br /&gt;
 SigLevel = Never&lt;br /&gt;
 Server = https://archzfs.com/$repo/$arch&lt;br /&gt;
&lt;br /&gt;
* Aggiungere le seguenti righe al file ''packages.x86_64'' per aggiungere i pacchetti che ci interessa installare&lt;br /&gt;
 zfs-utils&lt;br /&gt;
 zfs-dkms&lt;br /&gt;
 net-tools&lt;br /&gt;
&lt;br /&gt;
* Se volessimo creare una versione live di una macchina, comprensiva di tutti i suoi pacchetti, potremmo semplicemente aggiungerli al file ''packages.x86_64'' &lt;br /&gt;
&lt;br /&gt;
 # pacman -Qq &amp;gt;&amp;gt; ''/path/packages.x86_64''&lt;br /&gt;
&lt;br /&gt;
* Lanciare lo script per creare l'ISO&lt;br /&gt;
 # ./build.sh -v&lt;br /&gt;
L'immagine sarà generata nella directory /root/media/out&lt;br /&gt;
&lt;br /&gt;
== Preparazione del disco ==&lt;br /&gt;
Su Linux si può scegliere (salvo casi estremamente [https://wiki.archlinux.org/title/partitioning#Partitionless_disk particolari]) tra due [https://unix.stackexchange.com/questions/289389/what-are-the-differences-between-the-various-partition-tables tipi] di tabella delle partizioni&lt;br /&gt;
&lt;br /&gt;
* msdos (Master Boot Record o più semplicemente MBR)&lt;br /&gt;
&lt;br /&gt;
* GPT (GUID Partition Table)&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
I casi in cui è preferibile utilizzare la tabella ''msdos'' sono:&lt;br /&gt;
&lt;br /&gt;
* dual-boot con Windows (32-bit o 64-bit) con la scheda madre in modalità Legacy BIOS&lt;br /&gt;
* in schede madri molto datate il BIOS potrebbe non supportare lo schema GPT (esiste comunque un [https://wiki.archlinux.org/title/partitioning#Tricking_old_BIOS_into_booting_from_GPT trucco] per aggirare l'ostacolo)&lt;br /&gt;
&lt;br /&gt;
[https://wiki.archlinux.org/title/partitioning#Choosing_between_GPT_and_MBR Vantaggi] di GPT su MBR:&lt;br /&gt;
&lt;br /&gt;
* offre un sistema di denominazione delle partizioni indipendente dal filesystem (PARTLABEL, PARTUUID)&lt;br /&gt;
&lt;br /&gt;
* 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.&lt;br /&gt;
&lt;br /&gt;
* la grandezza massima di un disco è di 2 ZiB, mentre su MBR 2 TiB&lt;br /&gt;
&lt;br /&gt;
* permette di fare a meno della tradizionale partizione di /boot con i filesystem BTRFS e ZFS in modo da semplificare la gestione degli snapshot.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Schede madri BIOS ===&lt;br /&gt;
Creare due partizioni.&lt;br /&gt;
&lt;br /&gt;
# '''[http://en.wikipedia.org/wiki/BIOS_Boot_partition 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.&lt;br /&gt;
# '''Linux filesystem''': successivamente da formattare col filesystem di nostra scelta: BTRFS, ZFS, ext4, XFS, JFS.&lt;br /&gt;
&lt;br /&gt;
==== Partizionamento ====&lt;br /&gt;
Col seguente comando verrà creata la partizione BIOS GRUB (EF02) a partire dal 1MB, della grandezza di 64MB, 8GB per la SWAP ed il resto del disco resterà disponibile per il filesystem di Linux.&lt;br /&gt;
&lt;br /&gt;
Se avete più dischi da utilizzare in raid, questa operazione andrà ripetuta per ciascun disco.&lt;br /&gt;
&lt;br /&gt;
 # sgdisk \&lt;br /&gt;
 --new=1:2048:133120 --typecode=1:EF02 --change-name=1:&amp;quot;GRUB&amp;quot; \&lt;br /&gt;
 --new=2:0:+8000M ---typecode 2:8200 --change-name=2:&amp;quot;SWAP&amp;quot; \&lt;br /&gt;
 --largest-new=3 --typecode=3:8300 --change-name=3:&amp;quot;ROOT&amp;quot; /dev/sda&lt;br /&gt;
&lt;br /&gt;
La seconda partizione dovrà poi essere formattata con uno dei filesystem supportati da Linux (ext4, btrfs, xfs...)&lt;br /&gt;
 # mkfs.btrfs /dev/sda3&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Schede madri UEFI ===&lt;br /&gt;
Creare due partizioni.&lt;br /&gt;
&lt;br /&gt;
# '''EFI''': è una partizione in formato FAT32 necessaria per l'avvio dei sistemi operativi nei PC con schede madri UEFI.&lt;br /&gt;
# '''Linux filesystem''': successivamente da formattare col filesystem di nostra scelta: BTRFS, ZFS, ext4, XFS, JFS.&lt;br /&gt;
&lt;br /&gt;
==== Partizionamento ====&lt;br /&gt;
Col seguente comando verrà creata la partizione EFI (EF00) a partire dal 1MB, della grandezza di 512MB, 8Gb per la SWAP ed il resto del disco per il filesystem di Linux.&lt;br /&gt;
 # sgdisk \&lt;br /&gt;
 --new=1:2048:1064960 --typecode=1:EF00 --change-name=1:&amp;quot;efi&amp;quot; \&lt;br /&gt;
 --new=2:0:+8000M ---typecode 2:8200 --change-name=2:&amp;quot;SWAP&amp;quot; \&lt;br /&gt;
 --largest-new=3 --typecode=3:8300 --change-name=3:&amp;quot;ROOT&amp;quot; /dev/sda&lt;br /&gt;
&lt;br /&gt;
La partizione '''EFI''' dovrà poi essere formattata in FAT32&lt;br /&gt;
 # mkfs.vfat -F 32 /dev/sda1&lt;br /&gt;
&lt;br /&gt;
La seconda partizione dovrà poi essere formattata con uno dei filesystem supportati da Linux (ext4, btrfs, xfs...)&lt;br /&gt;
 # mkfs.btrfs /dev/sda3&lt;br /&gt;
&lt;br /&gt;
== Montaggio del filesystem ==&lt;br /&gt;
Formattazione ed attivazione della SWAP&lt;br /&gt;
 # mkswap /dev/sda2&lt;br /&gt;
 # swapon /dev/sda2&lt;br /&gt;
&lt;br /&gt;
Montaggio del filesystem di ROOT nei sistemi BIOS&lt;br /&gt;
 # mount /dev/sda3 /mnt&lt;br /&gt;
&lt;br /&gt;
Montaggio del filesystem di ROOT nei sistemi UEFI&lt;br /&gt;
 # mount /dev/sda3 /mnt&lt;br /&gt;
 # mount --mkdir /dev/sda1 /mnt/boot&lt;br /&gt;
&lt;br /&gt;
== Pacchetti base ==&lt;br /&gt;
Per l'installazione di base si consigliano i seguenti meta-pacchetti&lt;br /&gt;
 # pacstrap -K /mnt base base-devel linux linux-headers linux-firmware&lt;br /&gt;
&lt;br /&gt;
== Configurazione ==&lt;br /&gt;
Creazione del file fstab&lt;br /&gt;
 # genfstab -U /mnt &amp;gt;&amp;gt; /mnt/etc/fstab&lt;br /&gt;
&lt;br /&gt;
Chroot nel nuovo sistema&lt;br /&gt;
 # arch-chroot /mnt&lt;br /&gt;
&lt;br /&gt;
Timezone&lt;br /&gt;
 # ln -sf /usr/share/zoneinfo/Europe/Rome /etc/localtime&lt;br /&gt;
&lt;br /&gt;
Editare il file &amp;lt;code&amp;gt;/etc/systemd/timesyncd.conf&amp;lt;/code&amp;gt; ed abilitare il servizio per la sincronizzazione automatica dell'orario&lt;br /&gt;
 # systemctl enable systemd-timesyncd.service&lt;br /&gt;
&lt;br /&gt;
Editare il file &amp;lt;code&amp;gt;/etc/locale.gen&amp;lt;/code&amp;gt; e togliere il commento agli argomenti che interessano, es.: ''en_US.UTF-8'', ''it_IT.UTF-8''. E successivamente generare la localizzazione eseguendo&lt;br /&gt;
 # locale-gen&lt;br /&gt;
&lt;br /&gt;
Configurare la lingua che vogliamo usare per il nostro sistema editando il file &amp;lt;code&amp;gt;/etc/locale.conf&amp;lt;/code&amp;gt; oppure lanciando il comando&lt;br /&gt;
 # localectl set-locale LANG=en_US.UTF-8&lt;br /&gt;
&lt;br /&gt;
Selezioniamo il layout della tastiera editando il file &amp;lt;code&amp;gt;/etc/vconsole.conf&amp;lt;/code&amp;gt;&lt;br /&gt;
 # echo &amp;quot;KEYMAP=it&amp;quot; &amp;gt;&amp;gt; /etc/vconsole.conf&lt;br /&gt;
&lt;br /&gt;
Scegliere un home host (es.: ''archstar'')&lt;br /&gt;
 # echo '''archstar''' &amp;gt;&amp;gt; /etc/hostname&lt;br /&gt;
&lt;br /&gt;
Impostare una password per l'utente root&lt;br /&gt;
 # passwd&lt;br /&gt;
&lt;br /&gt;
Installare e configurare il bootloader&lt;br /&gt;
&lt;br /&gt;
= Filesystem =&lt;br /&gt;
Su Linux, a seconda di ciò di cui abbiamo bisogno, è possibile scegliere tra numerosi filesystem. Le principali opzioni sono le seguenti:&lt;br /&gt;
&lt;br /&gt;
- BTRFS: supporta nativamente sottovolumi, snapshot ed il raid 0, 1 e 5; ma non la crittografia.&lt;br /&gt;
&lt;br /&gt;
- EXT4: il FS storico di Linux, evoluzione di ext3. Supporta nativamente la crittografia dei dati, ma non gestisce autonomamente né RAID, né snapshots. &lt;br /&gt;
&lt;br /&gt;
- [https://openzfs.github.io/openzfs-docs/index.html 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 &amp;quot;write-atomicity&amp;quot; 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.&lt;br /&gt;
&lt;br /&gt;
- [https://access.redhat.com/documentation/it-it/red_hat_enterprise_linux/9/html-single/configuring_and_managing_logical_volumes/index 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.&lt;br /&gt;
&lt;br /&gt;
== IMG ==&lt;br /&gt;
Per fare esperimenti con i filesystem può essere utile creare dei file immagine&lt;br /&gt;
&lt;br /&gt;
Creare un file immagine di una specifica grandezza (es.: 10G)&lt;br /&gt;
 $ truncate -s 10g disk.img&lt;br /&gt;
&lt;br /&gt;
Formattarlo con un filesystem (es.: btrfs)&lt;br /&gt;
 $ mkfs.btrfs disk.img&lt;br /&gt;
&lt;br /&gt;
Montarlo in loop&lt;br /&gt;
 $ sudo mount -o loop disk.img /mnt&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== BTRFS ==&lt;br /&gt;
Creazione del filesystem&lt;br /&gt;
 # mkfs.btrfs ''/dev/partizione''&lt;br /&gt;
&lt;br /&gt;
Montaggio del filesystem&lt;br /&gt;
 # mount -o compress=lzo ''/dev/partizione'' ''/mnt/punto_mount''&lt;br /&gt;
&lt;br /&gt;
(Si consiglia di usare l'opzione di compressione del filesystem per migliorare le performance ed ottimizzare l'utilizzo dello spazio)&lt;br /&gt;
&lt;br /&gt;
===Subvolumi===&lt;br /&gt;
* Creare un subvolume&lt;br /&gt;
 # btrfs subvolume create ''subvolume''&lt;br /&gt;
&lt;br /&gt;
* Controllare i subvolumi presenti sul sistema&lt;br /&gt;
 # btrfs subvolume list /&lt;br /&gt;
&lt;br /&gt;
In una tipica installazione Ubuntu avremo un output di questo tipo&lt;br /&gt;
 ID 257 gen 9755 top level 5 path @&lt;br /&gt;
 ID 292 gen 7624 top level 5 path @home&lt;br /&gt;
&lt;br /&gt;
''@'' è il nome del subvolume contenente la root '''/''' del filesystem&lt;br /&gt;
''@home'' è il nome del subvolume della /home&lt;br /&gt;
&lt;br /&gt;
=== Montaggio di un subvolume ===&lt;br /&gt;
 # mount -o subvol=''subvolume'' ''/dev/partizione'' ''/mnt/punto_mount''&lt;br /&gt;
&lt;br /&gt;
=== fstab ===&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Ecco un '''/etc/fstab''' di esempio&lt;br /&gt;
 LABEL=ROOT       /             btrfs     defaults,compress=lzo,subvol=@            0 0&lt;br /&gt;
 LABEL=ROOT       /home         btrfs     defaults,compress=lzo,subvol=@home        0 0&lt;br /&gt;
 LABEL=ROOT       /mnt/btrfs    btrfs     defaults,noauto,subvolid=0,compress=lzo   0 0&lt;br /&gt;
&lt;br /&gt;
Montando la partizione con label ROOT su /mnt/btrfs saranno visibili tutti i subvolumi.&lt;br /&gt;
&lt;br /&gt;
===Conversione da Ext3/4 a Btrfs===&lt;br /&gt;
 # btrfs-convert /dev/partizione&lt;br /&gt;
&lt;br /&gt;
Automaticamente è creata una snapshot contenente il vecchio filesystem (''/ext2_saved'')&lt;br /&gt;
&lt;br /&gt;
In caso di problemi può essere montata col comando&lt;br /&gt;
 # mount -t btrfs -o subvol=ext2_saved /dev/xxx /ext2_saved&lt;br /&gt;
 # mount -t ext3 -o loop,ro /ext2_saved/image /ext3&lt;br /&gt;
&lt;br /&gt;
Se tutto è andato a buon fine può invece essere eliminata&lt;br /&gt;
 # btrfs subvolume delete /ext2_saved&lt;br /&gt;
&lt;br /&gt;
===Riparazione di un filesystem danneggiato===&lt;br /&gt;
* Direttamente sul filesystem montato&lt;br /&gt;
 # btrfs scrub start -B /dev/partizione&lt;br /&gt;
o anche direttamente sulla root&lt;br /&gt;
 # btrfs scrub start -B /&lt;br /&gt;
&lt;br /&gt;
* Sul disco smontato&lt;br /&gt;
 # btrfs check --repair /dev/partizione&lt;br /&gt;
&lt;br /&gt;
Per non dover ricorrere ad un dispositivo di avvio alternativo, dato che btrfs-check non può essere utilizzato su un filesystem montato, si consiglia di aggiungerlo al ramdisk modificando in questo mmodo il file &amp;lt;code&amp;gt;/etc/mkinitcpio.conf&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 BINARIES=(btrfs)&lt;br /&gt;
&lt;br /&gt;
=== Quote ===&lt;br /&gt;
Per limitare le dimensioni di un subvolume è possibile abilitare la gestione delle '''quote'''.&lt;br /&gt;
&lt;br /&gt;
Utilizzare il seguente comando su un filesystem btrfs appena creato e privo di subvolumi&lt;br /&gt;
 # btrfs quota enable volume&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
 # btrfs subvolume list &amp;lt;path&amp;gt; | cut -d' ' -f2 | xargs -I{} -n1 btrfs qgroup create 0/{} &amp;lt;path&amp;gt;&lt;br /&gt;
 # btrfs quota rescan &amp;lt;path&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Assegnare una quota limite ad un subvolume&lt;br /&gt;
 # btrfs qgroup limit size /volume/subvolume&lt;br /&gt;
&lt;br /&gt;
Es.:&lt;br /&gt;
 # btrfs qgroup limit 20g /mnt/@&lt;br /&gt;
 # btrfs qgroup limit 100g /mnt/@home&lt;br /&gt;
&lt;br /&gt;
Scoprire la quantità di spazio utilizzata da un subvolume&lt;br /&gt;
 # btrfs qgroup show &amp;lt;path&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Snapshots ===&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
* Effettuare uno snapshot&lt;br /&gt;
 # btrfs subvolume snapshot @ rootsnap&lt;br /&gt;
&lt;br /&gt;
Nell'esempio abbiamo effettuato il ''backup'' del filesystem di root e l'abbiamo chiamato ''rootsnap''&lt;br /&gt;
&lt;br /&gt;
* Montare un subvolume/snapshot&lt;br /&gt;
 # mount -t btrfs -o subvol=rootsnap /dev/partizione /mnt/snapshot&lt;br /&gt;
&lt;br /&gt;
* Cancellare un subvolume/snapshot&lt;br /&gt;
 # btrfs subvolume delete rootsnap&lt;br /&gt;
&lt;br /&gt;
==== Integrazione con GRUB ====&lt;br /&gt;
È possibile caricare automaticamente all'avvio gli snapshot dei filesystem di root attraverso il programma '''grub-btrfs'''&lt;br /&gt;
 # pacman -S grub-btrfs&lt;br /&gt;
&lt;br /&gt;
Con questo tool ogni volta che rigeneriamo il file di configurazione di GRUB il sistema rileva eventuali sottovolumi avviabili (snapshot comprese) aggiungendoli al menu di avvio del GRUB &lt;br /&gt;
 # grub-mkconfig -o /boot/grub/grub.cfg&lt;br /&gt;
&lt;br /&gt;
=== Backup ===&lt;br /&gt;
Le snapshot possono essere salvate su un disco esterno, a patto che questo abbia un file system btrfs.&lt;br /&gt;
L'operazione di trasferimento può essere effettuata soltanto su snapshot in sola lettura.&lt;br /&gt;
Si ipotizza che il proprio disco di sistema sia montato in /mnt/btrfs ed il disco esterno in /mnt/ext&lt;br /&gt;
&lt;br /&gt;
* Creare la snapshot in sola lettura (opzione -r) oppure impostare il flag di sola lettura ad una snapshot già fatta&lt;br /&gt;
 btrfs subvolume snapshot -r @root @root-yymmdd-ro&lt;br /&gt;
 btrfs property set /mnt/btrfs/@root-yymmdd-ro ro true&lt;br /&gt;
* Trasferire la snapshot sul disco esterno.&lt;br /&gt;
 btrfs send /mnt/btrfs/@root-yymmdd-ro | btrfs receive /mnt/ext&lt;br /&gt;
* Quando necessario, ripristinare la snapshot&lt;br /&gt;
 btrfs send /mnt/ext/@root-yymmdd-ro | btrfs receive /mnt/btrfs/&lt;br /&gt;
* Eventualmente, rinominare la snapshot e reimpostare i privilegi di scrittura&lt;br /&gt;
 mv /mnt/ext/{@root-yymmdd-ro,@root}&lt;br /&gt;
 btrfs property set /mnt/btrfs/@root ro false&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== RAID ===&lt;br /&gt;
Tipologie e caratteristiche dei raid [https://btrfs.readthedocs.io/en/latest/mkfs.btrfs.html#profiles supportati]&lt;br /&gt;
&lt;br /&gt;
Confronto tra varie tecnologie di [https://blog.jenningsga.com/status-of-storage-within-linux/ raid]&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! RAID !! Redundancy Copies !! Redundancy Parity !! Redundancy Striping !! Spazio utilizzato !! Min/max n. dischi&lt;br /&gt;
|-&lt;br /&gt;
| disco singolo || 1 || || || 100% || 1/N&lt;br /&gt;
|- &lt;br /&gt;
| RAID0 || 1 || || 1 to N || 100% || 1/N&lt;br /&gt;
|- &lt;br /&gt;
| RAID1 || 2 || || ||  50% || 2/N &lt;br /&gt;
|- &lt;br /&gt;
| RAID1C3 || 3 || || || 33% || 3/N&lt;br /&gt;
|- &lt;br /&gt;
| RAID1C4 || 4 || || || 25% || 4/N&lt;br /&gt;
|-&lt;br /&gt;
| RAID10 || 2 || || 1 to N || 50%  || 2/N&lt;br /&gt;
|-&lt;br /&gt;
| RAID5 || 1 || 1 || 2 to N-1 || (N-1)/N || 2/N&lt;br /&gt;
|-&lt;br /&gt;
| RAID6 || 1 || 2 || 3 to N-2 || (N-2)/N || 3/N&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====RAID 0====&lt;br /&gt;
 # mkfs.btrfs -d raid0 /dev/sda1 /dev/sdb1&lt;br /&gt;
&lt;br /&gt;
===== Montare il raid =====&lt;br /&gt;
 # mount /dev/sda1 /mnt&lt;br /&gt;
&lt;br /&gt;
(È equivalente a ''mount /dev/sdb1 /mnt'', il sistema riconosce che è presente un raid 0 e provvede al montaggio corretto dei dischi)&lt;br /&gt;
&lt;br /&gt;
Verifica del montaggio&lt;br /&gt;
 # btrfs filesystem show /mnt&lt;br /&gt;
&lt;br /&gt;
 Label: none  uuid: 4714fca3-bfcb-4130-ad2f-f560f2e12f8e&lt;br /&gt;
 Total devices 2 FS bytes used 27.75GiB&lt;br /&gt;
 devid    1 size 136.72GiB used 17.03GiB path /dev/sda1&lt;br /&gt;
 devid    2 size 136.72GiB used 17.01GiB path /dev/sdb1&lt;br /&gt;
&lt;br /&gt;
=====Aggiungere una partizione=====&lt;br /&gt;
 # btrfs device add /dev/sdc1 /mnt&lt;br /&gt;
&lt;br /&gt;
 # btrfs filesystem show /mnt&lt;br /&gt;
 Label: none  uuid: 4714fca3-bfcb-4130-ad2f-f560f2e12f8e&lt;br /&gt;
 Total devices 3 FS bytes used 27.75GiB&lt;br /&gt;
 devid    1 size 136.72GiB used 17.03GiB path /dev/sda1&lt;br /&gt;
 devid    2 size 136.72GiB used 17.01GiB path /dev/sdb1&lt;br /&gt;
 devid    3 size 136.72GiB used 0.00 path /dev/sdc1&lt;br /&gt;
&lt;br /&gt;
Adesso è necessario effettuare una redistribuzione dei dati sui tre dischi&lt;br /&gt;
 # btrfs balance start -d -m /mnt&lt;br /&gt;
&lt;br /&gt;
Per vedere a che punto del bilanciamento è arrivato il sistema&lt;br /&gt;
 # btrfs fi balance status /&lt;br /&gt;
&lt;br /&gt;
 # btrfs filesystem show /mnt&lt;br /&gt;
 Label: none  uuid: 4714fca3-bfcb-4130-ad2f-f560f2e12f8e&lt;br /&gt;
 Total devices 3 FS bytes used 27.78GiB&lt;br /&gt;
 devid    1 size 136.72GiB used 10.03GiB path /dev/sda1&lt;br /&gt;
 devid    2 size 136.72GiB used 10.03GiB path /dev/sdb1&lt;br /&gt;
 devid    3 size 136.72GiB used 11.00GiB path /dev/sdc1&lt;br /&gt;
&lt;br /&gt;
=====Rimuovere un device=====&lt;br /&gt;
 # btrfs device delete /dev/sdb1 /mnt&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
==== RAID 1 ====&lt;br /&gt;
=====Creazione di un raid1 ex novo===== &lt;br /&gt;
Copiare la tabella delle partizioni da sda a sdb&lt;br /&gt;
 # sfdisk -d /dev/sda | sfdisk /dev/sdb&lt;br /&gt;
&lt;br /&gt;
Creare il raid&lt;br /&gt;
 # mkfs.btrfs -d raid1 -m raid1 /dev/sda1 /dev/sdb1&lt;br /&gt;
&lt;br /&gt;
===== Aggiungere un mirror ad un disco esistente =====&lt;br /&gt;
 # btrfs device add /dev/sdb1 ''/punto_di_mount''&lt;br /&gt;
 # btrfs balance start -dconvert=raid1 -mconvert=raid1 ''/punto_di_mount''&lt;br /&gt;
&lt;br /&gt;
===== GRUB =====&lt;br /&gt;
Se si utilizza un raid1 per la partizione di sistema '''/''' e si vuole rendere Linux avviabile automaticamente anche in caso di danneggiamento o mancanza di uno dei due dischi del raid occorrerà che sul secondo disco sia clonata la partizione EFI o BIOS GRUB (es.: /dev/sda1) e che vi sia installato il bootloader.&lt;br /&gt;
 # dd if=/dev/sda1 of=/dev/sdb1&lt;br /&gt;
 # grub-install /dev/sdb&lt;br /&gt;
&lt;br /&gt;
=====Sostituzione device danneggiato=====&lt;br /&gt;
Verificare qual è il disco che dà dei problemi&lt;br /&gt;
 # mount /dev/sda1 ''/punto_di_mount'' -o degraded&lt;br /&gt;
 # btrfs device stats ''/punto_di_mount''&lt;br /&gt;
 # btrfs filesystem show ''/punto_di_mount''&lt;br /&gt;
 # btrfs device usage ''/punto_di_mount''&lt;br /&gt;
&lt;br /&gt;
Ipotizzando che '''1''' sia l'ID del disco danneggiato secondo i comandi dati in precedenza&lt;br /&gt;
 # btrfs replace start '''1''' /dev/sdc1 ''/punto_di_mount''&lt;br /&gt;
&lt;br /&gt;
Per monitorare lo stato di ripristino del raid&lt;br /&gt;
 # btrfs replace status ''/punto_di_mount''&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
 # btrfs device delete missing /mnt&lt;br /&gt;
&lt;br /&gt;
==== RAID 5 ====&lt;br /&gt;
{{Note&lt;br /&gt;
|type=warning &lt;br /&gt;
| text= '''ATTENZIONE il raid5 su BTRFS è considerato [https://btrfs.readthedocs.io/en/latest/btrfs-man5.html#raid56-status-and-recommended-practices non sicuro] e se ne sconsiglia il suo utilizzo'''&lt;br /&gt;
}}&lt;br /&gt;
==== RAID 1C ====&lt;br /&gt;
&lt;br /&gt;
===== RAID 1C3 =====&lt;br /&gt;
Se si desidera duplicare i dati rispettivamente 2 volte in modo da poter perdere fino a due dischi su 3 senza perdere dati è possibile utilizzare una modalità chiamata raid1c3&lt;br /&gt;
&lt;br /&gt;
Per creare ex novo il raid1c3&lt;br /&gt;
 # mkfs.btrfs -d raid1c3 -m raid1c3 /dev/sda1 /dev/sdb1 /dev/sdc1&lt;br /&gt;
&lt;br /&gt;
Per convertire a raid1c3&lt;br /&gt;
 # btrfs balance start -dconvert=raid1c3 -mconvert=raid1c3 /storage-btrfs/&lt;br /&gt;
&lt;br /&gt;
===== RAID 1C4 =====&lt;br /&gt;
Se si desidera duplicare i dati rispettivamente 3 volte in modo da poter perdere fino a 3 dischi su 4 senza perdere dati è possibile utilizzare una modalità chiamata raid1c4&lt;br /&gt;
&lt;br /&gt;
Per creare ex novo il raid1c3&lt;br /&gt;
 # mkfs.btrfs -d raid1c4 -m raid1c4 /dev/sda1 /dev/sdb1 /dev/sdc1&lt;br /&gt;
&lt;br /&gt;
Per convertire a raid1c4&lt;br /&gt;
 # btrfs balance start -dconvert=raid1c4 -mconvert=raid1c4 /storage-btrfs/&lt;br /&gt;
&lt;br /&gt;
== ZFS ==&lt;br /&gt;
===Installazione di modulo e le utility da AUR===&lt;br /&gt;
 # pacman-key -r F75D9D76&lt;br /&gt;
 # pacman-key --lsign-key F75D9D76&lt;br /&gt;
 $ pikaur -S zfs-utils zfs-dkms&lt;br /&gt;
&lt;br /&gt;
===Installazione di modulo e utility da archzfs===&lt;br /&gt;
Modificare le seguenti righe al file '''pacman.conf''' di archiso&lt;br /&gt;
 [archzfs-testing]&lt;br /&gt;
 Server = https://archzfs.com/$repo/$arch&lt;br /&gt;
&lt;br /&gt;
 # pacman-key -r DDF7DB817396A49B2A2723F7403BD972F75D9D76&lt;br /&gt;
 # pacman-key --lsign-key DDF7DB817396A49B2A2723F7403BD972F75D9D76&lt;br /&gt;
 # pacman -S zfs-utils zfs-linux&lt;br /&gt;
&lt;br /&gt;
===Configurare il FS===&lt;br /&gt;
[https://wiki.archlinux.org/title/ZFS Comandi] per ottenere informazioni utili sul filesystem e sui pool&lt;br /&gt;
 # zfs list -t  all&lt;br /&gt;
 # zpool status&lt;br /&gt;
 # zpool list&lt;br /&gt;
&lt;br /&gt;
Abilitare i vari servizi sul filesystem&lt;br /&gt;
 # systemctl enable zfs-zed.service&lt;br /&gt;
 # systemctl enable zfs-mount.service&lt;br /&gt;
 # systemctl enable zfs-share.service&lt;br /&gt;
 # systemctl enable zfs-import.target&lt;br /&gt;
 # systemctl enable zfs.target&lt;br /&gt;
&lt;br /&gt;
Creare un pool su un disco&lt;br /&gt;
 # zpool create &amp;quot;pool&amp;quot; sda&lt;br /&gt;
&lt;br /&gt;
Creare un pool su una partizione&lt;br /&gt;
 # zpool create &amp;quot;pool&amp;quot; sda2&lt;br /&gt;
&lt;br /&gt;
Importare un pool&lt;br /&gt;
 # zpool import &amp;quot;pool&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Aggiungere pool alla cache per auto-import e mount (abilitare i vari demoni zfs)&lt;br /&gt;
 # zpool set cachefile=/etc/zfs/zpool.cache &amp;quot;pool&amp;quot;&lt;br /&gt;
&lt;br /&gt;
oppure si possono caricare i mountpoint in modalità legacy dall'fstab&lt;br /&gt;
 # zfs create -o mountpoint=legacy ''pool''/directory&lt;br /&gt;
&lt;br /&gt;
Aggiungere la compressione&lt;br /&gt;
 # zfs get compression ''pool''&lt;br /&gt;
 # zfs set compression=lz4 ''pool''&lt;br /&gt;
&lt;br /&gt;
Vedere le proprietà di un ''pool''&lt;br /&gt;
 # zfs get all ''zpool''&lt;br /&gt;
&lt;br /&gt;
==== RAID ====&lt;br /&gt;
Creare un pool in raid0&lt;br /&gt;
 # zpool create &amp;quot;pool&amp;quot; /dev/sdb /dev/sdc&lt;br /&gt;
&lt;br /&gt;
Creare un pool in raid1&lt;br /&gt;
 # zpool create &amp;quot;pool&amp;quot; mirror /dev/sdb /dev/sc&lt;br /&gt;
&lt;br /&gt;
Creare un pool ''raid5'' su più dischi&lt;br /&gt;
 # zpool create &amp;quot;pool&amp;quot; raidz /dev/sdb /dev/sdc /dev/sdd&lt;br /&gt;
&lt;br /&gt;
Creare un pool raid5 su immagini&lt;br /&gt;
 # zpool create &amp;quot;pool&amp;quot; raidz /path/1.img /path/2.img /path/3.img&lt;br /&gt;
&lt;br /&gt;
* [https://docs.oracle.com/cd/E19253-01/819-5461/gbbvf/index.html Sostituire] disco in raid&lt;br /&gt;
&lt;br /&gt;
Rimuovere il disco da sostituire&lt;br /&gt;
 # zpool offline disco1&lt;br /&gt;
&lt;br /&gt;
Inserire il nuovo disco&lt;br /&gt;
 # zpool replace &amp;quot;pool&amp;quot; disco1&lt;br /&gt;
 # zpool online disco1&lt;br /&gt;
&lt;br /&gt;
* Utilizza un altro disco montato al posto di quello danneggiato&lt;br /&gt;
 # zpool replace &amp;quot;pool&amp;quot; disco1 disco2&lt;br /&gt;
&lt;br /&gt;
Aggiungere uno o più dischi ad un pool&lt;br /&gt;
 # zpool add &amp;quot;pool&amp;quot; mirror disco3 disco4&lt;br /&gt;
 # zpool add &amp;quot;pool&amp;quot; raidz disco3 disco4 disco5&lt;br /&gt;
&lt;br /&gt;
Rimuovere disco1 da pool se aggiunto erroneamente&lt;br /&gt;
 # zpool remove &amp;quot;pool&amp;quot; disco1&lt;br /&gt;
&lt;br /&gt;
Controllare lo stato di un pool&lt;br /&gt;
 # zpool status&lt;br /&gt;
&lt;br /&gt;
Correggere eventuali errori&lt;br /&gt;
 # zpool clear ''pool'' ''disco''&lt;br /&gt;
 # zpool scrub  ''pool''&lt;br /&gt;
&lt;br /&gt;
=== Root filesystem ===&lt;br /&gt;
* Guida ufficiale [https://openzfs.github.io/openzfs-docs/Getting%20Started/Arch%20Linux/Root%20on%20ZFS/1-preparation.html Root on ZFS]&lt;br /&gt;
&lt;br /&gt;
Per prima cosa organizzare la tabella delle partizioni del [[#Preparazione_del_disco | disco]]&lt;br /&gt;
&lt;br /&gt;
Formattare la partizione e creare il dataset (senza mountpoint)&lt;br /&gt;
 # zpool create -m none rpool ''sda2''&lt;br /&gt;
 &lt;br /&gt;
Smontare il pool e rimontarlo in modalità legacy &lt;br /&gt;
 # zfs create -o mountpoint=none rpool/ROOT&lt;br /&gt;
 # zfs create -o mountpoint=legacy rpool/ROOT/arch&lt;br /&gt;
 # zpool set bootfs=rpool/ROOT/arch rpool&lt;br /&gt;
 # mount -t zfs rpool/ROOT /mnt&lt;br /&gt;
''rpool'' è il nome che abbiamo voluto dare al volume contenente il filesystem di sistema&lt;br /&gt;
&lt;br /&gt;
NB: se NON si usa il mountpoint in modalità legacy occorrerà impostare &amp;lt;code&amp;gt;canmount=noauto&amp;lt;/code&amp;gt; su tutti i dataset con &amp;lt;code&amp;gt;mountpoint=/&amp;lt;/code&amp;gt; (es.: zfs create -o mountpoint=/ -o canmount=noauto rpool/ROOT/arch) altrimenti il sistema cercherà di eseguirne automaticamente l'automount e fallirà se esistono più filesystem da montare su /&lt;br /&gt;
&lt;br /&gt;
Se volessimo aggiungere altri pool es.:&lt;br /&gt;
 # zfs create rpool/home&lt;br /&gt;
 # zfs create rpool/arch/pkg&lt;br /&gt;
 # zfs create rpool/var&lt;br /&gt;
 # zfs create rpool/srv&lt;br /&gt;
&lt;br /&gt;
Configurare la cache degli zpool&lt;br /&gt;
 # zpool set cachefile=/etc/zfs/rpool.cache rpool &lt;br /&gt;
&lt;br /&gt;
Copiare il file di cache nel sistema dove dovremo eseguire il chroot per l'installazione.&lt;br /&gt;
 # mkdir -p /mnt/etc/zfs&lt;br /&gt;
 # cp /etc/zfs/rpool.cache /mnt/etc/zfs/rpool.cache&lt;br /&gt;
&lt;br /&gt;
Installare il sistema di base&lt;br /&gt;
 # pacstrap -K /mnt base linux linux-firmware zfs-utils zfs-linux&lt;br /&gt;
&lt;br /&gt;
Altri pacchetti consigliati&lt;br /&gt;
 # pacstrap -K /mnt base-devel net-tools networkmanager nano zsh grml-zsh-config busybox&lt;br /&gt;
&lt;br /&gt;
Eseguire il chroot per procedere con l'installazione&lt;br /&gt;
 # arch-chroot /mnt&lt;br /&gt;
&lt;br /&gt;
Configurare il mountpoint su fstab&lt;br /&gt;
/etc/fstab &lt;br /&gt;
 rpool/ROOT/arch      /       zfs         noatime     0 0&lt;br /&gt;
&lt;br /&gt;
Editare il file /etc/mkinitcpio.conf aggiungendo zfs prima del filesystem&lt;br /&gt;
 HOOKS=&amp;quot;base udev autodetect modconf block keyboard zfs filesystems&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Abilitare i servizi per ZFS all'avvio&lt;br /&gt;
 # systemctl enable zfs-zed.service&lt;br /&gt;
 # systemctl enable zfs-mount.service&lt;br /&gt;
 # systemctl enable zfs-share.service&lt;br /&gt;
 # systemctl enable zfs-import.target&lt;br /&gt;
 # systemctl enable zfs.target&lt;br /&gt;
&lt;br /&gt;
Impostare una password di root&lt;br /&gt;
 # passwd&lt;br /&gt;
&lt;br /&gt;
Ricreare il ramdisk col supporto per ZFS&lt;br /&gt;
 # mkinitcpio -p linux&lt;br /&gt;
&lt;br /&gt;
Installare il [[Appunti_Arch_Linux#BOOT_LOADER|Boot Loader]]&lt;br /&gt;
&lt;br /&gt;
Uscire dal chroot e terminazione dell'installazione&lt;br /&gt;
 # exit&lt;br /&gt;
 # zfs unmount -a&lt;br /&gt;
 # cp /etc/zfs/rpool.cache /mnt/etc/zfs/rpool.cache&lt;br /&gt;
 # zpool export rpool&lt;br /&gt;
 # reboot&lt;br /&gt;
&lt;br /&gt;
==== BOOT LOADER ====&lt;br /&gt;
===== ZFSBootMenu =====&lt;br /&gt;
Per gestire a meglio gli snapshot e la clonazione dei pool è consigliabile utilizzare, su PC che supportano UEFI, il boot loader [https://docs.zfsbootmenu.org/en/latest/guides/alpine/uefi.html ZFSBootMenu].&lt;br /&gt;
&lt;br /&gt;
Esportiamo le variabile per configurare il primo disco /dev/sda come disco di avvio&lt;br /&gt;
 # export BOOT_DISK=&amp;quot;/dev/sda&amp;quot;&lt;br /&gt;
 # export BOOT_PART=&amp;quot;1&amp;quot;&lt;br /&gt;
 # export BOOT_DEVICE=&amp;quot;${BOOT_DISK}${BOOT_PART}&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Assicuriamoci che il nostro pool di root sia configurato come avviabile&lt;br /&gt;
 # zpool set bootfs=''rpool/ROOT/'' ''rpool''&lt;br /&gt;
&lt;br /&gt;
Formattiamo sda1 per creare la partizione EFI di boot&lt;br /&gt;
 # mkfs.vfat -F32 &amp;quot;$BOOT_DEVICE&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Aggiungiamola all'fstab e montiamola&lt;br /&gt;
 # cat &amp;lt;&amp;lt; EOF &amp;gt;&amp;gt; /etc/fstab&lt;br /&gt;
 $BOOT_DEVICE /boot/efi vfat defaults 0 0&lt;br /&gt;
 EOF&lt;br /&gt;
&lt;br /&gt;
 # mkdir -p /boot/efi&lt;br /&gt;
 # mount /boot/efi&lt;br /&gt;
&lt;br /&gt;
Scarichiamo ed installiamo il boot loader&lt;br /&gt;
 # mkdir -p /boot/efi/EFI/ZBM&lt;br /&gt;
 # curl -o /boot/efi/EFI/ZBM/VMLINUZ.EFI -L https://get.zfsbootmenu.org/efi&lt;br /&gt;
 # cp /boot/efi/EFI/ZBM/VMLINUZ.EFI /boot/efi/EFI/ZBM/VMLINUZ-BACKUP.EFI&lt;br /&gt;
&lt;br /&gt;
Forziamo zfsbootmenu a montare il nostro dataset con i permessi di scrittura&lt;br /&gt;
 # zfs set org.zfsbootmenu:commandline=&amp;quot;quiet loglevel=4 rw&amp;quot; rpool/ROOT&lt;br /&gt;
&lt;br /&gt;
Installiamo e configuriamo  ''efibootmgr''&lt;br /&gt;
 # pacman -S efibootmgr&lt;br /&gt;
&lt;br /&gt;
 # efibootmgr -c -d &amp;quot;$BOOT_DISK&amp;quot; -p &amp;quot;$BOOT_PART&amp;quot; \&lt;br /&gt;
  -L &amp;quot;ZFSBootMenu (Backup)&amp;quot; \&lt;br /&gt;
  -l \\EFI\\ZBM\\VMLINUZ-BACKUP.EFI&lt;br /&gt;
&lt;br /&gt;
 # efibootmgr -c -d &amp;quot;$BOOT_DISK&amp;quot; -p &amp;quot;$BOOT_PART&amp;quot; \&lt;br /&gt;
  -L &amp;quot;ZFSBootMenu&amp;quot; \&lt;br /&gt;
  -l \\EFI\\ZBM\\VMLINUZ.EFI&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Se si utilizza un pool distribuito su più dischi (RAID1 o RAIDZ) occorrerà installare il bootloader anche sugli altri dispositivi (nel caso del disco /dev/sdb).&lt;br /&gt;
&lt;br /&gt;
 # mount /dev/sdb1 /boot/efi&lt;br /&gt;
 # curl -o /boot/efi/EFI/ZBM/VMLINUZ.EFI -L https://get.zfsbootmenu.org/efi&lt;br /&gt;
 # efibootmgr -c -d &amp;quot;$BOOT_DISK&amp;quot; -p &amp;quot;$BOOT_PART&amp;quot; \&lt;br /&gt;
  -L &amp;quot;ZFSBootMenu sdb&amp;quot; \&lt;br /&gt;
  -l \\EFI\\ZBM\\VMLINUZ.EFI&lt;br /&gt;
&lt;br /&gt;
===== GRUB =====&lt;br /&gt;
Se non ci interessa gestire snapshot o utilizziamo un PC con BIOS è possibile optare per GRUB &lt;br /&gt;
 # pacman -S grub&lt;br /&gt;
 # grub-install /dev/sda&lt;br /&gt;
 (se si usa un pool composto da più dischi es. raidz per il filesystem di root è consigliabile installare grub su tutti i dischi: sda, sdb, sdc, sdd...)&lt;br /&gt;
 # grub-mkconfig -o /boot/grub/grub.cfg&lt;br /&gt;
&lt;br /&gt;
Esempio&lt;br /&gt;
 #Grub entry&lt;br /&gt;
 menuentry 'Arch Linux'{&lt;br /&gt;
       insmod gzio&lt;br /&gt;
       insmod part_gpt&lt;br /&gt;
       insmod zfs&lt;br /&gt;
       set root='hd0,gpt3'&lt;br /&gt;
        echo    'Loading Linux linux ...'&lt;br /&gt;
        linux   /ROOT@/boot/vmlinuz-linux root=ZFS=rpool/ROOT rw  loglevel=3 quiet&lt;br /&gt;
        echo    'Loading initial ramdisk ...'&lt;br /&gt;
        initrd  /ROOT@/boot/initramfs-linux.img&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
=== Snapshot ===&lt;br /&gt;
Snapshot del dataset ROOT&lt;br /&gt;
 # zfs snapshot -r rpool/ROOT''@snapshot-2023-03-07''&lt;br /&gt;
&lt;br /&gt;
Lista degli snapshot presenti&lt;br /&gt;
 # zfs list -t snapshot&lt;br /&gt;
&lt;br /&gt;
Ripristino dello snapshot&lt;br /&gt;
 # zfs rollback rpool''@snapshot-2023-03-07''&lt;br /&gt;
&lt;br /&gt;
Oltre che servire per il ripristino, possono essere montati per esplorarne il contenuto, ma non è possibile modificarlo.&lt;br /&gt;
 # mount -t zfs rpool@''2023-04-11'' /mnt/''snapshot''&lt;br /&gt;
&lt;br /&gt;
Copia locale di un dataset&lt;br /&gt;
 # zfs send -R rpool/ROOT''@snapshot-2023-03-07'' | zfs recv -F rpool/ROOT/backup&lt;br /&gt;
&lt;br /&gt;
Invio via SSH di una snapshot&lt;br /&gt;
 # zfs send -R rpool/ROOT''@snapshot-2023-03-07''| ssh ''user@ip_address'' zfs recv tank/backups/rootzfs&lt;br /&gt;
&lt;br /&gt;
Backup locale di una snapshot&lt;br /&gt;
 # zfs send -R rpool/ROOT@snapshot | gzip &amp;gt; /tmp/zfs_backup.gz&lt;br /&gt;
&lt;br /&gt;
Restore del backup&lt;br /&gt;
 # gzcat /tmp/zfs_backup.gz | zfs recv -F rpool/ROOT&lt;br /&gt;
&lt;br /&gt;
==== Clone ====&lt;br /&gt;
Se vogliamo eseguire operazioni di scrittura su una snapshot occorre effettuare un clone del dataset&lt;br /&gt;
 # zfs snapshot ''rpool/home''@yesterday&lt;br /&gt;
 # zfs clone ''rpool/home''@yesterday rpool/new_home&lt;br /&gt;
&lt;br /&gt;
Per sostituire il filesystem principale col clone&lt;br /&gt;
 # zfs promote rpool/new_home&lt;br /&gt;
&lt;br /&gt;
=== ZFS Cifrato ===&lt;br /&gt;
Creare un dataset cifrato con password&lt;br /&gt;
 # zfs create -o encryption=on -o keyformat=''password'' ''nomepool''/''nomedataset''&lt;br /&gt;
&lt;br /&gt;
Generazione di una chiave di cifratura&lt;br /&gt;
 # dd if=/dev/random of=/path/to/key bs=1 count=32&lt;br /&gt;
&lt;br /&gt;
Creare un dataset cifrato con una chiave di cifratura &lt;br /&gt;
 # zfs create -o encryption=on -o keyformat=raw -o keylocation=''file:///directory/della/chiave'' ''nomepool''/''nomedataset''&lt;br /&gt;
&lt;br /&gt;
Controllare il percorso della chiave per ''nomepool''/''nomedataset''&lt;br /&gt;
 # zfs get keylocation ''nomepool''/''nomedataset''&lt;br /&gt;
&lt;br /&gt;
Cambiare il percorso della chiave&lt;br /&gt;
 # zfs set keylocation=''file:///nuova/directory/della/chiave'' ''nomepool''/''nomedataset''&lt;br /&gt;
&lt;br /&gt;
Caricare manualmente le chiavi di cifratura prima del montaggio&lt;br /&gt;
 # zfs load-key ''nomepool''/''nomedataset'' # carica la chiave del determinato dataset&lt;br /&gt;
 # zfs load-key -a # carica tutte le chiavi del filesystem&lt;br /&gt;
&lt;br /&gt;
==== Unlock con systemd ====&lt;br /&gt;
Creare script per il caricamento delle chiavi all'avvio &lt;br /&gt;
&lt;br /&gt;
* Caricando la password dal keyfile&lt;br /&gt;
''/etc/systemd/system/zfs-loadkey-file.service''&lt;br /&gt;
&lt;br /&gt;
 [Unit]&lt;br /&gt;
 Description=Load ZFS encryption keys&lt;br /&gt;
 DefaultDependencies=no&lt;br /&gt;
 After=zfs-import.target&lt;br /&gt;
 Before=zfs-mount.service&lt;br /&gt;
 [Service]&lt;br /&gt;
 Type=oneshot&lt;br /&gt;
 RemainAfterExit=yes&lt;br /&gt;
 ExecStart=/usr/sbin/zfs load-key -a&lt;br /&gt;
 StandardInput=tty-force&lt;br /&gt;
 [Install]&lt;br /&gt;
 WantedBy=zfs-mount.service&lt;br /&gt;
&lt;br /&gt;
* Digitando la password&lt;br /&gt;
&lt;br /&gt;
''/etc/systemd/system/zfs-load-key@.service''&lt;br /&gt;
 [Unit]&lt;br /&gt;
 Description=Load %I encryption keys&lt;br /&gt;
 Before=systemd-user-sessions.service zfs-mount.service&lt;br /&gt;
 After=zfs-import.target&lt;br /&gt;
 Requires=zfs-import.target&lt;br /&gt;
 DefaultDependencies=no&lt;br /&gt;
 [Service]&lt;br /&gt;
 Type=oneshot&lt;br /&gt;
 RemainAfterExit=yes&lt;br /&gt;
 ExecStart=/bin/sh -c 'until (systemd-ask-password &amp;quot;Encrypted ZFS password for %I&amp;quot; --no-tty | zfs load-key %I); do echo &amp;quot;Try again!&amp;quot;; done'&lt;br /&gt;
 [Install]&lt;br /&gt;
 WantedBy=zfs-mount.service&lt;br /&gt;
&lt;br /&gt;
==== Unlock al login ====&lt;br /&gt;
Impostare il filesystem in modalità legacy così che non sia montato automaticamente all'avvio&lt;br /&gt;
 # zfs set mountpoint=legacy zroot/data/&lt;br /&gt;
&lt;br /&gt;
Modificare il file /etc/fstab&lt;br /&gt;
 zroot/data/         /home           zfs             rw,xattr,posixacl,noauto        0 0&lt;br /&gt;
&lt;br /&gt;
Creare il seguente script: &amp;lt;code&amp;gt;/sbin/mount-zfs-homedir&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 #&lt;br /&gt;
 set -eu&lt;br /&gt;
 # Password is given to us via stdin, save it in a variable for later&lt;br /&gt;
 PASS=$(cat -)&lt;br /&gt;
 #&lt;br /&gt;
 VOLNAME=&amp;quot;zroot/data/home&amp;quot;&lt;br /&gt;
 #&lt;br /&gt;
 # Unlock and mount the volume&lt;br /&gt;
 zfs load-key &amp;quot;$VOLNAME&amp;quot; &amp;lt;&amp;lt;&amp;lt; &amp;quot;$PASS&amp;quot; || continue&lt;br /&gt;
 zfs mount &amp;quot;$VOLNAME&amp;quot; || true # ignore errors&lt;br /&gt;
&lt;br /&gt;
Aggiungere lo script a PAM: /etc/pam.d/system-auth&lt;br /&gt;
&lt;br /&gt;
 auth       optional                    pam_exec.so          expose_authtok /sbin/mount-zfs-homedir&lt;br /&gt;
&lt;br /&gt;
=== Cache ===&lt;br /&gt;
Utilizzare un moderno disco a stato solido può essere una soluzione economica per velocizzare un pool, eventualmente anche raid&lt;br /&gt;
&lt;br /&gt;
 # zpool add -f ''rpool'' cache /dev/sdd1&lt;br /&gt;
 # zpool add -f ''rpool'' log /dev/sdd2&lt;br /&gt;
&lt;br /&gt;
=== Sharing ===&lt;br /&gt;
Non è molto noto, ma ZFS ha integrati dei [https://docs.oracle.com/cd/E36784_01/html/E36835/gayne.html#scrolltoc comandi] per permettere la condivisione del filesystem con altre macchine tramite i protocolli NFS o SMB.&lt;br /&gt;
&lt;br /&gt;
Premessa: occorrerà attivare il server NFS&lt;br /&gt;
 # systemctl start nfs-server.service&lt;br /&gt;
 # systemctl enable nfs-server.service&lt;br /&gt;
&lt;br /&gt;
Condividere tramite NFS l'intero pool ''home''&lt;br /&gt;
 # zfs set share.nfs=on ''pool''/home&lt;br /&gt;
&lt;br /&gt;
Verificare la condivisione&lt;br /&gt;
 # zfs get -r share.nfs ''pool''/home&lt;br /&gt;
 NAME             PROPERTY   VALUE  SOURCE&lt;br /&gt;
 pool/home        share.nfs  on     local&lt;br /&gt;
&lt;br /&gt;
Condividere tramite NFS la directory home dell'utente 1, 2...&lt;br /&gt;
 # zfs create ''pool''/home/'''utente1'''&lt;br /&gt;
 # zfs create ''pool''/home/'''utente2'''&lt;br /&gt;
&lt;br /&gt;
Si possono specificare opzioni di montaggio per i permessi sul mount&lt;br /&gt;
 # zfs set share.nfs.nosuid=on ''pool''/home/'''utente1'''&lt;br /&gt;
 # zfs set share.nfs=on ''pool''/home/'''utente1'''&lt;br /&gt;
&lt;br /&gt;
Condividere una directory con tutta la rete&lt;br /&gt;
 # zfs share -o share.nfs=on -o share.nfs.public=on pool/public%pubshare&lt;br /&gt;
&lt;br /&gt;
Condividere una directory con una parte della rete&lt;br /&gt;
 # zfs set share.nfs='rw=@192.0.10.0/16,rw=@192.0.11.0/24' pool/public%pubshare&lt;br /&gt;
&lt;br /&gt;
Disabilitare temporaneamente una condivisione&lt;br /&gt;
 # zfs unshare pool/home/''nomeshare''&lt;br /&gt;
&lt;br /&gt;
Rimuovere una condivisione&lt;br /&gt;
 # zfs set share.nfs=off pool/''share''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Montare share ===&lt;br /&gt;
Montare il volume pool1 della macchina con IP 192.168.0.2 su /mnt/pool1&lt;br /&gt;
 # mount -t nfs 192.168.0.2:/pool1 /mnt/pool1&lt;br /&gt;
&lt;br /&gt;
Aggiungere la seguente riga al file '''/etc/fstab''' per automatizzare il montaggio&lt;br /&gt;
 192.168.0.2:/pool1      /mnt/pool1      nfs       defaults          0          0&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== SWAP ===&lt;br /&gt;
Creare una partizione swap da 8 GiB&lt;br /&gt;
 # zfs create -V 8G '''&amp;lt;pool&amp;gt;/swap'''&lt;br /&gt;
&lt;br /&gt;
Formattazione della partizione&lt;br /&gt;
 # mkswap -f /dev/zvol/&amp;lt;pool&amp;gt;/swap&lt;br /&gt;
&lt;br /&gt;
Attivazione della swap&lt;br /&gt;
 # swapon /dev/zvol/&amp;lt;pool&amp;gt;/swap&lt;br /&gt;
&lt;br /&gt;
Aggiungere la swap al &amp;lt;code&amp;gt;/etc/fstab&amp;lt;/code&amp;gt;&lt;br /&gt;
 '''/dev/zvol/&amp;lt;pool&amp;gt;/swap''' none swap discard 0 0&lt;br /&gt;
&lt;br /&gt;
== Filesystem Cifrato ==&lt;br /&gt;
Esistono molti modi per cifrare volumi e file su Linux, come si può vedere da questa [https://wiki.archlinux.org/title/Data-at-rest_encryption#Comparison_table tabella]&lt;br /&gt;
&lt;br /&gt;
* Generare una password di 32 caratteri alfanumerici con /dev/random. &lt;br /&gt;
 cat /dev/random | tr -dc '[:alnum:]' | fold -w 32 | head -n 1&lt;br /&gt;
&lt;br /&gt;
=== EncFS ===&lt;br /&gt;
Cifrare una directory può essere un'alternativa alla cifratura di un intera partizione come avviene invece con Cryptsetup. EncFS è un filesystem user-space montabile tramite FUSE che permette di effettuare questa operazione. Rispetto ad un filesystem loopback criptato ci sono però diversi pregi e difetti.&lt;br /&gt;
&lt;br /&gt;
* Pro&lt;br /&gt;
# Selezionare selettivamente i contenuti da cifrare, rispetto ad avere un device completamente cifrato, appesantisce meno il lavoro della CPU specialmente quando si utilizzano processori datati privi del set di istruzioni AES.&lt;br /&gt;
# Dimensioni modificabili: un file system vuoto EncFS è composto da qualche dozzina di byte e può crescere a qualsiasi dimensione senza bisogno di essere riformattato. Con un dispositivi di cifratura a blocchi, si alloca un filesystem in anticipo con le dimensioni desiderate.&lt;br /&gt;
# Possibilità di backup incrementali: Un filesystem EncFS può essere salvato con una politica per file. Un programma di backup è in grado di rilevare quali file sono cambiati, anche se non sarà in grado di decifrarli.&lt;br /&gt;
# Permette di aggiungere la crittografia a qualsiasi filesystem&lt;br /&gt;
# Lavora a livello utente, non richiede permessi di amministratore&lt;br /&gt;
&lt;br /&gt;
* Contro&lt;br /&gt;
# Non permette di cifrare l'intera installazione, ma solo i file selezionati&lt;br /&gt;
# Chi ha accesso ai file crittografati può conoscerne i meta-dati (numero di file, permessi, dimensione)&lt;br /&gt;
# EncFS sembra non sia più attivamente mantenuto. Un'alternativa molto simile potrebbe essere gocryptfs.&lt;br /&gt;
&lt;br /&gt;
==== Montaggio automatico ====&lt;br /&gt;
Dato che non è possibile passare opzioni all'eseguibile encfs su fstab è necessario creare un wrapper, cioè uno script da rendere eseguibile (es. &amp;lt;code&amp;gt;/home/user/encfs.sh&amp;lt;/code&amp;gt;) che vada a recuperare la password da un file (es. ''encfs_password''), magari contenuto in una chiavetta USB anch'essa montata automaticamente all'avvio.&lt;br /&gt;
&lt;br /&gt;
Wrapper&lt;br /&gt;
 #!/bin/sh&lt;br /&gt;
 encfs --public --extpass=&amp;quot;cat /mnt/USB/encfs_password&amp;quot; $*&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
A questo punto è possibile aggiungere all'''/etc/fstab'' le seguenti righe.&lt;br /&gt;
 # Montaggio automatico della penna USB ''cafebabe-b00b5-deadbee'' all'avvio&lt;br /&gt;
 UUID=cafebabe-b00b5-deadbeef /mnt/USB auto defaults,auto 0 0&lt;br /&gt;
 # Richiamo del wrapper &lt;br /&gt;
 /home/''user''/encfs.sh#/home/''user''/.encrypted /home/''user''/decrypted fuse rw,user,auto 0 0&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== gocryptfs ===&lt;br /&gt;
Creare una directory cifrata ''crypt'' e montarla su ''dati''&lt;br /&gt;
 $ mkdir crypt dati&lt;br /&gt;
 $ gocryptfs -init crypt&lt;br /&gt;
 $ gocryptfs crypt dati&lt;br /&gt;
&lt;br /&gt;
Creare una versione cifrata di una preesistente home&lt;br /&gt;
&lt;br /&gt;
 $ mkdir /home/user.crypt&lt;br /&gt;
 $ gocryptfs -init -reverse /home/user&lt;br /&gt;
 $ gocryptfs -reverse /home/user /home/user.crypt&lt;br /&gt;
&lt;br /&gt;
È possibile aggiungere una linea simile alle seguente al file '''/etc/fstab''' per automatizzare il sistema di montaggio di una cartella cifrata durante il boot utilizzando un keyfile.&lt;br /&gt;
&lt;br /&gt;
 /home/user/cipher /home/user/plain fuse./usr/bin/gocryptfs nofail,allow_other,passfile=/tmp/password 0 0&lt;br /&gt;
&lt;br /&gt;
=== [https://wiki.archlinux.org/title/ECryptfs ECryptfs] ===&lt;br /&gt;
&lt;br /&gt;
=== VeraCrypt ===&lt;br /&gt;
[https://www.veracrypt.fr VeraCrypt] (fork di TrueCrypt) è un tool opensource dotato di '''interfaccia grafica''' che permette di configurare la cifratura di volumi reali o file immagini montate in loop. Ha una funzione particolare, chiamata '''Hidden Volume''' che permette di creare un volume nascosto all'interno di un normale volume VeraCrypt al quale si può accedere con una diversa password così da evitare in caso di necessità (ricatto, fidanzata/moglie gelosa, imposizione da parte delle forze dell'ordine) di mostrare il contenuto del reale archivio cifrato.&lt;br /&gt;
&lt;br /&gt;
=== LUKS ===&lt;br /&gt;
Questo strumento permette di crittografare un intero disco o una partizione, es. /dev/'''sdc2''':&lt;br /&gt;
 &lt;br /&gt;
 # cryptsetup luksFormat --cipher aes-xts-plain64 --key-size 512 --hash sha512 --iter-time 5000 /dev/'''sdc2'''&lt;br /&gt;
 &lt;br /&gt;
Una volta formattato il device è possibile montarlo, verrà chiesto di creare una password a meno che nel comando non venga esplicitato un file con la chiave di cifratura&lt;br /&gt;
 # cryptsetup open /dev/'''sdc2''' lukspart&lt;br /&gt;
&lt;br /&gt;
Adesso è possibile formattare il device col filesystem che preferiamo&lt;br /&gt;
 # mkfs.btrfs /dev/mapper/lukspart&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[https://wiki.golem.linux.it/Installare_Arch_Linux_in_una_partizione_cifrata How-to GOLEM]&lt;br /&gt;
&lt;br /&gt;
[https://guide.debianizzati.org/index.php/Volumi_criptati_LUKS_-_Creazione_e_uso_con_cryptmount How-to Debianizzati]&lt;br /&gt;
&lt;br /&gt;
=== fscrypt ===&lt;br /&gt;
È un sistema di cifratura progettato per lavorare con filesystem moderni che supportano direttamente la crittografia nativa come ext4, F2FS, UBIFS, CephFS e forse in futuro anche btrfs. &lt;br /&gt;
&lt;br /&gt;
Abilitiamo la crittografia su una directory di un device '''sdc1''' precedentemente formattato con ext4&lt;br /&gt;
 # fscrypt setup /mnt/encrypted&lt;br /&gt;
 # tune2fs -O encrypt /dev/'''sdc1'''&lt;br /&gt;
 # fscrypt encrypt /mnt/encrypted&lt;br /&gt;
&lt;br /&gt;
Per accedere alla directory al riavvio successivo&lt;br /&gt;
 # fscrypt unlock /mnt/encrypted&lt;br /&gt;
&lt;br /&gt;
=== ZFS ===&lt;br /&gt;
Creiamo un pool dove mettere il dataset cifrato, es.: '''tank/encrypted_data'''&lt;br /&gt;
 # zpool create tank /dev/sdc3&lt;br /&gt;
&lt;br /&gt;
Creiamo il dataset&lt;br /&gt;
 # zfs create -o encryption=aes-256-gcm -o keyformat=passphrase -o keylocation=prompt '''tank/encrypted_data'''&lt;br /&gt;
 &lt;br /&gt;
Montiamo il datasett&lt;br /&gt;
  # zfs mount '''tank/encrypted_data'''&lt;br /&gt;
&lt;br /&gt;
Montiamo pool e dataset cifrato al riavvio successivo &lt;br /&gt;
 # zpool import tank&lt;br /&gt;
 # zfs load-key '''tank/encrypted_data'''&lt;br /&gt;
 # zfs mount '''tank/encrypted_data'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Appunti_Arch_Linux#ZFS_Cifrato|ZFS cifrato]]&lt;br /&gt;
&lt;br /&gt;
= RAID mdadm =&lt;br /&gt;
Su Linux era possibile effettuare RAID via software anche prima dell'avvento di filesystem di nuova generazione come btrfs o zfs. Per fare ciò è possibile utilizzare il comando &amp;lt;code&amp;gt;mdadm&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Vedere l'organizzazione della tabella delle partizioni dei dischi&lt;br /&gt;
 $ lsblk&lt;br /&gt;
&lt;br /&gt;
 sda      8:16   0 447.1G  0 disk &lt;br /&gt;
 ├─sda1   8:17   0   500M  0 part &lt;br /&gt;
 ├─sda2   8:18   0    16G  0 part [SWAP]&lt;br /&gt;
 └─sda3   8:19   0 430.6G  0 part /&lt;br /&gt;
                                 &lt;br /&gt;
 sdb      8:32   1   3.7G  0 disk &lt;br /&gt;
 ├─sdb1   8:33   1   3.5G  0 part &lt;br /&gt;
 ├─sdb2   8:34   1   239M  0 part [SWAP]&lt;br /&gt;
 └─sdb3   8:19   0 430.6G  0 part /&lt;br /&gt;
&lt;br /&gt;
Nell'esempio ci sono due dischi (sda, sdb) contenenti 3 partizioni: EFI, SWAP e Linux.&lt;br /&gt;
&lt;br /&gt;
== RAID 0 ==&lt;br /&gt;
Creare un volume ''md3'' che costituito dalla somma delle due partizioni sda3 e sdb3&lt;br /&gt;
 # mdadm --create --verbose /dev/md3 --level=0 --raid-devices=2 /dev/sda3 /dev/sdb3&lt;br /&gt;
&lt;br /&gt;
Verificare che il raid funzioni correttamente&lt;br /&gt;
 # mdadm --detail /dev/md0&lt;br /&gt;
&lt;br /&gt;
Utilizzare il nuovo volume md3, formattato col filesystem XFS, per una nuova installazione di Arch Linux (montandolo in /mnt)&lt;br /&gt;
 # mkfs.xfs /dev/md3&lt;br /&gt;
 # mount /dev/md3 /mnt/&lt;br /&gt;
&lt;br /&gt;
Per memorizzare l'array nel file di configurazione&lt;br /&gt;
 # mdadm –Es &amp;gt; /etc/mdadm.conf&lt;br /&gt;
&lt;br /&gt;
== RAID 1 ==&lt;br /&gt;
Creare un volume ''md3'' mirror delle due partizioni sda3 e sdb3&lt;br /&gt;
 # mdadm --create /dev/md3 /dev/sda3 /dev/sdb3 --level=1 --raid-devices=2&lt;br /&gt;
&lt;br /&gt;
== RAID 5 ==&lt;br /&gt;
Creare un volume ''md3'' con un [https://en.wikipedia.org/wiki/Standard_RAID_levels#RAID_5 raid5], ovviamente stavolta occorreranno almeno 3 dischi es.: sda3, sdb3, sdc3. &lt;br /&gt;
&lt;br /&gt;
Per creare tre partizioni tutte della stessa dimensione è possibile copiare su sdb e sdc la tabella delle partizioni di sda&lt;br /&gt;
 #  sfdisk -d /dev/sda | sfdisk /dev/sdb&lt;br /&gt;
 #  sfdisk -d /dev/sda | sfdisk /dev/sdc&lt;br /&gt;
&lt;br /&gt;
Creare l'array in raid5&lt;br /&gt;
 # mdadm --create /dev/md/md3 /dev/sda1 /dev/sdb1 /dev/sdc1 --level=5 --raid-devices=3 --bitmap=internal&lt;br /&gt;
&lt;br /&gt;
== Modificare l'array ==&lt;br /&gt;
È possibile passare da raid1 a raid5&lt;br /&gt;
 # mdadm --grow /dev/md3 --level=5&lt;br /&gt;
 # mdadm --grow /dev/md3 --add /dev/sdc3 --raid-devices=3&lt;br /&gt;
&lt;br /&gt;
== Accorgersi di un guasto ==&lt;br /&gt;
Nei raid 1 e 5 in caso di danneggiamento di un disco sarà possibile sostituirlo e ricostruire l'array senza perdere dati. Nell'ipotesi di avere un guasto su '''sdb''' in un raid1 comparirà qualcosa di simile a questo eseguendo &amp;lt;code&amp;gt;cat /proc/mdstat&amp;lt;/code&amp;gt;&lt;br /&gt;
 md3 : active raid1 sda3[1]&lt;br /&gt;
 ''blocks [2/2] [U_]'' &lt;br /&gt;
invece che&lt;br /&gt;
 md3 : active raid1 sda3[1] '''sdb3'''[0]&lt;br /&gt;
      262016 blocks [2/2] [UU]&lt;br /&gt;
&lt;br /&gt;
===Rimuovere il disco danneggiato dal RAID===&lt;br /&gt;
Si dovrà marcare sdb3 come danneggiata e andrà rimossa dall'array.&lt;br /&gt;
 # mdadm --manage /dev/md3 --fail /dev/sdb3&lt;br /&gt;
 # mdadm --manage /dev/md3 --remove /dev/sdb3&lt;br /&gt;
&lt;br /&gt;
Se avessimo più array (es. md1, md2...) contenenti partizioni del disco sdb (sdb1, sdb2...), l'operazione andrebbe ripetuta per ciascuno di essi es.:&lt;br /&gt;
 # mdadm --manage /dev/md1 --fail /dev/sdb1&lt;br /&gt;
 # mdadm --manage /dev/md1 --remove /dev/sdb1&lt;br /&gt;
&lt;br /&gt;
 #  cat /proc/mdstat&lt;br /&gt;
 Personalities : [linear] [multipath] [raid0] [raid1] [raid5] [raid4] [raid6] [raid10]&lt;br /&gt;
 md0 : active raid1 sda3[0]&lt;br /&gt;
 24418688 blocks [2/1] [U_]&lt;br /&gt;
&lt;br /&gt;
 unused devices: &amp;lt;none&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Sostituzione del disco danneggiato ===&lt;br /&gt;
Spegnere il computer, rimuovere il disco guasto e collegarne al suo posto uno funzionante.&lt;br /&gt;
&lt;br /&gt;
'''NB: il nuovo disco dovrà essere di dimensioni uguali o maggiori del disco sostituito'''&lt;br /&gt;
&lt;br /&gt;
Installato il nuovo disco, riaccendere il PC, loggarsi come root e ricreare sul nuovo sdb le stesse partizioni presenti su sda:&lt;br /&gt;
 # sfdisk -d /dev/sda | sfdisk /dev/sdb&lt;br /&gt;
 # fdisk -l ''(per controllare che le partizioni siano uguali)''&lt;br /&gt;
&lt;br /&gt;
=== Ripristino del RAID 1 ===&lt;br /&gt;
Aggiungere ''/dev/sdb3'' a ''/dev/md3''&lt;br /&gt;
 # mdadm --manage /dev/md3 --add /dev/sdb3&lt;br /&gt;
&lt;br /&gt;
Se avessimo più array (es. md1, md2...) contenenti partizioni del disco sdb (sdb1, sdb2...), l'operazione andrebbe ripetuta per ciascuno di essi es.:&lt;br /&gt;
  # mdadm --manage /dev/md1 --add /dev/sdb1&lt;br /&gt;
&lt;br /&gt;
Controllare che tutto sia andato a buon fine&lt;br /&gt;
 # cat /proc/mdstat&lt;br /&gt;
&lt;br /&gt;
= LVM =&lt;br /&gt;
Il [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 Logical Volume Manager] (LVM o gestore logico dei volumi) è un software per la gestione dei dischi che permette di superare le limitazioni legate al normale partizionamento di questi ultimi. Si tratta di una specie di ''strato'' che si va a frapporre tra il dispositivo fisico ed il filesystem. Permette di gestire dinamicamente aggiunta, rimozione o ridimensionamento dello spazio di archiviazione, il RAID, nonché lo snapshot dei volumi.&lt;br /&gt;
&lt;br /&gt;
LVM è un prodotto oltremodo maturo, disponibile per Linux sin dal kernel 2.4, per questa ragione distribuzioni orientate al mercato aziendale come RedHat lo hanno scelto, accoppiandolo a XFS o ext4, come soluzione predefinita per implementare la maggior parte delle caratteristiche fornite dai moderni filesystem come BTRFS o ZFS &lt;br /&gt;
&lt;br /&gt;
LVM si basa sui seguenti concetti&lt;br /&gt;
&lt;br /&gt;
* '''Physical Volumes (PV)''': rappresentano qualsiasi disco si voglia inizializzare (&amp;quot;formattare&amp;quot;) come sottosistema LVM&lt;br /&gt;
 # pvcreate /dev/sda1&lt;br /&gt;
 # pvcreate /dev/sdb3&lt;br /&gt;
 # pvcreate /dev/sdc&lt;br /&gt;
 # pvdisplay&lt;br /&gt;
&lt;br /&gt;
* '''Volume Groups (VG)''': sono costituiti da ''physical volumes'' e rappresentano la capacità totale delle risorse di un LVM&lt;br /&gt;
 # vgcreate vg0 /dev/sda1 /dev/sdb3 /dev/sdc&lt;br /&gt;
 # vgdisplay vg0&lt;br /&gt;
&lt;br /&gt;
* '''Logical Volumes (LV)''': utilizzano le risorse messe a disposizione dai ''volume groups''. Possono essere inizializzati anche con proprietà di RAID o cache.&lt;br /&gt;
 # lvcreate -L 10G -n ''home'' vg0&lt;br /&gt;
 # lvdisplay /dev/vg0/home&lt;br /&gt;
&lt;br /&gt;
Oppure nel caso volessimo fare un raid5&lt;br /&gt;
 # lvcreate -n lvr5 –type raid5 -L 10G -i 3 vg0&lt;br /&gt;
 &lt;br /&gt;
 -n ''nome del volume''&lt;br /&gt;
 –type raid5 ''tipo di raid''&lt;br /&gt;
 -L ''dimensione massima della grandezza del raid''&lt;br /&gt;
 -i ''numero dei physical volumes che si vogliono utilizzare''&lt;br /&gt;
&lt;br /&gt;
Per formattare il volume logico appena creato&lt;br /&gt;
 # mkfs -t ext4 /dev/vg0/lvr5&lt;br /&gt;
&lt;br /&gt;
Per aggiungere un disco ad un Volume Groups&lt;br /&gt;
 # vgextend vg0 /dev/sdb2&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Snapshot ==&lt;br /&gt;
Creare uno snapshot della del volume logico ''/home'' che potrà contenere fino ad un massimo di 5 GiB di dati modificati rispetto all'originale&lt;br /&gt;
 # lvcreate --size 5G --snapshot --name homesnap20230306 /dev/vg0/home&lt;br /&gt;
&lt;br /&gt;
Ripristinare il volume logico ricaricando lo snapshot&lt;br /&gt;
 # lvconvert --merge /dev/vg0/homesnap20230306&lt;br /&gt;
&lt;br /&gt;
Nel caso il logical volume sia attivo il merging avverrà col prossimo riavvio e lo snapshot sparirà.&lt;br /&gt;
&lt;br /&gt;
== Cache ==&lt;br /&gt;
Utilizzare un moderno disco a stato solido può essere una soluzione economica per velocizzare un LV.&lt;br /&gt;
&lt;br /&gt;
Convertire il disco a PV ed aggiungerlo al preesistente VG&lt;br /&gt;
 # pvcreate ''/dev/discoSSD''&lt;br /&gt;
 # vgextend vg0 ''/dev/discoSSD''&lt;br /&gt;
&lt;br /&gt;
Aggiungere la cache al LV&lt;br /&gt;
 # lvcreate --type cache --cachemode writethrough -l 100%FREE -n root_cachepool vg0/home ''/dev/discoSSD''&lt;br /&gt;
&lt;br /&gt;
Rimuovere la cache dal LV&lt;br /&gt;
 # lvconvert --uncache vg0/home&lt;br /&gt;
&lt;br /&gt;
= GRUB (Boot loader) =&lt;br /&gt;
È 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.&lt;br /&gt;
&lt;br /&gt;
== Sistema con BIOS ==&lt;br /&gt;
 # pacman -S grub&lt;br /&gt;
 # grub-mkconfig -o /boot/grub/grub.cfg&lt;br /&gt;
 # grub-install /dev/sda&lt;br /&gt;
&lt;br /&gt;
== Sistema UEFI ==&lt;br /&gt;
'''NB: per installare correttamente GRUB su un sistema UEFI occorre che il device di installazione abbia effettuato il boot in modalità UEFI e non Legacy (BIOS)'''&lt;br /&gt;
&lt;br /&gt;
 # pacman -S grub&lt;br /&gt;
 # mkdir /boot/EFI&lt;br /&gt;
 # mount /dev/sda1 /boot/EFI&lt;br /&gt;
 # grub-install /dev/sda&lt;br /&gt;
 # grub-mkconfig -o /boot/grub/grub.cfg&lt;br /&gt;
&lt;br /&gt;
== Gestione snapshot BTRFS ==&lt;br /&gt;
&lt;br /&gt;
=== Manuale ===&lt;br /&gt;
Editare ''/etc/grub.d/40_custom'' (o crearlo) e aggiungere quanto segue per permettere l'avvio della snapshot ''rootsnap''&lt;br /&gt;
&lt;br /&gt;
 menuentry 'Linux snapshot' {&lt;br /&gt;
        insmod gzio&lt;br /&gt;
        insmod part_gpt&lt;br /&gt;
        insmod btrfs&lt;br /&gt;
        set root='hd1,gpt3'&lt;br /&gt;
        linux   /rootsnap/boot/vmlinuz-linux root=/dev/partizione rw rootflags=subvol=rootsnap  quiet&lt;br /&gt;
        initrd  /rootsnap/boot/initramfs-linux.img&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
dopodichè aggiornare la configurazione di GRUB con&lt;br /&gt;
 # grub-mkconfig -o /boot/grub/grub.cfg&lt;br /&gt;
&lt;br /&gt;
=== Automatico ===&lt;br /&gt;
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.&lt;br /&gt;
 # pacman -S grub-btrfs&lt;br /&gt;
&lt;br /&gt;
Ogni volta che si vorrà aggiornare grub con nuovi subvolumi basterà dare il seguente comando&lt;br /&gt;
&lt;br /&gt;
 # grub-mkconfig -o /boot/grub/grub.cfg&lt;br /&gt;
&lt;br /&gt;
== Ripristinare GRUB ==&lt;br /&gt;
Aggiornando la propria distribuzione Linux, il proprio boot loader o installando un altro sistema operativo (es. Windows) può capitare di sovrascrivere il [http://it.wikipedia.org/wiki/Master_boot_record MBR].&lt;br /&gt;
&lt;br /&gt;
Avviare il computer con un liveCD/DVD o USB: &lt;br /&gt;
* [http://archlinux.mirror.garr.it/archlinux/iso/latest/archlinux-x86_64.iso Archlinux]&lt;br /&gt;
* [http://www.sysresccd.org/Download Systemrescuecd]&lt;br /&gt;
* [http://grml.org/download/ grml]&lt;br /&gt;
* [http://na.mirror.garr.it/mirrors/ubuntu-releases/ Ubuntu]&lt;br /&gt;
&lt;br /&gt;
Ipotizziamo di avere una partizione / chiamata /dev/sda2 e nessuna /boot&lt;br /&gt;
&lt;br /&gt;
Creiamo i seguenti mount point&lt;br /&gt;
 # sudo su&lt;br /&gt;
 # cd /mnt&lt;br /&gt;
 # mkdir sda2&lt;br /&gt;
 # mount /dev/sda2 /mnt/sda2&lt;br /&gt;
&lt;br /&gt;
Se utilizziamo una scheda madre UEFI andrà montata anche la partizione efi (solitamente è la prima partizione del disco ''sda1'')&lt;br /&gt;
 # mount /dev/sda2 /mnt/sda2/boot/efi&lt;br /&gt;
&lt;br /&gt;
Se necessario editiamo il file di configurazione di grub&lt;br /&gt;
  # nano /mnt/sda2/boot/grub/grub.cfg&lt;br /&gt;
&lt;br /&gt;
=== arch-chroot ===&lt;br /&gt;
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&lt;br /&gt;
&lt;br /&gt;
 # arch-chroot /mnt/sda2&lt;br /&gt;
&lt;br /&gt;
=== Manuale ===&lt;br /&gt;
 # mount --rbind /dev /mnt/sda2/dev&lt;br /&gt;
 # mount -t proc /proc /mnt/sda2/proc&lt;br /&gt;
 # mount -t sysfs /sys /mnt/sda2/sys/&lt;br /&gt;
&lt;br /&gt;
Eseguiamo il vero e proprio chroot in /dev/sda2&lt;br /&gt;
 # chroot /mnt/sda2&lt;br /&gt;
&lt;br /&gt;
=== Reinstallazione ===&lt;br /&gt;
 # grub-mkconfig -o /boot/grub/grub.cfg&lt;br /&gt;
 # grub-install /dev/sda&lt;br /&gt;
&lt;br /&gt;
=== Riavvio del sistema ===&lt;br /&gt;
Usciamo dal chroot, smontiamo la partizione e riavviamo il sistema&lt;br /&gt;
 # exit&lt;br /&gt;
 # umount /mnt/sda1/proc&lt;br /&gt;
 # umount /mnt/sda1/dev&lt;br /&gt;
 # umount /mnt/sda1&lt;br /&gt;
 # systemctl reboot&lt;br /&gt;
&lt;br /&gt;
== Eliminare il boot loader ==&lt;br /&gt;
In caso di errori nell'installazione di GRUB è possibile cancellare il vecchio boot loader di un disco (&amp;lt;code&amp;gt;''devicename'' = sda,sdb,sdc...&amp;lt;/code&amp;gt;)&lt;br /&gt;
 # dd if=/dev/zero of=''/dev/devicename'' bs=446 count=1&lt;br /&gt;
&lt;br /&gt;
== ISOBoot ==&lt;br /&gt;
Con GRUB2 è possibile effettuare il boot di iso di LiveCD/USB Linux presenti sul disco aggiungendole su &amp;lt;code&amp;gt;/etc/grub.d/40_custom &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Ubuntu 23.04&lt;br /&gt;
 menuentry &amp;quot;Ubuntu 23.04 desktop ISO&amp;quot; {&lt;br /&gt;
        insmod part_gpt&lt;br /&gt;
        insmod ext2&lt;br /&gt;
        insmod btrfs&lt;br /&gt;
        rmmod tpm&lt;br /&gt;
     # es.: terza partizione del primo disco&lt;br /&gt;
        set root=(hd0,gpt3)&lt;br /&gt;
        set isofile=&amp;quot;/home/'''&amp;lt;username&amp;gt;'''/Downloads/ubuntu-23.04-desktop-amd64.iso&amp;quot;&lt;br /&gt;
        loopback loop $isofile&lt;br /&gt;
        linux (loop)/casper/vmlinuz boot=casper iso-scan/filename=$isofile quiet splash&lt;br /&gt;
        initrd (loop)/casper/initrd&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
= Networking =&lt;br /&gt;
&lt;br /&gt;
== Manuale ==&lt;br /&gt;
===net-tools===&lt;br /&gt;
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 [https://lists.debian.org/debian-devel/2009/03/msg00780.html obsoleta]. Tra i suoi comandi principali: arp, hostname, ifconfig, iptunnel netstat e route.&lt;br /&gt;
&lt;br /&gt;
Attivare l'interfaccia di rete eth0 ed assegnarle l'indirizzo ip 192.168.0.2&lt;br /&gt;
 # ifconfig eth0 192.168.0.2 up&lt;br /&gt;
&lt;br /&gt;
Disattivare l'interfaccia di rete eth0&lt;br /&gt;
 # ifconfig eth0 down&lt;br /&gt;
&lt;br /&gt;
Assegnare manualmente un gateway (es.: 192.168.0.1) alla rete&lt;br /&gt;
 # route add default gw 192.168.0.1&lt;br /&gt;
&lt;br /&gt;
Ovviamente occorrerà aggiungere un server DNS al file &amp;lt;code&amp;gt;/etc/resolv.conf&amp;lt;/code&amp;gt; per la risoluzione degli indirizzi.&lt;br /&gt;
&lt;br /&gt;
=== iproute2 ===&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|+ Conversione comandi da net-tools a iproute2&lt;br /&gt;
|-&lt;br /&gt;
! net-tools&lt;br /&gt;
! iproute2&lt;br /&gt;
! Note&lt;br /&gt;
|-&lt;br /&gt;
| ifconfig&lt;br /&gt;
| ip addr, ip link&lt;br /&gt;
| Address and link configuration&lt;br /&gt;
|-&lt;br /&gt;
| route&lt;br /&gt;
| ip route&lt;br /&gt;
| Routing tables&lt;br /&gt;
|-&lt;br /&gt;
| arp&lt;br /&gt;
| ip neigh&lt;br /&gt;
| Neighbors&lt;br /&gt;
|-&lt;br /&gt;
| iptunnel&lt;br /&gt;
| ip tunnel&lt;br /&gt;
| Tunnels&lt;br /&gt;
|-&lt;br /&gt;
| nameif, ifrename&lt;br /&gt;
| ip link set name&lt;br /&gt;
| Rename network interfaces&lt;br /&gt;
|-&lt;br /&gt;
| ipmaddr&lt;br /&gt;
| ip maddr&lt;br /&gt;
| Multicast&lt;br /&gt;
|-&lt;br /&gt;
| netstat&lt;br /&gt;
| ss, ip route&lt;br /&gt;
| Show various networking statistics&lt;br /&gt;
|-&lt;br /&gt;
| brctl&lt;br /&gt;
| bridge&lt;br /&gt;
| Handle bridge addresses and devices&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Elencare gli indirizzi IP: &lt;br /&gt;
 # ip addr&lt;br /&gt;
&lt;br /&gt;
Mostra le informazioni di una specifica interfaccia di rete&lt;br /&gt;
 # ip addr show ''eth0''&lt;br /&gt;
&lt;br /&gt;
Aggiungere un indirizzo all'interfaccia eth0:&lt;br /&gt;
 # ip addr add 192.0.2.10/24 dev eth0&lt;br /&gt;
&lt;br /&gt;
Cancellare un indirizzo associato all'interfaccia eth0:&lt;br /&gt;
 # ip addr delete 192.0.2.10/24 dev eth0&lt;br /&gt;
&lt;br /&gt;
Attivare l'interfaccia eth0:&lt;br /&gt;
 # ip link set dev eth0 up&lt;br /&gt;
&lt;br /&gt;
Disattivare l'interfaccia eth0:&lt;br /&gt;
 # ip link set dev eth0 down&lt;br /&gt;
&lt;br /&gt;
Svuotare la cache arp per tutte le interfacce:&lt;br /&gt;
 # ip neigh flush all&lt;br /&gt;
&lt;br /&gt;
Aggiungere una rotta che passa per gateway 192.0.2.1&lt;br /&gt;
 # ip route add default via 192.0.2.1&lt;br /&gt;
&lt;br /&gt;
Aggiungere una rotta che passa per gateway 192.168.2.1 per l'interfaccia 10.0.2.0&lt;br /&gt;
 # ip route add 10.0.2.1/24 via 192.168.0.1 dev enp0s3&lt;br /&gt;
&lt;br /&gt;
Rimuovere la rotta che passa per gateway 192.168.2.1 per l'interfaccia 10.0.2.0&lt;br /&gt;
 # ip route del 10.0.2.0/24 via 192.168.0.1 dev enp0s3 &lt;br /&gt;
&lt;br /&gt;
Mostrare la tabella di routing&lt;br /&gt;
 # ip route show&lt;br /&gt;
&lt;br /&gt;
== Systemd-networkd==&lt;br /&gt;
'''[https://wiki.archlinux.org/title/Systemd-networkd systemd-networkd'''] è un demone, parte di systemd, che gestisce la configurazione della rete.&lt;br /&gt;
&lt;br /&gt;
=== Esempi di configurazione ===&lt;br /&gt;
Per prima cosa sarà necessario abilitare il servizio&lt;br /&gt;
 # systemctl enable --now systemd-networkd.service&lt;br /&gt;
 # systemctl enable --now systemd-resolved.service&lt;br /&gt;
 # ln -rsf /run/systemd/resolve/stub-resolv.conf /etc/resolv.conf&lt;br /&gt;
&lt;br /&gt;
==== DHCP ====&lt;br /&gt;
/etc/systemd/network/20-wired.network&lt;br /&gt;
 [Match]&lt;br /&gt;
 Name=enp1s0&lt;br /&gt;
 [Network]&lt;br /&gt;
 DHCP=yes&lt;br /&gt;
&lt;br /&gt;
==== IP statico ====&lt;br /&gt;
/etc/systemd/network/20-wired.network&lt;br /&gt;
 [Match]&lt;br /&gt;
 Name=enp1s0&lt;br /&gt;
 [Network]&lt;br /&gt;
 Address=10.1.10.9/24&lt;br /&gt;
 Gateway=10.1.10.1&lt;br /&gt;
 DNS=10.1.10.1&lt;br /&gt;
&lt;br /&gt;
==== Wireless adapter ====&lt;br /&gt;
Per potersi connettere a connessioni WIFI è necessario installare e configurare un'ulteriore applicazione dedicata come '''iwd''' o '''wpa_supplicant''' per l'autenticazione alla rete.&lt;br /&gt;
&lt;br /&gt;
/etc/systemd/network/25-wireless.network&lt;br /&gt;
 [Match]&lt;br /&gt;
 Name=wlp2s0&lt;br /&gt;
 [Network]&lt;br /&gt;
 DHCP=yes&lt;br /&gt;
 IgnoreCarrierLoss=3s&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Rinominare l'interfaccia di rete ====&lt;br /&gt;
Invece che impostare una regola su udev è possibile usare un file di testo .link nel seguente modo&lt;br /&gt;
&lt;br /&gt;
/etc/systemd/network/''10-ethusb0.link''&lt;br /&gt;
 [Match]&lt;br /&gt;
 MACAddress=12:34:56:78:90:ab&lt;br /&gt;
 [Link]&lt;br /&gt;
 Description=USB to Ethernet Adapter&lt;br /&gt;
 Name=''ethusb0''&lt;br /&gt;
&lt;br /&gt;
== Wifi ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! [https://wiki.archlinux.org/title/Network_configuration/Wireless#Utilities Programmi] !! [https://wireless.wiki.kernel.org/en/developers/documentation/wireless-extensions WEXT] !! [https://wireless.wiki.kernel.org/en/developers/documentation/nl80211 nl80211] !! WEP !! WPA&lt;br /&gt;
|-&lt;br /&gt;
| [https://hewlettpackard.github.io/wireless-tools/Tools.html wireless_tools] || Sì || No || Sì || No&lt;br /&gt;
|-&lt;br /&gt;
| [https://wireless.wiki.kernel.org/en/users/documentation/iw iw] || No || Sì || Sì || No&lt;br /&gt;
|-&lt;br /&gt;
| [https://wiki.archlinux.org/title/wpa_supplicant wpa_supplicant] || Sì || Sì || No || Sì&lt;br /&gt;
|-&lt;br /&gt;
| [https://wiki.archlinux.org/title/Iwd iwd]/iwgtk || No || Sì || No || Sì&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== NetworkManager ==&lt;br /&gt;
[https://networkmanager.dev/ NetworkManager] è l'utility che si è imposta come standard per la configurazione della reti Linux (LAN e Wifi)&lt;br /&gt;
&lt;br /&gt;
Si compone di un demone, un'interfaccia da riga di comando [https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/9/html/configuring_basic_system_settings/assembly_configuring-and-managing-network-access_configuring-basic-system-settings#configuring-a-static-ethernet-connection-using-nmcli_assembly_configuring-and-managing-network-access (nmcli)] ed un'interfaccia di configurazione basata su un menu testuale ([https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/9/html/configuring_basic_system_settings/assembly_configuring-and-managing-network-access_configuring-basic-system-settings nmtui]). &lt;br /&gt;
&lt;br /&gt;
I principali desktop enviroment come GNOME e KDE Plasma possiedono una utility grafica che consente loro di configurare graficamente le reti basandosi su NetworkManager.&lt;br /&gt;
&lt;br /&gt;
=== Installazione ===&lt;br /&gt;
 # pacman -S networkmanager &lt;br /&gt;
 # systemctl enable NetworkManager&lt;br /&gt;
 # systemctl start NetworkManager&lt;br /&gt;
&lt;br /&gt;
==== Configurazione  ====&lt;br /&gt;
* 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 &amp;lt;code&amp;gt;nmtui&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Per chi dovesse prediligere la configurazione manuale: &amp;lt;code&amp;gt;nmcli&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Per impedire a Network Manager di gestire una certa interfaccia di rete è sufficiente aggiungere il suo MAC Address al file di configurazione &amp;lt;code&amp;gt;/etc/NetworkManager/NetworkManager.conf&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 [main]&lt;br /&gt;
 plugins=keyfile&lt;br /&gt;
 [keyfile]&lt;br /&gt;
 unmanaged-devices=mac:''00:25:21:73:90:72''&lt;br /&gt;
&lt;br /&gt;
=== Alternative ===&lt;br /&gt;
* [https://wiki.archlinux.org/title/ConnMan ConnMan]&lt;br /&gt;
&lt;br /&gt;
== Condividere la connessione ==&lt;br /&gt;
&lt;br /&gt;
=== Abilitazione del forwarding dei pacchetti ===&lt;br /&gt;
&lt;br /&gt;
 $ sudo echo 1 &amp;gt; /proc/sys/net/ipv4/ip_forward&lt;br /&gt;
&lt;br /&gt;
Per rendere il forwarding definitivo editare il file ''/etc/sysctl.conf'' modificando come segue il parametro net.ipv4.ip_forward:&lt;br /&gt;
&lt;br /&gt;
 net.ipv4.ip_forward = 1&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Mascheramento dei pacchetti ===&lt;br /&gt;
&lt;br /&gt;
 $ sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE&lt;br /&gt;
&lt;br /&gt;
''eth0'' non è un parametro fisso, identifica l'interfaccia con la quale il PC si connette ad Internet&lt;br /&gt;
&lt;br /&gt;
Per applicare automaticamente tale regola ad ogni riavvio&lt;br /&gt;
 # iptables-save &amp;gt; /etc/iptables.ipv4.nat&lt;br /&gt;
 # iptables-restore &amp;lt; /etc/iptables.ipv4.nat&lt;br /&gt;
&lt;br /&gt;
=== Moduli kernel ===&lt;br /&gt;
&lt;br /&gt;
Assicurarsi che siano caricati i seguenti moduli:&lt;br /&gt;
 # modprobe ip_tables&lt;br /&gt;
 # modprobe ip_conntrack&lt;br /&gt;
 # modprobe iptable_nat&lt;br /&gt;
 # modprobe ipt_MASQUERADE&lt;br /&gt;
&lt;br /&gt;
=== Condivisione tramite rete ethernet ===&lt;br /&gt;
&lt;br /&gt;
==== Configurazione scheda di rete interna ====&lt;br /&gt;
&lt;br /&gt;
Assegnare un IP statico alla scheda ethernet con la quale si vuol condividere la connessione.&lt;br /&gt;
&lt;br /&gt;
 # ifconfig eth1 192.168.5.1 netmask 255.255.255.0 up&lt;br /&gt;
&lt;br /&gt;
Per rendere tale configurazione permanente sarà necessario editare il file ''/etc/network/interfaces'' ed aggiungere la seguente configurazione&lt;br /&gt;
&lt;br /&gt;
 auto eth1&lt;br /&gt;
 iface eth1 inet static&lt;br /&gt;
 address 192.168.5.1&lt;br /&gt;
 netmask 255.255.255.0&lt;br /&gt;
&lt;br /&gt;
=== Condivisione tramite rete WI-FI ===&lt;br /&gt;
&lt;br /&gt;
==== Configurazione scheda wireless ====&lt;br /&gt;
&lt;br /&gt;
Se non si desidera cifrare la rete e proteggerla con una password sarà sufficiente eseguire questi comandi.&lt;br /&gt;
&lt;br /&gt;
 # iwconfig wlan0 mode Master&lt;br /&gt;
 # iwconfig wlan0 ESSID ReteGOLEM&lt;br /&gt;
 # iwconfig wlan0 enc off&lt;br /&gt;
 # ifconfig wlan0 192.168.5.1 netmask 255.255.255.0 up&lt;br /&gt;
&lt;br /&gt;
Per rendere tale configurazione permanente sarà necessario creare un file del tipo ''/etc/systemd/network/20-wifi.network'' ed aggiungere la seguente configurazione&lt;br /&gt;
 [Match]&lt;br /&gt;
 Name=wlan0&lt;br /&gt;
 [Network]&lt;br /&gt;
 Address=192.168.5.1/24&lt;br /&gt;
&lt;br /&gt;
Naturalmente occorrerà che sia attivato il demone systemd-networkd&lt;br /&gt;
 # systemctl enable --now systemd-networkd.service&lt;br /&gt;
&lt;br /&gt;
===== Proteggere la connessione WI-FI =====&lt;br /&gt;
&lt;br /&gt;
Installare il programma hostapd&lt;br /&gt;
 # pacman -S hostapd&lt;br /&gt;
&lt;br /&gt;
Configurare hostapd modificando ''/etc/hostapd/hostapd.conf''&lt;br /&gt;
&lt;br /&gt;
 # Interfaccia di rete&lt;br /&gt;
 interface=wlan0&lt;br /&gt;
 # Driver della scheda wifi usata (non tutte le schede sono supportate)&lt;br /&gt;
 driver=nl80211&lt;br /&gt;
 # Nome della rete (SSID)&lt;br /&gt;
 ssid=ReteGOLEM&lt;br /&gt;
 hw_mode=g&lt;br /&gt;
 # Canale di trasmissione&lt;br /&gt;
 channel=6&lt;br /&gt;
 macaddr_acl=0&lt;br /&gt;
 # Righe per la protezione&lt;br /&gt;
 auth_algs=1&lt;br /&gt;
 ignore_broadcast_ssid=0&lt;br /&gt;
 wpa=2&lt;br /&gt;
 # Password del wifi&lt;br /&gt;
 wpa_passphrase=password&lt;br /&gt;
 wpa_key_mgmt=WPA-PSK&lt;br /&gt;
 wpa_pairwise=TKIP&lt;br /&gt;
 rsn_pairwise=CCMP&lt;br /&gt;
&lt;br /&gt;
Editare il file ''/etc/default/hostapd'' per impostare ''hostapd.conf'' come file di configurazione predefinito, modificando la riga DAEMON_CONF=&amp;quot;&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
 DAEMON_CONF=&amp;quot;/etc/hostapd/hostapd.conf&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== Assegnazione automatica degli IP ai client ===&lt;br /&gt;
&lt;br /&gt;
 # pacman -S dhcp&lt;br /&gt;
&lt;br /&gt;
Editare ''/etc/dhcpd.conf'' aggiungendo la configurazione per la rete interna (es.: eth1 o wlan0):&lt;br /&gt;
&lt;br /&gt;
 subnet 192.168.5.0 netmask 255.255.255.0 {&lt;br /&gt;
 range 192.168.5.100  192.168.5.200;&lt;br /&gt;
 option domain-name-servers 8.8.8.8;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== VPN ==&lt;br /&gt;
=== WireGuard ===&lt;br /&gt;
&lt;br /&gt;
https://www.wireguard.com/quickstart/&lt;br /&gt;
&lt;br /&gt;
= Container =&lt;br /&gt;
== Toolbox==&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
=== Immagini ===&lt;br /&gt;
* [https://github.com/toolbx-images/images https://github.com/toolbx-images/images] Immagini di container delle principali distribuzioni&lt;br /&gt;
&lt;br /&gt;
=== Comandi ===&lt;br /&gt;
Creare un container&lt;br /&gt;
 $ toolbox create -i quay.io/toolbx-images/rhel-toolbox:9.1 -c redhat&lt;br /&gt;
&lt;br /&gt;
Entrare in un container&lt;br /&gt;
 $ toolbox enter redhat&lt;br /&gt;
 &lt;br /&gt;
Fermare un container&lt;br /&gt;
 $ podman stop nome_macchina&lt;br /&gt;
&lt;br /&gt;
Rimuovere un container&lt;br /&gt;
 $ toolbox rm -f redhat&lt;br /&gt;
&lt;br /&gt;
Rimuovere un container e la sua immagine&lt;br /&gt;
 $ toolbox rmi redhat &lt;br /&gt;
&lt;br /&gt;
Esaminare la lista dei container e delle immagini disponibili&lt;br /&gt;
 $ toolbox list &lt;br /&gt;
&lt;br /&gt;
Permettere agli utenti non root di utilizzare i container&lt;br /&gt;
 $ sudo sh -c 'echo &amp;quot;username:100000:65536&amp;quot; &amp;gt;&amp;gt; /etc/subuid'&lt;br /&gt;
 $ sudo sh -c 'echo &amp;quot;username:100000:65536&amp;quot; &amp;gt;&amp;gt; /etc/subgid'&lt;br /&gt;
&lt;br /&gt;
Abilitare l'host al forwarding di X11 per le applicazioni che richiedono Xorg&lt;br /&gt;
 # xhost +&lt;br /&gt;
&lt;br /&gt;
Eseguire un comandi all'interno di un container&lt;br /&gt;
 $ toolbox run -c redhat libreoffice&lt;br /&gt;
&lt;br /&gt;
== LXC ==&lt;br /&gt;
[https://wiki.archlinux.org/title/Linux_Containers Linux Container] (LXC) permette di virtualizzare uno o più container Linux su un singolo host LXC, gestendone virtualmente RAM, CPU, socket e rete.&lt;br /&gt;
&lt;br /&gt;
È estremamente utile quando si ha bisogno di isolare dei servizi dal sistema host: es.: server web, imap, smtp...&lt;br /&gt;
&lt;br /&gt;
=== Installazione ===&lt;br /&gt;
Installare LXC&lt;br /&gt;
 # pacman -S lxc lxc-templates lxcfs lxd&lt;br /&gt;
&lt;br /&gt;
=== Comandi ===&lt;br /&gt;
Lista dei container installati&lt;br /&gt;
 lxc-ls -f &lt;br /&gt;
&lt;br /&gt;
Installare un container scegliendo l'immagine dalla lista di quelli disponibili&lt;br /&gt;
 lxc-create -n playtime -t download&lt;br /&gt;
&lt;br /&gt;
Se sapete già di quale container avete bisogno sarà possibile scaricarlo direttamente&lt;br /&gt;
 lxc-create -n playtime -t download -- --dist archlinux --release current --arch amd64&lt;br /&gt;
&lt;br /&gt;
Far partire il container chiamato ''debian''&lt;br /&gt;
 lxc-start debian &lt;br /&gt;
&lt;br /&gt;
Entrare dentro il container chiamato ''debian''&lt;br /&gt;
 lxc-attach debian&lt;br /&gt;
&lt;br /&gt;
Fermare l'esecuzione del container chiamato ''debian''&lt;br /&gt;
 lxc-stop debian&lt;br /&gt;
&lt;br /&gt;
Rimuovere il container chiamato ''debian''&lt;br /&gt;
 lxc-destroy debian &lt;br /&gt;
&lt;br /&gt;
Eseguire un comando dentro il container chiamato ''debian''&lt;br /&gt;
 lxc-attach --name debian nano&lt;br /&gt;
&lt;br /&gt;
=== Rete Bridge ===&lt;br /&gt;
Nel caso si debbano usare servizi da tenere esposti su Internet potrebbe essere conveniente utilizzare una rete bridge piuttosto che NAT.&lt;br /&gt;
&lt;br /&gt;
Editare il file ''/etc/default/lxc-net''&lt;br /&gt;
 # Leave USE_LXC_BRIDGE as &amp;quot;true&amp;quot; if you want to use lxcbr0 for your&lt;br /&gt;
 # containers.  Set to &amp;quot;false&amp;quot; if you'll use virbr0 or another existing&lt;br /&gt;
 # bridge, or mavlan to your host's NIC.&lt;br /&gt;
 USE_LXC_BRIDGE=&amp;quot;true&amp;quot;&lt;br /&gt;
 # If you change the LXC_BRIDGE to something other than lxcbr0, then&lt;br /&gt;
 # you will also need to update your /etc/lxc/default.conf as well as the&lt;br /&gt;
 # configuration (/var/lib/lxc/&amp;lt;container&amp;gt;/config) for any containers&lt;br /&gt;
 # already created using the default config to reflect the new bridge&lt;br /&gt;
 # name.&lt;br /&gt;
 # If you have the dnsmasq daemon installed, you'll also have to update&lt;br /&gt;
 # /etc/dnsmasq.d/lxc and restart the system wide dnsmasq daemon.&lt;br /&gt;
 LXC_BRIDGE=&amp;quot;lxcbr0&amp;quot;&lt;br /&gt;
 LXC_ADDR=&amp;quot;10.0.3.1&amp;quot;&lt;br /&gt;
 LXC_NETMASK=&amp;quot;255.255.255.0&amp;quot;&lt;br /&gt;
 LXC_NETWORK=&amp;quot;10.0.3.0/24&amp;quot;&lt;br /&gt;
 LXC_DHCP_RANGE=&amp;quot;10.0.3.2,10.0.3.254&amp;quot;&lt;br /&gt;
 LXC_DHCP_MAX=&amp;quot;253&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Autostart ===&lt;br /&gt;
Per avviare automaticamente un container all'avvio del sistema host bisognerà:&lt;br /&gt;
 &lt;br /&gt;
Abilitare LXC all'avvio&lt;br /&gt;
 systemctl enable lxc --now&lt;br /&gt;
 &lt;br /&gt;
Aver impostato il container per l'autostart editando il file ''/var/lib/lxc/'''NOME_CONTAINER'''/config''&lt;br /&gt;
 lxc.start.auto = 1&lt;br /&gt;
 lxc.start.delay = 5&lt;br /&gt;
&lt;br /&gt;
== Docker ==&lt;br /&gt;
Abilitare ed avviare docker&lt;br /&gt;
 # systemctl enable --now docker&lt;br /&gt;
&lt;br /&gt;
Cercare il container desiderato&lt;br /&gt;
 # docker search &amp;quot;xxx&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Scaricare l'immagine desiderata&lt;br /&gt;
 # docker pull xxxx:latest&lt;br /&gt;
&lt;br /&gt;
Visualizzare le immagini scaricate&lt;br /&gt;
 # docker images&lt;br /&gt;
&lt;br /&gt;
Visualizzare i docker creati&lt;br /&gt;
 # docker ps -a&lt;br /&gt;
&lt;br /&gt;
Avviare docker&lt;br /&gt;
 # docker start nome_docker&lt;br /&gt;
&lt;br /&gt;
Entrare nel docker&lt;br /&gt;
 # docker attach nome_docker&lt;br /&gt;
&lt;br /&gt;
Copiare un file dal sistema host al docker&lt;br /&gt;
 # docker cp esempio.txt nome_docker: /esempio.txt&lt;br /&gt;
&lt;br /&gt;
Copiare un file dal docker.&lt;br /&gt;
 # docker cp container-id:/path/filename.txt ~/Desktop/filename.txt&lt;br /&gt;
&lt;br /&gt;
Rimuovere un docker&lt;br /&gt;
 # docker rm nome_docker&lt;br /&gt;
&lt;br /&gt;
Rimuovere tutti i docker&lt;br /&gt;
 # docker container stop $(docker container ls -aq)&lt;br /&gt;
 # docker system prune -a --volumes&lt;br /&gt;
&lt;br /&gt;
Avviare automaticamente un docker (da testare)&lt;br /&gt;
 # docker run --restart=always --name nome_docker&lt;br /&gt;
&lt;br /&gt;
Creare script di avvio ''docker-webserver''.service&lt;br /&gt;
 [Unit]&lt;br /&gt;
 Description=Some service&lt;br /&gt;
 Requires=docker.service&lt;br /&gt;
 After=docker.service&lt;br /&gt;
 [Service]&lt;br /&gt;
 Restart=always&lt;br /&gt;
 ExecStart=/usr/bin/docker start -a container_name&lt;br /&gt;
 ExecStop=/usr/bin/docker stop -t 2 container_name&lt;br /&gt;
 [Install]&lt;br /&gt;
 WantedBy=multi-user.target&lt;br /&gt;
&lt;br /&gt;
* [https://wiki.archlinux.org/title/docker Arch Linux Docker WIKI]&lt;br /&gt;
&lt;br /&gt;
== [https://wiki.archlinux.org/title/systemd-nspawn systemd-nspawn] ==&lt;br /&gt;
&lt;br /&gt;
= Fonti software alternative =&lt;br /&gt;
Nella rara eventualità che si necessiti di un programma non presente né nei repository ufficiali, né su [https://aur.archlinux.org/ AUR] è possibile optare per una delle seguenti opzioni.&lt;br /&gt;
&lt;br /&gt;
== AppImage ==&lt;br /&gt;
Scaricate qualsiasi pacchetto disponibile su [https://appimage.github.io/ appimage.github.io] e rendetelo eseguibile.&lt;br /&gt;
&lt;br /&gt;
 $ chmod a+x ''nomeprogramma''.AppImage&lt;br /&gt;
&lt;br /&gt;
Non resta che eseguirlo col seguente comando o con un doppio click&lt;br /&gt;
 $ ./''nomeprogramma''.AppImage&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Flatpak ==&lt;br /&gt;
Concepito per essere una sorta di '''Google Play Store''' per GNOME, è possibile installare programmi provenienti da [https://flathub.org/home flatpak] utilizzando i normali gestori grafici di pacchetti basati su packagekit come ''Gnome Software'' o ''Discover di Plasma''.&lt;br /&gt;
&lt;br /&gt;
Installazione&lt;br /&gt;
 # pacman -S flatpak&lt;br /&gt;
&lt;br /&gt;
Abilitazione del repository ufficiale del progetto (software di terze parti potrebbe richiedere di aggiungere altri repository)&lt;br /&gt;
 # flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo&lt;br /&gt;
&lt;br /&gt;
Elenca i repository disponibili.&lt;br /&gt;
 $ flatpak remotes&lt;br /&gt;
&lt;br /&gt;
Installa un'applicazione (es.: libreoffice)&lt;br /&gt;
 $ flatpak install flathub org.libreoffice.LibreOffice&lt;br /&gt;
&lt;br /&gt;
Esegue un'applicazione (es.: libreoffice)&lt;br /&gt;
 $ flatpak run org.libreoffice.LibreOffice&lt;br /&gt;
&lt;br /&gt;
Disinstalla un'applicazione mantenendo i dati.&lt;br /&gt;
 $ flatpak uninstall &amp;lt;nome app&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Disinstalla un'applicazione eliminando i dati (nella home utente .var/app/).&lt;br /&gt;
 $ flatpak uninstall &amp;lt;nome app&amp;gt; --delete-data&lt;br /&gt;
&lt;br /&gt;
Elimina i dati di tutte le applicazioni disinstallate (nella home utente .var/app/).&lt;br /&gt;
 $ flatpak uninstall --delete-data&lt;br /&gt;
&lt;br /&gt;
Disinstalla tutte le applicazioni flatpak installate sul sistema.&lt;br /&gt;
 $ flatpak uninstall --all&lt;br /&gt;
	&lt;br /&gt;
Cerca ed esegue aggiornamenti per le applicazioni installate.&lt;br /&gt;
 $ flatpak update&lt;br /&gt;
&lt;br /&gt;
Aggiorna una singola applicazione.&lt;br /&gt;
 $ flatpak update &amp;lt;nome app&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Elenca tutte le applicazioni flatpak installate sul sistema.&lt;br /&gt;
 $ flatpak list --app&lt;br /&gt;
	&lt;br /&gt;
Elenca i runtime installati.&lt;br /&gt;
 $ flatpak list --runtime&lt;br /&gt;
	&lt;br /&gt;
Visualizzare le informazioni sulle applicazioni in esecuzione.&lt;br /&gt;
 $ flatpak ps&lt;br /&gt;
	&lt;br /&gt;
Termina un'applicazione bloccata o danneggiata (l'ID dell'istanza si può ottenere dal comando precedente).&lt;br /&gt;
 $ flatpak kill &amp;lt;id istanza&amp;gt;&lt;br /&gt;
	&lt;br /&gt;
Tenta la riparare dei pacchetti danneggiati. Necessita dei privilegi di amministrazione. &lt;br /&gt;
 $ flatpak repair&lt;br /&gt;
&lt;br /&gt;
== Nix ==&lt;br /&gt;
[https://nixos.wiki/wiki/Nix_package_manager Nix package manager] è il gestore di pacchetti utilizzato su [https://nixos.org/ NixOS]. È possibile però utilizzarlo su qualsiasi distribuzione Linux affiancandone il gestore di pacchetti predefinito.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
[https://nixos.org/manual/nixpkgs/stable/ Guida completa]&lt;br /&gt;
&lt;br /&gt;
=== Installazione ===&lt;br /&gt;
[https://nixos.org/download.html#nix-install-linux Guida ufficiale]&lt;br /&gt;
&lt;br /&gt;
'''Single-user installation'''&lt;br /&gt;
 $ sudo install -d -m755 -o $(id -u) -g $(id -g) /nix&lt;br /&gt;
 $ sh &amp;lt;(curl -L https://nixos.org/nix/install) --no-daemon&lt;br /&gt;
&lt;br /&gt;
Aggiungere la riga seguente al &amp;lt;code&amp;gt;.bashrc&amp;lt;/code&amp;gt; o al file di configurazione della vostra shell per poter utilizzare i comandi Nix&lt;br /&gt;
 $ source $HOME/.nix-profile/etc/profile.d/nix.sh&lt;br /&gt;
&lt;br /&gt;
=== Canali ===&lt;br /&gt;
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''.&lt;br /&gt;
&lt;br /&gt;
Ecco di seguito i comandi principali per gestire questi canali&lt;br /&gt;
&lt;br /&gt;
Lista dei canali configurati&lt;br /&gt;
 $ nix-channel --list&lt;br /&gt;
&lt;br /&gt;
Aggiungere il canale principale (''nixos'')&lt;br /&gt;
 $ nix-channel --add https://nixos.org/channels/channel-name nixos&lt;br /&gt;
&lt;br /&gt;
Aggiungere altri canali&lt;br /&gt;
 $ nix-channel --add https://some.channel/url my-alias&lt;br /&gt;
&lt;br /&gt;
Rimuovere un canale&lt;br /&gt;
 $ nix-channel --remove channel-alias&lt;br /&gt;
&lt;br /&gt;
Aggiornare un canale&lt;br /&gt;
 $ nix-channel --update channel-alias&lt;br /&gt;
&lt;br /&gt;
Aggiornare tutti i canali&lt;br /&gt;
 $ nix-channel --update&lt;br /&gt;
&lt;br /&gt;
=== Comandi ===&lt;br /&gt;
Cercare un pacchetto&lt;br /&gt;
 $ nix search nixpkgs ''packagename''&lt;br /&gt;
&lt;br /&gt;
Installare un pacchetto&lt;br /&gt;
 $ nix-env -iA ''packagename''&lt;br /&gt;
&lt;br /&gt;
Vedere i pacchetti installati&lt;br /&gt;
 $ nix-env -q&lt;br /&gt;
&lt;br /&gt;
Disinstallare un pacchetto&lt;br /&gt;
 $ nix-env -e ''packagename''&lt;br /&gt;
&lt;br /&gt;
Aggiornare tutti i pacchetti&lt;br /&gt;
 $ nix-env -u&lt;br /&gt;
&lt;br /&gt;
== Snap ==&lt;br /&gt;
È 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. &lt;br /&gt;
&lt;br /&gt;
Su Arch è disponibile su AUR: [https://aur.archlinux.org/packages/snapd snapd]&lt;br /&gt;
&lt;br /&gt;
=== Installazione ===&lt;br /&gt;
Installare ed abilitare Snap&lt;br /&gt;
 $ [https://aur.archlinux.org/packages/yay yay] -S snapd&lt;br /&gt;
 $ sudo ln -s /var/lib/snapd/snap /snap&lt;br /&gt;
 $ sudo systemctl start snapd.service&lt;br /&gt;
 $ sudo systemctl enable snapd.service&lt;br /&gt;
&lt;br /&gt;
=== Comandi ===&lt;br /&gt;
Cercare un programma&lt;br /&gt;
 $ snap find ''nomeprogramma''&lt;br /&gt;
&lt;br /&gt;
Installare un programma&lt;br /&gt;
 $ sudo snap install ''nomeprogramma''&lt;br /&gt;
&lt;br /&gt;
Rimuovere un programma&lt;br /&gt;
 $ sudo snap remove ''nomeprogramma''&lt;br /&gt;
&lt;br /&gt;
Vedere i programmi installati &lt;br /&gt;
 $ snap list&lt;br /&gt;
&lt;br /&gt;
Rimuovere una determinata versione di un programma&lt;br /&gt;
 $ sudo snap remove ''nomeprogramma'' --revision&lt;br /&gt;
&lt;br /&gt;
Aggiornare manualmente i pacchetti snap&lt;br /&gt;
 $ sudo snap refresh&lt;br /&gt;
&lt;br /&gt;
= GPG =&lt;br /&gt;
[http://it.wikipedia.org/wiki/GNU_Privacy_Guard GNU Privacy Guard (GnuPG o GPG)] è un programma libero pensato per fornire un'alternativa opensource al [http://it.wikipedia.org/wiki/Pretty_Good_Privacy Pretty Good Privacy (PGP)].&lt;br /&gt;
Nel PGP sono usate sia la crittografia asimmetrica (a chiave pubblica) che quella simmetrica.&lt;br /&gt;
La chiave pubblica del destinatario serve al mittente unicamente per cifrare la chiave comune per un algoritmo di crittografia simmetrica che sarà usata per cifrare il testo in chiaro del messaggio.&lt;br /&gt;
Un destinatario decifra un messaggio protetto da GPG usando la chiave di sessione con l'algoritmo simmetrico. Tale chiave di sessione è inclusa nel messaggio in maniera criptata ed è decifrata usando la chiave privata del destinatario.&lt;br /&gt;
L'utilizzo di due cifrature oltre che a velocizzare l'esecuzione del programma (la cifratura a chiave simmetrica è molto più veloce di quella asimmetrica) permette di poter cifrare uno stesso messaggio per più destinatari.&lt;br /&gt;
&lt;br /&gt;
== Generare una chiave ==&lt;br /&gt;
 $ gpg --gen-key&lt;br /&gt;
&lt;br /&gt;
Controllare che la chiave sia stata correttamente creata&lt;br /&gt;
 $ gpg --list-keys&lt;br /&gt;
&lt;br /&gt;
== Certificato di revoca ==&lt;br /&gt;
Il certificato di revoca serve per invalidare la chiave nel caso in cui questa venga compromessa.&lt;br /&gt;
Chiunque sia in possesso del certificato di revoca può revocare la chiave corrispondente, per cui è bene tenerlo in un posto sicuro.&lt;br /&gt;
Poiché, nel momento in cui si ha bisogno del certificato di revoca, potremmo non essere più in grado di generarlo, conviene generarlo subito dopo la creazione della chiave, e prima di iniziare a utilizzarla pubblicamente.&lt;br /&gt;
 $ gpg --output certificato-di-revoca.asc --gen-revoke ''ID''&lt;br /&gt;
dove &amp;lt;code&amp;gt;ID&amp;lt;/code&amp;gt; è dato dalle ultime 8 cifre dell'impronta (fingerprint) della chiave.&lt;br /&gt;
&lt;br /&gt;
== Utilizzo pratico ==&lt;br /&gt;
=== Criptare un documento ===&lt;br /&gt;
 $ gpg -o file1.ext.gpg -e -r UserID file1.ext&lt;br /&gt;
&lt;br /&gt;
Esempio:&lt;br /&gt;
 $ gpg -o tesi.odt.gpg -e -r spookyh@gmail.com tesi.odt&lt;br /&gt;
&lt;br /&gt;
=== Decriptare un documento ===&lt;br /&gt;
 $ gpg -o file1.ext -d file1.gpg&lt;br /&gt;
&lt;br /&gt;
=== Firmare un documento ===&lt;br /&gt;
Il mittente può usare PGP per ''firmare'' un messaggio con l'algoritmo di firma RSA o Digital Signature Algorithm (DSA). Per fare ciò viene calcolato un hash (message digest) dal testo in chiaro e successivamente da questo hash è creata la [http://it.wikipedia.org/wiki/Firma_digitale firma digitale] usando la chiave privata del mittente.&lt;br /&gt;
 $ gpg -o file1.ext.sig -s file1.ext&lt;br /&gt;
&lt;br /&gt;
=== Verificare un documento ===&lt;br /&gt;
 $ gpg --verify file1.sig&lt;br /&gt;
&lt;br /&gt;
== Importare ed esportare chiavi (locali) ==&lt;br /&gt;
Importare una chiave (pubblica)&lt;br /&gt;
 $ gpg --import chiave.asc (o .txt)&lt;br /&gt;
&lt;br /&gt;
Esportare la propria chiave pubblica&lt;br /&gt;
 $ gpg -a -o chiave_pubblica.asc --export&lt;br /&gt;
&lt;br /&gt;
=== Esportare la propria chiave privata ===&lt;br /&gt;
{{Note&lt;br /&gt;
|type=attention&lt;br /&gt;
|text= La chiave privata può essere utilizzata per impersonare la vostra identità, '''NON''' inviarla mai a '''nessuno''', ed esportala solo per effettuarne backup, naturalmente da custodire in un luogo sicuro.}}&lt;br /&gt;
 $ gpg --armor --export-secret-keys &amp;lt;ID&amp;gt; &amp;gt; secret-key.gpg.asc&lt;br /&gt;
&lt;br /&gt;
== Condividere le chiavi pubbliche ==&lt;br /&gt;
Inviare la chiave ad un keyserver:&lt;br /&gt;
 $ gpg --keyserver keyserver.linux.it --send-key &amp;lt;ID&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Importare una chiave da un keyserver:&lt;br /&gt;
 $ gpg --keyserver keyserver.linux.it --recv-keys &amp;lt;ID&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se ci fidiamo del proprietario e vogliamo mostrare pubblicamente la nostra fiducia, possiamo firmare la chiave appena importata e esportare la firma su un keyserver (vedere sezioni successive).&lt;br /&gt;
&lt;br /&gt;
=== Keyserver ===&lt;br /&gt;
Quando si carica una chiave su un keyserver, poi questo la condivide con gli altri keyserver che fanno parte dello stesso circuito.&lt;br /&gt;
Non esiste un'entità centralizzata o un circuito di riferimento (per scelta di design), e, a volte, questo può generare confusione nell'utilizzatore.&lt;br /&gt;
Inoltre, alcuni keyserver potrebbero non essere sempre accessibili.&lt;br /&gt;
&lt;br /&gt;
Tra i keyserver più noti:&lt;br /&gt;
* keys.openpgp.org&lt;br /&gt;
* keyserver.ubuntu.com&lt;br /&gt;
* keys.gnupg.net&lt;br /&gt;
* pgp.surfnet.nl&lt;br /&gt;
* pgp.circl.lu&lt;br /&gt;
* pgp.mit.edu&lt;br /&gt;
&lt;br /&gt;
== Editare una chiave ==&lt;br /&gt;
Per fare operazioni e modifiche dobbiamo &amp;quot;editare&amp;quot; le chiavi, aprendo l'editor interattivo:&lt;br /&gt;
 $ gpg --edit-key &amp;lt;ID&amp;gt;&lt;br /&gt;
'''NB: Prima di uscire dall'editor, ricordarsi di salvare, altrimenti le modifiche vanno perdute'''&lt;br /&gt;
&lt;br /&gt;
* firmare&lt;br /&gt;
 &amp;gt; sign&lt;br /&gt;
* cambiare i valori di fiducia &lt;br /&gt;
 &amp;gt; trust&lt;br /&gt;
* vedere la fingerprint&lt;br /&gt;
 &amp;gt; fpr&lt;br /&gt;
* cambiare la data di scadenza&lt;br /&gt;
 &amp;gt; expire&lt;br /&gt;
* cambiare la password&lt;br /&gt;
 &amp;gt; passwd&lt;br /&gt;
* firmare localmente in modo non esportabile&lt;br /&gt;
 &amp;gt; lsign&lt;br /&gt;
* sempre '''ricordarsi di salvare'''&lt;br /&gt;
 &amp;gt; save&lt;br /&gt;
* oppure uscire&lt;br /&gt;
 &amp;gt; quit&lt;br /&gt;
&lt;br /&gt;
Digitare &amp;lt;code&amp;gt;help&amp;lt;/code&amp;gt; per una lista esaustiva.&lt;br /&gt;
&lt;br /&gt;
Tutte le modifiche da rendere pubbliche vanno inviate ad un keyserver.&lt;br /&gt;
&lt;br /&gt;
== Revocare una chiave ==&lt;br /&gt;
Avendo già il certificato di revoca:&lt;br /&gt;
 $ gpg --import certificato-di-revoca.asc&lt;br /&gt;
 $ gpg --keyserver pgp.surfnet.nl --send-key ''ID''&lt;br /&gt;
&lt;br /&gt;
== Gestione delle chiavi ==&lt;br /&gt;
Controllare il database delle chiavi: questo comando mostra tutte le chiavi che abbiamo con molte informazioni.&lt;br /&gt;
 $ gpg --list-keys --with-colons&lt;br /&gt;
&lt;br /&gt;
Fornisce tutti i valori di fiducia assegnati alle varie chiavi. (Informazioni private)&lt;br /&gt;
 $ gpg --list-ownertrust&lt;br /&gt;
&lt;br /&gt;
== Controllo firme ==&lt;br /&gt;
 $ gpg --check-sigs&lt;br /&gt;
 $ gpg --list-sigs&lt;br /&gt;
&lt;br /&gt;
== Esportare le chiavi altrui ==&lt;br /&gt;
Abbiamo importato e firmato la chiave di &amp;lt;ID&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Rimandiamola al proprietario:&lt;br /&gt;
 $ gpg --armor -export -o firma.sig &amp;lt;ID&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Questo comando crea un file di nome ''firma.sig'' nella directory corrente, che contiene la chiave firmata.&lt;br /&gt;
Spedire al proprietario ''firma.sig''.&lt;br /&gt;
&lt;br /&gt;
Chi riceve la propria chiave firmata da altri può decidere inserirla nel proprio portachiavi, con&lt;br /&gt;
 $ gpg --import firma.sig&lt;br /&gt;
&lt;br /&gt;
Si aggiungono al portachiavi le nuove firme ma anche i nuovi ID che il mittente ha sulla sua chiave, col rispettivo valore di fiducia. Firmare le chiavi degli altri implica dar loro fiducia, e, spesso, anche aver verificato la loro identità in maniera sicura.&lt;br /&gt;
Se non ci fidiamo, non firmiamo. Se si firmano a caso tutte le chiavi che capitano a tiro, si perde la reputazione che si ha presso gli altri partecipanti della rete. Se vogliamo fare un uso pubblico di questa fiducia reciproca possiamo mandare la nostra  chiave, contenente la nuova firma, al keyserver:&lt;br /&gt;
 $ gpg --keyserver pgp.circl.lu --send-key &amp;lt;ID mia chiave&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Periodicamente occorre aggiornare il proprio portachiavi digitale, così da venire a conoscenza delle modifiche sulle chiavi degli altri.&lt;br /&gt;
 $ gpg --keyserver pgp.circl.lu --refresh-keys&lt;br /&gt;
&lt;br /&gt;
== Rete di fiducia ==&lt;br /&gt;
Una chiave importata può essere firmata con un certo grado di fiducia. Possiamo rispedirla al proprietario o caricare la firma su un keyserver, e se lui la importa nel suo portachiavi, avrà la propria chiave firmata da noi. Ognuno può quindi aggiungere le firme dei conoscenti alla propria chiave, che a loro volta hanno firme di altri.&lt;br /&gt;
&lt;br /&gt;
== GUI ==&lt;br /&gt;
Esistono vari programmi a interfaccia grafica:&lt;br /&gt;
* ''Seahorse'', per gestire le chiavi e i certificati, comprese quelle ssh, per un ambiente GTK&lt;br /&gt;
* ''KGPG'', per gestire le chiavi e i certificati, comprese quelle ssh, per un ambiente QT&lt;br /&gt;
* ''Pinentry'' (anche da riga di comando) si ricorda la password della chiave per il tempo impostato (default 5 minuti)&lt;br /&gt;
&lt;br /&gt;
= Systemd =&lt;br /&gt;
 systemd-timesyncd — system time synchronization across the network;&lt;br /&gt;
 systemd/Journal — system logging&lt;br /&gt;
 systemd/Timers — alternative to cron&lt;br /&gt;
&lt;br /&gt;
= Link Utili =&lt;br /&gt;
&lt;br /&gt;
[https://wiki.archlinux.org/ ArchWiki]&lt;br /&gt;
&lt;br /&gt;
[https://wwwcdf.pd.infn.it/AppuntiLinux/a21.htm Appunti Linux]&lt;br /&gt;
&lt;br /&gt;
[https://www.linuxfromscratch.org/lfs/downloads/stable/LFS-BOOK-11.3-NOCHUNKS.html LFS-BOOK]&lt;br /&gt;
&lt;br /&gt;
[[Category: Howto]]&lt;/div&gt;</summary>
		<author><name>$pooky Hunter</name></author>
	</entry>
	<entry>
		<id>https://wiki.golem.linux.it/index.php?title=Appunti_Arch_Linux&amp;diff=9676</id>
		<title>Appunti Arch Linux</title>
		<link rel="alternate" type="text/html" href="https://wiki.golem.linux.it/index.php?title=Appunti_Arch_Linux&amp;diff=9676"/>
		<updated>2025-04-15T15:03:22Z</updated>

		<summary type="html">&lt;p&gt;$pooky Hunter: /* Rete Bridge */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[https://archlinux.org/ Arch Linux] è una distribuzione Linux leggera e veloce; ma la cui installazione, configurazione e amministrazione avviene prevalentemente da terminale attraverso la modifica manuale di file di configurazione testuali.&lt;br /&gt;
&lt;br /&gt;
Fornisce, seguendo un modello di distribuzione detto &amp;quot;rolling-release&amp;quot;, l'ultima versione stabile della maggior parte del software opensource disponibile per Linux. Dato che è in costante aggiornamento non richiede periodici passaggi da una versione stabile alla successiva. Il lato negativo è che aggiornamenti di componenti importanti come quelli di: '''kernel, boot loader, driver video, librerie...''' potrebbero determinare problemi tali da rendere il sistema inutilizzabile. Accorgimenti come lo snapshot periodico del filesystem riescono, per fortuna, a contrastare l'impatto di questi inconvenienti.&lt;br /&gt;
&lt;br /&gt;
= Installazione =&lt;br /&gt;
== Guida ==&lt;br /&gt;
[https://wiki.archlinux.org/title/Installation_guide Guida ufficiale]&lt;br /&gt;
&lt;br /&gt;
== Supporti ==&lt;br /&gt;
* ISO ufficiale [http://archlinux.mirror.garr.it/archlinux/iso/latest/archlinux-x86_64.iso archlinux-x86_64.iso]&lt;br /&gt;
&lt;br /&gt;
* ISO con supporto per lo [https://openzfs.github.io/openzfs-docs/Getting%20Started/Arch%20Linux/index.html ZFS] [https://archzfs.leibelt.de/media/data/archlinux-archzfs-linux.iso archlinux-archzfs-linux.iso]&lt;br /&gt;
&lt;br /&gt;
* ISO con installer grafico Calamares [https://sourceforge.net/projects/alci/files/alci-iso/ ALCI]&lt;br /&gt;
&lt;br /&gt;
* ISO live CD/USB con interfaccia Xfce, utile per operazioni di ripristino o installazione [https://www.system-rescue.org/Download/ SystemRescue]:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== ISO personalizzata ==&lt;br /&gt;
Con '''archiso''' è possibile creare un'immagine con pacchetti aggiuntivi rispetto a quelli contenuti nella versione ufficiale. &lt;br /&gt;
&lt;br /&gt;
 # pacman -S archiso&lt;br /&gt;
&lt;br /&gt;
Copiare il contenuto del pacchetto in una directory di lavoro, es.: ''/root/media''&lt;br /&gt;
 # cp -r /usr/share/archiso/configs/releng /root/media&lt;br /&gt;
&lt;br /&gt;
Se volessimo aggiungere il supporto ad un pacchetto non contenuto nei repository ufficiali come, per esempio, lo ZFS occorrerebbe:&lt;br /&gt;
&lt;br /&gt;
* Importare la chiave pubblica del suo repository&lt;br /&gt;
 # pacman-key -r DDF7DB817396A49B2A2723F7403BD972F75D9D76&lt;br /&gt;
 # pacman-key --lsign-key DDF7DB817396A49B2A2723F7403BD972F75D9D76&lt;br /&gt;
 &lt;br /&gt;
* Modificare le seguenti righe al file '''pacman.conf''' di archiso per aggiungere il repository&lt;br /&gt;
 [archzfs]&lt;br /&gt;
 SigLevel = Never&lt;br /&gt;
 Server = https://archzfs.com/$repo/$arch&lt;br /&gt;
&lt;br /&gt;
* Aggiungere le seguenti righe al file ''packages.x86_64'' per aggiungere i pacchetti che ci interessa installare&lt;br /&gt;
 zfs-utils&lt;br /&gt;
 zfs-dkms&lt;br /&gt;
 net-tools&lt;br /&gt;
&lt;br /&gt;
* Se volessimo creare una versione live di una macchina, comprensiva di tutti i suoi pacchetti, potremmo semplicemente aggiungerli al file ''packages.x86_64'' &lt;br /&gt;
&lt;br /&gt;
 # pacman -Qq &amp;gt;&amp;gt; ''/path/packages.x86_64''&lt;br /&gt;
&lt;br /&gt;
* Lanciare lo script per creare l'ISO&lt;br /&gt;
 # ./build.sh -v&lt;br /&gt;
L'immagine sarà generata nella directory /root/media/out&lt;br /&gt;
&lt;br /&gt;
== Preparazione del disco ==&lt;br /&gt;
Su Linux si può scegliere (salvo casi estremamente [https://wiki.archlinux.org/title/partitioning#Partitionless_disk particolari]) tra due [https://unix.stackexchange.com/questions/289389/what-are-the-differences-between-the-various-partition-tables tipi] di tabella delle partizioni&lt;br /&gt;
&lt;br /&gt;
* msdos (Master Boot Record o più semplicemente MBR)&lt;br /&gt;
&lt;br /&gt;
* GPT (GUID Partition Table)&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
I casi in cui è preferibile utilizzare la tabella ''msdos'' sono:&lt;br /&gt;
&lt;br /&gt;
* dual-boot con Windows (32-bit o 64-bit) con la scheda madre in modalità Legacy BIOS&lt;br /&gt;
* in schede madri molto datate il BIOS potrebbe non supportare lo schema GPT (esiste comunque un [https://wiki.archlinux.org/title/partitioning#Tricking_old_BIOS_into_booting_from_GPT trucco] per aggirare l'ostacolo)&lt;br /&gt;
&lt;br /&gt;
[https://wiki.archlinux.org/title/partitioning#Choosing_between_GPT_and_MBR Vantaggi] di GPT su MBR:&lt;br /&gt;
&lt;br /&gt;
* offre un sistema di denominazione delle partizioni indipendente dal filesystem (PARTLABEL, PARTUUID)&lt;br /&gt;
&lt;br /&gt;
* 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.&lt;br /&gt;
&lt;br /&gt;
* la grandezza massima di un disco è di 2 ZiB, mentre su MBR 2 TiB&lt;br /&gt;
&lt;br /&gt;
* permette di fare a meno della tradizionale partizione di /boot con i filesystem BTRFS e ZFS in modo da semplificare la gestione degli snapshot.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Schede madri BIOS ===&lt;br /&gt;
Creare due partizioni.&lt;br /&gt;
&lt;br /&gt;
# '''[http://en.wikipedia.org/wiki/BIOS_Boot_partition 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.&lt;br /&gt;
# '''Linux filesystem''': successivamente da formattare col filesystem di nostra scelta: BTRFS, ZFS, ext4, XFS, JFS.&lt;br /&gt;
&lt;br /&gt;
==== Partizionamento ====&lt;br /&gt;
Col seguente comando verrà creata la partizione BIOS GRUB (EF02) a partire dal 1MB, della grandezza di 64MB, 8GB per la SWAP ed il resto del disco resterà disponibile per il filesystem di Linux.&lt;br /&gt;
&lt;br /&gt;
Se avete più dischi da utilizzare in raid, questa operazione andrà ripetuta per ciascun disco.&lt;br /&gt;
&lt;br /&gt;
 # sgdisk \&lt;br /&gt;
 --new=1:2048:133120 --typecode=1:EF02 --change-name=1:&amp;quot;GRUB&amp;quot; \&lt;br /&gt;
 --new=2:0:+8000M ---typecode 2:8200 --change-name=2:&amp;quot;SWAP&amp;quot; \&lt;br /&gt;
 --largest-new=3 --typecode=3:8300 --change-name=3:&amp;quot;ROOT&amp;quot; /dev/sda&lt;br /&gt;
&lt;br /&gt;
La seconda partizione dovrà poi essere formattata con uno dei filesystem supportati da Linux (ext4, btrfs, xfs...)&lt;br /&gt;
 # mkfs.btrfs /dev/sda3&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Schede madri UEFI ===&lt;br /&gt;
Creare due partizioni.&lt;br /&gt;
&lt;br /&gt;
# '''EFI''': è una partizione in formato FAT32 necessaria per l'avvio dei sistemi operativi nei PC con schede madri UEFI.&lt;br /&gt;
# '''Linux filesystem''': successivamente da formattare col filesystem di nostra scelta: BTRFS, ZFS, ext4, XFS, JFS.&lt;br /&gt;
&lt;br /&gt;
==== Partizionamento ====&lt;br /&gt;
Col seguente comando verrà creata la partizione EFI (EF00) a partire dal 1MB, della grandezza di 512MB, 8Gb per la SWAP ed il resto del disco per il filesystem di Linux.&lt;br /&gt;
 # sgdisk \&lt;br /&gt;
 --new=1:2048:1064960 --typecode=1:EF00 --change-name=1:&amp;quot;efi&amp;quot; \&lt;br /&gt;
 --new=2:0:+8000M ---typecode 2:8200 --change-name=2:&amp;quot;SWAP&amp;quot; \&lt;br /&gt;
 --largest-new=3 --typecode=3:8300 --change-name=3:&amp;quot;ROOT&amp;quot; /dev/sda&lt;br /&gt;
&lt;br /&gt;
La partizione '''EFI''' dovrà poi essere formattata in FAT32&lt;br /&gt;
 # mkfs.vfat -F 32 /dev/sda1&lt;br /&gt;
&lt;br /&gt;
La seconda partizione dovrà poi essere formattata con uno dei filesystem supportati da Linux (ext4, btrfs, xfs...)&lt;br /&gt;
 # mkfs.btrfs /dev/sda3&lt;br /&gt;
&lt;br /&gt;
== Montaggio del filesystem ==&lt;br /&gt;
Formattazione ed attivazione della SWAP&lt;br /&gt;
 # mkswap /dev/sda2&lt;br /&gt;
 # swapon /dev/sda2&lt;br /&gt;
&lt;br /&gt;
Montaggio del filesystem di ROOT nei sistemi BIOS&lt;br /&gt;
 # mount /dev/sda3 /mnt&lt;br /&gt;
&lt;br /&gt;
Montaggio del filesystem di ROOT nei sistemi UEFI&lt;br /&gt;
 # mount /dev/sda3 /mnt&lt;br /&gt;
 # mount --mkdir /dev/sda1 /mnt/boot&lt;br /&gt;
&lt;br /&gt;
== Pacchetti base ==&lt;br /&gt;
Per l'installazione di base si consigliano i seguenti meta-pacchetti&lt;br /&gt;
 # pacstrap -K /mnt base base-devel linux linux-headers linux-firmware&lt;br /&gt;
&lt;br /&gt;
== Configurazione ==&lt;br /&gt;
Creazione del file fstab&lt;br /&gt;
 # genfstab -U /mnt &amp;gt;&amp;gt; /mnt/etc/fstab&lt;br /&gt;
&lt;br /&gt;
Chroot nel nuovo sistema&lt;br /&gt;
 # arch-chroot /mnt&lt;br /&gt;
&lt;br /&gt;
Timezone&lt;br /&gt;
 # ln -sf /usr/share/zoneinfo/Europe/Rome /etc/localtime&lt;br /&gt;
&lt;br /&gt;
Editare il file &amp;lt;code&amp;gt;/etc/systemd/timesyncd.conf&amp;lt;/code&amp;gt; ed abilitare il servizio per la sincronizzazione automatica dell'orario&lt;br /&gt;
 # systemctl enable systemd-timesyncd.service&lt;br /&gt;
&lt;br /&gt;
Editare il file &amp;lt;code&amp;gt;/etc/locale.gen&amp;lt;/code&amp;gt; e togliere il commento agli argomenti che interessano, es.: ''en_US.UTF-8'', ''it_IT.UTF-8''. E successivamente generare la localizzazione eseguendo&lt;br /&gt;
 # locale-gen&lt;br /&gt;
&lt;br /&gt;
Configurare la lingua che vogliamo usare per il nostro sistema editando il file &amp;lt;code&amp;gt;/etc/locale.conf&amp;lt;/code&amp;gt; oppure lanciando il comando&lt;br /&gt;
 # localectl set-locale LANG=en_US.UTF-8&lt;br /&gt;
&lt;br /&gt;
Selezioniamo il layout della tastiera editando il file &amp;lt;code&amp;gt;/etc/vconsole.conf&amp;lt;/code&amp;gt;&lt;br /&gt;
 # echo &amp;quot;KEYMAP=it&amp;quot; &amp;gt;&amp;gt; /etc/vconsole.conf&lt;br /&gt;
&lt;br /&gt;
Scegliere un home host (es.: ''archstar'')&lt;br /&gt;
 # echo '''archstar''' &amp;gt;&amp;gt; /etc/hostname&lt;br /&gt;
&lt;br /&gt;
Impostare una password per l'utente root&lt;br /&gt;
 # passwd&lt;br /&gt;
&lt;br /&gt;
Installare e configurare il bootloader&lt;br /&gt;
&lt;br /&gt;
= Filesystem =&lt;br /&gt;
Su Linux, a seconda di ciò di cui abbiamo bisogno, è possibile scegliere tra numerosi filesystem. Le principali opzioni sono le seguenti:&lt;br /&gt;
&lt;br /&gt;
- BTRFS: supporta nativamente sottovolumi, snapshot ed il raid 0, 1 e 5; ma non la crittografia.&lt;br /&gt;
&lt;br /&gt;
- EXT4: il FS storico di Linux, evoluzione di ext3. Supporta nativamente la crittografia dei dati, ma non gestisce autonomamente né RAID, né snapshots. &lt;br /&gt;
&lt;br /&gt;
- [https://openzfs.github.io/openzfs-docs/index.html 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 &amp;quot;write-atomicity&amp;quot; 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.&lt;br /&gt;
&lt;br /&gt;
- [https://access.redhat.com/documentation/it-it/red_hat_enterprise_linux/9/html-single/configuring_and_managing_logical_volumes/index 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.&lt;br /&gt;
&lt;br /&gt;
== IMG ==&lt;br /&gt;
Per fare esperimenti con i filesystem può essere utile creare dei file immagine&lt;br /&gt;
&lt;br /&gt;
Creare un file immagine di una specifica grandezza (es.: 10G)&lt;br /&gt;
 $ truncate -s 10g disk.img&lt;br /&gt;
&lt;br /&gt;
Formattarlo con un filesystem (es.: btrfs)&lt;br /&gt;
 $ mkfs.btrfs disk.img&lt;br /&gt;
&lt;br /&gt;
Montarlo in loop&lt;br /&gt;
 $ sudo mount -o loop disk.img /mnt&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== BTRFS ==&lt;br /&gt;
Creazione del filesystem&lt;br /&gt;
 # mkfs.btrfs ''/dev/partizione''&lt;br /&gt;
&lt;br /&gt;
Montaggio del filesystem&lt;br /&gt;
 # mount -o compress=lzo ''/dev/partizione'' ''/mnt/punto_mount''&lt;br /&gt;
&lt;br /&gt;
(Si consiglia di usare l'opzione di compressione del filesystem per migliorare le performance ed ottimizzare l'utilizzo dello spazio)&lt;br /&gt;
&lt;br /&gt;
===Subvolumi===&lt;br /&gt;
* Creare un subvolume&lt;br /&gt;
 # btrfs subvolume create ''subvolume''&lt;br /&gt;
&lt;br /&gt;
* Controllare i subvolumi presenti sul sistema&lt;br /&gt;
 # btrfs subvolume list /&lt;br /&gt;
&lt;br /&gt;
In una tipica installazione Ubuntu avremo un output di questo tipo&lt;br /&gt;
 ID 257 gen 9755 top level 5 path @&lt;br /&gt;
 ID 292 gen 7624 top level 5 path @home&lt;br /&gt;
&lt;br /&gt;
''@'' è il nome del subvolume contenente la root '''/''' del filesystem&lt;br /&gt;
''@home'' è il nome del subvolume della /home&lt;br /&gt;
&lt;br /&gt;
=== Montaggio di un subvolume ===&lt;br /&gt;
 # mount -o subvol=''subvolume'' ''/dev/partizione'' ''/mnt/punto_mount''&lt;br /&gt;
&lt;br /&gt;
=== fstab ===&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Ecco un '''/etc/fstab''' di esempio&lt;br /&gt;
 LABEL=ROOT       /             btrfs     defaults,compress=lzo,subvol=@            0 0&lt;br /&gt;
 LABEL=ROOT       /home         btrfs     defaults,compress=lzo,subvol=@home        0 0&lt;br /&gt;
 LABEL=ROOT       /mnt/btrfs    btrfs     defaults,noauto,subvolid=0,compress=lzo   0 0&lt;br /&gt;
&lt;br /&gt;
Montando la partizione con label ROOT su /mnt/btrfs saranno visibili tutti i subvolumi.&lt;br /&gt;
&lt;br /&gt;
===Conversione da Ext3/4 a Btrfs===&lt;br /&gt;
 # btrfs-convert /dev/partizione&lt;br /&gt;
&lt;br /&gt;
Automaticamente è creata una snapshot contenente il vecchio filesystem (''/ext2_saved'')&lt;br /&gt;
&lt;br /&gt;
In caso di problemi può essere montata col comando&lt;br /&gt;
 # mount -t btrfs -o subvol=ext2_saved /dev/xxx /ext2_saved&lt;br /&gt;
 # mount -t ext3 -o loop,ro /ext2_saved/image /ext3&lt;br /&gt;
&lt;br /&gt;
Se tutto è andato a buon fine può invece essere eliminata&lt;br /&gt;
 # btrfs subvolume delete /ext2_saved&lt;br /&gt;
&lt;br /&gt;
===Riparazione di un filesystem danneggiato===&lt;br /&gt;
* Direttamente sul filesystem montato&lt;br /&gt;
 # btrfs scrub start -B /dev/partizione&lt;br /&gt;
o anche direttamente sulla root&lt;br /&gt;
 # btrfs scrub start -B /&lt;br /&gt;
&lt;br /&gt;
* Sul disco smontato&lt;br /&gt;
 # btrfs check --repair /dev/partizione&lt;br /&gt;
&lt;br /&gt;
Per non dover ricorrere ad un dispositivo di avvio alternativo, dato che btrfs-check non può essere utilizzato su un filesystem montato, si consiglia di aggiungerlo al ramdisk modificando in questo mmodo il file &amp;lt;code&amp;gt;/etc/mkinitcpio.conf&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 BINARIES=(btrfs)&lt;br /&gt;
&lt;br /&gt;
=== Quote ===&lt;br /&gt;
Per limitare le dimensioni di un subvolume è possibile abilitare la gestione delle '''quote'''.&lt;br /&gt;
&lt;br /&gt;
Utilizzare il seguente comando su un filesystem btrfs appena creato e privo di subvolumi&lt;br /&gt;
 # btrfs quota enable volume&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
 # btrfs subvolume list &amp;lt;path&amp;gt; | cut -d' ' -f2 | xargs -I{} -n1 btrfs qgroup create 0/{} &amp;lt;path&amp;gt;&lt;br /&gt;
 # btrfs quota rescan &amp;lt;path&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Assegnare una quota limite ad un subvolume&lt;br /&gt;
 # btrfs qgroup limit size /volume/subvolume&lt;br /&gt;
&lt;br /&gt;
Es.:&lt;br /&gt;
 # btrfs qgroup limit 20g /mnt/@&lt;br /&gt;
 # btrfs qgroup limit 100g /mnt/@home&lt;br /&gt;
&lt;br /&gt;
Scoprire la quantità di spazio utilizzata da un subvolume&lt;br /&gt;
 # btrfs qgroup show &amp;lt;path&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Snapshots ===&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
* Effettuare uno snapshot&lt;br /&gt;
 # btrfs subvolume snapshot @ rootsnap&lt;br /&gt;
&lt;br /&gt;
Nell'esempio abbiamo effettuato il ''backup'' del filesystem di root e l'abbiamo chiamato ''rootsnap''&lt;br /&gt;
&lt;br /&gt;
* Montare un subvolume/snapshot&lt;br /&gt;
 # mount -t btrfs -o subvol=rootsnap /dev/partizione /mnt/snapshot&lt;br /&gt;
&lt;br /&gt;
* Cancellare un subvolume/snapshot&lt;br /&gt;
 # btrfs subvolume delete rootsnap&lt;br /&gt;
&lt;br /&gt;
==== Integrazione con GRUB ====&lt;br /&gt;
È possibile caricare automaticamente all'avvio gli snapshot dei filesystem di root attraverso il programma '''grub-btrfs'''&lt;br /&gt;
 # pacman -S grub-btrfs&lt;br /&gt;
&lt;br /&gt;
Con questo tool ogni volta che rigeneriamo il file di configurazione di GRUB il sistema rileva eventuali sottovolumi avviabili (snapshot comprese) aggiungendoli al menu di avvio del GRUB &lt;br /&gt;
 # grub-mkconfig -o /boot/grub/grub.cfg&lt;br /&gt;
&lt;br /&gt;
=== Backup ===&lt;br /&gt;
Le snapshot possono essere salvate su un disco esterno, a patto che questo abbia un file system btrfs.&lt;br /&gt;
L'operazione di trasferimento può essere effettuata soltanto su snapshot in sola lettura.&lt;br /&gt;
Si ipotizza che il proprio disco di sistema sia montato in /mnt/btrfs ed il disco esterno in /mnt/ext&lt;br /&gt;
&lt;br /&gt;
* Creare la snapshot in sola lettura (opzione -r) oppure impostare il flag di sola lettura ad una snapshot già fatta&lt;br /&gt;
 btrfs subvolume snapshot -r @root @root-yymmdd-ro&lt;br /&gt;
 btrfs property set /mnt/btrfs/@root-yymmdd-ro ro true&lt;br /&gt;
* Trasferire la snapshot sul disco esterno.&lt;br /&gt;
 btrfs send /mnt/btrfs/@root-yymmdd-ro | btrfs receive /mnt/ext&lt;br /&gt;
* Quando necessario, ripristinare la snapshot&lt;br /&gt;
 btrfs send /mnt/ext/@root-yymmdd-ro | btrfs receive /mnt/btrfs/&lt;br /&gt;
* Eventualmente, rinominare la snapshot e reimpostare i privilegi di scrittura&lt;br /&gt;
 mv /mnt/ext/{@root-yymmdd-ro,@root}&lt;br /&gt;
 btrfs property set /mnt/btrfs/@root ro false&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== RAID ===&lt;br /&gt;
Tipologie e caratteristiche dei raid [https://btrfs.readthedocs.io/en/latest/mkfs.btrfs.html#profiles supportati]&lt;br /&gt;
&lt;br /&gt;
Confronto tra varie tecnologie di [https://blog.jenningsga.com/status-of-storage-within-linux/ raid]&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! RAID !! Redundancy Copies !! Redundancy Parity !! Redundancy Striping !! Spazio utilizzato !! Min/max n. dischi&lt;br /&gt;
|-&lt;br /&gt;
| disco singolo || 1 || || || 100% || 1/N&lt;br /&gt;
|- &lt;br /&gt;
| RAID0 || 1 || || 1 to N || 100% || 1/N&lt;br /&gt;
|- &lt;br /&gt;
| RAID1 || 2 || || ||  50% || 2/N &lt;br /&gt;
|- &lt;br /&gt;
| RAID1C3 || 3 || || || 33% || 3/N&lt;br /&gt;
|- &lt;br /&gt;
| RAID1C4 || 4 || || || 25% || 4/N&lt;br /&gt;
|-&lt;br /&gt;
| RAID10 || 2 || || 1 to N || 50%  || 2/N&lt;br /&gt;
|-&lt;br /&gt;
| RAID5 || 1 || 1 || 2 to N-1 || (N-1)/N || 2/N&lt;br /&gt;
|-&lt;br /&gt;
| RAID6 || 1 || 2 || 3 to N-2 || (N-2)/N || 3/N&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====RAID 0====&lt;br /&gt;
 # mkfs.btrfs -d raid0 /dev/sda1 /dev/sdb1&lt;br /&gt;
&lt;br /&gt;
===== Montare il raid =====&lt;br /&gt;
 # mount /dev/sda1 /mnt&lt;br /&gt;
&lt;br /&gt;
(È equivalente a ''mount /dev/sdb1 /mnt'', il sistema riconosce che è presente un raid 0 e provvede al montaggio corretto dei dischi)&lt;br /&gt;
&lt;br /&gt;
Verifica del montaggio&lt;br /&gt;
 # btrfs filesystem show /mnt&lt;br /&gt;
&lt;br /&gt;
 Label: none  uuid: 4714fca3-bfcb-4130-ad2f-f560f2e12f8e&lt;br /&gt;
 Total devices 2 FS bytes used 27.75GiB&lt;br /&gt;
 devid    1 size 136.72GiB used 17.03GiB path /dev/sda1&lt;br /&gt;
 devid    2 size 136.72GiB used 17.01GiB path /dev/sdb1&lt;br /&gt;
&lt;br /&gt;
=====Aggiungere una partizione=====&lt;br /&gt;
 # btrfs device add /dev/sdc1 /mnt&lt;br /&gt;
&lt;br /&gt;
 # btrfs filesystem show /mnt&lt;br /&gt;
 Label: none  uuid: 4714fca3-bfcb-4130-ad2f-f560f2e12f8e&lt;br /&gt;
 Total devices 3 FS bytes used 27.75GiB&lt;br /&gt;
 devid    1 size 136.72GiB used 17.03GiB path /dev/sda1&lt;br /&gt;
 devid    2 size 136.72GiB used 17.01GiB path /dev/sdb1&lt;br /&gt;
 devid    3 size 136.72GiB used 0.00 path /dev/sdc1&lt;br /&gt;
&lt;br /&gt;
Adesso è necessario effettuare una redistribuzione dei dati sui tre dischi&lt;br /&gt;
 # btrfs balance start -d -m /mnt&lt;br /&gt;
&lt;br /&gt;
Per vedere a che punto del bilanciamento è arrivato il sistema&lt;br /&gt;
 # btrfs fi balance status /&lt;br /&gt;
&lt;br /&gt;
 # btrfs filesystem show /mnt&lt;br /&gt;
 Label: none  uuid: 4714fca3-bfcb-4130-ad2f-f560f2e12f8e&lt;br /&gt;
 Total devices 3 FS bytes used 27.78GiB&lt;br /&gt;
 devid    1 size 136.72GiB used 10.03GiB path /dev/sda1&lt;br /&gt;
 devid    2 size 136.72GiB used 10.03GiB path /dev/sdb1&lt;br /&gt;
 devid    3 size 136.72GiB used 11.00GiB path /dev/sdc1&lt;br /&gt;
&lt;br /&gt;
=====Rimuovere un device=====&lt;br /&gt;
 # btrfs device delete /dev/sdb1 /mnt&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
==== RAID 1 ====&lt;br /&gt;
=====Creazione di un raid1 ex novo===== &lt;br /&gt;
Copiare la tabella delle partizioni da sda a sdb&lt;br /&gt;
 # sfdisk -d /dev/sda | sfdisk /dev/sdb&lt;br /&gt;
&lt;br /&gt;
Creare il raid&lt;br /&gt;
 # mkfs.btrfs -d raid1 -m raid1 /dev/sda1 /dev/sdb1&lt;br /&gt;
&lt;br /&gt;
===== Aggiungere un mirror ad un disco esistente =====&lt;br /&gt;
 # btrfs device add /dev/sdb1 ''/punto_di_mount''&lt;br /&gt;
 # btrfs balance start -dconvert=raid1 -mconvert=raid1 ''/punto_di_mount''&lt;br /&gt;
&lt;br /&gt;
===== GRUB =====&lt;br /&gt;
Se si utilizza un raid1 per la partizione di sistema '''/''' e si vuole rendere Linux avviabile automaticamente anche in caso di danneggiamento o mancanza di uno dei due dischi del raid occorrerà che sul secondo disco sia clonata la partizione EFI o BIOS GRUB (es.: /dev/sda1) e che vi sia installato il bootloader.&lt;br /&gt;
 # dd if=/dev/sda1 of=/dev/sdb1&lt;br /&gt;
 # grub-install /dev/sdb&lt;br /&gt;
&lt;br /&gt;
=====Sostituzione device danneggiato=====&lt;br /&gt;
Verificare qual è il disco che dà dei problemi&lt;br /&gt;
 # mount /dev/sda1 ''/punto_di_mount'' -o degraded&lt;br /&gt;
 # btrfs device stats ''/punto_di_mount''&lt;br /&gt;
 # btrfs filesystem show ''/punto_di_mount''&lt;br /&gt;
 # btrfs device usage ''/punto_di_mount''&lt;br /&gt;
&lt;br /&gt;
Ipotizzando che '''1''' sia l'ID del disco danneggiato secondo i comandi dati in precedenza&lt;br /&gt;
 # btrfs replace start '''1''' /dev/sdc1 ''/punto_di_mount''&lt;br /&gt;
&lt;br /&gt;
Per monitorare lo stato di ripristino del raid&lt;br /&gt;
 # btrfs replace status ''/punto_di_mount''&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
 # btrfs device delete missing /mnt&lt;br /&gt;
&lt;br /&gt;
==== RAID 5 ====&lt;br /&gt;
{{Note&lt;br /&gt;
|type=warning &lt;br /&gt;
| text= '''ATTENZIONE il raid5 su BTRFS è considerato [https://btrfs.readthedocs.io/en/latest/btrfs-man5.html#raid56-status-and-recommended-practices non sicuro] e se ne sconsiglia il suo utilizzo'''&lt;br /&gt;
}}&lt;br /&gt;
==== RAID 1C ====&lt;br /&gt;
&lt;br /&gt;
===== RAID 1C3 =====&lt;br /&gt;
Se si desidera duplicare i dati rispettivamente 2 volte in modo da poter perdere fino a due dischi su 3 senza perdere dati è possibile utilizzare una modalità chiamata raid1c3&lt;br /&gt;
&lt;br /&gt;
Per creare ex novo il raid1c3&lt;br /&gt;
 # mkfs.btrfs -d raid1c3 -m raid1c3 /dev/sda1 /dev/sdb1 /dev/sdc1&lt;br /&gt;
&lt;br /&gt;
Per convertire a raid1c3&lt;br /&gt;
 # btrfs balance start -dconvert=raid1c3 -mconvert=raid1c3 /storage-btrfs/&lt;br /&gt;
&lt;br /&gt;
===== RAID 1C4 =====&lt;br /&gt;
Se si desidera duplicare i dati rispettivamente 3 volte in modo da poter perdere fino a 3 dischi su 4 senza perdere dati è possibile utilizzare una modalità chiamata raid1c4&lt;br /&gt;
&lt;br /&gt;
Per creare ex novo il raid1c3&lt;br /&gt;
 # mkfs.btrfs -d raid1c4 -m raid1c4 /dev/sda1 /dev/sdb1 /dev/sdc1&lt;br /&gt;
&lt;br /&gt;
Per convertire a raid1c4&lt;br /&gt;
 # btrfs balance start -dconvert=raid1c4 -mconvert=raid1c4 /storage-btrfs/&lt;br /&gt;
&lt;br /&gt;
== ZFS ==&lt;br /&gt;
===Installazione di modulo e le utility da AUR===&lt;br /&gt;
 # pacman-key -r F75D9D76&lt;br /&gt;
 # pacman-key --lsign-key F75D9D76&lt;br /&gt;
 $ pikaur -S zfs-utils zfs-dkms&lt;br /&gt;
&lt;br /&gt;
===Installazione di modulo e utility da archzfs===&lt;br /&gt;
Modificare le seguenti righe al file '''pacman.conf''' di archiso&lt;br /&gt;
 [archzfs-testing]&lt;br /&gt;
 Server = https://archzfs.com/$repo/$arch&lt;br /&gt;
&lt;br /&gt;
 # pacman-key -r DDF7DB817396A49B2A2723F7403BD972F75D9D76&lt;br /&gt;
 # pacman-key --lsign-key DDF7DB817396A49B2A2723F7403BD972F75D9D76&lt;br /&gt;
 # pacman -S zfs-utils zfs-linux&lt;br /&gt;
&lt;br /&gt;
===Configurare il FS===&lt;br /&gt;
[https://wiki.archlinux.org/title/ZFS Comandi] per ottenere informazioni utili sul filesystem e sui pool&lt;br /&gt;
 # zfs list -t  all&lt;br /&gt;
 # zpool status&lt;br /&gt;
 # zpool list&lt;br /&gt;
&lt;br /&gt;
Abilitare i vari servizi sul filesystem&lt;br /&gt;
 # systemctl enable zfs-zed.service&lt;br /&gt;
 # systemctl enable zfs-mount.service&lt;br /&gt;
 # systemctl enable zfs-share.service&lt;br /&gt;
 # systemctl enable zfs-import.target&lt;br /&gt;
 # systemctl enable zfs.target&lt;br /&gt;
&lt;br /&gt;
Creare un pool su un disco&lt;br /&gt;
 # zpool create &amp;quot;pool&amp;quot; sda&lt;br /&gt;
&lt;br /&gt;
Creare un pool su una partizione&lt;br /&gt;
 # zpool create &amp;quot;pool&amp;quot; sda2&lt;br /&gt;
&lt;br /&gt;
Importare un pool&lt;br /&gt;
 # zpool import &amp;quot;pool&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Aggiungere pool alla cache per auto-import e mount (abilitare i vari demoni zfs)&lt;br /&gt;
 # zpool set cachefile=/etc/zfs/zpool.cache &amp;quot;pool&amp;quot;&lt;br /&gt;
&lt;br /&gt;
oppure si possono caricare i mountpoint in modalità legacy dall'fstab&lt;br /&gt;
 # zfs create -o mountpoint=legacy ''pool''/directory&lt;br /&gt;
&lt;br /&gt;
Aggiungere la compressione&lt;br /&gt;
 # zfs get compression ''pool''&lt;br /&gt;
 # zfs set compression=lz4 ''pool''&lt;br /&gt;
&lt;br /&gt;
Vedere le proprietà di un ''pool''&lt;br /&gt;
 # zfs get all ''zpool''&lt;br /&gt;
&lt;br /&gt;
==== RAID ====&lt;br /&gt;
Creare un pool in raid0&lt;br /&gt;
 # zpool create &amp;quot;pool&amp;quot; /dev/sdb /dev/sdc&lt;br /&gt;
&lt;br /&gt;
Creare un pool in raid1&lt;br /&gt;
 # zpool create &amp;quot;pool&amp;quot; mirror /dev/sdb /dev/sc&lt;br /&gt;
&lt;br /&gt;
Creare un pool ''raid5'' su più dischi&lt;br /&gt;
 # zpool create &amp;quot;pool&amp;quot; raidz /dev/sdb /dev/sdc /dev/sdd&lt;br /&gt;
&lt;br /&gt;
Creare un pool raid5 su immagini&lt;br /&gt;
 # zpool create &amp;quot;pool&amp;quot; raidz /path/1.img /path/2.img /path/3.img&lt;br /&gt;
&lt;br /&gt;
* [https://docs.oracle.com/cd/E19253-01/819-5461/gbbvf/index.html Sostituire] disco in raid&lt;br /&gt;
&lt;br /&gt;
Rimuovere il disco da sostituire&lt;br /&gt;
 # zpool offline disco1&lt;br /&gt;
&lt;br /&gt;
Inserire il nuovo disco&lt;br /&gt;
 # zpool replace &amp;quot;pool&amp;quot; disco1&lt;br /&gt;
 # zpool online disco1&lt;br /&gt;
&lt;br /&gt;
* Utilizza un altro disco montato al posto di quello danneggiato&lt;br /&gt;
 # zpool replace &amp;quot;pool&amp;quot; disco1 disco2&lt;br /&gt;
&lt;br /&gt;
Aggiungere uno o più dischi ad un pool&lt;br /&gt;
 # zpool add &amp;quot;pool&amp;quot; mirror disco3 disco4&lt;br /&gt;
 # zpool add &amp;quot;pool&amp;quot; raidz disco3 disco4 disco5&lt;br /&gt;
&lt;br /&gt;
Rimuovere disco1 da pool se aggiunto erroneamente&lt;br /&gt;
 # zpool remove &amp;quot;pool&amp;quot; disco1&lt;br /&gt;
&lt;br /&gt;
Controllare lo stato di un pool&lt;br /&gt;
 # zpool status&lt;br /&gt;
&lt;br /&gt;
Correggere eventuali errori&lt;br /&gt;
 # zpool clear ''pool'' ''disco''&lt;br /&gt;
 # zpool scrub  ''pool''&lt;br /&gt;
&lt;br /&gt;
=== Root filesystem ===&lt;br /&gt;
* Guida ufficiale [https://openzfs.github.io/openzfs-docs/Getting%20Started/Arch%20Linux/Root%20on%20ZFS/1-preparation.html Root on ZFS]&lt;br /&gt;
&lt;br /&gt;
Per prima cosa organizzare la tabella delle partizioni del [[#Preparazione_del_disco | disco]]&lt;br /&gt;
&lt;br /&gt;
Formattare la partizione e creare il dataset (senza mountpoint)&lt;br /&gt;
 # zpool create -m none rpool ''sda2''&lt;br /&gt;
 &lt;br /&gt;
Smontare il pool e rimontarlo in modalità legacy &lt;br /&gt;
 # zfs create -o mountpoint=none rpool/ROOT&lt;br /&gt;
 # zfs create -o mountpoint=legacy rpool/ROOT/arch&lt;br /&gt;
 # zpool set bootfs=rpool/ROOT/arch rpool&lt;br /&gt;
 # mount -t zfs rpool/ROOT /mnt&lt;br /&gt;
''rpool'' è il nome che abbiamo voluto dare al volume contenente il filesystem di sistema&lt;br /&gt;
&lt;br /&gt;
NB: se NON si usa il mountpoint in modalità legacy occorrerà impostare &amp;lt;code&amp;gt;canmount=noauto&amp;lt;/code&amp;gt; su tutti i dataset con &amp;lt;code&amp;gt;mountpoint=/&amp;lt;/code&amp;gt; (es.: zfs create -o mountpoint=/ -o canmount=noauto rpool/ROOT/arch) altrimenti il sistema cercherà di eseguirne automaticamente l'automount e fallirà se esistono più filesystem da montare su /&lt;br /&gt;
&lt;br /&gt;
Se volessimo aggiungere altri pool es.:&lt;br /&gt;
 # zfs create rpool/home&lt;br /&gt;
 # zfs create rpool/arch/pkg&lt;br /&gt;
 # zfs create rpool/var&lt;br /&gt;
 # zfs create rpool/srv&lt;br /&gt;
&lt;br /&gt;
Configurare la cache degli zpool&lt;br /&gt;
 # zpool set cachefile=/etc/zfs/rpool.cache rpool &lt;br /&gt;
&lt;br /&gt;
Copiare il file di cache nel sistema dove dovremo eseguire il chroot per l'installazione.&lt;br /&gt;
 # mkdir -p /mnt/etc/zfs&lt;br /&gt;
 # cp /etc/zfs/rpool.cache /mnt/etc/zfs/rpool.cache&lt;br /&gt;
&lt;br /&gt;
Installare il sistema di base&lt;br /&gt;
 # pacstrap -K /mnt base linux linux-firmware zfs-utils zfs-linux&lt;br /&gt;
&lt;br /&gt;
Altri pacchetti consigliati&lt;br /&gt;
 # pacstrap -K /mnt base-devel net-tools networkmanager nano zsh grml-zsh-config busybox&lt;br /&gt;
&lt;br /&gt;
Eseguire il chroot per procedere con l'installazione&lt;br /&gt;
 # arch-chroot /mnt&lt;br /&gt;
&lt;br /&gt;
Configurare il mountpoint su fstab&lt;br /&gt;
/etc/fstab &lt;br /&gt;
 rpool/ROOT/arch      /       zfs         noatime     0 0&lt;br /&gt;
&lt;br /&gt;
Editare il file /etc/mkinitcpio.conf aggiungendo zfs prima del filesystem&lt;br /&gt;
 HOOKS=&amp;quot;base udev autodetect modconf block keyboard zfs filesystems&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Abilitare i servizi per ZFS all'avvio&lt;br /&gt;
 # systemctl enable zfs-zed.service&lt;br /&gt;
 # systemctl enable zfs-mount.service&lt;br /&gt;
 # systemctl enable zfs-share.service&lt;br /&gt;
 # systemctl enable zfs-import.target&lt;br /&gt;
 # systemctl enable zfs.target&lt;br /&gt;
&lt;br /&gt;
Impostare una password di root&lt;br /&gt;
 # passwd&lt;br /&gt;
&lt;br /&gt;
Ricreare il ramdisk col supporto per ZFS&lt;br /&gt;
 # mkinitcpio -p linux&lt;br /&gt;
&lt;br /&gt;
Installare il [[Appunti_Arch_Linux#BOOT_LOADER|Boot Loader]]&lt;br /&gt;
&lt;br /&gt;
Uscire dal chroot e terminazione dell'installazione&lt;br /&gt;
 # exit&lt;br /&gt;
 # zfs unmount -a&lt;br /&gt;
 # cp /etc/zfs/rpool.cache /mnt/etc/zfs/rpool.cache&lt;br /&gt;
 # zpool export rpool&lt;br /&gt;
 # reboot&lt;br /&gt;
&lt;br /&gt;
==== BOOT LOADER ====&lt;br /&gt;
===== ZFSBootMenu =====&lt;br /&gt;
Per gestire a meglio gli snapshot e la clonazione dei pool è consigliabile utilizzare, su PC che supportano UEFI, il boot loader [https://docs.zfsbootmenu.org/en/latest/guides/alpine/uefi.html ZFSBootMenu].&lt;br /&gt;
&lt;br /&gt;
Esportiamo le variabile per configurare il primo disco /dev/sda come disco di avvio&lt;br /&gt;
 # export BOOT_DISK=&amp;quot;/dev/sda&amp;quot;&lt;br /&gt;
 # export BOOT_PART=&amp;quot;1&amp;quot;&lt;br /&gt;
 # export BOOT_DEVICE=&amp;quot;${BOOT_DISK}${BOOT_PART}&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Assicuriamoci che il nostro pool di root sia configurato come avviabile&lt;br /&gt;
 # zpool set bootfs=''rpool/ROOT/'' ''rpool''&lt;br /&gt;
&lt;br /&gt;
Formattiamo sda1 per creare la partizione EFI di boot&lt;br /&gt;
 # mkfs.vfat -F32 &amp;quot;$BOOT_DEVICE&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Aggiungiamola all'fstab e montiamola&lt;br /&gt;
 # cat &amp;lt;&amp;lt; EOF &amp;gt;&amp;gt; /etc/fstab&lt;br /&gt;
 $BOOT_DEVICE /boot/efi vfat defaults 0 0&lt;br /&gt;
 EOF&lt;br /&gt;
&lt;br /&gt;
 # mkdir -p /boot/efi&lt;br /&gt;
 # mount /boot/efi&lt;br /&gt;
&lt;br /&gt;
Scarichiamo ed installiamo il boot loader&lt;br /&gt;
 # mkdir -p /boot/efi/EFI/ZBM&lt;br /&gt;
 # curl -o /boot/efi/EFI/ZBM/VMLINUZ.EFI -L https://get.zfsbootmenu.org/efi&lt;br /&gt;
 # cp /boot/efi/EFI/ZBM/VMLINUZ.EFI /boot/efi/EFI/ZBM/VMLINUZ-BACKUP.EFI&lt;br /&gt;
&lt;br /&gt;
Forziamo zfsbootmenu a montare il nostro dataset con i permessi di scrittura&lt;br /&gt;
 # zfs set org.zfsbootmenu:commandline=&amp;quot;quiet loglevel=4 rw&amp;quot; rpool/ROOT&lt;br /&gt;
&lt;br /&gt;
Installiamo e configuriamo  ''efibootmgr''&lt;br /&gt;
 # pacman -S efibootmgr&lt;br /&gt;
&lt;br /&gt;
 # efibootmgr -c -d &amp;quot;$BOOT_DISK&amp;quot; -p &amp;quot;$BOOT_PART&amp;quot; \&lt;br /&gt;
  -L &amp;quot;ZFSBootMenu (Backup)&amp;quot; \&lt;br /&gt;
  -l \\EFI\\ZBM\\VMLINUZ-BACKUP.EFI&lt;br /&gt;
&lt;br /&gt;
 # efibootmgr -c -d &amp;quot;$BOOT_DISK&amp;quot; -p &amp;quot;$BOOT_PART&amp;quot; \&lt;br /&gt;
  -L &amp;quot;ZFSBootMenu&amp;quot; \&lt;br /&gt;
  -l \\EFI\\ZBM\\VMLINUZ.EFI&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Se si utilizza un pool distribuito su più dischi (RAID1 o RAIDZ) occorrerà installare il bootloader anche sugli altri dispositivi (nel caso del disco /dev/sdb).&lt;br /&gt;
&lt;br /&gt;
 # mount /dev/sdb1 /boot/efi&lt;br /&gt;
 # curl -o /boot/efi/EFI/ZBM/VMLINUZ.EFI -L https://get.zfsbootmenu.org/efi&lt;br /&gt;
 # efibootmgr -c -d &amp;quot;$BOOT_DISK&amp;quot; -p &amp;quot;$BOOT_PART&amp;quot; \&lt;br /&gt;
  -L &amp;quot;ZFSBootMenu sdb&amp;quot; \&lt;br /&gt;
  -l \\EFI\\ZBM\\VMLINUZ.EFI&lt;br /&gt;
&lt;br /&gt;
===== GRUB =====&lt;br /&gt;
Se non ci interessa gestire snapshot o utilizziamo un PC con BIOS è possibile optare per GRUB &lt;br /&gt;
 # pacman -S grub&lt;br /&gt;
 # grub-install /dev/sda&lt;br /&gt;
 (se si usa un pool composto da più dischi es. raidz per il filesystem di root è consigliabile installare grub su tutti i dischi: sda, sdb, sdc, sdd...)&lt;br /&gt;
 # grub-mkconfig -o /boot/grub/grub.cfg&lt;br /&gt;
&lt;br /&gt;
Esempio&lt;br /&gt;
 #Grub entry&lt;br /&gt;
 menuentry 'Arch Linux'{&lt;br /&gt;
       insmod gzio&lt;br /&gt;
       insmod part_gpt&lt;br /&gt;
       insmod zfs&lt;br /&gt;
       set root='hd0,gpt3'&lt;br /&gt;
        echo    'Loading Linux linux ...'&lt;br /&gt;
        linux   /ROOT@/boot/vmlinuz-linux root=ZFS=rpool/ROOT rw  loglevel=3 quiet&lt;br /&gt;
        echo    'Loading initial ramdisk ...'&lt;br /&gt;
        initrd  /ROOT@/boot/initramfs-linux.img&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
=== Snapshot ===&lt;br /&gt;
Snapshot del dataset ROOT&lt;br /&gt;
 # zfs snapshot -r rpool/ROOT''@snapshot-2023-03-07''&lt;br /&gt;
&lt;br /&gt;
Lista degli snapshot presenti&lt;br /&gt;
 # zfs list -t snapshot&lt;br /&gt;
&lt;br /&gt;
Ripristino dello snapshot&lt;br /&gt;
 # zfs rollback rpool''@snapshot-2023-03-07''&lt;br /&gt;
&lt;br /&gt;
Oltre che servire per il ripristino, possono essere montati per esplorarne il contenuto, ma non è possibile modificarlo.&lt;br /&gt;
 # mount -t zfs rpool@''2023-04-11'' /mnt/''snapshot''&lt;br /&gt;
&lt;br /&gt;
Copia locale di un dataset&lt;br /&gt;
 # zfs send -R rpool/ROOT''@snapshot-2023-03-07'' | zfs recv -F rpool/ROOT/backup&lt;br /&gt;
&lt;br /&gt;
Invio via SSH di una snapshot&lt;br /&gt;
 # zfs send -R rpool/ROOT''@snapshot-2023-03-07''| ssh ''user@ip_address'' zfs recv tank/backups/rootzfs&lt;br /&gt;
&lt;br /&gt;
Backup locale di una snapshot&lt;br /&gt;
 # zfs send -R rpool/ROOT@snapshot | gzip &amp;gt; /tmp/zfs_backup.gz&lt;br /&gt;
&lt;br /&gt;
Restore del backup&lt;br /&gt;
 # gzcat /tmp/zfs_backup.gz | zfs recv -F rpool/ROOT&lt;br /&gt;
&lt;br /&gt;
==== Clone ====&lt;br /&gt;
Se vogliamo eseguire operazioni di scrittura su una snapshot occorre effettuare un clone del dataset&lt;br /&gt;
 # zfs snapshot ''rpool/home''@yesterday&lt;br /&gt;
 # zfs clone ''rpool/home''@yesterday rpool/new_home&lt;br /&gt;
&lt;br /&gt;
Per sostituire il filesystem principale col clone&lt;br /&gt;
 # zfs promote rpool/new_home&lt;br /&gt;
&lt;br /&gt;
=== ZFS Cifrato ===&lt;br /&gt;
Creare un dataset cifrato con password&lt;br /&gt;
 # zfs create -o encryption=on -o keyformat=''password'' ''nomepool''/''nomedataset''&lt;br /&gt;
&lt;br /&gt;
Generazione di una chiave di cifratura&lt;br /&gt;
 # dd if=/dev/random of=/path/to/key bs=1 count=32&lt;br /&gt;
&lt;br /&gt;
Creare un dataset cifrato con una chiave di cifratura &lt;br /&gt;
 # zfs create -o encryption=on -o keyformat=raw -o keylocation=''file:///directory/della/chiave'' ''nomepool''/''nomedataset''&lt;br /&gt;
&lt;br /&gt;
Controllare il percorso della chiave per ''nomepool''/''nomedataset''&lt;br /&gt;
 # zfs get keylocation ''nomepool''/''nomedataset''&lt;br /&gt;
&lt;br /&gt;
Cambiare il percorso della chiave&lt;br /&gt;
 # zfs set keylocation=''file:///nuova/directory/della/chiave'' ''nomepool''/''nomedataset''&lt;br /&gt;
&lt;br /&gt;
Caricare manualmente le chiavi di cifratura prima del montaggio&lt;br /&gt;
 # zfs load-key ''nomepool''/''nomedataset'' # carica la chiave del determinato dataset&lt;br /&gt;
 # zfs load-key -a # carica tutte le chiavi del filesystem&lt;br /&gt;
&lt;br /&gt;
==== Unlock con systemd ====&lt;br /&gt;
Creare script per il caricamento delle chiavi all'avvio &lt;br /&gt;
&lt;br /&gt;
* Caricando la password dal keyfile&lt;br /&gt;
''/etc/systemd/system/zfs-loadkey-file.service''&lt;br /&gt;
&lt;br /&gt;
 [Unit]&lt;br /&gt;
 Description=Load ZFS encryption keys&lt;br /&gt;
 DefaultDependencies=no&lt;br /&gt;
 After=zfs-import.target&lt;br /&gt;
 Before=zfs-mount.service&lt;br /&gt;
 [Service]&lt;br /&gt;
 Type=oneshot&lt;br /&gt;
 RemainAfterExit=yes&lt;br /&gt;
 ExecStart=/usr/sbin/zfs load-key -a&lt;br /&gt;
 StandardInput=tty-force&lt;br /&gt;
 [Install]&lt;br /&gt;
 WantedBy=zfs-mount.service&lt;br /&gt;
&lt;br /&gt;
* Digitando la password&lt;br /&gt;
&lt;br /&gt;
''/etc/systemd/system/zfs-load-key@.service''&lt;br /&gt;
 [Unit]&lt;br /&gt;
 Description=Load %I encryption keys&lt;br /&gt;
 Before=systemd-user-sessions.service zfs-mount.service&lt;br /&gt;
 After=zfs-import.target&lt;br /&gt;
 Requires=zfs-import.target&lt;br /&gt;
 DefaultDependencies=no&lt;br /&gt;
 [Service]&lt;br /&gt;
 Type=oneshot&lt;br /&gt;
 RemainAfterExit=yes&lt;br /&gt;
 ExecStart=/bin/sh -c 'until (systemd-ask-password &amp;quot;Encrypted ZFS password for %I&amp;quot; --no-tty | zfs load-key %I); do echo &amp;quot;Try again!&amp;quot;; done'&lt;br /&gt;
 [Install]&lt;br /&gt;
 WantedBy=zfs-mount.service&lt;br /&gt;
&lt;br /&gt;
==== Unlock al login ====&lt;br /&gt;
Impostare il filesystem in modalità legacy così che non sia montato automaticamente all'avvio&lt;br /&gt;
 # zfs set mountpoint=legacy zroot/data/&lt;br /&gt;
&lt;br /&gt;
Modificare il file /etc/fstab&lt;br /&gt;
 zroot/data/         /home           zfs             rw,xattr,posixacl,noauto        0 0&lt;br /&gt;
&lt;br /&gt;
Creare il seguente script: &amp;lt;code&amp;gt;/sbin/mount-zfs-homedir&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 #&lt;br /&gt;
 set -eu&lt;br /&gt;
 # Password is given to us via stdin, save it in a variable for later&lt;br /&gt;
 PASS=$(cat -)&lt;br /&gt;
 #&lt;br /&gt;
 VOLNAME=&amp;quot;zroot/data/home&amp;quot;&lt;br /&gt;
 #&lt;br /&gt;
 # Unlock and mount the volume&lt;br /&gt;
 zfs load-key &amp;quot;$VOLNAME&amp;quot; &amp;lt;&amp;lt;&amp;lt; &amp;quot;$PASS&amp;quot; || continue&lt;br /&gt;
 zfs mount &amp;quot;$VOLNAME&amp;quot; || true # ignore errors&lt;br /&gt;
&lt;br /&gt;
Aggiungere lo script a PAM: /etc/pam.d/system-auth&lt;br /&gt;
&lt;br /&gt;
 auth       optional                    pam_exec.so          expose_authtok /sbin/mount-zfs-homedir&lt;br /&gt;
&lt;br /&gt;
=== Cache ===&lt;br /&gt;
Utilizzare un moderno disco a stato solido può essere una soluzione economica per velocizzare un pool, eventualmente anche raid&lt;br /&gt;
&lt;br /&gt;
 # zpool add -f ''rpool'' cache /dev/sdd1&lt;br /&gt;
 # zpool add -f ''rpool'' log /dev/sdd2&lt;br /&gt;
&lt;br /&gt;
=== Sharing ===&lt;br /&gt;
Non è molto noto, ma ZFS ha integrati dei [https://docs.oracle.com/cd/E36784_01/html/E36835/gayne.html#scrolltoc comandi] per permettere la condivisione del filesystem con altre macchine tramite i protocolli NFS o SMB.&lt;br /&gt;
&lt;br /&gt;
Premessa: occorrerà attivare il server NFS&lt;br /&gt;
 # systemctl start nfs-server.service&lt;br /&gt;
 # systemctl enable nfs-server.service&lt;br /&gt;
&lt;br /&gt;
Condividere tramite NFS l'intero pool ''home''&lt;br /&gt;
 # zfs set share.nfs=on ''pool''/home&lt;br /&gt;
&lt;br /&gt;
Verificare la condivisione&lt;br /&gt;
 # zfs get -r share.nfs ''pool''/home&lt;br /&gt;
 NAME             PROPERTY   VALUE  SOURCE&lt;br /&gt;
 pool/home        share.nfs  on     local&lt;br /&gt;
&lt;br /&gt;
Condividere tramite NFS la directory home dell'utente 1, 2...&lt;br /&gt;
 # zfs create ''pool''/home/'''utente1'''&lt;br /&gt;
 # zfs create ''pool''/home/'''utente2'''&lt;br /&gt;
&lt;br /&gt;
Si possono specificare opzioni di montaggio per i permessi sul mount&lt;br /&gt;
 # zfs set share.nfs.nosuid=on ''pool''/home/'''utente1'''&lt;br /&gt;
 # zfs set share.nfs=on ''pool''/home/'''utente1'''&lt;br /&gt;
&lt;br /&gt;
Condividere una directory con tutta la rete&lt;br /&gt;
 # zfs share -o share.nfs=on -o share.nfs.public=on pool/public%pubshare&lt;br /&gt;
&lt;br /&gt;
Condividere una directory con una parte della rete&lt;br /&gt;
 # zfs set share.nfs='rw=@192.0.10.0/16,rw=@192.0.11.0/24' pool/public%pubshare&lt;br /&gt;
&lt;br /&gt;
Disabilitare temporaneamente una condivisione&lt;br /&gt;
 # zfs unshare pool/home/''nomeshare''&lt;br /&gt;
&lt;br /&gt;
Rimuovere una condivisione&lt;br /&gt;
 # zfs set share.nfs=off pool/''share''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Montare share ===&lt;br /&gt;
Montare il volume pool1 della macchina con IP 192.168.0.2 su /mnt/pool1&lt;br /&gt;
 # mount -t nfs 192.168.0.2:/pool1 /mnt/pool1&lt;br /&gt;
&lt;br /&gt;
Aggiungere la seguente riga al file '''/etc/fstab''' per automatizzare il montaggio&lt;br /&gt;
 192.168.0.2:/pool1      /mnt/pool1      nfs       defaults          0          0&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== SWAP ===&lt;br /&gt;
Creare una partizione swap da 8 GiB&lt;br /&gt;
 # zfs create -V 8G '''&amp;lt;pool&amp;gt;/swap'''&lt;br /&gt;
&lt;br /&gt;
Formattazione della partizione&lt;br /&gt;
 # mkswap -f /dev/zvol/&amp;lt;pool&amp;gt;/swap&lt;br /&gt;
&lt;br /&gt;
Attivazione della swap&lt;br /&gt;
 # swapon /dev/zvol/&amp;lt;pool&amp;gt;/swap&lt;br /&gt;
&lt;br /&gt;
Aggiungere la swap al &amp;lt;code&amp;gt;/etc/fstab&amp;lt;/code&amp;gt;&lt;br /&gt;
 '''/dev/zvol/&amp;lt;pool&amp;gt;/swap''' none swap discard 0 0&lt;br /&gt;
&lt;br /&gt;
== Filesystem Cifrato ==&lt;br /&gt;
Esistono molti modi per cifrare volumi e file su Linux, come si può vedere da questa [https://wiki.archlinux.org/title/Data-at-rest_encryption#Comparison_table tabella]&lt;br /&gt;
&lt;br /&gt;
* Generare una password di 32 caratteri alfanumerici con /dev/random. &lt;br /&gt;
 cat /dev/random | tr -dc '[:alnum:]' | fold -w 32 | head -n 1&lt;br /&gt;
&lt;br /&gt;
=== EncFS ===&lt;br /&gt;
Cifrare una directory può essere un'alternativa alla cifratura di un intera partizione come avviene invece con Cryptsetup. EncFS è un filesystem user-space montabile tramite FUSE che permette di effettuare questa operazione. Rispetto ad un filesystem loopback criptato ci sono però diversi pregi e difetti.&lt;br /&gt;
&lt;br /&gt;
* Pro&lt;br /&gt;
# Selezionare selettivamente i contenuti da cifrare, rispetto ad avere un device completamente cifrato, appesantisce meno il lavoro della CPU specialmente quando si utilizzano processori datati privi del set di istruzioni AES.&lt;br /&gt;
# Dimensioni modificabili: un file system vuoto EncFS è composto da qualche dozzina di byte e può crescere a qualsiasi dimensione senza bisogno di essere riformattato. Con un dispositivi di cifratura a blocchi, si alloca un filesystem in anticipo con le dimensioni desiderate.&lt;br /&gt;
# Possibilità di backup incrementali: Un filesystem EncFS può essere salvato con una politica per file. Un programma di backup è in grado di rilevare quali file sono cambiati, anche se non sarà in grado di decifrarli.&lt;br /&gt;
# Permette di aggiungere la crittografia a qualsiasi filesystem&lt;br /&gt;
# Lavora a livello utente, non richiede permessi di amministratore&lt;br /&gt;
&lt;br /&gt;
* Contro&lt;br /&gt;
# Non permette di cifrare l'intera installazione, ma solo i file selezionati&lt;br /&gt;
# Chi ha accesso ai file crittografati può conoscerne i meta-dati (numero di file, permessi, dimensione)&lt;br /&gt;
# EncFS sembra non sia più attivamente mantenuto. Un'alternativa molto simile potrebbe essere gocryptfs.&lt;br /&gt;
&lt;br /&gt;
==== Montaggio automatico ====&lt;br /&gt;
Dato che non è possibile passare opzioni all'eseguibile encfs su fstab è necessario creare un wrapper, cioè uno script da rendere eseguibile (es. &amp;lt;code&amp;gt;/home/user/encfs.sh&amp;lt;/code&amp;gt;) che vada a recuperare la password da un file (es. ''encfs_password''), magari contenuto in una chiavetta USB anch'essa montata automaticamente all'avvio.&lt;br /&gt;
&lt;br /&gt;
Wrapper&lt;br /&gt;
 #!/bin/sh&lt;br /&gt;
 encfs --public --extpass=&amp;quot;cat /mnt/USB/encfs_password&amp;quot; $*&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
A questo punto è possibile aggiungere all'''/etc/fstab'' le seguenti righe.&lt;br /&gt;
 # Montaggio automatico della penna USB ''cafebabe-b00b5-deadbee'' all'avvio&lt;br /&gt;
 UUID=cafebabe-b00b5-deadbeef /mnt/USB auto defaults,auto 0 0&lt;br /&gt;
 # Richiamo del wrapper &lt;br /&gt;
 /home/''user''/encfs.sh#/home/''user''/.encrypted /home/''user''/decrypted fuse rw,user,auto 0 0&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== gocryptfs ===&lt;br /&gt;
Creare una directory cifrata ''crypt'' e montarla su ''dati''&lt;br /&gt;
 $ mkdir crypt dati&lt;br /&gt;
 $ gocryptfs -init crypt&lt;br /&gt;
 $ gocryptfs crypt dati&lt;br /&gt;
&lt;br /&gt;
Creare una versione cifrata di una preesistente home&lt;br /&gt;
&lt;br /&gt;
 $ mkdir /home/user.crypt&lt;br /&gt;
 $ gocryptfs -init -reverse /home/user&lt;br /&gt;
 $ gocryptfs -reverse /home/user /home/user.crypt&lt;br /&gt;
&lt;br /&gt;
È possibile aggiungere una linea simile alle seguente al file '''/etc/fstab''' per automatizzare il sistema di montaggio di una cartella cifrata durante il boot utilizzando un keyfile.&lt;br /&gt;
&lt;br /&gt;
 /home/user/cipher /home/user/plain fuse./usr/bin/gocryptfs nofail,allow_other,passfile=/tmp/password 0 0&lt;br /&gt;
&lt;br /&gt;
=== [https://wiki.archlinux.org/title/ECryptfs ECryptfs] ===&lt;br /&gt;
&lt;br /&gt;
=== VeraCrypt ===&lt;br /&gt;
[https://www.veracrypt.fr VeraCrypt] (fork di TrueCrypt) è un tool opensource dotato di '''interfaccia grafica''' che permette di configurare la cifratura di volumi reali o file immagini montate in loop. Ha una funzione particolare, chiamata '''Hidden Volume''' che permette di creare un volume nascosto all'interno di un normale volume VeraCrypt al quale si può accedere con una diversa password così da evitare in caso di necessità (ricatto, fidanzata/moglie gelosa, imposizione da parte delle forze dell'ordine) di mostrare il contenuto del reale archivio cifrato.&lt;br /&gt;
&lt;br /&gt;
=== LUKS ===&lt;br /&gt;
Questo strumento permette di crittografare un intero disco o una partizione, es. /dev/'''sdc2''':&lt;br /&gt;
 &lt;br /&gt;
 # cryptsetup luksFormat --cipher aes-xts-plain64 --key-size 512 --hash sha512 --iter-time 5000 /dev/'''sdc2'''&lt;br /&gt;
 &lt;br /&gt;
Una volta formattato il device è possibile montarlo, verrà chiesto di creare una password a meno che nel comando non venga esplicitato un file con la chiave di cifratura&lt;br /&gt;
 # cryptsetup open /dev/'''sdc2''' lukspart&lt;br /&gt;
&lt;br /&gt;
Adesso è possibile formattare il device col filesystem che preferiamo&lt;br /&gt;
 # mkfs.btrfs /dev/mapper/lukspart&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[https://wiki.golem.linux.it/Installare_Arch_Linux_in_una_partizione_cifrata How-to GOLEM]&lt;br /&gt;
&lt;br /&gt;
[https://guide.debianizzati.org/index.php/Volumi_criptati_LUKS_-_Creazione_e_uso_con_cryptmount How-to Debianizzati]&lt;br /&gt;
&lt;br /&gt;
=== fscrypt ===&lt;br /&gt;
È un sistema di cifratura progettato per lavorare con filesystem moderni che supportano direttamente la crittografia nativa come ext4, F2FS, UBIFS, CephFS e forse in futuro anche btrfs. &lt;br /&gt;
&lt;br /&gt;
Abilitiamo la crittografia su una directory di un device '''sdc1''' precedentemente formattato con ext4&lt;br /&gt;
 # fscrypt setup /mnt/encrypted&lt;br /&gt;
 # tune2fs -O encrypt /dev/'''sdc1'''&lt;br /&gt;
 # fscrypt encrypt /mnt/encrypted&lt;br /&gt;
&lt;br /&gt;
Per accedere alla directory al riavvio successivo&lt;br /&gt;
 # fscrypt unlock /mnt/encrypted&lt;br /&gt;
&lt;br /&gt;
=== ZFS ===&lt;br /&gt;
Creiamo un pool dove mettere il dataset cifrato, es.: '''tank/encrypted_data'''&lt;br /&gt;
 # zpool create tank /dev/sdc3&lt;br /&gt;
&lt;br /&gt;
Creiamo il dataset&lt;br /&gt;
 # zfs create -o encryption=aes-256-gcm -o keyformat=passphrase -o keylocation=prompt '''tank/encrypted_data'''&lt;br /&gt;
 &lt;br /&gt;
Montiamo il datasett&lt;br /&gt;
  # zfs mount '''tank/encrypted_data'''&lt;br /&gt;
&lt;br /&gt;
Montiamo pool e dataset cifrato al riavvio successivo &lt;br /&gt;
 # zpool import tank&lt;br /&gt;
 # zfs load-key '''tank/encrypted_data'''&lt;br /&gt;
 # zfs mount '''tank/encrypted_data'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Appunti_Arch_Linux#ZFS_Cifrato|ZFS cifrato]]&lt;br /&gt;
&lt;br /&gt;
= RAID mdadm =&lt;br /&gt;
Su Linux era possibile effettuare RAID via software anche prima dell'avvento di filesystem di nuova generazione come btrfs o zfs. Per fare ciò è possibile utilizzare il comando &amp;lt;code&amp;gt;mdadm&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Vedere l'organizzazione della tabella delle partizioni dei dischi&lt;br /&gt;
 $ lsblk&lt;br /&gt;
&lt;br /&gt;
 sda      8:16   0 447.1G  0 disk &lt;br /&gt;
 ├─sda1   8:17   0   500M  0 part &lt;br /&gt;
 ├─sda2   8:18   0    16G  0 part [SWAP]&lt;br /&gt;
 └─sda3   8:19   0 430.6G  0 part /&lt;br /&gt;
                                 &lt;br /&gt;
 sdb      8:32   1   3.7G  0 disk &lt;br /&gt;
 ├─sdb1   8:33   1   3.5G  0 part &lt;br /&gt;
 ├─sdb2   8:34   1   239M  0 part [SWAP]&lt;br /&gt;
 └─sdb3   8:19   0 430.6G  0 part /&lt;br /&gt;
&lt;br /&gt;
Nell'esempio ci sono due dischi (sda, sdb) contenenti 3 partizioni: EFI, SWAP e Linux.&lt;br /&gt;
&lt;br /&gt;
== RAID 0 ==&lt;br /&gt;
Creare un volume ''md3'' che costituito dalla somma delle due partizioni sda3 e sdb3&lt;br /&gt;
 # mdadm --create --verbose /dev/md3 --level=0 --raid-devices=2 /dev/sda3 /dev/sdb3&lt;br /&gt;
&lt;br /&gt;
Verificare che il raid funzioni correttamente&lt;br /&gt;
 # mdadm --detail /dev/md0&lt;br /&gt;
&lt;br /&gt;
Utilizzare il nuovo volume md3, formattato col filesystem XFS, per una nuova installazione di Arch Linux (montandolo in /mnt)&lt;br /&gt;
 # mkfs.xfs /dev/md3&lt;br /&gt;
 # mount /dev/md3 /mnt/&lt;br /&gt;
&lt;br /&gt;
Per memorizzare l'array nel file di configurazione&lt;br /&gt;
 # mdadm –Es &amp;gt; /etc/mdadm.conf&lt;br /&gt;
&lt;br /&gt;
== RAID 1 ==&lt;br /&gt;
Creare un volume ''md3'' mirror delle due partizioni sda3 e sdb3&lt;br /&gt;
 # mdadm --create /dev/md3 /dev/sda3 /dev/sdb3 --level=1 --raid-devices=2&lt;br /&gt;
&lt;br /&gt;
== RAID 5 ==&lt;br /&gt;
Creare un volume ''md3'' con un [https://en.wikipedia.org/wiki/Standard_RAID_levels#RAID_5 raid5], ovviamente stavolta occorreranno almeno 3 dischi es.: sda3, sdb3, sdc3. &lt;br /&gt;
&lt;br /&gt;
Per creare tre partizioni tutte della stessa dimensione è possibile copiare su sdb e sdc la tabella delle partizioni di sda&lt;br /&gt;
 #  sfdisk -d /dev/sda | sfdisk /dev/sdb&lt;br /&gt;
 #  sfdisk -d /dev/sda | sfdisk /dev/sdc&lt;br /&gt;
&lt;br /&gt;
Creare l'array in raid5&lt;br /&gt;
 # mdadm --create /dev/md/md3 /dev/sda1 /dev/sdb1 /dev/sdc1 --level=5 --raid-devices=3 --bitmap=internal&lt;br /&gt;
&lt;br /&gt;
== Modificare l'array ==&lt;br /&gt;
È possibile passare da raid1 a raid5&lt;br /&gt;
 # mdadm --grow /dev/md3 --level=5&lt;br /&gt;
 # mdadm --grow /dev/md3 --add /dev/sdc3 --raid-devices=3&lt;br /&gt;
&lt;br /&gt;
== Accorgersi di un guasto ==&lt;br /&gt;
Nei raid 1 e 5 in caso di danneggiamento di un disco sarà possibile sostituirlo e ricostruire l'array senza perdere dati. Nell'ipotesi di avere un guasto su '''sdb''' in un raid1 comparirà qualcosa di simile a questo eseguendo &amp;lt;code&amp;gt;cat /proc/mdstat&amp;lt;/code&amp;gt;&lt;br /&gt;
 md3 : active raid1 sda3[1]&lt;br /&gt;
 ''blocks [2/2] [U_]'' &lt;br /&gt;
invece che&lt;br /&gt;
 md3 : active raid1 sda3[1] '''sdb3'''[0]&lt;br /&gt;
      262016 blocks [2/2] [UU]&lt;br /&gt;
&lt;br /&gt;
===Rimuovere il disco danneggiato dal RAID===&lt;br /&gt;
Si dovrà marcare sdb3 come danneggiata e andrà rimossa dall'array.&lt;br /&gt;
 # mdadm --manage /dev/md3 --fail /dev/sdb3&lt;br /&gt;
 # mdadm --manage /dev/md3 --remove /dev/sdb3&lt;br /&gt;
&lt;br /&gt;
Se avessimo più array (es. md1, md2...) contenenti partizioni del disco sdb (sdb1, sdb2...), l'operazione andrebbe ripetuta per ciascuno di essi es.:&lt;br /&gt;
 # mdadm --manage /dev/md1 --fail /dev/sdb1&lt;br /&gt;
 # mdadm --manage /dev/md1 --remove /dev/sdb1&lt;br /&gt;
&lt;br /&gt;
 #  cat /proc/mdstat&lt;br /&gt;
 Personalities : [linear] [multipath] [raid0] [raid1] [raid5] [raid4] [raid6] [raid10]&lt;br /&gt;
 md0 : active raid1 sda3[0]&lt;br /&gt;
 24418688 blocks [2/1] [U_]&lt;br /&gt;
&lt;br /&gt;
 unused devices: &amp;lt;none&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Sostituzione del disco danneggiato ===&lt;br /&gt;
Spegnere il computer, rimuovere il disco guasto e collegarne al suo posto uno funzionante.&lt;br /&gt;
&lt;br /&gt;
'''NB: il nuovo disco dovrà essere di dimensioni uguali o maggiori del disco sostituito'''&lt;br /&gt;
&lt;br /&gt;
Installato il nuovo disco, riaccendere il PC, loggarsi come root e ricreare sul nuovo sdb le stesse partizioni presenti su sda:&lt;br /&gt;
 # sfdisk -d /dev/sda | sfdisk /dev/sdb&lt;br /&gt;
 # fdisk -l ''(per controllare che le partizioni siano uguali)''&lt;br /&gt;
&lt;br /&gt;
=== Ripristino del RAID 1 ===&lt;br /&gt;
Aggiungere ''/dev/sdb3'' a ''/dev/md3''&lt;br /&gt;
 # mdadm --manage /dev/md3 --add /dev/sdb3&lt;br /&gt;
&lt;br /&gt;
Se avessimo più array (es. md1, md2...) contenenti partizioni del disco sdb (sdb1, sdb2...), l'operazione andrebbe ripetuta per ciascuno di essi es.:&lt;br /&gt;
  # mdadm --manage /dev/md1 --add /dev/sdb1&lt;br /&gt;
&lt;br /&gt;
Controllare che tutto sia andato a buon fine&lt;br /&gt;
 # cat /proc/mdstat&lt;br /&gt;
&lt;br /&gt;
= LVM =&lt;br /&gt;
Il [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 Logical Volume Manager] (LVM o gestore logico dei volumi) è un software per la gestione dei dischi che permette di superare le limitazioni legate al normale partizionamento di questi ultimi. Si tratta di una specie di ''strato'' che si va a frapporre tra il dispositivo fisico ed il filesystem. Permette di gestire dinamicamente aggiunta, rimozione o ridimensionamento dello spazio di archiviazione, il RAID, nonché lo snapshot dei volumi.&lt;br /&gt;
&lt;br /&gt;
LVM è un prodotto oltremodo maturo, disponibile per Linux sin dal kernel 2.4, per questa ragione distribuzioni orientate al mercato aziendale come RedHat lo hanno scelto, accoppiandolo a XFS o ext4, come soluzione predefinita per implementare la maggior parte delle caratteristiche fornite dai moderni filesystem come BTRFS o ZFS &lt;br /&gt;
&lt;br /&gt;
LVM si basa sui seguenti concetti&lt;br /&gt;
&lt;br /&gt;
* '''Physical Volumes (PV)''': rappresentano qualsiasi disco si voglia inizializzare (&amp;quot;formattare&amp;quot;) come sottosistema LVM&lt;br /&gt;
 # pvcreate /dev/sda1&lt;br /&gt;
 # pvcreate /dev/sdb3&lt;br /&gt;
 # pvcreate /dev/sdc&lt;br /&gt;
 # pvdisplay&lt;br /&gt;
&lt;br /&gt;
* '''Volume Groups (VG)''': sono costituiti da ''physical volumes'' e rappresentano la capacità totale delle risorse di un LVM&lt;br /&gt;
 # vgcreate vg0 /dev/sda1 /dev/sdb3 /dev/sdc&lt;br /&gt;
 # vgdisplay vg0&lt;br /&gt;
&lt;br /&gt;
* '''Logical Volumes (LV)''': utilizzano le risorse messe a disposizione dai ''volume groups''. Possono essere inizializzati anche con proprietà di RAID o cache.&lt;br /&gt;
 # lvcreate -L 10G -n ''home'' vg0&lt;br /&gt;
 # lvdisplay /dev/vg0/home&lt;br /&gt;
&lt;br /&gt;
Oppure nel caso volessimo fare un raid5&lt;br /&gt;
 # lvcreate -n lvr5 –type raid5 -L 10G -i 3 vg0&lt;br /&gt;
 &lt;br /&gt;
 -n ''nome del volume''&lt;br /&gt;
 –type raid5 ''tipo di raid''&lt;br /&gt;
 -L ''dimensione massima della grandezza del raid''&lt;br /&gt;
 -i ''numero dei physical volumes che si vogliono utilizzare''&lt;br /&gt;
&lt;br /&gt;
Per formattare il volume logico appena creato&lt;br /&gt;
 # mkfs -t ext4 /dev/vg0/lvr5&lt;br /&gt;
&lt;br /&gt;
Per aggiungere un disco ad un Volume Groups&lt;br /&gt;
 # vgextend vg0 /dev/sdb2&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Snapshot ==&lt;br /&gt;
Creare uno snapshot della del volume logico ''/home'' che potrà contenere fino ad un massimo di 5 GiB di dati modificati rispetto all'originale&lt;br /&gt;
 # lvcreate --size 5G --snapshot --name homesnap20230306 /dev/vg0/home&lt;br /&gt;
&lt;br /&gt;
Ripristinare il volume logico ricaricando lo snapshot&lt;br /&gt;
 # lvconvert --merge /dev/vg0/homesnap20230306&lt;br /&gt;
&lt;br /&gt;
Nel caso il logical volume sia attivo il merging avverrà col prossimo riavvio e lo snapshot sparirà.&lt;br /&gt;
&lt;br /&gt;
== Cache ==&lt;br /&gt;
Utilizzare un moderno disco a stato solido può essere una soluzione economica per velocizzare un LV.&lt;br /&gt;
&lt;br /&gt;
Convertire il disco a PV ed aggiungerlo al preesistente VG&lt;br /&gt;
 # pvcreate ''/dev/discoSSD''&lt;br /&gt;
 # vgextend vg0 ''/dev/discoSSD''&lt;br /&gt;
&lt;br /&gt;
Aggiungere la cache al LV&lt;br /&gt;
 # lvcreate --type cache --cachemode writethrough -l 100%FREE -n root_cachepool vg0/home ''/dev/discoSSD''&lt;br /&gt;
&lt;br /&gt;
Rimuovere la cache dal LV&lt;br /&gt;
 # lvconvert --uncache vg0/home&lt;br /&gt;
&lt;br /&gt;
= GRUB (Boot loader) =&lt;br /&gt;
È 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.&lt;br /&gt;
&lt;br /&gt;
== Sistema con BIOS ==&lt;br /&gt;
 # pacman -S grub&lt;br /&gt;
 # grub-mkconfig -o /boot/grub/grub.cfg&lt;br /&gt;
 # grub-install /dev/sda&lt;br /&gt;
&lt;br /&gt;
== Sistema UEFI ==&lt;br /&gt;
'''NB: per installare correttamente GRUB su un sistema UEFI occorre che il device di installazione abbia effettuato il boot in modalità UEFI e non Legacy (BIOS)'''&lt;br /&gt;
&lt;br /&gt;
 # pacman -S grub&lt;br /&gt;
 # mkdir /boot/EFI&lt;br /&gt;
 # mount /dev/sda1 /boot/EFI&lt;br /&gt;
 # grub-install /dev/sda&lt;br /&gt;
 # grub-mkconfig -o /boot/grub/grub.cfg&lt;br /&gt;
&lt;br /&gt;
== Gestione snapshot BTRFS ==&lt;br /&gt;
&lt;br /&gt;
=== Manuale ===&lt;br /&gt;
Editare ''/etc/grub.d/40_custom'' (o crearlo) e aggiungere quanto segue per permettere l'avvio della snapshot ''rootsnap''&lt;br /&gt;
&lt;br /&gt;
 menuentry 'Linux snapshot' {&lt;br /&gt;
        insmod gzio&lt;br /&gt;
        insmod part_gpt&lt;br /&gt;
        insmod btrfs&lt;br /&gt;
        set root='hd1,gpt3'&lt;br /&gt;
        linux   /rootsnap/boot/vmlinuz-linux root=/dev/partizione rw rootflags=subvol=rootsnap  quiet&lt;br /&gt;
        initrd  /rootsnap/boot/initramfs-linux.img&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
dopodichè aggiornare la configurazione di GRUB con&lt;br /&gt;
 # grub-mkconfig -o /boot/grub/grub.cfg&lt;br /&gt;
&lt;br /&gt;
=== Automatico ===&lt;br /&gt;
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.&lt;br /&gt;
 # pacman -S grub-btrfs&lt;br /&gt;
&lt;br /&gt;
Ogni volta che si vorrà aggiornare grub con nuovi subvolumi basterà dare il seguente comando&lt;br /&gt;
&lt;br /&gt;
 # grub-mkconfig -o /boot/grub/grub.cfg&lt;br /&gt;
&lt;br /&gt;
== Ripristinare GRUB ==&lt;br /&gt;
Aggiornando la propria distribuzione Linux, il proprio boot loader o installando un altro sistema operativo (es. Windows) può capitare di sovrascrivere il [http://it.wikipedia.org/wiki/Master_boot_record MBR].&lt;br /&gt;
&lt;br /&gt;
Avviare il computer con un liveCD/DVD o USB: &lt;br /&gt;
* [http://archlinux.mirror.garr.it/archlinux/iso/latest/archlinux-x86_64.iso Archlinux]&lt;br /&gt;
* [http://www.sysresccd.org/Download Systemrescuecd]&lt;br /&gt;
* [http://grml.org/download/ grml]&lt;br /&gt;
* [http://na.mirror.garr.it/mirrors/ubuntu-releases/ Ubuntu]&lt;br /&gt;
&lt;br /&gt;
Ipotizziamo di avere una partizione / chiamata /dev/sda2 e nessuna /boot&lt;br /&gt;
&lt;br /&gt;
Creiamo i seguenti mount point&lt;br /&gt;
 # sudo su&lt;br /&gt;
 # cd /mnt&lt;br /&gt;
 # mkdir sda2&lt;br /&gt;
 # mount /dev/sda2 /mnt/sda2&lt;br /&gt;
&lt;br /&gt;
Se utilizziamo una scheda madre UEFI andrà montata anche la partizione efi (solitamente è la prima partizione del disco ''sda1'')&lt;br /&gt;
 # mount /dev/sda2 /mnt/sda2/boot/efi&lt;br /&gt;
&lt;br /&gt;
Se necessario editiamo il file di configurazione di grub&lt;br /&gt;
  # nano /mnt/sda2/boot/grub/grub.cfg&lt;br /&gt;
&lt;br /&gt;
=== arch-chroot ===&lt;br /&gt;
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&lt;br /&gt;
&lt;br /&gt;
 # arch-chroot /mnt/sda2&lt;br /&gt;
&lt;br /&gt;
=== Manuale ===&lt;br /&gt;
 # mount --rbind /dev /mnt/sda2/dev&lt;br /&gt;
 # mount -t proc /proc /mnt/sda2/proc&lt;br /&gt;
 # mount -t sysfs /sys /mnt/sda2/sys/&lt;br /&gt;
&lt;br /&gt;
Eseguiamo il vero e proprio chroot in /dev/sda2&lt;br /&gt;
 # chroot /mnt/sda2&lt;br /&gt;
&lt;br /&gt;
=== Reinstallazione ===&lt;br /&gt;
 # grub-mkconfig -o /boot/grub/grub.cfg&lt;br /&gt;
 # grub-install /dev/sda&lt;br /&gt;
&lt;br /&gt;
=== Riavvio del sistema ===&lt;br /&gt;
Usciamo dal chroot, smontiamo la partizione e riavviamo il sistema&lt;br /&gt;
 # exit&lt;br /&gt;
 # umount /mnt/sda1/proc&lt;br /&gt;
 # umount /mnt/sda1/dev&lt;br /&gt;
 # umount /mnt/sda1&lt;br /&gt;
 # systemctl reboot&lt;br /&gt;
&lt;br /&gt;
== Eliminare il boot loader ==&lt;br /&gt;
In caso di errori nell'installazione di GRUB è possibile cancellare il vecchio boot loader di un disco (&amp;lt;code&amp;gt;''devicename'' = sda,sdb,sdc...&amp;lt;/code&amp;gt;)&lt;br /&gt;
 # dd if=/dev/zero of=''/dev/devicename'' bs=446 count=1&lt;br /&gt;
&lt;br /&gt;
== ISOBoot ==&lt;br /&gt;
Con GRUB2 è possibile effettuare il boot di iso di LiveCD/USB Linux presenti sul disco aggiungendole su &amp;lt;code&amp;gt;/etc/grub.d/40_custom &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Ubuntu 23.04&lt;br /&gt;
 menuentry &amp;quot;Ubuntu 23.04 desktop ISO&amp;quot; {&lt;br /&gt;
        insmod part_gpt&lt;br /&gt;
        insmod ext2&lt;br /&gt;
        insmod btrfs&lt;br /&gt;
        rmmod tpm&lt;br /&gt;
     # es.: terza partizione del primo disco&lt;br /&gt;
        set root=(hd0,gpt3)&lt;br /&gt;
        set isofile=&amp;quot;/home/'''&amp;lt;username&amp;gt;'''/Downloads/ubuntu-23.04-desktop-amd64.iso&amp;quot;&lt;br /&gt;
        loopback loop $isofile&lt;br /&gt;
        linux (loop)/casper/vmlinuz boot=casper iso-scan/filename=$isofile quiet splash&lt;br /&gt;
        initrd (loop)/casper/initrd&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
= Networking =&lt;br /&gt;
&lt;br /&gt;
== Manuale ==&lt;br /&gt;
===net-tools===&lt;br /&gt;
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 [https://lists.debian.org/debian-devel/2009/03/msg00780.html obsoleta]. Tra i suoi comandi principali: arp, hostname, ifconfig, iptunnel netstat e route.&lt;br /&gt;
&lt;br /&gt;
Attivare l'interfaccia di rete eth0 ed assegnarle l'indirizzo ip 192.168.0.2&lt;br /&gt;
 # ifconfig eth0 192.168.0.2 up&lt;br /&gt;
&lt;br /&gt;
Disattivare l'interfaccia di rete eth0&lt;br /&gt;
 # ifconfig eth0 down&lt;br /&gt;
&lt;br /&gt;
Assegnare manualmente un gateway (es.: 192.168.0.1) alla rete&lt;br /&gt;
 # route add default gw 192.168.0.1&lt;br /&gt;
&lt;br /&gt;
Ovviamente occorrerà aggiungere un server DNS al file &amp;lt;code&amp;gt;/etc/resolv.conf&amp;lt;/code&amp;gt; per la risoluzione degli indirizzi.&lt;br /&gt;
&lt;br /&gt;
=== iproute2 ===&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|+ Conversione comandi da net-tools a iproute2&lt;br /&gt;
|-&lt;br /&gt;
! net-tools&lt;br /&gt;
! iproute2&lt;br /&gt;
! Note&lt;br /&gt;
|-&lt;br /&gt;
| ifconfig&lt;br /&gt;
| ip addr, ip link&lt;br /&gt;
| Address and link configuration&lt;br /&gt;
|-&lt;br /&gt;
| route&lt;br /&gt;
| ip route&lt;br /&gt;
| Routing tables&lt;br /&gt;
|-&lt;br /&gt;
| arp&lt;br /&gt;
| ip neigh&lt;br /&gt;
| Neighbors&lt;br /&gt;
|-&lt;br /&gt;
| iptunnel&lt;br /&gt;
| ip tunnel&lt;br /&gt;
| Tunnels&lt;br /&gt;
|-&lt;br /&gt;
| nameif, ifrename&lt;br /&gt;
| ip link set name&lt;br /&gt;
| Rename network interfaces&lt;br /&gt;
|-&lt;br /&gt;
| ipmaddr&lt;br /&gt;
| ip maddr&lt;br /&gt;
| Multicast&lt;br /&gt;
|-&lt;br /&gt;
| netstat&lt;br /&gt;
| ss, ip route&lt;br /&gt;
| Show various networking statistics&lt;br /&gt;
|-&lt;br /&gt;
| brctl&lt;br /&gt;
| bridge&lt;br /&gt;
| Handle bridge addresses and devices&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Elencare gli indirizzi IP: &lt;br /&gt;
 # ip addr&lt;br /&gt;
&lt;br /&gt;
Mostra le informazioni di una specifica interfaccia di rete&lt;br /&gt;
 # ip addr show ''eth0''&lt;br /&gt;
&lt;br /&gt;
Aggiungere un indirizzo all'interfaccia eth0:&lt;br /&gt;
 # ip addr add 192.0.2.10/24 dev eth0&lt;br /&gt;
&lt;br /&gt;
Cancellare un indirizzo associato all'interfaccia eth0:&lt;br /&gt;
 # ip addr delete 192.0.2.10/24 dev eth0&lt;br /&gt;
&lt;br /&gt;
Attivare l'interfaccia eth0:&lt;br /&gt;
 # ip link set dev eth0 up&lt;br /&gt;
&lt;br /&gt;
Disattivare l'interfaccia eth0:&lt;br /&gt;
 # ip link set dev eth0 down&lt;br /&gt;
&lt;br /&gt;
Svuotare la cache arp per tutte le interfacce:&lt;br /&gt;
 # ip neigh flush all&lt;br /&gt;
&lt;br /&gt;
Aggiungere una rotta che passa per gateway 192.0.2.1&lt;br /&gt;
 # ip route add default via 192.0.2.1&lt;br /&gt;
&lt;br /&gt;
Aggiungere una rotta che passa per gateway 192.168.2.1 per l'interfaccia 10.0.2.0&lt;br /&gt;
 # ip route add 10.0.2.1/24 via 192.168.0.1 dev enp0s3&lt;br /&gt;
&lt;br /&gt;
Rimuovere la rotta che passa per gateway 192.168.2.1 per l'interfaccia 10.0.2.0&lt;br /&gt;
 # ip route del 10.0.2.0/24 via 192.168.0.1 dev enp0s3 &lt;br /&gt;
&lt;br /&gt;
Mostrare la tabella di routing&lt;br /&gt;
 # ip route show&lt;br /&gt;
&lt;br /&gt;
== Systemd-networkd==&lt;br /&gt;
'''[https://wiki.archlinux.org/title/Systemd-networkd systemd-networkd'''] è un demone, parte di systemd, che gestisce la configurazione della rete.&lt;br /&gt;
&lt;br /&gt;
=== Esempi di configurazione ===&lt;br /&gt;
Per prima cosa sarà necessario abilitare il servizio&lt;br /&gt;
 # systemctl enable --now systemd-networkd.service&lt;br /&gt;
 # systemctl enable --now systemd-resolved.service&lt;br /&gt;
 # ln -rsf /run/systemd/resolve/stub-resolv.conf /etc/resolv.conf&lt;br /&gt;
&lt;br /&gt;
==== DHCP ====&lt;br /&gt;
/etc/systemd/network/20-wired.network&lt;br /&gt;
 [Match]&lt;br /&gt;
 Name=enp1s0&lt;br /&gt;
 [Network]&lt;br /&gt;
 DHCP=yes&lt;br /&gt;
&lt;br /&gt;
==== IP statico ====&lt;br /&gt;
/etc/systemd/network/20-wired.network&lt;br /&gt;
 [Match]&lt;br /&gt;
 Name=enp1s0&lt;br /&gt;
 [Network]&lt;br /&gt;
 Address=10.1.10.9/24&lt;br /&gt;
 Gateway=10.1.10.1&lt;br /&gt;
 DNS=10.1.10.1&lt;br /&gt;
&lt;br /&gt;
==== Wireless adapter ====&lt;br /&gt;
Per potersi connettere a connessioni WIFI è necessario installare e configurare un'ulteriore applicazione dedicata come '''iwd''' o '''wpa_supplicant''' per l'autenticazione alla rete.&lt;br /&gt;
&lt;br /&gt;
/etc/systemd/network/25-wireless.network&lt;br /&gt;
 [Match]&lt;br /&gt;
 Name=wlp2s0&lt;br /&gt;
 [Network]&lt;br /&gt;
 DHCP=yes&lt;br /&gt;
 IgnoreCarrierLoss=3s&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Rinominare l'interfaccia di rete ====&lt;br /&gt;
Invece che impostare una regola su udev è possibile usare un file di testo .link nel seguente modo&lt;br /&gt;
&lt;br /&gt;
/etc/systemd/network/''10-ethusb0.link''&lt;br /&gt;
 [Match]&lt;br /&gt;
 MACAddress=12:34:56:78:90:ab&lt;br /&gt;
 [Link]&lt;br /&gt;
 Description=USB to Ethernet Adapter&lt;br /&gt;
 Name=''ethusb0''&lt;br /&gt;
&lt;br /&gt;
== Wifi ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! [https://wiki.archlinux.org/title/Network_configuration/Wireless#Utilities Programmi] !! [https://wireless.wiki.kernel.org/en/developers/documentation/wireless-extensions WEXT] !! [https://wireless.wiki.kernel.org/en/developers/documentation/nl80211 nl80211] !! WEP !! WPA&lt;br /&gt;
|-&lt;br /&gt;
| [https://hewlettpackard.github.io/wireless-tools/Tools.html wireless_tools] || Sì || No || Sì || No&lt;br /&gt;
|-&lt;br /&gt;
| [https://wireless.wiki.kernel.org/en/users/documentation/iw iw] || No || Sì || Sì || No&lt;br /&gt;
|-&lt;br /&gt;
| [https://wiki.archlinux.org/title/wpa_supplicant wpa_supplicant] || Sì || Sì || No || Sì&lt;br /&gt;
|-&lt;br /&gt;
| [https://wiki.archlinux.org/title/Iwd iwd]/iwgtk || No || Sì || No || Sì&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== NetworkManager ==&lt;br /&gt;
[https://networkmanager.dev/ NetworkManager] è l'utility che si è imposta come standard per la configurazione della reti Linux (LAN e Wifi)&lt;br /&gt;
&lt;br /&gt;
Si compone di un demone, un'interfaccia da riga di comando [https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/9/html/configuring_basic_system_settings/assembly_configuring-and-managing-network-access_configuring-basic-system-settings#configuring-a-static-ethernet-connection-using-nmcli_assembly_configuring-and-managing-network-access (nmcli)] ed un'interfaccia di configurazione basata su un menu testuale ([https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/9/html/configuring_basic_system_settings/assembly_configuring-and-managing-network-access_configuring-basic-system-settings nmtui]). &lt;br /&gt;
&lt;br /&gt;
I principali desktop enviroment come GNOME e KDE Plasma possiedono una utility grafica che consente loro di configurare graficamente le reti basandosi su NetworkManager.&lt;br /&gt;
&lt;br /&gt;
=== Installazione ===&lt;br /&gt;
 # pacman -S networkmanager &lt;br /&gt;
 # systemctl enable NetworkManager&lt;br /&gt;
 # systemctl start NetworkManager&lt;br /&gt;
&lt;br /&gt;
==== Configurazione  ====&lt;br /&gt;
* 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 &amp;lt;code&amp;gt;nmtui&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Per chi dovesse prediligere la configurazione manuale: &amp;lt;code&amp;gt;nmcli&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Per impedire a Network Manager di gestire una certa interfaccia di rete è sufficiente aggiungere il suo MAC Address al file di configurazione &amp;lt;code&amp;gt;/etc/NetworkManager/NetworkManager.conf&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 [main]&lt;br /&gt;
 plugins=keyfile&lt;br /&gt;
 [keyfile]&lt;br /&gt;
 unmanaged-devices=mac:''00:25:21:73:90:72''&lt;br /&gt;
&lt;br /&gt;
=== Alternative ===&lt;br /&gt;
* [https://wiki.archlinux.org/title/ConnMan ConnMan]&lt;br /&gt;
&lt;br /&gt;
== Condividere la connessione ==&lt;br /&gt;
&lt;br /&gt;
=== Abilitazione del forwarding dei pacchetti ===&lt;br /&gt;
&lt;br /&gt;
 $ sudo echo 1 &amp;gt; /proc/sys/net/ipv4/ip_forward&lt;br /&gt;
&lt;br /&gt;
Per rendere il forwarding definitivo editare il file ''/etc/sysctl.conf'' modificando come segue il parametro net.ipv4.ip_forward:&lt;br /&gt;
&lt;br /&gt;
 net.ipv4.ip_forward = 1&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Mascheramento dei pacchetti ===&lt;br /&gt;
&lt;br /&gt;
 $ sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE&lt;br /&gt;
&lt;br /&gt;
''eth0'' non è un parametro fisso, identifica l'interfaccia con la quale il PC si connette ad Internet&lt;br /&gt;
&lt;br /&gt;
Per applicare automaticamente tale regola ad ogni riavvio&lt;br /&gt;
 # iptables-save &amp;gt; /etc/iptables.ipv4.nat&lt;br /&gt;
 # iptables-restore &amp;lt; /etc/iptables.ipv4.nat&lt;br /&gt;
&lt;br /&gt;
=== Moduli kernel ===&lt;br /&gt;
&lt;br /&gt;
Assicurarsi che siano caricati i seguenti moduli:&lt;br /&gt;
 # modprobe ip_tables&lt;br /&gt;
 # modprobe ip_conntrack&lt;br /&gt;
 # modprobe iptable_nat&lt;br /&gt;
 # modprobe ipt_MASQUERADE&lt;br /&gt;
&lt;br /&gt;
=== Condivisione tramite rete ethernet ===&lt;br /&gt;
&lt;br /&gt;
==== Configurazione scheda di rete interna ====&lt;br /&gt;
&lt;br /&gt;
Assegnare un IP statico alla scheda ethernet con la quale si vuol condividere la connessione.&lt;br /&gt;
&lt;br /&gt;
 # ifconfig eth1 192.168.5.1 netmask 255.255.255.0 up&lt;br /&gt;
&lt;br /&gt;
Per rendere tale configurazione permanente sarà necessario editare il file ''/etc/network/interfaces'' ed aggiungere la seguente configurazione&lt;br /&gt;
&lt;br /&gt;
 auto eth1&lt;br /&gt;
 iface eth1 inet static&lt;br /&gt;
 address 192.168.5.1&lt;br /&gt;
 netmask 255.255.255.0&lt;br /&gt;
&lt;br /&gt;
=== Condivisione tramite rete WI-FI ===&lt;br /&gt;
&lt;br /&gt;
==== Configurazione scheda wireless ====&lt;br /&gt;
&lt;br /&gt;
Se non si desidera cifrare la rete e proteggerla con una password sarà sufficiente eseguire questi comandi.&lt;br /&gt;
&lt;br /&gt;
 # iwconfig wlan0 mode Master&lt;br /&gt;
 # iwconfig wlan0 ESSID ReteGOLEM&lt;br /&gt;
 # iwconfig wlan0 enc off&lt;br /&gt;
 # ifconfig wlan0 192.168.5.1 netmask 255.255.255.0 up&lt;br /&gt;
&lt;br /&gt;
Per rendere tale configurazione permanente sarà necessario creare un file del tipo ''/etc/systemd/network/20-wifi.network'' ed aggiungere la seguente configurazione&lt;br /&gt;
 [Match]&lt;br /&gt;
 Name=wlan0&lt;br /&gt;
 [Network]&lt;br /&gt;
 Address=192.168.5.1/24&lt;br /&gt;
&lt;br /&gt;
Naturalmente occorrerà che sia attivato il demone systemd-networkd&lt;br /&gt;
 # systemctl enable --now systemd-networkd.service&lt;br /&gt;
&lt;br /&gt;
===== Proteggere la connessione WI-FI =====&lt;br /&gt;
&lt;br /&gt;
Installare il programma hostapd&lt;br /&gt;
 # pacman -S hostapd&lt;br /&gt;
&lt;br /&gt;
Configurare hostapd modificando ''/etc/hostapd/hostapd.conf''&lt;br /&gt;
&lt;br /&gt;
 # Interfaccia di rete&lt;br /&gt;
 interface=wlan0&lt;br /&gt;
 # Driver della scheda wifi usata (non tutte le schede sono supportate)&lt;br /&gt;
 driver=nl80211&lt;br /&gt;
 # Nome della rete (SSID)&lt;br /&gt;
 ssid=ReteGOLEM&lt;br /&gt;
 hw_mode=g&lt;br /&gt;
 # Canale di trasmissione&lt;br /&gt;
 channel=6&lt;br /&gt;
 macaddr_acl=0&lt;br /&gt;
 # Righe per la protezione&lt;br /&gt;
 auth_algs=1&lt;br /&gt;
 ignore_broadcast_ssid=0&lt;br /&gt;
 wpa=2&lt;br /&gt;
 # Password del wifi&lt;br /&gt;
 wpa_passphrase=password&lt;br /&gt;
 wpa_key_mgmt=WPA-PSK&lt;br /&gt;
 wpa_pairwise=TKIP&lt;br /&gt;
 rsn_pairwise=CCMP&lt;br /&gt;
&lt;br /&gt;
Editare il file ''/etc/default/hostapd'' per impostare ''hostapd.conf'' come file di configurazione predefinito, modificando la riga DAEMON_CONF=&amp;quot;&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
 DAEMON_CONF=&amp;quot;/etc/hostapd/hostapd.conf&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== Assegnazione automatica degli IP ai client ===&lt;br /&gt;
&lt;br /&gt;
 # pacman -S dhcp&lt;br /&gt;
&lt;br /&gt;
Editare ''/etc/dhcpd.conf'' aggiungendo la configurazione per la rete interna (es.: eth1 o wlan0):&lt;br /&gt;
&lt;br /&gt;
 subnet 192.168.5.0 netmask 255.255.255.0 {&lt;br /&gt;
 range 192.168.5.100  192.168.5.200;&lt;br /&gt;
 option domain-name-servers 8.8.8.8;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== VPN ==&lt;br /&gt;
=== WireGuard ===&lt;br /&gt;
&lt;br /&gt;
https://www.wireguard.com/quickstart/&lt;br /&gt;
&lt;br /&gt;
= Container =&lt;br /&gt;
== Toolbox==&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
=== Immagini ===&lt;br /&gt;
* [https://github.com/toolbx-images/images https://github.com/toolbx-images/images] Immagini di container delle principali distribuzioni&lt;br /&gt;
&lt;br /&gt;
=== Comandi ===&lt;br /&gt;
Creare un container&lt;br /&gt;
 $ toolbox create -i quay.io/toolbx-images/rhel-toolbox:9.1 -c redhat&lt;br /&gt;
&lt;br /&gt;
Entrare in un container&lt;br /&gt;
 $ toolbox enter redhat&lt;br /&gt;
 &lt;br /&gt;
Fermare un container&lt;br /&gt;
 $ podman stop nome_macchina&lt;br /&gt;
&lt;br /&gt;
Rimuovere un container&lt;br /&gt;
 $ toolbox rm -f redhat&lt;br /&gt;
&lt;br /&gt;
Rimuovere un container e la sua immagine&lt;br /&gt;
 $ toolbox rmi redhat &lt;br /&gt;
&lt;br /&gt;
Esaminare la lista dei container e delle immagini disponibili&lt;br /&gt;
 $ toolbox list &lt;br /&gt;
&lt;br /&gt;
Permettere agli utenti non root di utilizzare i container&lt;br /&gt;
 $ sudo sh -c 'echo &amp;quot;username:100000:65536&amp;quot; &amp;gt;&amp;gt; /etc/subuid'&lt;br /&gt;
 $ sudo sh -c 'echo &amp;quot;username:100000:65536&amp;quot; &amp;gt;&amp;gt; /etc/subgid'&lt;br /&gt;
&lt;br /&gt;
Abilitare l'host al forwarding di X11 per le applicazioni che richiedono Xorg&lt;br /&gt;
 # xhost +&lt;br /&gt;
&lt;br /&gt;
Eseguire un comandi all'interno di un container&lt;br /&gt;
 $ toolbox run -c redhat libreoffice&lt;br /&gt;
&lt;br /&gt;
== LXC ==&lt;br /&gt;
[https://wiki.archlinux.org/title/Linux_Containers Linux Container] (LXC) permette di virtualizzare uno o più container Linux su un singolo host LXC, gestendone virtualmente RAM, CPU, socket e rete.&lt;br /&gt;
&lt;br /&gt;
È estremamente utile quando si ha bisogno di isolare dei servizi dal sistema host: es.: server web, imap, smtp...&lt;br /&gt;
&lt;br /&gt;
=== Installazione ===&lt;br /&gt;
Installare LXC&lt;br /&gt;
 # pacman -S lxc lxc-templates lxcfs lxd&lt;br /&gt;
&lt;br /&gt;
=== Comandi ===&lt;br /&gt;
Lista dei container installati&lt;br /&gt;
 lxc-ls -f &lt;br /&gt;
&lt;br /&gt;
Installare un container scegliendo l'immagine dalla lista di quelli disponibili&lt;br /&gt;
 lxc-create -n playtime -t download&lt;br /&gt;
&lt;br /&gt;
Se sapete già di quale container avete bisogno sarà possibile scaricarlo direttamente&lt;br /&gt;
 lxc-create -n playtime -t download -- --dist archlinux --release current --arch amd64&lt;br /&gt;
&lt;br /&gt;
Far partire il container chiamato ''debian''&lt;br /&gt;
 lxc-start debian &lt;br /&gt;
&lt;br /&gt;
Entrare dentro il container chiamato ''debian''&lt;br /&gt;
 lxc-attach debian&lt;br /&gt;
&lt;br /&gt;
Fermare l'esecuzione del container chiamato ''debian''&lt;br /&gt;
 lxc-stop debian&lt;br /&gt;
&lt;br /&gt;
Rimuovere il container chiamato ''debian''&lt;br /&gt;
 lxc-destroy debian &lt;br /&gt;
&lt;br /&gt;
Eseguire un comando dentro il container chiamato ''debian''&lt;br /&gt;
 lxc-attach --name debian nano&lt;br /&gt;
&lt;br /&gt;
=== Rete Bridge ===&lt;br /&gt;
Nel caso si debbano usare servizi da tenere esposti su Internet potrebbe essere conveniente utilizzare una rete bridge piuttosto che NAT.&lt;br /&gt;
&lt;br /&gt;
Editare il file /etc/default/lxc-net&lt;br /&gt;
# Leave USE_LXC_BRIDGE as &amp;quot;true&amp;quot; if you want to use lxcbr0 for your&lt;br /&gt;
# containers.  Set to &amp;quot;false&amp;quot; if you'll use virbr0 or another existing&lt;br /&gt;
# bridge, or mavlan to your host's NIC.&lt;br /&gt;
USE_LXC_BRIDGE=&amp;quot;true&amp;quot;&lt;br /&gt;
# If you change the LXC_BRIDGE to something other than lxcbr0, then&lt;br /&gt;
# you will also need to update your /etc/lxc/default.conf as well as the&lt;br /&gt;
# configuration (/var/lib/lxc/&amp;lt;container&amp;gt;/config) for any containers&lt;br /&gt;
# already created using the default config to reflect the new bridge&lt;br /&gt;
# name.&lt;br /&gt;
# If you have the dnsmasq daemon installed, you'll also have to update&lt;br /&gt;
# /etc/dnsmasq.d/lxc and restart the system wide dnsmasq daemon.&lt;br /&gt;
LXC_BRIDGE=&amp;quot;lxcbr0&amp;quot;&lt;br /&gt;
LXC_ADDR=&amp;quot;10.0.3.1&amp;quot;&lt;br /&gt;
LXC_NETMASK=&amp;quot;255.255.255.0&amp;quot;&lt;br /&gt;
LXC_NETWORK=&amp;quot;10.0.3.0/24&amp;quot;&lt;br /&gt;
LXC_DHCP_RANGE=&amp;quot;10.0.3.2,10.0.3.254&amp;quot;&lt;br /&gt;
LXC_DHCP_MAX=&amp;quot;253&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Docker ==&lt;br /&gt;
Abilitare ed avviare docker&lt;br /&gt;
 # systemctl enable --now docker&lt;br /&gt;
&lt;br /&gt;
Cercare il container desiderato&lt;br /&gt;
 # docker search &amp;quot;xxx&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Scaricare l'immagine desiderata&lt;br /&gt;
 # docker pull xxxx:latest&lt;br /&gt;
&lt;br /&gt;
Visualizzare le immagini scaricate&lt;br /&gt;
 # docker images&lt;br /&gt;
&lt;br /&gt;
Visualizzare i docker creati&lt;br /&gt;
 # docker ps -a&lt;br /&gt;
&lt;br /&gt;
Avviare docker&lt;br /&gt;
 # docker start nome_docker&lt;br /&gt;
&lt;br /&gt;
Entrare nel docker&lt;br /&gt;
 # docker attach nome_docker&lt;br /&gt;
&lt;br /&gt;
Copiare un file dal sistema host al docker&lt;br /&gt;
 # docker cp esempio.txt nome_docker: /esempio.txt&lt;br /&gt;
&lt;br /&gt;
Copiare un file dal docker.&lt;br /&gt;
 # docker cp container-id:/path/filename.txt ~/Desktop/filename.txt&lt;br /&gt;
&lt;br /&gt;
Rimuovere un docker&lt;br /&gt;
 # docker rm nome_docker&lt;br /&gt;
&lt;br /&gt;
Rimuovere tutti i docker&lt;br /&gt;
 # docker container stop $(docker container ls -aq)&lt;br /&gt;
 # docker system prune -a --volumes&lt;br /&gt;
&lt;br /&gt;
Avviare automaticamente un docker (da testare)&lt;br /&gt;
 # docker run --restart=always --name nome_docker&lt;br /&gt;
&lt;br /&gt;
Creare script di avvio ''docker-webserver''.service&lt;br /&gt;
 [Unit]&lt;br /&gt;
 Description=Some service&lt;br /&gt;
 Requires=docker.service&lt;br /&gt;
 After=docker.service&lt;br /&gt;
 [Service]&lt;br /&gt;
 Restart=always&lt;br /&gt;
 ExecStart=/usr/bin/docker start -a container_name&lt;br /&gt;
 ExecStop=/usr/bin/docker stop -t 2 container_name&lt;br /&gt;
 [Install]&lt;br /&gt;
 WantedBy=multi-user.target&lt;br /&gt;
&lt;br /&gt;
* [https://wiki.archlinux.org/title/docker Arch Linux Docker WIKI]&lt;br /&gt;
&lt;br /&gt;
== [https://wiki.archlinux.org/title/systemd-nspawn systemd-nspawn] ==&lt;br /&gt;
&lt;br /&gt;
= Fonti software alternative =&lt;br /&gt;
Nella rara eventualità che si necessiti di un programma non presente né nei repository ufficiali, né su [https://aur.archlinux.org/ AUR] è possibile optare per una delle seguenti opzioni.&lt;br /&gt;
&lt;br /&gt;
== AppImage ==&lt;br /&gt;
Scaricate qualsiasi pacchetto disponibile su [https://appimage.github.io/ appimage.github.io] e rendetelo eseguibile.&lt;br /&gt;
&lt;br /&gt;
 $ chmod a+x ''nomeprogramma''.AppImage&lt;br /&gt;
&lt;br /&gt;
Non resta che eseguirlo col seguente comando o con un doppio click&lt;br /&gt;
 $ ./''nomeprogramma''.AppImage&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Flatpak ==&lt;br /&gt;
Concepito per essere una sorta di '''Google Play Store''' per GNOME, è possibile installare programmi provenienti da [https://flathub.org/home flatpak] utilizzando i normali gestori grafici di pacchetti basati su packagekit come ''Gnome Software'' o ''Discover di Plasma''.&lt;br /&gt;
&lt;br /&gt;
Installazione&lt;br /&gt;
 # pacman -S flatpak&lt;br /&gt;
&lt;br /&gt;
Abilitazione del repository ufficiale del progetto (software di terze parti potrebbe richiedere di aggiungere altri repository)&lt;br /&gt;
 # flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo&lt;br /&gt;
&lt;br /&gt;
Elenca i repository disponibili.&lt;br /&gt;
 $ flatpak remotes&lt;br /&gt;
&lt;br /&gt;
Installa un'applicazione (es.: libreoffice)&lt;br /&gt;
 $ flatpak install flathub org.libreoffice.LibreOffice&lt;br /&gt;
&lt;br /&gt;
Esegue un'applicazione (es.: libreoffice)&lt;br /&gt;
 $ flatpak run org.libreoffice.LibreOffice&lt;br /&gt;
&lt;br /&gt;
Disinstalla un'applicazione mantenendo i dati.&lt;br /&gt;
 $ flatpak uninstall &amp;lt;nome app&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Disinstalla un'applicazione eliminando i dati (nella home utente .var/app/).&lt;br /&gt;
 $ flatpak uninstall &amp;lt;nome app&amp;gt; --delete-data&lt;br /&gt;
&lt;br /&gt;
Elimina i dati di tutte le applicazioni disinstallate (nella home utente .var/app/).&lt;br /&gt;
 $ flatpak uninstall --delete-data&lt;br /&gt;
&lt;br /&gt;
Disinstalla tutte le applicazioni flatpak installate sul sistema.&lt;br /&gt;
 $ flatpak uninstall --all&lt;br /&gt;
	&lt;br /&gt;
Cerca ed esegue aggiornamenti per le applicazioni installate.&lt;br /&gt;
 $ flatpak update&lt;br /&gt;
&lt;br /&gt;
Aggiorna una singola applicazione.&lt;br /&gt;
 $ flatpak update &amp;lt;nome app&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Elenca tutte le applicazioni flatpak installate sul sistema.&lt;br /&gt;
 $ flatpak list --app&lt;br /&gt;
	&lt;br /&gt;
Elenca i runtime installati.&lt;br /&gt;
 $ flatpak list --runtime&lt;br /&gt;
	&lt;br /&gt;
Visualizzare le informazioni sulle applicazioni in esecuzione.&lt;br /&gt;
 $ flatpak ps&lt;br /&gt;
	&lt;br /&gt;
Termina un'applicazione bloccata o danneggiata (l'ID dell'istanza si può ottenere dal comando precedente).&lt;br /&gt;
 $ flatpak kill &amp;lt;id istanza&amp;gt;&lt;br /&gt;
	&lt;br /&gt;
Tenta la riparare dei pacchetti danneggiati. Necessita dei privilegi di amministrazione. &lt;br /&gt;
 $ flatpak repair&lt;br /&gt;
&lt;br /&gt;
== Nix ==&lt;br /&gt;
[https://nixos.wiki/wiki/Nix_package_manager Nix package manager] è il gestore di pacchetti utilizzato su [https://nixos.org/ NixOS]. È possibile però utilizzarlo su qualsiasi distribuzione Linux affiancandone il gestore di pacchetti predefinito.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
[https://nixos.org/manual/nixpkgs/stable/ Guida completa]&lt;br /&gt;
&lt;br /&gt;
=== Installazione ===&lt;br /&gt;
[https://nixos.org/download.html#nix-install-linux Guida ufficiale]&lt;br /&gt;
&lt;br /&gt;
'''Single-user installation'''&lt;br /&gt;
 $ sudo install -d -m755 -o $(id -u) -g $(id -g) /nix&lt;br /&gt;
 $ sh &amp;lt;(curl -L https://nixos.org/nix/install) --no-daemon&lt;br /&gt;
&lt;br /&gt;
Aggiungere la riga seguente al &amp;lt;code&amp;gt;.bashrc&amp;lt;/code&amp;gt; o al file di configurazione della vostra shell per poter utilizzare i comandi Nix&lt;br /&gt;
 $ source $HOME/.nix-profile/etc/profile.d/nix.sh&lt;br /&gt;
&lt;br /&gt;
=== Canali ===&lt;br /&gt;
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''.&lt;br /&gt;
&lt;br /&gt;
Ecco di seguito i comandi principali per gestire questi canali&lt;br /&gt;
&lt;br /&gt;
Lista dei canali configurati&lt;br /&gt;
 $ nix-channel --list&lt;br /&gt;
&lt;br /&gt;
Aggiungere il canale principale (''nixos'')&lt;br /&gt;
 $ nix-channel --add https://nixos.org/channels/channel-name nixos&lt;br /&gt;
&lt;br /&gt;
Aggiungere altri canali&lt;br /&gt;
 $ nix-channel --add https://some.channel/url my-alias&lt;br /&gt;
&lt;br /&gt;
Rimuovere un canale&lt;br /&gt;
 $ nix-channel --remove channel-alias&lt;br /&gt;
&lt;br /&gt;
Aggiornare un canale&lt;br /&gt;
 $ nix-channel --update channel-alias&lt;br /&gt;
&lt;br /&gt;
Aggiornare tutti i canali&lt;br /&gt;
 $ nix-channel --update&lt;br /&gt;
&lt;br /&gt;
=== Comandi ===&lt;br /&gt;
Cercare un pacchetto&lt;br /&gt;
 $ nix search nixpkgs ''packagename''&lt;br /&gt;
&lt;br /&gt;
Installare un pacchetto&lt;br /&gt;
 $ nix-env -iA ''packagename''&lt;br /&gt;
&lt;br /&gt;
Vedere i pacchetti installati&lt;br /&gt;
 $ nix-env -q&lt;br /&gt;
&lt;br /&gt;
Disinstallare un pacchetto&lt;br /&gt;
 $ nix-env -e ''packagename''&lt;br /&gt;
&lt;br /&gt;
Aggiornare tutti i pacchetti&lt;br /&gt;
 $ nix-env -u&lt;br /&gt;
&lt;br /&gt;
== Snap ==&lt;br /&gt;
È 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. &lt;br /&gt;
&lt;br /&gt;
Su Arch è disponibile su AUR: [https://aur.archlinux.org/packages/snapd snapd]&lt;br /&gt;
&lt;br /&gt;
=== Installazione ===&lt;br /&gt;
Installare ed abilitare Snap&lt;br /&gt;
 $ [https://aur.archlinux.org/packages/yay yay] -S snapd&lt;br /&gt;
 $ sudo ln -s /var/lib/snapd/snap /snap&lt;br /&gt;
 $ sudo systemctl start snapd.service&lt;br /&gt;
 $ sudo systemctl enable snapd.service&lt;br /&gt;
&lt;br /&gt;
=== Comandi ===&lt;br /&gt;
Cercare un programma&lt;br /&gt;
 $ snap find ''nomeprogramma''&lt;br /&gt;
&lt;br /&gt;
Installare un programma&lt;br /&gt;
 $ sudo snap install ''nomeprogramma''&lt;br /&gt;
&lt;br /&gt;
Rimuovere un programma&lt;br /&gt;
 $ sudo snap remove ''nomeprogramma''&lt;br /&gt;
&lt;br /&gt;
Vedere i programmi installati &lt;br /&gt;
 $ snap list&lt;br /&gt;
&lt;br /&gt;
Rimuovere una determinata versione di un programma&lt;br /&gt;
 $ sudo snap remove ''nomeprogramma'' --revision&lt;br /&gt;
&lt;br /&gt;
Aggiornare manualmente i pacchetti snap&lt;br /&gt;
 $ sudo snap refresh&lt;br /&gt;
&lt;br /&gt;
= GPG =&lt;br /&gt;
[http://it.wikipedia.org/wiki/GNU_Privacy_Guard GNU Privacy Guard (GnuPG o GPG)] è un programma libero pensato per fornire un'alternativa opensource al [http://it.wikipedia.org/wiki/Pretty_Good_Privacy Pretty Good Privacy (PGP)].&lt;br /&gt;
Nel PGP sono usate sia la crittografia asimmetrica (a chiave pubblica) che quella simmetrica.&lt;br /&gt;
La chiave pubblica del destinatario serve al mittente unicamente per cifrare la chiave comune per un algoritmo di crittografia simmetrica che sarà usata per cifrare il testo in chiaro del messaggio.&lt;br /&gt;
Un destinatario decifra un messaggio protetto da GPG usando la chiave di sessione con l'algoritmo simmetrico. Tale chiave di sessione è inclusa nel messaggio in maniera criptata ed è decifrata usando la chiave privata del destinatario.&lt;br /&gt;
L'utilizzo di due cifrature oltre che a velocizzare l'esecuzione del programma (la cifratura a chiave simmetrica è molto più veloce di quella asimmetrica) permette di poter cifrare uno stesso messaggio per più destinatari.&lt;br /&gt;
&lt;br /&gt;
== Generare una chiave ==&lt;br /&gt;
 $ gpg --gen-key&lt;br /&gt;
&lt;br /&gt;
Controllare che la chiave sia stata correttamente creata&lt;br /&gt;
 $ gpg --list-keys&lt;br /&gt;
&lt;br /&gt;
== Certificato di revoca ==&lt;br /&gt;
Il certificato di revoca serve per invalidare la chiave nel caso in cui questa venga compromessa.&lt;br /&gt;
Chiunque sia in possesso del certificato di revoca può revocare la chiave corrispondente, per cui è bene tenerlo in un posto sicuro.&lt;br /&gt;
Poiché, nel momento in cui si ha bisogno del certificato di revoca, potremmo non essere più in grado di generarlo, conviene generarlo subito dopo la creazione della chiave, e prima di iniziare a utilizzarla pubblicamente.&lt;br /&gt;
 $ gpg --output certificato-di-revoca.asc --gen-revoke ''ID''&lt;br /&gt;
dove &amp;lt;code&amp;gt;ID&amp;lt;/code&amp;gt; è dato dalle ultime 8 cifre dell'impronta (fingerprint) della chiave.&lt;br /&gt;
&lt;br /&gt;
== Utilizzo pratico ==&lt;br /&gt;
=== Criptare un documento ===&lt;br /&gt;
 $ gpg -o file1.ext.gpg -e -r UserID file1.ext&lt;br /&gt;
&lt;br /&gt;
Esempio:&lt;br /&gt;
 $ gpg -o tesi.odt.gpg -e -r spookyh@gmail.com tesi.odt&lt;br /&gt;
&lt;br /&gt;
=== Decriptare un documento ===&lt;br /&gt;
 $ gpg -o file1.ext -d file1.gpg&lt;br /&gt;
&lt;br /&gt;
=== Firmare un documento ===&lt;br /&gt;
Il mittente può usare PGP per ''firmare'' un messaggio con l'algoritmo di firma RSA o Digital Signature Algorithm (DSA). Per fare ciò viene calcolato un hash (message digest) dal testo in chiaro e successivamente da questo hash è creata la [http://it.wikipedia.org/wiki/Firma_digitale firma digitale] usando la chiave privata del mittente.&lt;br /&gt;
 $ gpg -o file1.ext.sig -s file1.ext&lt;br /&gt;
&lt;br /&gt;
=== Verificare un documento ===&lt;br /&gt;
 $ gpg --verify file1.sig&lt;br /&gt;
&lt;br /&gt;
== Importare ed esportare chiavi (locali) ==&lt;br /&gt;
Importare una chiave (pubblica)&lt;br /&gt;
 $ gpg --import chiave.asc (o .txt)&lt;br /&gt;
&lt;br /&gt;
Esportare la propria chiave pubblica&lt;br /&gt;
 $ gpg -a -o chiave_pubblica.asc --export&lt;br /&gt;
&lt;br /&gt;
=== Esportare la propria chiave privata ===&lt;br /&gt;
{{Note&lt;br /&gt;
|type=attention&lt;br /&gt;
|text= La chiave privata può essere utilizzata per impersonare la vostra identità, '''NON''' inviarla mai a '''nessuno''', ed esportala solo per effettuarne backup, naturalmente da custodire in un luogo sicuro.}}&lt;br /&gt;
 $ gpg --armor --export-secret-keys &amp;lt;ID&amp;gt; &amp;gt; secret-key.gpg.asc&lt;br /&gt;
&lt;br /&gt;
== Condividere le chiavi pubbliche ==&lt;br /&gt;
Inviare la chiave ad un keyserver:&lt;br /&gt;
 $ gpg --keyserver keyserver.linux.it --send-key &amp;lt;ID&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Importare una chiave da un keyserver:&lt;br /&gt;
 $ gpg --keyserver keyserver.linux.it --recv-keys &amp;lt;ID&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se ci fidiamo del proprietario e vogliamo mostrare pubblicamente la nostra fiducia, possiamo firmare la chiave appena importata e esportare la firma su un keyserver (vedere sezioni successive).&lt;br /&gt;
&lt;br /&gt;
=== Keyserver ===&lt;br /&gt;
Quando si carica una chiave su un keyserver, poi questo la condivide con gli altri keyserver che fanno parte dello stesso circuito.&lt;br /&gt;
Non esiste un'entità centralizzata o un circuito di riferimento (per scelta di design), e, a volte, questo può generare confusione nell'utilizzatore.&lt;br /&gt;
Inoltre, alcuni keyserver potrebbero non essere sempre accessibili.&lt;br /&gt;
&lt;br /&gt;
Tra i keyserver più noti:&lt;br /&gt;
* keys.openpgp.org&lt;br /&gt;
* keyserver.ubuntu.com&lt;br /&gt;
* keys.gnupg.net&lt;br /&gt;
* pgp.surfnet.nl&lt;br /&gt;
* pgp.circl.lu&lt;br /&gt;
* pgp.mit.edu&lt;br /&gt;
&lt;br /&gt;
== Editare una chiave ==&lt;br /&gt;
Per fare operazioni e modifiche dobbiamo &amp;quot;editare&amp;quot; le chiavi, aprendo l'editor interattivo:&lt;br /&gt;
 $ gpg --edit-key &amp;lt;ID&amp;gt;&lt;br /&gt;
'''NB: Prima di uscire dall'editor, ricordarsi di salvare, altrimenti le modifiche vanno perdute'''&lt;br /&gt;
&lt;br /&gt;
* firmare&lt;br /&gt;
 &amp;gt; sign&lt;br /&gt;
* cambiare i valori di fiducia &lt;br /&gt;
 &amp;gt; trust&lt;br /&gt;
* vedere la fingerprint&lt;br /&gt;
 &amp;gt; fpr&lt;br /&gt;
* cambiare la data di scadenza&lt;br /&gt;
 &amp;gt; expire&lt;br /&gt;
* cambiare la password&lt;br /&gt;
 &amp;gt; passwd&lt;br /&gt;
* firmare localmente in modo non esportabile&lt;br /&gt;
 &amp;gt; lsign&lt;br /&gt;
* sempre '''ricordarsi di salvare'''&lt;br /&gt;
 &amp;gt; save&lt;br /&gt;
* oppure uscire&lt;br /&gt;
 &amp;gt; quit&lt;br /&gt;
&lt;br /&gt;
Digitare &amp;lt;code&amp;gt;help&amp;lt;/code&amp;gt; per una lista esaustiva.&lt;br /&gt;
&lt;br /&gt;
Tutte le modifiche da rendere pubbliche vanno inviate ad un keyserver.&lt;br /&gt;
&lt;br /&gt;
== Revocare una chiave ==&lt;br /&gt;
Avendo già il certificato di revoca:&lt;br /&gt;
 $ gpg --import certificato-di-revoca.asc&lt;br /&gt;
 $ gpg --keyserver pgp.surfnet.nl --send-key ''ID''&lt;br /&gt;
&lt;br /&gt;
== Gestione delle chiavi ==&lt;br /&gt;
Controllare il database delle chiavi: questo comando mostra tutte le chiavi che abbiamo con molte informazioni.&lt;br /&gt;
 $ gpg --list-keys --with-colons&lt;br /&gt;
&lt;br /&gt;
Fornisce tutti i valori di fiducia assegnati alle varie chiavi. (Informazioni private)&lt;br /&gt;
 $ gpg --list-ownertrust&lt;br /&gt;
&lt;br /&gt;
== Controllo firme ==&lt;br /&gt;
 $ gpg --check-sigs&lt;br /&gt;
 $ gpg --list-sigs&lt;br /&gt;
&lt;br /&gt;
== Esportare le chiavi altrui ==&lt;br /&gt;
Abbiamo importato e firmato la chiave di &amp;lt;ID&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Rimandiamola al proprietario:&lt;br /&gt;
 $ gpg --armor -export -o firma.sig &amp;lt;ID&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Questo comando crea un file di nome ''firma.sig'' nella directory corrente, che contiene la chiave firmata.&lt;br /&gt;
Spedire al proprietario ''firma.sig''.&lt;br /&gt;
&lt;br /&gt;
Chi riceve la propria chiave firmata da altri può decidere inserirla nel proprio portachiavi, con&lt;br /&gt;
 $ gpg --import firma.sig&lt;br /&gt;
&lt;br /&gt;
Si aggiungono al portachiavi le nuove firme ma anche i nuovi ID che il mittente ha sulla sua chiave, col rispettivo valore di fiducia. Firmare le chiavi degli altri implica dar loro fiducia, e, spesso, anche aver verificato la loro identità in maniera sicura.&lt;br /&gt;
Se non ci fidiamo, non firmiamo. Se si firmano a caso tutte le chiavi che capitano a tiro, si perde la reputazione che si ha presso gli altri partecipanti della rete. Se vogliamo fare un uso pubblico di questa fiducia reciproca possiamo mandare la nostra  chiave, contenente la nuova firma, al keyserver:&lt;br /&gt;
 $ gpg --keyserver pgp.circl.lu --send-key &amp;lt;ID mia chiave&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Periodicamente occorre aggiornare il proprio portachiavi digitale, così da venire a conoscenza delle modifiche sulle chiavi degli altri.&lt;br /&gt;
 $ gpg --keyserver pgp.circl.lu --refresh-keys&lt;br /&gt;
&lt;br /&gt;
== Rete di fiducia ==&lt;br /&gt;
Una chiave importata può essere firmata con un certo grado di fiducia. Possiamo rispedirla al proprietario o caricare la firma su un keyserver, e se lui la importa nel suo portachiavi, avrà la propria chiave firmata da noi. Ognuno può quindi aggiungere le firme dei conoscenti alla propria chiave, che a loro volta hanno firme di altri.&lt;br /&gt;
&lt;br /&gt;
== GUI ==&lt;br /&gt;
Esistono vari programmi a interfaccia grafica:&lt;br /&gt;
* ''Seahorse'', per gestire le chiavi e i certificati, comprese quelle ssh, per un ambiente GTK&lt;br /&gt;
* ''KGPG'', per gestire le chiavi e i certificati, comprese quelle ssh, per un ambiente QT&lt;br /&gt;
* ''Pinentry'' (anche da riga di comando) si ricorda la password della chiave per il tempo impostato (default 5 minuti)&lt;br /&gt;
&lt;br /&gt;
= Systemd =&lt;br /&gt;
 systemd-timesyncd — system time synchronization across the network;&lt;br /&gt;
 systemd/Journal — system logging&lt;br /&gt;
 systemd/Timers — alternative to cron&lt;br /&gt;
&lt;br /&gt;
= Link Utili =&lt;br /&gt;
&lt;br /&gt;
[https://wiki.archlinux.org/ ArchWiki]&lt;br /&gt;
&lt;br /&gt;
[https://wwwcdf.pd.infn.it/AppuntiLinux/a21.htm Appunti Linux]&lt;br /&gt;
&lt;br /&gt;
[https://www.linuxfromscratch.org/lfs/downloads/stable/LFS-BOOK-11.3-NOCHUNKS.html LFS-BOOK]&lt;br /&gt;
&lt;br /&gt;
[[Category: Howto]]&lt;/div&gt;</summary>
		<author><name>$pooky Hunter</name></author>
	</entry>
	<entry>
		<id>https://wiki.golem.linux.it/index.php?title=Appunti_Arch_Linux&amp;diff=9669</id>
		<title>Appunti Arch Linux</title>
		<link rel="alternate" type="text/html" href="https://wiki.golem.linux.it/index.php?title=Appunti_Arch_Linux&amp;diff=9669"/>
		<updated>2025-04-08T22:44:33Z</updated>

		<summary type="html">&lt;p&gt;$pooky Hunter: /* VPN */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[https://archlinux.org/ Arch Linux] è una distribuzione Linux leggera e veloce; ma la cui installazione, configurazione e amministrazione avviene prevalentemente da terminale attraverso la modifica manuale di file di configurazione testuali.&lt;br /&gt;
&lt;br /&gt;
Fornisce, seguendo un modello di distribuzione detto &amp;quot;rolling-release&amp;quot;, l'ultima versione stabile della maggior parte del software opensource disponibile per Linux. Dato che è in costante aggiornamento non richiede periodici passaggi da una versione stabile alla successiva. Il lato negativo è che aggiornamenti di componenti importanti come quelli di: '''kernel, boot loader, driver video, librerie...''' potrebbero determinare problemi tali da rendere il sistema inutilizzabile. Accorgimenti come lo snapshot periodico del filesystem riescono, per fortuna, a contrastare l'impatto di questi inconvenienti.&lt;br /&gt;
&lt;br /&gt;
= Installazione =&lt;br /&gt;
== Guida ==&lt;br /&gt;
[https://wiki.archlinux.org/title/Installation_guide Guida ufficiale]&lt;br /&gt;
&lt;br /&gt;
== Supporti ==&lt;br /&gt;
* ISO ufficiale [http://archlinux.mirror.garr.it/archlinux/iso/latest/archlinux-x86_64.iso archlinux-x86_64.iso]&lt;br /&gt;
&lt;br /&gt;
* ISO con supporto per lo [https://openzfs.github.io/openzfs-docs/Getting%20Started/Arch%20Linux/index.html ZFS] [https://archzfs.leibelt.de/media/data/archlinux-archzfs-linux.iso archlinux-archzfs-linux.iso]&lt;br /&gt;
&lt;br /&gt;
* ISO con installer grafico Calamares [https://sourceforge.net/projects/alci/files/alci-iso/ ALCI]&lt;br /&gt;
&lt;br /&gt;
* ISO live CD/USB con interfaccia Xfce, utile per operazioni di ripristino o installazione [https://www.system-rescue.org/Download/ SystemRescue]:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== ISO personalizzata ==&lt;br /&gt;
Con '''archiso''' è possibile creare un'immagine con pacchetti aggiuntivi rispetto a quelli contenuti nella versione ufficiale. &lt;br /&gt;
&lt;br /&gt;
 # pacman -S archiso&lt;br /&gt;
&lt;br /&gt;
Copiare il contenuto del pacchetto in una directory di lavoro, es.: ''/root/media''&lt;br /&gt;
 # cp -r /usr/share/archiso/configs/releng /root/media&lt;br /&gt;
&lt;br /&gt;
Se volessimo aggiungere il supporto ad un pacchetto non contenuto nei repository ufficiali come, per esempio, lo ZFS occorrerebbe:&lt;br /&gt;
&lt;br /&gt;
* Importare la chiave pubblica del suo repository&lt;br /&gt;
 # pacman-key -r DDF7DB817396A49B2A2723F7403BD972F75D9D76&lt;br /&gt;
 # pacman-key --lsign-key DDF7DB817396A49B2A2723F7403BD972F75D9D76&lt;br /&gt;
 &lt;br /&gt;
* Modificare le seguenti righe al file '''pacman.conf''' di archiso per aggiungere il repository&lt;br /&gt;
 [archzfs]&lt;br /&gt;
 SigLevel = Never&lt;br /&gt;
 Server = https://archzfs.com/$repo/$arch&lt;br /&gt;
&lt;br /&gt;
* Aggiungere le seguenti righe al file ''packages.x86_64'' per aggiungere i pacchetti che ci interessa installare&lt;br /&gt;
 zfs-utils&lt;br /&gt;
 zfs-dkms&lt;br /&gt;
 net-tools&lt;br /&gt;
&lt;br /&gt;
* Se volessimo creare una versione live di una macchina, comprensiva di tutti i suoi pacchetti, potremmo semplicemente aggiungerli al file ''packages.x86_64'' &lt;br /&gt;
&lt;br /&gt;
 # pacman -Qq &amp;gt;&amp;gt; ''/path/packages.x86_64''&lt;br /&gt;
&lt;br /&gt;
* Lanciare lo script per creare l'ISO&lt;br /&gt;
 # ./build.sh -v&lt;br /&gt;
L'immagine sarà generata nella directory /root/media/out&lt;br /&gt;
&lt;br /&gt;
== Preparazione del disco ==&lt;br /&gt;
Su Linux si può scegliere (salvo casi estremamente [https://wiki.archlinux.org/title/partitioning#Partitionless_disk particolari]) tra due [https://unix.stackexchange.com/questions/289389/what-are-the-differences-between-the-various-partition-tables tipi] di tabella delle partizioni&lt;br /&gt;
&lt;br /&gt;
* msdos (Master Boot Record o più semplicemente MBR)&lt;br /&gt;
&lt;br /&gt;
* GPT (GUID Partition Table)&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
I casi in cui è preferibile utilizzare la tabella ''msdos'' sono:&lt;br /&gt;
&lt;br /&gt;
* dual-boot con Windows (32-bit o 64-bit) con la scheda madre in modalità Legacy BIOS&lt;br /&gt;
* in schede madri molto datate il BIOS potrebbe non supportare lo schema GPT (esiste comunque un [https://wiki.archlinux.org/title/partitioning#Tricking_old_BIOS_into_booting_from_GPT trucco] per aggirare l'ostacolo)&lt;br /&gt;
&lt;br /&gt;
[https://wiki.archlinux.org/title/partitioning#Choosing_between_GPT_and_MBR Vantaggi] di GPT su MBR:&lt;br /&gt;
&lt;br /&gt;
* offre un sistema di denominazione delle partizioni indipendente dal filesystem (PARTLABEL, PARTUUID)&lt;br /&gt;
&lt;br /&gt;
* 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.&lt;br /&gt;
&lt;br /&gt;
* la grandezza massima di un disco è di 2 ZiB, mentre su MBR 2 TiB&lt;br /&gt;
&lt;br /&gt;
* permette di fare a meno della tradizionale partizione di /boot con i filesystem BTRFS e ZFS in modo da semplificare la gestione degli snapshot.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Schede madri BIOS ===&lt;br /&gt;
Creare due partizioni.&lt;br /&gt;
&lt;br /&gt;
# '''[http://en.wikipedia.org/wiki/BIOS_Boot_partition 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.&lt;br /&gt;
# '''Linux filesystem''': successivamente da formattare col filesystem di nostra scelta: BTRFS, ZFS, ext4, XFS, JFS.&lt;br /&gt;
&lt;br /&gt;
==== Partizionamento ====&lt;br /&gt;
Col seguente comando verrà creata la partizione BIOS GRUB (EF02) a partire dal 1MB, della grandezza di 64MB, 8GB per la SWAP ed il resto del disco resterà disponibile per il filesystem di Linux.&lt;br /&gt;
&lt;br /&gt;
Se avete più dischi da utilizzare in raid, questa operazione andrà ripetuta per ciascun disco.&lt;br /&gt;
&lt;br /&gt;
 # sgdisk \&lt;br /&gt;
 --new=1:2048:133120 --typecode=1:EF02 --change-name=1:&amp;quot;GRUB&amp;quot; \&lt;br /&gt;
 --new=2:0:+8000M ---typecode 2:8200 --change-name=2:&amp;quot;SWAP&amp;quot; \&lt;br /&gt;
 --largest-new=3 --typecode=3:8300 --change-name=3:&amp;quot;ROOT&amp;quot; /dev/sda&lt;br /&gt;
&lt;br /&gt;
La seconda partizione dovrà poi essere formattata con uno dei filesystem supportati da Linux (ext4, btrfs, xfs...)&lt;br /&gt;
 # mkfs.btrfs /dev/sda3&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Schede madri UEFI ===&lt;br /&gt;
Creare due partizioni.&lt;br /&gt;
&lt;br /&gt;
# '''EFI''': è una partizione in formato FAT32 necessaria per l'avvio dei sistemi operativi nei PC con schede madri UEFI.&lt;br /&gt;
# '''Linux filesystem''': successivamente da formattare col filesystem di nostra scelta: BTRFS, ZFS, ext4, XFS, JFS.&lt;br /&gt;
&lt;br /&gt;
==== Partizionamento ====&lt;br /&gt;
Col seguente comando verrà creata la partizione EFI (EF00) a partire dal 1MB, della grandezza di 512MB, 8Gb per la SWAP ed il resto del disco per il filesystem di Linux.&lt;br /&gt;
 # sgdisk \&lt;br /&gt;
 --new=1:2048:1064960 --typecode=1:EF00 --change-name=1:&amp;quot;efi&amp;quot; \&lt;br /&gt;
 --new=2:0:+8000M ---typecode 2:8200 --change-name=2:&amp;quot;SWAP&amp;quot; \&lt;br /&gt;
 --largest-new=3 --typecode=3:8300 --change-name=3:&amp;quot;ROOT&amp;quot; /dev/sda&lt;br /&gt;
&lt;br /&gt;
La partizione '''EFI''' dovrà poi essere formattata in FAT32&lt;br /&gt;
 # mkfs.vfat -F 32 /dev/sda1&lt;br /&gt;
&lt;br /&gt;
La seconda partizione dovrà poi essere formattata con uno dei filesystem supportati da Linux (ext4, btrfs, xfs...)&lt;br /&gt;
 # mkfs.btrfs /dev/sda3&lt;br /&gt;
&lt;br /&gt;
== Montaggio del filesystem ==&lt;br /&gt;
Formattazione ed attivazione della SWAP&lt;br /&gt;
 # mkswap /dev/sda2&lt;br /&gt;
 # swapon /dev/sda2&lt;br /&gt;
&lt;br /&gt;
Montaggio del filesystem di ROOT nei sistemi BIOS&lt;br /&gt;
 # mount /dev/sda3 /mnt&lt;br /&gt;
&lt;br /&gt;
Montaggio del filesystem di ROOT nei sistemi UEFI&lt;br /&gt;
 # mount /dev/sda3 /mnt&lt;br /&gt;
 # mount --mkdir /dev/sda1 /mnt/boot&lt;br /&gt;
&lt;br /&gt;
== Pacchetti base ==&lt;br /&gt;
Per l'installazione di base si consigliano i seguenti meta-pacchetti&lt;br /&gt;
 # pacstrap -K /mnt base base-devel linux linux-headers linux-firmware&lt;br /&gt;
&lt;br /&gt;
== Configurazione ==&lt;br /&gt;
Creazione del file fstab&lt;br /&gt;
 # genfstab -U /mnt &amp;gt;&amp;gt; /mnt/etc/fstab&lt;br /&gt;
&lt;br /&gt;
Chroot nel nuovo sistema&lt;br /&gt;
 # arch-chroot /mnt&lt;br /&gt;
&lt;br /&gt;
Timezone&lt;br /&gt;
 # ln -sf /usr/share/zoneinfo/Europe/Rome /etc/localtime&lt;br /&gt;
&lt;br /&gt;
Editare il file &amp;lt;code&amp;gt;/etc/systemd/timesyncd.conf&amp;lt;/code&amp;gt; ed abilitare il servizio per la sincronizzazione automatica dell'orario&lt;br /&gt;
 # systemctl enable systemd-timesyncd.service&lt;br /&gt;
&lt;br /&gt;
Editare il file &amp;lt;code&amp;gt;/etc/locale.gen&amp;lt;/code&amp;gt; e togliere il commento agli argomenti che interessano, es.: ''en_US.UTF-8'', ''it_IT.UTF-8''. E successivamente generare la localizzazione eseguendo&lt;br /&gt;
 # locale-gen&lt;br /&gt;
&lt;br /&gt;
Configurare la lingua che vogliamo usare per il nostro sistema editando il file &amp;lt;code&amp;gt;/etc/locale.conf&amp;lt;/code&amp;gt; oppure lanciando il comando&lt;br /&gt;
 # localectl set-locale LANG=en_US.UTF-8&lt;br /&gt;
&lt;br /&gt;
Selezioniamo il layout della tastiera editando il file &amp;lt;code&amp;gt;/etc/vconsole.conf&amp;lt;/code&amp;gt;&lt;br /&gt;
 # echo &amp;quot;KEYMAP=it&amp;quot; &amp;gt;&amp;gt; /etc/vconsole.conf&lt;br /&gt;
&lt;br /&gt;
Scegliere un home host (es.: ''archstar'')&lt;br /&gt;
 # echo '''archstar''' &amp;gt;&amp;gt; /etc/hostname&lt;br /&gt;
&lt;br /&gt;
Impostare una password per l'utente root&lt;br /&gt;
 # passwd&lt;br /&gt;
&lt;br /&gt;
Installare e configurare il bootloader&lt;br /&gt;
&lt;br /&gt;
= Filesystem =&lt;br /&gt;
Su Linux, a seconda di ciò di cui abbiamo bisogno, è possibile scegliere tra numerosi filesystem. Le principali opzioni sono le seguenti:&lt;br /&gt;
&lt;br /&gt;
- BTRFS: supporta nativamente sottovolumi, snapshot ed il raid 0, 1 e 5; ma non la crittografia.&lt;br /&gt;
&lt;br /&gt;
- EXT4: il FS storico di Linux, evoluzione di ext3. Supporta nativamente la crittografia dei dati, ma non gestisce autonomamente né RAID, né snapshots. &lt;br /&gt;
&lt;br /&gt;
- [https://openzfs.github.io/openzfs-docs/index.html 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 &amp;quot;write-atomicity&amp;quot; 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.&lt;br /&gt;
&lt;br /&gt;
- [https://access.redhat.com/documentation/it-it/red_hat_enterprise_linux/9/html-single/configuring_and_managing_logical_volumes/index 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.&lt;br /&gt;
&lt;br /&gt;
== IMG ==&lt;br /&gt;
Per fare esperimenti con i filesystem può essere utile creare dei file immagine&lt;br /&gt;
&lt;br /&gt;
Creare un file immagine di una specifica grandezza (es.: 10G)&lt;br /&gt;
 $ truncate -s 10g disk.img&lt;br /&gt;
&lt;br /&gt;
Formattarlo con un filesystem (es.: btrfs)&lt;br /&gt;
 $ mkfs.btrfs disk.img&lt;br /&gt;
&lt;br /&gt;
Montarlo in loop&lt;br /&gt;
 $ sudo mount -o loop disk.img /mnt&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== BTRFS ==&lt;br /&gt;
Creazione del filesystem&lt;br /&gt;
 # mkfs.btrfs ''/dev/partizione''&lt;br /&gt;
&lt;br /&gt;
Montaggio del filesystem&lt;br /&gt;
 # mount -o compress=lzo ''/dev/partizione'' ''/mnt/punto_mount''&lt;br /&gt;
&lt;br /&gt;
(Si consiglia di usare l'opzione di compressione del filesystem per migliorare le performance ed ottimizzare l'utilizzo dello spazio)&lt;br /&gt;
&lt;br /&gt;
===Subvolumi===&lt;br /&gt;
* Creare un subvolume&lt;br /&gt;
 # btrfs subvolume create ''subvolume''&lt;br /&gt;
&lt;br /&gt;
* Controllare i subvolumi presenti sul sistema&lt;br /&gt;
 # btrfs subvolume list /&lt;br /&gt;
&lt;br /&gt;
In una tipica installazione Ubuntu avremo un output di questo tipo&lt;br /&gt;
 ID 257 gen 9755 top level 5 path @&lt;br /&gt;
 ID 292 gen 7624 top level 5 path @home&lt;br /&gt;
&lt;br /&gt;
''@'' è il nome del subvolume contenente la root '''/''' del filesystem&lt;br /&gt;
''@home'' è il nome del subvolume della /home&lt;br /&gt;
&lt;br /&gt;
=== Montaggio di un subvolume ===&lt;br /&gt;
 # mount -o subvol=''subvolume'' ''/dev/partizione'' ''/mnt/punto_mount''&lt;br /&gt;
&lt;br /&gt;
=== fstab ===&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Ecco un '''/etc/fstab''' di esempio&lt;br /&gt;
 LABEL=ROOT       /             btrfs     defaults,compress=lzo,subvol=@            0 0&lt;br /&gt;
 LABEL=ROOT       /home         btrfs     defaults,compress=lzo,subvol=@home        0 0&lt;br /&gt;
 LABEL=ROOT       /mnt/btrfs    btrfs     defaults,noauto,subvolid=0,compress=lzo   0 0&lt;br /&gt;
&lt;br /&gt;
Montando la partizione con label ROOT su /mnt/btrfs saranno visibili tutti i subvolumi.&lt;br /&gt;
&lt;br /&gt;
===Conversione da Ext3/4 a Btrfs===&lt;br /&gt;
 # btrfs-convert /dev/partizione&lt;br /&gt;
&lt;br /&gt;
Automaticamente è creata una snapshot contenente il vecchio filesystem (''/ext2_saved'')&lt;br /&gt;
&lt;br /&gt;
In caso di problemi può essere montata col comando&lt;br /&gt;
 # mount -t btrfs -o subvol=ext2_saved /dev/xxx /ext2_saved&lt;br /&gt;
 # mount -t ext3 -o loop,ro /ext2_saved/image /ext3&lt;br /&gt;
&lt;br /&gt;
Se tutto è andato a buon fine può invece essere eliminata&lt;br /&gt;
 # btrfs subvolume delete /ext2_saved&lt;br /&gt;
&lt;br /&gt;
===Riparazione di un filesystem danneggiato===&lt;br /&gt;
* Direttamente sul filesystem montato&lt;br /&gt;
 # btrfs scrub start -B /dev/partizione&lt;br /&gt;
o anche direttamente sulla root&lt;br /&gt;
 # btrfs scrub start -B /&lt;br /&gt;
&lt;br /&gt;
* Sul disco smontato&lt;br /&gt;
 # btrfs check --repair /dev/partizione&lt;br /&gt;
&lt;br /&gt;
Per non dover ricorrere ad un dispositivo di avvio alternativo, dato che btrfs-check non può essere utilizzato su un filesystem montato, si consiglia di aggiungerlo al ramdisk modificando in questo mmodo il file &amp;lt;code&amp;gt;/etc/mkinitcpio.conf&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 BINARIES=(btrfs)&lt;br /&gt;
&lt;br /&gt;
=== Quote ===&lt;br /&gt;
Per limitare le dimensioni di un subvolume è possibile abilitare la gestione delle '''quote'''.&lt;br /&gt;
&lt;br /&gt;
Utilizzare il seguente comando su un filesystem btrfs appena creato e privo di subvolumi&lt;br /&gt;
 # btrfs quota enable volume&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
 # btrfs subvolume list &amp;lt;path&amp;gt; | cut -d' ' -f2 | xargs -I{} -n1 btrfs qgroup create 0/{} &amp;lt;path&amp;gt;&lt;br /&gt;
 # btrfs quota rescan &amp;lt;path&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Assegnare una quota limite ad un subvolume&lt;br /&gt;
 # btrfs qgroup limit size /volume/subvolume&lt;br /&gt;
&lt;br /&gt;
Es.:&lt;br /&gt;
 # btrfs qgroup limit 20g /mnt/@&lt;br /&gt;
 # btrfs qgroup limit 100g /mnt/@home&lt;br /&gt;
&lt;br /&gt;
Scoprire la quantità di spazio utilizzata da un subvolume&lt;br /&gt;
 # btrfs qgroup show &amp;lt;path&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Snapshots ===&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
* Effettuare uno snapshot&lt;br /&gt;
 # btrfs subvolume snapshot @ rootsnap&lt;br /&gt;
&lt;br /&gt;
Nell'esempio abbiamo effettuato il ''backup'' del filesystem di root e l'abbiamo chiamato ''rootsnap''&lt;br /&gt;
&lt;br /&gt;
* Montare un subvolume/snapshot&lt;br /&gt;
 # mount -t btrfs -o subvol=rootsnap /dev/partizione /mnt/snapshot&lt;br /&gt;
&lt;br /&gt;
* Cancellare un subvolume/snapshot&lt;br /&gt;
 # btrfs subvolume delete rootsnap&lt;br /&gt;
&lt;br /&gt;
==== Integrazione con GRUB ====&lt;br /&gt;
È possibile caricare automaticamente all'avvio gli snapshot dei filesystem di root attraverso il programma '''grub-btrfs'''&lt;br /&gt;
 # pacman -S grub-btrfs&lt;br /&gt;
&lt;br /&gt;
Con questo tool ogni volta che rigeneriamo il file di configurazione di GRUB il sistema rileva eventuali sottovolumi avviabili (snapshot comprese) aggiungendoli al menu di avvio del GRUB &lt;br /&gt;
 # grub-mkconfig -o /boot/grub/grub.cfg&lt;br /&gt;
&lt;br /&gt;
=== Backup ===&lt;br /&gt;
Le snapshot possono essere salvate su un disco esterno, a patto che questo abbia un file system btrfs.&lt;br /&gt;
L'operazione di trasferimento può essere effettuata soltanto su snapshot in sola lettura.&lt;br /&gt;
Si ipotizza che il proprio disco di sistema sia montato in /mnt/btrfs ed il disco esterno in /mnt/ext&lt;br /&gt;
&lt;br /&gt;
* Creare la snapshot in sola lettura (opzione -r) oppure impostare il flag di sola lettura ad una snapshot già fatta&lt;br /&gt;
 btrfs subvolume snapshot -r @root @root-yymmdd-ro&lt;br /&gt;
 btrfs property set /mnt/btrfs/@root-yymmdd-ro ro true&lt;br /&gt;
* Trasferire la snapshot sul disco esterno.&lt;br /&gt;
 btrfs send /mnt/btrfs/@root-yymmdd-ro | btrfs receive /mnt/ext&lt;br /&gt;
* Quando necessario, ripristinare la snapshot&lt;br /&gt;
 btrfs send /mnt/ext/@root-yymmdd-ro | btrfs receive /mnt/btrfs/&lt;br /&gt;
* Eventualmente, rinominare la snapshot e reimpostare i privilegi di scrittura&lt;br /&gt;
 mv /mnt/ext/{@root-yymmdd-ro,@root}&lt;br /&gt;
 btrfs property set /mnt/btrfs/@root ro false&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== RAID ===&lt;br /&gt;
Tipologie e caratteristiche dei raid [https://btrfs.readthedocs.io/en/latest/mkfs.btrfs.html#profiles supportati]&lt;br /&gt;
&lt;br /&gt;
Confronto tra varie tecnologie di [https://blog.jenningsga.com/status-of-storage-within-linux/ raid]&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! RAID !! Redundancy Copies !! Redundancy Parity !! Redundancy Striping !! Spazio utilizzato !! Min/max n. dischi&lt;br /&gt;
|-&lt;br /&gt;
| disco singolo || 1 || || || 100% || 1/N&lt;br /&gt;
|- &lt;br /&gt;
| RAID0 || 1 || || 1 to N || 100% || 1/N&lt;br /&gt;
|- &lt;br /&gt;
| RAID1 || 2 || || ||  50% || 2/N &lt;br /&gt;
|- &lt;br /&gt;
| RAID1C3 || 3 || || || 33% || 3/N&lt;br /&gt;
|- &lt;br /&gt;
| RAID1C4 || 4 || || || 25% || 4/N&lt;br /&gt;
|-&lt;br /&gt;
| RAID10 || 2 || || 1 to N || 50%  || 2/N&lt;br /&gt;
|-&lt;br /&gt;
| RAID5 || 1 || 1 || 2 to N-1 || (N-1)/N || 2/N&lt;br /&gt;
|-&lt;br /&gt;
| RAID6 || 1 || 2 || 3 to N-2 || (N-2)/N || 3/N&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====RAID 0====&lt;br /&gt;
 # mkfs.btrfs -d raid0 /dev/sda1 /dev/sdb1&lt;br /&gt;
&lt;br /&gt;
===== Montare il raid =====&lt;br /&gt;
 # mount /dev/sda1 /mnt&lt;br /&gt;
&lt;br /&gt;
(È equivalente a ''mount /dev/sdb1 /mnt'', il sistema riconosce che è presente un raid 0 e provvede al montaggio corretto dei dischi)&lt;br /&gt;
&lt;br /&gt;
Verifica del montaggio&lt;br /&gt;
 # btrfs filesystem show /mnt&lt;br /&gt;
&lt;br /&gt;
 Label: none  uuid: 4714fca3-bfcb-4130-ad2f-f560f2e12f8e&lt;br /&gt;
 Total devices 2 FS bytes used 27.75GiB&lt;br /&gt;
 devid    1 size 136.72GiB used 17.03GiB path /dev/sda1&lt;br /&gt;
 devid    2 size 136.72GiB used 17.01GiB path /dev/sdb1&lt;br /&gt;
&lt;br /&gt;
=====Aggiungere una partizione=====&lt;br /&gt;
 # btrfs device add /dev/sdc1 /mnt&lt;br /&gt;
&lt;br /&gt;
 # btrfs filesystem show /mnt&lt;br /&gt;
 Label: none  uuid: 4714fca3-bfcb-4130-ad2f-f560f2e12f8e&lt;br /&gt;
 Total devices 3 FS bytes used 27.75GiB&lt;br /&gt;
 devid    1 size 136.72GiB used 17.03GiB path /dev/sda1&lt;br /&gt;
 devid    2 size 136.72GiB used 17.01GiB path /dev/sdb1&lt;br /&gt;
 devid    3 size 136.72GiB used 0.00 path /dev/sdc1&lt;br /&gt;
&lt;br /&gt;
Adesso è necessario effettuare una redistribuzione dei dati sui tre dischi&lt;br /&gt;
 # btrfs balance start -d -m /mnt&lt;br /&gt;
&lt;br /&gt;
Per vedere a che punto del bilanciamento è arrivato il sistema&lt;br /&gt;
 # btrfs fi balance status /&lt;br /&gt;
&lt;br /&gt;
 # btrfs filesystem show /mnt&lt;br /&gt;
 Label: none  uuid: 4714fca3-bfcb-4130-ad2f-f560f2e12f8e&lt;br /&gt;
 Total devices 3 FS bytes used 27.78GiB&lt;br /&gt;
 devid    1 size 136.72GiB used 10.03GiB path /dev/sda1&lt;br /&gt;
 devid    2 size 136.72GiB used 10.03GiB path /dev/sdb1&lt;br /&gt;
 devid    3 size 136.72GiB used 11.00GiB path /dev/sdc1&lt;br /&gt;
&lt;br /&gt;
=====Rimuovere un device=====&lt;br /&gt;
 # btrfs device delete /dev/sdb1 /mnt&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
==== RAID 1 ====&lt;br /&gt;
=====Creazione di un raid1 ex novo===== &lt;br /&gt;
Copiare la tabella delle partizioni da sda a sdb&lt;br /&gt;
 # sfdisk -d /dev/sda | sfdisk /dev/sdb&lt;br /&gt;
&lt;br /&gt;
Creare il raid&lt;br /&gt;
 # mkfs.btrfs -d raid1 -m raid1 /dev/sda1 /dev/sdb1&lt;br /&gt;
&lt;br /&gt;
===== Aggiungere un mirror ad un disco esistente =====&lt;br /&gt;
 # btrfs device add /dev/sdb1 ''/punto_di_mount''&lt;br /&gt;
 # btrfs balance start -dconvert=raid1 -mconvert=raid1 ''/punto_di_mount''&lt;br /&gt;
&lt;br /&gt;
===== GRUB =====&lt;br /&gt;
Se si utilizza un raid1 per la partizione di sistema '''/''' e si vuole rendere Linux avviabile automaticamente anche in caso di danneggiamento o mancanza di uno dei due dischi del raid occorrerà che sul secondo disco sia clonata la partizione EFI o BIOS GRUB (es.: /dev/sda1) e che vi sia installato il bootloader.&lt;br /&gt;
 # dd if=/dev/sda1 of=/dev/sdb1&lt;br /&gt;
 # grub-install /dev/sdb&lt;br /&gt;
&lt;br /&gt;
=====Sostituzione device danneggiato=====&lt;br /&gt;
Verificare qual è il disco che dà dei problemi&lt;br /&gt;
 # mount /dev/sda1 ''/punto_di_mount'' -o degraded&lt;br /&gt;
 # btrfs device stats ''/punto_di_mount''&lt;br /&gt;
 # btrfs filesystem show ''/punto_di_mount''&lt;br /&gt;
 # btrfs device usage ''/punto_di_mount''&lt;br /&gt;
&lt;br /&gt;
Ipotizzando che '''1''' sia l'ID del disco danneggiato secondo i comandi dati in precedenza&lt;br /&gt;
 # btrfs replace start '''1''' /dev/sdc1 ''/punto_di_mount''&lt;br /&gt;
&lt;br /&gt;
Per monitorare lo stato di ripristino del raid&lt;br /&gt;
 # btrfs replace status ''/punto_di_mount''&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
 # btrfs device delete missing /mnt&lt;br /&gt;
&lt;br /&gt;
==== RAID 5 ====&lt;br /&gt;
{{Note&lt;br /&gt;
|type=warning &lt;br /&gt;
| text= '''ATTENZIONE il raid5 su BTRFS è considerato [https://btrfs.readthedocs.io/en/latest/btrfs-man5.html#raid56-status-and-recommended-practices non sicuro] e se ne sconsiglia il suo utilizzo'''&lt;br /&gt;
}}&lt;br /&gt;
==== RAID 1C ====&lt;br /&gt;
&lt;br /&gt;
===== RAID 1C3 =====&lt;br /&gt;
Se si desidera duplicare i dati rispettivamente 2 volte in modo da poter perdere fino a due dischi su 3 senza perdere dati è possibile utilizzare una modalità chiamata raid1c3&lt;br /&gt;
&lt;br /&gt;
Per creare ex novo il raid1c3&lt;br /&gt;
 # mkfs.btrfs -d raid1c3 -m raid1c3 /dev/sda1 /dev/sdb1 /dev/sdc1&lt;br /&gt;
&lt;br /&gt;
Per convertire a raid1c3&lt;br /&gt;
 # btrfs balance start -dconvert=raid1c3 -mconvert=raid1c3 /storage-btrfs/&lt;br /&gt;
&lt;br /&gt;
===== RAID 1C4 =====&lt;br /&gt;
Se si desidera duplicare i dati rispettivamente 3 volte in modo da poter perdere fino a 3 dischi su 4 senza perdere dati è possibile utilizzare una modalità chiamata raid1c4&lt;br /&gt;
&lt;br /&gt;
Per creare ex novo il raid1c3&lt;br /&gt;
 # mkfs.btrfs -d raid1c4 -m raid1c4 /dev/sda1 /dev/sdb1 /dev/sdc1&lt;br /&gt;
&lt;br /&gt;
Per convertire a raid1c4&lt;br /&gt;
 # btrfs balance start -dconvert=raid1c4 -mconvert=raid1c4 /storage-btrfs/&lt;br /&gt;
&lt;br /&gt;
== ZFS ==&lt;br /&gt;
===Installazione di modulo e le utility da AUR===&lt;br /&gt;
 # pacman-key -r F75D9D76&lt;br /&gt;
 # pacman-key --lsign-key F75D9D76&lt;br /&gt;
 $ pikaur -S zfs-utils zfs-dkms&lt;br /&gt;
&lt;br /&gt;
===Installazione di modulo e utility da archzfs===&lt;br /&gt;
Modificare le seguenti righe al file '''pacman.conf''' di archiso&lt;br /&gt;
 [archzfs-testing]&lt;br /&gt;
 Server = https://archzfs.com/$repo/$arch&lt;br /&gt;
&lt;br /&gt;
 # pacman-key -r DDF7DB817396A49B2A2723F7403BD972F75D9D76&lt;br /&gt;
 # pacman-key --lsign-key DDF7DB817396A49B2A2723F7403BD972F75D9D76&lt;br /&gt;
 # pacman -S zfs-utils zfs-linux&lt;br /&gt;
&lt;br /&gt;
===Configurare il FS===&lt;br /&gt;
[https://wiki.archlinux.org/title/ZFS Comandi] per ottenere informazioni utili sul filesystem e sui pool&lt;br /&gt;
 # zfs list -t  all&lt;br /&gt;
 # zpool status&lt;br /&gt;
 # zpool list&lt;br /&gt;
&lt;br /&gt;
Abilitare i vari servizi sul filesystem&lt;br /&gt;
 # systemctl enable zfs-zed.service&lt;br /&gt;
 # systemctl enable zfs-mount.service&lt;br /&gt;
 # systemctl enable zfs-share.service&lt;br /&gt;
 # systemctl enable zfs-import.target&lt;br /&gt;
 # systemctl enable zfs.target&lt;br /&gt;
&lt;br /&gt;
Creare un pool su un disco&lt;br /&gt;
 # zpool create &amp;quot;pool&amp;quot; sda&lt;br /&gt;
&lt;br /&gt;
Creare un pool su una partizione&lt;br /&gt;
 # zpool create &amp;quot;pool&amp;quot; sda2&lt;br /&gt;
&lt;br /&gt;
Importare un pool&lt;br /&gt;
 # zpool import &amp;quot;pool&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Aggiungere pool alla cache per auto-import e mount (abilitare i vari demoni zfs)&lt;br /&gt;
 # zpool set cachefile=/etc/zfs/zpool.cache &amp;quot;pool&amp;quot;&lt;br /&gt;
&lt;br /&gt;
oppure si possono caricare i mountpoint in modalità legacy dall'fstab&lt;br /&gt;
 # zfs create -o mountpoint=legacy ''pool''/directory&lt;br /&gt;
&lt;br /&gt;
Aggiungere la compressione&lt;br /&gt;
 # zfs get compression ''pool''&lt;br /&gt;
 # zfs set compression=lz4 ''pool''&lt;br /&gt;
&lt;br /&gt;
Vedere le proprietà di un ''pool''&lt;br /&gt;
 # zfs get all ''zpool''&lt;br /&gt;
&lt;br /&gt;
==== RAID ====&lt;br /&gt;
Creare un pool in raid0&lt;br /&gt;
 # zpool create &amp;quot;pool&amp;quot; /dev/sdb /dev/sdc&lt;br /&gt;
&lt;br /&gt;
Creare un pool in raid1&lt;br /&gt;
 # zpool create &amp;quot;pool&amp;quot; mirror /dev/sdb /dev/sc&lt;br /&gt;
&lt;br /&gt;
Creare un pool ''raid5'' su più dischi&lt;br /&gt;
 # zpool create &amp;quot;pool&amp;quot; raidz /dev/sdb /dev/sdc /dev/sdd&lt;br /&gt;
&lt;br /&gt;
Creare un pool raid5 su immagini&lt;br /&gt;
 # zpool create &amp;quot;pool&amp;quot; raidz /path/1.img /path/2.img /path/3.img&lt;br /&gt;
&lt;br /&gt;
* [https://docs.oracle.com/cd/E19253-01/819-5461/gbbvf/index.html Sostituire] disco in raid&lt;br /&gt;
&lt;br /&gt;
Rimuovere il disco da sostituire&lt;br /&gt;
 # zpool offline disco1&lt;br /&gt;
&lt;br /&gt;
Inserire il nuovo disco&lt;br /&gt;
 # zpool replace &amp;quot;pool&amp;quot; disco1&lt;br /&gt;
 # zpool online disco1&lt;br /&gt;
&lt;br /&gt;
* Utilizza un altro disco montato al posto di quello danneggiato&lt;br /&gt;
 # zpool replace &amp;quot;pool&amp;quot; disco1 disco2&lt;br /&gt;
&lt;br /&gt;
Aggiungere uno o più dischi ad un pool&lt;br /&gt;
 # zpool add &amp;quot;pool&amp;quot; mirror disco3 disco4&lt;br /&gt;
 # zpool add &amp;quot;pool&amp;quot; raidz disco3 disco4 disco5&lt;br /&gt;
&lt;br /&gt;
Rimuovere disco1 da pool se aggiunto erroneamente&lt;br /&gt;
 # zpool remove &amp;quot;pool&amp;quot; disco1&lt;br /&gt;
&lt;br /&gt;
Controllare lo stato di un pool&lt;br /&gt;
 # zpool status&lt;br /&gt;
&lt;br /&gt;
Correggere eventuali errori&lt;br /&gt;
 # zpool clear ''pool'' ''disco''&lt;br /&gt;
 # zpool scrub  ''pool''&lt;br /&gt;
&lt;br /&gt;
=== Root filesystem ===&lt;br /&gt;
* Guida ufficiale [https://openzfs.github.io/openzfs-docs/Getting%20Started/Arch%20Linux/Root%20on%20ZFS/1-preparation.html Root on ZFS]&lt;br /&gt;
&lt;br /&gt;
Per prima cosa organizzare la tabella delle partizioni del [[#Preparazione_del_disco | disco]]&lt;br /&gt;
&lt;br /&gt;
Formattare la partizione e creare il dataset (senza mountpoint)&lt;br /&gt;
 # zpool create -m none rpool ''sda2''&lt;br /&gt;
 &lt;br /&gt;
Smontare il pool e rimontarlo in modalità legacy &lt;br /&gt;
 # zfs create -o mountpoint=none rpool/ROOT&lt;br /&gt;
 # zfs create -o mountpoint=legacy rpool/ROOT/arch&lt;br /&gt;
 # zpool set bootfs=rpool/ROOT/arch rpool&lt;br /&gt;
 # mount -t zfs rpool/ROOT /mnt&lt;br /&gt;
''rpool'' è il nome che abbiamo voluto dare al volume contenente il filesystem di sistema&lt;br /&gt;
&lt;br /&gt;
NB: se NON si usa il mountpoint in modalità legacy occorrerà impostare &amp;lt;code&amp;gt;canmount=noauto&amp;lt;/code&amp;gt; su tutti i dataset con &amp;lt;code&amp;gt;mountpoint=/&amp;lt;/code&amp;gt; (es.: zfs create -o mountpoint=/ -o canmount=noauto rpool/ROOT/arch) altrimenti il sistema cercherà di eseguirne automaticamente l'automount e fallirà se esistono più filesystem da montare su /&lt;br /&gt;
&lt;br /&gt;
Se volessimo aggiungere altri pool es.:&lt;br /&gt;
 # zfs create rpool/home&lt;br /&gt;
 # zfs create rpool/arch/pkg&lt;br /&gt;
 # zfs create rpool/var&lt;br /&gt;
 # zfs create rpool/srv&lt;br /&gt;
&lt;br /&gt;
Configurare la cache degli zpool&lt;br /&gt;
 # zpool set cachefile=/etc/zfs/rpool.cache rpool &lt;br /&gt;
&lt;br /&gt;
Copiare il file di cache nel sistema dove dovremo eseguire il chroot per l'installazione.&lt;br /&gt;
 # mkdir -p /mnt/etc/zfs&lt;br /&gt;
 # cp /etc/zfs/rpool.cache /mnt/etc/zfs/rpool.cache&lt;br /&gt;
&lt;br /&gt;
Installare il sistema di base&lt;br /&gt;
 # pacstrap -K /mnt base linux linux-firmware zfs-utils zfs-linux&lt;br /&gt;
&lt;br /&gt;
Altri pacchetti consigliati&lt;br /&gt;
 # pacstrap -K /mnt base-devel net-tools networkmanager nano zsh grml-zsh-config busybox&lt;br /&gt;
&lt;br /&gt;
Eseguire il chroot per procedere con l'installazione&lt;br /&gt;
 # arch-chroot /mnt&lt;br /&gt;
&lt;br /&gt;
Configurare il mountpoint su fstab&lt;br /&gt;
/etc/fstab &lt;br /&gt;
 rpool/ROOT/arch      /       zfs         noatime     0 0&lt;br /&gt;
&lt;br /&gt;
Editare il file /etc/mkinitcpio.conf aggiungendo zfs prima del filesystem&lt;br /&gt;
 HOOKS=&amp;quot;base udev autodetect modconf block keyboard zfs filesystems&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Abilitare i servizi per ZFS all'avvio&lt;br /&gt;
 # systemctl enable zfs-zed.service&lt;br /&gt;
 # systemctl enable zfs-mount.service&lt;br /&gt;
 # systemctl enable zfs-share.service&lt;br /&gt;
 # systemctl enable zfs-import.target&lt;br /&gt;
 # systemctl enable zfs.target&lt;br /&gt;
&lt;br /&gt;
Impostare una password di root&lt;br /&gt;
 # passwd&lt;br /&gt;
&lt;br /&gt;
Ricreare il ramdisk col supporto per ZFS&lt;br /&gt;
 # mkinitcpio -p linux&lt;br /&gt;
&lt;br /&gt;
Installare il [[Appunti_Arch_Linux#BOOT_LOADER|Boot Loader]]&lt;br /&gt;
&lt;br /&gt;
Uscire dal chroot e terminazione dell'installazione&lt;br /&gt;
 # exit&lt;br /&gt;
 # zfs unmount -a&lt;br /&gt;
 # cp /etc/zfs/rpool.cache /mnt/etc/zfs/rpool.cache&lt;br /&gt;
 # zpool export rpool&lt;br /&gt;
 # reboot&lt;br /&gt;
&lt;br /&gt;
==== BOOT LOADER ====&lt;br /&gt;
===== ZFSBootMenu =====&lt;br /&gt;
Per gestire a meglio gli snapshot e la clonazione dei pool è consigliabile utilizzare, su PC che supportano UEFI, il boot loader [https://docs.zfsbootmenu.org/en/latest/guides/alpine/uefi.html ZFSBootMenu].&lt;br /&gt;
&lt;br /&gt;
Esportiamo le variabile per configurare il primo disco /dev/sda come disco di avvio&lt;br /&gt;
 # export BOOT_DISK=&amp;quot;/dev/sda&amp;quot;&lt;br /&gt;
 # export BOOT_PART=&amp;quot;1&amp;quot;&lt;br /&gt;
 # export BOOT_DEVICE=&amp;quot;${BOOT_DISK}${BOOT_PART}&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Assicuriamoci che il nostro pool di root sia configurato come avviabile&lt;br /&gt;
 # zpool set bootfs=''rpool/ROOT/'' ''rpool''&lt;br /&gt;
&lt;br /&gt;
Formattiamo sda1 per creare la partizione EFI di boot&lt;br /&gt;
 # mkfs.vfat -F32 &amp;quot;$BOOT_DEVICE&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Aggiungiamola all'fstab e montiamola&lt;br /&gt;
 # cat &amp;lt;&amp;lt; EOF &amp;gt;&amp;gt; /etc/fstab&lt;br /&gt;
 $BOOT_DEVICE /boot/efi vfat defaults 0 0&lt;br /&gt;
 EOF&lt;br /&gt;
&lt;br /&gt;
 # mkdir -p /boot/efi&lt;br /&gt;
 # mount /boot/efi&lt;br /&gt;
&lt;br /&gt;
Scarichiamo ed installiamo il boot loader&lt;br /&gt;
 # mkdir -p /boot/efi/EFI/ZBM&lt;br /&gt;
 # curl -o /boot/efi/EFI/ZBM/VMLINUZ.EFI -L https://get.zfsbootmenu.org/efi&lt;br /&gt;
 # cp /boot/efi/EFI/ZBM/VMLINUZ.EFI /boot/efi/EFI/ZBM/VMLINUZ-BACKUP.EFI&lt;br /&gt;
&lt;br /&gt;
Forziamo zfsbootmenu a montare il nostro dataset con i permessi di scrittura&lt;br /&gt;
 # zfs set org.zfsbootmenu:commandline=&amp;quot;quiet loglevel=4 rw&amp;quot; rpool/ROOT&lt;br /&gt;
&lt;br /&gt;
Installiamo e configuriamo  ''efibootmgr''&lt;br /&gt;
 # pacman -S efibootmgr&lt;br /&gt;
&lt;br /&gt;
 # efibootmgr -c -d &amp;quot;$BOOT_DISK&amp;quot; -p &amp;quot;$BOOT_PART&amp;quot; \&lt;br /&gt;
  -L &amp;quot;ZFSBootMenu (Backup)&amp;quot; \&lt;br /&gt;
  -l \\EFI\\ZBM\\VMLINUZ-BACKUP.EFI&lt;br /&gt;
&lt;br /&gt;
 # efibootmgr -c -d &amp;quot;$BOOT_DISK&amp;quot; -p &amp;quot;$BOOT_PART&amp;quot; \&lt;br /&gt;
  -L &amp;quot;ZFSBootMenu&amp;quot; \&lt;br /&gt;
  -l \\EFI\\ZBM\\VMLINUZ.EFI&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Se si utilizza un pool distribuito su più dischi (RAID1 o RAIDZ) occorrerà installare il bootloader anche sugli altri dispositivi (nel caso del disco /dev/sdb).&lt;br /&gt;
&lt;br /&gt;
 # mount /dev/sdb1 /boot/efi&lt;br /&gt;
 # curl -o /boot/efi/EFI/ZBM/VMLINUZ.EFI -L https://get.zfsbootmenu.org/efi&lt;br /&gt;
 # efibootmgr -c -d &amp;quot;$BOOT_DISK&amp;quot; -p &amp;quot;$BOOT_PART&amp;quot; \&lt;br /&gt;
  -L &amp;quot;ZFSBootMenu sdb&amp;quot; \&lt;br /&gt;
  -l \\EFI\\ZBM\\VMLINUZ.EFI&lt;br /&gt;
&lt;br /&gt;
===== GRUB =====&lt;br /&gt;
Se non ci interessa gestire snapshot o utilizziamo un PC con BIOS è possibile optare per GRUB &lt;br /&gt;
 # pacman -S grub&lt;br /&gt;
 # grub-install /dev/sda&lt;br /&gt;
 (se si usa un pool composto da più dischi es. raidz per il filesystem di root è consigliabile installare grub su tutti i dischi: sda, sdb, sdc, sdd...)&lt;br /&gt;
 # grub-mkconfig -o /boot/grub/grub.cfg&lt;br /&gt;
&lt;br /&gt;
Esempio&lt;br /&gt;
 #Grub entry&lt;br /&gt;
 menuentry 'Arch Linux'{&lt;br /&gt;
       insmod gzio&lt;br /&gt;
       insmod part_gpt&lt;br /&gt;
       insmod zfs&lt;br /&gt;
       set root='hd0,gpt3'&lt;br /&gt;
        echo    'Loading Linux linux ...'&lt;br /&gt;
        linux   /ROOT@/boot/vmlinuz-linux root=ZFS=rpool/ROOT rw  loglevel=3 quiet&lt;br /&gt;
        echo    'Loading initial ramdisk ...'&lt;br /&gt;
        initrd  /ROOT@/boot/initramfs-linux.img&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
=== Snapshot ===&lt;br /&gt;
Snapshot del dataset ROOT&lt;br /&gt;
 # zfs snapshot -r rpool/ROOT''@snapshot-2023-03-07''&lt;br /&gt;
&lt;br /&gt;
Lista degli snapshot presenti&lt;br /&gt;
 # zfs list -t snapshot&lt;br /&gt;
&lt;br /&gt;
Ripristino dello snapshot&lt;br /&gt;
 # zfs rollback rpool''@snapshot-2023-03-07''&lt;br /&gt;
&lt;br /&gt;
Oltre che servire per il ripristino, possono essere montati per esplorarne il contenuto, ma non è possibile modificarlo.&lt;br /&gt;
 # mount -t zfs rpool@''2023-04-11'' /mnt/''snapshot''&lt;br /&gt;
&lt;br /&gt;
Copia locale di un dataset&lt;br /&gt;
 # zfs send -R rpool/ROOT''@snapshot-2023-03-07'' | zfs recv -F rpool/ROOT/backup&lt;br /&gt;
&lt;br /&gt;
Invio via SSH di una snapshot&lt;br /&gt;
 # zfs send -R rpool/ROOT''@snapshot-2023-03-07''| ssh ''user@ip_address'' zfs recv tank/backups/rootzfs&lt;br /&gt;
&lt;br /&gt;
Backup locale di una snapshot&lt;br /&gt;
 # zfs send -R rpool/ROOT@snapshot | gzip &amp;gt; /tmp/zfs_backup.gz&lt;br /&gt;
&lt;br /&gt;
Restore del backup&lt;br /&gt;
 # gzcat /tmp/zfs_backup.gz | zfs recv -F rpool/ROOT&lt;br /&gt;
&lt;br /&gt;
==== Clone ====&lt;br /&gt;
Se vogliamo eseguire operazioni di scrittura su una snapshot occorre effettuare un clone del dataset&lt;br /&gt;
 # zfs snapshot ''rpool/home''@yesterday&lt;br /&gt;
 # zfs clone ''rpool/home''@yesterday rpool/new_home&lt;br /&gt;
&lt;br /&gt;
Per sostituire il filesystem principale col clone&lt;br /&gt;
 # zfs promote rpool/new_home&lt;br /&gt;
&lt;br /&gt;
=== ZFS Cifrato ===&lt;br /&gt;
Creare un dataset cifrato con password&lt;br /&gt;
 # zfs create -o encryption=on -o keyformat=''password'' ''nomepool''/''nomedataset''&lt;br /&gt;
&lt;br /&gt;
Generazione di una chiave di cifratura&lt;br /&gt;
 # dd if=/dev/random of=/path/to/key bs=1 count=32&lt;br /&gt;
&lt;br /&gt;
Creare un dataset cifrato con una chiave di cifratura &lt;br /&gt;
 # zfs create -o encryption=on -o keyformat=raw -o keylocation=''file:///directory/della/chiave'' ''nomepool''/''nomedataset''&lt;br /&gt;
&lt;br /&gt;
Controllare il percorso della chiave per ''nomepool''/''nomedataset''&lt;br /&gt;
 # zfs get keylocation ''nomepool''/''nomedataset''&lt;br /&gt;
&lt;br /&gt;
Cambiare il percorso della chiave&lt;br /&gt;
 # zfs set keylocation=''file:///nuova/directory/della/chiave'' ''nomepool''/''nomedataset''&lt;br /&gt;
&lt;br /&gt;
Caricare manualmente le chiavi di cifratura prima del montaggio&lt;br /&gt;
 # zfs load-key ''nomepool''/''nomedataset'' # carica la chiave del determinato dataset&lt;br /&gt;
 # zfs load-key -a # carica tutte le chiavi del filesystem&lt;br /&gt;
&lt;br /&gt;
==== Unlock con systemd ====&lt;br /&gt;
Creare script per il caricamento delle chiavi all'avvio &lt;br /&gt;
&lt;br /&gt;
* Caricando la password dal keyfile&lt;br /&gt;
''/etc/systemd/system/zfs-loadkey-file.service''&lt;br /&gt;
&lt;br /&gt;
 [Unit]&lt;br /&gt;
 Description=Load ZFS encryption keys&lt;br /&gt;
 DefaultDependencies=no&lt;br /&gt;
 After=zfs-import.target&lt;br /&gt;
 Before=zfs-mount.service&lt;br /&gt;
 [Service]&lt;br /&gt;
 Type=oneshot&lt;br /&gt;
 RemainAfterExit=yes&lt;br /&gt;
 ExecStart=/usr/sbin/zfs load-key -a&lt;br /&gt;
 StandardInput=tty-force&lt;br /&gt;
 [Install]&lt;br /&gt;
 WantedBy=zfs-mount.service&lt;br /&gt;
&lt;br /&gt;
* Digitando la password&lt;br /&gt;
&lt;br /&gt;
''/etc/systemd/system/zfs-load-key@.service''&lt;br /&gt;
 [Unit]&lt;br /&gt;
 Description=Load %I encryption keys&lt;br /&gt;
 Before=systemd-user-sessions.service zfs-mount.service&lt;br /&gt;
 After=zfs-import.target&lt;br /&gt;
 Requires=zfs-import.target&lt;br /&gt;
 DefaultDependencies=no&lt;br /&gt;
 [Service]&lt;br /&gt;
 Type=oneshot&lt;br /&gt;
 RemainAfterExit=yes&lt;br /&gt;
 ExecStart=/bin/sh -c 'until (systemd-ask-password &amp;quot;Encrypted ZFS password for %I&amp;quot; --no-tty | zfs load-key %I); do echo &amp;quot;Try again!&amp;quot;; done'&lt;br /&gt;
 [Install]&lt;br /&gt;
 WantedBy=zfs-mount.service&lt;br /&gt;
&lt;br /&gt;
==== Unlock al login ====&lt;br /&gt;
Impostare il filesystem in modalità legacy così che non sia montato automaticamente all'avvio&lt;br /&gt;
 # zfs set mountpoint=legacy zroot/data/&lt;br /&gt;
&lt;br /&gt;
Modificare il file /etc/fstab&lt;br /&gt;
 zroot/data/         /home           zfs             rw,xattr,posixacl,noauto        0 0&lt;br /&gt;
&lt;br /&gt;
Creare il seguente script: &amp;lt;code&amp;gt;/sbin/mount-zfs-homedir&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 #&lt;br /&gt;
 set -eu&lt;br /&gt;
 # Password is given to us via stdin, save it in a variable for later&lt;br /&gt;
 PASS=$(cat -)&lt;br /&gt;
 #&lt;br /&gt;
 VOLNAME=&amp;quot;zroot/data/home&amp;quot;&lt;br /&gt;
 #&lt;br /&gt;
 # Unlock and mount the volume&lt;br /&gt;
 zfs load-key &amp;quot;$VOLNAME&amp;quot; &amp;lt;&amp;lt;&amp;lt; &amp;quot;$PASS&amp;quot; || continue&lt;br /&gt;
 zfs mount &amp;quot;$VOLNAME&amp;quot; || true # ignore errors&lt;br /&gt;
&lt;br /&gt;
Aggiungere lo script a PAM: /etc/pam.d/system-auth&lt;br /&gt;
&lt;br /&gt;
 auth       optional                    pam_exec.so          expose_authtok /sbin/mount-zfs-homedir&lt;br /&gt;
&lt;br /&gt;
=== Cache ===&lt;br /&gt;
Utilizzare un moderno disco a stato solido può essere una soluzione economica per velocizzare un pool, eventualmente anche raid&lt;br /&gt;
&lt;br /&gt;
 # zpool add -f ''rpool'' cache /dev/sdd1&lt;br /&gt;
 # zpool add -f ''rpool'' log /dev/sdd2&lt;br /&gt;
&lt;br /&gt;
=== Sharing ===&lt;br /&gt;
Non è molto noto, ma ZFS ha integrati dei [https://docs.oracle.com/cd/E36784_01/html/E36835/gayne.html#scrolltoc comandi] per permettere la condivisione del filesystem con altre macchine tramite i protocolli NFS o SMB.&lt;br /&gt;
&lt;br /&gt;
Premessa: occorrerà attivare il server NFS&lt;br /&gt;
 # systemctl start nfs-server.service&lt;br /&gt;
 # systemctl enable nfs-server.service&lt;br /&gt;
&lt;br /&gt;
Condividere tramite NFS l'intero pool ''home''&lt;br /&gt;
 # zfs set share.nfs=on ''pool''/home&lt;br /&gt;
&lt;br /&gt;
Verificare la condivisione&lt;br /&gt;
 # zfs get -r share.nfs ''pool''/home&lt;br /&gt;
 NAME             PROPERTY   VALUE  SOURCE&lt;br /&gt;
 pool/home        share.nfs  on     local&lt;br /&gt;
&lt;br /&gt;
Condividere tramite NFS la directory home dell'utente 1, 2...&lt;br /&gt;
 # zfs create ''pool''/home/'''utente1'''&lt;br /&gt;
 # zfs create ''pool''/home/'''utente2'''&lt;br /&gt;
&lt;br /&gt;
Si possono specificare opzioni di montaggio per i permessi sul mount&lt;br /&gt;
 # zfs set share.nfs.nosuid=on ''pool''/home/'''utente1'''&lt;br /&gt;
 # zfs set share.nfs=on ''pool''/home/'''utente1'''&lt;br /&gt;
&lt;br /&gt;
Condividere una directory con tutta la rete&lt;br /&gt;
 # zfs share -o share.nfs=on -o share.nfs.public=on pool/public%pubshare&lt;br /&gt;
&lt;br /&gt;
Condividere una directory con una parte della rete&lt;br /&gt;
 # zfs set share.nfs='rw=@192.0.10.0/16,rw=@192.0.11.0/24' pool/public%pubshare&lt;br /&gt;
&lt;br /&gt;
Disabilitare temporaneamente una condivisione&lt;br /&gt;
 # zfs unshare pool/home/''nomeshare''&lt;br /&gt;
&lt;br /&gt;
Rimuovere una condivisione&lt;br /&gt;
 # zfs set share.nfs=off pool/''share''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Montare share ===&lt;br /&gt;
Montare il volume pool1 della macchina con IP 192.168.0.2 su /mnt/pool1&lt;br /&gt;
 # mount -t nfs 192.168.0.2:/pool1 /mnt/pool1&lt;br /&gt;
&lt;br /&gt;
Aggiungere la seguente riga al file '''/etc/fstab''' per automatizzare il montaggio&lt;br /&gt;
 192.168.0.2:/pool1      /mnt/pool1      nfs       defaults          0          0&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== SWAP ===&lt;br /&gt;
Creare una partizione swap da 8 GiB&lt;br /&gt;
 # zfs create -V 8G '''&amp;lt;pool&amp;gt;/swap'''&lt;br /&gt;
&lt;br /&gt;
Formattazione della partizione&lt;br /&gt;
 # mkswap -f /dev/zvol/&amp;lt;pool&amp;gt;/swap&lt;br /&gt;
&lt;br /&gt;
Attivazione della swap&lt;br /&gt;
 # swapon /dev/zvol/&amp;lt;pool&amp;gt;/swap&lt;br /&gt;
&lt;br /&gt;
Aggiungere la swap al &amp;lt;code&amp;gt;/etc/fstab&amp;lt;/code&amp;gt;&lt;br /&gt;
 '''/dev/zvol/&amp;lt;pool&amp;gt;/swap''' none swap discard 0 0&lt;br /&gt;
&lt;br /&gt;
== Filesystem Cifrato ==&lt;br /&gt;
Esistono molti modi per cifrare volumi e file su Linux, come si può vedere da questa [https://wiki.archlinux.org/title/Data-at-rest_encryption#Comparison_table tabella]&lt;br /&gt;
&lt;br /&gt;
* Generare una password di 32 caratteri alfanumerici con /dev/random. &lt;br /&gt;
 cat /dev/random | tr -dc '[:alnum:]' | fold -w 32 | head -n 1&lt;br /&gt;
&lt;br /&gt;
=== EncFS ===&lt;br /&gt;
Cifrare una directory può essere un'alternativa alla cifratura di un intera partizione come avviene invece con Cryptsetup. EncFS è un filesystem user-space montabile tramite FUSE che permette di effettuare questa operazione. Rispetto ad un filesystem loopback criptato ci sono però diversi pregi e difetti.&lt;br /&gt;
&lt;br /&gt;
* Pro&lt;br /&gt;
# Selezionare selettivamente i contenuti da cifrare, rispetto ad avere un device completamente cifrato, appesantisce meno il lavoro della CPU specialmente quando si utilizzano processori datati privi del set di istruzioni AES.&lt;br /&gt;
# Dimensioni modificabili: un file system vuoto EncFS è composto da qualche dozzina di byte e può crescere a qualsiasi dimensione senza bisogno di essere riformattato. Con un dispositivi di cifratura a blocchi, si alloca un filesystem in anticipo con le dimensioni desiderate.&lt;br /&gt;
# Possibilità di backup incrementali: Un filesystem EncFS può essere salvato con una politica per file. Un programma di backup è in grado di rilevare quali file sono cambiati, anche se non sarà in grado di decifrarli.&lt;br /&gt;
# Permette di aggiungere la crittografia a qualsiasi filesystem&lt;br /&gt;
# Lavora a livello utente, non richiede permessi di amministratore&lt;br /&gt;
&lt;br /&gt;
* Contro&lt;br /&gt;
# Non permette di cifrare l'intera installazione, ma solo i file selezionati&lt;br /&gt;
# Chi ha accesso ai file crittografati può conoscerne i meta-dati (numero di file, permessi, dimensione)&lt;br /&gt;
# EncFS sembra non sia più attivamente mantenuto. Un'alternativa molto simile potrebbe essere gocryptfs.&lt;br /&gt;
&lt;br /&gt;
==== Montaggio automatico ====&lt;br /&gt;
Dato che non è possibile passare opzioni all'eseguibile encfs su fstab è necessario creare un wrapper, cioè uno script da rendere eseguibile (es. &amp;lt;code&amp;gt;/home/user/encfs.sh&amp;lt;/code&amp;gt;) che vada a recuperare la password da un file (es. ''encfs_password''), magari contenuto in una chiavetta USB anch'essa montata automaticamente all'avvio.&lt;br /&gt;
&lt;br /&gt;
Wrapper&lt;br /&gt;
 #!/bin/sh&lt;br /&gt;
 encfs --public --extpass=&amp;quot;cat /mnt/USB/encfs_password&amp;quot; $*&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
A questo punto è possibile aggiungere all'''/etc/fstab'' le seguenti righe.&lt;br /&gt;
 # Montaggio automatico della penna USB ''cafebabe-b00b5-deadbee'' all'avvio&lt;br /&gt;
 UUID=cafebabe-b00b5-deadbeef /mnt/USB auto defaults,auto 0 0&lt;br /&gt;
 # Richiamo del wrapper &lt;br /&gt;
 /home/''user''/encfs.sh#/home/''user''/.encrypted /home/''user''/decrypted fuse rw,user,auto 0 0&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== gocryptfs ===&lt;br /&gt;
Creare una directory cifrata ''crypt'' e montarla su ''dati''&lt;br /&gt;
 $ mkdir crypt dati&lt;br /&gt;
 $ gocryptfs -init crypt&lt;br /&gt;
 $ gocryptfs crypt dati&lt;br /&gt;
&lt;br /&gt;
Creare una versione cifrata di una preesistente home&lt;br /&gt;
&lt;br /&gt;
 $ mkdir /home/user.crypt&lt;br /&gt;
 $ gocryptfs -init -reverse /home/user&lt;br /&gt;
 $ gocryptfs -reverse /home/user /home/user.crypt&lt;br /&gt;
&lt;br /&gt;
È possibile aggiungere una linea simile alle seguente al file '''/etc/fstab''' per automatizzare il sistema di montaggio di una cartella cifrata durante il boot utilizzando un keyfile.&lt;br /&gt;
&lt;br /&gt;
 /home/user/cipher /home/user/plain fuse./usr/bin/gocryptfs nofail,allow_other,passfile=/tmp/password 0 0&lt;br /&gt;
&lt;br /&gt;
=== [https://wiki.archlinux.org/title/ECryptfs ECryptfs] ===&lt;br /&gt;
&lt;br /&gt;
=== VeraCrypt ===&lt;br /&gt;
[https://www.veracrypt.fr VeraCrypt] (fork di TrueCrypt) è un tool opensource dotato di '''interfaccia grafica''' che permette di configurare la cifratura di volumi reali o file immagini montate in loop. Ha una funzione particolare, chiamata '''Hidden Volume''' che permette di creare un volume nascosto all'interno di un normale volume VeraCrypt al quale si può accedere con una diversa password così da evitare in caso di necessità (ricatto, fidanzata/moglie gelosa, imposizione da parte delle forze dell'ordine) di mostrare il contenuto del reale archivio cifrato.&lt;br /&gt;
&lt;br /&gt;
=== LUKS ===&lt;br /&gt;
Questo strumento permette di crittografare un intero disco o una partizione, es. /dev/'''sdc2''':&lt;br /&gt;
 &lt;br /&gt;
 # cryptsetup luksFormat --cipher aes-xts-plain64 --key-size 512 --hash sha512 --iter-time 5000 /dev/'''sdc2'''&lt;br /&gt;
 &lt;br /&gt;
Una volta formattato il device è possibile montarlo, verrà chiesto di creare una password a meno che nel comando non venga esplicitato un file con la chiave di cifratura&lt;br /&gt;
 # cryptsetup open /dev/'''sdc2''' lukspart&lt;br /&gt;
&lt;br /&gt;
Adesso è possibile formattare il device col filesystem che preferiamo&lt;br /&gt;
 # mkfs.btrfs /dev/mapper/lukspart&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[https://wiki.golem.linux.it/Installare_Arch_Linux_in_una_partizione_cifrata How-to GOLEM]&lt;br /&gt;
&lt;br /&gt;
[https://guide.debianizzati.org/index.php/Volumi_criptati_LUKS_-_Creazione_e_uso_con_cryptmount How-to Debianizzati]&lt;br /&gt;
&lt;br /&gt;
=== fscrypt ===&lt;br /&gt;
È un sistema di cifratura progettato per lavorare con filesystem moderni che supportano direttamente la crittografia nativa come ext4, F2FS, UBIFS, CephFS e forse in futuro anche btrfs. &lt;br /&gt;
&lt;br /&gt;
Abilitiamo la crittografia su una directory di un device '''sdc1''' precedentemente formattato con ext4&lt;br /&gt;
 # fscrypt setup /mnt/encrypted&lt;br /&gt;
 # tune2fs -O encrypt /dev/'''sdc1'''&lt;br /&gt;
 # fscrypt encrypt /mnt/encrypted&lt;br /&gt;
&lt;br /&gt;
Per accedere alla directory al riavvio successivo&lt;br /&gt;
 # fscrypt unlock /mnt/encrypted&lt;br /&gt;
&lt;br /&gt;
=== ZFS ===&lt;br /&gt;
Creiamo un pool dove mettere il dataset cifrato, es.: '''tank/encrypted_data'''&lt;br /&gt;
 # zpool create tank /dev/sdc3&lt;br /&gt;
&lt;br /&gt;
Creiamo il dataset&lt;br /&gt;
 # zfs create -o encryption=aes-256-gcm -o keyformat=passphrase -o keylocation=prompt '''tank/encrypted_data'''&lt;br /&gt;
 &lt;br /&gt;
Montiamo il datasett&lt;br /&gt;
  # zfs mount '''tank/encrypted_data'''&lt;br /&gt;
&lt;br /&gt;
Montiamo pool e dataset cifrato al riavvio successivo &lt;br /&gt;
 # zpool import tank&lt;br /&gt;
 # zfs load-key '''tank/encrypted_data'''&lt;br /&gt;
 # zfs mount '''tank/encrypted_data'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Appunti_Arch_Linux#ZFS_Cifrato|ZFS cifrato]]&lt;br /&gt;
&lt;br /&gt;
= RAID mdadm =&lt;br /&gt;
Su Linux era possibile effettuare RAID via software anche prima dell'avvento di filesystem di nuova generazione come btrfs o zfs. Per fare ciò è possibile utilizzare il comando &amp;lt;code&amp;gt;mdadm&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Vedere l'organizzazione della tabella delle partizioni dei dischi&lt;br /&gt;
 $ lsblk&lt;br /&gt;
&lt;br /&gt;
 sda      8:16   0 447.1G  0 disk &lt;br /&gt;
 ├─sda1   8:17   0   500M  0 part &lt;br /&gt;
 ├─sda2   8:18   0    16G  0 part [SWAP]&lt;br /&gt;
 └─sda3   8:19   0 430.6G  0 part /&lt;br /&gt;
                                 &lt;br /&gt;
 sdb      8:32   1   3.7G  0 disk &lt;br /&gt;
 ├─sdb1   8:33   1   3.5G  0 part &lt;br /&gt;
 ├─sdb2   8:34   1   239M  0 part [SWAP]&lt;br /&gt;
 └─sdb3   8:19   0 430.6G  0 part /&lt;br /&gt;
&lt;br /&gt;
Nell'esempio ci sono due dischi (sda, sdb) contenenti 3 partizioni: EFI, SWAP e Linux.&lt;br /&gt;
&lt;br /&gt;
== RAID 0 ==&lt;br /&gt;
Creare un volume ''md3'' che costituito dalla somma delle due partizioni sda3 e sdb3&lt;br /&gt;
 # mdadm --create --verbose /dev/md3 --level=0 --raid-devices=2 /dev/sda3 /dev/sdb3&lt;br /&gt;
&lt;br /&gt;
Verificare che il raid funzioni correttamente&lt;br /&gt;
 # mdadm --detail /dev/md0&lt;br /&gt;
&lt;br /&gt;
Utilizzare il nuovo volume md3, formattato col filesystem XFS, per una nuova installazione di Arch Linux (montandolo in /mnt)&lt;br /&gt;
 # mkfs.xfs /dev/md3&lt;br /&gt;
 # mount /dev/md3 /mnt/&lt;br /&gt;
&lt;br /&gt;
Per memorizzare l'array nel file di configurazione&lt;br /&gt;
 # mdadm –Es &amp;gt; /etc/mdadm.conf&lt;br /&gt;
&lt;br /&gt;
== RAID 1 ==&lt;br /&gt;
Creare un volume ''md3'' mirror delle due partizioni sda3 e sdb3&lt;br /&gt;
 # mdadm --create /dev/md3 /dev/sda3 /dev/sdb3 --level=1 --raid-devices=2&lt;br /&gt;
&lt;br /&gt;
== RAID 5 ==&lt;br /&gt;
Creare un volume ''md3'' con un [https://en.wikipedia.org/wiki/Standard_RAID_levels#RAID_5 raid5], ovviamente stavolta occorreranno almeno 3 dischi es.: sda3, sdb3, sdc3. &lt;br /&gt;
&lt;br /&gt;
Per creare tre partizioni tutte della stessa dimensione è possibile copiare su sdb e sdc la tabella delle partizioni di sda&lt;br /&gt;
 #  sfdisk -d /dev/sda | sfdisk /dev/sdb&lt;br /&gt;
 #  sfdisk -d /dev/sda | sfdisk /dev/sdc&lt;br /&gt;
&lt;br /&gt;
Creare l'array in raid5&lt;br /&gt;
 # mdadm --create /dev/md/md3 /dev/sda1 /dev/sdb1 /dev/sdc1 --level=5 --raid-devices=3 --bitmap=internal&lt;br /&gt;
&lt;br /&gt;
== Modificare l'array ==&lt;br /&gt;
È possibile passare da raid1 a raid5&lt;br /&gt;
 # mdadm --grow /dev/md3 --level=5&lt;br /&gt;
 # mdadm --grow /dev/md3 --add /dev/sdc3 --raid-devices=3&lt;br /&gt;
&lt;br /&gt;
== Accorgersi di un guasto ==&lt;br /&gt;
Nei raid 1 e 5 in caso di danneggiamento di un disco sarà possibile sostituirlo e ricostruire l'array senza perdere dati. Nell'ipotesi di avere un guasto su '''sdb''' in un raid1 comparirà qualcosa di simile a questo eseguendo &amp;lt;code&amp;gt;cat /proc/mdstat&amp;lt;/code&amp;gt;&lt;br /&gt;
 md3 : active raid1 sda3[1]&lt;br /&gt;
 ''blocks [2/2] [U_]'' &lt;br /&gt;
invece che&lt;br /&gt;
 md3 : active raid1 sda3[1] '''sdb3'''[0]&lt;br /&gt;
      262016 blocks [2/2] [UU]&lt;br /&gt;
&lt;br /&gt;
===Rimuovere il disco danneggiato dal RAID===&lt;br /&gt;
Si dovrà marcare sdb3 come danneggiata e andrà rimossa dall'array.&lt;br /&gt;
 # mdadm --manage /dev/md3 --fail /dev/sdb3&lt;br /&gt;
 # mdadm --manage /dev/md3 --remove /dev/sdb3&lt;br /&gt;
&lt;br /&gt;
Se avessimo più array (es. md1, md2...) contenenti partizioni del disco sdb (sdb1, sdb2...), l'operazione andrebbe ripetuta per ciascuno di essi es.:&lt;br /&gt;
 # mdadm --manage /dev/md1 --fail /dev/sdb1&lt;br /&gt;
 # mdadm --manage /dev/md1 --remove /dev/sdb1&lt;br /&gt;
&lt;br /&gt;
 #  cat /proc/mdstat&lt;br /&gt;
 Personalities : [linear] [multipath] [raid0] [raid1] [raid5] [raid4] [raid6] [raid10]&lt;br /&gt;
 md0 : active raid1 sda3[0]&lt;br /&gt;
 24418688 blocks [2/1] [U_]&lt;br /&gt;
&lt;br /&gt;
 unused devices: &amp;lt;none&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Sostituzione del disco danneggiato ===&lt;br /&gt;
Spegnere il computer, rimuovere il disco guasto e collegarne al suo posto uno funzionante.&lt;br /&gt;
&lt;br /&gt;
'''NB: il nuovo disco dovrà essere di dimensioni uguali o maggiori del disco sostituito'''&lt;br /&gt;
&lt;br /&gt;
Installato il nuovo disco, riaccendere il PC, loggarsi come root e ricreare sul nuovo sdb le stesse partizioni presenti su sda:&lt;br /&gt;
 # sfdisk -d /dev/sda | sfdisk /dev/sdb&lt;br /&gt;
 # fdisk -l ''(per controllare che le partizioni siano uguali)''&lt;br /&gt;
&lt;br /&gt;
=== Ripristino del RAID 1 ===&lt;br /&gt;
Aggiungere ''/dev/sdb3'' a ''/dev/md3''&lt;br /&gt;
 # mdadm --manage /dev/md3 --add /dev/sdb3&lt;br /&gt;
&lt;br /&gt;
Se avessimo più array (es. md1, md2...) contenenti partizioni del disco sdb (sdb1, sdb2...), l'operazione andrebbe ripetuta per ciascuno di essi es.:&lt;br /&gt;
  # mdadm --manage /dev/md1 --add /dev/sdb1&lt;br /&gt;
&lt;br /&gt;
Controllare che tutto sia andato a buon fine&lt;br /&gt;
 # cat /proc/mdstat&lt;br /&gt;
&lt;br /&gt;
= LVM =&lt;br /&gt;
Il [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 Logical Volume Manager] (LVM o gestore logico dei volumi) è un software per la gestione dei dischi che permette di superare le limitazioni legate al normale partizionamento di questi ultimi. Si tratta di una specie di ''strato'' che si va a frapporre tra il dispositivo fisico ed il filesystem. Permette di gestire dinamicamente aggiunta, rimozione o ridimensionamento dello spazio di archiviazione, il RAID, nonché lo snapshot dei volumi.&lt;br /&gt;
&lt;br /&gt;
LVM è un prodotto oltremodo maturo, disponibile per Linux sin dal kernel 2.4, per questa ragione distribuzioni orientate al mercato aziendale come RedHat lo hanno scelto, accoppiandolo a XFS o ext4, come soluzione predefinita per implementare la maggior parte delle caratteristiche fornite dai moderni filesystem come BTRFS o ZFS &lt;br /&gt;
&lt;br /&gt;
LVM si basa sui seguenti concetti&lt;br /&gt;
&lt;br /&gt;
* '''Physical Volumes (PV)''': rappresentano qualsiasi disco si voglia inizializzare (&amp;quot;formattare&amp;quot;) come sottosistema LVM&lt;br /&gt;
 # pvcreate /dev/sda1&lt;br /&gt;
 # pvcreate /dev/sdb3&lt;br /&gt;
 # pvcreate /dev/sdc&lt;br /&gt;
 # pvdisplay&lt;br /&gt;
&lt;br /&gt;
* '''Volume Groups (VG)''': sono costituiti da ''physical volumes'' e rappresentano la capacità totale delle risorse di un LVM&lt;br /&gt;
 # vgcreate vg0 /dev/sda1 /dev/sdb3 /dev/sdc&lt;br /&gt;
 # vgdisplay vg0&lt;br /&gt;
&lt;br /&gt;
* '''Logical Volumes (LV)''': utilizzano le risorse messe a disposizione dai ''volume groups''. Possono essere inizializzati anche con proprietà di RAID o cache.&lt;br /&gt;
 # lvcreate -L 10G -n ''home'' vg0&lt;br /&gt;
 # lvdisplay /dev/vg0/home&lt;br /&gt;
&lt;br /&gt;
Oppure nel caso volessimo fare un raid5&lt;br /&gt;
 # lvcreate -n lvr5 –type raid5 -L 10G -i 3 vg0&lt;br /&gt;
 &lt;br /&gt;
 -n ''nome del volume''&lt;br /&gt;
 –type raid5 ''tipo di raid''&lt;br /&gt;
 -L ''dimensione massima della grandezza del raid''&lt;br /&gt;
 -i ''numero dei physical volumes che si vogliono utilizzare''&lt;br /&gt;
&lt;br /&gt;
Per formattare il volume logico appena creato&lt;br /&gt;
 # mkfs -t ext4 /dev/vg0/lvr5&lt;br /&gt;
&lt;br /&gt;
Per aggiungere un disco ad un Volume Groups&lt;br /&gt;
 # vgextend vg0 /dev/sdb2&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Snapshot ==&lt;br /&gt;
Creare uno snapshot della del volume logico ''/home'' che potrà contenere fino ad un massimo di 5 GiB di dati modificati rispetto all'originale&lt;br /&gt;
 # lvcreate --size 5G --snapshot --name homesnap20230306 /dev/vg0/home&lt;br /&gt;
&lt;br /&gt;
Ripristinare il volume logico ricaricando lo snapshot&lt;br /&gt;
 # lvconvert --merge /dev/vg0/homesnap20230306&lt;br /&gt;
&lt;br /&gt;
Nel caso il logical volume sia attivo il merging avverrà col prossimo riavvio e lo snapshot sparirà.&lt;br /&gt;
&lt;br /&gt;
== Cache ==&lt;br /&gt;
Utilizzare un moderno disco a stato solido può essere una soluzione economica per velocizzare un LV.&lt;br /&gt;
&lt;br /&gt;
Convertire il disco a PV ed aggiungerlo al preesistente VG&lt;br /&gt;
 # pvcreate ''/dev/discoSSD''&lt;br /&gt;
 # vgextend vg0 ''/dev/discoSSD''&lt;br /&gt;
&lt;br /&gt;
Aggiungere la cache al LV&lt;br /&gt;
 # lvcreate --type cache --cachemode writethrough -l 100%FREE -n root_cachepool vg0/home ''/dev/discoSSD''&lt;br /&gt;
&lt;br /&gt;
Rimuovere la cache dal LV&lt;br /&gt;
 # lvconvert --uncache vg0/home&lt;br /&gt;
&lt;br /&gt;
= GRUB (Boot loader) =&lt;br /&gt;
È 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.&lt;br /&gt;
&lt;br /&gt;
== Sistema con BIOS ==&lt;br /&gt;
 # pacman -S grub&lt;br /&gt;
 # grub-mkconfig -o /boot/grub/grub.cfg&lt;br /&gt;
 # grub-install /dev/sda&lt;br /&gt;
&lt;br /&gt;
== Sistema UEFI ==&lt;br /&gt;
'''NB: per installare correttamente GRUB su un sistema UEFI occorre che il device di installazione abbia effettuato il boot in modalità UEFI e non Legacy (BIOS)'''&lt;br /&gt;
&lt;br /&gt;
 # pacman -S grub&lt;br /&gt;
 # mkdir /boot/EFI&lt;br /&gt;
 # mount /dev/sda1 /boot/EFI&lt;br /&gt;
 # grub-install /dev/sda&lt;br /&gt;
 # grub-mkconfig -o /boot/grub/grub.cfg&lt;br /&gt;
&lt;br /&gt;
== Gestione snapshot BTRFS ==&lt;br /&gt;
&lt;br /&gt;
=== Manuale ===&lt;br /&gt;
Editare ''/etc/grub.d/40_custom'' (o crearlo) e aggiungere quanto segue per permettere l'avvio della snapshot ''rootsnap''&lt;br /&gt;
&lt;br /&gt;
 menuentry 'Linux snapshot' {&lt;br /&gt;
        insmod gzio&lt;br /&gt;
        insmod part_gpt&lt;br /&gt;
        insmod btrfs&lt;br /&gt;
        set root='hd1,gpt3'&lt;br /&gt;
        linux   /rootsnap/boot/vmlinuz-linux root=/dev/partizione rw rootflags=subvol=rootsnap  quiet&lt;br /&gt;
        initrd  /rootsnap/boot/initramfs-linux.img&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
dopodichè aggiornare la configurazione di GRUB con&lt;br /&gt;
 # grub-mkconfig -o /boot/grub/grub.cfg&lt;br /&gt;
&lt;br /&gt;
=== Automatico ===&lt;br /&gt;
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.&lt;br /&gt;
 # pacman -S grub-btrfs&lt;br /&gt;
&lt;br /&gt;
Ogni volta che si vorrà aggiornare grub con nuovi subvolumi basterà dare il seguente comando&lt;br /&gt;
&lt;br /&gt;
 # grub-mkconfig -o /boot/grub/grub.cfg&lt;br /&gt;
&lt;br /&gt;
== Ripristinare GRUB ==&lt;br /&gt;
Aggiornando la propria distribuzione Linux, il proprio boot loader o installando un altro sistema operativo (es. Windows) può capitare di sovrascrivere il [http://it.wikipedia.org/wiki/Master_boot_record MBR].&lt;br /&gt;
&lt;br /&gt;
Avviare il computer con un liveCD/DVD o USB: &lt;br /&gt;
* [http://archlinux.mirror.garr.it/archlinux/iso/latest/archlinux-x86_64.iso Archlinux]&lt;br /&gt;
* [http://www.sysresccd.org/Download Systemrescuecd]&lt;br /&gt;
* [http://grml.org/download/ grml]&lt;br /&gt;
* [http://na.mirror.garr.it/mirrors/ubuntu-releases/ Ubuntu]&lt;br /&gt;
&lt;br /&gt;
Ipotizziamo di avere una partizione / chiamata /dev/sda2 e nessuna /boot&lt;br /&gt;
&lt;br /&gt;
Creiamo i seguenti mount point&lt;br /&gt;
 # sudo su&lt;br /&gt;
 # cd /mnt&lt;br /&gt;
 # mkdir sda2&lt;br /&gt;
 # mount /dev/sda2 /mnt/sda2&lt;br /&gt;
&lt;br /&gt;
Se utilizziamo una scheda madre UEFI andrà montata anche la partizione efi (solitamente è la prima partizione del disco ''sda1'')&lt;br /&gt;
 # mount /dev/sda2 /mnt/sda2/boot/efi&lt;br /&gt;
&lt;br /&gt;
Se necessario editiamo il file di configurazione di grub&lt;br /&gt;
  # nano /mnt/sda2/boot/grub/grub.cfg&lt;br /&gt;
&lt;br /&gt;
=== arch-chroot ===&lt;br /&gt;
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&lt;br /&gt;
&lt;br /&gt;
 # arch-chroot /mnt/sda2&lt;br /&gt;
&lt;br /&gt;
=== Manuale ===&lt;br /&gt;
 # mount --rbind /dev /mnt/sda2/dev&lt;br /&gt;
 # mount -t proc /proc /mnt/sda2/proc&lt;br /&gt;
 # mount -t sysfs /sys /mnt/sda2/sys/&lt;br /&gt;
&lt;br /&gt;
Eseguiamo il vero e proprio chroot in /dev/sda2&lt;br /&gt;
 # chroot /mnt/sda2&lt;br /&gt;
&lt;br /&gt;
=== Reinstallazione ===&lt;br /&gt;
 # grub-mkconfig -o /boot/grub/grub.cfg&lt;br /&gt;
 # grub-install /dev/sda&lt;br /&gt;
&lt;br /&gt;
=== Riavvio del sistema ===&lt;br /&gt;
Usciamo dal chroot, smontiamo la partizione e riavviamo il sistema&lt;br /&gt;
 # exit&lt;br /&gt;
 # umount /mnt/sda1/proc&lt;br /&gt;
 # umount /mnt/sda1/dev&lt;br /&gt;
 # umount /mnt/sda1&lt;br /&gt;
 # systemctl reboot&lt;br /&gt;
&lt;br /&gt;
== Eliminare il boot loader ==&lt;br /&gt;
In caso di errori nell'installazione di GRUB è possibile cancellare il vecchio boot loader di un disco (&amp;lt;code&amp;gt;''devicename'' = sda,sdb,sdc...&amp;lt;/code&amp;gt;)&lt;br /&gt;
 # dd if=/dev/zero of=''/dev/devicename'' bs=446 count=1&lt;br /&gt;
&lt;br /&gt;
== ISOBoot ==&lt;br /&gt;
Con GRUB2 è possibile effettuare il boot di iso di LiveCD/USB Linux presenti sul disco aggiungendole su &amp;lt;code&amp;gt;/etc/grub.d/40_custom &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Ubuntu 23.04&lt;br /&gt;
 menuentry &amp;quot;Ubuntu 23.04 desktop ISO&amp;quot; {&lt;br /&gt;
        insmod part_gpt&lt;br /&gt;
        insmod ext2&lt;br /&gt;
        insmod btrfs&lt;br /&gt;
        rmmod tpm&lt;br /&gt;
     # es.: terza partizione del primo disco&lt;br /&gt;
        set root=(hd0,gpt3)&lt;br /&gt;
        set isofile=&amp;quot;/home/'''&amp;lt;username&amp;gt;'''/Downloads/ubuntu-23.04-desktop-amd64.iso&amp;quot;&lt;br /&gt;
        loopback loop $isofile&lt;br /&gt;
        linux (loop)/casper/vmlinuz boot=casper iso-scan/filename=$isofile quiet splash&lt;br /&gt;
        initrd (loop)/casper/initrd&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
= Networking =&lt;br /&gt;
&lt;br /&gt;
== Manuale ==&lt;br /&gt;
===net-tools===&lt;br /&gt;
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 [https://lists.debian.org/debian-devel/2009/03/msg00780.html obsoleta]. Tra i suoi comandi principali: arp, hostname, ifconfig, iptunnel netstat e route.&lt;br /&gt;
&lt;br /&gt;
Attivare l'interfaccia di rete eth0 ed assegnarle l'indirizzo ip 192.168.0.2&lt;br /&gt;
 # ifconfig eth0 192.168.0.2 up&lt;br /&gt;
&lt;br /&gt;
Disattivare l'interfaccia di rete eth0&lt;br /&gt;
 # ifconfig eth0 down&lt;br /&gt;
&lt;br /&gt;
Assegnare manualmente un gateway (es.: 192.168.0.1) alla rete&lt;br /&gt;
 # route add default gw 192.168.0.1&lt;br /&gt;
&lt;br /&gt;
Ovviamente occorrerà aggiungere un server DNS al file &amp;lt;code&amp;gt;/etc/resolv.conf&amp;lt;/code&amp;gt; per la risoluzione degli indirizzi.&lt;br /&gt;
&lt;br /&gt;
=== iproute2 ===&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|+ Conversione comandi da net-tools a iproute2&lt;br /&gt;
|-&lt;br /&gt;
! net-tools&lt;br /&gt;
! iproute2&lt;br /&gt;
! Note&lt;br /&gt;
|-&lt;br /&gt;
| ifconfig&lt;br /&gt;
| ip addr, ip link&lt;br /&gt;
| Address and link configuration&lt;br /&gt;
|-&lt;br /&gt;
| route&lt;br /&gt;
| ip route&lt;br /&gt;
| Routing tables&lt;br /&gt;
|-&lt;br /&gt;
| arp&lt;br /&gt;
| ip neigh&lt;br /&gt;
| Neighbors&lt;br /&gt;
|-&lt;br /&gt;
| iptunnel&lt;br /&gt;
| ip tunnel&lt;br /&gt;
| Tunnels&lt;br /&gt;
|-&lt;br /&gt;
| nameif, ifrename&lt;br /&gt;
| ip link set name&lt;br /&gt;
| Rename network interfaces&lt;br /&gt;
|-&lt;br /&gt;
| ipmaddr&lt;br /&gt;
| ip maddr&lt;br /&gt;
| Multicast&lt;br /&gt;
|-&lt;br /&gt;
| netstat&lt;br /&gt;
| ss, ip route&lt;br /&gt;
| Show various networking statistics&lt;br /&gt;
|-&lt;br /&gt;
| brctl&lt;br /&gt;
| bridge&lt;br /&gt;
| Handle bridge addresses and devices&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Elencare gli indirizzi IP: &lt;br /&gt;
 # ip addr&lt;br /&gt;
&lt;br /&gt;
Mostra le informazioni di una specifica interfaccia di rete&lt;br /&gt;
 # ip addr show ''eth0''&lt;br /&gt;
&lt;br /&gt;
Aggiungere un indirizzo all'interfaccia eth0:&lt;br /&gt;
 # ip addr add 192.0.2.10/24 dev eth0&lt;br /&gt;
&lt;br /&gt;
Cancellare un indirizzo associato all'interfaccia eth0:&lt;br /&gt;
 # ip addr delete 192.0.2.10/24 dev eth0&lt;br /&gt;
&lt;br /&gt;
Attivare l'interfaccia eth0:&lt;br /&gt;
 # ip link set dev eth0 up&lt;br /&gt;
&lt;br /&gt;
Disattivare l'interfaccia eth0:&lt;br /&gt;
 # ip link set dev eth0 down&lt;br /&gt;
&lt;br /&gt;
Svuotare la cache arp per tutte le interfacce:&lt;br /&gt;
 # ip neigh flush all&lt;br /&gt;
&lt;br /&gt;
Aggiungere una rotta che passa per gateway 192.0.2.1&lt;br /&gt;
 # ip route add default via 192.0.2.1&lt;br /&gt;
&lt;br /&gt;
Aggiungere una rotta che passa per gateway 192.168.2.1 per l'interfaccia 10.0.2.0&lt;br /&gt;
 # ip route add 10.0.2.1/24 via 192.168.0.1 dev enp0s3&lt;br /&gt;
&lt;br /&gt;
Rimuovere la rotta che passa per gateway 192.168.2.1 per l'interfaccia 10.0.2.0&lt;br /&gt;
 # ip route del 10.0.2.0/24 via 192.168.0.1 dev enp0s3 &lt;br /&gt;
&lt;br /&gt;
Mostrare la tabella di routing&lt;br /&gt;
 # ip route show&lt;br /&gt;
&lt;br /&gt;
== Systemd-networkd==&lt;br /&gt;
'''[https://wiki.archlinux.org/title/Systemd-networkd systemd-networkd'''] è un demone, parte di systemd, che gestisce la configurazione della rete.&lt;br /&gt;
&lt;br /&gt;
=== Esempi di configurazione ===&lt;br /&gt;
Per prima cosa sarà necessario abilitare il servizio&lt;br /&gt;
 # systemctl enable --now systemd-networkd.service&lt;br /&gt;
 # systemctl enable --now systemd-resolved.service&lt;br /&gt;
 # ln -rsf /run/systemd/resolve/stub-resolv.conf /etc/resolv.conf&lt;br /&gt;
&lt;br /&gt;
==== DHCP ====&lt;br /&gt;
/etc/systemd/network/20-wired.network&lt;br /&gt;
 [Match]&lt;br /&gt;
 Name=enp1s0&lt;br /&gt;
 [Network]&lt;br /&gt;
 DHCP=yes&lt;br /&gt;
&lt;br /&gt;
==== IP statico ====&lt;br /&gt;
/etc/systemd/network/20-wired.network&lt;br /&gt;
 [Match]&lt;br /&gt;
 Name=enp1s0&lt;br /&gt;
 [Network]&lt;br /&gt;
 Address=10.1.10.9/24&lt;br /&gt;
 Gateway=10.1.10.1&lt;br /&gt;
 DNS=10.1.10.1&lt;br /&gt;
&lt;br /&gt;
==== Wireless adapter ====&lt;br /&gt;
Per potersi connettere a connessioni WIFI è necessario installare e configurare un'ulteriore applicazione dedicata come '''iwd''' o '''wpa_supplicant''' per l'autenticazione alla rete.&lt;br /&gt;
&lt;br /&gt;
/etc/systemd/network/25-wireless.network&lt;br /&gt;
 [Match]&lt;br /&gt;
 Name=wlp2s0&lt;br /&gt;
 [Network]&lt;br /&gt;
 DHCP=yes&lt;br /&gt;
 IgnoreCarrierLoss=3s&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Rinominare l'interfaccia di rete ====&lt;br /&gt;
Invece che impostare una regola su udev è possibile usare un file di testo .link nel seguente modo&lt;br /&gt;
&lt;br /&gt;
/etc/systemd/network/''10-ethusb0.link''&lt;br /&gt;
 [Match]&lt;br /&gt;
 MACAddress=12:34:56:78:90:ab&lt;br /&gt;
 [Link]&lt;br /&gt;
 Description=USB to Ethernet Adapter&lt;br /&gt;
 Name=''ethusb0''&lt;br /&gt;
&lt;br /&gt;
== Wifi ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! [https://wiki.archlinux.org/title/Network_configuration/Wireless#Utilities Programmi] !! [https://wireless.wiki.kernel.org/en/developers/documentation/wireless-extensions WEXT] !! [https://wireless.wiki.kernel.org/en/developers/documentation/nl80211 nl80211] !! WEP !! WPA&lt;br /&gt;
|-&lt;br /&gt;
| [https://hewlettpackard.github.io/wireless-tools/Tools.html wireless_tools] || Sì || No || Sì || No&lt;br /&gt;
|-&lt;br /&gt;
| [https://wireless.wiki.kernel.org/en/users/documentation/iw iw] || No || Sì || Sì || No&lt;br /&gt;
|-&lt;br /&gt;
| [https://wiki.archlinux.org/title/wpa_supplicant wpa_supplicant] || Sì || Sì || No || Sì&lt;br /&gt;
|-&lt;br /&gt;
| [https://wiki.archlinux.org/title/Iwd iwd]/iwgtk || No || Sì || No || Sì&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== NetworkManager ==&lt;br /&gt;
[https://networkmanager.dev/ NetworkManager] è l'utility che si è imposta come standard per la configurazione della reti Linux (LAN e Wifi)&lt;br /&gt;
&lt;br /&gt;
Si compone di un demone, un'interfaccia da riga di comando [https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/9/html/configuring_basic_system_settings/assembly_configuring-and-managing-network-access_configuring-basic-system-settings#configuring-a-static-ethernet-connection-using-nmcli_assembly_configuring-and-managing-network-access (nmcli)] ed un'interfaccia di configurazione basata su un menu testuale ([https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/9/html/configuring_basic_system_settings/assembly_configuring-and-managing-network-access_configuring-basic-system-settings nmtui]). &lt;br /&gt;
&lt;br /&gt;
I principali desktop enviroment come GNOME e KDE Plasma possiedono una utility grafica che consente loro di configurare graficamente le reti basandosi su NetworkManager.&lt;br /&gt;
&lt;br /&gt;
=== Installazione ===&lt;br /&gt;
 # pacman -S networkmanager &lt;br /&gt;
 # systemctl enable NetworkManager&lt;br /&gt;
 # systemctl start NetworkManager&lt;br /&gt;
&lt;br /&gt;
==== Configurazione  ====&lt;br /&gt;
* 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 &amp;lt;code&amp;gt;nmtui&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Per chi dovesse prediligere la configurazione manuale: &amp;lt;code&amp;gt;nmcli&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Per impedire a Network Manager di gestire una certa interfaccia di rete è sufficiente aggiungere il suo MAC Address al file di configurazione &amp;lt;code&amp;gt;/etc/NetworkManager/NetworkManager.conf&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 [main]&lt;br /&gt;
 plugins=keyfile&lt;br /&gt;
 [keyfile]&lt;br /&gt;
 unmanaged-devices=mac:''00:25:21:73:90:72''&lt;br /&gt;
&lt;br /&gt;
=== Alternative ===&lt;br /&gt;
* [https://wiki.archlinux.org/title/ConnMan ConnMan]&lt;br /&gt;
&lt;br /&gt;
== Condividere la connessione ==&lt;br /&gt;
&lt;br /&gt;
=== Abilitazione del forwarding dei pacchetti ===&lt;br /&gt;
&lt;br /&gt;
 $ sudo echo 1 &amp;gt; /proc/sys/net/ipv4/ip_forward&lt;br /&gt;
&lt;br /&gt;
Per rendere il forwarding definitivo editare il file ''/etc/sysctl.conf'' modificando come segue il parametro net.ipv4.ip_forward:&lt;br /&gt;
&lt;br /&gt;
 net.ipv4.ip_forward = 1&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Mascheramento dei pacchetti ===&lt;br /&gt;
&lt;br /&gt;
 $ sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE&lt;br /&gt;
&lt;br /&gt;
''eth0'' non è un parametro fisso, identifica l'interfaccia con la quale il PC si connette ad Internet&lt;br /&gt;
&lt;br /&gt;
Per applicare automaticamente tale regola ad ogni riavvio&lt;br /&gt;
 # iptables-save &amp;gt; /etc/iptables.ipv4.nat&lt;br /&gt;
 # iptables-restore &amp;lt; /etc/iptables.ipv4.nat&lt;br /&gt;
&lt;br /&gt;
=== Moduli kernel ===&lt;br /&gt;
&lt;br /&gt;
Assicurarsi che siano caricati i seguenti moduli:&lt;br /&gt;
 # modprobe ip_tables&lt;br /&gt;
 # modprobe ip_conntrack&lt;br /&gt;
 # modprobe iptable_nat&lt;br /&gt;
 # modprobe ipt_MASQUERADE&lt;br /&gt;
&lt;br /&gt;
=== Condivisione tramite rete ethernet ===&lt;br /&gt;
&lt;br /&gt;
==== Configurazione scheda di rete interna ====&lt;br /&gt;
&lt;br /&gt;
Assegnare un IP statico alla scheda ethernet con la quale si vuol condividere la connessione.&lt;br /&gt;
&lt;br /&gt;
 # ifconfig eth1 192.168.5.1 netmask 255.255.255.0 up&lt;br /&gt;
&lt;br /&gt;
Per rendere tale configurazione permanente sarà necessario editare il file ''/etc/network/interfaces'' ed aggiungere la seguente configurazione&lt;br /&gt;
&lt;br /&gt;
 auto eth1&lt;br /&gt;
 iface eth1 inet static&lt;br /&gt;
 address 192.168.5.1&lt;br /&gt;
 netmask 255.255.255.0&lt;br /&gt;
&lt;br /&gt;
=== Condivisione tramite rete WI-FI ===&lt;br /&gt;
&lt;br /&gt;
==== Configurazione scheda wireless ====&lt;br /&gt;
&lt;br /&gt;
Se non si desidera cifrare la rete e proteggerla con una password sarà sufficiente eseguire questi comandi.&lt;br /&gt;
&lt;br /&gt;
 # iwconfig wlan0 mode Master&lt;br /&gt;
 # iwconfig wlan0 ESSID ReteGOLEM&lt;br /&gt;
 # iwconfig wlan0 enc off&lt;br /&gt;
 # ifconfig wlan0 192.168.5.1 netmask 255.255.255.0 up&lt;br /&gt;
&lt;br /&gt;
Per rendere tale configurazione permanente sarà necessario creare un file del tipo ''/etc/systemd/network/20-wifi.network'' ed aggiungere la seguente configurazione&lt;br /&gt;
 [Match]&lt;br /&gt;
 Name=wlan0&lt;br /&gt;
 [Network]&lt;br /&gt;
 Address=192.168.5.1/24&lt;br /&gt;
&lt;br /&gt;
Naturalmente occorrerà che sia attivato il demone systemd-networkd&lt;br /&gt;
 # systemctl enable --now systemd-networkd.service&lt;br /&gt;
&lt;br /&gt;
===== Proteggere la connessione WI-FI =====&lt;br /&gt;
&lt;br /&gt;
Installare il programma hostapd&lt;br /&gt;
 # pacman -S hostapd&lt;br /&gt;
&lt;br /&gt;
Configurare hostapd modificando ''/etc/hostapd/hostapd.conf''&lt;br /&gt;
&lt;br /&gt;
 # Interfaccia di rete&lt;br /&gt;
 interface=wlan0&lt;br /&gt;
 # Driver della scheda wifi usata (non tutte le schede sono supportate)&lt;br /&gt;
 driver=nl80211&lt;br /&gt;
 # Nome della rete (SSID)&lt;br /&gt;
 ssid=ReteGOLEM&lt;br /&gt;
 hw_mode=g&lt;br /&gt;
 # Canale di trasmissione&lt;br /&gt;
 channel=6&lt;br /&gt;
 macaddr_acl=0&lt;br /&gt;
 # Righe per la protezione&lt;br /&gt;
 auth_algs=1&lt;br /&gt;
 ignore_broadcast_ssid=0&lt;br /&gt;
 wpa=2&lt;br /&gt;
 # Password del wifi&lt;br /&gt;
 wpa_passphrase=password&lt;br /&gt;
 wpa_key_mgmt=WPA-PSK&lt;br /&gt;
 wpa_pairwise=TKIP&lt;br /&gt;
 rsn_pairwise=CCMP&lt;br /&gt;
&lt;br /&gt;
Editare il file ''/etc/default/hostapd'' per impostare ''hostapd.conf'' come file di configurazione predefinito, modificando la riga DAEMON_CONF=&amp;quot;&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
 DAEMON_CONF=&amp;quot;/etc/hostapd/hostapd.conf&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== Assegnazione automatica degli IP ai client ===&lt;br /&gt;
&lt;br /&gt;
 # pacman -S dhcp&lt;br /&gt;
&lt;br /&gt;
Editare ''/etc/dhcpd.conf'' aggiungendo la configurazione per la rete interna (es.: eth1 o wlan0):&lt;br /&gt;
&lt;br /&gt;
 subnet 192.168.5.0 netmask 255.255.255.0 {&lt;br /&gt;
 range 192.168.5.100  192.168.5.200;&lt;br /&gt;
 option domain-name-servers 8.8.8.8;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== VPN ==&lt;br /&gt;
=== WireGuard ===&lt;br /&gt;
&lt;br /&gt;
https://www.wireguard.com/quickstart/&lt;br /&gt;
&lt;br /&gt;
= Container =&lt;br /&gt;
== Toolbox==&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
=== Immagini ===&lt;br /&gt;
* [https://github.com/toolbx-images/images https://github.com/toolbx-images/images] Immagini di container delle principali distribuzioni&lt;br /&gt;
&lt;br /&gt;
=== Comandi ===&lt;br /&gt;
Creare un container&lt;br /&gt;
 $ toolbox create -i quay.io/toolbx-images/rhel-toolbox:9.1 -c redhat&lt;br /&gt;
&lt;br /&gt;
Entrare in un container&lt;br /&gt;
 $ toolbox enter redhat&lt;br /&gt;
 &lt;br /&gt;
Fermare un container&lt;br /&gt;
 $ podman stop nome_macchina&lt;br /&gt;
&lt;br /&gt;
Rimuovere un container&lt;br /&gt;
 $ toolbox rm -f redhat&lt;br /&gt;
&lt;br /&gt;
Rimuovere un container e la sua immagine&lt;br /&gt;
 $ toolbox rmi redhat &lt;br /&gt;
&lt;br /&gt;
Esaminare la lista dei container e delle immagini disponibili&lt;br /&gt;
 $ toolbox list &lt;br /&gt;
&lt;br /&gt;
Permettere agli utenti non root di utilizzare i container&lt;br /&gt;
 $ sudo sh -c 'echo &amp;quot;username:100000:65536&amp;quot; &amp;gt;&amp;gt; /etc/subuid'&lt;br /&gt;
 $ sudo sh -c 'echo &amp;quot;username:100000:65536&amp;quot; &amp;gt;&amp;gt; /etc/subgid'&lt;br /&gt;
&lt;br /&gt;
Abilitare l'host al forwarding di X11 per le applicazioni che richiedono Xorg&lt;br /&gt;
 # xhost +&lt;br /&gt;
&lt;br /&gt;
Eseguire un comandi all'interno di un container&lt;br /&gt;
 $ toolbox run -c redhat libreoffice&lt;br /&gt;
&lt;br /&gt;
== LXC ==&lt;br /&gt;
[https://wiki.archlinux.org/title/Linux_Containers Linux Container] (LXC) permette di virtualizzare uno o più container Linux su un singolo host LXC, gestendone virtualmente RAM, CPU, socket e rete.&lt;br /&gt;
&lt;br /&gt;
È estremamente utile quando si ha bisogno di isolare dei servizi dal sistema host: es.: server web, imap, smtp...&lt;br /&gt;
&lt;br /&gt;
=== Installazione ===&lt;br /&gt;
Installare LXC&lt;br /&gt;
 # pacman -S lxc lxc-templates lxcfs lxd&lt;br /&gt;
&lt;br /&gt;
=== Comandi ===&lt;br /&gt;
Lista dei container installati&lt;br /&gt;
 lxc-ls -f &lt;br /&gt;
&lt;br /&gt;
Installare un container scegliendo l'immagine dalla lista di quelli disponibili&lt;br /&gt;
 lxc-create -n playtime -t download&lt;br /&gt;
&lt;br /&gt;
Se sapete già di quale container avete bisogno sarà possibile scaricarlo direttamente&lt;br /&gt;
 lxc-create -n playtime -t download -- --dist archlinux --release current --arch amd64&lt;br /&gt;
&lt;br /&gt;
Far partire il container chiamato ''debian''&lt;br /&gt;
 lxc-start debian &lt;br /&gt;
&lt;br /&gt;
Entrare dentro il container chiamato ''debian''&lt;br /&gt;
 lxc-attach debian&lt;br /&gt;
&lt;br /&gt;
Fermare l'esecuzione del container chiamato ''debian''&lt;br /&gt;
 lxc-stop debian&lt;br /&gt;
&lt;br /&gt;
Rimuovere il container chiamato ''debian''&lt;br /&gt;
 lxc-destroy debian &lt;br /&gt;
&lt;br /&gt;
Eseguire un comando dentro il container chiamato ''debian''&lt;br /&gt;
 lxc-attach --name debian nano&lt;br /&gt;
&lt;br /&gt;
=== Rete Bridge ===&lt;br /&gt;
Nel caso si debbano usare servizi da tenere esposti su Internet potrebbe essere conveniente utilizzare una rete bridge piuttosto che NAT.&lt;br /&gt;
&lt;br /&gt;
[https://wiki.debian.org/LXC/SimpleBridge Configurazione] rete bridge.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Docker ==&lt;br /&gt;
Abilitare ed avviare docker&lt;br /&gt;
 # systemctl enable --now docker&lt;br /&gt;
&lt;br /&gt;
Cercare il container desiderato&lt;br /&gt;
 # docker search &amp;quot;xxx&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Scaricare l'immagine desiderata&lt;br /&gt;
 # docker pull xxxx:latest&lt;br /&gt;
&lt;br /&gt;
Visualizzare le immagini scaricate&lt;br /&gt;
 # docker images&lt;br /&gt;
&lt;br /&gt;
Visualizzare i docker creati&lt;br /&gt;
 # docker ps -a&lt;br /&gt;
&lt;br /&gt;
Avviare docker&lt;br /&gt;
 # docker start nome_docker&lt;br /&gt;
&lt;br /&gt;
Entrare nel docker&lt;br /&gt;
 # docker attach nome_docker&lt;br /&gt;
&lt;br /&gt;
Copiare un file dal sistema host al docker&lt;br /&gt;
 # docker cp esempio.txt nome_docker: /esempio.txt&lt;br /&gt;
&lt;br /&gt;
Copiare un file dal docker.&lt;br /&gt;
 # docker cp container-id:/path/filename.txt ~/Desktop/filename.txt&lt;br /&gt;
&lt;br /&gt;
Rimuovere un docker&lt;br /&gt;
 # docker rm nome_docker&lt;br /&gt;
&lt;br /&gt;
Rimuovere tutti i docker&lt;br /&gt;
 # docker container stop $(docker container ls -aq)&lt;br /&gt;
 # docker system prune -a --volumes&lt;br /&gt;
&lt;br /&gt;
Avviare automaticamente un docker (da testare)&lt;br /&gt;
 # docker run --restart=always --name nome_docker&lt;br /&gt;
&lt;br /&gt;
Creare script di avvio ''docker-webserver''.service&lt;br /&gt;
 [Unit]&lt;br /&gt;
 Description=Some service&lt;br /&gt;
 Requires=docker.service&lt;br /&gt;
 After=docker.service&lt;br /&gt;
 [Service]&lt;br /&gt;
 Restart=always&lt;br /&gt;
 ExecStart=/usr/bin/docker start -a container_name&lt;br /&gt;
 ExecStop=/usr/bin/docker stop -t 2 container_name&lt;br /&gt;
 [Install]&lt;br /&gt;
 WantedBy=multi-user.target&lt;br /&gt;
&lt;br /&gt;
* [https://wiki.archlinux.org/title/docker Arch Linux Docker WIKI]&lt;br /&gt;
&lt;br /&gt;
== [https://wiki.archlinux.org/title/systemd-nspawn systemd-nspawn] ==&lt;br /&gt;
&lt;br /&gt;
= Fonti software alternative =&lt;br /&gt;
Nella rara eventualità che si necessiti di un programma non presente né nei repository ufficiali, né su [https://aur.archlinux.org/ AUR] è possibile optare per una delle seguenti opzioni.&lt;br /&gt;
&lt;br /&gt;
== AppImage ==&lt;br /&gt;
Scaricate qualsiasi pacchetto disponibile su [https://appimage.github.io/ appimage.github.io] e rendetelo eseguibile.&lt;br /&gt;
&lt;br /&gt;
 $ chmod a+x ''nomeprogramma''.AppImage&lt;br /&gt;
&lt;br /&gt;
Non resta che eseguirlo col seguente comando o con un doppio click&lt;br /&gt;
 $ ./''nomeprogramma''.AppImage&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Flatpak ==&lt;br /&gt;
Concepito per essere una sorta di '''Google Play Store''' per GNOME, è possibile installare programmi provenienti da [https://flathub.org/home flatpak] utilizzando i normali gestori grafici di pacchetti basati su packagekit come ''Gnome Software'' o ''Discover di Plasma''.&lt;br /&gt;
&lt;br /&gt;
Installazione&lt;br /&gt;
 # pacman -S flatpak&lt;br /&gt;
&lt;br /&gt;
Abilitazione del repository ufficiale del progetto (software di terze parti potrebbe richiedere di aggiungere altri repository)&lt;br /&gt;
 # flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo&lt;br /&gt;
&lt;br /&gt;
Elenca i repository disponibili.&lt;br /&gt;
 $ flatpak remotes&lt;br /&gt;
&lt;br /&gt;
Installa un'applicazione (es.: libreoffice)&lt;br /&gt;
 $ flatpak install flathub org.libreoffice.LibreOffice&lt;br /&gt;
&lt;br /&gt;
Esegue un'applicazione (es.: libreoffice)&lt;br /&gt;
 $ flatpak run org.libreoffice.LibreOffice&lt;br /&gt;
&lt;br /&gt;
Disinstalla un'applicazione mantenendo i dati.&lt;br /&gt;
 $ flatpak uninstall &amp;lt;nome app&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Disinstalla un'applicazione eliminando i dati (nella home utente .var/app/).&lt;br /&gt;
 $ flatpak uninstall &amp;lt;nome app&amp;gt; --delete-data&lt;br /&gt;
&lt;br /&gt;
Elimina i dati di tutte le applicazioni disinstallate (nella home utente .var/app/).&lt;br /&gt;
 $ flatpak uninstall --delete-data&lt;br /&gt;
&lt;br /&gt;
Disinstalla tutte le applicazioni flatpak installate sul sistema.&lt;br /&gt;
 $ flatpak uninstall --all&lt;br /&gt;
	&lt;br /&gt;
Cerca ed esegue aggiornamenti per le applicazioni installate.&lt;br /&gt;
 $ flatpak update&lt;br /&gt;
&lt;br /&gt;
Aggiorna una singola applicazione.&lt;br /&gt;
 $ flatpak update &amp;lt;nome app&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Elenca tutte le applicazioni flatpak installate sul sistema.&lt;br /&gt;
 $ flatpak list --app&lt;br /&gt;
	&lt;br /&gt;
Elenca i runtime installati.&lt;br /&gt;
 $ flatpak list --runtime&lt;br /&gt;
	&lt;br /&gt;
Visualizzare le informazioni sulle applicazioni in esecuzione.&lt;br /&gt;
 $ flatpak ps&lt;br /&gt;
	&lt;br /&gt;
Termina un'applicazione bloccata o danneggiata (l'ID dell'istanza si può ottenere dal comando precedente).&lt;br /&gt;
 $ flatpak kill &amp;lt;id istanza&amp;gt;&lt;br /&gt;
	&lt;br /&gt;
Tenta la riparare dei pacchetti danneggiati. Necessita dei privilegi di amministrazione. &lt;br /&gt;
 $ flatpak repair&lt;br /&gt;
&lt;br /&gt;
== Nix ==&lt;br /&gt;
[https://nixos.wiki/wiki/Nix_package_manager Nix package manager] è il gestore di pacchetti utilizzato su [https://nixos.org/ NixOS]. È possibile però utilizzarlo su qualsiasi distribuzione Linux affiancandone il gestore di pacchetti predefinito.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
[https://nixos.org/manual/nixpkgs/stable/ Guida completa]&lt;br /&gt;
&lt;br /&gt;
=== Installazione ===&lt;br /&gt;
[https://nixos.org/download.html#nix-install-linux Guida ufficiale]&lt;br /&gt;
&lt;br /&gt;
'''Single-user installation'''&lt;br /&gt;
 $ sudo install -d -m755 -o $(id -u) -g $(id -g) /nix&lt;br /&gt;
 $ sh &amp;lt;(curl -L https://nixos.org/nix/install) --no-daemon&lt;br /&gt;
&lt;br /&gt;
Aggiungere la riga seguente al &amp;lt;code&amp;gt;.bashrc&amp;lt;/code&amp;gt; o al file di configurazione della vostra shell per poter utilizzare i comandi Nix&lt;br /&gt;
 $ source $HOME/.nix-profile/etc/profile.d/nix.sh&lt;br /&gt;
&lt;br /&gt;
=== Canali ===&lt;br /&gt;
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''.&lt;br /&gt;
&lt;br /&gt;
Ecco di seguito i comandi principali per gestire questi canali&lt;br /&gt;
&lt;br /&gt;
Lista dei canali configurati&lt;br /&gt;
 $ nix-channel --list&lt;br /&gt;
&lt;br /&gt;
Aggiungere il canale principale (''nixos'')&lt;br /&gt;
 $ nix-channel --add https://nixos.org/channels/channel-name nixos&lt;br /&gt;
&lt;br /&gt;
Aggiungere altri canali&lt;br /&gt;
 $ nix-channel --add https://some.channel/url my-alias&lt;br /&gt;
&lt;br /&gt;
Rimuovere un canale&lt;br /&gt;
 $ nix-channel --remove channel-alias&lt;br /&gt;
&lt;br /&gt;
Aggiornare un canale&lt;br /&gt;
 $ nix-channel --update channel-alias&lt;br /&gt;
&lt;br /&gt;
Aggiornare tutti i canali&lt;br /&gt;
 $ nix-channel --update&lt;br /&gt;
&lt;br /&gt;
=== Comandi ===&lt;br /&gt;
Cercare un pacchetto&lt;br /&gt;
 $ nix search nixpkgs ''packagename''&lt;br /&gt;
&lt;br /&gt;
Installare un pacchetto&lt;br /&gt;
 $ nix-env -iA ''packagename''&lt;br /&gt;
&lt;br /&gt;
Vedere i pacchetti installati&lt;br /&gt;
 $ nix-env -q&lt;br /&gt;
&lt;br /&gt;
Disinstallare un pacchetto&lt;br /&gt;
 $ nix-env -e ''packagename''&lt;br /&gt;
&lt;br /&gt;
Aggiornare tutti i pacchetti&lt;br /&gt;
 $ nix-env -u&lt;br /&gt;
&lt;br /&gt;
== Snap ==&lt;br /&gt;
È 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. &lt;br /&gt;
&lt;br /&gt;
Su Arch è disponibile su AUR: [https://aur.archlinux.org/packages/snapd snapd]&lt;br /&gt;
&lt;br /&gt;
=== Installazione ===&lt;br /&gt;
Installare ed abilitare Snap&lt;br /&gt;
 $ [https://aur.archlinux.org/packages/yay yay] -S snapd&lt;br /&gt;
 $ sudo ln -s /var/lib/snapd/snap /snap&lt;br /&gt;
 $ sudo systemctl start snapd.service&lt;br /&gt;
 $ sudo systemctl enable snapd.service&lt;br /&gt;
&lt;br /&gt;
=== Comandi ===&lt;br /&gt;
Cercare un programma&lt;br /&gt;
 $ snap find ''nomeprogramma''&lt;br /&gt;
&lt;br /&gt;
Installare un programma&lt;br /&gt;
 $ sudo snap install ''nomeprogramma''&lt;br /&gt;
&lt;br /&gt;
Rimuovere un programma&lt;br /&gt;
 $ sudo snap remove ''nomeprogramma''&lt;br /&gt;
&lt;br /&gt;
Vedere i programmi installati &lt;br /&gt;
 $ snap list&lt;br /&gt;
&lt;br /&gt;
Rimuovere una determinata versione di un programma&lt;br /&gt;
 $ sudo snap remove ''nomeprogramma'' --revision&lt;br /&gt;
&lt;br /&gt;
Aggiornare manualmente i pacchetti snap&lt;br /&gt;
 $ sudo snap refresh&lt;br /&gt;
&lt;br /&gt;
= GPG =&lt;br /&gt;
[http://it.wikipedia.org/wiki/GNU_Privacy_Guard GNU Privacy Guard (GnuPG o GPG)] è un programma libero pensato per fornire un'alternativa opensource al [http://it.wikipedia.org/wiki/Pretty_Good_Privacy Pretty Good Privacy (PGP)].&lt;br /&gt;
Nel PGP sono usate sia la crittografia asimmetrica (a chiave pubblica) che quella simmetrica.&lt;br /&gt;
La chiave pubblica del destinatario serve al mittente unicamente per cifrare la chiave comune per un algoritmo di crittografia simmetrica che sarà usata per cifrare il testo in chiaro del messaggio.&lt;br /&gt;
Un destinatario decifra un messaggio protetto da GPG usando la chiave di sessione con l'algoritmo simmetrico. Tale chiave di sessione è inclusa nel messaggio in maniera criptata ed è decifrata usando la chiave privata del destinatario.&lt;br /&gt;
L'utilizzo di due cifrature oltre che a velocizzare l'esecuzione del programma (la cifratura a chiave simmetrica è molto più veloce di quella asimmetrica) permette di poter cifrare uno stesso messaggio per più destinatari.&lt;br /&gt;
&lt;br /&gt;
== Generare una chiave ==&lt;br /&gt;
 $ gpg --gen-key&lt;br /&gt;
&lt;br /&gt;
Controllare che la chiave sia stata correttamente creata&lt;br /&gt;
 $ gpg --list-keys&lt;br /&gt;
&lt;br /&gt;
== Certificato di revoca ==&lt;br /&gt;
Il certificato di revoca serve per invalidare la chiave nel caso in cui questa venga compromessa.&lt;br /&gt;
Chiunque sia in possesso del certificato di revoca può revocare la chiave corrispondente, per cui è bene tenerlo in un posto sicuro.&lt;br /&gt;
Poiché, nel momento in cui si ha bisogno del certificato di revoca, potremmo non essere più in grado di generarlo, conviene generarlo subito dopo la creazione della chiave, e prima di iniziare a utilizzarla pubblicamente.&lt;br /&gt;
 $ gpg --output certificato-di-revoca.asc --gen-revoke ''ID''&lt;br /&gt;
dove &amp;lt;code&amp;gt;ID&amp;lt;/code&amp;gt; è dato dalle ultime 8 cifre dell'impronta (fingerprint) della chiave.&lt;br /&gt;
&lt;br /&gt;
== Utilizzo pratico ==&lt;br /&gt;
=== Criptare un documento ===&lt;br /&gt;
 $ gpg -o file1.ext.gpg -e -r UserID file1.ext&lt;br /&gt;
&lt;br /&gt;
Esempio:&lt;br /&gt;
 $ gpg -o tesi.odt.gpg -e -r spookyh@gmail.com tesi.odt&lt;br /&gt;
&lt;br /&gt;
=== Decriptare un documento ===&lt;br /&gt;
 $ gpg -o file1.ext -d file1.gpg&lt;br /&gt;
&lt;br /&gt;
=== Firmare un documento ===&lt;br /&gt;
Il mittente può usare PGP per ''firmare'' un messaggio con l'algoritmo di firma RSA o Digital Signature Algorithm (DSA). Per fare ciò viene calcolato un hash (message digest) dal testo in chiaro e successivamente da questo hash è creata la [http://it.wikipedia.org/wiki/Firma_digitale firma digitale] usando la chiave privata del mittente.&lt;br /&gt;
 $ gpg -o file1.ext.sig -s file1.ext&lt;br /&gt;
&lt;br /&gt;
=== Verificare un documento ===&lt;br /&gt;
 $ gpg --verify file1.sig&lt;br /&gt;
&lt;br /&gt;
== Importare ed esportare chiavi (locali) ==&lt;br /&gt;
Importare una chiave (pubblica)&lt;br /&gt;
 $ gpg --import chiave.asc (o .txt)&lt;br /&gt;
&lt;br /&gt;
Esportare la propria chiave pubblica&lt;br /&gt;
 $ gpg -a -o chiave_pubblica.asc --export&lt;br /&gt;
&lt;br /&gt;
=== Esportare la propria chiave privata ===&lt;br /&gt;
{{Note&lt;br /&gt;
|type=attention&lt;br /&gt;
|text= La chiave privata può essere utilizzata per impersonare la vostra identità, '''NON''' inviarla mai a '''nessuno''', ed esportala solo per effettuarne backup, naturalmente da custodire in un luogo sicuro.}}&lt;br /&gt;
 $ gpg --armor --export-secret-keys &amp;lt;ID&amp;gt; &amp;gt; secret-key.gpg.asc&lt;br /&gt;
&lt;br /&gt;
== Condividere le chiavi pubbliche ==&lt;br /&gt;
Inviare la chiave ad un keyserver:&lt;br /&gt;
 $ gpg --keyserver keyserver.linux.it --send-key &amp;lt;ID&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Importare una chiave da un keyserver:&lt;br /&gt;
 $ gpg --keyserver keyserver.linux.it --recv-keys &amp;lt;ID&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se ci fidiamo del proprietario e vogliamo mostrare pubblicamente la nostra fiducia, possiamo firmare la chiave appena importata e esportare la firma su un keyserver (vedere sezioni successive).&lt;br /&gt;
&lt;br /&gt;
=== Keyserver ===&lt;br /&gt;
Quando si carica una chiave su un keyserver, poi questo la condivide con gli altri keyserver che fanno parte dello stesso circuito.&lt;br /&gt;
Non esiste un'entità centralizzata o un circuito di riferimento (per scelta di design), e, a volte, questo può generare confusione nell'utilizzatore.&lt;br /&gt;
Inoltre, alcuni keyserver potrebbero non essere sempre accessibili.&lt;br /&gt;
&lt;br /&gt;
Tra i keyserver più noti:&lt;br /&gt;
* keys.openpgp.org&lt;br /&gt;
* keyserver.ubuntu.com&lt;br /&gt;
* keys.gnupg.net&lt;br /&gt;
* pgp.surfnet.nl&lt;br /&gt;
* pgp.circl.lu&lt;br /&gt;
* pgp.mit.edu&lt;br /&gt;
&lt;br /&gt;
== Editare una chiave ==&lt;br /&gt;
Per fare operazioni e modifiche dobbiamo &amp;quot;editare&amp;quot; le chiavi, aprendo l'editor interattivo:&lt;br /&gt;
 $ gpg --edit-key &amp;lt;ID&amp;gt;&lt;br /&gt;
'''NB: Prima di uscire dall'editor, ricordarsi di salvare, altrimenti le modifiche vanno perdute'''&lt;br /&gt;
&lt;br /&gt;
* firmare&lt;br /&gt;
 &amp;gt; sign&lt;br /&gt;
* cambiare i valori di fiducia &lt;br /&gt;
 &amp;gt; trust&lt;br /&gt;
* vedere la fingerprint&lt;br /&gt;
 &amp;gt; fpr&lt;br /&gt;
* cambiare la data di scadenza&lt;br /&gt;
 &amp;gt; expire&lt;br /&gt;
* cambiare la password&lt;br /&gt;
 &amp;gt; passwd&lt;br /&gt;
* firmare localmente in modo non esportabile&lt;br /&gt;
 &amp;gt; lsign&lt;br /&gt;
* sempre '''ricordarsi di salvare'''&lt;br /&gt;
 &amp;gt; save&lt;br /&gt;
* oppure uscire&lt;br /&gt;
 &amp;gt; quit&lt;br /&gt;
&lt;br /&gt;
Digitare &amp;lt;code&amp;gt;help&amp;lt;/code&amp;gt; per una lista esaustiva.&lt;br /&gt;
&lt;br /&gt;
Tutte le modifiche da rendere pubbliche vanno inviate ad un keyserver.&lt;br /&gt;
&lt;br /&gt;
== Revocare una chiave ==&lt;br /&gt;
Avendo già il certificato di revoca:&lt;br /&gt;
 $ gpg --import certificato-di-revoca.asc&lt;br /&gt;
 $ gpg --keyserver pgp.surfnet.nl --send-key ''ID''&lt;br /&gt;
&lt;br /&gt;
== Gestione delle chiavi ==&lt;br /&gt;
Controllare il database delle chiavi: questo comando mostra tutte le chiavi che abbiamo con molte informazioni.&lt;br /&gt;
 $ gpg --list-keys --with-colons&lt;br /&gt;
&lt;br /&gt;
Fornisce tutti i valori di fiducia assegnati alle varie chiavi. (Informazioni private)&lt;br /&gt;
 $ gpg --list-ownertrust&lt;br /&gt;
&lt;br /&gt;
== Controllo firme ==&lt;br /&gt;
 $ gpg --check-sigs&lt;br /&gt;
 $ gpg --list-sigs&lt;br /&gt;
&lt;br /&gt;
== Esportare le chiavi altrui ==&lt;br /&gt;
Abbiamo importato e firmato la chiave di &amp;lt;ID&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Rimandiamola al proprietario:&lt;br /&gt;
 $ gpg --armor -export -o firma.sig &amp;lt;ID&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Questo comando crea un file di nome ''firma.sig'' nella directory corrente, che contiene la chiave firmata.&lt;br /&gt;
Spedire al proprietario ''firma.sig''.&lt;br /&gt;
&lt;br /&gt;
Chi riceve la propria chiave firmata da altri può decidere inserirla nel proprio portachiavi, con&lt;br /&gt;
 $ gpg --import firma.sig&lt;br /&gt;
&lt;br /&gt;
Si aggiungono al portachiavi le nuove firme ma anche i nuovi ID che il mittente ha sulla sua chiave, col rispettivo valore di fiducia. Firmare le chiavi degli altri implica dar loro fiducia, e, spesso, anche aver verificato la loro identità in maniera sicura.&lt;br /&gt;
Se non ci fidiamo, non firmiamo. Se si firmano a caso tutte le chiavi che capitano a tiro, si perde la reputazione che si ha presso gli altri partecipanti della rete. Se vogliamo fare un uso pubblico di questa fiducia reciproca possiamo mandare la nostra  chiave, contenente la nuova firma, al keyserver:&lt;br /&gt;
 $ gpg --keyserver pgp.circl.lu --send-key &amp;lt;ID mia chiave&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Periodicamente occorre aggiornare il proprio portachiavi digitale, così da venire a conoscenza delle modifiche sulle chiavi degli altri.&lt;br /&gt;
 $ gpg --keyserver pgp.circl.lu --refresh-keys&lt;br /&gt;
&lt;br /&gt;
== Rete di fiducia ==&lt;br /&gt;
Una chiave importata può essere firmata con un certo grado di fiducia. Possiamo rispedirla al proprietario o caricare la firma su un keyserver, e se lui la importa nel suo portachiavi, avrà la propria chiave firmata da noi. Ognuno può quindi aggiungere le firme dei conoscenti alla propria chiave, che a loro volta hanno firme di altri.&lt;br /&gt;
&lt;br /&gt;
== GUI ==&lt;br /&gt;
Esistono vari programmi a interfaccia grafica:&lt;br /&gt;
* ''Seahorse'', per gestire le chiavi e i certificati, comprese quelle ssh, per un ambiente GTK&lt;br /&gt;
* ''KGPG'', per gestire le chiavi e i certificati, comprese quelle ssh, per un ambiente QT&lt;br /&gt;
* ''Pinentry'' (anche da riga di comando) si ricorda la password della chiave per il tempo impostato (default 5 minuti)&lt;br /&gt;
&lt;br /&gt;
= Systemd =&lt;br /&gt;
 systemd-timesyncd — system time synchronization across the network;&lt;br /&gt;
 systemd/Journal — system logging&lt;br /&gt;
 systemd/Timers — alternative to cron&lt;br /&gt;
&lt;br /&gt;
= Link Utili =&lt;br /&gt;
&lt;br /&gt;
[https://wiki.archlinux.org/ ArchWiki]&lt;br /&gt;
&lt;br /&gt;
[https://wwwcdf.pd.infn.it/AppuntiLinux/a21.htm Appunti Linux]&lt;br /&gt;
&lt;br /&gt;
[https://www.linuxfromscratch.org/lfs/downloads/stable/LFS-BOOK-11.3-NOCHUNKS.html LFS-BOOK]&lt;br /&gt;
&lt;br /&gt;
[[Category: Howto]]&lt;/div&gt;</summary>
		<author><name>$pooky Hunter</name></author>
	</entry>
	<entry>
		<id>https://wiki.golem.linux.it/index.php?title=Appunti_Arch_Linux&amp;diff=9668</id>
		<title>Appunti Arch Linux</title>
		<link rel="alternate" type="text/html" href="https://wiki.golem.linux.it/index.php?title=Appunti_Arch_Linux&amp;diff=9668"/>
		<updated>2025-04-08T22:37:45Z</updated>

		<summary type="html">&lt;p&gt;$pooky Hunter: /* NetworkManager */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[https://archlinux.org/ Arch Linux] è una distribuzione Linux leggera e veloce; ma la cui installazione, configurazione e amministrazione avviene prevalentemente da terminale attraverso la modifica manuale di file di configurazione testuali.&lt;br /&gt;
&lt;br /&gt;
Fornisce, seguendo un modello di distribuzione detto &amp;quot;rolling-release&amp;quot;, l'ultima versione stabile della maggior parte del software opensource disponibile per Linux. Dato che è in costante aggiornamento non richiede periodici passaggi da una versione stabile alla successiva. Il lato negativo è che aggiornamenti di componenti importanti come quelli di: '''kernel, boot loader, driver video, librerie...''' potrebbero determinare problemi tali da rendere il sistema inutilizzabile. Accorgimenti come lo snapshot periodico del filesystem riescono, per fortuna, a contrastare l'impatto di questi inconvenienti.&lt;br /&gt;
&lt;br /&gt;
= Installazione =&lt;br /&gt;
== Guida ==&lt;br /&gt;
[https://wiki.archlinux.org/title/Installation_guide Guida ufficiale]&lt;br /&gt;
&lt;br /&gt;
== Supporti ==&lt;br /&gt;
* ISO ufficiale [http://archlinux.mirror.garr.it/archlinux/iso/latest/archlinux-x86_64.iso archlinux-x86_64.iso]&lt;br /&gt;
&lt;br /&gt;
* ISO con supporto per lo [https://openzfs.github.io/openzfs-docs/Getting%20Started/Arch%20Linux/index.html ZFS] [https://archzfs.leibelt.de/media/data/archlinux-archzfs-linux.iso archlinux-archzfs-linux.iso]&lt;br /&gt;
&lt;br /&gt;
* ISO con installer grafico Calamares [https://sourceforge.net/projects/alci/files/alci-iso/ ALCI]&lt;br /&gt;
&lt;br /&gt;
* ISO live CD/USB con interfaccia Xfce, utile per operazioni di ripristino o installazione [https://www.system-rescue.org/Download/ SystemRescue]:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== ISO personalizzata ==&lt;br /&gt;
Con '''archiso''' è possibile creare un'immagine con pacchetti aggiuntivi rispetto a quelli contenuti nella versione ufficiale. &lt;br /&gt;
&lt;br /&gt;
 # pacman -S archiso&lt;br /&gt;
&lt;br /&gt;
Copiare il contenuto del pacchetto in una directory di lavoro, es.: ''/root/media''&lt;br /&gt;
 # cp -r /usr/share/archiso/configs/releng /root/media&lt;br /&gt;
&lt;br /&gt;
Se volessimo aggiungere il supporto ad un pacchetto non contenuto nei repository ufficiali come, per esempio, lo ZFS occorrerebbe:&lt;br /&gt;
&lt;br /&gt;
* Importare la chiave pubblica del suo repository&lt;br /&gt;
 # pacman-key -r DDF7DB817396A49B2A2723F7403BD972F75D9D76&lt;br /&gt;
 # pacman-key --lsign-key DDF7DB817396A49B2A2723F7403BD972F75D9D76&lt;br /&gt;
 &lt;br /&gt;
* Modificare le seguenti righe al file '''pacman.conf''' di archiso per aggiungere il repository&lt;br /&gt;
 [archzfs]&lt;br /&gt;
 SigLevel = Never&lt;br /&gt;
 Server = https://archzfs.com/$repo/$arch&lt;br /&gt;
&lt;br /&gt;
* Aggiungere le seguenti righe al file ''packages.x86_64'' per aggiungere i pacchetti che ci interessa installare&lt;br /&gt;
 zfs-utils&lt;br /&gt;
 zfs-dkms&lt;br /&gt;
 net-tools&lt;br /&gt;
&lt;br /&gt;
* Se volessimo creare una versione live di una macchina, comprensiva di tutti i suoi pacchetti, potremmo semplicemente aggiungerli al file ''packages.x86_64'' &lt;br /&gt;
&lt;br /&gt;
 # pacman -Qq &amp;gt;&amp;gt; ''/path/packages.x86_64''&lt;br /&gt;
&lt;br /&gt;
* Lanciare lo script per creare l'ISO&lt;br /&gt;
 # ./build.sh -v&lt;br /&gt;
L'immagine sarà generata nella directory /root/media/out&lt;br /&gt;
&lt;br /&gt;
== Preparazione del disco ==&lt;br /&gt;
Su Linux si può scegliere (salvo casi estremamente [https://wiki.archlinux.org/title/partitioning#Partitionless_disk particolari]) tra due [https://unix.stackexchange.com/questions/289389/what-are-the-differences-between-the-various-partition-tables tipi] di tabella delle partizioni&lt;br /&gt;
&lt;br /&gt;
* msdos (Master Boot Record o più semplicemente MBR)&lt;br /&gt;
&lt;br /&gt;
* GPT (GUID Partition Table)&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
I casi in cui è preferibile utilizzare la tabella ''msdos'' sono:&lt;br /&gt;
&lt;br /&gt;
* dual-boot con Windows (32-bit o 64-bit) con la scheda madre in modalità Legacy BIOS&lt;br /&gt;
* in schede madri molto datate il BIOS potrebbe non supportare lo schema GPT (esiste comunque un [https://wiki.archlinux.org/title/partitioning#Tricking_old_BIOS_into_booting_from_GPT trucco] per aggirare l'ostacolo)&lt;br /&gt;
&lt;br /&gt;
[https://wiki.archlinux.org/title/partitioning#Choosing_between_GPT_and_MBR Vantaggi] di GPT su MBR:&lt;br /&gt;
&lt;br /&gt;
* offre un sistema di denominazione delle partizioni indipendente dal filesystem (PARTLABEL, PARTUUID)&lt;br /&gt;
&lt;br /&gt;
* 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.&lt;br /&gt;
&lt;br /&gt;
* la grandezza massima di un disco è di 2 ZiB, mentre su MBR 2 TiB&lt;br /&gt;
&lt;br /&gt;
* permette di fare a meno della tradizionale partizione di /boot con i filesystem BTRFS e ZFS in modo da semplificare la gestione degli snapshot.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Schede madri BIOS ===&lt;br /&gt;
Creare due partizioni.&lt;br /&gt;
&lt;br /&gt;
# '''[http://en.wikipedia.org/wiki/BIOS_Boot_partition 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.&lt;br /&gt;
# '''Linux filesystem''': successivamente da formattare col filesystem di nostra scelta: BTRFS, ZFS, ext4, XFS, JFS.&lt;br /&gt;
&lt;br /&gt;
==== Partizionamento ====&lt;br /&gt;
Col seguente comando verrà creata la partizione BIOS GRUB (EF02) a partire dal 1MB, della grandezza di 64MB, 8GB per la SWAP ed il resto del disco resterà disponibile per il filesystem di Linux.&lt;br /&gt;
&lt;br /&gt;
Se avete più dischi da utilizzare in raid, questa operazione andrà ripetuta per ciascun disco.&lt;br /&gt;
&lt;br /&gt;
 # sgdisk \&lt;br /&gt;
 --new=1:2048:133120 --typecode=1:EF02 --change-name=1:&amp;quot;GRUB&amp;quot; \&lt;br /&gt;
 --new=2:0:+8000M ---typecode 2:8200 --change-name=2:&amp;quot;SWAP&amp;quot; \&lt;br /&gt;
 --largest-new=3 --typecode=3:8300 --change-name=3:&amp;quot;ROOT&amp;quot; /dev/sda&lt;br /&gt;
&lt;br /&gt;
La seconda partizione dovrà poi essere formattata con uno dei filesystem supportati da Linux (ext4, btrfs, xfs...)&lt;br /&gt;
 # mkfs.btrfs /dev/sda3&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Schede madri UEFI ===&lt;br /&gt;
Creare due partizioni.&lt;br /&gt;
&lt;br /&gt;
# '''EFI''': è una partizione in formato FAT32 necessaria per l'avvio dei sistemi operativi nei PC con schede madri UEFI.&lt;br /&gt;
# '''Linux filesystem''': successivamente da formattare col filesystem di nostra scelta: BTRFS, ZFS, ext4, XFS, JFS.&lt;br /&gt;
&lt;br /&gt;
==== Partizionamento ====&lt;br /&gt;
Col seguente comando verrà creata la partizione EFI (EF00) a partire dal 1MB, della grandezza di 512MB, 8Gb per la SWAP ed il resto del disco per il filesystem di Linux.&lt;br /&gt;
 # sgdisk \&lt;br /&gt;
 --new=1:2048:1064960 --typecode=1:EF00 --change-name=1:&amp;quot;efi&amp;quot; \&lt;br /&gt;
 --new=2:0:+8000M ---typecode 2:8200 --change-name=2:&amp;quot;SWAP&amp;quot; \&lt;br /&gt;
 --largest-new=3 --typecode=3:8300 --change-name=3:&amp;quot;ROOT&amp;quot; /dev/sda&lt;br /&gt;
&lt;br /&gt;
La partizione '''EFI''' dovrà poi essere formattata in FAT32&lt;br /&gt;
 # mkfs.vfat -F 32 /dev/sda1&lt;br /&gt;
&lt;br /&gt;
La seconda partizione dovrà poi essere formattata con uno dei filesystem supportati da Linux (ext4, btrfs, xfs...)&lt;br /&gt;
 # mkfs.btrfs /dev/sda3&lt;br /&gt;
&lt;br /&gt;
== Montaggio del filesystem ==&lt;br /&gt;
Formattazione ed attivazione della SWAP&lt;br /&gt;
 # mkswap /dev/sda2&lt;br /&gt;
 # swapon /dev/sda2&lt;br /&gt;
&lt;br /&gt;
Montaggio del filesystem di ROOT nei sistemi BIOS&lt;br /&gt;
 # mount /dev/sda3 /mnt&lt;br /&gt;
&lt;br /&gt;
Montaggio del filesystem di ROOT nei sistemi UEFI&lt;br /&gt;
 # mount /dev/sda3 /mnt&lt;br /&gt;
 # mount --mkdir /dev/sda1 /mnt/boot&lt;br /&gt;
&lt;br /&gt;
== Pacchetti base ==&lt;br /&gt;
Per l'installazione di base si consigliano i seguenti meta-pacchetti&lt;br /&gt;
 # pacstrap -K /mnt base base-devel linux linux-headers linux-firmware&lt;br /&gt;
&lt;br /&gt;
== Configurazione ==&lt;br /&gt;
Creazione del file fstab&lt;br /&gt;
 # genfstab -U /mnt &amp;gt;&amp;gt; /mnt/etc/fstab&lt;br /&gt;
&lt;br /&gt;
Chroot nel nuovo sistema&lt;br /&gt;
 # arch-chroot /mnt&lt;br /&gt;
&lt;br /&gt;
Timezone&lt;br /&gt;
 # ln -sf /usr/share/zoneinfo/Europe/Rome /etc/localtime&lt;br /&gt;
&lt;br /&gt;
Editare il file &amp;lt;code&amp;gt;/etc/systemd/timesyncd.conf&amp;lt;/code&amp;gt; ed abilitare il servizio per la sincronizzazione automatica dell'orario&lt;br /&gt;
 # systemctl enable systemd-timesyncd.service&lt;br /&gt;
&lt;br /&gt;
Editare il file &amp;lt;code&amp;gt;/etc/locale.gen&amp;lt;/code&amp;gt; e togliere il commento agli argomenti che interessano, es.: ''en_US.UTF-8'', ''it_IT.UTF-8''. E successivamente generare la localizzazione eseguendo&lt;br /&gt;
 # locale-gen&lt;br /&gt;
&lt;br /&gt;
Configurare la lingua che vogliamo usare per il nostro sistema editando il file &amp;lt;code&amp;gt;/etc/locale.conf&amp;lt;/code&amp;gt; oppure lanciando il comando&lt;br /&gt;
 # localectl set-locale LANG=en_US.UTF-8&lt;br /&gt;
&lt;br /&gt;
Selezioniamo il layout della tastiera editando il file &amp;lt;code&amp;gt;/etc/vconsole.conf&amp;lt;/code&amp;gt;&lt;br /&gt;
 # echo &amp;quot;KEYMAP=it&amp;quot; &amp;gt;&amp;gt; /etc/vconsole.conf&lt;br /&gt;
&lt;br /&gt;
Scegliere un home host (es.: ''archstar'')&lt;br /&gt;
 # echo '''archstar''' &amp;gt;&amp;gt; /etc/hostname&lt;br /&gt;
&lt;br /&gt;
Impostare una password per l'utente root&lt;br /&gt;
 # passwd&lt;br /&gt;
&lt;br /&gt;
Installare e configurare il bootloader&lt;br /&gt;
&lt;br /&gt;
= Filesystem =&lt;br /&gt;
Su Linux, a seconda di ciò di cui abbiamo bisogno, è possibile scegliere tra numerosi filesystem. Le principali opzioni sono le seguenti:&lt;br /&gt;
&lt;br /&gt;
- BTRFS: supporta nativamente sottovolumi, snapshot ed il raid 0, 1 e 5; ma non la crittografia.&lt;br /&gt;
&lt;br /&gt;
- EXT4: il FS storico di Linux, evoluzione di ext3. Supporta nativamente la crittografia dei dati, ma non gestisce autonomamente né RAID, né snapshots. &lt;br /&gt;
&lt;br /&gt;
- [https://openzfs.github.io/openzfs-docs/index.html 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 &amp;quot;write-atomicity&amp;quot; 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.&lt;br /&gt;
&lt;br /&gt;
- [https://access.redhat.com/documentation/it-it/red_hat_enterprise_linux/9/html-single/configuring_and_managing_logical_volumes/index 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.&lt;br /&gt;
&lt;br /&gt;
== IMG ==&lt;br /&gt;
Per fare esperimenti con i filesystem può essere utile creare dei file immagine&lt;br /&gt;
&lt;br /&gt;
Creare un file immagine di una specifica grandezza (es.: 10G)&lt;br /&gt;
 $ truncate -s 10g disk.img&lt;br /&gt;
&lt;br /&gt;
Formattarlo con un filesystem (es.: btrfs)&lt;br /&gt;
 $ mkfs.btrfs disk.img&lt;br /&gt;
&lt;br /&gt;
Montarlo in loop&lt;br /&gt;
 $ sudo mount -o loop disk.img /mnt&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== BTRFS ==&lt;br /&gt;
Creazione del filesystem&lt;br /&gt;
 # mkfs.btrfs ''/dev/partizione''&lt;br /&gt;
&lt;br /&gt;
Montaggio del filesystem&lt;br /&gt;
 # mount -o compress=lzo ''/dev/partizione'' ''/mnt/punto_mount''&lt;br /&gt;
&lt;br /&gt;
(Si consiglia di usare l'opzione di compressione del filesystem per migliorare le performance ed ottimizzare l'utilizzo dello spazio)&lt;br /&gt;
&lt;br /&gt;
===Subvolumi===&lt;br /&gt;
* Creare un subvolume&lt;br /&gt;
 # btrfs subvolume create ''subvolume''&lt;br /&gt;
&lt;br /&gt;
* Controllare i subvolumi presenti sul sistema&lt;br /&gt;
 # btrfs subvolume list /&lt;br /&gt;
&lt;br /&gt;
In una tipica installazione Ubuntu avremo un output di questo tipo&lt;br /&gt;
 ID 257 gen 9755 top level 5 path @&lt;br /&gt;
 ID 292 gen 7624 top level 5 path @home&lt;br /&gt;
&lt;br /&gt;
''@'' è il nome del subvolume contenente la root '''/''' del filesystem&lt;br /&gt;
''@home'' è il nome del subvolume della /home&lt;br /&gt;
&lt;br /&gt;
=== Montaggio di un subvolume ===&lt;br /&gt;
 # mount -o subvol=''subvolume'' ''/dev/partizione'' ''/mnt/punto_mount''&lt;br /&gt;
&lt;br /&gt;
=== fstab ===&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Ecco un '''/etc/fstab''' di esempio&lt;br /&gt;
 LABEL=ROOT       /             btrfs     defaults,compress=lzo,subvol=@            0 0&lt;br /&gt;
 LABEL=ROOT       /home         btrfs     defaults,compress=lzo,subvol=@home        0 0&lt;br /&gt;
 LABEL=ROOT       /mnt/btrfs    btrfs     defaults,noauto,subvolid=0,compress=lzo   0 0&lt;br /&gt;
&lt;br /&gt;
Montando la partizione con label ROOT su /mnt/btrfs saranno visibili tutti i subvolumi.&lt;br /&gt;
&lt;br /&gt;
===Conversione da Ext3/4 a Btrfs===&lt;br /&gt;
 # btrfs-convert /dev/partizione&lt;br /&gt;
&lt;br /&gt;
Automaticamente è creata una snapshot contenente il vecchio filesystem (''/ext2_saved'')&lt;br /&gt;
&lt;br /&gt;
In caso di problemi può essere montata col comando&lt;br /&gt;
 # mount -t btrfs -o subvol=ext2_saved /dev/xxx /ext2_saved&lt;br /&gt;
 # mount -t ext3 -o loop,ro /ext2_saved/image /ext3&lt;br /&gt;
&lt;br /&gt;
Se tutto è andato a buon fine può invece essere eliminata&lt;br /&gt;
 # btrfs subvolume delete /ext2_saved&lt;br /&gt;
&lt;br /&gt;
===Riparazione di un filesystem danneggiato===&lt;br /&gt;
* Direttamente sul filesystem montato&lt;br /&gt;
 # btrfs scrub start -B /dev/partizione&lt;br /&gt;
o anche direttamente sulla root&lt;br /&gt;
 # btrfs scrub start -B /&lt;br /&gt;
&lt;br /&gt;
* Sul disco smontato&lt;br /&gt;
 # btrfs check --repair /dev/partizione&lt;br /&gt;
&lt;br /&gt;
Per non dover ricorrere ad un dispositivo di avvio alternativo, dato che btrfs-check non può essere utilizzato su un filesystem montato, si consiglia di aggiungerlo al ramdisk modificando in questo mmodo il file &amp;lt;code&amp;gt;/etc/mkinitcpio.conf&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 BINARIES=(btrfs)&lt;br /&gt;
&lt;br /&gt;
=== Quote ===&lt;br /&gt;
Per limitare le dimensioni di un subvolume è possibile abilitare la gestione delle '''quote'''.&lt;br /&gt;
&lt;br /&gt;
Utilizzare il seguente comando su un filesystem btrfs appena creato e privo di subvolumi&lt;br /&gt;
 # btrfs quota enable volume&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
 # btrfs subvolume list &amp;lt;path&amp;gt; | cut -d' ' -f2 | xargs -I{} -n1 btrfs qgroup create 0/{} &amp;lt;path&amp;gt;&lt;br /&gt;
 # btrfs quota rescan &amp;lt;path&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Assegnare una quota limite ad un subvolume&lt;br /&gt;
 # btrfs qgroup limit size /volume/subvolume&lt;br /&gt;
&lt;br /&gt;
Es.:&lt;br /&gt;
 # btrfs qgroup limit 20g /mnt/@&lt;br /&gt;
 # btrfs qgroup limit 100g /mnt/@home&lt;br /&gt;
&lt;br /&gt;
Scoprire la quantità di spazio utilizzata da un subvolume&lt;br /&gt;
 # btrfs qgroup show &amp;lt;path&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Snapshots ===&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
* Effettuare uno snapshot&lt;br /&gt;
 # btrfs subvolume snapshot @ rootsnap&lt;br /&gt;
&lt;br /&gt;
Nell'esempio abbiamo effettuato il ''backup'' del filesystem di root e l'abbiamo chiamato ''rootsnap''&lt;br /&gt;
&lt;br /&gt;
* Montare un subvolume/snapshot&lt;br /&gt;
 # mount -t btrfs -o subvol=rootsnap /dev/partizione /mnt/snapshot&lt;br /&gt;
&lt;br /&gt;
* Cancellare un subvolume/snapshot&lt;br /&gt;
 # btrfs subvolume delete rootsnap&lt;br /&gt;
&lt;br /&gt;
==== Integrazione con GRUB ====&lt;br /&gt;
È possibile caricare automaticamente all'avvio gli snapshot dei filesystem di root attraverso il programma '''grub-btrfs'''&lt;br /&gt;
 # pacman -S grub-btrfs&lt;br /&gt;
&lt;br /&gt;
Con questo tool ogni volta che rigeneriamo il file di configurazione di GRUB il sistema rileva eventuali sottovolumi avviabili (snapshot comprese) aggiungendoli al menu di avvio del GRUB &lt;br /&gt;
 # grub-mkconfig -o /boot/grub/grub.cfg&lt;br /&gt;
&lt;br /&gt;
=== Backup ===&lt;br /&gt;
Le snapshot possono essere salvate su un disco esterno, a patto che questo abbia un file system btrfs.&lt;br /&gt;
L'operazione di trasferimento può essere effettuata soltanto su snapshot in sola lettura.&lt;br /&gt;
Si ipotizza che il proprio disco di sistema sia montato in /mnt/btrfs ed il disco esterno in /mnt/ext&lt;br /&gt;
&lt;br /&gt;
* Creare la snapshot in sola lettura (opzione -r) oppure impostare il flag di sola lettura ad una snapshot già fatta&lt;br /&gt;
 btrfs subvolume snapshot -r @root @root-yymmdd-ro&lt;br /&gt;
 btrfs property set /mnt/btrfs/@root-yymmdd-ro ro true&lt;br /&gt;
* Trasferire la snapshot sul disco esterno.&lt;br /&gt;
 btrfs send /mnt/btrfs/@root-yymmdd-ro | btrfs receive /mnt/ext&lt;br /&gt;
* Quando necessario, ripristinare la snapshot&lt;br /&gt;
 btrfs send /mnt/ext/@root-yymmdd-ro | btrfs receive /mnt/btrfs/&lt;br /&gt;
* Eventualmente, rinominare la snapshot e reimpostare i privilegi di scrittura&lt;br /&gt;
 mv /mnt/ext/{@root-yymmdd-ro,@root}&lt;br /&gt;
 btrfs property set /mnt/btrfs/@root ro false&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== RAID ===&lt;br /&gt;
Tipologie e caratteristiche dei raid [https://btrfs.readthedocs.io/en/latest/mkfs.btrfs.html#profiles supportati]&lt;br /&gt;
&lt;br /&gt;
Confronto tra varie tecnologie di [https://blog.jenningsga.com/status-of-storage-within-linux/ raid]&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! RAID !! Redundancy Copies !! Redundancy Parity !! Redundancy Striping !! Spazio utilizzato !! Min/max n. dischi&lt;br /&gt;
|-&lt;br /&gt;
| disco singolo || 1 || || || 100% || 1/N&lt;br /&gt;
|- &lt;br /&gt;
| RAID0 || 1 || || 1 to N || 100% || 1/N&lt;br /&gt;
|- &lt;br /&gt;
| RAID1 || 2 || || ||  50% || 2/N &lt;br /&gt;
|- &lt;br /&gt;
| RAID1C3 || 3 || || || 33% || 3/N&lt;br /&gt;
|- &lt;br /&gt;
| RAID1C4 || 4 || || || 25% || 4/N&lt;br /&gt;
|-&lt;br /&gt;
| RAID10 || 2 || || 1 to N || 50%  || 2/N&lt;br /&gt;
|-&lt;br /&gt;
| RAID5 || 1 || 1 || 2 to N-1 || (N-1)/N || 2/N&lt;br /&gt;
|-&lt;br /&gt;
| RAID6 || 1 || 2 || 3 to N-2 || (N-2)/N || 3/N&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====RAID 0====&lt;br /&gt;
 # mkfs.btrfs -d raid0 /dev/sda1 /dev/sdb1&lt;br /&gt;
&lt;br /&gt;
===== Montare il raid =====&lt;br /&gt;
 # mount /dev/sda1 /mnt&lt;br /&gt;
&lt;br /&gt;
(È equivalente a ''mount /dev/sdb1 /mnt'', il sistema riconosce che è presente un raid 0 e provvede al montaggio corretto dei dischi)&lt;br /&gt;
&lt;br /&gt;
Verifica del montaggio&lt;br /&gt;
 # btrfs filesystem show /mnt&lt;br /&gt;
&lt;br /&gt;
 Label: none  uuid: 4714fca3-bfcb-4130-ad2f-f560f2e12f8e&lt;br /&gt;
 Total devices 2 FS bytes used 27.75GiB&lt;br /&gt;
 devid    1 size 136.72GiB used 17.03GiB path /dev/sda1&lt;br /&gt;
 devid    2 size 136.72GiB used 17.01GiB path /dev/sdb1&lt;br /&gt;
&lt;br /&gt;
=====Aggiungere una partizione=====&lt;br /&gt;
 # btrfs device add /dev/sdc1 /mnt&lt;br /&gt;
&lt;br /&gt;
 # btrfs filesystem show /mnt&lt;br /&gt;
 Label: none  uuid: 4714fca3-bfcb-4130-ad2f-f560f2e12f8e&lt;br /&gt;
 Total devices 3 FS bytes used 27.75GiB&lt;br /&gt;
 devid    1 size 136.72GiB used 17.03GiB path /dev/sda1&lt;br /&gt;
 devid    2 size 136.72GiB used 17.01GiB path /dev/sdb1&lt;br /&gt;
 devid    3 size 136.72GiB used 0.00 path /dev/sdc1&lt;br /&gt;
&lt;br /&gt;
Adesso è necessario effettuare una redistribuzione dei dati sui tre dischi&lt;br /&gt;
 # btrfs balance start -d -m /mnt&lt;br /&gt;
&lt;br /&gt;
Per vedere a che punto del bilanciamento è arrivato il sistema&lt;br /&gt;
 # btrfs fi balance status /&lt;br /&gt;
&lt;br /&gt;
 # btrfs filesystem show /mnt&lt;br /&gt;
 Label: none  uuid: 4714fca3-bfcb-4130-ad2f-f560f2e12f8e&lt;br /&gt;
 Total devices 3 FS bytes used 27.78GiB&lt;br /&gt;
 devid    1 size 136.72GiB used 10.03GiB path /dev/sda1&lt;br /&gt;
 devid    2 size 136.72GiB used 10.03GiB path /dev/sdb1&lt;br /&gt;
 devid    3 size 136.72GiB used 11.00GiB path /dev/sdc1&lt;br /&gt;
&lt;br /&gt;
=====Rimuovere un device=====&lt;br /&gt;
 # btrfs device delete /dev/sdb1 /mnt&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
==== RAID 1 ====&lt;br /&gt;
=====Creazione di un raid1 ex novo===== &lt;br /&gt;
Copiare la tabella delle partizioni da sda a sdb&lt;br /&gt;
 # sfdisk -d /dev/sda | sfdisk /dev/sdb&lt;br /&gt;
&lt;br /&gt;
Creare il raid&lt;br /&gt;
 # mkfs.btrfs -d raid1 -m raid1 /dev/sda1 /dev/sdb1&lt;br /&gt;
&lt;br /&gt;
===== Aggiungere un mirror ad un disco esistente =====&lt;br /&gt;
 # btrfs device add /dev/sdb1 ''/punto_di_mount''&lt;br /&gt;
 # btrfs balance start -dconvert=raid1 -mconvert=raid1 ''/punto_di_mount''&lt;br /&gt;
&lt;br /&gt;
===== GRUB =====&lt;br /&gt;
Se si utilizza un raid1 per la partizione di sistema '''/''' e si vuole rendere Linux avviabile automaticamente anche in caso di danneggiamento o mancanza di uno dei due dischi del raid occorrerà che sul secondo disco sia clonata la partizione EFI o BIOS GRUB (es.: /dev/sda1) e che vi sia installato il bootloader.&lt;br /&gt;
 # dd if=/dev/sda1 of=/dev/sdb1&lt;br /&gt;
 # grub-install /dev/sdb&lt;br /&gt;
&lt;br /&gt;
=====Sostituzione device danneggiato=====&lt;br /&gt;
Verificare qual è il disco che dà dei problemi&lt;br /&gt;
 # mount /dev/sda1 ''/punto_di_mount'' -o degraded&lt;br /&gt;
 # btrfs device stats ''/punto_di_mount''&lt;br /&gt;
 # btrfs filesystem show ''/punto_di_mount''&lt;br /&gt;
 # btrfs device usage ''/punto_di_mount''&lt;br /&gt;
&lt;br /&gt;
Ipotizzando che '''1''' sia l'ID del disco danneggiato secondo i comandi dati in precedenza&lt;br /&gt;
 # btrfs replace start '''1''' /dev/sdc1 ''/punto_di_mount''&lt;br /&gt;
&lt;br /&gt;
Per monitorare lo stato di ripristino del raid&lt;br /&gt;
 # btrfs replace status ''/punto_di_mount''&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
 # btrfs device delete missing /mnt&lt;br /&gt;
&lt;br /&gt;
==== RAID 5 ====&lt;br /&gt;
{{Note&lt;br /&gt;
|type=warning &lt;br /&gt;
| text= '''ATTENZIONE il raid5 su BTRFS è considerato [https://btrfs.readthedocs.io/en/latest/btrfs-man5.html#raid56-status-and-recommended-practices non sicuro] e se ne sconsiglia il suo utilizzo'''&lt;br /&gt;
}}&lt;br /&gt;
==== RAID 1C ====&lt;br /&gt;
&lt;br /&gt;
===== RAID 1C3 =====&lt;br /&gt;
Se si desidera duplicare i dati rispettivamente 2 volte in modo da poter perdere fino a due dischi su 3 senza perdere dati è possibile utilizzare una modalità chiamata raid1c3&lt;br /&gt;
&lt;br /&gt;
Per creare ex novo il raid1c3&lt;br /&gt;
 # mkfs.btrfs -d raid1c3 -m raid1c3 /dev/sda1 /dev/sdb1 /dev/sdc1&lt;br /&gt;
&lt;br /&gt;
Per convertire a raid1c3&lt;br /&gt;
 # btrfs balance start -dconvert=raid1c3 -mconvert=raid1c3 /storage-btrfs/&lt;br /&gt;
&lt;br /&gt;
===== RAID 1C4 =====&lt;br /&gt;
Se si desidera duplicare i dati rispettivamente 3 volte in modo da poter perdere fino a 3 dischi su 4 senza perdere dati è possibile utilizzare una modalità chiamata raid1c4&lt;br /&gt;
&lt;br /&gt;
Per creare ex novo il raid1c3&lt;br /&gt;
 # mkfs.btrfs -d raid1c4 -m raid1c4 /dev/sda1 /dev/sdb1 /dev/sdc1&lt;br /&gt;
&lt;br /&gt;
Per convertire a raid1c4&lt;br /&gt;
 # btrfs balance start -dconvert=raid1c4 -mconvert=raid1c4 /storage-btrfs/&lt;br /&gt;
&lt;br /&gt;
== ZFS ==&lt;br /&gt;
===Installazione di modulo e le utility da AUR===&lt;br /&gt;
 # pacman-key -r F75D9D76&lt;br /&gt;
 # pacman-key --lsign-key F75D9D76&lt;br /&gt;
 $ pikaur -S zfs-utils zfs-dkms&lt;br /&gt;
&lt;br /&gt;
===Installazione di modulo e utility da archzfs===&lt;br /&gt;
Modificare le seguenti righe al file '''pacman.conf''' di archiso&lt;br /&gt;
 [archzfs-testing]&lt;br /&gt;
 Server = https://archzfs.com/$repo/$arch&lt;br /&gt;
&lt;br /&gt;
 # pacman-key -r DDF7DB817396A49B2A2723F7403BD972F75D9D76&lt;br /&gt;
 # pacman-key --lsign-key DDF7DB817396A49B2A2723F7403BD972F75D9D76&lt;br /&gt;
 # pacman -S zfs-utils zfs-linux&lt;br /&gt;
&lt;br /&gt;
===Configurare il FS===&lt;br /&gt;
[https://wiki.archlinux.org/title/ZFS Comandi] per ottenere informazioni utili sul filesystem e sui pool&lt;br /&gt;
 # zfs list -t  all&lt;br /&gt;
 # zpool status&lt;br /&gt;
 # zpool list&lt;br /&gt;
&lt;br /&gt;
Abilitare i vari servizi sul filesystem&lt;br /&gt;
 # systemctl enable zfs-zed.service&lt;br /&gt;
 # systemctl enable zfs-mount.service&lt;br /&gt;
 # systemctl enable zfs-share.service&lt;br /&gt;
 # systemctl enable zfs-import.target&lt;br /&gt;
 # systemctl enable zfs.target&lt;br /&gt;
&lt;br /&gt;
Creare un pool su un disco&lt;br /&gt;
 # zpool create &amp;quot;pool&amp;quot; sda&lt;br /&gt;
&lt;br /&gt;
Creare un pool su una partizione&lt;br /&gt;
 # zpool create &amp;quot;pool&amp;quot; sda2&lt;br /&gt;
&lt;br /&gt;
Importare un pool&lt;br /&gt;
 # zpool import &amp;quot;pool&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Aggiungere pool alla cache per auto-import e mount (abilitare i vari demoni zfs)&lt;br /&gt;
 # zpool set cachefile=/etc/zfs/zpool.cache &amp;quot;pool&amp;quot;&lt;br /&gt;
&lt;br /&gt;
oppure si possono caricare i mountpoint in modalità legacy dall'fstab&lt;br /&gt;
 # zfs create -o mountpoint=legacy ''pool''/directory&lt;br /&gt;
&lt;br /&gt;
Aggiungere la compressione&lt;br /&gt;
 # zfs get compression ''pool''&lt;br /&gt;
 # zfs set compression=lz4 ''pool''&lt;br /&gt;
&lt;br /&gt;
Vedere le proprietà di un ''pool''&lt;br /&gt;
 # zfs get all ''zpool''&lt;br /&gt;
&lt;br /&gt;
==== RAID ====&lt;br /&gt;
Creare un pool in raid0&lt;br /&gt;
 # zpool create &amp;quot;pool&amp;quot; /dev/sdb /dev/sdc&lt;br /&gt;
&lt;br /&gt;
Creare un pool in raid1&lt;br /&gt;
 # zpool create &amp;quot;pool&amp;quot; mirror /dev/sdb /dev/sc&lt;br /&gt;
&lt;br /&gt;
Creare un pool ''raid5'' su più dischi&lt;br /&gt;
 # zpool create &amp;quot;pool&amp;quot; raidz /dev/sdb /dev/sdc /dev/sdd&lt;br /&gt;
&lt;br /&gt;
Creare un pool raid5 su immagini&lt;br /&gt;
 # zpool create &amp;quot;pool&amp;quot; raidz /path/1.img /path/2.img /path/3.img&lt;br /&gt;
&lt;br /&gt;
* [https://docs.oracle.com/cd/E19253-01/819-5461/gbbvf/index.html Sostituire] disco in raid&lt;br /&gt;
&lt;br /&gt;
Rimuovere il disco da sostituire&lt;br /&gt;
 # zpool offline disco1&lt;br /&gt;
&lt;br /&gt;
Inserire il nuovo disco&lt;br /&gt;
 # zpool replace &amp;quot;pool&amp;quot; disco1&lt;br /&gt;
 # zpool online disco1&lt;br /&gt;
&lt;br /&gt;
* Utilizza un altro disco montato al posto di quello danneggiato&lt;br /&gt;
 # zpool replace &amp;quot;pool&amp;quot; disco1 disco2&lt;br /&gt;
&lt;br /&gt;
Aggiungere uno o più dischi ad un pool&lt;br /&gt;
 # zpool add &amp;quot;pool&amp;quot; mirror disco3 disco4&lt;br /&gt;
 # zpool add &amp;quot;pool&amp;quot; raidz disco3 disco4 disco5&lt;br /&gt;
&lt;br /&gt;
Rimuovere disco1 da pool se aggiunto erroneamente&lt;br /&gt;
 # zpool remove &amp;quot;pool&amp;quot; disco1&lt;br /&gt;
&lt;br /&gt;
Controllare lo stato di un pool&lt;br /&gt;
 # zpool status&lt;br /&gt;
&lt;br /&gt;
Correggere eventuali errori&lt;br /&gt;
 # zpool clear ''pool'' ''disco''&lt;br /&gt;
 # zpool scrub  ''pool''&lt;br /&gt;
&lt;br /&gt;
=== Root filesystem ===&lt;br /&gt;
* Guida ufficiale [https://openzfs.github.io/openzfs-docs/Getting%20Started/Arch%20Linux/Root%20on%20ZFS/1-preparation.html Root on ZFS]&lt;br /&gt;
&lt;br /&gt;
Per prima cosa organizzare la tabella delle partizioni del [[#Preparazione_del_disco | disco]]&lt;br /&gt;
&lt;br /&gt;
Formattare la partizione e creare il dataset (senza mountpoint)&lt;br /&gt;
 # zpool create -m none rpool ''sda2''&lt;br /&gt;
 &lt;br /&gt;
Smontare il pool e rimontarlo in modalità legacy &lt;br /&gt;
 # zfs create -o mountpoint=none rpool/ROOT&lt;br /&gt;
 # zfs create -o mountpoint=legacy rpool/ROOT/arch&lt;br /&gt;
 # zpool set bootfs=rpool/ROOT/arch rpool&lt;br /&gt;
 # mount -t zfs rpool/ROOT /mnt&lt;br /&gt;
''rpool'' è il nome che abbiamo voluto dare al volume contenente il filesystem di sistema&lt;br /&gt;
&lt;br /&gt;
NB: se NON si usa il mountpoint in modalità legacy occorrerà impostare &amp;lt;code&amp;gt;canmount=noauto&amp;lt;/code&amp;gt; su tutti i dataset con &amp;lt;code&amp;gt;mountpoint=/&amp;lt;/code&amp;gt; (es.: zfs create -o mountpoint=/ -o canmount=noauto rpool/ROOT/arch) altrimenti il sistema cercherà di eseguirne automaticamente l'automount e fallirà se esistono più filesystem da montare su /&lt;br /&gt;
&lt;br /&gt;
Se volessimo aggiungere altri pool es.:&lt;br /&gt;
 # zfs create rpool/home&lt;br /&gt;
 # zfs create rpool/arch/pkg&lt;br /&gt;
 # zfs create rpool/var&lt;br /&gt;
 # zfs create rpool/srv&lt;br /&gt;
&lt;br /&gt;
Configurare la cache degli zpool&lt;br /&gt;
 # zpool set cachefile=/etc/zfs/rpool.cache rpool &lt;br /&gt;
&lt;br /&gt;
Copiare il file di cache nel sistema dove dovremo eseguire il chroot per l'installazione.&lt;br /&gt;
 # mkdir -p /mnt/etc/zfs&lt;br /&gt;
 # cp /etc/zfs/rpool.cache /mnt/etc/zfs/rpool.cache&lt;br /&gt;
&lt;br /&gt;
Installare il sistema di base&lt;br /&gt;
 # pacstrap -K /mnt base linux linux-firmware zfs-utils zfs-linux&lt;br /&gt;
&lt;br /&gt;
Altri pacchetti consigliati&lt;br /&gt;
 # pacstrap -K /mnt base-devel net-tools networkmanager nano zsh grml-zsh-config busybox&lt;br /&gt;
&lt;br /&gt;
Eseguire il chroot per procedere con l'installazione&lt;br /&gt;
 # arch-chroot /mnt&lt;br /&gt;
&lt;br /&gt;
Configurare il mountpoint su fstab&lt;br /&gt;
/etc/fstab &lt;br /&gt;
 rpool/ROOT/arch      /       zfs         noatime     0 0&lt;br /&gt;
&lt;br /&gt;
Editare il file /etc/mkinitcpio.conf aggiungendo zfs prima del filesystem&lt;br /&gt;
 HOOKS=&amp;quot;base udev autodetect modconf block keyboard zfs filesystems&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Abilitare i servizi per ZFS all'avvio&lt;br /&gt;
 # systemctl enable zfs-zed.service&lt;br /&gt;
 # systemctl enable zfs-mount.service&lt;br /&gt;
 # systemctl enable zfs-share.service&lt;br /&gt;
 # systemctl enable zfs-import.target&lt;br /&gt;
 # systemctl enable zfs.target&lt;br /&gt;
&lt;br /&gt;
Impostare una password di root&lt;br /&gt;
 # passwd&lt;br /&gt;
&lt;br /&gt;
Ricreare il ramdisk col supporto per ZFS&lt;br /&gt;
 # mkinitcpio -p linux&lt;br /&gt;
&lt;br /&gt;
Installare il [[Appunti_Arch_Linux#BOOT_LOADER|Boot Loader]]&lt;br /&gt;
&lt;br /&gt;
Uscire dal chroot e terminazione dell'installazione&lt;br /&gt;
 # exit&lt;br /&gt;
 # zfs unmount -a&lt;br /&gt;
 # cp /etc/zfs/rpool.cache /mnt/etc/zfs/rpool.cache&lt;br /&gt;
 # zpool export rpool&lt;br /&gt;
 # reboot&lt;br /&gt;
&lt;br /&gt;
==== BOOT LOADER ====&lt;br /&gt;
===== ZFSBootMenu =====&lt;br /&gt;
Per gestire a meglio gli snapshot e la clonazione dei pool è consigliabile utilizzare, su PC che supportano UEFI, il boot loader [https://docs.zfsbootmenu.org/en/latest/guides/alpine/uefi.html ZFSBootMenu].&lt;br /&gt;
&lt;br /&gt;
Esportiamo le variabile per configurare il primo disco /dev/sda come disco di avvio&lt;br /&gt;
 # export BOOT_DISK=&amp;quot;/dev/sda&amp;quot;&lt;br /&gt;
 # export BOOT_PART=&amp;quot;1&amp;quot;&lt;br /&gt;
 # export BOOT_DEVICE=&amp;quot;${BOOT_DISK}${BOOT_PART}&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Assicuriamoci che il nostro pool di root sia configurato come avviabile&lt;br /&gt;
 # zpool set bootfs=''rpool/ROOT/'' ''rpool''&lt;br /&gt;
&lt;br /&gt;
Formattiamo sda1 per creare la partizione EFI di boot&lt;br /&gt;
 # mkfs.vfat -F32 &amp;quot;$BOOT_DEVICE&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Aggiungiamola all'fstab e montiamola&lt;br /&gt;
 # cat &amp;lt;&amp;lt; EOF &amp;gt;&amp;gt; /etc/fstab&lt;br /&gt;
 $BOOT_DEVICE /boot/efi vfat defaults 0 0&lt;br /&gt;
 EOF&lt;br /&gt;
&lt;br /&gt;
 # mkdir -p /boot/efi&lt;br /&gt;
 # mount /boot/efi&lt;br /&gt;
&lt;br /&gt;
Scarichiamo ed installiamo il boot loader&lt;br /&gt;
 # mkdir -p /boot/efi/EFI/ZBM&lt;br /&gt;
 # curl -o /boot/efi/EFI/ZBM/VMLINUZ.EFI -L https://get.zfsbootmenu.org/efi&lt;br /&gt;
 # cp /boot/efi/EFI/ZBM/VMLINUZ.EFI /boot/efi/EFI/ZBM/VMLINUZ-BACKUP.EFI&lt;br /&gt;
&lt;br /&gt;
Forziamo zfsbootmenu a montare il nostro dataset con i permessi di scrittura&lt;br /&gt;
 # zfs set org.zfsbootmenu:commandline=&amp;quot;quiet loglevel=4 rw&amp;quot; rpool/ROOT&lt;br /&gt;
&lt;br /&gt;
Installiamo e configuriamo  ''efibootmgr''&lt;br /&gt;
 # pacman -S efibootmgr&lt;br /&gt;
&lt;br /&gt;
 # efibootmgr -c -d &amp;quot;$BOOT_DISK&amp;quot; -p &amp;quot;$BOOT_PART&amp;quot; \&lt;br /&gt;
  -L &amp;quot;ZFSBootMenu (Backup)&amp;quot; \&lt;br /&gt;
  -l \\EFI\\ZBM\\VMLINUZ-BACKUP.EFI&lt;br /&gt;
&lt;br /&gt;
 # efibootmgr -c -d &amp;quot;$BOOT_DISK&amp;quot; -p &amp;quot;$BOOT_PART&amp;quot; \&lt;br /&gt;
  -L &amp;quot;ZFSBootMenu&amp;quot; \&lt;br /&gt;
  -l \\EFI\\ZBM\\VMLINUZ.EFI&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Se si utilizza un pool distribuito su più dischi (RAID1 o RAIDZ) occorrerà installare il bootloader anche sugli altri dispositivi (nel caso del disco /dev/sdb).&lt;br /&gt;
&lt;br /&gt;
 # mount /dev/sdb1 /boot/efi&lt;br /&gt;
 # curl -o /boot/efi/EFI/ZBM/VMLINUZ.EFI -L https://get.zfsbootmenu.org/efi&lt;br /&gt;
 # efibootmgr -c -d &amp;quot;$BOOT_DISK&amp;quot; -p &amp;quot;$BOOT_PART&amp;quot; \&lt;br /&gt;
  -L &amp;quot;ZFSBootMenu sdb&amp;quot; \&lt;br /&gt;
  -l \\EFI\\ZBM\\VMLINUZ.EFI&lt;br /&gt;
&lt;br /&gt;
===== GRUB =====&lt;br /&gt;
Se non ci interessa gestire snapshot o utilizziamo un PC con BIOS è possibile optare per GRUB &lt;br /&gt;
 # pacman -S grub&lt;br /&gt;
 # grub-install /dev/sda&lt;br /&gt;
 (se si usa un pool composto da più dischi es. raidz per il filesystem di root è consigliabile installare grub su tutti i dischi: sda, sdb, sdc, sdd...)&lt;br /&gt;
 # grub-mkconfig -o /boot/grub/grub.cfg&lt;br /&gt;
&lt;br /&gt;
Esempio&lt;br /&gt;
 #Grub entry&lt;br /&gt;
 menuentry 'Arch Linux'{&lt;br /&gt;
       insmod gzio&lt;br /&gt;
       insmod part_gpt&lt;br /&gt;
       insmod zfs&lt;br /&gt;
       set root='hd0,gpt3'&lt;br /&gt;
        echo    'Loading Linux linux ...'&lt;br /&gt;
        linux   /ROOT@/boot/vmlinuz-linux root=ZFS=rpool/ROOT rw  loglevel=3 quiet&lt;br /&gt;
        echo    'Loading initial ramdisk ...'&lt;br /&gt;
        initrd  /ROOT@/boot/initramfs-linux.img&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
=== Snapshot ===&lt;br /&gt;
Snapshot del dataset ROOT&lt;br /&gt;
 # zfs snapshot -r rpool/ROOT''@snapshot-2023-03-07''&lt;br /&gt;
&lt;br /&gt;
Lista degli snapshot presenti&lt;br /&gt;
 # zfs list -t snapshot&lt;br /&gt;
&lt;br /&gt;
Ripristino dello snapshot&lt;br /&gt;
 # zfs rollback rpool''@snapshot-2023-03-07''&lt;br /&gt;
&lt;br /&gt;
Oltre che servire per il ripristino, possono essere montati per esplorarne il contenuto, ma non è possibile modificarlo.&lt;br /&gt;
 # mount -t zfs rpool@''2023-04-11'' /mnt/''snapshot''&lt;br /&gt;
&lt;br /&gt;
Copia locale di un dataset&lt;br /&gt;
 # zfs send -R rpool/ROOT''@snapshot-2023-03-07'' | zfs recv -F rpool/ROOT/backup&lt;br /&gt;
&lt;br /&gt;
Invio via SSH di una snapshot&lt;br /&gt;
 # zfs send -R rpool/ROOT''@snapshot-2023-03-07''| ssh ''user@ip_address'' zfs recv tank/backups/rootzfs&lt;br /&gt;
&lt;br /&gt;
Backup locale di una snapshot&lt;br /&gt;
 # zfs send -R rpool/ROOT@snapshot | gzip &amp;gt; /tmp/zfs_backup.gz&lt;br /&gt;
&lt;br /&gt;
Restore del backup&lt;br /&gt;
 # gzcat /tmp/zfs_backup.gz | zfs recv -F rpool/ROOT&lt;br /&gt;
&lt;br /&gt;
==== Clone ====&lt;br /&gt;
Se vogliamo eseguire operazioni di scrittura su una snapshot occorre effettuare un clone del dataset&lt;br /&gt;
 # zfs snapshot ''rpool/home''@yesterday&lt;br /&gt;
 # zfs clone ''rpool/home''@yesterday rpool/new_home&lt;br /&gt;
&lt;br /&gt;
Per sostituire il filesystem principale col clone&lt;br /&gt;
 # zfs promote rpool/new_home&lt;br /&gt;
&lt;br /&gt;
=== ZFS Cifrato ===&lt;br /&gt;
Creare un dataset cifrato con password&lt;br /&gt;
 # zfs create -o encryption=on -o keyformat=''password'' ''nomepool''/''nomedataset''&lt;br /&gt;
&lt;br /&gt;
Generazione di una chiave di cifratura&lt;br /&gt;
 # dd if=/dev/random of=/path/to/key bs=1 count=32&lt;br /&gt;
&lt;br /&gt;
Creare un dataset cifrato con una chiave di cifratura &lt;br /&gt;
 # zfs create -o encryption=on -o keyformat=raw -o keylocation=''file:///directory/della/chiave'' ''nomepool''/''nomedataset''&lt;br /&gt;
&lt;br /&gt;
Controllare il percorso della chiave per ''nomepool''/''nomedataset''&lt;br /&gt;
 # zfs get keylocation ''nomepool''/''nomedataset''&lt;br /&gt;
&lt;br /&gt;
Cambiare il percorso della chiave&lt;br /&gt;
 # zfs set keylocation=''file:///nuova/directory/della/chiave'' ''nomepool''/''nomedataset''&lt;br /&gt;
&lt;br /&gt;
Caricare manualmente le chiavi di cifratura prima del montaggio&lt;br /&gt;
 # zfs load-key ''nomepool''/''nomedataset'' # carica la chiave del determinato dataset&lt;br /&gt;
 # zfs load-key -a # carica tutte le chiavi del filesystem&lt;br /&gt;
&lt;br /&gt;
==== Unlock con systemd ====&lt;br /&gt;
Creare script per il caricamento delle chiavi all'avvio &lt;br /&gt;
&lt;br /&gt;
* Caricando la password dal keyfile&lt;br /&gt;
''/etc/systemd/system/zfs-loadkey-file.service''&lt;br /&gt;
&lt;br /&gt;
 [Unit]&lt;br /&gt;
 Description=Load ZFS encryption keys&lt;br /&gt;
 DefaultDependencies=no&lt;br /&gt;
 After=zfs-import.target&lt;br /&gt;
 Before=zfs-mount.service&lt;br /&gt;
 [Service]&lt;br /&gt;
 Type=oneshot&lt;br /&gt;
 RemainAfterExit=yes&lt;br /&gt;
 ExecStart=/usr/sbin/zfs load-key -a&lt;br /&gt;
 StandardInput=tty-force&lt;br /&gt;
 [Install]&lt;br /&gt;
 WantedBy=zfs-mount.service&lt;br /&gt;
&lt;br /&gt;
* Digitando la password&lt;br /&gt;
&lt;br /&gt;
''/etc/systemd/system/zfs-load-key@.service''&lt;br /&gt;
 [Unit]&lt;br /&gt;
 Description=Load %I encryption keys&lt;br /&gt;
 Before=systemd-user-sessions.service zfs-mount.service&lt;br /&gt;
 After=zfs-import.target&lt;br /&gt;
 Requires=zfs-import.target&lt;br /&gt;
 DefaultDependencies=no&lt;br /&gt;
 [Service]&lt;br /&gt;
 Type=oneshot&lt;br /&gt;
 RemainAfterExit=yes&lt;br /&gt;
 ExecStart=/bin/sh -c 'until (systemd-ask-password &amp;quot;Encrypted ZFS password for %I&amp;quot; --no-tty | zfs load-key %I); do echo &amp;quot;Try again!&amp;quot;; done'&lt;br /&gt;
 [Install]&lt;br /&gt;
 WantedBy=zfs-mount.service&lt;br /&gt;
&lt;br /&gt;
==== Unlock al login ====&lt;br /&gt;
Impostare il filesystem in modalità legacy così che non sia montato automaticamente all'avvio&lt;br /&gt;
 # zfs set mountpoint=legacy zroot/data/&lt;br /&gt;
&lt;br /&gt;
Modificare il file /etc/fstab&lt;br /&gt;
 zroot/data/         /home           zfs             rw,xattr,posixacl,noauto        0 0&lt;br /&gt;
&lt;br /&gt;
Creare il seguente script: &amp;lt;code&amp;gt;/sbin/mount-zfs-homedir&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 #&lt;br /&gt;
 set -eu&lt;br /&gt;
 # Password is given to us via stdin, save it in a variable for later&lt;br /&gt;
 PASS=$(cat -)&lt;br /&gt;
 #&lt;br /&gt;
 VOLNAME=&amp;quot;zroot/data/home&amp;quot;&lt;br /&gt;
 #&lt;br /&gt;
 # Unlock and mount the volume&lt;br /&gt;
 zfs load-key &amp;quot;$VOLNAME&amp;quot; &amp;lt;&amp;lt;&amp;lt; &amp;quot;$PASS&amp;quot; || continue&lt;br /&gt;
 zfs mount &amp;quot;$VOLNAME&amp;quot; || true # ignore errors&lt;br /&gt;
&lt;br /&gt;
Aggiungere lo script a PAM: /etc/pam.d/system-auth&lt;br /&gt;
&lt;br /&gt;
 auth       optional                    pam_exec.so          expose_authtok /sbin/mount-zfs-homedir&lt;br /&gt;
&lt;br /&gt;
=== Cache ===&lt;br /&gt;
Utilizzare un moderno disco a stato solido può essere una soluzione economica per velocizzare un pool, eventualmente anche raid&lt;br /&gt;
&lt;br /&gt;
 # zpool add -f ''rpool'' cache /dev/sdd1&lt;br /&gt;
 # zpool add -f ''rpool'' log /dev/sdd2&lt;br /&gt;
&lt;br /&gt;
=== Sharing ===&lt;br /&gt;
Non è molto noto, ma ZFS ha integrati dei [https://docs.oracle.com/cd/E36784_01/html/E36835/gayne.html#scrolltoc comandi] per permettere la condivisione del filesystem con altre macchine tramite i protocolli NFS o SMB.&lt;br /&gt;
&lt;br /&gt;
Premessa: occorrerà attivare il server NFS&lt;br /&gt;
 # systemctl start nfs-server.service&lt;br /&gt;
 # systemctl enable nfs-server.service&lt;br /&gt;
&lt;br /&gt;
Condividere tramite NFS l'intero pool ''home''&lt;br /&gt;
 # zfs set share.nfs=on ''pool''/home&lt;br /&gt;
&lt;br /&gt;
Verificare la condivisione&lt;br /&gt;
 # zfs get -r share.nfs ''pool''/home&lt;br /&gt;
 NAME             PROPERTY   VALUE  SOURCE&lt;br /&gt;
 pool/home        share.nfs  on     local&lt;br /&gt;
&lt;br /&gt;
Condividere tramite NFS la directory home dell'utente 1, 2...&lt;br /&gt;
 # zfs create ''pool''/home/'''utente1'''&lt;br /&gt;
 # zfs create ''pool''/home/'''utente2'''&lt;br /&gt;
&lt;br /&gt;
Si possono specificare opzioni di montaggio per i permessi sul mount&lt;br /&gt;
 # zfs set share.nfs.nosuid=on ''pool''/home/'''utente1'''&lt;br /&gt;
 # zfs set share.nfs=on ''pool''/home/'''utente1'''&lt;br /&gt;
&lt;br /&gt;
Condividere una directory con tutta la rete&lt;br /&gt;
 # zfs share -o share.nfs=on -o share.nfs.public=on pool/public%pubshare&lt;br /&gt;
&lt;br /&gt;
Condividere una directory con una parte della rete&lt;br /&gt;
 # zfs set share.nfs='rw=@192.0.10.0/16,rw=@192.0.11.0/24' pool/public%pubshare&lt;br /&gt;
&lt;br /&gt;
Disabilitare temporaneamente una condivisione&lt;br /&gt;
 # zfs unshare pool/home/''nomeshare''&lt;br /&gt;
&lt;br /&gt;
Rimuovere una condivisione&lt;br /&gt;
 # zfs set share.nfs=off pool/''share''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Montare share ===&lt;br /&gt;
Montare il volume pool1 della macchina con IP 192.168.0.2 su /mnt/pool1&lt;br /&gt;
 # mount -t nfs 192.168.0.2:/pool1 /mnt/pool1&lt;br /&gt;
&lt;br /&gt;
Aggiungere la seguente riga al file '''/etc/fstab''' per automatizzare il montaggio&lt;br /&gt;
 192.168.0.2:/pool1      /mnt/pool1      nfs       defaults          0          0&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== SWAP ===&lt;br /&gt;
Creare una partizione swap da 8 GiB&lt;br /&gt;
 # zfs create -V 8G '''&amp;lt;pool&amp;gt;/swap'''&lt;br /&gt;
&lt;br /&gt;
Formattazione della partizione&lt;br /&gt;
 # mkswap -f /dev/zvol/&amp;lt;pool&amp;gt;/swap&lt;br /&gt;
&lt;br /&gt;
Attivazione della swap&lt;br /&gt;
 # swapon /dev/zvol/&amp;lt;pool&amp;gt;/swap&lt;br /&gt;
&lt;br /&gt;
Aggiungere la swap al &amp;lt;code&amp;gt;/etc/fstab&amp;lt;/code&amp;gt;&lt;br /&gt;
 '''/dev/zvol/&amp;lt;pool&amp;gt;/swap''' none swap discard 0 0&lt;br /&gt;
&lt;br /&gt;
== Filesystem Cifrato ==&lt;br /&gt;
Esistono molti modi per cifrare volumi e file su Linux, come si può vedere da questa [https://wiki.archlinux.org/title/Data-at-rest_encryption#Comparison_table tabella]&lt;br /&gt;
&lt;br /&gt;
* Generare una password di 32 caratteri alfanumerici con /dev/random. &lt;br /&gt;
 cat /dev/random | tr -dc '[:alnum:]' | fold -w 32 | head -n 1&lt;br /&gt;
&lt;br /&gt;
=== EncFS ===&lt;br /&gt;
Cifrare una directory può essere un'alternativa alla cifratura di un intera partizione come avviene invece con Cryptsetup. EncFS è un filesystem user-space montabile tramite FUSE che permette di effettuare questa operazione. Rispetto ad un filesystem loopback criptato ci sono però diversi pregi e difetti.&lt;br /&gt;
&lt;br /&gt;
* Pro&lt;br /&gt;
# Selezionare selettivamente i contenuti da cifrare, rispetto ad avere un device completamente cifrato, appesantisce meno il lavoro della CPU specialmente quando si utilizzano processori datati privi del set di istruzioni AES.&lt;br /&gt;
# Dimensioni modificabili: un file system vuoto EncFS è composto da qualche dozzina di byte e può crescere a qualsiasi dimensione senza bisogno di essere riformattato. Con un dispositivi di cifratura a blocchi, si alloca un filesystem in anticipo con le dimensioni desiderate.&lt;br /&gt;
# Possibilità di backup incrementali: Un filesystem EncFS può essere salvato con una politica per file. Un programma di backup è in grado di rilevare quali file sono cambiati, anche se non sarà in grado di decifrarli.&lt;br /&gt;
# Permette di aggiungere la crittografia a qualsiasi filesystem&lt;br /&gt;
# Lavora a livello utente, non richiede permessi di amministratore&lt;br /&gt;
&lt;br /&gt;
* Contro&lt;br /&gt;
# Non permette di cifrare l'intera installazione, ma solo i file selezionati&lt;br /&gt;
# Chi ha accesso ai file crittografati può conoscerne i meta-dati (numero di file, permessi, dimensione)&lt;br /&gt;
# EncFS sembra non sia più attivamente mantenuto. Un'alternativa molto simile potrebbe essere gocryptfs.&lt;br /&gt;
&lt;br /&gt;
==== Montaggio automatico ====&lt;br /&gt;
Dato che non è possibile passare opzioni all'eseguibile encfs su fstab è necessario creare un wrapper, cioè uno script da rendere eseguibile (es. &amp;lt;code&amp;gt;/home/user/encfs.sh&amp;lt;/code&amp;gt;) che vada a recuperare la password da un file (es. ''encfs_password''), magari contenuto in una chiavetta USB anch'essa montata automaticamente all'avvio.&lt;br /&gt;
&lt;br /&gt;
Wrapper&lt;br /&gt;
 #!/bin/sh&lt;br /&gt;
 encfs --public --extpass=&amp;quot;cat /mnt/USB/encfs_password&amp;quot; $*&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
A questo punto è possibile aggiungere all'''/etc/fstab'' le seguenti righe.&lt;br /&gt;
 # Montaggio automatico della penna USB ''cafebabe-b00b5-deadbee'' all'avvio&lt;br /&gt;
 UUID=cafebabe-b00b5-deadbeef /mnt/USB auto defaults,auto 0 0&lt;br /&gt;
 # Richiamo del wrapper &lt;br /&gt;
 /home/''user''/encfs.sh#/home/''user''/.encrypted /home/''user''/decrypted fuse rw,user,auto 0 0&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== gocryptfs ===&lt;br /&gt;
Creare una directory cifrata ''crypt'' e montarla su ''dati''&lt;br /&gt;
 $ mkdir crypt dati&lt;br /&gt;
 $ gocryptfs -init crypt&lt;br /&gt;
 $ gocryptfs crypt dati&lt;br /&gt;
&lt;br /&gt;
Creare una versione cifrata di una preesistente home&lt;br /&gt;
&lt;br /&gt;
 $ mkdir /home/user.crypt&lt;br /&gt;
 $ gocryptfs -init -reverse /home/user&lt;br /&gt;
 $ gocryptfs -reverse /home/user /home/user.crypt&lt;br /&gt;
&lt;br /&gt;
È possibile aggiungere una linea simile alle seguente al file '''/etc/fstab''' per automatizzare il sistema di montaggio di una cartella cifrata durante il boot utilizzando un keyfile.&lt;br /&gt;
&lt;br /&gt;
 /home/user/cipher /home/user/plain fuse./usr/bin/gocryptfs nofail,allow_other,passfile=/tmp/password 0 0&lt;br /&gt;
&lt;br /&gt;
=== [https://wiki.archlinux.org/title/ECryptfs ECryptfs] ===&lt;br /&gt;
&lt;br /&gt;
=== VeraCrypt ===&lt;br /&gt;
[https://www.veracrypt.fr VeraCrypt] (fork di TrueCrypt) è un tool opensource dotato di '''interfaccia grafica''' che permette di configurare la cifratura di volumi reali o file immagini montate in loop. Ha una funzione particolare, chiamata '''Hidden Volume''' che permette di creare un volume nascosto all'interno di un normale volume VeraCrypt al quale si può accedere con una diversa password così da evitare in caso di necessità (ricatto, fidanzata/moglie gelosa, imposizione da parte delle forze dell'ordine) di mostrare il contenuto del reale archivio cifrato.&lt;br /&gt;
&lt;br /&gt;
=== LUKS ===&lt;br /&gt;
Questo strumento permette di crittografare un intero disco o una partizione, es. /dev/'''sdc2''':&lt;br /&gt;
 &lt;br /&gt;
 # cryptsetup luksFormat --cipher aes-xts-plain64 --key-size 512 --hash sha512 --iter-time 5000 /dev/'''sdc2'''&lt;br /&gt;
 &lt;br /&gt;
Una volta formattato il device è possibile montarlo, verrà chiesto di creare una password a meno che nel comando non venga esplicitato un file con la chiave di cifratura&lt;br /&gt;
 # cryptsetup open /dev/'''sdc2''' lukspart&lt;br /&gt;
&lt;br /&gt;
Adesso è possibile formattare il device col filesystem che preferiamo&lt;br /&gt;
 # mkfs.btrfs /dev/mapper/lukspart&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[https://wiki.golem.linux.it/Installare_Arch_Linux_in_una_partizione_cifrata How-to GOLEM]&lt;br /&gt;
&lt;br /&gt;
[https://guide.debianizzati.org/index.php/Volumi_criptati_LUKS_-_Creazione_e_uso_con_cryptmount How-to Debianizzati]&lt;br /&gt;
&lt;br /&gt;
=== fscrypt ===&lt;br /&gt;
È un sistema di cifratura progettato per lavorare con filesystem moderni che supportano direttamente la crittografia nativa come ext4, F2FS, UBIFS, CephFS e forse in futuro anche btrfs. &lt;br /&gt;
&lt;br /&gt;
Abilitiamo la crittografia su una directory di un device '''sdc1''' precedentemente formattato con ext4&lt;br /&gt;
 # fscrypt setup /mnt/encrypted&lt;br /&gt;
 # tune2fs -O encrypt /dev/'''sdc1'''&lt;br /&gt;
 # fscrypt encrypt /mnt/encrypted&lt;br /&gt;
&lt;br /&gt;
Per accedere alla directory al riavvio successivo&lt;br /&gt;
 # fscrypt unlock /mnt/encrypted&lt;br /&gt;
&lt;br /&gt;
=== ZFS ===&lt;br /&gt;
Creiamo un pool dove mettere il dataset cifrato, es.: '''tank/encrypted_data'''&lt;br /&gt;
 # zpool create tank /dev/sdc3&lt;br /&gt;
&lt;br /&gt;
Creiamo il dataset&lt;br /&gt;
 # zfs create -o encryption=aes-256-gcm -o keyformat=passphrase -o keylocation=prompt '''tank/encrypted_data'''&lt;br /&gt;
 &lt;br /&gt;
Montiamo il datasett&lt;br /&gt;
  # zfs mount '''tank/encrypted_data'''&lt;br /&gt;
&lt;br /&gt;
Montiamo pool e dataset cifrato al riavvio successivo &lt;br /&gt;
 # zpool import tank&lt;br /&gt;
 # zfs load-key '''tank/encrypted_data'''&lt;br /&gt;
 # zfs mount '''tank/encrypted_data'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Appunti_Arch_Linux#ZFS_Cifrato|ZFS cifrato]]&lt;br /&gt;
&lt;br /&gt;
= RAID mdadm =&lt;br /&gt;
Su Linux era possibile effettuare RAID via software anche prima dell'avvento di filesystem di nuova generazione come btrfs o zfs. Per fare ciò è possibile utilizzare il comando &amp;lt;code&amp;gt;mdadm&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Vedere l'organizzazione della tabella delle partizioni dei dischi&lt;br /&gt;
 $ lsblk&lt;br /&gt;
&lt;br /&gt;
 sda      8:16   0 447.1G  0 disk &lt;br /&gt;
 ├─sda1   8:17   0   500M  0 part &lt;br /&gt;
 ├─sda2   8:18   0    16G  0 part [SWAP]&lt;br /&gt;
 └─sda3   8:19   0 430.6G  0 part /&lt;br /&gt;
                                 &lt;br /&gt;
 sdb      8:32   1   3.7G  0 disk &lt;br /&gt;
 ├─sdb1   8:33   1   3.5G  0 part &lt;br /&gt;
 ├─sdb2   8:34   1   239M  0 part [SWAP]&lt;br /&gt;
 └─sdb3   8:19   0 430.6G  0 part /&lt;br /&gt;
&lt;br /&gt;
Nell'esempio ci sono due dischi (sda, sdb) contenenti 3 partizioni: EFI, SWAP e Linux.&lt;br /&gt;
&lt;br /&gt;
== RAID 0 ==&lt;br /&gt;
Creare un volume ''md3'' che costituito dalla somma delle due partizioni sda3 e sdb3&lt;br /&gt;
 # mdadm --create --verbose /dev/md3 --level=0 --raid-devices=2 /dev/sda3 /dev/sdb3&lt;br /&gt;
&lt;br /&gt;
Verificare che il raid funzioni correttamente&lt;br /&gt;
 # mdadm --detail /dev/md0&lt;br /&gt;
&lt;br /&gt;
Utilizzare il nuovo volume md3, formattato col filesystem XFS, per una nuova installazione di Arch Linux (montandolo in /mnt)&lt;br /&gt;
 # mkfs.xfs /dev/md3&lt;br /&gt;
 # mount /dev/md3 /mnt/&lt;br /&gt;
&lt;br /&gt;
Per memorizzare l'array nel file di configurazione&lt;br /&gt;
 # mdadm –Es &amp;gt; /etc/mdadm.conf&lt;br /&gt;
&lt;br /&gt;
== RAID 1 ==&lt;br /&gt;
Creare un volume ''md3'' mirror delle due partizioni sda3 e sdb3&lt;br /&gt;
 # mdadm --create /dev/md3 /dev/sda3 /dev/sdb3 --level=1 --raid-devices=2&lt;br /&gt;
&lt;br /&gt;
== RAID 5 ==&lt;br /&gt;
Creare un volume ''md3'' con un [https://en.wikipedia.org/wiki/Standard_RAID_levels#RAID_5 raid5], ovviamente stavolta occorreranno almeno 3 dischi es.: sda3, sdb3, sdc3. &lt;br /&gt;
&lt;br /&gt;
Per creare tre partizioni tutte della stessa dimensione è possibile copiare su sdb e sdc la tabella delle partizioni di sda&lt;br /&gt;
 #  sfdisk -d /dev/sda | sfdisk /dev/sdb&lt;br /&gt;
 #  sfdisk -d /dev/sda | sfdisk /dev/sdc&lt;br /&gt;
&lt;br /&gt;
Creare l'array in raid5&lt;br /&gt;
 # mdadm --create /dev/md/md3 /dev/sda1 /dev/sdb1 /dev/sdc1 --level=5 --raid-devices=3 --bitmap=internal&lt;br /&gt;
&lt;br /&gt;
== Modificare l'array ==&lt;br /&gt;
È possibile passare da raid1 a raid5&lt;br /&gt;
 # mdadm --grow /dev/md3 --level=5&lt;br /&gt;
 # mdadm --grow /dev/md3 --add /dev/sdc3 --raid-devices=3&lt;br /&gt;
&lt;br /&gt;
== Accorgersi di un guasto ==&lt;br /&gt;
Nei raid 1 e 5 in caso di danneggiamento di un disco sarà possibile sostituirlo e ricostruire l'array senza perdere dati. Nell'ipotesi di avere un guasto su '''sdb''' in un raid1 comparirà qualcosa di simile a questo eseguendo &amp;lt;code&amp;gt;cat /proc/mdstat&amp;lt;/code&amp;gt;&lt;br /&gt;
 md3 : active raid1 sda3[1]&lt;br /&gt;
 ''blocks [2/2] [U_]'' &lt;br /&gt;
invece che&lt;br /&gt;
 md3 : active raid1 sda3[1] '''sdb3'''[0]&lt;br /&gt;
      262016 blocks [2/2] [UU]&lt;br /&gt;
&lt;br /&gt;
===Rimuovere il disco danneggiato dal RAID===&lt;br /&gt;
Si dovrà marcare sdb3 come danneggiata e andrà rimossa dall'array.&lt;br /&gt;
 # mdadm --manage /dev/md3 --fail /dev/sdb3&lt;br /&gt;
 # mdadm --manage /dev/md3 --remove /dev/sdb3&lt;br /&gt;
&lt;br /&gt;
Se avessimo più array (es. md1, md2...) contenenti partizioni del disco sdb (sdb1, sdb2...), l'operazione andrebbe ripetuta per ciascuno di essi es.:&lt;br /&gt;
 # mdadm --manage /dev/md1 --fail /dev/sdb1&lt;br /&gt;
 # mdadm --manage /dev/md1 --remove /dev/sdb1&lt;br /&gt;
&lt;br /&gt;
 #  cat /proc/mdstat&lt;br /&gt;
 Personalities : [linear] [multipath] [raid0] [raid1] [raid5] [raid4] [raid6] [raid10]&lt;br /&gt;
 md0 : active raid1 sda3[0]&lt;br /&gt;
 24418688 blocks [2/1] [U_]&lt;br /&gt;
&lt;br /&gt;
 unused devices: &amp;lt;none&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Sostituzione del disco danneggiato ===&lt;br /&gt;
Spegnere il computer, rimuovere il disco guasto e collegarne al suo posto uno funzionante.&lt;br /&gt;
&lt;br /&gt;
'''NB: il nuovo disco dovrà essere di dimensioni uguali o maggiori del disco sostituito'''&lt;br /&gt;
&lt;br /&gt;
Installato il nuovo disco, riaccendere il PC, loggarsi come root e ricreare sul nuovo sdb le stesse partizioni presenti su sda:&lt;br /&gt;
 # sfdisk -d /dev/sda | sfdisk /dev/sdb&lt;br /&gt;
 # fdisk -l ''(per controllare che le partizioni siano uguali)''&lt;br /&gt;
&lt;br /&gt;
=== Ripristino del RAID 1 ===&lt;br /&gt;
Aggiungere ''/dev/sdb3'' a ''/dev/md3''&lt;br /&gt;
 # mdadm --manage /dev/md3 --add /dev/sdb3&lt;br /&gt;
&lt;br /&gt;
Se avessimo più array (es. md1, md2...) contenenti partizioni del disco sdb (sdb1, sdb2...), l'operazione andrebbe ripetuta per ciascuno di essi es.:&lt;br /&gt;
  # mdadm --manage /dev/md1 --add /dev/sdb1&lt;br /&gt;
&lt;br /&gt;
Controllare che tutto sia andato a buon fine&lt;br /&gt;
 # cat /proc/mdstat&lt;br /&gt;
&lt;br /&gt;
= LVM =&lt;br /&gt;
Il [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 Logical Volume Manager] (LVM o gestore logico dei volumi) è un software per la gestione dei dischi che permette di superare le limitazioni legate al normale partizionamento di questi ultimi. Si tratta di una specie di ''strato'' che si va a frapporre tra il dispositivo fisico ed il filesystem. Permette di gestire dinamicamente aggiunta, rimozione o ridimensionamento dello spazio di archiviazione, il RAID, nonché lo snapshot dei volumi.&lt;br /&gt;
&lt;br /&gt;
LVM è un prodotto oltremodo maturo, disponibile per Linux sin dal kernel 2.4, per questa ragione distribuzioni orientate al mercato aziendale come RedHat lo hanno scelto, accoppiandolo a XFS o ext4, come soluzione predefinita per implementare la maggior parte delle caratteristiche fornite dai moderni filesystem come BTRFS o ZFS &lt;br /&gt;
&lt;br /&gt;
LVM si basa sui seguenti concetti&lt;br /&gt;
&lt;br /&gt;
* '''Physical Volumes (PV)''': rappresentano qualsiasi disco si voglia inizializzare (&amp;quot;formattare&amp;quot;) come sottosistema LVM&lt;br /&gt;
 # pvcreate /dev/sda1&lt;br /&gt;
 # pvcreate /dev/sdb3&lt;br /&gt;
 # pvcreate /dev/sdc&lt;br /&gt;
 # pvdisplay&lt;br /&gt;
&lt;br /&gt;
* '''Volume Groups (VG)''': sono costituiti da ''physical volumes'' e rappresentano la capacità totale delle risorse di un LVM&lt;br /&gt;
 # vgcreate vg0 /dev/sda1 /dev/sdb3 /dev/sdc&lt;br /&gt;
 # vgdisplay vg0&lt;br /&gt;
&lt;br /&gt;
* '''Logical Volumes (LV)''': utilizzano le risorse messe a disposizione dai ''volume groups''. Possono essere inizializzati anche con proprietà di RAID o cache.&lt;br /&gt;
 # lvcreate -L 10G -n ''home'' vg0&lt;br /&gt;
 # lvdisplay /dev/vg0/home&lt;br /&gt;
&lt;br /&gt;
Oppure nel caso volessimo fare un raid5&lt;br /&gt;
 # lvcreate -n lvr5 –type raid5 -L 10G -i 3 vg0&lt;br /&gt;
 &lt;br /&gt;
 -n ''nome del volume''&lt;br /&gt;
 –type raid5 ''tipo di raid''&lt;br /&gt;
 -L ''dimensione massima della grandezza del raid''&lt;br /&gt;
 -i ''numero dei physical volumes che si vogliono utilizzare''&lt;br /&gt;
&lt;br /&gt;
Per formattare il volume logico appena creato&lt;br /&gt;
 # mkfs -t ext4 /dev/vg0/lvr5&lt;br /&gt;
&lt;br /&gt;
Per aggiungere un disco ad un Volume Groups&lt;br /&gt;
 # vgextend vg0 /dev/sdb2&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Snapshot ==&lt;br /&gt;
Creare uno snapshot della del volume logico ''/home'' che potrà contenere fino ad un massimo di 5 GiB di dati modificati rispetto all'originale&lt;br /&gt;
 # lvcreate --size 5G --snapshot --name homesnap20230306 /dev/vg0/home&lt;br /&gt;
&lt;br /&gt;
Ripristinare il volume logico ricaricando lo snapshot&lt;br /&gt;
 # lvconvert --merge /dev/vg0/homesnap20230306&lt;br /&gt;
&lt;br /&gt;
Nel caso il logical volume sia attivo il merging avverrà col prossimo riavvio e lo snapshot sparirà.&lt;br /&gt;
&lt;br /&gt;
== Cache ==&lt;br /&gt;
Utilizzare un moderno disco a stato solido può essere una soluzione economica per velocizzare un LV.&lt;br /&gt;
&lt;br /&gt;
Convertire il disco a PV ed aggiungerlo al preesistente VG&lt;br /&gt;
 # pvcreate ''/dev/discoSSD''&lt;br /&gt;
 # vgextend vg0 ''/dev/discoSSD''&lt;br /&gt;
&lt;br /&gt;
Aggiungere la cache al LV&lt;br /&gt;
 # lvcreate --type cache --cachemode writethrough -l 100%FREE -n root_cachepool vg0/home ''/dev/discoSSD''&lt;br /&gt;
&lt;br /&gt;
Rimuovere la cache dal LV&lt;br /&gt;
 # lvconvert --uncache vg0/home&lt;br /&gt;
&lt;br /&gt;
= GRUB (Boot loader) =&lt;br /&gt;
È 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.&lt;br /&gt;
&lt;br /&gt;
== Sistema con BIOS ==&lt;br /&gt;
 # pacman -S grub&lt;br /&gt;
 # grub-mkconfig -o /boot/grub/grub.cfg&lt;br /&gt;
 # grub-install /dev/sda&lt;br /&gt;
&lt;br /&gt;
== Sistema UEFI ==&lt;br /&gt;
'''NB: per installare correttamente GRUB su un sistema UEFI occorre che il device di installazione abbia effettuato il boot in modalità UEFI e non Legacy (BIOS)'''&lt;br /&gt;
&lt;br /&gt;
 # pacman -S grub&lt;br /&gt;
 # mkdir /boot/EFI&lt;br /&gt;
 # mount /dev/sda1 /boot/EFI&lt;br /&gt;
 # grub-install /dev/sda&lt;br /&gt;
 # grub-mkconfig -o /boot/grub/grub.cfg&lt;br /&gt;
&lt;br /&gt;
== Gestione snapshot BTRFS ==&lt;br /&gt;
&lt;br /&gt;
=== Manuale ===&lt;br /&gt;
Editare ''/etc/grub.d/40_custom'' (o crearlo) e aggiungere quanto segue per permettere l'avvio della snapshot ''rootsnap''&lt;br /&gt;
&lt;br /&gt;
 menuentry 'Linux snapshot' {&lt;br /&gt;
        insmod gzio&lt;br /&gt;
        insmod part_gpt&lt;br /&gt;
        insmod btrfs&lt;br /&gt;
        set root='hd1,gpt3'&lt;br /&gt;
        linux   /rootsnap/boot/vmlinuz-linux root=/dev/partizione rw rootflags=subvol=rootsnap  quiet&lt;br /&gt;
        initrd  /rootsnap/boot/initramfs-linux.img&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
dopodichè aggiornare la configurazione di GRUB con&lt;br /&gt;
 # grub-mkconfig -o /boot/grub/grub.cfg&lt;br /&gt;
&lt;br /&gt;
=== Automatico ===&lt;br /&gt;
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.&lt;br /&gt;
 # pacman -S grub-btrfs&lt;br /&gt;
&lt;br /&gt;
Ogni volta che si vorrà aggiornare grub con nuovi subvolumi basterà dare il seguente comando&lt;br /&gt;
&lt;br /&gt;
 # grub-mkconfig -o /boot/grub/grub.cfg&lt;br /&gt;
&lt;br /&gt;
== Ripristinare GRUB ==&lt;br /&gt;
Aggiornando la propria distribuzione Linux, il proprio boot loader o installando un altro sistema operativo (es. Windows) può capitare di sovrascrivere il [http://it.wikipedia.org/wiki/Master_boot_record MBR].&lt;br /&gt;
&lt;br /&gt;
Avviare il computer con un liveCD/DVD o USB: &lt;br /&gt;
* [http://archlinux.mirror.garr.it/archlinux/iso/latest/archlinux-x86_64.iso Archlinux]&lt;br /&gt;
* [http://www.sysresccd.org/Download Systemrescuecd]&lt;br /&gt;
* [http://grml.org/download/ grml]&lt;br /&gt;
* [http://na.mirror.garr.it/mirrors/ubuntu-releases/ Ubuntu]&lt;br /&gt;
&lt;br /&gt;
Ipotizziamo di avere una partizione / chiamata /dev/sda2 e nessuna /boot&lt;br /&gt;
&lt;br /&gt;
Creiamo i seguenti mount point&lt;br /&gt;
 # sudo su&lt;br /&gt;
 # cd /mnt&lt;br /&gt;
 # mkdir sda2&lt;br /&gt;
 # mount /dev/sda2 /mnt/sda2&lt;br /&gt;
&lt;br /&gt;
Se utilizziamo una scheda madre UEFI andrà montata anche la partizione efi (solitamente è la prima partizione del disco ''sda1'')&lt;br /&gt;
 # mount /dev/sda2 /mnt/sda2/boot/efi&lt;br /&gt;
&lt;br /&gt;
Se necessario editiamo il file di configurazione di grub&lt;br /&gt;
  # nano /mnt/sda2/boot/grub/grub.cfg&lt;br /&gt;
&lt;br /&gt;
=== arch-chroot ===&lt;br /&gt;
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&lt;br /&gt;
&lt;br /&gt;
 # arch-chroot /mnt/sda2&lt;br /&gt;
&lt;br /&gt;
=== Manuale ===&lt;br /&gt;
 # mount --rbind /dev /mnt/sda2/dev&lt;br /&gt;
 # mount -t proc /proc /mnt/sda2/proc&lt;br /&gt;
 # mount -t sysfs /sys /mnt/sda2/sys/&lt;br /&gt;
&lt;br /&gt;
Eseguiamo il vero e proprio chroot in /dev/sda2&lt;br /&gt;
 # chroot /mnt/sda2&lt;br /&gt;
&lt;br /&gt;
=== Reinstallazione ===&lt;br /&gt;
 # grub-mkconfig -o /boot/grub/grub.cfg&lt;br /&gt;
 # grub-install /dev/sda&lt;br /&gt;
&lt;br /&gt;
=== Riavvio del sistema ===&lt;br /&gt;
Usciamo dal chroot, smontiamo la partizione e riavviamo il sistema&lt;br /&gt;
 # exit&lt;br /&gt;
 # umount /mnt/sda1/proc&lt;br /&gt;
 # umount /mnt/sda1/dev&lt;br /&gt;
 # umount /mnt/sda1&lt;br /&gt;
 # systemctl reboot&lt;br /&gt;
&lt;br /&gt;
== Eliminare il boot loader ==&lt;br /&gt;
In caso di errori nell'installazione di GRUB è possibile cancellare il vecchio boot loader di un disco (&amp;lt;code&amp;gt;''devicename'' = sda,sdb,sdc...&amp;lt;/code&amp;gt;)&lt;br /&gt;
 # dd if=/dev/zero of=''/dev/devicename'' bs=446 count=1&lt;br /&gt;
&lt;br /&gt;
== ISOBoot ==&lt;br /&gt;
Con GRUB2 è possibile effettuare il boot di iso di LiveCD/USB Linux presenti sul disco aggiungendole su &amp;lt;code&amp;gt;/etc/grub.d/40_custom &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Ubuntu 23.04&lt;br /&gt;
 menuentry &amp;quot;Ubuntu 23.04 desktop ISO&amp;quot; {&lt;br /&gt;
        insmod part_gpt&lt;br /&gt;
        insmod ext2&lt;br /&gt;
        insmod btrfs&lt;br /&gt;
        rmmod tpm&lt;br /&gt;
     # es.: terza partizione del primo disco&lt;br /&gt;
        set root=(hd0,gpt3)&lt;br /&gt;
        set isofile=&amp;quot;/home/'''&amp;lt;username&amp;gt;'''/Downloads/ubuntu-23.04-desktop-amd64.iso&amp;quot;&lt;br /&gt;
        loopback loop $isofile&lt;br /&gt;
        linux (loop)/casper/vmlinuz boot=casper iso-scan/filename=$isofile quiet splash&lt;br /&gt;
        initrd (loop)/casper/initrd&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
= Networking =&lt;br /&gt;
&lt;br /&gt;
== Manuale ==&lt;br /&gt;
===net-tools===&lt;br /&gt;
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 [https://lists.debian.org/debian-devel/2009/03/msg00780.html obsoleta]. Tra i suoi comandi principali: arp, hostname, ifconfig, iptunnel netstat e route.&lt;br /&gt;
&lt;br /&gt;
Attivare l'interfaccia di rete eth0 ed assegnarle l'indirizzo ip 192.168.0.2&lt;br /&gt;
 # ifconfig eth0 192.168.0.2 up&lt;br /&gt;
&lt;br /&gt;
Disattivare l'interfaccia di rete eth0&lt;br /&gt;
 # ifconfig eth0 down&lt;br /&gt;
&lt;br /&gt;
Assegnare manualmente un gateway (es.: 192.168.0.1) alla rete&lt;br /&gt;
 # route add default gw 192.168.0.1&lt;br /&gt;
&lt;br /&gt;
Ovviamente occorrerà aggiungere un server DNS al file &amp;lt;code&amp;gt;/etc/resolv.conf&amp;lt;/code&amp;gt; per la risoluzione degli indirizzi.&lt;br /&gt;
&lt;br /&gt;
=== iproute2 ===&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|+ Conversione comandi da net-tools a iproute2&lt;br /&gt;
|-&lt;br /&gt;
! net-tools&lt;br /&gt;
! iproute2&lt;br /&gt;
! Note&lt;br /&gt;
|-&lt;br /&gt;
| ifconfig&lt;br /&gt;
| ip addr, ip link&lt;br /&gt;
| Address and link configuration&lt;br /&gt;
|-&lt;br /&gt;
| route&lt;br /&gt;
| ip route&lt;br /&gt;
| Routing tables&lt;br /&gt;
|-&lt;br /&gt;
| arp&lt;br /&gt;
| ip neigh&lt;br /&gt;
| Neighbors&lt;br /&gt;
|-&lt;br /&gt;
| iptunnel&lt;br /&gt;
| ip tunnel&lt;br /&gt;
| Tunnels&lt;br /&gt;
|-&lt;br /&gt;
| nameif, ifrename&lt;br /&gt;
| ip link set name&lt;br /&gt;
| Rename network interfaces&lt;br /&gt;
|-&lt;br /&gt;
| ipmaddr&lt;br /&gt;
| ip maddr&lt;br /&gt;
| Multicast&lt;br /&gt;
|-&lt;br /&gt;
| netstat&lt;br /&gt;
| ss, ip route&lt;br /&gt;
| Show various networking statistics&lt;br /&gt;
|-&lt;br /&gt;
| brctl&lt;br /&gt;
| bridge&lt;br /&gt;
| Handle bridge addresses and devices&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Elencare gli indirizzi IP: &lt;br /&gt;
 # ip addr&lt;br /&gt;
&lt;br /&gt;
Mostra le informazioni di una specifica interfaccia di rete&lt;br /&gt;
 # ip addr show ''eth0''&lt;br /&gt;
&lt;br /&gt;
Aggiungere un indirizzo all'interfaccia eth0:&lt;br /&gt;
 # ip addr add 192.0.2.10/24 dev eth0&lt;br /&gt;
&lt;br /&gt;
Cancellare un indirizzo associato all'interfaccia eth0:&lt;br /&gt;
 # ip addr delete 192.0.2.10/24 dev eth0&lt;br /&gt;
&lt;br /&gt;
Attivare l'interfaccia eth0:&lt;br /&gt;
 # ip link set dev eth0 up&lt;br /&gt;
&lt;br /&gt;
Disattivare l'interfaccia eth0:&lt;br /&gt;
 # ip link set dev eth0 down&lt;br /&gt;
&lt;br /&gt;
Svuotare la cache arp per tutte le interfacce:&lt;br /&gt;
 # ip neigh flush all&lt;br /&gt;
&lt;br /&gt;
Aggiungere una rotta che passa per gateway 192.0.2.1&lt;br /&gt;
 # ip route add default via 192.0.2.1&lt;br /&gt;
&lt;br /&gt;
Aggiungere una rotta che passa per gateway 192.168.2.1 per l'interfaccia 10.0.2.0&lt;br /&gt;
 # ip route add 10.0.2.1/24 via 192.168.0.1 dev enp0s3&lt;br /&gt;
&lt;br /&gt;
Rimuovere la rotta che passa per gateway 192.168.2.1 per l'interfaccia 10.0.2.0&lt;br /&gt;
 # ip route del 10.0.2.0/24 via 192.168.0.1 dev enp0s3 &lt;br /&gt;
&lt;br /&gt;
Mostrare la tabella di routing&lt;br /&gt;
 # ip route show&lt;br /&gt;
&lt;br /&gt;
== Systemd-networkd==&lt;br /&gt;
'''[https://wiki.archlinux.org/title/Systemd-networkd systemd-networkd'''] è un demone, parte di systemd, che gestisce la configurazione della rete.&lt;br /&gt;
&lt;br /&gt;
=== Esempi di configurazione ===&lt;br /&gt;
Per prima cosa sarà necessario abilitare il servizio&lt;br /&gt;
 # systemctl enable --now systemd-networkd.service&lt;br /&gt;
 # systemctl enable --now systemd-resolved.service&lt;br /&gt;
 # ln -rsf /run/systemd/resolve/stub-resolv.conf /etc/resolv.conf&lt;br /&gt;
&lt;br /&gt;
==== DHCP ====&lt;br /&gt;
/etc/systemd/network/20-wired.network&lt;br /&gt;
 [Match]&lt;br /&gt;
 Name=enp1s0&lt;br /&gt;
 [Network]&lt;br /&gt;
 DHCP=yes&lt;br /&gt;
&lt;br /&gt;
==== IP statico ====&lt;br /&gt;
/etc/systemd/network/20-wired.network&lt;br /&gt;
 [Match]&lt;br /&gt;
 Name=enp1s0&lt;br /&gt;
 [Network]&lt;br /&gt;
 Address=10.1.10.9/24&lt;br /&gt;
 Gateway=10.1.10.1&lt;br /&gt;
 DNS=10.1.10.1&lt;br /&gt;
&lt;br /&gt;
==== Wireless adapter ====&lt;br /&gt;
Per potersi connettere a connessioni WIFI è necessario installare e configurare un'ulteriore applicazione dedicata come '''iwd''' o '''wpa_supplicant''' per l'autenticazione alla rete.&lt;br /&gt;
&lt;br /&gt;
/etc/systemd/network/25-wireless.network&lt;br /&gt;
 [Match]&lt;br /&gt;
 Name=wlp2s0&lt;br /&gt;
 [Network]&lt;br /&gt;
 DHCP=yes&lt;br /&gt;
 IgnoreCarrierLoss=3s&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Rinominare l'interfaccia di rete ====&lt;br /&gt;
Invece che impostare una regola su udev è possibile usare un file di testo .link nel seguente modo&lt;br /&gt;
&lt;br /&gt;
/etc/systemd/network/''10-ethusb0.link''&lt;br /&gt;
 [Match]&lt;br /&gt;
 MACAddress=12:34:56:78:90:ab&lt;br /&gt;
 [Link]&lt;br /&gt;
 Description=USB to Ethernet Adapter&lt;br /&gt;
 Name=''ethusb0''&lt;br /&gt;
&lt;br /&gt;
== Wifi ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! [https://wiki.archlinux.org/title/Network_configuration/Wireless#Utilities Programmi] !! [https://wireless.wiki.kernel.org/en/developers/documentation/wireless-extensions WEXT] !! [https://wireless.wiki.kernel.org/en/developers/documentation/nl80211 nl80211] !! WEP !! WPA&lt;br /&gt;
|-&lt;br /&gt;
| [https://hewlettpackard.github.io/wireless-tools/Tools.html wireless_tools] || Sì || No || Sì || No&lt;br /&gt;
|-&lt;br /&gt;
| [https://wireless.wiki.kernel.org/en/users/documentation/iw iw] || No || Sì || Sì || No&lt;br /&gt;
|-&lt;br /&gt;
| [https://wiki.archlinux.org/title/wpa_supplicant wpa_supplicant] || Sì || Sì || No || Sì&lt;br /&gt;
|-&lt;br /&gt;
| [https://wiki.archlinux.org/title/Iwd iwd]/iwgtk || No || Sì || No || Sì&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== NetworkManager ==&lt;br /&gt;
[https://networkmanager.dev/ NetworkManager] è l'utility che si è imposta come standard per la configurazione della reti Linux (LAN e Wifi)&lt;br /&gt;
&lt;br /&gt;
Si compone di un demone, un'interfaccia da riga di comando [https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/9/html/configuring_basic_system_settings/assembly_configuring-and-managing-network-access_configuring-basic-system-settings#configuring-a-static-ethernet-connection-using-nmcli_assembly_configuring-and-managing-network-access (nmcli)] ed un'interfaccia di configurazione basata su un menu testuale ([https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/9/html/configuring_basic_system_settings/assembly_configuring-and-managing-network-access_configuring-basic-system-settings nmtui]). &lt;br /&gt;
&lt;br /&gt;
I principali desktop enviroment come GNOME e KDE Plasma possiedono una utility grafica che consente loro di configurare graficamente le reti basandosi su NetworkManager.&lt;br /&gt;
&lt;br /&gt;
=== Installazione ===&lt;br /&gt;
 # pacman -S networkmanager &lt;br /&gt;
 # systemctl enable NetworkManager&lt;br /&gt;
 # systemctl start NetworkManager&lt;br /&gt;
&lt;br /&gt;
==== Configurazione  ====&lt;br /&gt;
* 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 &amp;lt;code&amp;gt;nmtui&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Per chi dovesse prediligere la configurazione manuale: &amp;lt;code&amp;gt;nmcli&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Per impedire a Network Manager di gestire una certa interfaccia di rete è sufficiente aggiungere il suo MAC Address al file di configurazione &amp;lt;code&amp;gt;/etc/NetworkManager/NetworkManager.conf&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 [main]&lt;br /&gt;
 plugins=keyfile&lt;br /&gt;
 [keyfile]&lt;br /&gt;
 unmanaged-devices=mac:''00:25:21:73:90:72''&lt;br /&gt;
&lt;br /&gt;
=== Alternative ===&lt;br /&gt;
* [https://wiki.archlinux.org/title/ConnMan ConnMan]&lt;br /&gt;
&lt;br /&gt;
== Condividere la connessione ==&lt;br /&gt;
&lt;br /&gt;
=== Abilitazione del forwarding dei pacchetti ===&lt;br /&gt;
&lt;br /&gt;
 $ sudo echo 1 &amp;gt; /proc/sys/net/ipv4/ip_forward&lt;br /&gt;
&lt;br /&gt;
Per rendere il forwarding definitivo editare il file ''/etc/sysctl.conf'' modificando come segue il parametro net.ipv4.ip_forward:&lt;br /&gt;
&lt;br /&gt;
 net.ipv4.ip_forward = 1&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Mascheramento dei pacchetti ===&lt;br /&gt;
&lt;br /&gt;
 $ sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE&lt;br /&gt;
&lt;br /&gt;
''eth0'' non è un parametro fisso, identifica l'interfaccia con la quale il PC si connette ad Internet&lt;br /&gt;
&lt;br /&gt;
Per applicare automaticamente tale regola ad ogni riavvio&lt;br /&gt;
 # iptables-save &amp;gt; /etc/iptables.ipv4.nat&lt;br /&gt;
 # iptables-restore &amp;lt; /etc/iptables.ipv4.nat&lt;br /&gt;
&lt;br /&gt;
=== Moduli kernel ===&lt;br /&gt;
&lt;br /&gt;
Assicurarsi che siano caricati i seguenti moduli:&lt;br /&gt;
 # modprobe ip_tables&lt;br /&gt;
 # modprobe ip_conntrack&lt;br /&gt;
 # modprobe iptable_nat&lt;br /&gt;
 # modprobe ipt_MASQUERADE&lt;br /&gt;
&lt;br /&gt;
=== Condivisione tramite rete ethernet ===&lt;br /&gt;
&lt;br /&gt;
==== Configurazione scheda di rete interna ====&lt;br /&gt;
&lt;br /&gt;
Assegnare un IP statico alla scheda ethernet con la quale si vuol condividere la connessione.&lt;br /&gt;
&lt;br /&gt;
 # ifconfig eth1 192.168.5.1 netmask 255.255.255.0 up&lt;br /&gt;
&lt;br /&gt;
Per rendere tale configurazione permanente sarà necessario editare il file ''/etc/network/interfaces'' ed aggiungere la seguente configurazione&lt;br /&gt;
&lt;br /&gt;
 auto eth1&lt;br /&gt;
 iface eth1 inet static&lt;br /&gt;
 address 192.168.5.1&lt;br /&gt;
 netmask 255.255.255.0&lt;br /&gt;
&lt;br /&gt;
=== Condivisione tramite rete WI-FI ===&lt;br /&gt;
&lt;br /&gt;
==== Configurazione scheda wireless ====&lt;br /&gt;
&lt;br /&gt;
Se non si desidera cifrare la rete e proteggerla con una password sarà sufficiente eseguire questi comandi.&lt;br /&gt;
&lt;br /&gt;
 # iwconfig wlan0 mode Master&lt;br /&gt;
 # iwconfig wlan0 ESSID ReteGOLEM&lt;br /&gt;
 # iwconfig wlan0 enc off&lt;br /&gt;
 # ifconfig wlan0 192.168.5.1 netmask 255.255.255.0 up&lt;br /&gt;
&lt;br /&gt;
Per rendere tale configurazione permanente sarà necessario creare un file del tipo ''/etc/systemd/network/20-wifi.network'' ed aggiungere la seguente configurazione&lt;br /&gt;
 [Match]&lt;br /&gt;
 Name=wlan0&lt;br /&gt;
 [Network]&lt;br /&gt;
 Address=192.168.5.1/24&lt;br /&gt;
&lt;br /&gt;
Naturalmente occorrerà che sia attivato il demone systemd-networkd&lt;br /&gt;
 # systemctl enable --now systemd-networkd.service&lt;br /&gt;
&lt;br /&gt;
===== Proteggere la connessione WI-FI =====&lt;br /&gt;
&lt;br /&gt;
Installare il programma hostapd&lt;br /&gt;
 # pacman -S hostapd&lt;br /&gt;
&lt;br /&gt;
Configurare hostapd modificando ''/etc/hostapd/hostapd.conf''&lt;br /&gt;
&lt;br /&gt;
 # Interfaccia di rete&lt;br /&gt;
 interface=wlan0&lt;br /&gt;
 # Driver della scheda wifi usata (non tutte le schede sono supportate)&lt;br /&gt;
 driver=nl80211&lt;br /&gt;
 # Nome della rete (SSID)&lt;br /&gt;
 ssid=ReteGOLEM&lt;br /&gt;
 hw_mode=g&lt;br /&gt;
 # Canale di trasmissione&lt;br /&gt;
 channel=6&lt;br /&gt;
 macaddr_acl=0&lt;br /&gt;
 # Righe per la protezione&lt;br /&gt;
 auth_algs=1&lt;br /&gt;
 ignore_broadcast_ssid=0&lt;br /&gt;
 wpa=2&lt;br /&gt;
 # Password del wifi&lt;br /&gt;
 wpa_passphrase=password&lt;br /&gt;
 wpa_key_mgmt=WPA-PSK&lt;br /&gt;
 wpa_pairwise=TKIP&lt;br /&gt;
 rsn_pairwise=CCMP&lt;br /&gt;
&lt;br /&gt;
Editare il file ''/etc/default/hostapd'' per impostare ''hostapd.conf'' come file di configurazione predefinito, modificando la riga DAEMON_CONF=&amp;quot;&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
 DAEMON_CONF=&amp;quot;/etc/hostapd/hostapd.conf&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== Assegnazione automatica degli IP ai client ===&lt;br /&gt;
&lt;br /&gt;
 # pacman -S dhcp&lt;br /&gt;
&lt;br /&gt;
Editare ''/etc/dhcpd.conf'' aggiungendo la configurazione per la rete interna (es.: eth1 o wlan0):&lt;br /&gt;
&lt;br /&gt;
 subnet 192.168.5.0 netmask 255.255.255.0 {&lt;br /&gt;
 range 192.168.5.100  192.168.5.200;&lt;br /&gt;
 option domain-name-servers 8.8.8.8;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== VPN ==&lt;br /&gt;
=== OpenVPN ===&lt;br /&gt;
https://wiki.archlinux.org/title/OpenVPN&lt;br /&gt;
&lt;br /&gt;
===L2TP/IPsec VPN===&lt;br /&gt;
https://wiki.archlinux.org/title/Openswan_L2TP/IPsec_VPN_client_setup&lt;br /&gt;
&lt;br /&gt;
= Container =&lt;br /&gt;
== Toolbox==&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
=== Immagini ===&lt;br /&gt;
* [https://github.com/toolbx-images/images https://github.com/toolbx-images/images] Immagini di container delle principali distribuzioni&lt;br /&gt;
&lt;br /&gt;
=== Comandi ===&lt;br /&gt;
Creare un container&lt;br /&gt;
 $ toolbox create -i quay.io/toolbx-images/rhel-toolbox:9.1 -c redhat&lt;br /&gt;
&lt;br /&gt;
Entrare in un container&lt;br /&gt;
 $ toolbox enter redhat&lt;br /&gt;
 &lt;br /&gt;
Fermare un container&lt;br /&gt;
 $ podman stop nome_macchina&lt;br /&gt;
&lt;br /&gt;
Rimuovere un container&lt;br /&gt;
 $ toolbox rm -f redhat&lt;br /&gt;
&lt;br /&gt;
Rimuovere un container e la sua immagine&lt;br /&gt;
 $ toolbox rmi redhat &lt;br /&gt;
&lt;br /&gt;
Esaminare la lista dei container e delle immagini disponibili&lt;br /&gt;
 $ toolbox list &lt;br /&gt;
&lt;br /&gt;
Permettere agli utenti non root di utilizzare i container&lt;br /&gt;
 $ sudo sh -c 'echo &amp;quot;username:100000:65536&amp;quot; &amp;gt;&amp;gt; /etc/subuid'&lt;br /&gt;
 $ sudo sh -c 'echo &amp;quot;username:100000:65536&amp;quot; &amp;gt;&amp;gt; /etc/subgid'&lt;br /&gt;
&lt;br /&gt;
Abilitare l'host al forwarding di X11 per le applicazioni che richiedono Xorg&lt;br /&gt;
 # xhost +&lt;br /&gt;
&lt;br /&gt;
Eseguire un comandi all'interno di un container&lt;br /&gt;
 $ toolbox run -c redhat libreoffice&lt;br /&gt;
&lt;br /&gt;
== LXC ==&lt;br /&gt;
[https://wiki.archlinux.org/title/Linux_Containers Linux Container] (LXC) permette di virtualizzare uno o più container Linux su un singolo host LXC, gestendone virtualmente RAM, CPU, socket e rete.&lt;br /&gt;
&lt;br /&gt;
È estremamente utile quando si ha bisogno di isolare dei servizi dal sistema host: es.: server web, imap, smtp...&lt;br /&gt;
&lt;br /&gt;
=== Installazione ===&lt;br /&gt;
Installare LXC&lt;br /&gt;
 # pacman -S lxc lxc-templates lxcfs lxd&lt;br /&gt;
&lt;br /&gt;
=== Comandi ===&lt;br /&gt;
Lista dei container installati&lt;br /&gt;
 lxc-ls -f &lt;br /&gt;
&lt;br /&gt;
Installare un container scegliendo l'immagine dalla lista di quelli disponibili&lt;br /&gt;
 lxc-create -n playtime -t download&lt;br /&gt;
&lt;br /&gt;
Se sapete già di quale container avete bisogno sarà possibile scaricarlo direttamente&lt;br /&gt;
 lxc-create -n playtime -t download -- --dist archlinux --release current --arch amd64&lt;br /&gt;
&lt;br /&gt;
Far partire il container chiamato ''debian''&lt;br /&gt;
 lxc-start debian &lt;br /&gt;
&lt;br /&gt;
Entrare dentro il container chiamato ''debian''&lt;br /&gt;
 lxc-attach debian&lt;br /&gt;
&lt;br /&gt;
Fermare l'esecuzione del container chiamato ''debian''&lt;br /&gt;
 lxc-stop debian&lt;br /&gt;
&lt;br /&gt;
Rimuovere il container chiamato ''debian''&lt;br /&gt;
 lxc-destroy debian &lt;br /&gt;
&lt;br /&gt;
Eseguire un comando dentro il container chiamato ''debian''&lt;br /&gt;
 lxc-attach --name debian nano&lt;br /&gt;
&lt;br /&gt;
=== Rete Bridge ===&lt;br /&gt;
Nel caso si debbano usare servizi da tenere esposti su Internet potrebbe essere conveniente utilizzare una rete bridge piuttosto che NAT.&lt;br /&gt;
&lt;br /&gt;
[https://wiki.debian.org/LXC/SimpleBridge Configurazione] rete bridge.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Docker ==&lt;br /&gt;
Abilitare ed avviare docker&lt;br /&gt;
 # systemctl enable --now docker&lt;br /&gt;
&lt;br /&gt;
Cercare il container desiderato&lt;br /&gt;
 # docker search &amp;quot;xxx&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Scaricare l'immagine desiderata&lt;br /&gt;
 # docker pull xxxx:latest&lt;br /&gt;
&lt;br /&gt;
Visualizzare le immagini scaricate&lt;br /&gt;
 # docker images&lt;br /&gt;
&lt;br /&gt;
Visualizzare i docker creati&lt;br /&gt;
 # docker ps -a&lt;br /&gt;
&lt;br /&gt;
Avviare docker&lt;br /&gt;
 # docker start nome_docker&lt;br /&gt;
&lt;br /&gt;
Entrare nel docker&lt;br /&gt;
 # docker attach nome_docker&lt;br /&gt;
&lt;br /&gt;
Copiare un file dal sistema host al docker&lt;br /&gt;
 # docker cp esempio.txt nome_docker: /esempio.txt&lt;br /&gt;
&lt;br /&gt;
Copiare un file dal docker.&lt;br /&gt;
 # docker cp container-id:/path/filename.txt ~/Desktop/filename.txt&lt;br /&gt;
&lt;br /&gt;
Rimuovere un docker&lt;br /&gt;
 # docker rm nome_docker&lt;br /&gt;
&lt;br /&gt;
Rimuovere tutti i docker&lt;br /&gt;
 # docker container stop $(docker container ls -aq)&lt;br /&gt;
 # docker system prune -a --volumes&lt;br /&gt;
&lt;br /&gt;
Avviare automaticamente un docker (da testare)&lt;br /&gt;
 # docker run --restart=always --name nome_docker&lt;br /&gt;
&lt;br /&gt;
Creare script di avvio ''docker-webserver''.service&lt;br /&gt;
 [Unit]&lt;br /&gt;
 Description=Some service&lt;br /&gt;
 Requires=docker.service&lt;br /&gt;
 After=docker.service&lt;br /&gt;
 [Service]&lt;br /&gt;
 Restart=always&lt;br /&gt;
 ExecStart=/usr/bin/docker start -a container_name&lt;br /&gt;
 ExecStop=/usr/bin/docker stop -t 2 container_name&lt;br /&gt;
 [Install]&lt;br /&gt;
 WantedBy=multi-user.target&lt;br /&gt;
&lt;br /&gt;
* [https://wiki.archlinux.org/title/docker Arch Linux Docker WIKI]&lt;br /&gt;
&lt;br /&gt;
== [https://wiki.archlinux.org/title/systemd-nspawn systemd-nspawn] ==&lt;br /&gt;
&lt;br /&gt;
= Fonti software alternative =&lt;br /&gt;
Nella rara eventualità che si necessiti di un programma non presente né nei repository ufficiali, né su [https://aur.archlinux.org/ AUR] è possibile optare per una delle seguenti opzioni.&lt;br /&gt;
&lt;br /&gt;
== AppImage ==&lt;br /&gt;
Scaricate qualsiasi pacchetto disponibile su [https://appimage.github.io/ appimage.github.io] e rendetelo eseguibile.&lt;br /&gt;
&lt;br /&gt;
 $ chmod a+x ''nomeprogramma''.AppImage&lt;br /&gt;
&lt;br /&gt;
Non resta che eseguirlo col seguente comando o con un doppio click&lt;br /&gt;
 $ ./''nomeprogramma''.AppImage&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Flatpak ==&lt;br /&gt;
Concepito per essere una sorta di '''Google Play Store''' per GNOME, è possibile installare programmi provenienti da [https://flathub.org/home flatpak] utilizzando i normali gestori grafici di pacchetti basati su packagekit come ''Gnome Software'' o ''Discover di Plasma''.&lt;br /&gt;
&lt;br /&gt;
Installazione&lt;br /&gt;
 # pacman -S flatpak&lt;br /&gt;
&lt;br /&gt;
Abilitazione del repository ufficiale del progetto (software di terze parti potrebbe richiedere di aggiungere altri repository)&lt;br /&gt;
 # flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo&lt;br /&gt;
&lt;br /&gt;
Elenca i repository disponibili.&lt;br /&gt;
 $ flatpak remotes&lt;br /&gt;
&lt;br /&gt;
Installa un'applicazione (es.: libreoffice)&lt;br /&gt;
 $ flatpak install flathub org.libreoffice.LibreOffice&lt;br /&gt;
&lt;br /&gt;
Esegue un'applicazione (es.: libreoffice)&lt;br /&gt;
 $ flatpak run org.libreoffice.LibreOffice&lt;br /&gt;
&lt;br /&gt;
Disinstalla un'applicazione mantenendo i dati.&lt;br /&gt;
 $ flatpak uninstall &amp;lt;nome app&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Disinstalla un'applicazione eliminando i dati (nella home utente .var/app/).&lt;br /&gt;
 $ flatpak uninstall &amp;lt;nome app&amp;gt; --delete-data&lt;br /&gt;
&lt;br /&gt;
Elimina i dati di tutte le applicazioni disinstallate (nella home utente .var/app/).&lt;br /&gt;
 $ flatpak uninstall --delete-data&lt;br /&gt;
&lt;br /&gt;
Disinstalla tutte le applicazioni flatpak installate sul sistema.&lt;br /&gt;
 $ flatpak uninstall --all&lt;br /&gt;
	&lt;br /&gt;
Cerca ed esegue aggiornamenti per le applicazioni installate.&lt;br /&gt;
 $ flatpak update&lt;br /&gt;
&lt;br /&gt;
Aggiorna una singola applicazione.&lt;br /&gt;
 $ flatpak update &amp;lt;nome app&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Elenca tutte le applicazioni flatpak installate sul sistema.&lt;br /&gt;
 $ flatpak list --app&lt;br /&gt;
	&lt;br /&gt;
Elenca i runtime installati.&lt;br /&gt;
 $ flatpak list --runtime&lt;br /&gt;
	&lt;br /&gt;
Visualizzare le informazioni sulle applicazioni in esecuzione.&lt;br /&gt;
 $ flatpak ps&lt;br /&gt;
	&lt;br /&gt;
Termina un'applicazione bloccata o danneggiata (l'ID dell'istanza si può ottenere dal comando precedente).&lt;br /&gt;
 $ flatpak kill &amp;lt;id istanza&amp;gt;&lt;br /&gt;
	&lt;br /&gt;
Tenta la riparare dei pacchetti danneggiati. Necessita dei privilegi di amministrazione. &lt;br /&gt;
 $ flatpak repair&lt;br /&gt;
&lt;br /&gt;
== Nix ==&lt;br /&gt;
[https://nixos.wiki/wiki/Nix_package_manager Nix package manager] è il gestore di pacchetti utilizzato su [https://nixos.org/ NixOS]. È possibile però utilizzarlo su qualsiasi distribuzione Linux affiancandone il gestore di pacchetti predefinito.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
[https://nixos.org/manual/nixpkgs/stable/ Guida completa]&lt;br /&gt;
&lt;br /&gt;
=== Installazione ===&lt;br /&gt;
[https://nixos.org/download.html#nix-install-linux Guida ufficiale]&lt;br /&gt;
&lt;br /&gt;
'''Single-user installation'''&lt;br /&gt;
 $ sudo install -d -m755 -o $(id -u) -g $(id -g) /nix&lt;br /&gt;
 $ sh &amp;lt;(curl -L https://nixos.org/nix/install) --no-daemon&lt;br /&gt;
&lt;br /&gt;
Aggiungere la riga seguente al &amp;lt;code&amp;gt;.bashrc&amp;lt;/code&amp;gt; o al file di configurazione della vostra shell per poter utilizzare i comandi Nix&lt;br /&gt;
 $ source $HOME/.nix-profile/etc/profile.d/nix.sh&lt;br /&gt;
&lt;br /&gt;
=== Canali ===&lt;br /&gt;
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''.&lt;br /&gt;
&lt;br /&gt;
Ecco di seguito i comandi principali per gestire questi canali&lt;br /&gt;
&lt;br /&gt;
Lista dei canali configurati&lt;br /&gt;
 $ nix-channel --list&lt;br /&gt;
&lt;br /&gt;
Aggiungere il canale principale (''nixos'')&lt;br /&gt;
 $ nix-channel --add https://nixos.org/channels/channel-name nixos&lt;br /&gt;
&lt;br /&gt;
Aggiungere altri canali&lt;br /&gt;
 $ nix-channel --add https://some.channel/url my-alias&lt;br /&gt;
&lt;br /&gt;
Rimuovere un canale&lt;br /&gt;
 $ nix-channel --remove channel-alias&lt;br /&gt;
&lt;br /&gt;
Aggiornare un canale&lt;br /&gt;
 $ nix-channel --update channel-alias&lt;br /&gt;
&lt;br /&gt;
Aggiornare tutti i canali&lt;br /&gt;
 $ nix-channel --update&lt;br /&gt;
&lt;br /&gt;
=== Comandi ===&lt;br /&gt;
Cercare un pacchetto&lt;br /&gt;
 $ nix search nixpkgs ''packagename''&lt;br /&gt;
&lt;br /&gt;
Installare un pacchetto&lt;br /&gt;
 $ nix-env -iA ''packagename''&lt;br /&gt;
&lt;br /&gt;
Vedere i pacchetti installati&lt;br /&gt;
 $ nix-env -q&lt;br /&gt;
&lt;br /&gt;
Disinstallare un pacchetto&lt;br /&gt;
 $ nix-env -e ''packagename''&lt;br /&gt;
&lt;br /&gt;
Aggiornare tutti i pacchetti&lt;br /&gt;
 $ nix-env -u&lt;br /&gt;
&lt;br /&gt;
== Snap ==&lt;br /&gt;
È 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. &lt;br /&gt;
&lt;br /&gt;
Su Arch è disponibile su AUR: [https://aur.archlinux.org/packages/snapd snapd]&lt;br /&gt;
&lt;br /&gt;
=== Installazione ===&lt;br /&gt;
Installare ed abilitare Snap&lt;br /&gt;
 $ [https://aur.archlinux.org/packages/yay yay] -S snapd&lt;br /&gt;
 $ sudo ln -s /var/lib/snapd/snap /snap&lt;br /&gt;
 $ sudo systemctl start snapd.service&lt;br /&gt;
 $ sudo systemctl enable snapd.service&lt;br /&gt;
&lt;br /&gt;
=== Comandi ===&lt;br /&gt;
Cercare un programma&lt;br /&gt;
 $ snap find ''nomeprogramma''&lt;br /&gt;
&lt;br /&gt;
Installare un programma&lt;br /&gt;
 $ sudo snap install ''nomeprogramma''&lt;br /&gt;
&lt;br /&gt;
Rimuovere un programma&lt;br /&gt;
 $ sudo snap remove ''nomeprogramma''&lt;br /&gt;
&lt;br /&gt;
Vedere i programmi installati &lt;br /&gt;
 $ snap list&lt;br /&gt;
&lt;br /&gt;
Rimuovere una determinata versione di un programma&lt;br /&gt;
 $ sudo snap remove ''nomeprogramma'' --revision&lt;br /&gt;
&lt;br /&gt;
Aggiornare manualmente i pacchetti snap&lt;br /&gt;
 $ sudo snap refresh&lt;br /&gt;
&lt;br /&gt;
= GPG =&lt;br /&gt;
[http://it.wikipedia.org/wiki/GNU_Privacy_Guard GNU Privacy Guard (GnuPG o GPG)] è un programma libero pensato per fornire un'alternativa opensource al [http://it.wikipedia.org/wiki/Pretty_Good_Privacy Pretty Good Privacy (PGP)].&lt;br /&gt;
Nel PGP sono usate sia la crittografia asimmetrica (a chiave pubblica) che quella simmetrica.&lt;br /&gt;
La chiave pubblica del destinatario serve al mittente unicamente per cifrare la chiave comune per un algoritmo di crittografia simmetrica che sarà usata per cifrare il testo in chiaro del messaggio.&lt;br /&gt;
Un destinatario decifra un messaggio protetto da GPG usando la chiave di sessione con l'algoritmo simmetrico. Tale chiave di sessione è inclusa nel messaggio in maniera criptata ed è decifrata usando la chiave privata del destinatario.&lt;br /&gt;
L'utilizzo di due cifrature oltre che a velocizzare l'esecuzione del programma (la cifratura a chiave simmetrica è molto più veloce di quella asimmetrica) permette di poter cifrare uno stesso messaggio per più destinatari.&lt;br /&gt;
&lt;br /&gt;
== Generare una chiave ==&lt;br /&gt;
 $ gpg --gen-key&lt;br /&gt;
&lt;br /&gt;
Controllare che la chiave sia stata correttamente creata&lt;br /&gt;
 $ gpg --list-keys&lt;br /&gt;
&lt;br /&gt;
== Certificato di revoca ==&lt;br /&gt;
Il certificato di revoca serve per invalidare la chiave nel caso in cui questa venga compromessa.&lt;br /&gt;
Chiunque sia in possesso del certificato di revoca può revocare la chiave corrispondente, per cui è bene tenerlo in un posto sicuro.&lt;br /&gt;
Poiché, nel momento in cui si ha bisogno del certificato di revoca, potremmo non essere più in grado di generarlo, conviene generarlo subito dopo la creazione della chiave, e prima di iniziare a utilizzarla pubblicamente.&lt;br /&gt;
 $ gpg --output certificato-di-revoca.asc --gen-revoke ''ID''&lt;br /&gt;
dove &amp;lt;code&amp;gt;ID&amp;lt;/code&amp;gt; è dato dalle ultime 8 cifre dell'impronta (fingerprint) della chiave.&lt;br /&gt;
&lt;br /&gt;
== Utilizzo pratico ==&lt;br /&gt;
=== Criptare un documento ===&lt;br /&gt;
 $ gpg -o file1.ext.gpg -e -r UserID file1.ext&lt;br /&gt;
&lt;br /&gt;
Esempio:&lt;br /&gt;
 $ gpg -o tesi.odt.gpg -e -r spookyh@gmail.com tesi.odt&lt;br /&gt;
&lt;br /&gt;
=== Decriptare un documento ===&lt;br /&gt;
 $ gpg -o file1.ext -d file1.gpg&lt;br /&gt;
&lt;br /&gt;
=== Firmare un documento ===&lt;br /&gt;
Il mittente può usare PGP per ''firmare'' un messaggio con l'algoritmo di firma RSA o Digital Signature Algorithm (DSA). Per fare ciò viene calcolato un hash (message digest) dal testo in chiaro e successivamente da questo hash è creata la [http://it.wikipedia.org/wiki/Firma_digitale firma digitale] usando la chiave privata del mittente.&lt;br /&gt;
 $ gpg -o file1.ext.sig -s file1.ext&lt;br /&gt;
&lt;br /&gt;
=== Verificare un documento ===&lt;br /&gt;
 $ gpg --verify file1.sig&lt;br /&gt;
&lt;br /&gt;
== Importare ed esportare chiavi (locali) ==&lt;br /&gt;
Importare una chiave (pubblica)&lt;br /&gt;
 $ gpg --import chiave.asc (o .txt)&lt;br /&gt;
&lt;br /&gt;
Esportare la propria chiave pubblica&lt;br /&gt;
 $ gpg -a -o chiave_pubblica.asc --export&lt;br /&gt;
&lt;br /&gt;
=== Esportare la propria chiave privata ===&lt;br /&gt;
{{Note&lt;br /&gt;
|type=attention&lt;br /&gt;
|text= La chiave privata può essere utilizzata per impersonare la vostra identità, '''NON''' inviarla mai a '''nessuno''', ed esportala solo per effettuarne backup, naturalmente da custodire in un luogo sicuro.}}&lt;br /&gt;
 $ gpg --armor --export-secret-keys &amp;lt;ID&amp;gt; &amp;gt; secret-key.gpg.asc&lt;br /&gt;
&lt;br /&gt;
== Condividere le chiavi pubbliche ==&lt;br /&gt;
Inviare la chiave ad un keyserver:&lt;br /&gt;
 $ gpg --keyserver keyserver.linux.it --send-key &amp;lt;ID&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Importare una chiave da un keyserver:&lt;br /&gt;
 $ gpg --keyserver keyserver.linux.it --recv-keys &amp;lt;ID&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se ci fidiamo del proprietario e vogliamo mostrare pubblicamente la nostra fiducia, possiamo firmare la chiave appena importata e esportare la firma su un keyserver (vedere sezioni successive).&lt;br /&gt;
&lt;br /&gt;
=== Keyserver ===&lt;br /&gt;
Quando si carica una chiave su un keyserver, poi questo la condivide con gli altri keyserver che fanno parte dello stesso circuito.&lt;br /&gt;
Non esiste un'entità centralizzata o un circuito di riferimento (per scelta di design), e, a volte, questo può generare confusione nell'utilizzatore.&lt;br /&gt;
Inoltre, alcuni keyserver potrebbero non essere sempre accessibili.&lt;br /&gt;
&lt;br /&gt;
Tra i keyserver più noti:&lt;br /&gt;
* keys.openpgp.org&lt;br /&gt;
* keyserver.ubuntu.com&lt;br /&gt;
* keys.gnupg.net&lt;br /&gt;
* pgp.surfnet.nl&lt;br /&gt;
* pgp.circl.lu&lt;br /&gt;
* pgp.mit.edu&lt;br /&gt;
&lt;br /&gt;
== Editare una chiave ==&lt;br /&gt;
Per fare operazioni e modifiche dobbiamo &amp;quot;editare&amp;quot; le chiavi, aprendo l'editor interattivo:&lt;br /&gt;
 $ gpg --edit-key &amp;lt;ID&amp;gt;&lt;br /&gt;
'''NB: Prima di uscire dall'editor, ricordarsi di salvare, altrimenti le modifiche vanno perdute'''&lt;br /&gt;
&lt;br /&gt;
* firmare&lt;br /&gt;
 &amp;gt; sign&lt;br /&gt;
* cambiare i valori di fiducia &lt;br /&gt;
 &amp;gt; trust&lt;br /&gt;
* vedere la fingerprint&lt;br /&gt;
 &amp;gt; fpr&lt;br /&gt;
* cambiare la data di scadenza&lt;br /&gt;
 &amp;gt; expire&lt;br /&gt;
* cambiare la password&lt;br /&gt;
 &amp;gt; passwd&lt;br /&gt;
* firmare localmente in modo non esportabile&lt;br /&gt;
 &amp;gt; lsign&lt;br /&gt;
* sempre '''ricordarsi di salvare'''&lt;br /&gt;
 &amp;gt; save&lt;br /&gt;
* oppure uscire&lt;br /&gt;
 &amp;gt; quit&lt;br /&gt;
&lt;br /&gt;
Digitare &amp;lt;code&amp;gt;help&amp;lt;/code&amp;gt; per una lista esaustiva.&lt;br /&gt;
&lt;br /&gt;
Tutte le modifiche da rendere pubbliche vanno inviate ad un keyserver.&lt;br /&gt;
&lt;br /&gt;
== Revocare una chiave ==&lt;br /&gt;
Avendo già il certificato di revoca:&lt;br /&gt;
 $ gpg --import certificato-di-revoca.asc&lt;br /&gt;
 $ gpg --keyserver pgp.surfnet.nl --send-key ''ID''&lt;br /&gt;
&lt;br /&gt;
== Gestione delle chiavi ==&lt;br /&gt;
Controllare il database delle chiavi: questo comando mostra tutte le chiavi che abbiamo con molte informazioni.&lt;br /&gt;
 $ gpg --list-keys --with-colons&lt;br /&gt;
&lt;br /&gt;
Fornisce tutti i valori di fiducia assegnati alle varie chiavi. (Informazioni private)&lt;br /&gt;
 $ gpg --list-ownertrust&lt;br /&gt;
&lt;br /&gt;
== Controllo firme ==&lt;br /&gt;
 $ gpg --check-sigs&lt;br /&gt;
 $ gpg --list-sigs&lt;br /&gt;
&lt;br /&gt;
== Esportare le chiavi altrui ==&lt;br /&gt;
Abbiamo importato e firmato la chiave di &amp;lt;ID&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Rimandiamola al proprietario:&lt;br /&gt;
 $ gpg --armor -export -o firma.sig &amp;lt;ID&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Questo comando crea un file di nome ''firma.sig'' nella directory corrente, che contiene la chiave firmata.&lt;br /&gt;
Spedire al proprietario ''firma.sig''.&lt;br /&gt;
&lt;br /&gt;
Chi riceve la propria chiave firmata da altri può decidere inserirla nel proprio portachiavi, con&lt;br /&gt;
 $ gpg --import firma.sig&lt;br /&gt;
&lt;br /&gt;
Si aggiungono al portachiavi le nuove firme ma anche i nuovi ID che il mittente ha sulla sua chiave, col rispettivo valore di fiducia. Firmare le chiavi degli altri implica dar loro fiducia, e, spesso, anche aver verificato la loro identità in maniera sicura.&lt;br /&gt;
Se non ci fidiamo, non firmiamo. Se si firmano a caso tutte le chiavi che capitano a tiro, si perde la reputazione che si ha presso gli altri partecipanti della rete. Se vogliamo fare un uso pubblico di questa fiducia reciproca possiamo mandare la nostra  chiave, contenente la nuova firma, al keyserver:&lt;br /&gt;
 $ gpg --keyserver pgp.circl.lu --send-key &amp;lt;ID mia chiave&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Periodicamente occorre aggiornare il proprio portachiavi digitale, così da venire a conoscenza delle modifiche sulle chiavi degli altri.&lt;br /&gt;
 $ gpg --keyserver pgp.circl.lu --refresh-keys&lt;br /&gt;
&lt;br /&gt;
== Rete di fiducia ==&lt;br /&gt;
Una chiave importata può essere firmata con un certo grado di fiducia. Possiamo rispedirla al proprietario o caricare la firma su un keyserver, e se lui la importa nel suo portachiavi, avrà la propria chiave firmata da noi. Ognuno può quindi aggiungere le firme dei conoscenti alla propria chiave, che a loro volta hanno firme di altri.&lt;br /&gt;
&lt;br /&gt;
== GUI ==&lt;br /&gt;
Esistono vari programmi a interfaccia grafica:&lt;br /&gt;
* ''Seahorse'', per gestire le chiavi e i certificati, comprese quelle ssh, per un ambiente GTK&lt;br /&gt;
* ''KGPG'', per gestire le chiavi e i certificati, comprese quelle ssh, per un ambiente QT&lt;br /&gt;
* ''Pinentry'' (anche da riga di comando) si ricorda la password della chiave per il tempo impostato (default 5 minuti)&lt;br /&gt;
&lt;br /&gt;
= Systemd =&lt;br /&gt;
 systemd-timesyncd — system time synchronization across the network;&lt;br /&gt;
 systemd/Journal — system logging&lt;br /&gt;
 systemd/Timers — alternative to cron&lt;br /&gt;
&lt;br /&gt;
= Link Utili =&lt;br /&gt;
&lt;br /&gt;
[https://wiki.archlinux.org/ ArchWiki]&lt;br /&gt;
&lt;br /&gt;
[https://wwwcdf.pd.infn.it/AppuntiLinux/a21.htm Appunti Linux]&lt;br /&gt;
&lt;br /&gt;
[https://www.linuxfromscratch.org/lfs/downloads/stable/LFS-BOOK-11.3-NOCHUNKS.html LFS-BOOK]&lt;br /&gt;
&lt;br /&gt;
[[Category: Howto]]&lt;/div&gt;</summary>
		<author><name>$pooky Hunter</name></author>
	</entry>
	<entry>
		<id>https://wiki.golem.linux.it/index.php?title=Appunti_Arch_Linux&amp;diff=9667</id>
		<title>Appunti Arch Linux</title>
		<link rel="alternate" type="text/html" href="https://wiki.golem.linux.it/index.php?title=Appunti_Arch_Linux&amp;diff=9667"/>
		<updated>2025-04-08T22:35:30Z</updated>

		<summary type="html">&lt;p&gt;$pooky Hunter: /* iproute2 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[https://archlinux.org/ Arch Linux] è una distribuzione Linux leggera e veloce; ma la cui installazione, configurazione e amministrazione avviene prevalentemente da terminale attraverso la modifica manuale di file di configurazione testuali.&lt;br /&gt;
&lt;br /&gt;
Fornisce, seguendo un modello di distribuzione detto &amp;quot;rolling-release&amp;quot;, l'ultima versione stabile della maggior parte del software opensource disponibile per Linux. Dato che è in costante aggiornamento non richiede periodici passaggi da una versione stabile alla successiva. Il lato negativo è che aggiornamenti di componenti importanti come quelli di: '''kernel, boot loader, driver video, librerie...''' potrebbero determinare problemi tali da rendere il sistema inutilizzabile. Accorgimenti come lo snapshot periodico del filesystem riescono, per fortuna, a contrastare l'impatto di questi inconvenienti.&lt;br /&gt;
&lt;br /&gt;
= Installazione =&lt;br /&gt;
== Guida ==&lt;br /&gt;
[https://wiki.archlinux.org/title/Installation_guide Guida ufficiale]&lt;br /&gt;
&lt;br /&gt;
== Supporti ==&lt;br /&gt;
* ISO ufficiale [http://archlinux.mirror.garr.it/archlinux/iso/latest/archlinux-x86_64.iso archlinux-x86_64.iso]&lt;br /&gt;
&lt;br /&gt;
* ISO con supporto per lo [https://openzfs.github.io/openzfs-docs/Getting%20Started/Arch%20Linux/index.html ZFS] [https://archzfs.leibelt.de/media/data/archlinux-archzfs-linux.iso archlinux-archzfs-linux.iso]&lt;br /&gt;
&lt;br /&gt;
* ISO con installer grafico Calamares [https://sourceforge.net/projects/alci/files/alci-iso/ ALCI]&lt;br /&gt;
&lt;br /&gt;
* ISO live CD/USB con interfaccia Xfce, utile per operazioni di ripristino o installazione [https://www.system-rescue.org/Download/ SystemRescue]:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== ISO personalizzata ==&lt;br /&gt;
Con '''archiso''' è possibile creare un'immagine con pacchetti aggiuntivi rispetto a quelli contenuti nella versione ufficiale. &lt;br /&gt;
&lt;br /&gt;
 # pacman -S archiso&lt;br /&gt;
&lt;br /&gt;
Copiare il contenuto del pacchetto in una directory di lavoro, es.: ''/root/media''&lt;br /&gt;
 # cp -r /usr/share/archiso/configs/releng /root/media&lt;br /&gt;
&lt;br /&gt;
Se volessimo aggiungere il supporto ad un pacchetto non contenuto nei repository ufficiali come, per esempio, lo ZFS occorrerebbe:&lt;br /&gt;
&lt;br /&gt;
* Importare la chiave pubblica del suo repository&lt;br /&gt;
 # pacman-key -r DDF7DB817396A49B2A2723F7403BD972F75D9D76&lt;br /&gt;
 # pacman-key --lsign-key DDF7DB817396A49B2A2723F7403BD972F75D9D76&lt;br /&gt;
 &lt;br /&gt;
* Modificare le seguenti righe al file '''pacman.conf''' di archiso per aggiungere il repository&lt;br /&gt;
 [archzfs]&lt;br /&gt;
 SigLevel = Never&lt;br /&gt;
 Server = https://archzfs.com/$repo/$arch&lt;br /&gt;
&lt;br /&gt;
* Aggiungere le seguenti righe al file ''packages.x86_64'' per aggiungere i pacchetti che ci interessa installare&lt;br /&gt;
 zfs-utils&lt;br /&gt;
 zfs-dkms&lt;br /&gt;
 net-tools&lt;br /&gt;
&lt;br /&gt;
* Se volessimo creare una versione live di una macchina, comprensiva di tutti i suoi pacchetti, potremmo semplicemente aggiungerli al file ''packages.x86_64'' &lt;br /&gt;
&lt;br /&gt;
 # pacman -Qq &amp;gt;&amp;gt; ''/path/packages.x86_64''&lt;br /&gt;
&lt;br /&gt;
* Lanciare lo script per creare l'ISO&lt;br /&gt;
 # ./build.sh -v&lt;br /&gt;
L'immagine sarà generata nella directory /root/media/out&lt;br /&gt;
&lt;br /&gt;
== Preparazione del disco ==&lt;br /&gt;
Su Linux si può scegliere (salvo casi estremamente [https://wiki.archlinux.org/title/partitioning#Partitionless_disk particolari]) tra due [https://unix.stackexchange.com/questions/289389/what-are-the-differences-between-the-various-partition-tables tipi] di tabella delle partizioni&lt;br /&gt;
&lt;br /&gt;
* msdos (Master Boot Record o più semplicemente MBR)&lt;br /&gt;
&lt;br /&gt;
* GPT (GUID Partition Table)&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
I casi in cui è preferibile utilizzare la tabella ''msdos'' sono:&lt;br /&gt;
&lt;br /&gt;
* dual-boot con Windows (32-bit o 64-bit) con la scheda madre in modalità Legacy BIOS&lt;br /&gt;
* in schede madri molto datate il BIOS potrebbe non supportare lo schema GPT (esiste comunque un [https://wiki.archlinux.org/title/partitioning#Tricking_old_BIOS_into_booting_from_GPT trucco] per aggirare l'ostacolo)&lt;br /&gt;
&lt;br /&gt;
[https://wiki.archlinux.org/title/partitioning#Choosing_between_GPT_and_MBR Vantaggi] di GPT su MBR:&lt;br /&gt;
&lt;br /&gt;
* offre un sistema di denominazione delle partizioni indipendente dal filesystem (PARTLABEL, PARTUUID)&lt;br /&gt;
&lt;br /&gt;
* 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.&lt;br /&gt;
&lt;br /&gt;
* la grandezza massima di un disco è di 2 ZiB, mentre su MBR 2 TiB&lt;br /&gt;
&lt;br /&gt;
* permette di fare a meno della tradizionale partizione di /boot con i filesystem BTRFS e ZFS in modo da semplificare la gestione degli snapshot.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Schede madri BIOS ===&lt;br /&gt;
Creare due partizioni.&lt;br /&gt;
&lt;br /&gt;
# '''[http://en.wikipedia.org/wiki/BIOS_Boot_partition 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.&lt;br /&gt;
# '''Linux filesystem''': successivamente da formattare col filesystem di nostra scelta: BTRFS, ZFS, ext4, XFS, JFS.&lt;br /&gt;
&lt;br /&gt;
==== Partizionamento ====&lt;br /&gt;
Col seguente comando verrà creata la partizione BIOS GRUB (EF02) a partire dal 1MB, della grandezza di 64MB, 8GB per la SWAP ed il resto del disco resterà disponibile per il filesystem di Linux.&lt;br /&gt;
&lt;br /&gt;
Se avete più dischi da utilizzare in raid, questa operazione andrà ripetuta per ciascun disco.&lt;br /&gt;
&lt;br /&gt;
 # sgdisk \&lt;br /&gt;
 --new=1:2048:133120 --typecode=1:EF02 --change-name=1:&amp;quot;GRUB&amp;quot; \&lt;br /&gt;
 --new=2:0:+8000M ---typecode 2:8200 --change-name=2:&amp;quot;SWAP&amp;quot; \&lt;br /&gt;
 --largest-new=3 --typecode=3:8300 --change-name=3:&amp;quot;ROOT&amp;quot; /dev/sda&lt;br /&gt;
&lt;br /&gt;
La seconda partizione dovrà poi essere formattata con uno dei filesystem supportati da Linux (ext4, btrfs, xfs...)&lt;br /&gt;
 # mkfs.btrfs /dev/sda3&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Schede madri UEFI ===&lt;br /&gt;
Creare due partizioni.&lt;br /&gt;
&lt;br /&gt;
# '''EFI''': è una partizione in formato FAT32 necessaria per l'avvio dei sistemi operativi nei PC con schede madri UEFI.&lt;br /&gt;
# '''Linux filesystem''': successivamente da formattare col filesystem di nostra scelta: BTRFS, ZFS, ext4, XFS, JFS.&lt;br /&gt;
&lt;br /&gt;
==== Partizionamento ====&lt;br /&gt;
Col seguente comando verrà creata la partizione EFI (EF00) a partire dal 1MB, della grandezza di 512MB, 8Gb per la SWAP ed il resto del disco per il filesystem di Linux.&lt;br /&gt;
 # sgdisk \&lt;br /&gt;
 --new=1:2048:1064960 --typecode=1:EF00 --change-name=1:&amp;quot;efi&amp;quot; \&lt;br /&gt;
 --new=2:0:+8000M ---typecode 2:8200 --change-name=2:&amp;quot;SWAP&amp;quot; \&lt;br /&gt;
 --largest-new=3 --typecode=3:8300 --change-name=3:&amp;quot;ROOT&amp;quot; /dev/sda&lt;br /&gt;
&lt;br /&gt;
La partizione '''EFI''' dovrà poi essere formattata in FAT32&lt;br /&gt;
 # mkfs.vfat -F 32 /dev/sda1&lt;br /&gt;
&lt;br /&gt;
La seconda partizione dovrà poi essere formattata con uno dei filesystem supportati da Linux (ext4, btrfs, xfs...)&lt;br /&gt;
 # mkfs.btrfs /dev/sda3&lt;br /&gt;
&lt;br /&gt;
== Montaggio del filesystem ==&lt;br /&gt;
Formattazione ed attivazione della SWAP&lt;br /&gt;
 # mkswap /dev/sda2&lt;br /&gt;
 # swapon /dev/sda2&lt;br /&gt;
&lt;br /&gt;
Montaggio del filesystem di ROOT nei sistemi BIOS&lt;br /&gt;
 # mount /dev/sda3 /mnt&lt;br /&gt;
&lt;br /&gt;
Montaggio del filesystem di ROOT nei sistemi UEFI&lt;br /&gt;
 # mount /dev/sda3 /mnt&lt;br /&gt;
 # mount --mkdir /dev/sda1 /mnt/boot&lt;br /&gt;
&lt;br /&gt;
== Pacchetti base ==&lt;br /&gt;
Per l'installazione di base si consigliano i seguenti meta-pacchetti&lt;br /&gt;
 # pacstrap -K /mnt base base-devel linux linux-headers linux-firmware&lt;br /&gt;
&lt;br /&gt;
== Configurazione ==&lt;br /&gt;
Creazione del file fstab&lt;br /&gt;
 # genfstab -U /mnt &amp;gt;&amp;gt; /mnt/etc/fstab&lt;br /&gt;
&lt;br /&gt;
Chroot nel nuovo sistema&lt;br /&gt;
 # arch-chroot /mnt&lt;br /&gt;
&lt;br /&gt;
Timezone&lt;br /&gt;
 # ln -sf /usr/share/zoneinfo/Europe/Rome /etc/localtime&lt;br /&gt;
&lt;br /&gt;
Editare il file &amp;lt;code&amp;gt;/etc/systemd/timesyncd.conf&amp;lt;/code&amp;gt; ed abilitare il servizio per la sincronizzazione automatica dell'orario&lt;br /&gt;
 # systemctl enable systemd-timesyncd.service&lt;br /&gt;
&lt;br /&gt;
Editare il file &amp;lt;code&amp;gt;/etc/locale.gen&amp;lt;/code&amp;gt; e togliere il commento agli argomenti che interessano, es.: ''en_US.UTF-8'', ''it_IT.UTF-8''. E successivamente generare la localizzazione eseguendo&lt;br /&gt;
 # locale-gen&lt;br /&gt;
&lt;br /&gt;
Configurare la lingua che vogliamo usare per il nostro sistema editando il file &amp;lt;code&amp;gt;/etc/locale.conf&amp;lt;/code&amp;gt; oppure lanciando il comando&lt;br /&gt;
 # localectl set-locale LANG=en_US.UTF-8&lt;br /&gt;
&lt;br /&gt;
Selezioniamo il layout della tastiera editando il file &amp;lt;code&amp;gt;/etc/vconsole.conf&amp;lt;/code&amp;gt;&lt;br /&gt;
 # echo &amp;quot;KEYMAP=it&amp;quot; &amp;gt;&amp;gt; /etc/vconsole.conf&lt;br /&gt;
&lt;br /&gt;
Scegliere un home host (es.: ''archstar'')&lt;br /&gt;
 # echo '''archstar''' &amp;gt;&amp;gt; /etc/hostname&lt;br /&gt;
&lt;br /&gt;
Impostare una password per l'utente root&lt;br /&gt;
 # passwd&lt;br /&gt;
&lt;br /&gt;
Installare e configurare il bootloader&lt;br /&gt;
&lt;br /&gt;
= Filesystem =&lt;br /&gt;
Su Linux, a seconda di ciò di cui abbiamo bisogno, è possibile scegliere tra numerosi filesystem. Le principali opzioni sono le seguenti:&lt;br /&gt;
&lt;br /&gt;
- BTRFS: supporta nativamente sottovolumi, snapshot ed il raid 0, 1 e 5; ma non la crittografia.&lt;br /&gt;
&lt;br /&gt;
- EXT4: il FS storico di Linux, evoluzione di ext3. Supporta nativamente la crittografia dei dati, ma non gestisce autonomamente né RAID, né snapshots. &lt;br /&gt;
&lt;br /&gt;
- [https://openzfs.github.io/openzfs-docs/index.html 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 &amp;quot;write-atomicity&amp;quot; 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.&lt;br /&gt;
&lt;br /&gt;
- [https://access.redhat.com/documentation/it-it/red_hat_enterprise_linux/9/html-single/configuring_and_managing_logical_volumes/index 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.&lt;br /&gt;
&lt;br /&gt;
== IMG ==&lt;br /&gt;
Per fare esperimenti con i filesystem può essere utile creare dei file immagine&lt;br /&gt;
&lt;br /&gt;
Creare un file immagine di una specifica grandezza (es.: 10G)&lt;br /&gt;
 $ truncate -s 10g disk.img&lt;br /&gt;
&lt;br /&gt;
Formattarlo con un filesystem (es.: btrfs)&lt;br /&gt;
 $ mkfs.btrfs disk.img&lt;br /&gt;
&lt;br /&gt;
Montarlo in loop&lt;br /&gt;
 $ sudo mount -o loop disk.img /mnt&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== BTRFS ==&lt;br /&gt;
Creazione del filesystem&lt;br /&gt;
 # mkfs.btrfs ''/dev/partizione''&lt;br /&gt;
&lt;br /&gt;
Montaggio del filesystem&lt;br /&gt;
 # mount -o compress=lzo ''/dev/partizione'' ''/mnt/punto_mount''&lt;br /&gt;
&lt;br /&gt;
(Si consiglia di usare l'opzione di compressione del filesystem per migliorare le performance ed ottimizzare l'utilizzo dello spazio)&lt;br /&gt;
&lt;br /&gt;
===Subvolumi===&lt;br /&gt;
* Creare un subvolume&lt;br /&gt;
 # btrfs subvolume create ''subvolume''&lt;br /&gt;
&lt;br /&gt;
* Controllare i subvolumi presenti sul sistema&lt;br /&gt;
 # btrfs subvolume list /&lt;br /&gt;
&lt;br /&gt;
In una tipica installazione Ubuntu avremo un output di questo tipo&lt;br /&gt;
 ID 257 gen 9755 top level 5 path @&lt;br /&gt;
 ID 292 gen 7624 top level 5 path @home&lt;br /&gt;
&lt;br /&gt;
''@'' è il nome del subvolume contenente la root '''/''' del filesystem&lt;br /&gt;
''@home'' è il nome del subvolume della /home&lt;br /&gt;
&lt;br /&gt;
=== Montaggio di un subvolume ===&lt;br /&gt;
 # mount -o subvol=''subvolume'' ''/dev/partizione'' ''/mnt/punto_mount''&lt;br /&gt;
&lt;br /&gt;
=== fstab ===&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Ecco un '''/etc/fstab''' di esempio&lt;br /&gt;
 LABEL=ROOT       /             btrfs     defaults,compress=lzo,subvol=@            0 0&lt;br /&gt;
 LABEL=ROOT       /home         btrfs     defaults,compress=lzo,subvol=@home        0 0&lt;br /&gt;
 LABEL=ROOT       /mnt/btrfs    btrfs     defaults,noauto,subvolid=0,compress=lzo   0 0&lt;br /&gt;
&lt;br /&gt;
Montando la partizione con label ROOT su /mnt/btrfs saranno visibili tutti i subvolumi.&lt;br /&gt;
&lt;br /&gt;
===Conversione da Ext3/4 a Btrfs===&lt;br /&gt;
 # btrfs-convert /dev/partizione&lt;br /&gt;
&lt;br /&gt;
Automaticamente è creata una snapshot contenente il vecchio filesystem (''/ext2_saved'')&lt;br /&gt;
&lt;br /&gt;
In caso di problemi può essere montata col comando&lt;br /&gt;
 # mount -t btrfs -o subvol=ext2_saved /dev/xxx /ext2_saved&lt;br /&gt;
 # mount -t ext3 -o loop,ro /ext2_saved/image /ext3&lt;br /&gt;
&lt;br /&gt;
Se tutto è andato a buon fine può invece essere eliminata&lt;br /&gt;
 # btrfs subvolume delete /ext2_saved&lt;br /&gt;
&lt;br /&gt;
===Riparazione di un filesystem danneggiato===&lt;br /&gt;
* Direttamente sul filesystem montato&lt;br /&gt;
 # btrfs scrub start -B /dev/partizione&lt;br /&gt;
o anche direttamente sulla root&lt;br /&gt;
 # btrfs scrub start -B /&lt;br /&gt;
&lt;br /&gt;
* Sul disco smontato&lt;br /&gt;
 # btrfs check --repair /dev/partizione&lt;br /&gt;
&lt;br /&gt;
Per non dover ricorrere ad un dispositivo di avvio alternativo, dato che btrfs-check non può essere utilizzato su un filesystem montato, si consiglia di aggiungerlo al ramdisk modificando in questo mmodo il file &amp;lt;code&amp;gt;/etc/mkinitcpio.conf&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 BINARIES=(btrfs)&lt;br /&gt;
&lt;br /&gt;
=== Quote ===&lt;br /&gt;
Per limitare le dimensioni di un subvolume è possibile abilitare la gestione delle '''quote'''.&lt;br /&gt;
&lt;br /&gt;
Utilizzare il seguente comando su un filesystem btrfs appena creato e privo di subvolumi&lt;br /&gt;
 # btrfs quota enable volume&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
 # btrfs subvolume list &amp;lt;path&amp;gt; | cut -d' ' -f2 | xargs -I{} -n1 btrfs qgroup create 0/{} &amp;lt;path&amp;gt;&lt;br /&gt;
 # btrfs quota rescan &amp;lt;path&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Assegnare una quota limite ad un subvolume&lt;br /&gt;
 # btrfs qgroup limit size /volume/subvolume&lt;br /&gt;
&lt;br /&gt;
Es.:&lt;br /&gt;
 # btrfs qgroup limit 20g /mnt/@&lt;br /&gt;
 # btrfs qgroup limit 100g /mnt/@home&lt;br /&gt;
&lt;br /&gt;
Scoprire la quantità di spazio utilizzata da un subvolume&lt;br /&gt;
 # btrfs qgroup show &amp;lt;path&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Snapshots ===&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
* Effettuare uno snapshot&lt;br /&gt;
 # btrfs subvolume snapshot @ rootsnap&lt;br /&gt;
&lt;br /&gt;
Nell'esempio abbiamo effettuato il ''backup'' del filesystem di root e l'abbiamo chiamato ''rootsnap''&lt;br /&gt;
&lt;br /&gt;
* Montare un subvolume/snapshot&lt;br /&gt;
 # mount -t btrfs -o subvol=rootsnap /dev/partizione /mnt/snapshot&lt;br /&gt;
&lt;br /&gt;
* Cancellare un subvolume/snapshot&lt;br /&gt;
 # btrfs subvolume delete rootsnap&lt;br /&gt;
&lt;br /&gt;
==== Integrazione con GRUB ====&lt;br /&gt;
È possibile caricare automaticamente all'avvio gli snapshot dei filesystem di root attraverso il programma '''grub-btrfs'''&lt;br /&gt;
 # pacman -S grub-btrfs&lt;br /&gt;
&lt;br /&gt;
Con questo tool ogni volta che rigeneriamo il file di configurazione di GRUB il sistema rileva eventuali sottovolumi avviabili (snapshot comprese) aggiungendoli al menu di avvio del GRUB &lt;br /&gt;
 # grub-mkconfig -o /boot/grub/grub.cfg&lt;br /&gt;
&lt;br /&gt;
=== Backup ===&lt;br /&gt;
Le snapshot possono essere salvate su un disco esterno, a patto che questo abbia un file system btrfs.&lt;br /&gt;
L'operazione di trasferimento può essere effettuata soltanto su snapshot in sola lettura.&lt;br /&gt;
Si ipotizza che il proprio disco di sistema sia montato in /mnt/btrfs ed il disco esterno in /mnt/ext&lt;br /&gt;
&lt;br /&gt;
* Creare la snapshot in sola lettura (opzione -r) oppure impostare il flag di sola lettura ad una snapshot già fatta&lt;br /&gt;
 btrfs subvolume snapshot -r @root @root-yymmdd-ro&lt;br /&gt;
 btrfs property set /mnt/btrfs/@root-yymmdd-ro ro true&lt;br /&gt;
* Trasferire la snapshot sul disco esterno.&lt;br /&gt;
 btrfs send /mnt/btrfs/@root-yymmdd-ro | btrfs receive /mnt/ext&lt;br /&gt;
* Quando necessario, ripristinare la snapshot&lt;br /&gt;
 btrfs send /mnt/ext/@root-yymmdd-ro | btrfs receive /mnt/btrfs/&lt;br /&gt;
* Eventualmente, rinominare la snapshot e reimpostare i privilegi di scrittura&lt;br /&gt;
 mv /mnt/ext/{@root-yymmdd-ro,@root}&lt;br /&gt;
 btrfs property set /mnt/btrfs/@root ro false&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== RAID ===&lt;br /&gt;
Tipologie e caratteristiche dei raid [https://btrfs.readthedocs.io/en/latest/mkfs.btrfs.html#profiles supportati]&lt;br /&gt;
&lt;br /&gt;
Confronto tra varie tecnologie di [https://blog.jenningsga.com/status-of-storage-within-linux/ raid]&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! RAID !! Redundancy Copies !! Redundancy Parity !! Redundancy Striping !! Spazio utilizzato !! Min/max n. dischi&lt;br /&gt;
|-&lt;br /&gt;
| disco singolo || 1 || || || 100% || 1/N&lt;br /&gt;
|- &lt;br /&gt;
| RAID0 || 1 || || 1 to N || 100% || 1/N&lt;br /&gt;
|- &lt;br /&gt;
| RAID1 || 2 || || ||  50% || 2/N &lt;br /&gt;
|- &lt;br /&gt;
| RAID1C3 || 3 || || || 33% || 3/N&lt;br /&gt;
|- &lt;br /&gt;
| RAID1C4 || 4 || || || 25% || 4/N&lt;br /&gt;
|-&lt;br /&gt;
| RAID10 || 2 || || 1 to N || 50%  || 2/N&lt;br /&gt;
|-&lt;br /&gt;
| RAID5 || 1 || 1 || 2 to N-1 || (N-1)/N || 2/N&lt;br /&gt;
|-&lt;br /&gt;
| RAID6 || 1 || 2 || 3 to N-2 || (N-2)/N || 3/N&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====RAID 0====&lt;br /&gt;
 # mkfs.btrfs -d raid0 /dev/sda1 /dev/sdb1&lt;br /&gt;
&lt;br /&gt;
===== Montare il raid =====&lt;br /&gt;
 # mount /dev/sda1 /mnt&lt;br /&gt;
&lt;br /&gt;
(È equivalente a ''mount /dev/sdb1 /mnt'', il sistema riconosce che è presente un raid 0 e provvede al montaggio corretto dei dischi)&lt;br /&gt;
&lt;br /&gt;
Verifica del montaggio&lt;br /&gt;
 # btrfs filesystem show /mnt&lt;br /&gt;
&lt;br /&gt;
 Label: none  uuid: 4714fca3-bfcb-4130-ad2f-f560f2e12f8e&lt;br /&gt;
 Total devices 2 FS bytes used 27.75GiB&lt;br /&gt;
 devid    1 size 136.72GiB used 17.03GiB path /dev/sda1&lt;br /&gt;
 devid    2 size 136.72GiB used 17.01GiB path /dev/sdb1&lt;br /&gt;
&lt;br /&gt;
=====Aggiungere una partizione=====&lt;br /&gt;
 # btrfs device add /dev/sdc1 /mnt&lt;br /&gt;
&lt;br /&gt;
 # btrfs filesystem show /mnt&lt;br /&gt;
 Label: none  uuid: 4714fca3-bfcb-4130-ad2f-f560f2e12f8e&lt;br /&gt;
 Total devices 3 FS bytes used 27.75GiB&lt;br /&gt;
 devid    1 size 136.72GiB used 17.03GiB path /dev/sda1&lt;br /&gt;
 devid    2 size 136.72GiB used 17.01GiB path /dev/sdb1&lt;br /&gt;
 devid    3 size 136.72GiB used 0.00 path /dev/sdc1&lt;br /&gt;
&lt;br /&gt;
Adesso è necessario effettuare una redistribuzione dei dati sui tre dischi&lt;br /&gt;
 # btrfs balance start -d -m /mnt&lt;br /&gt;
&lt;br /&gt;
Per vedere a che punto del bilanciamento è arrivato il sistema&lt;br /&gt;
 # btrfs fi balance status /&lt;br /&gt;
&lt;br /&gt;
 # btrfs filesystem show /mnt&lt;br /&gt;
 Label: none  uuid: 4714fca3-bfcb-4130-ad2f-f560f2e12f8e&lt;br /&gt;
 Total devices 3 FS bytes used 27.78GiB&lt;br /&gt;
 devid    1 size 136.72GiB used 10.03GiB path /dev/sda1&lt;br /&gt;
 devid    2 size 136.72GiB used 10.03GiB path /dev/sdb1&lt;br /&gt;
 devid    3 size 136.72GiB used 11.00GiB path /dev/sdc1&lt;br /&gt;
&lt;br /&gt;
=====Rimuovere un device=====&lt;br /&gt;
 # btrfs device delete /dev/sdb1 /mnt&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
==== RAID 1 ====&lt;br /&gt;
=====Creazione di un raid1 ex novo===== &lt;br /&gt;
Copiare la tabella delle partizioni da sda a sdb&lt;br /&gt;
 # sfdisk -d /dev/sda | sfdisk /dev/sdb&lt;br /&gt;
&lt;br /&gt;
Creare il raid&lt;br /&gt;
 # mkfs.btrfs -d raid1 -m raid1 /dev/sda1 /dev/sdb1&lt;br /&gt;
&lt;br /&gt;
===== Aggiungere un mirror ad un disco esistente =====&lt;br /&gt;
 # btrfs device add /dev/sdb1 ''/punto_di_mount''&lt;br /&gt;
 # btrfs balance start -dconvert=raid1 -mconvert=raid1 ''/punto_di_mount''&lt;br /&gt;
&lt;br /&gt;
===== GRUB =====&lt;br /&gt;
Se si utilizza un raid1 per la partizione di sistema '''/''' e si vuole rendere Linux avviabile automaticamente anche in caso di danneggiamento o mancanza di uno dei due dischi del raid occorrerà che sul secondo disco sia clonata la partizione EFI o BIOS GRUB (es.: /dev/sda1) e che vi sia installato il bootloader.&lt;br /&gt;
 # dd if=/dev/sda1 of=/dev/sdb1&lt;br /&gt;
 # grub-install /dev/sdb&lt;br /&gt;
&lt;br /&gt;
=====Sostituzione device danneggiato=====&lt;br /&gt;
Verificare qual è il disco che dà dei problemi&lt;br /&gt;
 # mount /dev/sda1 ''/punto_di_mount'' -o degraded&lt;br /&gt;
 # btrfs device stats ''/punto_di_mount''&lt;br /&gt;
 # btrfs filesystem show ''/punto_di_mount''&lt;br /&gt;
 # btrfs device usage ''/punto_di_mount''&lt;br /&gt;
&lt;br /&gt;
Ipotizzando che '''1''' sia l'ID del disco danneggiato secondo i comandi dati in precedenza&lt;br /&gt;
 # btrfs replace start '''1''' /dev/sdc1 ''/punto_di_mount''&lt;br /&gt;
&lt;br /&gt;
Per monitorare lo stato di ripristino del raid&lt;br /&gt;
 # btrfs replace status ''/punto_di_mount''&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
 # btrfs device delete missing /mnt&lt;br /&gt;
&lt;br /&gt;
==== RAID 5 ====&lt;br /&gt;
{{Note&lt;br /&gt;
|type=warning &lt;br /&gt;
| text= '''ATTENZIONE il raid5 su BTRFS è considerato [https://btrfs.readthedocs.io/en/latest/btrfs-man5.html#raid56-status-and-recommended-practices non sicuro] e se ne sconsiglia il suo utilizzo'''&lt;br /&gt;
}}&lt;br /&gt;
==== RAID 1C ====&lt;br /&gt;
&lt;br /&gt;
===== RAID 1C3 =====&lt;br /&gt;
Se si desidera duplicare i dati rispettivamente 2 volte in modo da poter perdere fino a due dischi su 3 senza perdere dati è possibile utilizzare una modalità chiamata raid1c3&lt;br /&gt;
&lt;br /&gt;
Per creare ex novo il raid1c3&lt;br /&gt;
 # mkfs.btrfs -d raid1c3 -m raid1c3 /dev/sda1 /dev/sdb1 /dev/sdc1&lt;br /&gt;
&lt;br /&gt;
Per convertire a raid1c3&lt;br /&gt;
 # btrfs balance start -dconvert=raid1c3 -mconvert=raid1c3 /storage-btrfs/&lt;br /&gt;
&lt;br /&gt;
===== RAID 1C4 =====&lt;br /&gt;
Se si desidera duplicare i dati rispettivamente 3 volte in modo da poter perdere fino a 3 dischi su 4 senza perdere dati è possibile utilizzare una modalità chiamata raid1c4&lt;br /&gt;
&lt;br /&gt;
Per creare ex novo il raid1c3&lt;br /&gt;
 # mkfs.btrfs -d raid1c4 -m raid1c4 /dev/sda1 /dev/sdb1 /dev/sdc1&lt;br /&gt;
&lt;br /&gt;
Per convertire a raid1c4&lt;br /&gt;
 # btrfs balance start -dconvert=raid1c4 -mconvert=raid1c4 /storage-btrfs/&lt;br /&gt;
&lt;br /&gt;
== ZFS ==&lt;br /&gt;
===Installazione di modulo e le utility da AUR===&lt;br /&gt;
 # pacman-key -r F75D9D76&lt;br /&gt;
 # pacman-key --lsign-key F75D9D76&lt;br /&gt;
 $ pikaur -S zfs-utils zfs-dkms&lt;br /&gt;
&lt;br /&gt;
===Installazione di modulo e utility da archzfs===&lt;br /&gt;
Modificare le seguenti righe al file '''pacman.conf''' di archiso&lt;br /&gt;
 [archzfs-testing]&lt;br /&gt;
 Server = https://archzfs.com/$repo/$arch&lt;br /&gt;
&lt;br /&gt;
 # pacman-key -r DDF7DB817396A49B2A2723F7403BD972F75D9D76&lt;br /&gt;
 # pacman-key --lsign-key DDF7DB817396A49B2A2723F7403BD972F75D9D76&lt;br /&gt;
 # pacman -S zfs-utils zfs-linux&lt;br /&gt;
&lt;br /&gt;
===Configurare il FS===&lt;br /&gt;
[https://wiki.archlinux.org/title/ZFS Comandi] per ottenere informazioni utili sul filesystem e sui pool&lt;br /&gt;
 # zfs list -t  all&lt;br /&gt;
 # zpool status&lt;br /&gt;
 # zpool list&lt;br /&gt;
&lt;br /&gt;
Abilitare i vari servizi sul filesystem&lt;br /&gt;
 # systemctl enable zfs-zed.service&lt;br /&gt;
 # systemctl enable zfs-mount.service&lt;br /&gt;
 # systemctl enable zfs-share.service&lt;br /&gt;
 # systemctl enable zfs-import.target&lt;br /&gt;
 # systemctl enable zfs.target&lt;br /&gt;
&lt;br /&gt;
Creare un pool su un disco&lt;br /&gt;
 # zpool create &amp;quot;pool&amp;quot; sda&lt;br /&gt;
&lt;br /&gt;
Creare un pool su una partizione&lt;br /&gt;
 # zpool create &amp;quot;pool&amp;quot; sda2&lt;br /&gt;
&lt;br /&gt;
Importare un pool&lt;br /&gt;
 # zpool import &amp;quot;pool&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Aggiungere pool alla cache per auto-import e mount (abilitare i vari demoni zfs)&lt;br /&gt;
 # zpool set cachefile=/etc/zfs/zpool.cache &amp;quot;pool&amp;quot;&lt;br /&gt;
&lt;br /&gt;
oppure si possono caricare i mountpoint in modalità legacy dall'fstab&lt;br /&gt;
 # zfs create -o mountpoint=legacy ''pool''/directory&lt;br /&gt;
&lt;br /&gt;
Aggiungere la compressione&lt;br /&gt;
 # zfs get compression ''pool''&lt;br /&gt;
 # zfs set compression=lz4 ''pool''&lt;br /&gt;
&lt;br /&gt;
Vedere le proprietà di un ''pool''&lt;br /&gt;
 # zfs get all ''zpool''&lt;br /&gt;
&lt;br /&gt;
==== RAID ====&lt;br /&gt;
Creare un pool in raid0&lt;br /&gt;
 # zpool create &amp;quot;pool&amp;quot; /dev/sdb /dev/sdc&lt;br /&gt;
&lt;br /&gt;
Creare un pool in raid1&lt;br /&gt;
 # zpool create &amp;quot;pool&amp;quot; mirror /dev/sdb /dev/sc&lt;br /&gt;
&lt;br /&gt;
Creare un pool ''raid5'' su più dischi&lt;br /&gt;
 # zpool create &amp;quot;pool&amp;quot; raidz /dev/sdb /dev/sdc /dev/sdd&lt;br /&gt;
&lt;br /&gt;
Creare un pool raid5 su immagini&lt;br /&gt;
 # zpool create &amp;quot;pool&amp;quot; raidz /path/1.img /path/2.img /path/3.img&lt;br /&gt;
&lt;br /&gt;
* [https://docs.oracle.com/cd/E19253-01/819-5461/gbbvf/index.html Sostituire] disco in raid&lt;br /&gt;
&lt;br /&gt;
Rimuovere il disco da sostituire&lt;br /&gt;
 # zpool offline disco1&lt;br /&gt;
&lt;br /&gt;
Inserire il nuovo disco&lt;br /&gt;
 # zpool replace &amp;quot;pool&amp;quot; disco1&lt;br /&gt;
 # zpool online disco1&lt;br /&gt;
&lt;br /&gt;
* Utilizza un altro disco montato al posto di quello danneggiato&lt;br /&gt;
 # zpool replace &amp;quot;pool&amp;quot; disco1 disco2&lt;br /&gt;
&lt;br /&gt;
Aggiungere uno o più dischi ad un pool&lt;br /&gt;
 # zpool add &amp;quot;pool&amp;quot; mirror disco3 disco4&lt;br /&gt;
 # zpool add &amp;quot;pool&amp;quot; raidz disco3 disco4 disco5&lt;br /&gt;
&lt;br /&gt;
Rimuovere disco1 da pool se aggiunto erroneamente&lt;br /&gt;
 # zpool remove &amp;quot;pool&amp;quot; disco1&lt;br /&gt;
&lt;br /&gt;
Controllare lo stato di un pool&lt;br /&gt;
 # zpool status&lt;br /&gt;
&lt;br /&gt;
Correggere eventuali errori&lt;br /&gt;
 # zpool clear ''pool'' ''disco''&lt;br /&gt;
 # zpool scrub  ''pool''&lt;br /&gt;
&lt;br /&gt;
=== Root filesystem ===&lt;br /&gt;
* Guida ufficiale [https://openzfs.github.io/openzfs-docs/Getting%20Started/Arch%20Linux/Root%20on%20ZFS/1-preparation.html Root on ZFS]&lt;br /&gt;
&lt;br /&gt;
Per prima cosa organizzare la tabella delle partizioni del [[#Preparazione_del_disco | disco]]&lt;br /&gt;
&lt;br /&gt;
Formattare la partizione e creare il dataset (senza mountpoint)&lt;br /&gt;
 # zpool create -m none rpool ''sda2''&lt;br /&gt;
 &lt;br /&gt;
Smontare il pool e rimontarlo in modalità legacy &lt;br /&gt;
 # zfs create -o mountpoint=none rpool/ROOT&lt;br /&gt;
 # zfs create -o mountpoint=legacy rpool/ROOT/arch&lt;br /&gt;
 # zpool set bootfs=rpool/ROOT/arch rpool&lt;br /&gt;
 # mount -t zfs rpool/ROOT /mnt&lt;br /&gt;
''rpool'' è il nome che abbiamo voluto dare al volume contenente il filesystem di sistema&lt;br /&gt;
&lt;br /&gt;
NB: se NON si usa il mountpoint in modalità legacy occorrerà impostare &amp;lt;code&amp;gt;canmount=noauto&amp;lt;/code&amp;gt; su tutti i dataset con &amp;lt;code&amp;gt;mountpoint=/&amp;lt;/code&amp;gt; (es.: zfs create -o mountpoint=/ -o canmount=noauto rpool/ROOT/arch) altrimenti il sistema cercherà di eseguirne automaticamente l'automount e fallirà se esistono più filesystem da montare su /&lt;br /&gt;
&lt;br /&gt;
Se volessimo aggiungere altri pool es.:&lt;br /&gt;
 # zfs create rpool/home&lt;br /&gt;
 # zfs create rpool/arch/pkg&lt;br /&gt;
 # zfs create rpool/var&lt;br /&gt;
 # zfs create rpool/srv&lt;br /&gt;
&lt;br /&gt;
Configurare la cache degli zpool&lt;br /&gt;
 # zpool set cachefile=/etc/zfs/rpool.cache rpool &lt;br /&gt;
&lt;br /&gt;
Copiare il file di cache nel sistema dove dovremo eseguire il chroot per l'installazione.&lt;br /&gt;
 # mkdir -p /mnt/etc/zfs&lt;br /&gt;
 # cp /etc/zfs/rpool.cache /mnt/etc/zfs/rpool.cache&lt;br /&gt;
&lt;br /&gt;
Installare il sistema di base&lt;br /&gt;
 # pacstrap -K /mnt base linux linux-firmware zfs-utils zfs-linux&lt;br /&gt;
&lt;br /&gt;
Altri pacchetti consigliati&lt;br /&gt;
 # pacstrap -K /mnt base-devel net-tools networkmanager nano zsh grml-zsh-config busybox&lt;br /&gt;
&lt;br /&gt;
Eseguire il chroot per procedere con l'installazione&lt;br /&gt;
 # arch-chroot /mnt&lt;br /&gt;
&lt;br /&gt;
Configurare il mountpoint su fstab&lt;br /&gt;
/etc/fstab &lt;br /&gt;
 rpool/ROOT/arch      /       zfs         noatime     0 0&lt;br /&gt;
&lt;br /&gt;
Editare il file /etc/mkinitcpio.conf aggiungendo zfs prima del filesystem&lt;br /&gt;
 HOOKS=&amp;quot;base udev autodetect modconf block keyboard zfs filesystems&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Abilitare i servizi per ZFS all'avvio&lt;br /&gt;
 # systemctl enable zfs-zed.service&lt;br /&gt;
 # systemctl enable zfs-mount.service&lt;br /&gt;
 # systemctl enable zfs-share.service&lt;br /&gt;
 # systemctl enable zfs-import.target&lt;br /&gt;
 # systemctl enable zfs.target&lt;br /&gt;
&lt;br /&gt;
Impostare una password di root&lt;br /&gt;
 # passwd&lt;br /&gt;
&lt;br /&gt;
Ricreare il ramdisk col supporto per ZFS&lt;br /&gt;
 # mkinitcpio -p linux&lt;br /&gt;
&lt;br /&gt;
Installare il [[Appunti_Arch_Linux#BOOT_LOADER|Boot Loader]]&lt;br /&gt;
&lt;br /&gt;
Uscire dal chroot e terminazione dell'installazione&lt;br /&gt;
 # exit&lt;br /&gt;
 # zfs unmount -a&lt;br /&gt;
 # cp /etc/zfs/rpool.cache /mnt/etc/zfs/rpool.cache&lt;br /&gt;
 # zpool export rpool&lt;br /&gt;
 # reboot&lt;br /&gt;
&lt;br /&gt;
==== BOOT LOADER ====&lt;br /&gt;
===== ZFSBootMenu =====&lt;br /&gt;
Per gestire a meglio gli snapshot e la clonazione dei pool è consigliabile utilizzare, su PC che supportano UEFI, il boot loader [https://docs.zfsbootmenu.org/en/latest/guides/alpine/uefi.html ZFSBootMenu].&lt;br /&gt;
&lt;br /&gt;
Esportiamo le variabile per configurare il primo disco /dev/sda come disco di avvio&lt;br /&gt;
 # export BOOT_DISK=&amp;quot;/dev/sda&amp;quot;&lt;br /&gt;
 # export BOOT_PART=&amp;quot;1&amp;quot;&lt;br /&gt;
 # export BOOT_DEVICE=&amp;quot;${BOOT_DISK}${BOOT_PART}&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Assicuriamoci che il nostro pool di root sia configurato come avviabile&lt;br /&gt;
 # zpool set bootfs=''rpool/ROOT/'' ''rpool''&lt;br /&gt;
&lt;br /&gt;
Formattiamo sda1 per creare la partizione EFI di boot&lt;br /&gt;
 # mkfs.vfat -F32 &amp;quot;$BOOT_DEVICE&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Aggiungiamola all'fstab e montiamola&lt;br /&gt;
 # cat &amp;lt;&amp;lt; EOF &amp;gt;&amp;gt; /etc/fstab&lt;br /&gt;
 $BOOT_DEVICE /boot/efi vfat defaults 0 0&lt;br /&gt;
 EOF&lt;br /&gt;
&lt;br /&gt;
 # mkdir -p /boot/efi&lt;br /&gt;
 # mount /boot/efi&lt;br /&gt;
&lt;br /&gt;
Scarichiamo ed installiamo il boot loader&lt;br /&gt;
 # mkdir -p /boot/efi/EFI/ZBM&lt;br /&gt;
 # curl -o /boot/efi/EFI/ZBM/VMLINUZ.EFI -L https://get.zfsbootmenu.org/efi&lt;br /&gt;
 # cp /boot/efi/EFI/ZBM/VMLINUZ.EFI /boot/efi/EFI/ZBM/VMLINUZ-BACKUP.EFI&lt;br /&gt;
&lt;br /&gt;
Forziamo zfsbootmenu a montare il nostro dataset con i permessi di scrittura&lt;br /&gt;
 # zfs set org.zfsbootmenu:commandline=&amp;quot;quiet loglevel=4 rw&amp;quot; rpool/ROOT&lt;br /&gt;
&lt;br /&gt;
Installiamo e configuriamo  ''efibootmgr''&lt;br /&gt;
 # pacman -S efibootmgr&lt;br /&gt;
&lt;br /&gt;
 # efibootmgr -c -d &amp;quot;$BOOT_DISK&amp;quot; -p &amp;quot;$BOOT_PART&amp;quot; \&lt;br /&gt;
  -L &amp;quot;ZFSBootMenu (Backup)&amp;quot; \&lt;br /&gt;
  -l \\EFI\\ZBM\\VMLINUZ-BACKUP.EFI&lt;br /&gt;
&lt;br /&gt;
 # efibootmgr -c -d &amp;quot;$BOOT_DISK&amp;quot; -p &amp;quot;$BOOT_PART&amp;quot; \&lt;br /&gt;
  -L &amp;quot;ZFSBootMenu&amp;quot; \&lt;br /&gt;
  -l \\EFI\\ZBM\\VMLINUZ.EFI&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Se si utilizza un pool distribuito su più dischi (RAID1 o RAIDZ) occorrerà installare il bootloader anche sugli altri dispositivi (nel caso del disco /dev/sdb).&lt;br /&gt;
&lt;br /&gt;
 # mount /dev/sdb1 /boot/efi&lt;br /&gt;
 # curl -o /boot/efi/EFI/ZBM/VMLINUZ.EFI -L https://get.zfsbootmenu.org/efi&lt;br /&gt;
 # efibootmgr -c -d &amp;quot;$BOOT_DISK&amp;quot; -p &amp;quot;$BOOT_PART&amp;quot; \&lt;br /&gt;
  -L &amp;quot;ZFSBootMenu sdb&amp;quot; \&lt;br /&gt;
  -l \\EFI\\ZBM\\VMLINUZ.EFI&lt;br /&gt;
&lt;br /&gt;
===== GRUB =====&lt;br /&gt;
Se non ci interessa gestire snapshot o utilizziamo un PC con BIOS è possibile optare per GRUB &lt;br /&gt;
 # pacman -S grub&lt;br /&gt;
 # grub-install /dev/sda&lt;br /&gt;
 (se si usa un pool composto da più dischi es. raidz per il filesystem di root è consigliabile installare grub su tutti i dischi: sda, sdb, sdc, sdd...)&lt;br /&gt;
 # grub-mkconfig -o /boot/grub/grub.cfg&lt;br /&gt;
&lt;br /&gt;
Esempio&lt;br /&gt;
 #Grub entry&lt;br /&gt;
 menuentry 'Arch Linux'{&lt;br /&gt;
       insmod gzio&lt;br /&gt;
       insmod part_gpt&lt;br /&gt;
       insmod zfs&lt;br /&gt;
       set root='hd0,gpt3'&lt;br /&gt;
        echo    'Loading Linux linux ...'&lt;br /&gt;
        linux   /ROOT@/boot/vmlinuz-linux root=ZFS=rpool/ROOT rw  loglevel=3 quiet&lt;br /&gt;
        echo    'Loading initial ramdisk ...'&lt;br /&gt;
        initrd  /ROOT@/boot/initramfs-linux.img&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
=== Snapshot ===&lt;br /&gt;
Snapshot del dataset ROOT&lt;br /&gt;
 # zfs snapshot -r rpool/ROOT''@snapshot-2023-03-07''&lt;br /&gt;
&lt;br /&gt;
Lista degli snapshot presenti&lt;br /&gt;
 # zfs list -t snapshot&lt;br /&gt;
&lt;br /&gt;
Ripristino dello snapshot&lt;br /&gt;
 # zfs rollback rpool''@snapshot-2023-03-07''&lt;br /&gt;
&lt;br /&gt;
Oltre che servire per il ripristino, possono essere montati per esplorarne il contenuto, ma non è possibile modificarlo.&lt;br /&gt;
 # mount -t zfs rpool@''2023-04-11'' /mnt/''snapshot''&lt;br /&gt;
&lt;br /&gt;
Copia locale di un dataset&lt;br /&gt;
 # zfs send -R rpool/ROOT''@snapshot-2023-03-07'' | zfs recv -F rpool/ROOT/backup&lt;br /&gt;
&lt;br /&gt;
Invio via SSH di una snapshot&lt;br /&gt;
 # zfs send -R rpool/ROOT''@snapshot-2023-03-07''| ssh ''user@ip_address'' zfs recv tank/backups/rootzfs&lt;br /&gt;
&lt;br /&gt;
Backup locale di una snapshot&lt;br /&gt;
 # zfs send -R rpool/ROOT@snapshot | gzip &amp;gt; /tmp/zfs_backup.gz&lt;br /&gt;
&lt;br /&gt;
Restore del backup&lt;br /&gt;
 # gzcat /tmp/zfs_backup.gz | zfs recv -F rpool/ROOT&lt;br /&gt;
&lt;br /&gt;
==== Clone ====&lt;br /&gt;
Se vogliamo eseguire operazioni di scrittura su una snapshot occorre effettuare un clone del dataset&lt;br /&gt;
 # zfs snapshot ''rpool/home''@yesterday&lt;br /&gt;
 # zfs clone ''rpool/home''@yesterday rpool/new_home&lt;br /&gt;
&lt;br /&gt;
Per sostituire il filesystem principale col clone&lt;br /&gt;
 # zfs promote rpool/new_home&lt;br /&gt;
&lt;br /&gt;
=== ZFS Cifrato ===&lt;br /&gt;
Creare un dataset cifrato con password&lt;br /&gt;
 # zfs create -o encryption=on -o keyformat=''password'' ''nomepool''/''nomedataset''&lt;br /&gt;
&lt;br /&gt;
Generazione di una chiave di cifratura&lt;br /&gt;
 # dd if=/dev/random of=/path/to/key bs=1 count=32&lt;br /&gt;
&lt;br /&gt;
Creare un dataset cifrato con una chiave di cifratura &lt;br /&gt;
 # zfs create -o encryption=on -o keyformat=raw -o keylocation=''file:///directory/della/chiave'' ''nomepool''/''nomedataset''&lt;br /&gt;
&lt;br /&gt;
Controllare il percorso della chiave per ''nomepool''/''nomedataset''&lt;br /&gt;
 # zfs get keylocation ''nomepool''/''nomedataset''&lt;br /&gt;
&lt;br /&gt;
Cambiare il percorso della chiave&lt;br /&gt;
 # zfs set keylocation=''file:///nuova/directory/della/chiave'' ''nomepool''/''nomedataset''&lt;br /&gt;
&lt;br /&gt;
Caricare manualmente le chiavi di cifratura prima del montaggio&lt;br /&gt;
 # zfs load-key ''nomepool''/''nomedataset'' # carica la chiave del determinato dataset&lt;br /&gt;
 # zfs load-key -a # carica tutte le chiavi del filesystem&lt;br /&gt;
&lt;br /&gt;
==== Unlock con systemd ====&lt;br /&gt;
Creare script per il caricamento delle chiavi all'avvio &lt;br /&gt;
&lt;br /&gt;
* Caricando la password dal keyfile&lt;br /&gt;
''/etc/systemd/system/zfs-loadkey-file.service''&lt;br /&gt;
&lt;br /&gt;
 [Unit]&lt;br /&gt;
 Description=Load ZFS encryption keys&lt;br /&gt;
 DefaultDependencies=no&lt;br /&gt;
 After=zfs-import.target&lt;br /&gt;
 Before=zfs-mount.service&lt;br /&gt;
 [Service]&lt;br /&gt;
 Type=oneshot&lt;br /&gt;
 RemainAfterExit=yes&lt;br /&gt;
 ExecStart=/usr/sbin/zfs load-key -a&lt;br /&gt;
 StandardInput=tty-force&lt;br /&gt;
 [Install]&lt;br /&gt;
 WantedBy=zfs-mount.service&lt;br /&gt;
&lt;br /&gt;
* Digitando la password&lt;br /&gt;
&lt;br /&gt;
''/etc/systemd/system/zfs-load-key@.service''&lt;br /&gt;
 [Unit]&lt;br /&gt;
 Description=Load %I encryption keys&lt;br /&gt;
 Before=systemd-user-sessions.service zfs-mount.service&lt;br /&gt;
 After=zfs-import.target&lt;br /&gt;
 Requires=zfs-import.target&lt;br /&gt;
 DefaultDependencies=no&lt;br /&gt;
 [Service]&lt;br /&gt;
 Type=oneshot&lt;br /&gt;
 RemainAfterExit=yes&lt;br /&gt;
 ExecStart=/bin/sh -c 'until (systemd-ask-password &amp;quot;Encrypted ZFS password for %I&amp;quot; --no-tty | zfs load-key %I); do echo &amp;quot;Try again!&amp;quot;; done'&lt;br /&gt;
 [Install]&lt;br /&gt;
 WantedBy=zfs-mount.service&lt;br /&gt;
&lt;br /&gt;
==== Unlock al login ====&lt;br /&gt;
Impostare il filesystem in modalità legacy così che non sia montato automaticamente all'avvio&lt;br /&gt;
 # zfs set mountpoint=legacy zroot/data/&lt;br /&gt;
&lt;br /&gt;
Modificare il file /etc/fstab&lt;br /&gt;
 zroot/data/         /home           zfs             rw,xattr,posixacl,noauto        0 0&lt;br /&gt;
&lt;br /&gt;
Creare il seguente script: &amp;lt;code&amp;gt;/sbin/mount-zfs-homedir&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 #&lt;br /&gt;
 set -eu&lt;br /&gt;
 # Password is given to us via stdin, save it in a variable for later&lt;br /&gt;
 PASS=$(cat -)&lt;br /&gt;
 #&lt;br /&gt;
 VOLNAME=&amp;quot;zroot/data/home&amp;quot;&lt;br /&gt;
 #&lt;br /&gt;
 # Unlock and mount the volume&lt;br /&gt;
 zfs load-key &amp;quot;$VOLNAME&amp;quot; &amp;lt;&amp;lt;&amp;lt; &amp;quot;$PASS&amp;quot; || continue&lt;br /&gt;
 zfs mount &amp;quot;$VOLNAME&amp;quot; || true # ignore errors&lt;br /&gt;
&lt;br /&gt;
Aggiungere lo script a PAM: /etc/pam.d/system-auth&lt;br /&gt;
&lt;br /&gt;
 auth       optional                    pam_exec.so          expose_authtok /sbin/mount-zfs-homedir&lt;br /&gt;
&lt;br /&gt;
=== Cache ===&lt;br /&gt;
Utilizzare un moderno disco a stato solido può essere una soluzione economica per velocizzare un pool, eventualmente anche raid&lt;br /&gt;
&lt;br /&gt;
 # zpool add -f ''rpool'' cache /dev/sdd1&lt;br /&gt;
 # zpool add -f ''rpool'' log /dev/sdd2&lt;br /&gt;
&lt;br /&gt;
=== Sharing ===&lt;br /&gt;
Non è molto noto, ma ZFS ha integrati dei [https://docs.oracle.com/cd/E36784_01/html/E36835/gayne.html#scrolltoc comandi] per permettere la condivisione del filesystem con altre macchine tramite i protocolli NFS o SMB.&lt;br /&gt;
&lt;br /&gt;
Premessa: occorrerà attivare il server NFS&lt;br /&gt;
 # systemctl start nfs-server.service&lt;br /&gt;
 # systemctl enable nfs-server.service&lt;br /&gt;
&lt;br /&gt;
Condividere tramite NFS l'intero pool ''home''&lt;br /&gt;
 # zfs set share.nfs=on ''pool''/home&lt;br /&gt;
&lt;br /&gt;
Verificare la condivisione&lt;br /&gt;
 # zfs get -r share.nfs ''pool''/home&lt;br /&gt;
 NAME             PROPERTY   VALUE  SOURCE&lt;br /&gt;
 pool/home        share.nfs  on     local&lt;br /&gt;
&lt;br /&gt;
Condividere tramite NFS la directory home dell'utente 1, 2...&lt;br /&gt;
 # zfs create ''pool''/home/'''utente1'''&lt;br /&gt;
 # zfs create ''pool''/home/'''utente2'''&lt;br /&gt;
&lt;br /&gt;
Si possono specificare opzioni di montaggio per i permessi sul mount&lt;br /&gt;
 # zfs set share.nfs.nosuid=on ''pool''/home/'''utente1'''&lt;br /&gt;
 # zfs set share.nfs=on ''pool''/home/'''utente1'''&lt;br /&gt;
&lt;br /&gt;
Condividere una directory con tutta la rete&lt;br /&gt;
 # zfs share -o share.nfs=on -o share.nfs.public=on pool/public%pubshare&lt;br /&gt;
&lt;br /&gt;
Condividere una directory con una parte della rete&lt;br /&gt;
 # zfs set share.nfs='rw=@192.0.10.0/16,rw=@192.0.11.0/24' pool/public%pubshare&lt;br /&gt;
&lt;br /&gt;
Disabilitare temporaneamente una condivisione&lt;br /&gt;
 # zfs unshare pool/home/''nomeshare''&lt;br /&gt;
&lt;br /&gt;
Rimuovere una condivisione&lt;br /&gt;
 # zfs set share.nfs=off pool/''share''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Montare share ===&lt;br /&gt;
Montare il volume pool1 della macchina con IP 192.168.0.2 su /mnt/pool1&lt;br /&gt;
 # mount -t nfs 192.168.0.2:/pool1 /mnt/pool1&lt;br /&gt;
&lt;br /&gt;
Aggiungere la seguente riga al file '''/etc/fstab''' per automatizzare il montaggio&lt;br /&gt;
 192.168.0.2:/pool1      /mnt/pool1      nfs       defaults          0          0&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== SWAP ===&lt;br /&gt;
Creare una partizione swap da 8 GiB&lt;br /&gt;
 # zfs create -V 8G '''&amp;lt;pool&amp;gt;/swap'''&lt;br /&gt;
&lt;br /&gt;
Formattazione della partizione&lt;br /&gt;
 # mkswap -f /dev/zvol/&amp;lt;pool&amp;gt;/swap&lt;br /&gt;
&lt;br /&gt;
Attivazione della swap&lt;br /&gt;
 # swapon /dev/zvol/&amp;lt;pool&amp;gt;/swap&lt;br /&gt;
&lt;br /&gt;
Aggiungere la swap al &amp;lt;code&amp;gt;/etc/fstab&amp;lt;/code&amp;gt;&lt;br /&gt;
 '''/dev/zvol/&amp;lt;pool&amp;gt;/swap''' none swap discard 0 0&lt;br /&gt;
&lt;br /&gt;
== Filesystem Cifrato ==&lt;br /&gt;
Esistono molti modi per cifrare volumi e file su Linux, come si può vedere da questa [https://wiki.archlinux.org/title/Data-at-rest_encryption#Comparison_table tabella]&lt;br /&gt;
&lt;br /&gt;
* Generare una password di 32 caratteri alfanumerici con /dev/random. &lt;br /&gt;
 cat /dev/random | tr -dc '[:alnum:]' | fold -w 32 | head -n 1&lt;br /&gt;
&lt;br /&gt;
=== EncFS ===&lt;br /&gt;
Cifrare una directory può essere un'alternativa alla cifratura di un intera partizione come avviene invece con Cryptsetup. EncFS è un filesystem user-space montabile tramite FUSE che permette di effettuare questa operazione. Rispetto ad un filesystem loopback criptato ci sono però diversi pregi e difetti.&lt;br /&gt;
&lt;br /&gt;
* Pro&lt;br /&gt;
# Selezionare selettivamente i contenuti da cifrare, rispetto ad avere un device completamente cifrato, appesantisce meno il lavoro della CPU specialmente quando si utilizzano processori datati privi del set di istruzioni AES.&lt;br /&gt;
# Dimensioni modificabili: un file system vuoto EncFS è composto da qualche dozzina di byte e può crescere a qualsiasi dimensione senza bisogno di essere riformattato. Con un dispositivi di cifratura a blocchi, si alloca un filesystem in anticipo con le dimensioni desiderate.&lt;br /&gt;
# Possibilità di backup incrementali: Un filesystem EncFS può essere salvato con una politica per file. Un programma di backup è in grado di rilevare quali file sono cambiati, anche se non sarà in grado di decifrarli.&lt;br /&gt;
# Permette di aggiungere la crittografia a qualsiasi filesystem&lt;br /&gt;
# Lavora a livello utente, non richiede permessi di amministratore&lt;br /&gt;
&lt;br /&gt;
* Contro&lt;br /&gt;
# Non permette di cifrare l'intera installazione, ma solo i file selezionati&lt;br /&gt;
# Chi ha accesso ai file crittografati può conoscerne i meta-dati (numero di file, permessi, dimensione)&lt;br /&gt;
# EncFS sembra non sia più attivamente mantenuto. Un'alternativa molto simile potrebbe essere gocryptfs.&lt;br /&gt;
&lt;br /&gt;
==== Montaggio automatico ====&lt;br /&gt;
Dato che non è possibile passare opzioni all'eseguibile encfs su fstab è necessario creare un wrapper, cioè uno script da rendere eseguibile (es. &amp;lt;code&amp;gt;/home/user/encfs.sh&amp;lt;/code&amp;gt;) che vada a recuperare la password da un file (es. ''encfs_password''), magari contenuto in una chiavetta USB anch'essa montata automaticamente all'avvio.&lt;br /&gt;
&lt;br /&gt;
Wrapper&lt;br /&gt;
 #!/bin/sh&lt;br /&gt;
 encfs --public --extpass=&amp;quot;cat /mnt/USB/encfs_password&amp;quot; $*&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
A questo punto è possibile aggiungere all'''/etc/fstab'' le seguenti righe.&lt;br /&gt;
 # Montaggio automatico della penna USB ''cafebabe-b00b5-deadbee'' all'avvio&lt;br /&gt;
 UUID=cafebabe-b00b5-deadbeef /mnt/USB auto defaults,auto 0 0&lt;br /&gt;
 # Richiamo del wrapper &lt;br /&gt;
 /home/''user''/encfs.sh#/home/''user''/.encrypted /home/''user''/decrypted fuse rw,user,auto 0 0&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== gocryptfs ===&lt;br /&gt;
Creare una directory cifrata ''crypt'' e montarla su ''dati''&lt;br /&gt;
 $ mkdir crypt dati&lt;br /&gt;
 $ gocryptfs -init crypt&lt;br /&gt;
 $ gocryptfs crypt dati&lt;br /&gt;
&lt;br /&gt;
Creare una versione cifrata di una preesistente home&lt;br /&gt;
&lt;br /&gt;
 $ mkdir /home/user.crypt&lt;br /&gt;
 $ gocryptfs -init -reverse /home/user&lt;br /&gt;
 $ gocryptfs -reverse /home/user /home/user.crypt&lt;br /&gt;
&lt;br /&gt;
È possibile aggiungere una linea simile alle seguente al file '''/etc/fstab''' per automatizzare il sistema di montaggio di una cartella cifrata durante il boot utilizzando un keyfile.&lt;br /&gt;
&lt;br /&gt;
 /home/user/cipher /home/user/plain fuse./usr/bin/gocryptfs nofail,allow_other,passfile=/tmp/password 0 0&lt;br /&gt;
&lt;br /&gt;
=== [https://wiki.archlinux.org/title/ECryptfs ECryptfs] ===&lt;br /&gt;
&lt;br /&gt;
=== VeraCrypt ===&lt;br /&gt;
[https://www.veracrypt.fr VeraCrypt] (fork di TrueCrypt) è un tool opensource dotato di '''interfaccia grafica''' che permette di configurare la cifratura di volumi reali o file immagini montate in loop. Ha una funzione particolare, chiamata '''Hidden Volume''' che permette di creare un volume nascosto all'interno di un normale volume VeraCrypt al quale si può accedere con una diversa password così da evitare in caso di necessità (ricatto, fidanzata/moglie gelosa, imposizione da parte delle forze dell'ordine) di mostrare il contenuto del reale archivio cifrato.&lt;br /&gt;
&lt;br /&gt;
=== LUKS ===&lt;br /&gt;
Questo strumento permette di crittografare un intero disco o una partizione, es. /dev/'''sdc2''':&lt;br /&gt;
 &lt;br /&gt;
 # cryptsetup luksFormat --cipher aes-xts-plain64 --key-size 512 --hash sha512 --iter-time 5000 /dev/'''sdc2'''&lt;br /&gt;
 &lt;br /&gt;
Una volta formattato il device è possibile montarlo, verrà chiesto di creare una password a meno che nel comando non venga esplicitato un file con la chiave di cifratura&lt;br /&gt;
 # cryptsetup open /dev/'''sdc2''' lukspart&lt;br /&gt;
&lt;br /&gt;
Adesso è possibile formattare il device col filesystem che preferiamo&lt;br /&gt;
 # mkfs.btrfs /dev/mapper/lukspart&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[https://wiki.golem.linux.it/Installare_Arch_Linux_in_una_partizione_cifrata How-to GOLEM]&lt;br /&gt;
&lt;br /&gt;
[https://guide.debianizzati.org/index.php/Volumi_criptati_LUKS_-_Creazione_e_uso_con_cryptmount How-to Debianizzati]&lt;br /&gt;
&lt;br /&gt;
=== fscrypt ===&lt;br /&gt;
È un sistema di cifratura progettato per lavorare con filesystem moderni che supportano direttamente la crittografia nativa come ext4, F2FS, UBIFS, CephFS e forse in futuro anche btrfs. &lt;br /&gt;
&lt;br /&gt;
Abilitiamo la crittografia su una directory di un device '''sdc1''' precedentemente formattato con ext4&lt;br /&gt;
 # fscrypt setup /mnt/encrypted&lt;br /&gt;
 # tune2fs -O encrypt /dev/'''sdc1'''&lt;br /&gt;
 # fscrypt encrypt /mnt/encrypted&lt;br /&gt;
&lt;br /&gt;
Per accedere alla directory al riavvio successivo&lt;br /&gt;
 # fscrypt unlock /mnt/encrypted&lt;br /&gt;
&lt;br /&gt;
=== ZFS ===&lt;br /&gt;
Creiamo un pool dove mettere il dataset cifrato, es.: '''tank/encrypted_data'''&lt;br /&gt;
 # zpool create tank /dev/sdc3&lt;br /&gt;
&lt;br /&gt;
Creiamo il dataset&lt;br /&gt;
 # zfs create -o encryption=aes-256-gcm -o keyformat=passphrase -o keylocation=prompt '''tank/encrypted_data'''&lt;br /&gt;
 &lt;br /&gt;
Montiamo il datasett&lt;br /&gt;
  # zfs mount '''tank/encrypted_data'''&lt;br /&gt;
&lt;br /&gt;
Montiamo pool e dataset cifrato al riavvio successivo &lt;br /&gt;
 # zpool import tank&lt;br /&gt;
 # zfs load-key '''tank/encrypted_data'''&lt;br /&gt;
 # zfs mount '''tank/encrypted_data'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Appunti_Arch_Linux#ZFS_Cifrato|ZFS cifrato]]&lt;br /&gt;
&lt;br /&gt;
= RAID mdadm =&lt;br /&gt;
Su Linux era possibile effettuare RAID via software anche prima dell'avvento di filesystem di nuova generazione come btrfs o zfs. Per fare ciò è possibile utilizzare il comando &amp;lt;code&amp;gt;mdadm&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Vedere l'organizzazione della tabella delle partizioni dei dischi&lt;br /&gt;
 $ lsblk&lt;br /&gt;
&lt;br /&gt;
 sda      8:16   0 447.1G  0 disk &lt;br /&gt;
 ├─sda1   8:17   0   500M  0 part &lt;br /&gt;
 ├─sda2   8:18   0    16G  0 part [SWAP]&lt;br /&gt;
 └─sda3   8:19   0 430.6G  0 part /&lt;br /&gt;
                                 &lt;br /&gt;
 sdb      8:32   1   3.7G  0 disk &lt;br /&gt;
 ├─sdb1   8:33   1   3.5G  0 part &lt;br /&gt;
 ├─sdb2   8:34   1   239M  0 part [SWAP]&lt;br /&gt;
 └─sdb3   8:19   0 430.6G  0 part /&lt;br /&gt;
&lt;br /&gt;
Nell'esempio ci sono due dischi (sda, sdb) contenenti 3 partizioni: EFI, SWAP e Linux.&lt;br /&gt;
&lt;br /&gt;
== RAID 0 ==&lt;br /&gt;
Creare un volume ''md3'' che costituito dalla somma delle due partizioni sda3 e sdb3&lt;br /&gt;
 # mdadm --create --verbose /dev/md3 --level=0 --raid-devices=2 /dev/sda3 /dev/sdb3&lt;br /&gt;
&lt;br /&gt;
Verificare che il raid funzioni correttamente&lt;br /&gt;
 # mdadm --detail /dev/md0&lt;br /&gt;
&lt;br /&gt;
Utilizzare il nuovo volume md3, formattato col filesystem XFS, per una nuova installazione di Arch Linux (montandolo in /mnt)&lt;br /&gt;
 # mkfs.xfs /dev/md3&lt;br /&gt;
 # mount /dev/md3 /mnt/&lt;br /&gt;
&lt;br /&gt;
Per memorizzare l'array nel file di configurazione&lt;br /&gt;
 # mdadm –Es &amp;gt; /etc/mdadm.conf&lt;br /&gt;
&lt;br /&gt;
== RAID 1 ==&lt;br /&gt;
Creare un volume ''md3'' mirror delle due partizioni sda3 e sdb3&lt;br /&gt;
 # mdadm --create /dev/md3 /dev/sda3 /dev/sdb3 --level=1 --raid-devices=2&lt;br /&gt;
&lt;br /&gt;
== RAID 5 ==&lt;br /&gt;
Creare un volume ''md3'' con un [https://en.wikipedia.org/wiki/Standard_RAID_levels#RAID_5 raid5], ovviamente stavolta occorreranno almeno 3 dischi es.: sda3, sdb3, sdc3. &lt;br /&gt;
&lt;br /&gt;
Per creare tre partizioni tutte della stessa dimensione è possibile copiare su sdb e sdc la tabella delle partizioni di sda&lt;br /&gt;
 #  sfdisk -d /dev/sda | sfdisk /dev/sdb&lt;br /&gt;
 #  sfdisk -d /dev/sda | sfdisk /dev/sdc&lt;br /&gt;
&lt;br /&gt;
Creare l'array in raid5&lt;br /&gt;
 # mdadm --create /dev/md/md3 /dev/sda1 /dev/sdb1 /dev/sdc1 --level=5 --raid-devices=3 --bitmap=internal&lt;br /&gt;
&lt;br /&gt;
== Modificare l'array ==&lt;br /&gt;
È possibile passare da raid1 a raid5&lt;br /&gt;
 # mdadm --grow /dev/md3 --level=5&lt;br /&gt;
 # mdadm --grow /dev/md3 --add /dev/sdc3 --raid-devices=3&lt;br /&gt;
&lt;br /&gt;
== Accorgersi di un guasto ==&lt;br /&gt;
Nei raid 1 e 5 in caso di danneggiamento di un disco sarà possibile sostituirlo e ricostruire l'array senza perdere dati. Nell'ipotesi di avere un guasto su '''sdb''' in un raid1 comparirà qualcosa di simile a questo eseguendo &amp;lt;code&amp;gt;cat /proc/mdstat&amp;lt;/code&amp;gt;&lt;br /&gt;
 md3 : active raid1 sda3[1]&lt;br /&gt;
 ''blocks [2/2] [U_]'' &lt;br /&gt;
invece che&lt;br /&gt;
 md3 : active raid1 sda3[1] '''sdb3'''[0]&lt;br /&gt;
      262016 blocks [2/2] [UU]&lt;br /&gt;
&lt;br /&gt;
===Rimuovere il disco danneggiato dal RAID===&lt;br /&gt;
Si dovrà marcare sdb3 come danneggiata e andrà rimossa dall'array.&lt;br /&gt;
 # mdadm --manage /dev/md3 --fail /dev/sdb3&lt;br /&gt;
 # mdadm --manage /dev/md3 --remove /dev/sdb3&lt;br /&gt;
&lt;br /&gt;
Se avessimo più array (es. md1, md2...) contenenti partizioni del disco sdb (sdb1, sdb2...), l'operazione andrebbe ripetuta per ciascuno di essi es.:&lt;br /&gt;
 # mdadm --manage /dev/md1 --fail /dev/sdb1&lt;br /&gt;
 # mdadm --manage /dev/md1 --remove /dev/sdb1&lt;br /&gt;
&lt;br /&gt;
 #  cat /proc/mdstat&lt;br /&gt;
 Personalities : [linear] [multipath] [raid0] [raid1] [raid5] [raid4] [raid6] [raid10]&lt;br /&gt;
 md0 : active raid1 sda3[0]&lt;br /&gt;
 24418688 blocks [2/1] [U_]&lt;br /&gt;
&lt;br /&gt;
 unused devices: &amp;lt;none&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Sostituzione del disco danneggiato ===&lt;br /&gt;
Spegnere il computer, rimuovere il disco guasto e collegarne al suo posto uno funzionante.&lt;br /&gt;
&lt;br /&gt;
'''NB: il nuovo disco dovrà essere di dimensioni uguali o maggiori del disco sostituito'''&lt;br /&gt;
&lt;br /&gt;
Installato il nuovo disco, riaccendere il PC, loggarsi come root e ricreare sul nuovo sdb le stesse partizioni presenti su sda:&lt;br /&gt;
 # sfdisk -d /dev/sda | sfdisk /dev/sdb&lt;br /&gt;
 # fdisk -l ''(per controllare che le partizioni siano uguali)''&lt;br /&gt;
&lt;br /&gt;
=== Ripristino del RAID 1 ===&lt;br /&gt;
Aggiungere ''/dev/sdb3'' a ''/dev/md3''&lt;br /&gt;
 # mdadm --manage /dev/md3 --add /dev/sdb3&lt;br /&gt;
&lt;br /&gt;
Se avessimo più array (es. md1, md2...) contenenti partizioni del disco sdb (sdb1, sdb2...), l'operazione andrebbe ripetuta per ciascuno di essi es.:&lt;br /&gt;
  # mdadm --manage /dev/md1 --add /dev/sdb1&lt;br /&gt;
&lt;br /&gt;
Controllare che tutto sia andato a buon fine&lt;br /&gt;
 # cat /proc/mdstat&lt;br /&gt;
&lt;br /&gt;
= LVM =&lt;br /&gt;
Il [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 Logical Volume Manager] (LVM o gestore logico dei volumi) è un software per la gestione dei dischi che permette di superare le limitazioni legate al normale partizionamento di questi ultimi. Si tratta di una specie di ''strato'' che si va a frapporre tra il dispositivo fisico ed il filesystem. Permette di gestire dinamicamente aggiunta, rimozione o ridimensionamento dello spazio di archiviazione, il RAID, nonché lo snapshot dei volumi.&lt;br /&gt;
&lt;br /&gt;
LVM è un prodotto oltremodo maturo, disponibile per Linux sin dal kernel 2.4, per questa ragione distribuzioni orientate al mercato aziendale come RedHat lo hanno scelto, accoppiandolo a XFS o ext4, come soluzione predefinita per implementare la maggior parte delle caratteristiche fornite dai moderni filesystem come BTRFS o ZFS &lt;br /&gt;
&lt;br /&gt;
LVM si basa sui seguenti concetti&lt;br /&gt;
&lt;br /&gt;
* '''Physical Volumes (PV)''': rappresentano qualsiasi disco si voglia inizializzare (&amp;quot;formattare&amp;quot;) come sottosistema LVM&lt;br /&gt;
 # pvcreate /dev/sda1&lt;br /&gt;
 # pvcreate /dev/sdb3&lt;br /&gt;
 # pvcreate /dev/sdc&lt;br /&gt;
 # pvdisplay&lt;br /&gt;
&lt;br /&gt;
* '''Volume Groups (VG)''': sono costituiti da ''physical volumes'' e rappresentano la capacità totale delle risorse di un LVM&lt;br /&gt;
 # vgcreate vg0 /dev/sda1 /dev/sdb3 /dev/sdc&lt;br /&gt;
 # vgdisplay vg0&lt;br /&gt;
&lt;br /&gt;
* '''Logical Volumes (LV)''': utilizzano le risorse messe a disposizione dai ''volume groups''. Possono essere inizializzati anche con proprietà di RAID o cache.&lt;br /&gt;
 # lvcreate -L 10G -n ''home'' vg0&lt;br /&gt;
 # lvdisplay /dev/vg0/home&lt;br /&gt;
&lt;br /&gt;
Oppure nel caso volessimo fare un raid5&lt;br /&gt;
 # lvcreate -n lvr5 –type raid5 -L 10G -i 3 vg0&lt;br /&gt;
 &lt;br /&gt;
 -n ''nome del volume''&lt;br /&gt;
 –type raid5 ''tipo di raid''&lt;br /&gt;
 -L ''dimensione massima della grandezza del raid''&lt;br /&gt;
 -i ''numero dei physical volumes che si vogliono utilizzare''&lt;br /&gt;
&lt;br /&gt;
Per formattare il volume logico appena creato&lt;br /&gt;
 # mkfs -t ext4 /dev/vg0/lvr5&lt;br /&gt;
&lt;br /&gt;
Per aggiungere un disco ad un Volume Groups&lt;br /&gt;
 # vgextend vg0 /dev/sdb2&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Snapshot ==&lt;br /&gt;
Creare uno snapshot della del volume logico ''/home'' che potrà contenere fino ad un massimo di 5 GiB di dati modificati rispetto all'originale&lt;br /&gt;
 # lvcreate --size 5G --snapshot --name homesnap20230306 /dev/vg0/home&lt;br /&gt;
&lt;br /&gt;
Ripristinare il volume logico ricaricando lo snapshot&lt;br /&gt;
 # lvconvert --merge /dev/vg0/homesnap20230306&lt;br /&gt;
&lt;br /&gt;
Nel caso il logical volume sia attivo il merging avverrà col prossimo riavvio e lo snapshot sparirà.&lt;br /&gt;
&lt;br /&gt;
== Cache ==&lt;br /&gt;
Utilizzare un moderno disco a stato solido può essere una soluzione economica per velocizzare un LV.&lt;br /&gt;
&lt;br /&gt;
Convertire il disco a PV ed aggiungerlo al preesistente VG&lt;br /&gt;
 # pvcreate ''/dev/discoSSD''&lt;br /&gt;
 # vgextend vg0 ''/dev/discoSSD''&lt;br /&gt;
&lt;br /&gt;
Aggiungere la cache al LV&lt;br /&gt;
 # lvcreate --type cache --cachemode writethrough -l 100%FREE -n root_cachepool vg0/home ''/dev/discoSSD''&lt;br /&gt;
&lt;br /&gt;
Rimuovere la cache dal LV&lt;br /&gt;
 # lvconvert --uncache vg0/home&lt;br /&gt;
&lt;br /&gt;
= GRUB (Boot loader) =&lt;br /&gt;
È 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.&lt;br /&gt;
&lt;br /&gt;
== Sistema con BIOS ==&lt;br /&gt;
 # pacman -S grub&lt;br /&gt;
 # grub-mkconfig -o /boot/grub/grub.cfg&lt;br /&gt;
 # grub-install /dev/sda&lt;br /&gt;
&lt;br /&gt;
== Sistema UEFI ==&lt;br /&gt;
'''NB: per installare correttamente GRUB su un sistema UEFI occorre che il device di installazione abbia effettuato il boot in modalità UEFI e non Legacy (BIOS)'''&lt;br /&gt;
&lt;br /&gt;
 # pacman -S grub&lt;br /&gt;
 # mkdir /boot/EFI&lt;br /&gt;
 # mount /dev/sda1 /boot/EFI&lt;br /&gt;
 # grub-install /dev/sda&lt;br /&gt;
 # grub-mkconfig -o /boot/grub/grub.cfg&lt;br /&gt;
&lt;br /&gt;
== Gestione snapshot BTRFS ==&lt;br /&gt;
&lt;br /&gt;
=== Manuale ===&lt;br /&gt;
Editare ''/etc/grub.d/40_custom'' (o crearlo) e aggiungere quanto segue per permettere l'avvio della snapshot ''rootsnap''&lt;br /&gt;
&lt;br /&gt;
 menuentry 'Linux snapshot' {&lt;br /&gt;
        insmod gzio&lt;br /&gt;
        insmod part_gpt&lt;br /&gt;
        insmod btrfs&lt;br /&gt;
        set root='hd1,gpt3'&lt;br /&gt;
        linux   /rootsnap/boot/vmlinuz-linux root=/dev/partizione rw rootflags=subvol=rootsnap  quiet&lt;br /&gt;
        initrd  /rootsnap/boot/initramfs-linux.img&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
dopodichè aggiornare la configurazione di GRUB con&lt;br /&gt;
 # grub-mkconfig -o /boot/grub/grub.cfg&lt;br /&gt;
&lt;br /&gt;
=== Automatico ===&lt;br /&gt;
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.&lt;br /&gt;
 # pacman -S grub-btrfs&lt;br /&gt;
&lt;br /&gt;
Ogni volta che si vorrà aggiornare grub con nuovi subvolumi basterà dare il seguente comando&lt;br /&gt;
&lt;br /&gt;
 # grub-mkconfig -o /boot/grub/grub.cfg&lt;br /&gt;
&lt;br /&gt;
== Ripristinare GRUB ==&lt;br /&gt;
Aggiornando la propria distribuzione Linux, il proprio boot loader o installando un altro sistema operativo (es. Windows) può capitare di sovrascrivere il [http://it.wikipedia.org/wiki/Master_boot_record MBR].&lt;br /&gt;
&lt;br /&gt;
Avviare il computer con un liveCD/DVD o USB: &lt;br /&gt;
* [http://archlinux.mirror.garr.it/archlinux/iso/latest/archlinux-x86_64.iso Archlinux]&lt;br /&gt;
* [http://www.sysresccd.org/Download Systemrescuecd]&lt;br /&gt;
* [http://grml.org/download/ grml]&lt;br /&gt;
* [http://na.mirror.garr.it/mirrors/ubuntu-releases/ Ubuntu]&lt;br /&gt;
&lt;br /&gt;
Ipotizziamo di avere una partizione / chiamata /dev/sda2 e nessuna /boot&lt;br /&gt;
&lt;br /&gt;
Creiamo i seguenti mount point&lt;br /&gt;
 # sudo su&lt;br /&gt;
 # cd /mnt&lt;br /&gt;
 # mkdir sda2&lt;br /&gt;
 # mount /dev/sda2 /mnt/sda2&lt;br /&gt;
&lt;br /&gt;
Se utilizziamo una scheda madre UEFI andrà montata anche la partizione efi (solitamente è la prima partizione del disco ''sda1'')&lt;br /&gt;
 # mount /dev/sda2 /mnt/sda2/boot/efi&lt;br /&gt;
&lt;br /&gt;
Se necessario editiamo il file di configurazione di grub&lt;br /&gt;
  # nano /mnt/sda2/boot/grub/grub.cfg&lt;br /&gt;
&lt;br /&gt;
=== arch-chroot ===&lt;br /&gt;
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&lt;br /&gt;
&lt;br /&gt;
 # arch-chroot /mnt/sda2&lt;br /&gt;
&lt;br /&gt;
=== Manuale ===&lt;br /&gt;
 # mount --rbind /dev /mnt/sda2/dev&lt;br /&gt;
 # mount -t proc /proc /mnt/sda2/proc&lt;br /&gt;
 # mount -t sysfs /sys /mnt/sda2/sys/&lt;br /&gt;
&lt;br /&gt;
Eseguiamo il vero e proprio chroot in /dev/sda2&lt;br /&gt;
 # chroot /mnt/sda2&lt;br /&gt;
&lt;br /&gt;
=== Reinstallazione ===&lt;br /&gt;
 # grub-mkconfig -o /boot/grub/grub.cfg&lt;br /&gt;
 # grub-install /dev/sda&lt;br /&gt;
&lt;br /&gt;
=== Riavvio del sistema ===&lt;br /&gt;
Usciamo dal chroot, smontiamo la partizione e riavviamo il sistema&lt;br /&gt;
 # exit&lt;br /&gt;
 # umount /mnt/sda1/proc&lt;br /&gt;
 # umount /mnt/sda1/dev&lt;br /&gt;
 # umount /mnt/sda1&lt;br /&gt;
 # systemctl reboot&lt;br /&gt;
&lt;br /&gt;
== Eliminare il boot loader ==&lt;br /&gt;
In caso di errori nell'installazione di GRUB è possibile cancellare il vecchio boot loader di un disco (&amp;lt;code&amp;gt;''devicename'' = sda,sdb,sdc...&amp;lt;/code&amp;gt;)&lt;br /&gt;
 # dd if=/dev/zero of=''/dev/devicename'' bs=446 count=1&lt;br /&gt;
&lt;br /&gt;
== ISOBoot ==&lt;br /&gt;
Con GRUB2 è possibile effettuare il boot di iso di LiveCD/USB Linux presenti sul disco aggiungendole su &amp;lt;code&amp;gt;/etc/grub.d/40_custom &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Ubuntu 23.04&lt;br /&gt;
 menuentry &amp;quot;Ubuntu 23.04 desktop ISO&amp;quot; {&lt;br /&gt;
        insmod part_gpt&lt;br /&gt;
        insmod ext2&lt;br /&gt;
        insmod btrfs&lt;br /&gt;
        rmmod tpm&lt;br /&gt;
     # es.: terza partizione del primo disco&lt;br /&gt;
        set root=(hd0,gpt3)&lt;br /&gt;
        set isofile=&amp;quot;/home/'''&amp;lt;username&amp;gt;'''/Downloads/ubuntu-23.04-desktop-amd64.iso&amp;quot;&lt;br /&gt;
        loopback loop $isofile&lt;br /&gt;
        linux (loop)/casper/vmlinuz boot=casper iso-scan/filename=$isofile quiet splash&lt;br /&gt;
        initrd (loop)/casper/initrd&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
= Networking =&lt;br /&gt;
&lt;br /&gt;
== Manuale ==&lt;br /&gt;
===net-tools===&lt;br /&gt;
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 [https://lists.debian.org/debian-devel/2009/03/msg00780.html obsoleta]. Tra i suoi comandi principali: arp, hostname, ifconfig, iptunnel netstat e route.&lt;br /&gt;
&lt;br /&gt;
Attivare l'interfaccia di rete eth0 ed assegnarle l'indirizzo ip 192.168.0.2&lt;br /&gt;
 # ifconfig eth0 192.168.0.2 up&lt;br /&gt;
&lt;br /&gt;
Disattivare l'interfaccia di rete eth0&lt;br /&gt;
 # ifconfig eth0 down&lt;br /&gt;
&lt;br /&gt;
Assegnare manualmente un gateway (es.: 192.168.0.1) alla rete&lt;br /&gt;
 # route add default gw 192.168.0.1&lt;br /&gt;
&lt;br /&gt;
Ovviamente occorrerà aggiungere un server DNS al file &amp;lt;code&amp;gt;/etc/resolv.conf&amp;lt;/code&amp;gt; per la risoluzione degli indirizzi.&lt;br /&gt;
&lt;br /&gt;
=== iproute2 ===&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|+ Conversione comandi da net-tools a iproute2&lt;br /&gt;
|-&lt;br /&gt;
! net-tools&lt;br /&gt;
! iproute2&lt;br /&gt;
! Note&lt;br /&gt;
|-&lt;br /&gt;
| ifconfig&lt;br /&gt;
| ip addr, ip link&lt;br /&gt;
| Address and link configuration&lt;br /&gt;
|-&lt;br /&gt;
| route&lt;br /&gt;
| ip route&lt;br /&gt;
| Routing tables&lt;br /&gt;
|-&lt;br /&gt;
| arp&lt;br /&gt;
| ip neigh&lt;br /&gt;
| Neighbors&lt;br /&gt;
|-&lt;br /&gt;
| iptunnel&lt;br /&gt;
| ip tunnel&lt;br /&gt;
| Tunnels&lt;br /&gt;
|-&lt;br /&gt;
| nameif, ifrename&lt;br /&gt;
| ip link set name&lt;br /&gt;
| Rename network interfaces&lt;br /&gt;
|-&lt;br /&gt;
| ipmaddr&lt;br /&gt;
| ip maddr&lt;br /&gt;
| Multicast&lt;br /&gt;
|-&lt;br /&gt;
| netstat&lt;br /&gt;
| ss, ip route&lt;br /&gt;
| Show various networking statistics&lt;br /&gt;
|-&lt;br /&gt;
| brctl&lt;br /&gt;
| bridge&lt;br /&gt;
| Handle bridge addresses and devices&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Elencare gli indirizzi IP: &lt;br /&gt;
 # ip addr&lt;br /&gt;
&lt;br /&gt;
Mostra le informazioni di una specifica interfaccia di rete&lt;br /&gt;
 # ip addr show ''eth0''&lt;br /&gt;
&lt;br /&gt;
Aggiungere un indirizzo all'interfaccia eth0:&lt;br /&gt;
 # ip addr add 192.0.2.10/24 dev eth0&lt;br /&gt;
&lt;br /&gt;
Cancellare un indirizzo associato all'interfaccia eth0:&lt;br /&gt;
 # ip addr delete 192.0.2.10/24 dev eth0&lt;br /&gt;
&lt;br /&gt;
Attivare l'interfaccia eth0:&lt;br /&gt;
 # ip link set dev eth0 up&lt;br /&gt;
&lt;br /&gt;
Disattivare l'interfaccia eth0:&lt;br /&gt;
 # ip link set dev eth0 down&lt;br /&gt;
&lt;br /&gt;
Svuotare la cache arp per tutte le interfacce:&lt;br /&gt;
 # ip neigh flush all&lt;br /&gt;
&lt;br /&gt;
Aggiungere una rotta che passa per gateway 192.0.2.1&lt;br /&gt;
 # ip route add default via 192.0.2.1&lt;br /&gt;
&lt;br /&gt;
Aggiungere una rotta che passa per gateway 192.168.2.1 per l'interfaccia 10.0.2.0&lt;br /&gt;
 # ip route add 10.0.2.1/24 via 192.168.0.1 dev enp0s3&lt;br /&gt;
&lt;br /&gt;
Rimuovere la rotta che passa per gateway 192.168.2.1 per l'interfaccia 10.0.2.0&lt;br /&gt;
 # ip route del 10.0.2.0/24 via 192.168.0.1 dev enp0s3 &lt;br /&gt;
&lt;br /&gt;
Mostrare la tabella di routing&lt;br /&gt;
 # ip route show&lt;br /&gt;
&lt;br /&gt;
== Systemd-networkd==&lt;br /&gt;
'''[https://wiki.archlinux.org/title/Systemd-networkd systemd-networkd'''] è un demone, parte di systemd, che gestisce la configurazione della rete.&lt;br /&gt;
&lt;br /&gt;
=== Esempi di configurazione ===&lt;br /&gt;
Per prima cosa sarà necessario abilitare il servizio&lt;br /&gt;
 # systemctl enable --now systemd-networkd.service&lt;br /&gt;
 # systemctl enable --now systemd-resolved.service&lt;br /&gt;
 # ln -rsf /run/systemd/resolve/stub-resolv.conf /etc/resolv.conf&lt;br /&gt;
&lt;br /&gt;
==== DHCP ====&lt;br /&gt;
/etc/systemd/network/20-wired.network&lt;br /&gt;
 [Match]&lt;br /&gt;
 Name=enp1s0&lt;br /&gt;
 [Network]&lt;br /&gt;
 DHCP=yes&lt;br /&gt;
&lt;br /&gt;
==== IP statico ====&lt;br /&gt;
/etc/systemd/network/20-wired.network&lt;br /&gt;
 [Match]&lt;br /&gt;
 Name=enp1s0&lt;br /&gt;
 [Network]&lt;br /&gt;
 Address=10.1.10.9/24&lt;br /&gt;
 Gateway=10.1.10.1&lt;br /&gt;
 DNS=10.1.10.1&lt;br /&gt;
&lt;br /&gt;
==== Wireless adapter ====&lt;br /&gt;
Per potersi connettere a connessioni WIFI è necessario installare e configurare un'ulteriore applicazione dedicata come '''iwd''' o '''wpa_supplicant''' per l'autenticazione alla rete.&lt;br /&gt;
&lt;br /&gt;
/etc/systemd/network/25-wireless.network&lt;br /&gt;
 [Match]&lt;br /&gt;
 Name=wlp2s0&lt;br /&gt;
 [Network]&lt;br /&gt;
 DHCP=yes&lt;br /&gt;
 IgnoreCarrierLoss=3s&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Rinominare l'interfaccia di rete ====&lt;br /&gt;
Invece che impostare una regola su udev è possibile usare un file di testo .link nel seguente modo&lt;br /&gt;
&lt;br /&gt;
/etc/systemd/network/''10-ethusb0.link''&lt;br /&gt;
 [Match]&lt;br /&gt;
 MACAddress=12:34:56:78:90:ab&lt;br /&gt;
 [Link]&lt;br /&gt;
 Description=USB to Ethernet Adapter&lt;br /&gt;
 Name=''ethusb0''&lt;br /&gt;
&lt;br /&gt;
== Wifi ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! [https://wiki.archlinux.org/title/Network_configuration/Wireless#Utilities Programmi] !! [https://wireless.wiki.kernel.org/en/developers/documentation/wireless-extensions WEXT] !! [https://wireless.wiki.kernel.org/en/developers/documentation/nl80211 nl80211] !! WEP !! WPA&lt;br /&gt;
|-&lt;br /&gt;
| [https://hewlettpackard.github.io/wireless-tools/Tools.html wireless_tools] || Sì || No || Sì || No&lt;br /&gt;
|-&lt;br /&gt;
| [https://wireless.wiki.kernel.org/en/users/documentation/iw iw] || No || Sì || Sì || No&lt;br /&gt;
|-&lt;br /&gt;
| [https://wiki.archlinux.org/title/wpa_supplicant wpa_supplicant] || Sì || Sì || No || Sì&lt;br /&gt;
|-&lt;br /&gt;
| [https://wiki.archlinux.org/title/Iwd iwd]/iwgtk || No || Sì || No || Sì&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== NetworkManager ==&lt;br /&gt;
[https://networkmanager.dev/ NetworkManager] è una utility che si è imposta come standard per la configurazione della reti Linux (LAN e Wifi)&lt;br /&gt;
&lt;br /&gt;
Si compone di un demone, un'interfaccia da riga di comando [https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/9/html/configuring_basic_system_settings/assembly_configuring-and-managing-network-access_configuring-basic-system-settings#configuring-a-static-ethernet-connection-using-nmcli_assembly_configuring-and-managing-network-access (nmcli)] ed un'interfaccia di configurazione basata su un menu testuale ([https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/9/html/configuring_basic_system_settings/assembly_configuring-and-managing-network-access_configuring-basic-system-settings nmtui]). &lt;br /&gt;
&lt;br /&gt;
I principali desktop enviroment come GNOME e KDE Plasma possiedono una utility grafica che consente loro di configurare graficamente le reti basandosi su NetworkManager.&lt;br /&gt;
&lt;br /&gt;
=== Installazione ===&lt;br /&gt;
 # pacman -S networkmanager &lt;br /&gt;
 # systemctl enable NetworkManager&lt;br /&gt;
 # systemctl start NetworkManager&lt;br /&gt;
&lt;br /&gt;
==== Configurazione  ====&lt;br /&gt;
* 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 &amp;lt;code&amp;gt;nmtui&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Per chi dovesse prediligere la configurazione manuale: &amp;lt;code&amp;gt;nmcli&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Per impedire a Network Manager di gestire una certa interfaccia di rete è sufficiente aggiungere il suo MAC Address al file di configurazione &amp;lt;code&amp;gt;/etc/NetworkManager/NetworkManager.conf&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 [main]&lt;br /&gt;
 plugins=keyfile&lt;br /&gt;
 [keyfile]&lt;br /&gt;
 unmanaged-devices=mac:''00:25:21:73:90:72''&lt;br /&gt;
&lt;br /&gt;
=== Alternative ===&lt;br /&gt;
* [https://wiki.archlinux.org/title/ConnMan ConnMan]&lt;br /&gt;
&lt;br /&gt;
== Condividere la connessione ==&lt;br /&gt;
&lt;br /&gt;
=== Abilitazione del forwarding dei pacchetti ===&lt;br /&gt;
&lt;br /&gt;
 $ sudo echo 1 &amp;gt; /proc/sys/net/ipv4/ip_forward&lt;br /&gt;
&lt;br /&gt;
Per rendere il forwarding definitivo editare il file ''/etc/sysctl.conf'' modificando come segue il parametro net.ipv4.ip_forward:&lt;br /&gt;
&lt;br /&gt;
 net.ipv4.ip_forward = 1&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Mascheramento dei pacchetti ===&lt;br /&gt;
&lt;br /&gt;
 $ sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE&lt;br /&gt;
&lt;br /&gt;
''eth0'' non è un parametro fisso, identifica l'interfaccia con la quale il PC si connette ad Internet&lt;br /&gt;
&lt;br /&gt;
Per applicare automaticamente tale regola ad ogni riavvio&lt;br /&gt;
 # iptables-save &amp;gt; /etc/iptables.ipv4.nat&lt;br /&gt;
 # iptables-restore &amp;lt; /etc/iptables.ipv4.nat&lt;br /&gt;
&lt;br /&gt;
=== Moduli kernel ===&lt;br /&gt;
&lt;br /&gt;
Assicurarsi che siano caricati i seguenti moduli:&lt;br /&gt;
 # modprobe ip_tables&lt;br /&gt;
 # modprobe ip_conntrack&lt;br /&gt;
 # modprobe iptable_nat&lt;br /&gt;
 # modprobe ipt_MASQUERADE&lt;br /&gt;
&lt;br /&gt;
=== Condivisione tramite rete ethernet ===&lt;br /&gt;
&lt;br /&gt;
==== Configurazione scheda di rete interna ====&lt;br /&gt;
&lt;br /&gt;
Assegnare un IP statico alla scheda ethernet con la quale si vuol condividere la connessione.&lt;br /&gt;
&lt;br /&gt;
 # ifconfig eth1 192.168.5.1 netmask 255.255.255.0 up&lt;br /&gt;
&lt;br /&gt;
Per rendere tale configurazione permanente sarà necessario editare il file ''/etc/network/interfaces'' ed aggiungere la seguente configurazione&lt;br /&gt;
&lt;br /&gt;
 auto eth1&lt;br /&gt;
 iface eth1 inet static&lt;br /&gt;
 address 192.168.5.1&lt;br /&gt;
 netmask 255.255.255.0&lt;br /&gt;
&lt;br /&gt;
=== Condivisione tramite rete WI-FI ===&lt;br /&gt;
&lt;br /&gt;
==== Configurazione scheda wireless ====&lt;br /&gt;
&lt;br /&gt;
Se non si desidera cifrare la rete e proteggerla con una password sarà sufficiente eseguire questi comandi.&lt;br /&gt;
&lt;br /&gt;
 # iwconfig wlan0 mode Master&lt;br /&gt;
 # iwconfig wlan0 ESSID ReteGOLEM&lt;br /&gt;
 # iwconfig wlan0 enc off&lt;br /&gt;
 # ifconfig wlan0 192.168.5.1 netmask 255.255.255.0 up&lt;br /&gt;
&lt;br /&gt;
Per rendere tale configurazione permanente sarà necessario creare un file del tipo ''/etc/systemd/network/20-wifi.network'' ed aggiungere la seguente configurazione&lt;br /&gt;
 [Match]&lt;br /&gt;
 Name=wlan0&lt;br /&gt;
 [Network]&lt;br /&gt;
 Address=192.168.5.1/24&lt;br /&gt;
&lt;br /&gt;
Naturalmente occorrerà che sia attivato il demone systemd-networkd&lt;br /&gt;
 # systemctl enable --now systemd-networkd.service&lt;br /&gt;
&lt;br /&gt;
===== Proteggere la connessione WI-FI =====&lt;br /&gt;
&lt;br /&gt;
Installare il programma hostapd&lt;br /&gt;
 # pacman -S hostapd&lt;br /&gt;
&lt;br /&gt;
Configurare hostapd modificando ''/etc/hostapd/hostapd.conf''&lt;br /&gt;
&lt;br /&gt;
 # Interfaccia di rete&lt;br /&gt;
 interface=wlan0&lt;br /&gt;
 # Driver della scheda wifi usata (non tutte le schede sono supportate)&lt;br /&gt;
 driver=nl80211&lt;br /&gt;
 # Nome della rete (SSID)&lt;br /&gt;
 ssid=ReteGOLEM&lt;br /&gt;
 hw_mode=g&lt;br /&gt;
 # Canale di trasmissione&lt;br /&gt;
 channel=6&lt;br /&gt;
 macaddr_acl=0&lt;br /&gt;
 # Righe per la protezione&lt;br /&gt;
 auth_algs=1&lt;br /&gt;
 ignore_broadcast_ssid=0&lt;br /&gt;
 wpa=2&lt;br /&gt;
 # Password del wifi&lt;br /&gt;
 wpa_passphrase=password&lt;br /&gt;
 wpa_key_mgmt=WPA-PSK&lt;br /&gt;
 wpa_pairwise=TKIP&lt;br /&gt;
 rsn_pairwise=CCMP&lt;br /&gt;
&lt;br /&gt;
Editare il file ''/etc/default/hostapd'' per impostare ''hostapd.conf'' come file di configurazione predefinito, modificando la riga DAEMON_CONF=&amp;quot;&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
 DAEMON_CONF=&amp;quot;/etc/hostapd/hostapd.conf&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== Assegnazione automatica degli IP ai client ===&lt;br /&gt;
&lt;br /&gt;
 # pacman -S dhcp&lt;br /&gt;
&lt;br /&gt;
Editare ''/etc/dhcpd.conf'' aggiungendo la configurazione per la rete interna (es.: eth1 o wlan0):&lt;br /&gt;
&lt;br /&gt;
 subnet 192.168.5.0 netmask 255.255.255.0 {&lt;br /&gt;
 range 192.168.5.100  192.168.5.200;&lt;br /&gt;
 option domain-name-servers 8.8.8.8;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== VPN ==&lt;br /&gt;
=== OpenVPN ===&lt;br /&gt;
https://wiki.archlinux.org/title/OpenVPN&lt;br /&gt;
&lt;br /&gt;
===L2TP/IPsec VPN===&lt;br /&gt;
https://wiki.archlinux.org/title/Openswan_L2TP/IPsec_VPN_client_setup&lt;br /&gt;
&lt;br /&gt;
= Container =&lt;br /&gt;
== Toolbox==&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
=== Immagini ===&lt;br /&gt;
* [https://github.com/toolbx-images/images https://github.com/toolbx-images/images] Immagini di container delle principali distribuzioni&lt;br /&gt;
&lt;br /&gt;
=== Comandi ===&lt;br /&gt;
Creare un container&lt;br /&gt;
 $ toolbox create -i quay.io/toolbx-images/rhel-toolbox:9.1 -c redhat&lt;br /&gt;
&lt;br /&gt;
Entrare in un container&lt;br /&gt;
 $ toolbox enter redhat&lt;br /&gt;
 &lt;br /&gt;
Fermare un container&lt;br /&gt;
 $ podman stop nome_macchina&lt;br /&gt;
&lt;br /&gt;
Rimuovere un container&lt;br /&gt;
 $ toolbox rm -f redhat&lt;br /&gt;
&lt;br /&gt;
Rimuovere un container e la sua immagine&lt;br /&gt;
 $ toolbox rmi redhat &lt;br /&gt;
&lt;br /&gt;
Esaminare la lista dei container e delle immagini disponibili&lt;br /&gt;
 $ toolbox list &lt;br /&gt;
&lt;br /&gt;
Permettere agli utenti non root di utilizzare i container&lt;br /&gt;
 $ sudo sh -c 'echo &amp;quot;username:100000:65536&amp;quot; &amp;gt;&amp;gt; /etc/subuid'&lt;br /&gt;
 $ sudo sh -c 'echo &amp;quot;username:100000:65536&amp;quot; &amp;gt;&amp;gt; /etc/subgid'&lt;br /&gt;
&lt;br /&gt;
Abilitare l'host al forwarding di X11 per le applicazioni che richiedono Xorg&lt;br /&gt;
 # xhost +&lt;br /&gt;
&lt;br /&gt;
Eseguire un comandi all'interno di un container&lt;br /&gt;
 $ toolbox run -c redhat libreoffice&lt;br /&gt;
&lt;br /&gt;
== LXC ==&lt;br /&gt;
[https://wiki.archlinux.org/title/Linux_Containers Linux Container] (LXC) permette di virtualizzare uno o più container Linux su un singolo host LXC, gestendone virtualmente RAM, CPU, socket e rete.&lt;br /&gt;
&lt;br /&gt;
È estremamente utile quando si ha bisogno di isolare dei servizi dal sistema host: es.: server web, imap, smtp...&lt;br /&gt;
&lt;br /&gt;
=== Installazione ===&lt;br /&gt;
Installare LXC&lt;br /&gt;
 # pacman -S lxc lxc-templates lxcfs lxd&lt;br /&gt;
&lt;br /&gt;
=== Comandi ===&lt;br /&gt;
Lista dei container installati&lt;br /&gt;
 lxc-ls -f &lt;br /&gt;
&lt;br /&gt;
Installare un container scegliendo l'immagine dalla lista di quelli disponibili&lt;br /&gt;
 lxc-create -n playtime -t download&lt;br /&gt;
&lt;br /&gt;
Se sapete già di quale container avete bisogno sarà possibile scaricarlo direttamente&lt;br /&gt;
 lxc-create -n playtime -t download -- --dist archlinux --release current --arch amd64&lt;br /&gt;
&lt;br /&gt;
Far partire il container chiamato ''debian''&lt;br /&gt;
 lxc-start debian &lt;br /&gt;
&lt;br /&gt;
Entrare dentro il container chiamato ''debian''&lt;br /&gt;
 lxc-attach debian&lt;br /&gt;
&lt;br /&gt;
Fermare l'esecuzione del container chiamato ''debian''&lt;br /&gt;
 lxc-stop debian&lt;br /&gt;
&lt;br /&gt;
Rimuovere il container chiamato ''debian''&lt;br /&gt;
 lxc-destroy debian &lt;br /&gt;
&lt;br /&gt;
Eseguire un comando dentro il container chiamato ''debian''&lt;br /&gt;
 lxc-attach --name debian nano&lt;br /&gt;
&lt;br /&gt;
=== Rete Bridge ===&lt;br /&gt;
Nel caso si debbano usare servizi da tenere esposti su Internet potrebbe essere conveniente utilizzare una rete bridge piuttosto che NAT.&lt;br /&gt;
&lt;br /&gt;
[https://wiki.debian.org/LXC/SimpleBridge Configurazione] rete bridge.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Docker ==&lt;br /&gt;
Abilitare ed avviare docker&lt;br /&gt;
 # systemctl enable --now docker&lt;br /&gt;
&lt;br /&gt;
Cercare il container desiderato&lt;br /&gt;
 # docker search &amp;quot;xxx&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Scaricare l'immagine desiderata&lt;br /&gt;
 # docker pull xxxx:latest&lt;br /&gt;
&lt;br /&gt;
Visualizzare le immagini scaricate&lt;br /&gt;
 # docker images&lt;br /&gt;
&lt;br /&gt;
Visualizzare i docker creati&lt;br /&gt;
 # docker ps -a&lt;br /&gt;
&lt;br /&gt;
Avviare docker&lt;br /&gt;
 # docker start nome_docker&lt;br /&gt;
&lt;br /&gt;
Entrare nel docker&lt;br /&gt;
 # docker attach nome_docker&lt;br /&gt;
&lt;br /&gt;
Copiare un file dal sistema host al docker&lt;br /&gt;
 # docker cp esempio.txt nome_docker: /esempio.txt&lt;br /&gt;
&lt;br /&gt;
Copiare un file dal docker.&lt;br /&gt;
 # docker cp container-id:/path/filename.txt ~/Desktop/filename.txt&lt;br /&gt;
&lt;br /&gt;
Rimuovere un docker&lt;br /&gt;
 # docker rm nome_docker&lt;br /&gt;
&lt;br /&gt;
Rimuovere tutti i docker&lt;br /&gt;
 # docker container stop $(docker container ls -aq)&lt;br /&gt;
 # docker system prune -a --volumes&lt;br /&gt;
&lt;br /&gt;
Avviare automaticamente un docker (da testare)&lt;br /&gt;
 # docker run --restart=always --name nome_docker&lt;br /&gt;
&lt;br /&gt;
Creare script di avvio ''docker-webserver''.service&lt;br /&gt;
 [Unit]&lt;br /&gt;
 Description=Some service&lt;br /&gt;
 Requires=docker.service&lt;br /&gt;
 After=docker.service&lt;br /&gt;
 [Service]&lt;br /&gt;
 Restart=always&lt;br /&gt;
 ExecStart=/usr/bin/docker start -a container_name&lt;br /&gt;
 ExecStop=/usr/bin/docker stop -t 2 container_name&lt;br /&gt;
 [Install]&lt;br /&gt;
 WantedBy=multi-user.target&lt;br /&gt;
&lt;br /&gt;
* [https://wiki.archlinux.org/title/docker Arch Linux Docker WIKI]&lt;br /&gt;
&lt;br /&gt;
== [https://wiki.archlinux.org/title/systemd-nspawn systemd-nspawn] ==&lt;br /&gt;
&lt;br /&gt;
= Fonti software alternative =&lt;br /&gt;
Nella rara eventualità che si necessiti di un programma non presente né nei repository ufficiali, né su [https://aur.archlinux.org/ AUR] è possibile optare per una delle seguenti opzioni.&lt;br /&gt;
&lt;br /&gt;
== AppImage ==&lt;br /&gt;
Scaricate qualsiasi pacchetto disponibile su [https://appimage.github.io/ appimage.github.io] e rendetelo eseguibile.&lt;br /&gt;
&lt;br /&gt;
 $ chmod a+x ''nomeprogramma''.AppImage&lt;br /&gt;
&lt;br /&gt;
Non resta che eseguirlo col seguente comando o con un doppio click&lt;br /&gt;
 $ ./''nomeprogramma''.AppImage&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Flatpak ==&lt;br /&gt;
Concepito per essere una sorta di '''Google Play Store''' per GNOME, è possibile installare programmi provenienti da [https://flathub.org/home flatpak] utilizzando i normali gestori grafici di pacchetti basati su packagekit come ''Gnome Software'' o ''Discover di Plasma''.&lt;br /&gt;
&lt;br /&gt;
Installazione&lt;br /&gt;
 # pacman -S flatpak&lt;br /&gt;
&lt;br /&gt;
Abilitazione del repository ufficiale del progetto (software di terze parti potrebbe richiedere di aggiungere altri repository)&lt;br /&gt;
 # flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo&lt;br /&gt;
&lt;br /&gt;
Elenca i repository disponibili.&lt;br /&gt;
 $ flatpak remotes&lt;br /&gt;
&lt;br /&gt;
Installa un'applicazione (es.: libreoffice)&lt;br /&gt;
 $ flatpak install flathub org.libreoffice.LibreOffice&lt;br /&gt;
&lt;br /&gt;
Esegue un'applicazione (es.: libreoffice)&lt;br /&gt;
 $ flatpak run org.libreoffice.LibreOffice&lt;br /&gt;
&lt;br /&gt;
Disinstalla un'applicazione mantenendo i dati.&lt;br /&gt;
 $ flatpak uninstall &amp;lt;nome app&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Disinstalla un'applicazione eliminando i dati (nella home utente .var/app/).&lt;br /&gt;
 $ flatpak uninstall &amp;lt;nome app&amp;gt; --delete-data&lt;br /&gt;
&lt;br /&gt;
Elimina i dati di tutte le applicazioni disinstallate (nella home utente .var/app/).&lt;br /&gt;
 $ flatpak uninstall --delete-data&lt;br /&gt;
&lt;br /&gt;
Disinstalla tutte le applicazioni flatpak installate sul sistema.&lt;br /&gt;
 $ flatpak uninstall --all&lt;br /&gt;
	&lt;br /&gt;
Cerca ed esegue aggiornamenti per le applicazioni installate.&lt;br /&gt;
 $ flatpak update&lt;br /&gt;
&lt;br /&gt;
Aggiorna una singola applicazione.&lt;br /&gt;
 $ flatpak update &amp;lt;nome app&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Elenca tutte le applicazioni flatpak installate sul sistema.&lt;br /&gt;
 $ flatpak list --app&lt;br /&gt;
	&lt;br /&gt;
Elenca i runtime installati.&lt;br /&gt;
 $ flatpak list --runtime&lt;br /&gt;
	&lt;br /&gt;
Visualizzare le informazioni sulle applicazioni in esecuzione.&lt;br /&gt;
 $ flatpak ps&lt;br /&gt;
	&lt;br /&gt;
Termina un'applicazione bloccata o danneggiata (l'ID dell'istanza si può ottenere dal comando precedente).&lt;br /&gt;
 $ flatpak kill &amp;lt;id istanza&amp;gt;&lt;br /&gt;
	&lt;br /&gt;
Tenta la riparare dei pacchetti danneggiati. Necessita dei privilegi di amministrazione. &lt;br /&gt;
 $ flatpak repair&lt;br /&gt;
&lt;br /&gt;
== Nix ==&lt;br /&gt;
[https://nixos.wiki/wiki/Nix_package_manager Nix package manager] è il gestore di pacchetti utilizzato su [https://nixos.org/ NixOS]. È possibile però utilizzarlo su qualsiasi distribuzione Linux affiancandone il gestore di pacchetti predefinito.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
[https://nixos.org/manual/nixpkgs/stable/ Guida completa]&lt;br /&gt;
&lt;br /&gt;
=== Installazione ===&lt;br /&gt;
[https://nixos.org/download.html#nix-install-linux Guida ufficiale]&lt;br /&gt;
&lt;br /&gt;
'''Single-user installation'''&lt;br /&gt;
 $ sudo install -d -m755 -o $(id -u) -g $(id -g) /nix&lt;br /&gt;
 $ sh &amp;lt;(curl -L https://nixos.org/nix/install) --no-daemon&lt;br /&gt;
&lt;br /&gt;
Aggiungere la riga seguente al &amp;lt;code&amp;gt;.bashrc&amp;lt;/code&amp;gt; o al file di configurazione della vostra shell per poter utilizzare i comandi Nix&lt;br /&gt;
 $ source $HOME/.nix-profile/etc/profile.d/nix.sh&lt;br /&gt;
&lt;br /&gt;
=== Canali ===&lt;br /&gt;
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''.&lt;br /&gt;
&lt;br /&gt;
Ecco di seguito i comandi principali per gestire questi canali&lt;br /&gt;
&lt;br /&gt;
Lista dei canali configurati&lt;br /&gt;
 $ nix-channel --list&lt;br /&gt;
&lt;br /&gt;
Aggiungere il canale principale (''nixos'')&lt;br /&gt;
 $ nix-channel --add https://nixos.org/channels/channel-name nixos&lt;br /&gt;
&lt;br /&gt;
Aggiungere altri canali&lt;br /&gt;
 $ nix-channel --add https://some.channel/url my-alias&lt;br /&gt;
&lt;br /&gt;
Rimuovere un canale&lt;br /&gt;
 $ nix-channel --remove channel-alias&lt;br /&gt;
&lt;br /&gt;
Aggiornare un canale&lt;br /&gt;
 $ nix-channel --update channel-alias&lt;br /&gt;
&lt;br /&gt;
Aggiornare tutti i canali&lt;br /&gt;
 $ nix-channel --update&lt;br /&gt;
&lt;br /&gt;
=== Comandi ===&lt;br /&gt;
Cercare un pacchetto&lt;br /&gt;
 $ nix search nixpkgs ''packagename''&lt;br /&gt;
&lt;br /&gt;
Installare un pacchetto&lt;br /&gt;
 $ nix-env -iA ''packagename''&lt;br /&gt;
&lt;br /&gt;
Vedere i pacchetti installati&lt;br /&gt;
 $ nix-env -q&lt;br /&gt;
&lt;br /&gt;
Disinstallare un pacchetto&lt;br /&gt;
 $ nix-env -e ''packagename''&lt;br /&gt;
&lt;br /&gt;
Aggiornare tutti i pacchetti&lt;br /&gt;
 $ nix-env -u&lt;br /&gt;
&lt;br /&gt;
== Snap ==&lt;br /&gt;
È 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. &lt;br /&gt;
&lt;br /&gt;
Su Arch è disponibile su AUR: [https://aur.archlinux.org/packages/snapd snapd]&lt;br /&gt;
&lt;br /&gt;
=== Installazione ===&lt;br /&gt;
Installare ed abilitare Snap&lt;br /&gt;
 $ [https://aur.archlinux.org/packages/yay yay] -S snapd&lt;br /&gt;
 $ sudo ln -s /var/lib/snapd/snap /snap&lt;br /&gt;
 $ sudo systemctl start snapd.service&lt;br /&gt;
 $ sudo systemctl enable snapd.service&lt;br /&gt;
&lt;br /&gt;
=== Comandi ===&lt;br /&gt;
Cercare un programma&lt;br /&gt;
 $ snap find ''nomeprogramma''&lt;br /&gt;
&lt;br /&gt;
Installare un programma&lt;br /&gt;
 $ sudo snap install ''nomeprogramma''&lt;br /&gt;
&lt;br /&gt;
Rimuovere un programma&lt;br /&gt;
 $ sudo snap remove ''nomeprogramma''&lt;br /&gt;
&lt;br /&gt;
Vedere i programmi installati &lt;br /&gt;
 $ snap list&lt;br /&gt;
&lt;br /&gt;
Rimuovere una determinata versione di un programma&lt;br /&gt;
 $ sudo snap remove ''nomeprogramma'' --revision&lt;br /&gt;
&lt;br /&gt;
Aggiornare manualmente i pacchetti snap&lt;br /&gt;
 $ sudo snap refresh&lt;br /&gt;
&lt;br /&gt;
= GPG =&lt;br /&gt;
[http://it.wikipedia.org/wiki/GNU_Privacy_Guard GNU Privacy Guard (GnuPG o GPG)] è un programma libero pensato per fornire un'alternativa opensource al [http://it.wikipedia.org/wiki/Pretty_Good_Privacy Pretty Good Privacy (PGP)].&lt;br /&gt;
Nel PGP sono usate sia la crittografia asimmetrica (a chiave pubblica) che quella simmetrica.&lt;br /&gt;
La chiave pubblica del destinatario serve al mittente unicamente per cifrare la chiave comune per un algoritmo di crittografia simmetrica che sarà usata per cifrare il testo in chiaro del messaggio.&lt;br /&gt;
Un destinatario decifra un messaggio protetto da GPG usando la chiave di sessione con l'algoritmo simmetrico. Tale chiave di sessione è inclusa nel messaggio in maniera criptata ed è decifrata usando la chiave privata del destinatario.&lt;br /&gt;
L'utilizzo di due cifrature oltre che a velocizzare l'esecuzione del programma (la cifratura a chiave simmetrica è molto più veloce di quella asimmetrica) permette di poter cifrare uno stesso messaggio per più destinatari.&lt;br /&gt;
&lt;br /&gt;
== Generare una chiave ==&lt;br /&gt;
 $ gpg --gen-key&lt;br /&gt;
&lt;br /&gt;
Controllare che la chiave sia stata correttamente creata&lt;br /&gt;
 $ gpg --list-keys&lt;br /&gt;
&lt;br /&gt;
== Certificato di revoca ==&lt;br /&gt;
Il certificato di revoca serve per invalidare la chiave nel caso in cui questa venga compromessa.&lt;br /&gt;
Chiunque sia in possesso del certificato di revoca può revocare la chiave corrispondente, per cui è bene tenerlo in un posto sicuro.&lt;br /&gt;
Poiché, nel momento in cui si ha bisogno del certificato di revoca, potremmo non essere più in grado di generarlo, conviene generarlo subito dopo la creazione della chiave, e prima di iniziare a utilizzarla pubblicamente.&lt;br /&gt;
 $ gpg --output certificato-di-revoca.asc --gen-revoke ''ID''&lt;br /&gt;
dove &amp;lt;code&amp;gt;ID&amp;lt;/code&amp;gt; è dato dalle ultime 8 cifre dell'impronta (fingerprint) della chiave.&lt;br /&gt;
&lt;br /&gt;
== Utilizzo pratico ==&lt;br /&gt;
=== Criptare un documento ===&lt;br /&gt;
 $ gpg -o file1.ext.gpg -e -r UserID file1.ext&lt;br /&gt;
&lt;br /&gt;
Esempio:&lt;br /&gt;
 $ gpg -o tesi.odt.gpg -e -r spookyh@gmail.com tesi.odt&lt;br /&gt;
&lt;br /&gt;
=== Decriptare un documento ===&lt;br /&gt;
 $ gpg -o file1.ext -d file1.gpg&lt;br /&gt;
&lt;br /&gt;
=== Firmare un documento ===&lt;br /&gt;
Il mittente può usare PGP per ''firmare'' un messaggio con l'algoritmo di firma RSA o Digital Signature Algorithm (DSA). Per fare ciò viene calcolato un hash (message digest) dal testo in chiaro e successivamente da questo hash è creata la [http://it.wikipedia.org/wiki/Firma_digitale firma digitale] usando la chiave privata del mittente.&lt;br /&gt;
 $ gpg -o file1.ext.sig -s file1.ext&lt;br /&gt;
&lt;br /&gt;
=== Verificare un documento ===&lt;br /&gt;
 $ gpg --verify file1.sig&lt;br /&gt;
&lt;br /&gt;
== Importare ed esportare chiavi (locali) ==&lt;br /&gt;
Importare una chiave (pubblica)&lt;br /&gt;
 $ gpg --import chiave.asc (o .txt)&lt;br /&gt;
&lt;br /&gt;
Esportare la propria chiave pubblica&lt;br /&gt;
 $ gpg -a -o chiave_pubblica.asc --export&lt;br /&gt;
&lt;br /&gt;
=== Esportare la propria chiave privata ===&lt;br /&gt;
{{Note&lt;br /&gt;
|type=attention&lt;br /&gt;
|text= La chiave privata può essere utilizzata per impersonare la vostra identità, '''NON''' inviarla mai a '''nessuno''', ed esportala solo per effettuarne backup, naturalmente da custodire in un luogo sicuro.}}&lt;br /&gt;
 $ gpg --armor --export-secret-keys &amp;lt;ID&amp;gt; &amp;gt; secret-key.gpg.asc&lt;br /&gt;
&lt;br /&gt;
== Condividere le chiavi pubbliche ==&lt;br /&gt;
Inviare la chiave ad un keyserver:&lt;br /&gt;
 $ gpg --keyserver keyserver.linux.it --send-key &amp;lt;ID&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Importare una chiave da un keyserver:&lt;br /&gt;
 $ gpg --keyserver keyserver.linux.it --recv-keys &amp;lt;ID&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se ci fidiamo del proprietario e vogliamo mostrare pubblicamente la nostra fiducia, possiamo firmare la chiave appena importata e esportare la firma su un keyserver (vedere sezioni successive).&lt;br /&gt;
&lt;br /&gt;
=== Keyserver ===&lt;br /&gt;
Quando si carica una chiave su un keyserver, poi questo la condivide con gli altri keyserver che fanno parte dello stesso circuito.&lt;br /&gt;
Non esiste un'entità centralizzata o un circuito di riferimento (per scelta di design), e, a volte, questo può generare confusione nell'utilizzatore.&lt;br /&gt;
Inoltre, alcuni keyserver potrebbero non essere sempre accessibili.&lt;br /&gt;
&lt;br /&gt;
Tra i keyserver più noti:&lt;br /&gt;
* keys.openpgp.org&lt;br /&gt;
* keyserver.ubuntu.com&lt;br /&gt;
* keys.gnupg.net&lt;br /&gt;
* pgp.surfnet.nl&lt;br /&gt;
* pgp.circl.lu&lt;br /&gt;
* pgp.mit.edu&lt;br /&gt;
&lt;br /&gt;
== Editare una chiave ==&lt;br /&gt;
Per fare operazioni e modifiche dobbiamo &amp;quot;editare&amp;quot; le chiavi, aprendo l'editor interattivo:&lt;br /&gt;
 $ gpg --edit-key &amp;lt;ID&amp;gt;&lt;br /&gt;
'''NB: Prima di uscire dall'editor, ricordarsi di salvare, altrimenti le modifiche vanno perdute'''&lt;br /&gt;
&lt;br /&gt;
* firmare&lt;br /&gt;
 &amp;gt; sign&lt;br /&gt;
* cambiare i valori di fiducia &lt;br /&gt;
 &amp;gt; trust&lt;br /&gt;
* vedere la fingerprint&lt;br /&gt;
 &amp;gt; fpr&lt;br /&gt;
* cambiare la data di scadenza&lt;br /&gt;
 &amp;gt; expire&lt;br /&gt;
* cambiare la password&lt;br /&gt;
 &amp;gt; passwd&lt;br /&gt;
* firmare localmente in modo non esportabile&lt;br /&gt;
 &amp;gt; lsign&lt;br /&gt;
* sempre '''ricordarsi di salvare'''&lt;br /&gt;
 &amp;gt; save&lt;br /&gt;
* oppure uscire&lt;br /&gt;
 &amp;gt; quit&lt;br /&gt;
&lt;br /&gt;
Digitare &amp;lt;code&amp;gt;help&amp;lt;/code&amp;gt; per una lista esaustiva.&lt;br /&gt;
&lt;br /&gt;
Tutte le modifiche da rendere pubbliche vanno inviate ad un keyserver.&lt;br /&gt;
&lt;br /&gt;
== Revocare una chiave ==&lt;br /&gt;
Avendo già il certificato di revoca:&lt;br /&gt;
 $ gpg --import certificato-di-revoca.asc&lt;br /&gt;
 $ gpg --keyserver pgp.surfnet.nl --send-key ''ID''&lt;br /&gt;
&lt;br /&gt;
== Gestione delle chiavi ==&lt;br /&gt;
Controllare il database delle chiavi: questo comando mostra tutte le chiavi che abbiamo con molte informazioni.&lt;br /&gt;
 $ gpg --list-keys --with-colons&lt;br /&gt;
&lt;br /&gt;
Fornisce tutti i valori di fiducia assegnati alle varie chiavi. (Informazioni private)&lt;br /&gt;
 $ gpg --list-ownertrust&lt;br /&gt;
&lt;br /&gt;
== Controllo firme ==&lt;br /&gt;
 $ gpg --check-sigs&lt;br /&gt;
 $ gpg --list-sigs&lt;br /&gt;
&lt;br /&gt;
== Esportare le chiavi altrui ==&lt;br /&gt;
Abbiamo importato e firmato la chiave di &amp;lt;ID&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Rimandiamola al proprietario:&lt;br /&gt;
 $ gpg --armor -export -o firma.sig &amp;lt;ID&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Questo comando crea un file di nome ''firma.sig'' nella directory corrente, che contiene la chiave firmata.&lt;br /&gt;
Spedire al proprietario ''firma.sig''.&lt;br /&gt;
&lt;br /&gt;
Chi riceve la propria chiave firmata da altri può decidere inserirla nel proprio portachiavi, con&lt;br /&gt;
 $ gpg --import firma.sig&lt;br /&gt;
&lt;br /&gt;
Si aggiungono al portachiavi le nuove firme ma anche i nuovi ID che il mittente ha sulla sua chiave, col rispettivo valore di fiducia. Firmare le chiavi degli altri implica dar loro fiducia, e, spesso, anche aver verificato la loro identità in maniera sicura.&lt;br /&gt;
Se non ci fidiamo, non firmiamo. Se si firmano a caso tutte le chiavi che capitano a tiro, si perde la reputazione che si ha presso gli altri partecipanti della rete. Se vogliamo fare un uso pubblico di questa fiducia reciproca possiamo mandare la nostra  chiave, contenente la nuova firma, al keyserver:&lt;br /&gt;
 $ gpg --keyserver pgp.circl.lu --send-key &amp;lt;ID mia chiave&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Periodicamente occorre aggiornare il proprio portachiavi digitale, così da venire a conoscenza delle modifiche sulle chiavi degli altri.&lt;br /&gt;
 $ gpg --keyserver pgp.circl.lu --refresh-keys&lt;br /&gt;
&lt;br /&gt;
== Rete di fiducia ==&lt;br /&gt;
Una chiave importata può essere firmata con un certo grado di fiducia. Possiamo rispedirla al proprietario o caricare la firma su un keyserver, e se lui la importa nel suo portachiavi, avrà la propria chiave firmata da noi. Ognuno può quindi aggiungere le firme dei conoscenti alla propria chiave, che a loro volta hanno firme di altri.&lt;br /&gt;
&lt;br /&gt;
== GUI ==&lt;br /&gt;
Esistono vari programmi a interfaccia grafica:&lt;br /&gt;
* ''Seahorse'', per gestire le chiavi e i certificati, comprese quelle ssh, per un ambiente GTK&lt;br /&gt;
* ''KGPG'', per gestire le chiavi e i certificati, comprese quelle ssh, per un ambiente QT&lt;br /&gt;
* ''Pinentry'' (anche da riga di comando) si ricorda la password della chiave per il tempo impostato (default 5 minuti)&lt;br /&gt;
&lt;br /&gt;
= Systemd =&lt;br /&gt;
 systemd-timesyncd — system time synchronization across the network;&lt;br /&gt;
 systemd/Journal — system logging&lt;br /&gt;
 systemd/Timers — alternative to cron&lt;br /&gt;
&lt;br /&gt;
= Link Utili =&lt;br /&gt;
&lt;br /&gt;
[https://wiki.archlinux.org/ ArchWiki]&lt;br /&gt;
&lt;br /&gt;
[https://wwwcdf.pd.infn.it/AppuntiLinux/a21.htm Appunti Linux]&lt;br /&gt;
&lt;br /&gt;
[https://www.linuxfromscratch.org/lfs/downloads/stable/LFS-BOOK-11.3-NOCHUNKS.html LFS-BOOK]&lt;br /&gt;
&lt;br /&gt;
[[Category: Howto]]&lt;/div&gt;</summary>
		<author><name>$pooky Hunter</name></author>
	</entry>
	<entry>
		<id>https://wiki.golem.linux.it/index.php?title=Appunti_Arch_Linux&amp;diff=9658</id>
		<title>Appunti Arch Linux</title>
		<link rel="alternate" type="text/html" href="https://wiki.golem.linux.it/index.php?title=Appunti_Arch_Linux&amp;diff=9658"/>
		<updated>2025-04-01T16:39:48Z</updated>

		<summary type="html">&lt;p&gt;$pooky Hunter: /* ZFS */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[https://archlinux.org/ Arch Linux] è una distribuzione Linux leggera e veloce; ma la cui installazione, configurazione e amministrazione avviene prevalentemente da terminale attraverso la modifica manuale di file di configurazione testuali.&lt;br /&gt;
&lt;br /&gt;
Fornisce, seguendo un modello di distribuzione detto &amp;quot;rolling-release&amp;quot;, l'ultima versione stabile della maggior parte del software opensource disponibile per Linux. Dato che è in costante aggiornamento non richiede periodici passaggi da una versione stabile alla successiva. Il lato negativo è che aggiornamenti di componenti importanti come quelli di: '''kernel, boot loader, driver video, librerie...''' potrebbero determinare problemi tali da rendere il sistema inutilizzabile. Accorgimenti come lo snapshot periodico del filesystem riescono, per fortuna, a contrastare l'impatto di questi inconvenienti.&lt;br /&gt;
&lt;br /&gt;
= Installazione =&lt;br /&gt;
== Guida ==&lt;br /&gt;
[https://wiki.archlinux.org/title/Installation_guide Guida ufficiale]&lt;br /&gt;
&lt;br /&gt;
== Supporti ==&lt;br /&gt;
* ISO ufficiale [http://archlinux.mirror.garr.it/archlinux/iso/latest/archlinux-x86_64.iso archlinux-x86_64.iso]&lt;br /&gt;
&lt;br /&gt;
* ISO con supporto per lo [https://openzfs.github.io/openzfs-docs/Getting%20Started/Arch%20Linux/index.html ZFS] [https://archzfs.leibelt.de/media/data/archlinux-archzfs-linux.iso archlinux-archzfs-linux.iso]&lt;br /&gt;
&lt;br /&gt;
* ISO con installer grafico Calamares [https://sourceforge.net/projects/alci/files/alci-iso/ ALCI]&lt;br /&gt;
&lt;br /&gt;
* ISO live CD/USB con interfaccia Xfce, utile per operazioni di ripristino o installazione [https://www.system-rescue.org/Download/ SystemRescue]:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== ISO personalizzata ==&lt;br /&gt;
Con '''archiso''' è possibile creare un'immagine con pacchetti aggiuntivi rispetto a quelli contenuti nella versione ufficiale. &lt;br /&gt;
&lt;br /&gt;
 # pacman -S archiso&lt;br /&gt;
&lt;br /&gt;
Copiare il contenuto del pacchetto in una directory di lavoro, es.: ''/root/media''&lt;br /&gt;
 # cp -r /usr/share/archiso/configs/releng /root/media&lt;br /&gt;
&lt;br /&gt;
Se volessimo aggiungere il supporto ad un pacchetto non contenuto nei repository ufficiali come, per esempio, lo ZFS occorrerebbe:&lt;br /&gt;
&lt;br /&gt;
* Importare la chiave pubblica del suo repository&lt;br /&gt;
 # pacman-key -r DDF7DB817396A49B2A2723F7403BD972F75D9D76&lt;br /&gt;
 # pacman-key --lsign-key DDF7DB817396A49B2A2723F7403BD972F75D9D76&lt;br /&gt;
 &lt;br /&gt;
* Modificare le seguenti righe al file '''pacman.conf''' di archiso per aggiungere il repository&lt;br /&gt;
 [archzfs]&lt;br /&gt;
 SigLevel = Never&lt;br /&gt;
 Server = https://archzfs.com/$repo/$arch&lt;br /&gt;
&lt;br /&gt;
* Aggiungere le seguenti righe al file ''packages.x86_64'' per aggiungere i pacchetti che ci interessa installare&lt;br /&gt;
 zfs-utils&lt;br /&gt;
 zfs-dkms&lt;br /&gt;
 net-tools&lt;br /&gt;
&lt;br /&gt;
* Se volessimo creare una versione live di una macchina, comprensiva di tutti i suoi pacchetti, potremmo semplicemente aggiungerli al file ''packages.x86_64'' &lt;br /&gt;
&lt;br /&gt;
 # pacman -Qq &amp;gt;&amp;gt; ''/path/packages.x86_64''&lt;br /&gt;
&lt;br /&gt;
* Lanciare lo script per creare l'ISO&lt;br /&gt;
 # ./build.sh -v&lt;br /&gt;
L'immagine sarà generata nella directory /root/media/out&lt;br /&gt;
&lt;br /&gt;
== Preparazione del disco ==&lt;br /&gt;
Su Linux si può scegliere (salvo casi estremamente [https://wiki.archlinux.org/title/partitioning#Partitionless_disk particolari]) tra due [https://unix.stackexchange.com/questions/289389/what-are-the-differences-between-the-various-partition-tables tipi] di tabella delle partizioni&lt;br /&gt;
&lt;br /&gt;
* msdos (Master Boot Record o più semplicemente MBR)&lt;br /&gt;
&lt;br /&gt;
* GPT (GUID Partition Table)&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
I casi in cui è preferibile utilizzare la tabella ''msdos'' sono:&lt;br /&gt;
&lt;br /&gt;
* dual-boot con Windows (32-bit o 64-bit) con la scheda madre in modalità Legacy BIOS&lt;br /&gt;
* in schede madri molto datate il BIOS potrebbe non supportare lo schema GPT (esiste comunque un [https://wiki.archlinux.org/title/partitioning#Tricking_old_BIOS_into_booting_from_GPT trucco] per aggirare l'ostacolo)&lt;br /&gt;
&lt;br /&gt;
[https://wiki.archlinux.org/title/partitioning#Choosing_between_GPT_and_MBR Vantaggi] di GPT su MBR:&lt;br /&gt;
&lt;br /&gt;
* offre un sistema di denominazione delle partizioni indipendente dal filesystem (PARTLABEL, PARTUUID)&lt;br /&gt;
&lt;br /&gt;
* 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.&lt;br /&gt;
&lt;br /&gt;
* la grandezza massima di un disco è di 2 ZiB, mentre su MBR 2 TiB&lt;br /&gt;
&lt;br /&gt;
* permette di fare a meno della tradizionale partizione di /boot con i filesystem BTRFS e ZFS in modo da semplificare la gestione degli snapshot.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Schede madri BIOS ===&lt;br /&gt;
Creare due partizioni.&lt;br /&gt;
&lt;br /&gt;
# '''[http://en.wikipedia.org/wiki/BIOS_Boot_partition 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.&lt;br /&gt;
# '''Linux filesystem''': successivamente da formattare col filesystem di nostra scelta: BTRFS, ZFS, ext4, XFS, JFS.&lt;br /&gt;
&lt;br /&gt;
==== Partizionamento ====&lt;br /&gt;
Col seguente comando verrà creata la partizione BIOS GRUB (EF02) a partire dal 1MB, della grandezza di 64MB, 8GB per la SWAP ed il resto del disco resterà disponibile per il filesystem di Linux.&lt;br /&gt;
&lt;br /&gt;
Se avete più dischi da utilizzare in raid, questa operazione andrà ripetuta per ciascun disco.&lt;br /&gt;
&lt;br /&gt;
 # sgdisk \&lt;br /&gt;
 --new=1:2048:133120 --typecode=1:EF02 --change-name=1:&amp;quot;GRUB&amp;quot; \&lt;br /&gt;
 --new=2:0:+8000M ---typecode 2:8200 --change-name=2:&amp;quot;SWAP&amp;quot; \&lt;br /&gt;
 --largest-new=3 --typecode=3:8300 --change-name=3:&amp;quot;ROOT&amp;quot; /dev/sda&lt;br /&gt;
&lt;br /&gt;
La seconda partizione dovrà poi essere formattata con uno dei filesystem supportati da Linux (ext4, btrfs, xfs...)&lt;br /&gt;
 # mkfs.btrfs /dev/sda3&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Schede madri UEFI ===&lt;br /&gt;
Creare due partizioni.&lt;br /&gt;
&lt;br /&gt;
# '''EFI''': è una partizione in formato FAT32 necessaria per l'avvio dei sistemi operativi nei PC con schede madri UEFI.&lt;br /&gt;
# '''Linux filesystem''': successivamente da formattare col filesystem di nostra scelta: BTRFS, ZFS, ext4, XFS, JFS.&lt;br /&gt;
&lt;br /&gt;
==== Partizionamento ====&lt;br /&gt;
Col seguente comando verrà creata la partizione EFI (EF00) a partire dal 1MB, della grandezza di 512MB, 8Gb per la SWAP ed il resto del disco per il filesystem di Linux.&lt;br /&gt;
 # sgdisk \&lt;br /&gt;
 --new=1:2048:1064960 --typecode=1:EF00 --change-name=1:&amp;quot;efi&amp;quot; \&lt;br /&gt;
 --new=2:0:+8000M ---typecode 2:8200 --change-name=2:&amp;quot;SWAP&amp;quot; \&lt;br /&gt;
 --largest-new=3 --typecode=3:8300 --change-name=3:&amp;quot;ROOT&amp;quot; /dev/sda&lt;br /&gt;
&lt;br /&gt;
La partizione '''EFI''' dovrà poi essere formattata in FAT32&lt;br /&gt;
 # mkfs.vfat -F 32 /dev/sda1&lt;br /&gt;
&lt;br /&gt;
La seconda partizione dovrà poi essere formattata con uno dei filesystem supportati da Linux (ext4, btrfs, xfs...)&lt;br /&gt;
 # mkfs.btrfs /dev/sda3&lt;br /&gt;
&lt;br /&gt;
== Montaggio del filesystem ==&lt;br /&gt;
Formattazione ed attivazione della SWAP&lt;br /&gt;
 # mkswap /dev/sda2&lt;br /&gt;
 # swapon /dev/sda2&lt;br /&gt;
&lt;br /&gt;
Montaggio del filesystem di ROOT nei sistemi BIOS&lt;br /&gt;
 # mount /dev/sda3 /mnt&lt;br /&gt;
&lt;br /&gt;
Montaggio del filesystem di ROOT nei sistemi UEFI&lt;br /&gt;
 # mount /dev/sda3 /mnt&lt;br /&gt;
 # mount --mkdir /dev/sda1 /mnt/boot&lt;br /&gt;
&lt;br /&gt;
== Pacchetti base ==&lt;br /&gt;
Per l'installazione di base si consigliano i seguenti meta-pacchetti&lt;br /&gt;
 # pacstrap -K /mnt base base-devel linux linux-headers linux-firmware&lt;br /&gt;
&lt;br /&gt;
== Configurazione ==&lt;br /&gt;
Creazione del file fstab&lt;br /&gt;
 # genfstab -U /mnt &amp;gt;&amp;gt; /mnt/etc/fstab&lt;br /&gt;
&lt;br /&gt;
Chroot nel nuovo sistema&lt;br /&gt;
 # arch-chroot /mnt&lt;br /&gt;
&lt;br /&gt;
Timezone&lt;br /&gt;
 # ln -sf /usr/share/zoneinfo/Europe/Rome /etc/localtime&lt;br /&gt;
&lt;br /&gt;
Editare il file &amp;lt;code&amp;gt;/etc/systemd/timesyncd.conf&amp;lt;/code&amp;gt; ed abilitare il servizio per la sincronizzazione automatica dell'orario&lt;br /&gt;
 # systemctl enable systemd-timesyncd.service&lt;br /&gt;
&lt;br /&gt;
Editare il file &amp;lt;code&amp;gt;/etc/locale.gen&amp;lt;/code&amp;gt; e togliere il commento agli argomenti che interessano, es.: ''en_US.UTF-8'', ''it_IT.UTF-8''. E successivamente generare la localizzazione eseguendo&lt;br /&gt;
 # locale-gen&lt;br /&gt;
&lt;br /&gt;
Configurare la lingua che vogliamo usare per il nostro sistema editando il file &amp;lt;code&amp;gt;/etc/locale.conf&amp;lt;/code&amp;gt; oppure lanciando il comando&lt;br /&gt;
 # localectl set-locale LANG=en_US.UTF-8&lt;br /&gt;
&lt;br /&gt;
Selezioniamo il layout della tastiera editando il file &amp;lt;code&amp;gt;/etc/vconsole.conf&amp;lt;/code&amp;gt;&lt;br /&gt;
 # echo &amp;quot;KEYMAP=it&amp;quot; &amp;gt;&amp;gt; /etc/vconsole.conf&lt;br /&gt;
&lt;br /&gt;
Scegliere un home host (es.: ''archstar'')&lt;br /&gt;
 # echo '''archstar''' &amp;gt;&amp;gt; /etc/hostname&lt;br /&gt;
&lt;br /&gt;
Impostare una password per l'utente root&lt;br /&gt;
 # passwd&lt;br /&gt;
&lt;br /&gt;
Installare e configurare il bootloader&lt;br /&gt;
&lt;br /&gt;
= Filesystem =&lt;br /&gt;
Su Linux, a seconda di ciò di cui abbiamo bisogno, è possibile scegliere tra numerosi filesystem. Le principali opzioni sono le seguenti:&lt;br /&gt;
&lt;br /&gt;
- BTRFS: supporta nativamente sottovolumi, snapshot ed il raid 0, 1 e 5; ma non la crittografia.&lt;br /&gt;
&lt;br /&gt;
- EXT4: il FS storico di Linux, evoluzione di ext3. Supporta nativamente la crittografia dei dati, ma non gestisce autonomamente né RAID, né snapshots. &lt;br /&gt;
&lt;br /&gt;
- [https://openzfs.github.io/openzfs-docs/index.html 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 &amp;quot;write-atomicity&amp;quot; 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.&lt;br /&gt;
&lt;br /&gt;
- [https://access.redhat.com/documentation/it-it/red_hat_enterprise_linux/9/html-single/configuring_and_managing_logical_volumes/index 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.&lt;br /&gt;
&lt;br /&gt;
== IMG ==&lt;br /&gt;
Per fare esperimenti con i filesystem può essere utile creare dei file immagine&lt;br /&gt;
&lt;br /&gt;
Creare un file immagine di una specifica grandezza (es.: 10G)&lt;br /&gt;
 $ truncate -s 10g disk.img&lt;br /&gt;
&lt;br /&gt;
Formattarlo con un filesystem (es.: btrfs)&lt;br /&gt;
 $ mkfs.btrfs disk.img&lt;br /&gt;
&lt;br /&gt;
Montarlo in loop&lt;br /&gt;
 $ sudo mount -o loop disk.img /mnt&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== BTRFS ==&lt;br /&gt;
Creazione del filesystem&lt;br /&gt;
 # mkfs.btrfs ''/dev/partizione''&lt;br /&gt;
&lt;br /&gt;
Montaggio del filesystem&lt;br /&gt;
 # mount -o compress=lzo ''/dev/partizione'' ''/mnt/punto_mount''&lt;br /&gt;
&lt;br /&gt;
(Si consiglia di usare l'opzione di compressione del filesystem per migliorare le performance ed ottimizzare l'utilizzo dello spazio)&lt;br /&gt;
&lt;br /&gt;
===Subvolumi===&lt;br /&gt;
* Creare un subvolume&lt;br /&gt;
 # btrfs subvolume create ''subvolume''&lt;br /&gt;
&lt;br /&gt;
* Controllare i subvolumi presenti sul sistema&lt;br /&gt;
 # btrfs subvolume list /&lt;br /&gt;
&lt;br /&gt;
In una tipica installazione Ubuntu avremo un output di questo tipo&lt;br /&gt;
 ID 257 gen 9755 top level 5 path @&lt;br /&gt;
 ID 292 gen 7624 top level 5 path @home&lt;br /&gt;
&lt;br /&gt;
''@'' è il nome del subvolume contenente la root '''/''' del filesystem&lt;br /&gt;
''@home'' è il nome del subvolume della /home&lt;br /&gt;
&lt;br /&gt;
=== Montaggio di un subvolume ===&lt;br /&gt;
 # mount -o subvol=''subvolume'' ''/dev/partizione'' ''/mnt/punto_mount''&lt;br /&gt;
&lt;br /&gt;
=== fstab ===&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Ecco un '''/etc/fstab''' di esempio&lt;br /&gt;
 LABEL=ROOT       /             btrfs     defaults,compress=lzo,subvol=@            0 0&lt;br /&gt;
 LABEL=ROOT       /home         btrfs     defaults,compress=lzo,subvol=@home        0 0&lt;br /&gt;
 LABEL=ROOT       /mnt/btrfs    btrfs     defaults,noauto,subvolid=0,compress=lzo   0 0&lt;br /&gt;
&lt;br /&gt;
Montando la partizione con label ROOT su /mnt/btrfs saranno visibili tutti i subvolumi.&lt;br /&gt;
&lt;br /&gt;
===Conversione da Ext3/4 a Btrfs===&lt;br /&gt;
 # btrfs-convert /dev/partizione&lt;br /&gt;
&lt;br /&gt;
Automaticamente è creata una snapshot contenente il vecchio filesystem (''/ext2_saved'')&lt;br /&gt;
&lt;br /&gt;
In caso di problemi può essere montata col comando&lt;br /&gt;
 # mount -t btrfs -o subvol=ext2_saved /dev/xxx /ext2_saved&lt;br /&gt;
 # mount -t ext3 -o loop,ro /ext2_saved/image /ext3&lt;br /&gt;
&lt;br /&gt;
Se tutto è andato a buon fine può invece essere eliminata&lt;br /&gt;
 # btrfs subvolume delete /ext2_saved&lt;br /&gt;
&lt;br /&gt;
===Riparazione di un filesystem danneggiato===&lt;br /&gt;
* Direttamente sul filesystem montato&lt;br /&gt;
 # btrfs scrub start -B /dev/partizione&lt;br /&gt;
o anche direttamente sulla root&lt;br /&gt;
 # btrfs scrub start -B /&lt;br /&gt;
&lt;br /&gt;
* Sul disco smontato&lt;br /&gt;
 # btrfs check --repair /dev/partizione&lt;br /&gt;
&lt;br /&gt;
Per non dover ricorrere ad un dispositivo di avvio alternativo, dato che btrfs-check non può essere utilizzato su un filesystem montato, si consiglia di aggiungerlo al ramdisk modificando in questo mmodo il file &amp;lt;code&amp;gt;/etc/mkinitcpio.conf&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 BINARIES=(btrfs)&lt;br /&gt;
&lt;br /&gt;
=== Quote ===&lt;br /&gt;
Per limitare le dimensioni di un subvolume è possibile abilitare la gestione delle '''quote'''.&lt;br /&gt;
&lt;br /&gt;
Utilizzare il seguente comando su un filesystem btrfs appena creato e privo di subvolumi&lt;br /&gt;
 # btrfs quota enable volume&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
 # btrfs subvolume list &amp;lt;path&amp;gt; | cut -d' ' -f2 | xargs -I{} -n1 btrfs qgroup create 0/{} &amp;lt;path&amp;gt;&lt;br /&gt;
 # btrfs quota rescan &amp;lt;path&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Assegnare una quota limite ad un subvolume&lt;br /&gt;
 # btrfs qgroup limit size /volume/subvolume&lt;br /&gt;
&lt;br /&gt;
Es.:&lt;br /&gt;
 # btrfs qgroup limit 20g /mnt/@&lt;br /&gt;
 # btrfs qgroup limit 100g /mnt/@home&lt;br /&gt;
&lt;br /&gt;
Scoprire la quantità di spazio utilizzata da un subvolume&lt;br /&gt;
 # btrfs qgroup show &amp;lt;path&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Snapshots ===&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
* Effettuare uno snapshot&lt;br /&gt;
 # btrfs subvolume snapshot @ rootsnap&lt;br /&gt;
&lt;br /&gt;
Nell'esempio abbiamo effettuato il ''backup'' del filesystem di root e l'abbiamo chiamato ''rootsnap''&lt;br /&gt;
&lt;br /&gt;
* Montare un subvolume/snapshot&lt;br /&gt;
 # mount -t btrfs -o subvol=rootsnap /dev/partizione /mnt/snapshot&lt;br /&gt;
&lt;br /&gt;
* Cancellare un subvolume/snapshot&lt;br /&gt;
 # btrfs subvolume delete rootsnap&lt;br /&gt;
&lt;br /&gt;
==== Integrazione con GRUB ====&lt;br /&gt;
È possibile caricare automaticamente all'avvio gli snapshot dei filesystem di root attraverso il programma '''grub-btrfs'''&lt;br /&gt;
 # pacman -S grub-btrfs&lt;br /&gt;
&lt;br /&gt;
Con questo tool ogni volta che rigeneriamo il file di configurazione di GRUB il sistema rileva eventuali sottovolumi avviabili (snapshot comprese) aggiungendoli al menu di avvio del GRUB &lt;br /&gt;
 # grub-mkconfig -o /boot/grub/grub.cfg&lt;br /&gt;
&lt;br /&gt;
=== Backup ===&lt;br /&gt;
Le snapshot possono essere salvate su un disco esterno, a patto che questo abbia un file system btrfs.&lt;br /&gt;
L'operazione di trasferimento può essere effettuata soltanto su snapshot in sola lettura.&lt;br /&gt;
Si ipotizza che il proprio disco di sistema sia montato in /mnt/btrfs ed il disco esterno in /mnt/ext&lt;br /&gt;
&lt;br /&gt;
* Creare la snapshot in sola lettura (opzione -r) oppure impostare il flag di sola lettura ad una snapshot già fatta&lt;br /&gt;
 btrfs subvolume snapshot -r @root @root-yymmdd-ro&lt;br /&gt;
 btrfs property set /mnt/btrfs/@root-yymmdd-ro ro true&lt;br /&gt;
* Trasferire la snapshot sul disco esterno.&lt;br /&gt;
 btrfs send /mnt/btrfs/@root-yymmdd-ro | btrfs receive /mnt/ext&lt;br /&gt;
* Quando necessario, ripristinare la snapshot&lt;br /&gt;
 btrfs send /mnt/ext/@root-yymmdd-ro | btrfs receive /mnt/btrfs/&lt;br /&gt;
* Eventualmente, rinominare la snapshot e reimpostare i privilegi di scrittura&lt;br /&gt;
 mv /mnt/ext/{@root-yymmdd-ro,@root}&lt;br /&gt;
 btrfs property set /mnt/btrfs/@root ro false&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== RAID ===&lt;br /&gt;
Tipologie e caratteristiche dei raid [https://btrfs.readthedocs.io/en/latest/mkfs.btrfs.html#profiles supportati]&lt;br /&gt;
&lt;br /&gt;
Confronto tra varie tecnologie di [https://blog.jenningsga.com/status-of-storage-within-linux/ raid]&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! RAID !! Redundancy Copies !! Redundancy Parity !! Redundancy Striping !! Spazio utilizzato !! Min/max n. dischi&lt;br /&gt;
|-&lt;br /&gt;
| disco singolo || 1 || || || 100% || 1/N&lt;br /&gt;
|- &lt;br /&gt;
| RAID0 || 1 || || 1 to N || 100% || 1/N&lt;br /&gt;
|- &lt;br /&gt;
| RAID1 || 2 || || ||  50% || 2/N &lt;br /&gt;
|- &lt;br /&gt;
| RAID1C3 || 3 || || || 33% || 3/N&lt;br /&gt;
|- &lt;br /&gt;
| RAID1C4 || 4 || || || 25% || 4/N&lt;br /&gt;
|-&lt;br /&gt;
| RAID10 || 2 || || 1 to N || 50%  || 2/N&lt;br /&gt;
|-&lt;br /&gt;
| RAID5 || 1 || 1 || 2 to N-1 || (N-1)/N || 2/N&lt;br /&gt;
|-&lt;br /&gt;
| RAID6 || 1 || 2 || 3 to N-2 || (N-2)/N || 3/N&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====RAID 0====&lt;br /&gt;
 # mkfs.btrfs -d raid0 /dev/sda1 /dev/sdb1&lt;br /&gt;
&lt;br /&gt;
===== Montare il raid =====&lt;br /&gt;
 # mount /dev/sda1 /mnt&lt;br /&gt;
&lt;br /&gt;
(È equivalente a ''mount /dev/sdb1 /mnt'', il sistema riconosce che è presente un raid 0 e provvede al montaggio corretto dei dischi)&lt;br /&gt;
&lt;br /&gt;
Verifica del montaggio&lt;br /&gt;
 # btrfs filesystem show /mnt&lt;br /&gt;
&lt;br /&gt;
 Label: none  uuid: 4714fca3-bfcb-4130-ad2f-f560f2e12f8e&lt;br /&gt;
 Total devices 2 FS bytes used 27.75GiB&lt;br /&gt;
 devid    1 size 136.72GiB used 17.03GiB path /dev/sda1&lt;br /&gt;
 devid    2 size 136.72GiB used 17.01GiB path /dev/sdb1&lt;br /&gt;
&lt;br /&gt;
=====Aggiungere una partizione=====&lt;br /&gt;
 # btrfs device add /dev/sdc1 /mnt&lt;br /&gt;
&lt;br /&gt;
 # btrfs filesystem show /mnt&lt;br /&gt;
 Label: none  uuid: 4714fca3-bfcb-4130-ad2f-f560f2e12f8e&lt;br /&gt;
 Total devices 3 FS bytes used 27.75GiB&lt;br /&gt;
 devid    1 size 136.72GiB used 17.03GiB path /dev/sda1&lt;br /&gt;
 devid    2 size 136.72GiB used 17.01GiB path /dev/sdb1&lt;br /&gt;
 devid    3 size 136.72GiB used 0.00 path /dev/sdc1&lt;br /&gt;
&lt;br /&gt;
Adesso è necessario effettuare una redistribuzione dei dati sui tre dischi&lt;br /&gt;
 # btrfs balance start -d -m /mnt&lt;br /&gt;
&lt;br /&gt;
Per vedere a che punto del bilanciamento è arrivato il sistema&lt;br /&gt;
 # btrfs fi balance status /&lt;br /&gt;
&lt;br /&gt;
 # btrfs filesystem show /mnt&lt;br /&gt;
 Label: none  uuid: 4714fca3-bfcb-4130-ad2f-f560f2e12f8e&lt;br /&gt;
 Total devices 3 FS bytes used 27.78GiB&lt;br /&gt;
 devid    1 size 136.72GiB used 10.03GiB path /dev/sda1&lt;br /&gt;
 devid    2 size 136.72GiB used 10.03GiB path /dev/sdb1&lt;br /&gt;
 devid    3 size 136.72GiB used 11.00GiB path /dev/sdc1&lt;br /&gt;
&lt;br /&gt;
=====Rimuovere un device=====&lt;br /&gt;
 # btrfs device delete /dev/sdb1 /mnt&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
==== RAID 1 ====&lt;br /&gt;
=====Creazione di un raid1 ex novo===== &lt;br /&gt;
Copiare la tabella delle partizioni da sda a sdb&lt;br /&gt;
 # sfdisk -d /dev/sda | sfdisk /dev/sdb&lt;br /&gt;
&lt;br /&gt;
Creare il raid&lt;br /&gt;
 # mkfs.btrfs -d raid1 -m raid1 /dev/sda1 /dev/sdb1&lt;br /&gt;
&lt;br /&gt;
===== Aggiungere un mirror ad un disco esistente =====&lt;br /&gt;
 # btrfs device add /dev/sdb1 ''/punto_di_mount''&lt;br /&gt;
 # btrfs balance start -dconvert=raid1 -mconvert=raid1 ''/punto_di_mount''&lt;br /&gt;
&lt;br /&gt;
===== GRUB =====&lt;br /&gt;
Se si utilizza un raid1 per la partizione di sistema '''/''' e si vuole rendere Linux avviabile automaticamente anche in caso di danneggiamento o mancanza di uno dei due dischi del raid occorrerà che sul secondo disco sia clonata la partizione EFI o BIOS GRUB (es.: /dev/sda1) e che vi sia installato il bootloader.&lt;br /&gt;
 # dd if=/dev/sda1 of=/dev/sdb1&lt;br /&gt;
 # grub-install /dev/sdb&lt;br /&gt;
&lt;br /&gt;
=====Sostituzione device danneggiato=====&lt;br /&gt;
Verificare qual è il disco che dà dei problemi&lt;br /&gt;
 # mount /dev/sda1 ''/punto_di_mount'' -o degraded&lt;br /&gt;
 # btrfs device stats ''/punto_di_mount''&lt;br /&gt;
 # btrfs filesystem show ''/punto_di_mount''&lt;br /&gt;
 # btrfs device usage ''/punto_di_mount''&lt;br /&gt;
&lt;br /&gt;
Ipotizzando che '''1''' sia l'ID del disco danneggiato secondo i comandi dati in precedenza&lt;br /&gt;
 # btrfs replace start '''1''' /dev/sdc1 ''/punto_di_mount''&lt;br /&gt;
&lt;br /&gt;
Per monitorare lo stato di ripristino del raid&lt;br /&gt;
 # btrfs replace status ''/punto_di_mount''&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
 # btrfs device delete missing /mnt&lt;br /&gt;
&lt;br /&gt;
==== RAID 5 ====&lt;br /&gt;
{{Note&lt;br /&gt;
|type=warning &lt;br /&gt;
| text= '''ATTENZIONE il raid5 su BTRFS è considerato [https://btrfs.readthedocs.io/en/latest/btrfs-man5.html#raid56-status-and-recommended-practices non sicuro] e se ne sconsiglia il suo utilizzo'''&lt;br /&gt;
}}&lt;br /&gt;
==== RAID 1C ====&lt;br /&gt;
&lt;br /&gt;
===== RAID 1C3 =====&lt;br /&gt;
Se si desidera duplicare i dati rispettivamente 2 volte in modo da poter perdere fino a due dischi su 3 senza perdere dati è possibile utilizzare una modalità chiamata raid1c3&lt;br /&gt;
&lt;br /&gt;
Per creare ex novo il raid1c3&lt;br /&gt;
 # mkfs.btrfs -d raid1c3 -m raid1c3 /dev/sda1 /dev/sdb1 /dev/sdc1&lt;br /&gt;
&lt;br /&gt;
Per convertire a raid1c3&lt;br /&gt;
 # btrfs balance start -dconvert=raid1c3 -mconvert=raid1c3 /storage-btrfs/&lt;br /&gt;
&lt;br /&gt;
===== RAID 1C4 =====&lt;br /&gt;
Se si desidera duplicare i dati rispettivamente 3 volte in modo da poter perdere fino a 3 dischi su 4 senza perdere dati è possibile utilizzare una modalità chiamata raid1c4&lt;br /&gt;
&lt;br /&gt;
Per creare ex novo il raid1c3&lt;br /&gt;
 # mkfs.btrfs -d raid1c4 -m raid1c4 /dev/sda1 /dev/sdb1 /dev/sdc1&lt;br /&gt;
&lt;br /&gt;
Per convertire a raid1c4&lt;br /&gt;
 # btrfs balance start -dconvert=raid1c4 -mconvert=raid1c4 /storage-btrfs/&lt;br /&gt;
&lt;br /&gt;
== ZFS ==&lt;br /&gt;
===Installazione di modulo e le utility da AUR===&lt;br /&gt;
 # pacman-key -r F75D9D76&lt;br /&gt;
 # pacman-key --lsign-key F75D9D76&lt;br /&gt;
 $ pikaur -S zfs-utils zfs-dkms&lt;br /&gt;
&lt;br /&gt;
===Installazione di modulo e utility da archzfs===&lt;br /&gt;
Modificare le seguenti righe al file '''pacman.conf''' di archiso&lt;br /&gt;
 [archzfs-testing]&lt;br /&gt;
 Server = https://archzfs.com/$repo/$arch&lt;br /&gt;
&lt;br /&gt;
 # pacman-key -r DDF7DB817396A49B2A2723F7403BD972F75D9D76&lt;br /&gt;
 # pacman-key --lsign-key DDF7DB817396A49B2A2723F7403BD972F75D9D76&lt;br /&gt;
 # pacman -S zfs-utils zfs-linux&lt;br /&gt;
&lt;br /&gt;
===Configurare il FS===&lt;br /&gt;
[https://wiki.archlinux.org/title/ZFS Comandi] per ottenere informazioni utili sul filesystem e sui pool&lt;br /&gt;
 # zfs list -t  all&lt;br /&gt;
 # zpool status&lt;br /&gt;
 # zpool list&lt;br /&gt;
&lt;br /&gt;
Abilitare i vari servizi sul filesystem&lt;br /&gt;
 # systemctl enable zfs-zed.service&lt;br /&gt;
 # systemctl enable zfs-mount.service&lt;br /&gt;
 # systemctl enable zfs-share.service&lt;br /&gt;
 # systemctl enable zfs-import.target&lt;br /&gt;
 # systemctl enable zfs.target&lt;br /&gt;
&lt;br /&gt;
Creare un pool su un disco&lt;br /&gt;
 # zpool create &amp;quot;pool&amp;quot; sda&lt;br /&gt;
&lt;br /&gt;
Creare un pool su una partizione&lt;br /&gt;
 # zpool create &amp;quot;pool&amp;quot; sda2&lt;br /&gt;
&lt;br /&gt;
Importare un pool&lt;br /&gt;
 # zpool import &amp;quot;pool&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Aggiungere pool alla cache per auto-import e mount (abilitare i vari demoni zfs)&lt;br /&gt;
 # zpool set cachefile=/etc/zfs/zpool.cache &amp;quot;pool&amp;quot;&lt;br /&gt;
&lt;br /&gt;
oppure si possono caricare i mountpoint in modalità legacy dall'fstab&lt;br /&gt;
 # zfs create -o mountpoint=legacy ''pool''/directory&lt;br /&gt;
&lt;br /&gt;
Aggiungere la compressione&lt;br /&gt;
 # zfs get compression ''pool''&lt;br /&gt;
 # zfs set compression=lz4 ''pool''&lt;br /&gt;
&lt;br /&gt;
Vedere le proprietà di un ''pool''&lt;br /&gt;
 # zfs get all ''zpool''&lt;br /&gt;
&lt;br /&gt;
==== RAID ====&lt;br /&gt;
Creare un pool in raid0&lt;br /&gt;
 # zpool create &amp;quot;pool&amp;quot; /dev/sdb /dev/sdc&lt;br /&gt;
&lt;br /&gt;
Creare un pool in raid1&lt;br /&gt;
 # zpool create &amp;quot;pool&amp;quot; mirror /dev/sdb /dev/sc&lt;br /&gt;
&lt;br /&gt;
Creare un pool ''raid5'' su più dischi&lt;br /&gt;
 # zpool create &amp;quot;pool&amp;quot; raidz /dev/sdb /dev/sdc /dev/sdd&lt;br /&gt;
&lt;br /&gt;
Creare un pool raid5 su immagini&lt;br /&gt;
 # zpool create &amp;quot;pool&amp;quot; raidz /path/1.img /path/2.img /path/3.img&lt;br /&gt;
&lt;br /&gt;
* [https://docs.oracle.com/cd/E19253-01/819-5461/gbbvf/index.html Sostituire] disco in raid&lt;br /&gt;
&lt;br /&gt;
Rimuovere il disco da sostituire&lt;br /&gt;
 # zpool offline disco1&lt;br /&gt;
&lt;br /&gt;
Inserire il nuovo disco&lt;br /&gt;
 # zpool replace &amp;quot;pool&amp;quot; disco1&lt;br /&gt;
 # zpool online disco1&lt;br /&gt;
&lt;br /&gt;
* Utilizza un altro disco montato al posto di quello danneggiato&lt;br /&gt;
 # zpool replace &amp;quot;pool&amp;quot; disco1 disco2&lt;br /&gt;
&lt;br /&gt;
Aggiungere uno o più dischi ad un pool&lt;br /&gt;
 # zpool add &amp;quot;pool&amp;quot; mirror disco3 disco4&lt;br /&gt;
 # zpool add &amp;quot;pool&amp;quot; raidz disco3 disco4 disco5&lt;br /&gt;
&lt;br /&gt;
Rimuovere disco1 da pool se aggiunto erroneamente&lt;br /&gt;
 # zpool remove &amp;quot;pool&amp;quot; disco1&lt;br /&gt;
&lt;br /&gt;
Controllare lo stato di un pool&lt;br /&gt;
 # zpool status&lt;br /&gt;
&lt;br /&gt;
Correggere eventuali errori&lt;br /&gt;
 # zpool clear ''pool'' ''disco''&lt;br /&gt;
 # zpool scrub  ''pool''&lt;br /&gt;
&lt;br /&gt;
=== Root filesystem ===&lt;br /&gt;
* Guida ufficiale [https://openzfs.github.io/openzfs-docs/Getting%20Started/Arch%20Linux/Root%20on%20ZFS/1-preparation.html Root on ZFS]&lt;br /&gt;
&lt;br /&gt;
Per prima cosa organizzare la tabella delle partizioni del [[#Preparazione_del_disco | disco]]&lt;br /&gt;
&lt;br /&gt;
Formattare la partizione e creare il dataset (senza mountpoint)&lt;br /&gt;
 # zpool create -m none rpool ''sda2''&lt;br /&gt;
 &lt;br /&gt;
Smontare il pool e rimontarlo in modalità legacy &lt;br /&gt;
 # zfs create -o mountpoint=none rpool/ROOT&lt;br /&gt;
 # zfs create -o mountpoint=legacy rpool/ROOT/arch&lt;br /&gt;
 # zpool set bootfs=rpool/ROOT/arch rpool&lt;br /&gt;
 # mount -t zfs rpool/ROOT /mnt&lt;br /&gt;
''rpool'' è il nome che abbiamo voluto dare al volume contenente il filesystem di sistema&lt;br /&gt;
&lt;br /&gt;
NB: se NON si usa il mountpoint in modalità legacy occorrerà impostare &amp;lt;code&amp;gt;canmount=noauto&amp;lt;/code&amp;gt; su tutti i dataset con &amp;lt;code&amp;gt;mountpoint=/&amp;lt;/code&amp;gt; (es.: zfs create -o mountpoint=/ -o canmount=noauto rpool/ROOT/arch) altrimenti il sistema cercherà di eseguirne automaticamente l'automount e fallirà se esistono più filesystem da montare su /&lt;br /&gt;
&lt;br /&gt;
Se volessimo aggiungere altri pool es.:&lt;br /&gt;
 # zfs create rpool/home&lt;br /&gt;
 # zfs create rpool/arch/pkg&lt;br /&gt;
 # zfs create rpool/var&lt;br /&gt;
 # zfs create rpool/srv&lt;br /&gt;
&lt;br /&gt;
Configurare la cache degli zpool&lt;br /&gt;
 # zpool set cachefile=/etc/zfs/rpool.cache rpool &lt;br /&gt;
&lt;br /&gt;
Copiare il file di cache nel sistema dove dovremo eseguire il chroot per l'installazione.&lt;br /&gt;
 # mkdir -p /mnt/etc/zfs&lt;br /&gt;
 # cp /etc/zfs/rpool.cache /mnt/etc/zfs/rpool.cache&lt;br /&gt;
&lt;br /&gt;
Installare il sistema di base&lt;br /&gt;
 # pacstrap -K /mnt base linux linux-firmware zfs-utils zfs-linux&lt;br /&gt;
&lt;br /&gt;
Altri pacchetti consigliati&lt;br /&gt;
 # pacstrap -K /mnt base-devel net-tools networkmanager nano zsh grml-zsh-config busybox&lt;br /&gt;
&lt;br /&gt;
Eseguire il chroot per procedere con l'installazione&lt;br /&gt;
 # arch-chroot /mnt&lt;br /&gt;
&lt;br /&gt;
Configurare il mountpoint su fstab&lt;br /&gt;
/etc/fstab &lt;br /&gt;
 rpool/ROOT/arch      /       zfs         noatime     0 0&lt;br /&gt;
&lt;br /&gt;
Editare il file /etc/mkinitcpio.conf aggiungendo zfs prima del filesystem&lt;br /&gt;
 HOOKS=&amp;quot;base udev autodetect modconf block keyboard zfs filesystems&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Abilitare i servizi per ZFS all'avvio&lt;br /&gt;
 # systemctl enable zfs-zed.service&lt;br /&gt;
 # systemctl enable zfs-mount.service&lt;br /&gt;
 # systemctl enable zfs-share.service&lt;br /&gt;
 # systemctl enable zfs-import.target&lt;br /&gt;
 # systemctl enable zfs.target&lt;br /&gt;
&lt;br /&gt;
Impostare una password di root&lt;br /&gt;
 # passwd&lt;br /&gt;
&lt;br /&gt;
Ricreare il ramdisk col supporto per ZFS&lt;br /&gt;
 # mkinitcpio -p linux&lt;br /&gt;
&lt;br /&gt;
Installare il [[Appunti_Arch_Linux#BOOT_LOADER|Boot Loader]]&lt;br /&gt;
&lt;br /&gt;
Uscire dal chroot e terminazione dell'installazione&lt;br /&gt;
 # exit&lt;br /&gt;
 # zfs unmount -a&lt;br /&gt;
 # cp /etc/zfs/rpool.cache /mnt/etc/zfs/rpool.cache&lt;br /&gt;
 # zpool export rpool&lt;br /&gt;
 # reboot&lt;br /&gt;
&lt;br /&gt;
==== BOOT LOADER ====&lt;br /&gt;
===== ZFSBootMenu =====&lt;br /&gt;
Per gestire a meglio gli snapshot e la clonazione dei pool è consigliabile utilizzare, su PC che supportano UEFI, il boot loader [https://docs.zfsbootmenu.org/en/latest/guides/alpine/uefi.html ZFSBootMenu].&lt;br /&gt;
&lt;br /&gt;
Esportiamo le variabile per configurare il primo disco /dev/sda come disco di avvio&lt;br /&gt;
 # export BOOT_DISK=&amp;quot;/dev/sda&amp;quot;&lt;br /&gt;
 # export BOOT_PART=&amp;quot;1&amp;quot;&lt;br /&gt;
 # export BOOT_DEVICE=&amp;quot;${BOOT_DISK}${BOOT_PART}&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Assicuriamoci che il nostro pool di root sia configurato come avviabile&lt;br /&gt;
 # zpool set bootfs=''rpool/ROOT/'' ''rpool''&lt;br /&gt;
&lt;br /&gt;
Formattiamo sda1 per creare la partizione EFI di boot&lt;br /&gt;
 # mkfs.vfat -F32 &amp;quot;$BOOT_DEVICE&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Aggiungiamola all'fstab e montiamola&lt;br /&gt;
 # cat &amp;lt;&amp;lt; EOF &amp;gt;&amp;gt; /etc/fstab&lt;br /&gt;
 $BOOT_DEVICE /boot/efi vfat defaults 0 0&lt;br /&gt;
 EOF&lt;br /&gt;
&lt;br /&gt;
 # mkdir -p /boot/efi&lt;br /&gt;
 # mount /boot/efi&lt;br /&gt;
&lt;br /&gt;
Scarichiamo ed installiamo il boot loader&lt;br /&gt;
 # mkdir -p /boot/efi/EFI/ZBM&lt;br /&gt;
 # curl -o /boot/efi/EFI/ZBM/VMLINUZ.EFI -L https://get.zfsbootmenu.org/efi&lt;br /&gt;
 # cp /boot/efi/EFI/ZBM/VMLINUZ.EFI /boot/efi/EFI/ZBM/VMLINUZ-BACKUP.EFI&lt;br /&gt;
&lt;br /&gt;
Forziamo zfsbootmenu a montare il nostro dataset con i permessi di scrittura&lt;br /&gt;
 # zfs set org.zfsbootmenu:commandline=&amp;quot;quiet loglevel=4 rw&amp;quot; rpool/ROOT&lt;br /&gt;
&lt;br /&gt;
Installiamo e configuriamo  ''efibootmgr''&lt;br /&gt;
 # pacman -S efibootmgr&lt;br /&gt;
&lt;br /&gt;
 # efibootmgr -c -d &amp;quot;$BOOT_DISK&amp;quot; -p &amp;quot;$BOOT_PART&amp;quot; \&lt;br /&gt;
  -L &amp;quot;ZFSBootMenu (Backup)&amp;quot; \&lt;br /&gt;
  -l \\EFI\\ZBM\\VMLINUZ-BACKUP.EFI&lt;br /&gt;
&lt;br /&gt;
 # efibootmgr -c -d &amp;quot;$BOOT_DISK&amp;quot; -p &amp;quot;$BOOT_PART&amp;quot; \&lt;br /&gt;
  -L &amp;quot;ZFSBootMenu&amp;quot; \&lt;br /&gt;
  -l \\EFI\\ZBM\\VMLINUZ.EFI&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Se si utilizza un pool distribuito su più dischi (RAID1 o RAIDZ) occorrerà installare il bootloader anche sugli altri dispositivi (nel caso del disco /dev/sdb).&lt;br /&gt;
&lt;br /&gt;
 # mount /dev/sdb1 /boot/efi&lt;br /&gt;
 # curl -o /boot/efi/EFI/ZBM/VMLINUZ.EFI -L https://get.zfsbootmenu.org/efi&lt;br /&gt;
 # efibootmgr -c -d &amp;quot;$BOOT_DISK&amp;quot; -p &amp;quot;$BOOT_PART&amp;quot; \&lt;br /&gt;
  -L &amp;quot;ZFSBootMenu sdb&amp;quot; \&lt;br /&gt;
  -l \\EFI\\ZBM\\VMLINUZ.EFI&lt;br /&gt;
&lt;br /&gt;
===== GRUB =====&lt;br /&gt;
Se non ci interessa gestire snapshot o utilizziamo un PC con BIOS è possibile optare per GRUB &lt;br /&gt;
 # pacman -S grub&lt;br /&gt;
 # grub-install /dev/sda&lt;br /&gt;
 (se si usa un pool composto da più dischi es. raidz per il filesystem di root è consigliabile installare grub su tutti i dischi: sda, sdb, sdc, sdd...)&lt;br /&gt;
 # grub-mkconfig -o /boot/grub/grub.cfg&lt;br /&gt;
&lt;br /&gt;
Esempio&lt;br /&gt;
 #Grub entry&lt;br /&gt;
 menuentry 'Arch Linux'{&lt;br /&gt;
       insmod gzio&lt;br /&gt;
       insmod part_gpt&lt;br /&gt;
       insmod zfs&lt;br /&gt;
       set root='hd0,gpt3'&lt;br /&gt;
        echo    'Loading Linux linux ...'&lt;br /&gt;
        linux   /ROOT@/boot/vmlinuz-linux root=ZFS=rpool/ROOT rw  loglevel=3 quiet&lt;br /&gt;
        echo    'Loading initial ramdisk ...'&lt;br /&gt;
        initrd  /ROOT@/boot/initramfs-linux.img&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
=== Snapshot ===&lt;br /&gt;
Snapshot del dataset ROOT&lt;br /&gt;
 # zfs snapshot -r rpool/ROOT''@snapshot-2023-03-07''&lt;br /&gt;
&lt;br /&gt;
Lista degli snapshot presenti&lt;br /&gt;
 # zfs list -t snapshot&lt;br /&gt;
&lt;br /&gt;
Ripristino dello snapshot&lt;br /&gt;
 # zfs rollback rpool''@snapshot-2023-03-07''&lt;br /&gt;
&lt;br /&gt;
Oltre che servire per il ripristino, possono essere montati per esplorarne il contenuto, ma non è possibile modificarlo.&lt;br /&gt;
 # mount -t zfs rpool@''2023-04-11'' /mnt/''snapshot''&lt;br /&gt;
&lt;br /&gt;
Copia locale di un dataset&lt;br /&gt;
 # zfs send -R rpool/ROOT''@snapshot-2023-03-07'' | zfs recv -F rpool/ROOT/backup&lt;br /&gt;
&lt;br /&gt;
Invio via SSH di una snapshot&lt;br /&gt;
 # zfs send -R rpool/ROOT''@snapshot-2023-03-07''| ssh ''user@ip_address'' zfs recv tank/backups/rootzfs&lt;br /&gt;
&lt;br /&gt;
Backup locale di una snapshot&lt;br /&gt;
 # zfs send -R rpool/ROOT@snapshot | gzip &amp;gt; /tmp/zfs_backup.gz&lt;br /&gt;
&lt;br /&gt;
Restore del backup&lt;br /&gt;
 # gzcat /tmp/zfs_backup.gz | zfs recv -F rpool/ROOT&lt;br /&gt;
&lt;br /&gt;
==== Clone ====&lt;br /&gt;
Se vogliamo eseguire operazioni di scrittura su una snapshot occorre effettuare un clone del dataset&lt;br /&gt;
 # zfs snapshot ''rpool/home''@yesterday&lt;br /&gt;
 # zfs clone ''rpool/home''@yesterday rpool/new_home&lt;br /&gt;
&lt;br /&gt;
Per sostituire il filesystem principale col clone&lt;br /&gt;
 # zfs promote rpool/new_home&lt;br /&gt;
&lt;br /&gt;
=== ZFS Cifrato ===&lt;br /&gt;
Creare un dataset cifrato con password&lt;br /&gt;
 # zfs create -o encryption=on -o keyformat=''password'' ''nomepool''/''nomedataset''&lt;br /&gt;
&lt;br /&gt;
Generazione di una chiave di cifratura&lt;br /&gt;
 # dd if=/dev/random of=/path/to/key bs=1 count=32&lt;br /&gt;
&lt;br /&gt;
Creare un dataset cifrato con una chiave di cifratura &lt;br /&gt;
 # zfs create -o encryption=on -o keyformat=raw -o keylocation=''file:///directory/della/chiave'' ''nomepool''/''nomedataset''&lt;br /&gt;
&lt;br /&gt;
Controllare il percorso della chiave per ''nomepool''/''nomedataset''&lt;br /&gt;
 # zfs get keylocation ''nomepool''/''nomedataset''&lt;br /&gt;
&lt;br /&gt;
Cambiare il percorso della chiave&lt;br /&gt;
 # zfs set keylocation=''file:///nuova/directory/della/chiave'' ''nomepool''/''nomedataset''&lt;br /&gt;
&lt;br /&gt;
Caricare manualmente le chiavi di cifratura prima del montaggio&lt;br /&gt;
 # zfs load-key ''nomepool''/''nomedataset'' # carica la chiave del determinato dataset&lt;br /&gt;
 # zfs load-key -a # carica tutte le chiavi del filesystem&lt;br /&gt;
&lt;br /&gt;
==== Unlock con systemd ====&lt;br /&gt;
Creare script per il caricamento delle chiavi all'avvio &lt;br /&gt;
&lt;br /&gt;
* Caricando la password dal keyfile&lt;br /&gt;
''/etc/systemd/system/zfs-loadkey-file.service''&lt;br /&gt;
&lt;br /&gt;
 [Unit]&lt;br /&gt;
 Description=Load ZFS encryption keys&lt;br /&gt;
 DefaultDependencies=no&lt;br /&gt;
 After=zfs-import.target&lt;br /&gt;
 Before=zfs-mount.service&lt;br /&gt;
 [Service]&lt;br /&gt;
 Type=oneshot&lt;br /&gt;
 RemainAfterExit=yes&lt;br /&gt;
 ExecStart=/usr/sbin/zfs load-key -a&lt;br /&gt;
 StandardInput=tty-force&lt;br /&gt;
 [Install]&lt;br /&gt;
 WantedBy=zfs-mount.service&lt;br /&gt;
&lt;br /&gt;
* Digitando la password&lt;br /&gt;
&lt;br /&gt;
''/etc/systemd/system/zfs-load-key@.service''&lt;br /&gt;
 [Unit]&lt;br /&gt;
 Description=Load %I encryption keys&lt;br /&gt;
 Before=systemd-user-sessions.service zfs-mount.service&lt;br /&gt;
 After=zfs-import.target&lt;br /&gt;
 Requires=zfs-import.target&lt;br /&gt;
 DefaultDependencies=no&lt;br /&gt;
 [Service]&lt;br /&gt;
 Type=oneshot&lt;br /&gt;
 RemainAfterExit=yes&lt;br /&gt;
 ExecStart=/bin/sh -c 'until (systemd-ask-password &amp;quot;Encrypted ZFS password for %I&amp;quot; --no-tty | zfs load-key %I); do echo &amp;quot;Try again!&amp;quot;; done'&lt;br /&gt;
 [Install]&lt;br /&gt;
 WantedBy=zfs-mount.service&lt;br /&gt;
&lt;br /&gt;
==== Unlock al login ====&lt;br /&gt;
Impostare il filesystem in modalità legacy così che non sia montato automaticamente all'avvio&lt;br /&gt;
 # zfs set mountpoint=legacy zroot/data/&lt;br /&gt;
&lt;br /&gt;
Modificare il file /etc/fstab&lt;br /&gt;
 zroot/data/         /home           zfs             rw,xattr,posixacl,noauto        0 0&lt;br /&gt;
&lt;br /&gt;
Creare il seguente script: &amp;lt;code&amp;gt;/sbin/mount-zfs-homedir&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 #&lt;br /&gt;
 set -eu&lt;br /&gt;
 # Password is given to us via stdin, save it in a variable for later&lt;br /&gt;
 PASS=$(cat -)&lt;br /&gt;
 #&lt;br /&gt;
 VOLNAME=&amp;quot;zroot/data/home&amp;quot;&lt;br /&gt;
 #&lt;br /&gt;
 # Unlock and mount the volume&lt;br /&gt;
 zfs load-key &amp;quot;$VOLNAME&amp;quot; &amp;lt;&amp;lt;&amp;lt; &amp;quot;$PASS&amp;quot; || continue&lt;br /&gt;
 zfs mount &amp;quot;$VOLNAME&amp;quot; || true # ignore errors&lt;br /&gt;
&lt;br /&gt;
Aggiungere lo script a PAM: /etc/pam.d/system-auth&lt;br /&gt;
&lt;br /&gt;
 auth       optional                    pam_exec.so          expose_authtok /sbin/mount-zfs-homedir&lt;br /&gt;
&lt;br /&gt;
=== Cache ===&lt;br /&gt;
Utilizzare un moderno disco a stato solido può essere una soluzione economica per velocizzare un pool, eventualmente anche raid&lt;br /&gt;
&lt;br /&gt;
 # zpool add -f ''rpool'' cache /dev/sdd1&lt;br /&gt;
 # zpool add -f ''rpool'' log /dev/sdd2&lt;br /&gt;
&lt;br /&gt;
=== Sharing ===&lt;br /&gt;
Non è molto noto, ma ZFS ha integrati dei [https://docs.oracle.com/cd/E36784_01/html/E36835/gayne.html#scrolltoc comandi] per permettere la condivisione del filesystem con altre macchine tramite i protocolli NFS o SMB.&lt;br /&gt;
&lt;br /&gt;
Premessa: occorrerà attivare il server NFS&lt;br /&gt;
 # systemctl start nfs-server.service&lt;br /&gt;
 # systemctl enable nfs-server.service&lt;br /&gt;
&lt;br /&gt;
Condividere tramite NFS l'intero pool ''home''&lt;br /&gt;
 # zfs set share.nfs=on ''pool''/home&lt;br /&gt;
&lt;br /&gt;
Verificare la condivisione&lt;br /&gt;
 # zfs get -r share.nfs ''pool''/home&lt;br /&gt;
 NAME             PROPERTY   VALUE  SOURCE&lt;br /&gt;
 pool/home        share.nfs  on     local&lt;br /&gt;
&lt;br /&gt;
Condividere tramite NFS la directory home dell'utente 1, 2...&lt;br /&gt;
 # zfs create ''pool''/home/'''utente1'''&lt;br /&gt;
 # zfs create ''pool''/home/'''utente2'''&lt;br /&gt;
&lt;br /&gt;
Si possono specificare opzioni di montaggio per i permessi sul mount&lt;br /&gt;
 # zfs set share.nfs.nosuid=on ''pool''/home/'''utente1'''&lt;br /&gt;
 # zfs set share.nfs=on ''pool''/home/'''utente1'''&lt;br /&gt;
&lt;br /&gt;
Condividere una directory con tutta la rete&lt;br /&gt;
 # zfs share -o share.nfs=on -o share.nfs.public=on pool/public%pubshare&lt;br /&gt;
&lt;br /&gt;
Condividere una directory con una parte della rete&lt;br /&gt;
 # zfs set share.nfs='rw=@192.0.10.0/16,rw=@192.0.11.0/24' pool/public%pubshare&lt;br /&gt;
&lt;br /&gt;
Disabilitare temporaneamente una condivisione&lt;br /&gt;
 # zfs unshare pool/home/''nomeshare''&lt;br /&gt;
&lt;br /&gt;
Rimuovere una condivisione&lt;br /&gt;
 # zfs set share.nfs=off pool/''share''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Montare share ===&lt;br /&gt;
Montare il volume pool1 della macchina con IP 192.168.0.2 su /mnt/pool1&lt;br /&gt;
 # mount -t nfs 192.168.0.2:/pool1 /mnt/pool1&lt;br /&gt;
&lt;br /&gt;
Aggiungere la seguente riga al file '''/etc/fstab''' per automatizzare il montaggio&lt;br /&gt;
 192.168.0.2:/pool1      /mnt/pool1      nfs       defaults          0          0&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== SWAP ===&lt;br /&gt;
Creare una partizione swap da 8 GiB&lt;br /&gt;
 # zfs create -V 8G '''&amp;lt;pool&amp;gt;/swap'''&lt;br /&gt;
&lt;br /&gt;
Formattazione della partizione&lt;br /&gt;
 # mkswap -f /dev/zvol/&amp;lt;pool&amp;gt;/swap&lt;br /&gt;
&lt;br /&gt;
Attivazione della swap&lt;br /&gt;
 # swapon /dev/zvol/&amp;lt;pool&amp;gt;/swap&lt;br /&gt;
&lt;br /&gt;
Aggiungere la swap al &amp;lt;code&amp;gt;/etc/fstab&amp;lt;/code&amp;gt;&lt;br /&gt;
 '''/dev/zvol/&amp;lt;pool&amp;gt;/swap''' none swap discard 0 0&lt;br /&gt;
&lt;br /&gt;
== Filesystem Cifrato ==&lt;br /&gt;
Esistono molti modi per cifrare volumi e file su Linux, come si può vedere da questa [https://wiki.archlinux.org/title/Data-at-rest_encryption#Comparison_table tabella]&lt;br /&gt;
&lt;br /&gt;
* Generare una password di 32 caratteri alfanumerici con /dev/random. &lt;br /&gt;
 cat /dev/random | tr -dc '[:alnum:]' | fold -w 32 | head -n 1&lt;br /&gt;
&lt;br /&gt;
=== EncFS ===&lt;br /&gt;
Cifrare una directory può essere un'alternativa alla cifratura di un intera partizione come avviene invece con Cryptsetup. EncFS è un filesystem user-space montabile tramite FUSE che permette di effettuare questa operazione. Rispetto ad un filesystem loopback criptato ci sono però diversi pregi e difetti.&lt;br /&gt;
&lt;br /&gt;
* Pro&lt;br /&gt;
# Selezionare selettivamente i contenuti da cifrare, rispetto ad avere un device completamente cifrato, appesantisce meno il lavoro della CPU specialmente quando si utilizzano processori datati privi del set di istruzioni AES.&lt;br /&gt;
# Dimensioni modificabili: un file system vuoto EncFS è composto da qualche dozzina di byte e può crescere a qualsiasi dimensione senza bisogno di essere riformattato. Con un dispositivi di cifratura a blocchi, si alloca un filesystem in anticipo con le dimensioni desiderate.&lt;br /&gt;
# Possibilità di backup incrementali: Un filesystem EncFS può essere salvato con una politica per file. Un programma di backup è in grado di rilevare quali file sono cambiati, anche se non sarà in grado di decifrarli.&lt;br /&gt;
# Permette di aggiungere la crittografia a qualsiasi filesystem&lt;br /&gt;
# Lavora a livello utente, non richiede permessi di amministratore&lt;br /&gt;
&lt;br /&gt;
* Contro&lt;br /&gt;
# Non permette di cifrare l'intera installazione, ma solo i file selezionati&lt;br /&gt;
# Chi ha accesso ai file crittografati può conoscerne i meta-dati (numero di file, permessi, dimensione)&lt;br /&gt;
# EncFS sembra non sia più attivamente mantenuto. Un'alternativa molto simile potrebbe essere gocryptfs.&lt;br /&gt;
&lt;br /&gt;
==== Montaggio automatico ====&lt;br /&gt;
Dato che non è possibile passare opzioni all'eseguibile encfs su fstab è necessario creare un wrapper, cioè uno script da rendere eseguibile (es. &amp;lt;code&amp;gt;/home/user/encfs.sh&amp;lt;/code&amp;gt;) che vada a recuperare la password da un file (es. ''encfs_password''), magari contenuto in una chiavetta USB anch'essa montata automaticamente all'avvio.&lt;br /&gt;
&lt;br /&gt;
Wrapper&lt;br /&gt;
 #!/bin/sh&lt;br /&gt;
 encfs --public --extpass=&amp;quot;cat /mnt/USB/encfs_password&amp;quot; $*&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
A questo punto è possibile aggiungere all'''/etc/fstab'' le seguenti righe.&lt;br /&gt;
 # Montaggio automatico della penna USB ''cafebabe-b00b5-deadbee'' all'avvio&lt;br /&gt;
 UUID=cafebabe-b00b5-deadbeef /mnt/USB auto defaults,auto 0 0&lt;br /&gt;
 # Richiamo del wrapper &lt;br /&gt;
 /home/''user''/encfs.sh#/home/''user''/.encrypted /home/''user''/decrypted fuse rw,user,auto 0 0&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== gocryptfs ===&lt;br /&gt;
Creare una directory cifrata ''crypt'' e montarla su ''dati''&lt;br /&gt;
 $ mkdir crypt dati&lt;br /&gt;
 $ gocryptfs -init crypt&lt;br /&gt;
 $ gocryptfs crypt dati&lt;br /&gt;
&lt;br /&gt;
Creare una versione cifrata di una preesistente home&lt;br /&gt;
&lt;br /&gt;
 $ mkdir /home/user.crypt&lt;br /&gt;
 $ gocryptfs -init -reverse /home/user&lt;br /&gt;
 $ gocryptfs -reverse /home/user /home/user.crypt&lt;br /&gt;
&lt;br /&gt;
È possibile aggiungere una linea simile alle seguente al file '''/etc/fstab''' per automatizzare il sistema di montaggio di una cartella cifrata durante il boot utilizzando un keyfile.&lt;br /&gt;
&lt;br /&gt;
 /home/user/cipher /home/user/plain fuse./usr/bin/gocryptfs nofail,allow_other,passfile=/tmp/password 0 0&lt;br /&gt;
&lt;br /&gt;
=== [https://wiki.archlinux.org/title/ECryptfs ECryptfs] ===&lt;br /&gt;
&lt;br /&gt;
=== VeraCrypt ===&lt;br /&gt;
[https://www.veracrypt.fr VeraCrypt] (fork di TrueCrypt) è un tool opensource dotato di '''interfaccia grafica''' che permette di configurare la cifratura di volumi reali o file immagini montate in loop. Ha una funzione particolare, chiamata '''Hidden Volume''' che permette di creare un volume nascosto all'interno di un normale volume VeraCrypt al quale si può accedere con una diversa password così da evitare in caso di necessità (ricatto, fidanzata/moglie gelosa, imposizione da parte delle forze dell'ordine) di mostrare il contenuto del reale archivio cifrato.&lt;br /&gt;
&lt;br /&gt;
=== LUKS ===&lt;br /&gt;
Questo strumento permette di crittografare un intero disco o una partizione, es. /dev/'''sdc2''':&lt;br /&gt;
 &lt;br /&gt;
 # cryptsetup luksFormat --cipher aes-xts-plain64 --key-size 512 --hash sha512 --iter-time 5000 /dev/'''sdc2'''&lt;br /&gt;
 &lt;br /&gt;
Una volta formattato il device è possibile montarlo, verrà chiesto di creare una password a meno che nel comando non venga esplicitato un file con la chiave di cifratura&lt;br /&gt;
 # cryptsetup open /dev/'''sdc2''' lukspart&lt;br /&gt;
&lt;br /&gt;
Adesso è possibile formattare il device col filesystem che preferiamo&lt;br /&gt;
 # mkfs.btrfs /dev/mapper/lukspart&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[https://wiki.golem.linux.it/Installare_Arch_Linux_in_una_partizione_cifrata How-to GOLEM]&lt;br /&gt;
&lt;br /&gt;
[https://guide.debianizzati.org/index.php/Volumi_criptati_LUKS_-_Creazione_e_uso_con_cryptmount How-to Debianizzati]&lt;br /&gt;
&lt;br /&gt;
=== fscrypt ===&lt;br /&gt;
È un sistema di cifratura progettato per lavorare con filesystem moderni che supportano direttamente la crittografia nativa come ext4, F2FS, UBIFS, CephFS e forse in futuro anche btrfs. &lt;br /&gt;
&lt;br /&gt;
Abilitiamo la crittografia su una directory di un device '''sdc1''' precedentemente formattato con ext4&lt;br /&gt;
 # fscrypt setup /mnt/encrypted&lt;br /&gt;
 # tune2fs -O encrypt /dev/'''sdc1'''&lt;br /&gt;
 # fscrypt encrypt /mnt/encrypted&lt;br /&gt;
&lt;br /&gt;
Per accedere alla directory al riavvio successivo&lt;br /&gt;
 # fscrypt unlock /mnt/encrypted&lt;br /&gt;
&lt;br /&gt;
=== ZFS ===&lt;br /&gt;
Creiamo un pool dove mettere il dataset cifrato, es.: '''tank/encrypted_data'''&lt;br /&gt;
 # zpool create tank /dev/sdc3&lt;br /&gt;
&lt;br /&gt;
Creiamo il dataset&lt;br /&gt;
 # zfs create -o encryption=aes-256-gcm -o keyformat=passphrase -o keylocation=prompt '''tank/encrypted_data'''&lt;br /&gt;
 &lt;br /&gt;
Montiamo il datasett&lt;br /&gt;
  # zfs mount '''tank/encrypted_data'''&lt;br /&gt;
&lt;br /&gt;
Montiamo pool e dataset cifrato al riavvio successivo &lt;br /&gt;
 # zpool import tank&lt;br /&gt;
 # zfs load-key '''tank/encrypted_data'''&lt;br /&gt;
 # zfs mount '''tank/encrypted_data'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Appunti_Arch_Linux#ZFS_Cifrato|ZFS cifrato]]&lt;br /&gt;
&lt;br /&gt;
= RAID mdadm =&lt;br /&gt;
Su Linux era possibile effettuare RAID via software anche prima dell'avvento di filesystem di nuova generazione come btrfs o zfs. Per fare ciò è possibile utilizzare il comando &amp;lt;code&amp;gt;mdadm&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Vedere l'organizzazione della tabella delle partizioni dei dischi&lt;br /&gt;
 $ lsblk&lt;br /&gt;
&lt;br /&gt;
 sda      8:16   0 447.1G  0 disk &lt;br /&gt;
 ├─sda1   8:17   0   500M  0 part &lt;br /&gt;
 ├─sda2   8:18   0    16G  0 part [SWAP]&lt;br /&gt;
 └─sda3   8:19   0 430.6G  0 part /&lt;br /&gt;
                                 &lt;br /&gt;
 sdb      8:32   1   3.7G  0 disk &lt;br /&gt;
 ├─sdb1   8:33   1   3.5G  0 part &lt;br /&gt;
 ├─sdb2   8:34   1   239M  0 part [SWAP]&lt;br /&gt;
 └─sdb3   8:19   0 430.6G  0 part /&lt;br /&gt;
&lt;br /&gt;
Nell'esempio ci sono due dischi (sda, sdb) contenenti 3 partizioni: EFI, SWAP e Linux.&lt;br /&gt;
&lt;br /&gt;
== RAID 0 ==&lt;br /&gt;
Creare un volume ''md3'' che costituito dalla somma delle due partizioni sda3 e sdb3&lt;br /&gt;
 # mdadm --create --verbose /dev/md3 --level=0 --raid-devices=2 /dev/sda3 /dev/sdb3&lt;br /&gt;
&lt;br /&gt;
Verificare che il raid funzioni correttamente&lt;br /&gt;
 # mdadm --detail /dev/md0&lt;br /&gt;
&lt;br /&gt;
Utilizzare il nuovo volume md3, formattato col filesystem XFS, per una nuova installazione di Arch Linux (montandolo in /mnt)&lt;br /&gt;
 # mkfs.xfs /dev/md3&lt;br /&gt;
 # mount /dev/md3 /mnt/&lt;br /&gt;
&lt;br /&gt;
Per memorizzare l'array nel file di configurazione&lt;br /&gt;
 # mdadm –Es &amp;gt; /etc/mdadm.conf&lt;br /&gt;
&lt;br /&gt;
== RAID 1 ==&lt;br /&gt;
Creare un volume ''md3'' mirror delle due partizioni sda3 e sdb3&lt;br /&gt;
 # mdadm --create /dev/md3 /dev/sda3 /dev/sdb3 --level=1 --raid-devices=2&lt;br /&gt;
&lt;br /&gt;
== RAID 5 ==&lt;br /&gt;
Creare un volume ''md3'' con un [https://en.wikipedia.org/wiki/Standard_RAID_levels#RAID_5 raid5], ovviamente stavolta occorreranno almeno 3 dischi es.: sda3, sdb3, sdc3. &lt;br /&gt;
&lt;br /&gt;
Per creare tre partizioni tutte della stessa dimensione è possibile copiare su sdb e sdc la tabella delle partizioni di sda&lt;br /&gt;
 #  sfdisk -d /dev/sda | sfdisk /dev/sdb&lt;br /&gt;
 #  sfdisk -d /dev/sda | sfdisk /dev/sdc&lt;br /&gt;
&lt;br /&gt;
Creare l'array in raid5&lt;br /&gt;
 # mdadm --create /dev/md/md3 /dev/sda1 /dev/sdb1 /dev/sdc1 --level=5 --raid-devices=3 --bitmap=internal&lt;br /&gt;
&lt;br /&gt;
== Modificare l'array ==&lt;br /&gt;
È possibile passare da raid1 a raid5&lt;br /&gt;
 # mdadm --grow /dev/md3 --level=5&lt;br /&gt;
 # mdadm --grow /dev/md3 --add /dev/sdc3 --raid-devices=3&lt;br /&gt;
&lt;br /&gt;
== Accorgersi di un guasto ==&lt;br /&gt;
Nei raid 1 e 5 in caso di danneggiamento di un disco sarà possibile sostituirlo e ricostruire l'array senza perdere dati. Nell'ipotesi di avere un guasto su '''sdb''' in un raid1 comparirà qualcosa di simile a questo eseguendo &amp;lt;code&amp;gt;cat /proc/mdstat&amp;lt;/code&amp;gt;&lt;br /&gt;
 md3 : active raid1 sda3[1]&lt;br /&gt;
 ''blocks [2/2] [U_]'' &lt;br /&gt;
invece che&lt;br /&gt;
 md3 : active raid1 sda3[1] '''sdb3'''[0]&lt;br /&gt;
      262016 blocks [2/2] [UU]&lt;br /&gt;
&lt;br /&gt;
===Rimuovere il disco danneggiato dal RAID===&lt;br /&gt;
Si dovrà marcare sdb3 come danneggiata e andrà rimossa dall'array.&lt;br /&gt;
 # mdadm --manage /dev/md3 --fail /dev/sdb3&lt;br /&gt;
 # mdadm --manage /dev/md3 --remove /dev/sdb3&lt;br /&gt;
&lt;br /&gt;
Se avessimo più array (es. md1, md2...) contenenti partizioni del disco sdb (sdb1, sdb2...), l'operazione andrebbe ripetuta per ciascuno di essi es.:&lt;br /&gt;
 # mdadm --manage /dev/md1 --fail /dev/sdb1&lt;br /&gt;
 # mdadm --manage /dev/md1 --remove /dev/sdb1&lt;br /&gt;
&lt;br /&gt;
 #  cat /proc/mdstat&lt;br /&gt;
 Personalities : [linear] [multipath] [raid0] [raid1] [raid5] [raid4] [raid6] [raid10]&lt;br /&gt;
 md0 : active raid1 sda3[0]&lt;br /&gt;
 24418688 blocks [2/1] [U_]&lt;br /&gt;
&lt;br /&gt;
 unused devices: &amp;lt;none&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Sostituzione del disco danneggiato ===&lt;br /&gt;
Spegnere il computer, rimuovere il disco guasto e collegarne al suo posto uno funzionante.&lt;br /&gt;
&lt;br /&gt;
'''NB: il nuovo disco dovrà essere di dimensioni uguali o maggiori del disco sostituito'''&lt;br /&gt;
&lt;br /&gt;
Installato il nuovo disco, riaccendere il PC, loggarsi come root e ricreare sul nuovo sdb le stesse partizioni presenti su sda:&lt;br /&gt;
 # sfdisk -d /dev/sda | sfdisk /dev/sdb&lt;br /&gt;
 # fdisk -l ''(per controllare che le partizioni siano uguali)''&lt;br /&gt;
&lt;br /&gt;
=== Ripristino del RAID 1 ===&lt;br /&gt;
Aggiungere ''/dev/sdb3'' a ''/dev/md3''&lt;br /&gt;
 # mdadm --manage /dev/md3 --add /dev/sdb3&lt;br /&gt;
&lt;br /&gt;
Se avessimo più array (es. md1, md2...) contenenti partizioni del disco sdb (sdb1, sdb2...), l'operazione andrebbe ripetuta per ciascuno di essi es.:&lt;br /&gt;
  # mdadm --manage /dev/md1 --add /dev/sdb1&lt;br /&gt;
&lt;br /&gt;
Controllare che tutto sia andato a buon fine&lt;br /&gt;
 # cat /proc/mdstat&lt;br /&gt;
&lt;br /&gt;
= LVM =&lt;br /&gt;
Il [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 Logical Volume Manager] (LVM o gestore logico dei volumi) è un software per la gestione dei dischi che permette di superare le limitazioni legate al normale partizionamento di questi ultimi. Si tratta di una specie di ''strato'' che si va a frapporre tra il dispositivo fisico ed il filesystem. Permette di gestire dinamicamente aggiunta, rimozione o ridimensionamento dello spazio di archiviazione, il RAID, nonché lo snapshot dei volumi.&lt;br /&gt;
&lt;br /&gt;
LVM è un prodotto oltremodo maturo, disponibile per Linux sin dal kernel 2.4, per questa ragione distribuzioni orientate al mercato aziendale come RedHat lo hanno scelto, accoppiandolo a XFS o ext4, come soluzione predefinita per implementare la maggior parte delle caratteristiche fornite dai moderni filesystem come BTRFS o ZFS &lt;br /&gt;
&lt;br /&gt;
LVM si basa sui seguenti concetti&lt;br /&gt;
&lt;br /&gt;
* '''Physical Volumes (PV)''': rappresentano qualsiasi disco si voglia inizializzare (&amp;quot;formattare&amp;quot;) come sottosistema LVM&lt;br /&gt;
 # pvcreate /dev/sda1&lt;br /&gt;
 # pvcreate /dev/sdb3&lt;br /&gt;
 # pvcreate /dev/sdc&lt;br /&gt;
 # pvdisplay&lt;br /&gt;
&lt;br /&gt;
* '''Volume Groups (VG)''': sono costituiti da ''physical volumes'' e rappresentano la capacità totale delle risorse di un LVM&lt;br /&gt;
 # vgcreate vg0 /dev/sda1 /dev/sdb3 /dev/sdc&lt;br /&gt;
 # vgdisplay vg0&lt;br /&gt;
&lt;br /&gt;
* '''Logical Volumes (LV)''': utilizzano le risorse messe a disposizione dai ''volume groups''. Possono essere inizializzati anche con proprietà di RAID o cache.&lt;br /&gt;
 # lvcreate -L 10G -n ''home'' vg0&lt;br /&gt;
 # lvdisplay /dev/vg0/home&lt;br /&gt;
&lt;br /&gt;
Oppure nel caso volessimo fare un raid5&lt;br /&gt;
 # lvcreate -n lvr5 –type raid5 -L 10G -i 3 vg0&lt;br /&gt;
 &lt;br /&gt;
 -n ''nome del volume''&lt;br /&gt;
 –type raid5 ''tipo di raid''&lt;br /&gt;
 -L ''dimensione massima della grandezza del raid''&lt;br /&gt;
 -i ''numero dei physical volumes che si vogliono utilizzare''&lt;br /&gt;
&lt;br /&gt;
Per formattare il volume logico appena creato&lt;br /&gt;
 # mkfs -t ext4 /dev/vg0/lvr5&lt;br /&gt;
&lt;br /&gt;
Per aggiungere un disco ad un Volume Groups&lt;br /&gt;
 # vgextend vg0 /dev/sdb2&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Snapshot ==&lt;br /&gt;
Creare uno snapshot della del volume logico ''/home'' che potrà contenere fino ad un massimo di 5 GiB di dati modificati rispetto all'originale&lt;br /&gt;
 # lvcreate --size 5G --snapshot --name homesnap20230306 /dev/vg0/home&lt;br /&gt;
&lt;br /&gt;
Ripristinare il volume logico ricaricando lo snapshot&lt;br /&gt;
 # lvconvert --merge /dev/vg0/homesnap20230306&lt;br /&gt;
&lt;br /&gt;
Nel caso il logical volume sia attivo il merging avverrà col prossimo riavvio e lo snapshot sparirà.&lt;br /&gt;
&lt;br /&gt;
== Cache ==&lt;br /&gt;
Utilizzare un moderno disco a stato solido può essere una soluzione economica per velocizzare un LV.&lt;br /&gt;
&lt;br /&gt;
Convertire il disco a PV ed aggiungerlo al preesistente VG&lt;br /&gt;
 # pvcreate ''/dev/discoSSD''&lt;br /&gt;
 # vgextend vg0 ''/dev/discoSSD''&lt;br /&gt;
&lt;br /&gt;
Aggiungere la cache al LV&lt;br /&gt;
 # lvcreate --type cache --cachemode writethrough -l 100%FREE -n root_cachepool vg0/home ''/dev/discoSSD''&lt;br /&gt;
&lt;br /&gt;
Rimuovere la cache dal LV&lt;br /&gt;
 # lvconvert --uncache vg0/home&lt;br /&gt;
&lt;br /&gt;
= GRUB (Boot loader) =&lt;br /&gt;
È 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.&lt;br /&gt;
&lt;br /&gt;
== Sistema con BIOS ==&lt;br /&gt;
 # pacman -S grub&lt;br /&gt;
 # grub-mkconfig -o /boot/grub/grub.cfg&lt;br /&gt;
 # grub-install /dev/sda&lt;br /&gt;
&lt;br /&gt;
== Sistema UEFI ==&lt;br /&gt;
'''NB: per installare correttamente GRUB su un sistema UEFI occorre che il device di installazione abbia effettuato il boot in modalità UEFI e non Legacy (BIOS)'''&lt;br /&gt;
&lt;br /&gt;
 # pacman -S grub&lt;br /&gt;
 # mkdir /boot/EFI&lt;br /&gt;
 # mount /dev/sda1 /boot/EFI&lt;br /&gt;
 # grub-install /dev/sda&lt;br /&gt;
 # grub-mkconfig -o /boot/grub/grub.cfg&lt;br /&gt;
&lt;br /&gt;
== Gestione snapshot BTRFS ==&lt;br /&gt;
&lt;br /&gt;
=== Manuale ===&lt;br /&gt;
Editare ''/etc/grub.d/40_custom'' (o crearlo) e aggiungere quanto segue per permettere l'avvio della snapshot ''rootsnap''&lt;br /&gt;
&lt;br /&gt;
 menuentry 'Linux snapshot' {&lt;br /&gt;
        insmod gzio&lt;br /&gt;
        insmod part_gpt&lt;br /&gt;
        insmod btrfs&lt;br /&gt;
        set root='hd1,gpt3'&lt;br /&gt;
        linux   /rootsnap/boot/vmlinuz-linux root=/dev/partizione rw rootflags=subvol=rootsnap  quiet&lt;br /&gt;
        initrd  /rootsnap/boot/initramfs-linux.img&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
dopodichè aggiornare la configurazione di GRUB con&lt;br /&gt;
 # grub-mkconfig -o /boot/grub/grub.cfg&lt;br /&gt;
&lt;br /&gt;
=== Automatico ===&lt;br /&gt;
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.&lt;br /&gt;
 # pacman -S grub-btrfs&lt;br /&gt;
&lt;br /&gt;
Ogni volta che si vorrà aggiornare grub con nuovi subvolumi basterà dare il seguente comando&lt;br /&gt;
&lt;br /&gt;
 # grub-mkconfig -o /boot/grub/grub.cfg&lt;br /&gt;
&lt;br /&gt;
== Ripristinare GRUB ==&lt;br /&gt;
Aggiornando la propria distribuzione Linux, il proprio boot loader o installando un altro sistema operativo (es. Windows) può capitare di sovrascrivere il [http://it.wikipedia.org/wiki/Master_boot_record MBR].&lt;br /&gt;
&lt;br /&gt;
Avviare il computer con un liveCD/DVD o USB: &lt;br /&gt;
* [http://archlinux.mirror.garr.it/archlinux/iso/latest/archlinux-x86_64.iso Archlinux]&lt;br /&gt;
* [http://www.sysresccd.org/Download Systemrescuecd]&lt;br /&gt;
* [http://grml.org/download/ grml]&lt;br /&gt;
* [http://na.mirror.garr.it/mirrors/ubuntu-releases/ Ubuntu]&lt;br /&gt;
&lt;br /&gt;
Ipotizziamo di avere una partizione / chiamata /dev/sda2 e nessuna /boot&lt;br /&gt;
&lt;br /&gt;
Creiamo i seguenti mount point&lt;br /&gt;
 # sudo su&lt;br /&gt;
 # cd /mnt&lt;br /&gt;
 # mkdir sda2&lt;br /&gt;
 # mount /dev/sda2 /mnt/sda2&lt;br /&gt;
&lt;br /&gt;
Se utilizziamo una scheda madre UEFI andrà montata anche la partizione efi (solitamente è la prima partizione del disco ''sda1'')&lt;br /&gt;
 # mount /dev/sda2 /mnt/sda2/boot/efi&lt;br /&gt;
&lt;br /&gt;
Se necessario editiamo il file di configurazione di grub&lt;br /&gt;
  # nano /mnt/sda2/boot/grub/grub.cfg&lt;br /&gt;
&lt;br /&gt;
=== arch-chroot ===&lt;br /&gt;
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&lt;br /&gt;
&lt;br /&gt;
 # arch-chroot /mnt/sda2&lt;br /&gt;
&lt;br /&gt;
=== Manuale ===&lt;br /&gt;
 # mount --rbind /dev /mnt/sda2/dev&lt;br /&gt;
 # mount -t proc /proc /mnt/sda2/proc&lt;br /&gt;
 # mount -t sysfs /sys /mnt/sda2/sys/&lt;br /&gt;
&lt;br /&gt;
Eseguiamo il vero e proprio chroot in /dev/sda2&lt;br /&gt;
 # chroot /mnt/sda2&lt;br /&gt;
&lt;br /&gt;
=== Reinstallazione ===&lt;br /&gt;
 # grub-mkconfig -o /boot/grub/grub.cfg&lt;br /&gt;
 # grub-install /dev/sda&lt;br /&gt;
&lt;br /&gt;
=== Riavvio del sistema ===&lt;br /&gt;
Usciamo dal chroot, smontiamo la partizione e riavviamo il sistema&lt;br /&gt;
 # exit&lt;br /&gt;
 # umount /mnt/sda1/proc&lt;br /&gt;
 # umount /mnt/sda1/dev&lt;br /&gt;
 # umount /mnt/sda1&lt;br /&gt;
 # systemctl reboot&lt;br /&gt;
&lt;br /&gt;
== Eliminare il boot loader ==&lt;br /&gt;
In caso di errori nell'installazione di GRUB è possibile cancellare il vecchio boot loader di un disco (&amp;lt;code&amp;gt;''devicename'' = sda,sdb,sdc...&amp;lt;/code&amp;gt;)&lt;br /&gt;
 # dd if=/dev/zero of=''/dev/devicename'' bs=446 count=1&lt;br /&gt;
&lt;br /&gt;
== ISOBoot ==&lt;br /&gt;
Con GRUB2 è possibile effettuare il boot di iso di LiveCD/USB Linux presenti sul disco aggiungendole su &amp;lt;code&amp;gt;/etc/grub.d/40_custom &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Ubuntu 23.04&lt;br /&gt;
 menuentry &amp;quot;Ubuntu 23.04 desktop ISO&amp;quot; {&lt;br /&gt;
        insmod part_gpt&lt;br /&gt;
        insmod ext2&lt;br /&gt;
        insmod btrfs&lt;br /&gt;
        rmmod tpm&lt;br /&gt;
     # es.: terza partizione del primo disco&lt;br /&gt;
        set root=(hd0,gpt3)&lt;br /&gt;
        set isofile=&amp;quot;/home/'''&amp;lt;username&amp;gt;'''/Downloads/ubuntu-23.04-desktop-amd64.iso&amp;quot;&lt;br /&gt;
        loopback loop $isofile&lt;br /&gt;
        linux (loop)/casper/vmlinuz boot=casper iso-scan/filename=$isofile quiet splash&lt;br /&gt;
        initrd (loop)/casper/initrd&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
= Networking =&lt;br /&gt;
&lt;br /&gt;
== Manuale ==&lt;br /&gt;
===net-tools===&lt;br /&gt;
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 [https://lists.debian.org/debian-devel/2009/03/msg00780.html obsoleta]. Tra i suoi comandi principali: arp, hostname, ifconfig, iptunnel netstat e route.&lt;br /&gt;
&lt;br /&gt;
Attivare l'interfaccia di rete eth0 ed assegnarle l'indirizzo ip 192.168.0.2&lt;br /&gt;
 # ifconfig eth0 192.168.0.2 up&lt;br /&gt;
&lt;br /&gt;
Disattivare l'interfaccia di rete eth0&lt;br /&gt;
 # ifconfig eth0 down&lt;br /&gt;
&lt;br /&gt;
Assegnare manualmente un gateway (es.: 192.168.0.1) alla rete&lt;br /&gt;
 # route add default gw 192.168.0.1&lt;br /&gt;
&lt;br /&gt;
Ovviamente occorrerà aggiungere un server DNS al file &amp;lt;code&amp;gt;/etc/resolv.conf&amp;lt;/code&amp;gt; per la risoluzione degli indirizzi.&lt;br /&gt;
&lt;br /&gt;
=== iproute2 ===&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|+ Conversione comandi da net-tools a iproute2&lt;br /&gt;
|-&lt;br /&gt;
! net-tools&lt;br /&gt;
! iproute2&lt;br /&gt;
! Note&lt;br /&gt;
|-&lt;br /&gt;
| ifconfig&lt;br /&gt;
| ip addr, ip link&lt;br /&gt;
| Address and link configuration&lt;br /&gt;
|-&lt;br /&gt;
| route&lt;br /&gt;
| ip route&lt;br /&gt;
| Routing tables&lt;br /&gt;
|-&lt;br /&gt;
| arp&lt;br /&gt;
| ip neigh&lt;br /&gt;
| Neighbors&lt;br /&gt;
|-&lt;br /&gt;
| iptunnel&lt;br /&gt;
| ip tunnel&lt;br /&gt;
| Tunnels&lt;br /&gt;
|-&lt;br /&gt;
| nameif, ifrename&lt;br /&gt;
| ip link set name&lt;br /&gt;
| Rename network interfaces&lt;br /&gt;
|-&lt;br /&gt;
| ipmaddr&lt;br /&gt;
| ip maddr&lt;br /&gt;
| Multicast&lt;br /&gt;
|-&lt;br /&gt;
| netstat&lt;br /&gt;
| ss, ip route&lt;br /&gt;
| Show various networking statistics&lt;br /&gt;
|-&lt;br /&gt;
| brctl&lt;br /&gt;
| bridge&lt;br /&gt;
| Handle bridge addresses and devices&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Elencare gli indirizzi IP: &lt;br /&gt;
 # ip addr&lt;br /&gt;
&lt;br /&gt;
Mostra le informazioni di una specifica interfaccia di rete&lt;br /&gt;
 # ip addr show ''eth0''&lt;br /&gt;
&lt;br /&gt;
Aggiungere un indirizzo all'interfaccia eth0:&lt;br /&gt;
 # ip addr add 192.0.2.10/24 dev eth0&lt;br /&gt;
&lt;br /&gt;
Cancellare un indirizzo associato all'interfaccia eth0:&lt;br /&gt;
 # ip addr delete 192.0.2.10/24 dev eth0&lt;br /&gt;
&lt;br /&gt;
Attivare l'interfaccia eth0:&lt;br /&gt;
 # ip link set dev eth0 up&lt;br /&gt;
&lt;br /&gt;
Disattivare l'interfaccia eth0:&lt;br /&gt;
 # ip link set dev eth0 down&lt;br /&gt;
&lt;br /&gt;
Svuotare la cache arp per tutte le interfacce:&lt;br /&gt;
 # ip neigh flush all&lt;br /&gt;
&lt;br /&gt;
Aggiungere una rotta che passa per gateway 192.0.2.1&lt;br /&gt;
 # ip route add default via 192.0.2.1&lt;br /&gt;
&lt;br /&gt;
Aggiungere una rotta che passa per gateway 192.168.2.1 per l'interfaccia 10.0.2.0&lt;br /&gt;
 # ip route add 10.0.2.1/24 via 192.168.0.1 dev enp0s3&lt;br /&gt;
&lt;br /&gt;
Aggiungere una rotta che passa per gateway 192.168.2.1 per l'interfaccia 10.0.2.0&lt;br /&gt;
 # ip route del 10.0.2.0/24 via 192.168.0.1 dev enp0s3 &lt;br /&gt;
&lt;br /&gt;
Mostrare la tabella di routing&lt;br /&gt;
 # ip route show&lt;br /&gt;
&lt;br /&gt;
== Systemd-networkd==&lt;br /&gt;
'''[https://wiki.archlinux.org/title/Systemd-networkd systemd-networkd'''] è un demone, parte di systemd, che gestisce la configurazione della rete.&lt;br /&gt;
&lt;br /&gt;
=== Esempi di configurazione ===&lt;br /&gt;
Per prima cosa sarà necessario abilitare il servizio&lt;br /&gt;
 # systemctl enable --now systemd-networkd.service&lt;br /&gt;
 # systemctl enable --now systemd-resolved.service&lt;br /&gt;
 # ln -rsf /run/systemd/resolve/stub-resolv.conf /etc/resolv.conf&lt;br /&gt;
&lt;br /&gt;
==== DHCP ====&lt;br /&gt;
/etc/systemd/network/20-wired.network&lt;br /&gt;
 [Match]&lt;br /&gt;
 Name=enp1s0&lt;br /&gt;
 [Network]&lt;br /&gt;
 DHCP=yes&lt;br /&gt;
&lt;br /&gt;
==== IP statico ====&lt;br /&gt;
/etc/systemd/network/20-wired.network&lt;br /&gt;
 [Match]&lt;br /&gt;
 Name=enp1s0&lt;br /&gt;
 [Network]&lt;br /&gt;
 Address=10.1.10.9/24&lt;br /&gt;
 Gateway=10.1.10.1&lt;br /&gt;
 DNS=10.1.10.1&lt;br /&gt;
&lt;br /&gt;
==== Wireless adapter ====&lt;br /&gt;
Per potersi connettere a connessioni WIFI è necessario installare e configurare un'ulteriore applicazione dedicata come '''iwd''' o '''wpa_supplicant''' per l'autenticazione alla rete.&lt;br /&gt;
&lt;br /&gt;
/etc/systemd/network/25-wireless.network&lt;br /&gt;
 [Match]&lt;br /&gt;
 Name=wlp2s0&lt;br /&gt;
 [Network]&lt;br /&gt;
 DHCP=yes&lt;br /&gt;
 IgnoreCarrierLoss=3s&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Rinominare l'interfaccia di rete ====&lt;br /&gt;
Invece che impostare una regola su udev è possibile usare un file di testo .link nel seguente modo&lt;br /&gt;
&lt;br /&gt;
/etc/systemd/network/''10-ethusb0.link''&lt;br /&gt;
 [Match]&lt;br /&gt;
 MACAddress=12:34:56:78:90:ab&lt;br /&gt;
 [Link]&lt;br /&gt;
 Description=USB to Ethernet Adapter&lt;br /&gt;
 Name=''ethusb0''&lt;br /&gt;
&lt;br /&gt;
== Wifi ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! [https://wiki.archlinux.org/title/Network_configuration/Wireless#Utilities Programmi] !! [https://wireless.wiki.kernel.org/en/developers/documentation/wireless-extensions WEXT] !! [https://wireless.wiki.kernel.org/en/developers/documentation/nl80211 nl80211] !! WEP !! WPA&lt;br /&gt;
|-&lt;br /&gt;
| [https://hewlettpackard.github.io/wireless-tools/Tools.html wireless_tools] || Sì || No || Sì || No&lt;br /&gt;
|-&lt;br /&gt;
| [https://wireless.wiki.kernel.org/en/users/documentation/iw iw] || No || Sì || Sì || No&lt;br /&gt;
|-&lt;br /&gt;
| [https://wiki.archlinux.org/title/wpa_supplicant wpa_supplicant] || Sì || Sì || No || Sì&lt;br /&gt;
|-&lt;br /&gt;
| [https://wiki.archlinux.org/title/Iwd iwd]/iwgtk || No || Sì || No || Sì&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== NetworkManager ==&lt;br /&gt;
[https://networkmanager.dev/ NetworkManager] è una utility che si è imposta come standard per la configurazione della reti Linux (LAN e Wifi)&lt;br /&gt;
&lt;br /&gt;
Si compone di un demone, un'interfaccia da riga di comando [https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/9/html/configuring_basic_system_settings/assembly_configuring-and-managing-network-access_configuring-basic-system-settings#configuring-a-static-ethernet-connection-using-nmcli_assembly_configuring-and-managing-network-access (nmcli)] ed un'interfaccia di configurazione basata su un menu testuale ([https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/9/html/configuring_basic_system_settings/assembly_configuring-and-managing-network-access_configuring-basic-system-settings nmtui]). &lt;br /&gt;
&lt;br /&gt;
I principali desktop enviroment come GNOME e KDE Plasma possiedono una utility grafica che consente loro di configurare graficamente le reti basandosi su NetworkManager.&lt;br /&gt;
&lt;br /&gt;
=== Installazione ===&lt;br /&gt;
 # pacman -S networkmanager &lt;br /&gt;
 # systemctl enable NetworkManager&lt;br /&gt;
 # systemctl start NetworkManager&lt;br /&gt;
&lt;br /&gt;
==== Configurazione  ====&lt;br /&gt;
* 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 &amp;lt;code&amp;gt;nmtui&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Per chi dovesse prediligere la configurazione manuale: &amp;lt;code&amp;gt;nmcli&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Per impedire a Network Manager di gestire una certa interfaccia di rete è sufficiente aggiungere il suo MAC Address al file di configurazione &amp;lt;code&amp;gt;/etc/NetworkManager/NetworkManager.conf&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 [main]&lt;br /&gt;
 plugins=keyfile&lt;br /&gt;
 [keyfile]&lt;br /&gt;
 unmanaged-devices=mac:''00:25:21:73:90:72''&lt;br /&gt;
&lt;br /&gt;
=== Alternative ===&lt;br /&gt;
* [https://wiki.archlinux.org/title/ConnMan ConnMan]&lt;br /&gt;
&lt;br /&gt;
== Condividere la connessione ==&lt;br /&gt;
&lt;br /&gt;
=== Abilitazione del forwarding dei pacchetti ===&lt;br /&gt;
&lt;br /&gt;
 $ sudo echo 1 &amp;gt; /proc/sys/net/ipv4/ip_forward&lt;br /&gt;
&lt;br /&gt;
Per rendere il forwarding definitivo editare il file ''/etc/sysctl.conf'' modificando come segue il parametro net.ipv4.ip_forward:&lt;br /&gt;
&lt;br /&gt;
 net.ipv4.ip_forward = 1&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Mascheramento dei pacchetti ===&lt;br /&gt;
&lt;br /&gt;
 $ sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE&lt;br /&gt;
&lt;br /&gt;
''eth0'' non è un parametro fisso, identifica l'interfaccia con la quale il PC si connette ad Internet&lt;br /&gt;
&lt;br /&gt;
Per applicare automaticamente tale regola ad ogni riavvio&lt;br /&gt;
 # iptables-save &amp;gt; /etc/iptables.ipv4.nat&lt;br /&gt;
 # iptables-restore &amp;lt; /etc/iptables.ipv4.nat&lt;br /&gt;
&lt;br /&gt;
=== Moduli kernel ===&lt;br /&gt;
&lt;br /&gt;
Assicurarsi che siano caricati i seguenti moduli:&lt;br /&gt;
 # modprobe ip_tables&lt;br /&gt;
 # modprobe ip_conntrack&lt;br /&gt;
 # modprobe iptable_nat&lt;br /&gt;
 # modprobe ipt_MASQUERADE&lt;br /&gt;
&lt;br /&gt;
=== Condivisione tramite rete ethernet ===&lt;br /&gt;
&lt;br /&gt;
==== Configurazione scheda di rete interna ====&lt;br /&gt;
&lt;br /&gt;
Assegnare un IP statico alla scheda ethernet con la quale si vuol condividere la connessione.&lt;br /&gt;
&lt;br /&gt;
 # ifconfig eth1 192.168.5.1 netmask 255.255.255.0 up&lt;br /&gt;
&lt;br /&gt;
Per rendere tale configurazione permanente sarà necessario editare il file ''/etc/network/interfaces'' ed aggiungere la seguente configurazione&lt;br /&gt;
&lt;br /&gt;
 auto eth1&lt;br /&gt;
 iface eth1 inet static&lt;br /&gt;
 address 192.168.5.1&lt;br /&gt;
 netmask 255.255.255.0&lt;br /&gt;
&lt;br /&gt;
=== Condivisione tramite rete WI-FI ===&lt;br /&gt;
&lt;br /&gt;
==== Configurazione scheda wireless ====&lt;br /&gt;
&lt;br /&gt;
Se non si desidera cifrare la rete e proteggerla con una password sarà sufficiente eseguire questi comandi.&lt;br /&gt;
&lt;br /&gt;
 # iwconfig wlan0 mode Master&lt;br /&gt;
 # iwconfig wlan0 ESSID ReteGOLEM&lt;br /&gt;
 # iwconfig wlan0 enc off&lt;br /&gt;
 # ifconfig wlan0 192.168.5.1 netmask 255.255.255.0 up&lt;br /&gt;
&lt;br /&gt;
Per rendere tale configurazione permanente sarà necessario creare un file del tipo ''/etc/systemd/network/20-wifi.network'' ed aggiungere la seguente configurazione&lt;br /&gt;
 [Match]&lt;br /&gt;
 Name=wlan0&lt;br /&gt;
 [Network]&lt;br /&gt;
 Address=192.168.5.1/24&lt;br /&gt;
&lt;br /&gt;
Naturalmente occorrerà che sia attivato il demone systemd-networkd&lt;br /&gt;
 # systemctl enable --now systemd-networkd.service&lt;br /&gt;
&lt;br /&gt;
===== Proteggere la connessione WI-FI =====&lt;br /&gt;
&lt;br /&gt;
Installare il programma hostapd&lt;br /&gt;
 # pacman -S hostapd&lt;br /&gt;
&lt;br /&gt;
Configurare hostapd modificando ''/etc/hostapd/hostapd.conf''&lt;br /&gt;
&lt;br /&gt;
 # Interfaccia di rete&lt;br /&gt;
 interface=wlan0&lt;br /&gt;
 # Driver della scheda wifi usata (non tutte le schede sono supportate)&lt;br /&gt;
 driver=nl80211&lt;br /&gt;
 # Nome della rete (SSID)&lt;br /&gt;
 ssid=ReteGOLEM&lt;br /&gt;
 hw_mode=g&lt;br /&gt;
 # Canale di trasmissione&lt;br /&gt;
 channel=6&lt;br /&gt;
 macaddr_acl=0&lt;br /&gt;
 # Righe per la protezione&lt;br /&gt;
 auth_algs=1&lt;br /&gt;
 ignore_broadcast_ssid=0&lt;br /&gt;
 wpa=2&lt;br /&gt;
 # Password del wifi&lt;br /&gt;
 wpa_passphrase=password&lt;br /&gt;
 wpa_key_mgmt=WPA-PSK&lt;br /&gt;
 wpa_pairwise=TKIP&lt;br /&gt;
 rsn_pairwise=CCMP&lt;br /&gt;
&lt;br /&gt;
Editare il file ''/etc/default/hostapd'' per impostare ''hostapd.conf'' come file di configurazione predefinito, modificando la riga DAEMON_CONF=&amp;quot;&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
 DAEMON_CONF=&amp;quot;/etc/hostapd/hostapd.conf&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== Assegnazione automatica degli IP ai client ===&lt;br /&gt;
&lt;br /&gt;
 # pacman -S dhcp&lt;br /&gt;
&lt;br /&gt;
Editare ''/etc/dhcpd.conf'' aggiungendo la configurazione per la rete interna (es.: eth1 o wlan0):&lt;br /&gt;
&lt;br /&gt;
 subnet 192.168.5.0 netmask 255.255.255.0 {&lt;br /&gt;
 range 192.168.5.100  192.168.5.200;&lt;br /&gt;
 option domain-name-servers 8.8.8.8;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== VPN ==&lt;br /&gt;
=== OpenVPN ===&lt;br /&gt;
https://wiki.archlinux.org/title/OpenVPN&lt;br /&gt;
&lt;br /&gt;
===L2TP/IPsec VPN===&lt;br /&gt;
https://wiki.archlinux.org/title/Openswan_L2TP/IPsec_VPN_client_setup&lt;br /&gt;
&lt;br /&gt;
= Container =&lt;br /&gt;
== Toolbox==&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
=== Immagini ===&lt;br /&gt;
* [https://github.com/toolbx-images/images https://github.com/toolbx-images/images] Immagini di container delle principali distribuzioni&lt;br /&gt;
&lt;br /&gt;
=== Comandi ===&lt;br /&gt;
Creare un container&lt;br /&gt;
 $ toolbox create -i quay.io/toolbx-images/rhel-toolbox:9.1 -c redhat&lt;br /&gt;
&lt;br /&gt;
Entrare in un container&lt;br /&gt;
 $ toolbox enter redhat&lt;br /&gt;
 &lt;br /&gt;
Fermare un container&lt;br /&gt;
 $ podman stop nome_macchina&lt;br /&gt;
&lt;br /&gt;
Rimuovere un container&lt;br /&gt;
 $ toolbox rm -f redhat&lt;br /&gt;
&lt;br /&gt;
Rimuovere un container e la sua immagine&lt;br /&gt;
 $ toolbox rmi redhat &lt;br /&gt;
&lt;br /&gt;
Esaminare la lista dei container e delle immagini disponibili&lt;br /&gt;
 $ toolbox list &lt;br /&gt;
&lt;br /&gt;
Permettere agli utenti non root di utilizzare i container&lt;br /&gt;
 $ sudo sh -c 'echo &amp;quot;username:100000:65536&amp;quot; &amp;gt;&amp;gt; /etc/subuid'&lt;br /&gt;
 $ sudo sh -c 'echo &amp;quot;username:100000:65536&amp;quot; &amp;gt;&amp;gt; /etc/subgid'&lt;br /&gt;
&lt;br /&gt;
Abilitare l'host al forwarding di X11 per le applicazioni che richiedono Xorg&lt;br /&gt;
 # xhost +&lt;br /&gt;
&lt;br /&gt;
Eseguire un comandi all'interno di un container&lt;br /&gt;
 $ toolbox run -c redhat libreoffice&lt;br /&gt;
&lt;br /&gt;
== LXC ==&lt;br /&gt;
[https://wiki.archlinux.org/title/Linux_Containers Linux Container] (LXC) permette di virtualizzare uno o più container Linux su un singolo host LXC, gestendone virtualmente RAM, CPU, socket e rete.&lt;br /&gt;
&lt;br /&gt;
È estremamente utile quando si ha bisogno di isolare dei servizi dal sistema host: es.: server web, imap, smtp...&lt;br /&gt;
&lt;br /&gt;
=== Installazione ===&lt;br /&gt;
Installare LXC&lt;br /&gt;
 # pacman -S lxc lxc-templates lxcfs lxd&lt;br /&gt;
&lt;br /&gt;
=== Comandi ===&lt;br /&gt;
Lista dei container installati&lt;br /&gt;
 lxc-ls -f &lt;br /&gt;
&lt;br /&gt;
Installare un container scegliendo l'immagine dalla lista di quelli disponibili&lt;br /&gt;
 lxc-create -n playtime -t download&lt;br /&gt;
&lt;br /&gt;
Se sapete già di quale container avete bisogno sarà possibile scaricarlo direttamente&lt;br /&gt;
 lxc-create -n playtime -t download -- --dist archlinux --release current --arch amd64&lt;br /&gt;
&lt;br /&gt;
Far partire il container chiamato ''debian''&lt;br /&gt;
 lxc-start debian &lt;br /&gt;
&lt;br /&gt;
Entrare dentro il container chiamato ''debian''&lt;br /&gt;
 lxc-attach debian&lt;br /&gt;
&lt;br /&gt;
Fermare l'esecuzione del container chiamato ''debian''&lt;br /&gt;
 lxc-stop debian&lt;br /&gt;
&lt;br /&gt;
Rimuovere il container chiamato ''debian''&lt;br /&gt;
 lxc-destroy debian &lt;br /&gt;
&lt;br /&gt;
Eseguire un comando dentro il container chiamato ''debian''&lt;br /&gt;
 lxc-attach --name debian nano&lt;br /&gt;
&lt;br /&gt;
=== Rete Bridge ===&lt;br /&gt;
Nel caso si debbano usare servizi da tenere esposti su Internet potrebbe essere conveniente utilizzare una rete bridge piuttosto che NAT.&lt;br /&gt;
&lt;br /&gt;
[https://wiki.debian.org/LXC/SimpleBridge Configurazione] rete bridge.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Docker ==&lt;br /&gt;
Abilitare ed avviare docker&lt;br /&gt;
 # systemctl enable --now docker&lt;br /&gt;
&lt;br /&gt;
Cercare il container desiderato&lt;br /&gt;
 # docker search &amp;quot;xxx&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Scaricare l'immagine desiderata&lt;br /&gt;
 # docker pull xxxx:latest&lt;br /&gt;
&lt;br /&gt;
Visualizzare le immagini scaricate&lt;br /&gt;
 # docker images&lt;br /&gt;
&lt;br /&gt;
Visualizzare i docker creati&lt;br /&gt;
 # docker ps -a&lt;br /&gt;
&lt;br /&gt;
Avviare docker&lt;br /&gt;
 # docker start nome_docker&lt;br /&gt;
&lt;br /&gt;
Entrare nel docker&lt;br /&gt;
 # docker attach nome_docker&lt;br /&gt;
&lt;br /&gt;
Copiare un file dal sistema host al docker&lt;br /&gt;
 # docker cp esempio.txt nome_docker: /esempio.txt&lt;br /&gt;
&lt;br /&gt;
Copiare un file dal docker.&lt;br /&gt;
 # docker cp container-id:/path/filename.txt ~/Desktop/filename.txt&lt;br /&gt;
&lt;br /&gt;
Rimuovere un docker&lt;br /&gt;
 # docker rm nome_docker&lt;br /&gt;
&lt;br /&gt;
Rimuovere tutti i docker&lt;br /&gt;
 # docker container stop $(docker container ls -aq)&lt;br /&gt;
 # docker system prune -a --volumes&lt;br /&gt;
&lt;br /&gt;
Avviare automaticamente un docker (da testare)&lt;br /&gt;
 # docker run --restart=always --name nome_docker&lt;br /&gt;
&lt;br /&gt;
Creare script di avvio ''docker-webserver''.service&lt;br /&gt;
 [Unit]&lt;br /&gt;
 Description=Some service&lt;br /&gt;
 Requires=docker.service&lt;br /&gt;
 After=docker.service&lt;br /&gt;
 [Service]&lt;br /&gt;
 Restart=always&lt;br /&gt;
 ExecStart=/usr/bin/docker start -a container_name&lt;br /&gt;
 ExecStop=/usr/bin/docker stop -t 2 container_name&lt;br /&gt;
 [Install]&lt;br /&gt;
 WantedBy=multi-user.target&lt;br /&gt;
&lt;br /&gt;
* [https://wiki.archlinux.org/title/docker Arch Linux Docker WIKI]&lt;br /&gt;
&lt;br /&gt;
== [https://wiki.archlinux.org/title/systemd-nspawn systemd-nspawn] ==&lt;br /&gt;
&lt;br /&gt;
= Fonti software alternative =&lt;br /&gt;
Nella rara eventualità che si necessiti di un programma non presente né nei repository ufficiali, né su [https://aur.archlinux.org/ AUR] è possibile optare per una delle seguenti opzioni.&lt;br /&gt;
&lt;br /&gt;
== AppImage ==&lt;br /&gt;
Scaricate qualsiasi pacchetto disponibile su [https://appimage.github.io/ appimage.github.io] e rendetelo eseguibile.&lt;br /&gt;
&lt;br /&gt;
 $ chmod a+x ''nomeprogramma''.AppImage&lt;br /&gt;
&lt;br /&gt;
Non resta che eseguirlo col seguente comando o con un doppio click&lt;br /&gt;
 $ ./''nomeprogramma''.AppImage&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Flatpak ==&lt;br /&gt;
Concepito per essere una sorta di '''Google Play Store''' per GNOME, è possibile installare programmi provenienti da [https://flathub.org/home flatpak] utilizzando i normali gestori grafici di pacchetti basati su packagekit come ''Gnome Software'' o ''Discover di Plasma''.&lt;br /&gt;
&lt;br /&gt;
Installazione&lt;br /&gt;
 # pacman -S flatpak&lt;br /&gt;
&lt;br /&gt;
Abilitazione del repository ufficiale del progetto (software di terze parti potrebbe richiedere di aggiungere altri repository)&lt;br /&gt;
 # flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo&lt;br /&gt;
&lt;br /&gt;
Elenca i repository disponibili.&lt;br /&gt;
 $ flatpak remotes&lt;br /&gt;
&lt;br /&gt;
Installa un'applicazione (es.: libreoffice)&lt;br /&gt;
 $ flatpak install flathub org.libreoffice.LibreOffice&lt;br /&gt;
&lt;br /&gt;
Esegue un'applicazione (es.: libreoffice)&lt;br /&gt;
 $ flatpak run org.libreoffice.LibreOffice&lt;br /&gt;
&lt;br /&gt;
Disinstalla un'applicazione mantenendo i dati.&lt;br /&gt;
 $ flatpak uninstall &amp;lt;nome app&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Disinstalla un'applicazione eliminando i dati (nella home utente .var/app/).&lt;br /&gt;
 $ flatpak uninstall &amp;lt;nome app&amp;gt; --delete-data&lt;br /&gt;
&lt;br /&gt;
Elimina i dati di tutte le applicazioni disinstallate (nella home utente .var/app/).&lt;br /&gt;
 $ flatpak uninstall --delete-data&lt;br /&gt;
&lt;br /&gt;
Disinstalla tutte le applicazioni flatpak installate sul sistema.&lt;br /&gt;
 $ flatpak uninstall --all&lt;br /&gt;
	&lt;br /&gt;
Cerca ed esegue aggiornamenti per le applicazioni installate.&lt;br /&gt;
 $ flatpak update&lt;br /&gt;
&lt;br /&gt;
Aggiorna una singola applicazione.&lt;br /&gt;
 $ flatpak update &amp;lt;nome app&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Elenca tutte le applicazioni flatpak installate sul sistema.&lt;br /&gt;
 $ flatpak list --app&lt;br /&gt;
	&lt;br /&gt;
Elenca i runtime installati.&lt;br /&gt;
 $ flatpak list --runtime&lt;br /&gt;
	&lt;br /&gt;
Visualizzare le informazioni sulle applicazioni in esecuzione.&lt;br /&gt;
 $ flatpak ps&lt;br /&gt;
	&lt;br /&gt;
Termina un'applicazione bloccata o danneggiata (l'ID dell'istanza si può ottenere dal comando precedente).&lt;br /&gt;
 $ flatpak kill &amp;lt;id istanza&amp;gt;&lt;br /&gt;
	&lt;br /&gt;
Tenta la riparare dei pacchetti danneggiati. Necessita dei privilegi di amministrazione. &lt;br /&gt;
 $ flatpak repair&lt;br /&gt;
&lt;br /&gt;
== Nix ==&lt;br /&gt;
[https://nixos.wiki/wiki/Nix_package_manager Nix package manager] è il gestore di pacchetti utilizzato su [https://nixos.org/ NixOS]. È possibile però utilizzarlo su qualsiasi distribuzione Linux affiancandone il gestore di pacchetti predefinito.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
[https://nixos.org/manual/nixpkgs/stable/ Guida completa]&lt;br /&gt;
&lt;br /&gt;
=== Installazione ===&lt;br /&gt;
[https://nixos.org/download.html#nix-install-linux Guida ufficiale]&lt;br /&gt;
&lt;br /&gt;
'''Single-user installation'''&lt;br /&gt;
 $ sudo install -d -m755 -o $(id -u) -g $(id -g) /nix&lt;br /&gt;
 $ sh &amp;lt;(curl -L https://nixos.org/nix/install) --no-daemon&lt;br /&gt;
&lt;br /&gt;
Aggiungere la riga seguente al &amp;lt;code&amp;gt;.bashrc&amp;lt;/code&amp;gt; o al file di configurazione della vostra shell per poter utilizzare i comandi Nix&lt;br /&gt;
 $ source $HOME/.nix-profile/etc/profile.d/nix.sh&lt;br /&gt;
&lt;br /&gt;
=== Canali ===&lt;br /&gt;
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''.&lt;br /&gt;
&lt;br /&gt;
Ecco di seguito i comandi principali per gestire questi canali&lt;br /&gt;
&lt;br /&gt;
Lista dei canali configurati&lt;br /&gt;
 $ nix-channel --list&lt;br /&gt;
&lt;br /&gt;
Aggiungere il canale principale (''nixos'')&lt;br /&gt;
 $ nix-channel --add https://nixos.org/channels/channel-name nixos&lt;br /&gt;
&lt;br /&gt;
Aggiungere altri canali&lt;br /&gt;
 $ nix-channel --add https://some.channel/url my-alias&lt;br /&gt;
&lt;br /&gt;
Rimuovere un canale&lt;br /&gt;
 $ nix-channel --remove channel-alias&lt;br /&gt;
&lt;br /&gt;
Aggiornare un canale&lt;br /&gt;
 $ nix-channel --update channel-alias&lt;br /&gt;
&lt;br /&gt;
Aggiornare tutti i canali&lt;br /&gt;
 $ nix-channel --update&lt;br /&gt;
&lt;br /&gt;
=== Comandi ===&lt;br /&gt;
Cercare un pacchetto&lt;br /&gt;
 $ nix search nixpkgs ''packagename''&lt;br /&gt;
&lt;br /&gt;
Installare un pacchetto&lt;br /&gt;
 $ nix-env -iA ''packagename''&lt;br /&gt;
&lt;br /&gt;
Vedere i pacchetti installati&lt;br /&gt;
 $ nix-env -q&lt;br /&gt;
&lt;br /&gt;
Disinstallare un pacchetto&lt;br /&gt;
 $ nix-env -e ''packagename''&lt;br /&gt;
&lt;br /&gt;
Aggiornare tutti i pacchetti&lt;br /&gt;
 $ nix-env -u&lt;br /&gt;
&lt;br /&gt;
== Snap ==&lt;br /&gt;
È 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. &lt;br /&gt;
&lt;br /&gt;
Su Arch è disponibile su AUR: [https://aur.archlinux.org/packages/snapd snapd]&lt;br /&gt;
&lt;br /&gt;
=== Installazione ===&lt;br /&gt;
Installare ed abilitare Snap&lt;br /&gt;
 $ [https://aur.archlinux.org/packages/yay yay] -S snapd&lt;br /&gt;
 $ sudo ln -s /var/lib/snapd/snap /snap&lt;br /&gt;
 $ sudo systemctl start snapd.service&lt;br /&gt;
 $ sudo systemctl enable snapd.service&lt;br /&gt;
&lt;br /&gt;
=== Comandi ===&lt;br /&gt;
Cercare un programma&lt;br /&gt;
 $ snap find ''nomeprogramma''&lt;br /&gt;
&lt;br /&gt;
Installare un programma&lt;br /&gt;
 $ sudo snap install ''nomeprogramma''&lt;br /&gt;
&lt;br /&gt;
Rimuovere un programma&lt;br /&gt;
 $ sudo snap remove ''nomeprogramma''&lt;br /&gt;
&lt;br /&gt;
Vedere i programmi installati &lt;br /&gt;
 $ snap list&lt;br /&gt;
&lt;br /&gt;
Rimuovere una determinata versione di un programma&lt;br /&gt;
 $ sudo snap remove ''nomeprogramma'' --revision&lt;br /&gt;
&lt;br /&gt;
Aggiornare manualmente i pacchetti snap&lt;br /&gt;
 $ sudo snap refresh&lt;br /&gt;
&lt;br /&gt;
= GPG =&lt;br /&gt;
[http://it.wikipedia.org/wiki/GNU_Privacy_Guard GNU Privacy Guard (GnuPG o GPG)] è un programma libero pensato per fornire un'alternativa opensource al [http://it.wikipedia.org/wiki/Pretty_Good_Privacy Pretty Good Privacy (PGP)].&lt;br /&gt;
Nel PGP sono usate sia la crittografia asimmetrica (a chiave pubblica) che quella simmetrica.&lt;br /&gt;
La chiave pubblica del destinatario serve al mittente unicamente per cifrare la chiave comune per un algoritmo di crittografia simmetrica che sarà usata per cifrare il testo in chiaro del messaggio.&lt;br /&gt;
Un destinatario decifra un messaggio protetto da GPG usando la chiave di sessione con l'algoritmo simmetrico. Tale chiave di sessione è inclusa nel messaggio in maniera criptata ed è decifrata usando la chiave privata del destinatario.&lt;br /&gt;
L'utilizzo di due cifrature oltre che a velocizzare l'esecuzione del programma (la cifratura a chiave simmetrica è molto più veloce di quella asimmetrica) permette di poter cifrare uno stesso messaggio per più destinatari.&lt;br /&gt;
&lt;br /&gt;
== Generare una chiave ==&lt;br /&gt;
 $ gpg --gen-key&lt;br /&gt;
&lt;br /&gt;
Controllare che la chiave sia stata correttamente creata&lt;br /&gt;
 $ gpg --list-keys&lt;br /&gt;
&lt;br /&gt;
== Certificato di revoca ==&lt;br /&gt;
Il certificato di revoca serve per invalidare la chiave nel caso in cui questa venga compromessa.&lt;br /&gt;
Chiunque sia in possesso del certificato di revoca può revocare la chiave corrispondente, per cui è bene tenerlo in un posto sicuro.&lt;br /&gt;
Poiché, nel momento in cui si ha bisogno del certificato di revoca, potremmo non essere più in grado di generarlo, conviene generarlo subito dopo la creazione della chiave, e prima di iniziare a utilizzarla pubblicamente.&lt;br /&gt;
 $ gpg --output certificato-di-revoca.asc --gen-revoke ''ID''&lt;br /&gt;
dove &amp;lt;code&amp;gt;ID&amp;lt;/code&amp;gt; è dato dalle ultime 8 cifre dell'impronta (fingerprint) della chiave.&lt;br /&gt;
&lt;br /&gt;
== Utilizzo pratico ==&lt;br /&gt;
=== Criptare un documento ===&lt;br /&gt;
 $ gpg -o file1.ext.gpg -e -r UserID file1.ext&lt;br /&gt;
&lt;br /&gt;
Esempio:&lt;br /&gt;
 $ gpg -o tesi.odt.gpg -e -r spookyh@gmail.com tesi.odt&lt;br /&gt;
&lt;br /&gt;
=== Decriptare un documento ===&lt;br /&gt;
 $ gpg -o file1.ext -d file1.gpg&lt;br /&gt;
&lt;br /&gt;
=== Firmare un documento ===&lt;br /&gt;
Il mittente può usare PGP per ''firmare'' un messaggio con l'algoritmo di firma RSA o Digital Signature Algorithm (DSA). Per fare ciò viene calcolato un hash (message digest) dal testo in chiaro e successivamente da questo hash è creata la [http://it.wikipedia.org/wiki/Firma_digitale firma digitale] usando la chiave privata del mittente.&lt;br /&gt;
 $ gpg -o file1.ext.sig -s file1.ext&lt;br /&gt;
&lt;br /&gt;
=== Verificare un documento ===&lt;br /&gt;
 $ gpg --verify file1.sig&lt;br /&gt;
&lt;br /&gt;
== Importare ed esportare chiavi (locali) ==&lt;br /&gt;
Importare una chiave (pubblica)&lt;br /&gt;
 $ gpg --import chiave.asc (o .txt)&lt;br /&gt;
&lt;br /&gt;
Esportare la propria chiave pubblica&lt;br /&gt;
 $ gpg -a -o chiave_pubblica.asc --export&lt;br /&gt;
&lt;br /&gt;
=== Esportare la propria chiave privata ===&lt;br /&gt;
{{Note&lt;br /&gt;
|type=attention&lt;br /&gt;
|text= La chiave privata può essere utilizzata per impersonare la vostra identità, '''NON''' inviarla mai a '''nessuno''', ed esportala solo per effettuarne backup, naturalmente da custodire in un luogo sicuro.}}&lt;br /&gt;
 $ gpg --armor --export-secret-keys &amp;lt;ID&amp;gt; &amp;gt; secret-key.gpg.asc&lt;br /&gt;
&lt;br /&gt;
== Condividere le chiavi pubbliche ==&lt;br /&gt;
Inviare la chiave ad un keyserver:&lt;br /&gt;
 $ gpg --keyserver keyserver.linux.it --send-key &amp;lt;ID&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Importare una chiave da un keyserver:&lt;br /&gt;
 $ gpg --keyserver keyserver.linux.it --recv-keys &amp;lt;ID&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se ci fidiamo del proprietario e vogliamo mostrare pubblicamente la nostra fiducia, possiamo firmare la chiave appena importata e esportare la firma su un keyserver (vedere sezioni successive).&lt;br /&gt;
&lt;br /&gt;
=== Keyserver ===&lt;br /&gt;
Quando si carica una chiave su un keyserver, poi questo la condivide con gli altri keyserver che fanno parte dello stesso circuito.&lt;br /&gt;
Non esiste un'entità centralizzata o un circuito di riferimento (per scelta di design), e, a volte, questo può generare confusione nell'utilizzatore.&lt;br /&gt;
Inoltre, alcuni keyserver potrebbero non essere sempre accessibili.&lt;br /&gt;
&lt;br /&gt;
Tra i keyserver più noti:&lt;br /&gt;
* keys.openpgp.org&lt;br /&gt;
* keyserver.ubuntu.com&lt;br /&gt;
* keys.gnupg.net&lt;br /&gt;
* pgp.surfnet.nl&lt;br /&gt;
* pgp.circl.lu&lt;br /&gt;
* pgp.mit.edu&lt;br /&gt;
&lt;br /&gt;
== Editare una chiave ==&lt;br /&gt;
Per fare operazioni e modifiche dobbiamo &amp;quot;editare&amp;quot; le chiavi, aprendo l'editor interattivo:&lt;br /&gt;
 $ gpg --edit-key &amp;lt;ID&amp;gt;&lt;br /&gt;
'''NB: Prima di uscire dall'editor, ricordarsi di salvare, altrimenti le modifiche vanno perdute'''&lt;br /&gt;
&lt;br /&gt;
* firmare&lt;br /&gt;
 &amp;gt; sign&lt;br /&gt;
* cambiare i valori di fiducia &lt;br /&gt;
 &amp;gt; trust&lt;br /&gt;
* vedere la fingerprint&lt;br /&gt;
 &amp;gt; fpr&lt;br /&gt;
* cambiare la data di scadenza&lt;br /&gt;
 &amp;gt; expire&lt;br /&gt;
* cambiare la password&lt;br /&gt;
 &amp;gt; passwd&lt;br /&gt;
* firmare localmente in modo non esportabile&lt;br /&gt;
 &amp;gt; lsign&lt;br /&gt;
* sempre '''ricordarsi di salvare'''&lt;br /&gt;
 &amp;gt; save&lt;br /&gt;
* oppure uscire&lt;br /&gt;
 &amp;gt; quit&lt;br /&gt;
&lt;br /&gt;
Digitare &amp;lt;code&amp;gt;help&amp;lt;/code&amp;gt; per una lista esaustiva.&lt;br /&gt;
&lt;br /&gt;
Tutte le modifiche da rendere pubbliche vanno inviate ad un keyserver.&lt;br /&gt;
&lt;br /&gt;
== Revocare una chiave ==&lt;br /&gt;
Avendo già il certificato di revoca:&lt;br /&gt;
 $ gpg --import certificato-di-revoca.asc&lt;br /&gt;
 $ gpg --keyserver pgp.surfnet.nl --send-key ''ID''&lt;br /&gt;
&lt;br /&gt;
== Gestione delle chiavi ==&lt;br /&gt;
Controllare il database delle chiavi: questo comando mostra tutte le chiavi che abbiamo con molte informazioni.&lt;br /&gt;
 $ gpg --list-keys --with-colons&lt;br /&gt;
&lt;br /&gt;
Fornisce tutti i valori di fiducia assegnati alle varie chiavi. (Informazioni private)&lt;br /&gt;
 $ gpg --list-ownertrust&lt;br /&gt;
&lt;br /&gt;
== Controllo firme ==&lt;br /&gt;
 $ gpg --check-sigs&lt;br /&gt;
 $ gpg --list-sigs&lt;br /&gt;
&lt;br /&gt;
== Esportare le chiavi altrui ==&lt;br /&gt;
Abbiamo importato e firmato la chiave di &amp;lt;ID&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Rimandiamola al proprietario:&lt;br /&gt;
 $ gpg --armor -export -o firma.sig &amp;lt;ID&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Questo comando crea un file di nome ''firma.sig'' nella directory corrente, che contiene la chiave firmata.&lt;br /&gt;
Spedire al proprietario ''firma.sig''.&lt;br /&gt;
&lt;br /&gt;
Chi riceve la propria chiave firmata da altri può decidere inserirla nel proprio portachiavi, con&lt;br /&gt;
 $ gpg --import firma.sig&lt;br /&gt;
&lt;br /&gt;
Si aggiungono al portachiavi le nuove firme ma anche i nuovi ID che il mittente ha sulla sua chiave, col rispettivo valore di fiducia. Firmare le chiavi degli altri implica dar loro fiducia, e, spesso, anche aver verificato la loro identità in maniera sicura.&lt;br /&gt;
Se non ci fidiamo, non firmiamo. Se si firmano a caso tutte le chiavi che capitano a tiro, si perde la reputazione che si ha presso gli altri partecipanti della rete. Se vogliamo fare un uso pubblico di questa fiducia reciproca possiamo mandare la nostra  chiave, contenente la nuova firma, al keyserver:&lt;br /&gt;
 $ gpg --keyserver pgp.circl.lu --send-key &amp;lt;ID mia chiave&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Periodicamente occorre aggiornare il proprio portachiavi digitale, così da venire a conoscenza delle modifiche sulle chiavi degli altri.&lt;br /&gt;
 $ gpg --keyserver pgp.circl.lu --refresh-keys&lt;br /&gt;
&lt;br /&gt;
== Rete di fiducia ==&lt;br /&gt;
Una chiave importata può essere firmata con un certo grado di fiducia. Possiamo rispedirla al proprietario o caricare la firma su un keyserver, e se lui la importa nel suo portachiavi, avrà la propria chiave firmata da noi. Ognuno può quindi aggiungere le firme dei conoscenti alla propria chiave, che a loro volta hanno firme di altri.&lt;br /&gt;
&lt;br /&gt;
== GUI ==&lt;br /&gt;
Esistono vari programmi a interfaccia grafica:&lt;br /&gt;
* ''Seahorse'', per gestire le chiavi e i certificati, comprese quelle ssh, per un ambiente GTK&lt;br /&gt;
* ''KGPG'', per gestire le chiavi e i certificati, comprese quelle ssh, per un ambiente QT&lt;br /&gt;
* ''Pinentry'' (anche da riga di comando) si ricorda la password della chiave per il tempo impostato (default 5 minuti)&lt;br /&gt;
&lt;br /&gt;
= Systemd =&lt;br /&gt;
 systemd-timesyncd — system time synchronization across the network;&lt;br /&gt;
 systemd/Journal — system logging&lt;br /&gt;
 systemd/Timers — alternative to cron&lt;br /&gt;
&lt;br /&gt;
= Link Utili =&lt;br /&gt;
&lt;br /&gt;
[https://wiki.archlinux.org/ ArchWiki]&lt;br /&gt;
&lt;br /&gt;
[https://wwwcdf.pd.infn.it/AppuntiLinux/a21.htm Appunti Linux]&lt;br /&gt;
&lt;br /&gt;
[https://www.linuxfromscratch.org/lfs/downloads/stable/LFS-BOOK-11.3-NOCHUNKS.html LFS-BOOK]&lt;br /&gt;
&lt;br /&gt;
[[Category: Howto]]&lt;/div&gt;</summary>
		<author><name>$pooky Hunter</name></author>
	</entry>
	<entry>
		<id>https://wiki.golem.linux.it/index.php?title=Appunti_Arch_Linux&amp;diff=9657</id>
		<title>Appunti Arch Linux</title>
		<link rel="alternate" type="text/html" href="https://wiki.golem.linux.it/index.php?title=Appunti_Arch_Linux&amp;diff=9657"/>
		<updated>2025-04-01T16:32:14Z</updated>

		<summary type="html">&lt;p&gt;$pooky Hunter: /* FScrypt */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[https://archlinux.org/ Arch Linux] è una distribuzione Linux leggera e veloce; ma la cui installazione, configurazione e amministrazione avviene prevalentemente da terminale attraverso la modifica manuale di file di configurazione testuali.&lt;br /&gt;
&lt;br /&gt;
Fornisce, seguendo un modello di distribuzione detto &amp;quot;rolling-release&amp;quot;, l'ultima versione stabile della maggior parte del software opensource disponibile per Linux. Dato che è in costante aggiornamento non richiede periodici passaggi da una versione stabile alla successiva. Il lato negativo è che aggiornamenti di componenti importanti come quelli di: '''kernel, boot loader, driver video, librerie...''' potrebbero determinare problemi tali da rendere il sistema inutilizzabile. Accorgimenti come lo snapshot periodico del filesystem riescono, per fortuna, a contrastare l'impatto di questi inconvenienti.&lt;br /&gt;
&lt;br /&gt;
= Installazione =&lt;br /&gt;
== Guida ==&lt;br /&gt;
[https://wiki.archlinux.org/title/Installation_guide Guida ufficiale]&lt;br /&gt;
&lt;br /&gt;
== Supporti ==&lt;br /&gt;
* ISO ufficiale [http://archlinux.mirror.garr.it/archlinux/iso/latest/archlinux-x86_64.iso archlinux-x86_64.iso]&lt;br /&gt;
&lt;br /&gt;
* ISO con supporto per lo [https://openzfs.github.io/openzfs-docs/Getting%20Started/Arch%20Linux/index.html ZFS] [https://archzfs.leibelt.de/media/data/archlinux-archzfs-linux.iso archlinux-archzfs-linux.iso]&lt;br /&gt;
&lt;br /&gt;
* ISO con installer grafico Calamares [https://sourceforge.net/projects/alci/files/alci-iso/ ALCI]&lt;br /&gt;
&lt;br /&gt;
* ISO live CD/USB con interfaccia Xfce, utile per operazioni di ripristino o installazione [https://www.system-rescue.org/Download/ SystemRescue]:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== ISO personalizzata ==&lt;br /&gt;
Con '''archiso''' è possibile creare un'immagine con pacchetti aggiuntivi rispetto a quelli contenuti nella versione ufficiale. &lt;br /&gt;
&lt;br /&gt;
 # pacman -S archiso&lt;br /&gt;
&lt;br /&gt;
Copiare il contenuto del pacchetto in una directory di lavoro, es.: ''/root/media''&lt;br /&gt;
 # cp -r /usr/share/archiso/configs/releng /root/media&lt;br /&gt;
&lt;br /&gt;
Se volessimo aggiungere il supporto ad un pacchetto non contenuto nei repository ufficiali come, per esempio, lo ZFS occorrerebbe:&lt;br /&gt;
&lt;br /&gt;
* Importare la chiave pubblica del suo repository&lt;br /&gt;
 # pacman-key -r DDF7DB817396A49B2A2723F7403BD972F75D9D76&lt;br /&gt;
 # pacman-key --lsign-key DDF7DB817396A49B2A2723F7403BD972F75D9D76&lt;br /&gt;
 &lt;br /&gt;
* Modificare le seguenti righe al file '''pacman.conf''' di archiso per aggiungere il repository&lt;br /&gt;
 [archzfs]&lt;br /&gt;
 SigLevel = Never&lt;br /&gt;
 Server = https://archzfs.com/$repo/$arch&lt;br /&gt;
&lt;br /&gt;
* Aggiungere le seguenti righe al file ''packages.x86_64'' per aggiungere i pacchetti che ci interessa installare&lt;br /&gt;
 zfs-utils&lt;br /&gt;
 zfs-dkms&lt;br /&gt;
 net-tools&lt;br /&gt;
&lt;br /&gt;
* Se volessimo creare una versione live di una macchina, comprensiva di tutti i suoi pacchetti, potremmo semplicemente aggiungerli al file ''packages.x86_64'' &lt;br /&gt;
&lt;br /&gt;
 # pacman -Qq &amp;gt;&amp;gt; ''/path/packages.x86_64''&lt;br /&gt;
&lt;br /&gt;
* Lanciare lo script per creare l'ISO&lt;br /&gt;
 # ./build.sh -v&lt;br /&gt;
L'immagine sarà generata nella directory /root/media/out&lt;br /&gt;
&lt;br /&gt;
== Preparazione del disco ==&lt;br /&gt;
Su Linux si può scegliere (salvo casi estremamente [https://wiki.archlinux.org/title/partitioning#Partitionless_disk particolari]) tra due [https://unix.stackexchange.com/questions/289389/what-are-the-differences-between-the-various-partition-tables tipi] di tabella delle partizioni&lt;br /&gt;
&lt;br /&gt;
* msdos (Master Boot Record o più semplicemente MBR)&lt;br /&gt;
&lt;br /&gt;
* GPT (GUID Partition Table)&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
I casi in cui è preferibile utilizzare la tabella ''msdos'' sono:&lt;br /&gt;
&lt;br /&gt;
* dual-boot con Windows (32-bit o 64-bit) con la scheda madre in modalità Legacy BIOS&lt;br /&gt;
* in schede madri molto datate il BIOS potrebbe non supportare lo schema GPT (esiste comunque un [https://wiki.archlinux.org/title/partitioning#Tricking_old_BIOS_into_booting_from_GPT trucco] per aggirare l'ostacolo)&lt;br /&gt;
&lt;br /&gt;
[https://wiki.archlinux.org/title/partitioning#Choosing_between_GPT_and_MBR Vantaggi] di GPT su MBR:&lt;br /&gt;
&lt;br /&gt;
* offre un sistema di denominazione delle partizioni indipendente dal filesystem (PARTLABEL, PARTUUID)&lt;br /&gt;
&lt;br /&gt;
* 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.&lt;br /&gt;
&lt;br /&gt;
* la grandezza massima di un disco è di 2 ZiB, mentre su MBR 2 TiB&lt;br /&gt;
&lt;br /&gt;
* permette di fare a meno della tradizionale partizione di /boot con i filesystem BTRFS e ZFS in modo da semplificare la gestione degli snapshot.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Schede madri BIOS ===&lt;br /&gt;
Creare due partizioni.&lt;br /&gt;
&lt;br /&gt;
# '''[http://en.wikipedia.org/wiki/BIOS_Boot_partition 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.&lt;br /&gt;
# '''Linux filesystem''': successivamente da formattare col filesystem di nostra scelta: BTRFS, ZFS, ext4, XFS, JFS.&lt;br /&gt;
&lt;br /&gt;
==== Partizionamento ====&lt;br /&gt;
Col seguente comando verrà creata la partizione BIOS GRUB (EF02) a partire dal 1MB, della grandezza di 64MB, 8GB per la SWAP ed il resto del disco resterà disponibile per il filesystem di Linux.&lt;br /&gt;
&lt;br /&gt;
Se avete più dischi da utilizzare in raid, questa operazione andrà ripetuta per ciascun disco.&lt;br /&gt;
&lt;br /&gt;
 # sgdisk \&lt;br /&gt;
 --new=1:2048:133120 --typecode=1:EF02 --change-name=1:&amp;quot;GRUB&amp;quot; \&lt;br /&gt;
 --new=2:0:+8000M ---typecode 2:8200 --change-name=2:&amp;quot;SWAP&amp;quot; \&lt;br /&gt;
 --largest-new=3 --typecode=3:8300 --change-name=3:&amp;quot;ROOT&amp;quot; /dev/sda&lt;br /&gt;
&lt;br /&gt;
La seconda partizione dovrà poi essere formattata con uno dei filesystem supportati da Linux (ext4, btrfs, xfs...)&lt;br /&gt;
 # mkfs.btrfs /dev/sda3&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Schede madri UEFI ===&lt;br /&gt;
Creare due partizioni.&lt;br /&gt;
&lt;br /&gt;
# '''EFI''': è una partizione in formato FAT32 necessaria per l'avvio dei sistemi operativi nei PC con schede madri UEFI.&lt;br /&gt;
# '''Linux filesystem''': successivamente da formattare col filesystem di nostra scelta: BTRFS, ZFS, ext4, XFS, JFS.&lt;br /&gt;
&lt;br /&gt;
==== Partizionamento ====&lt;br /&gt;
Col seguente comando verrà creata la partizione EFI (EF00) a partire dal 1MB, della grandezza di 512MB, 8Gb per la SWAP ed il resto del disco per il filesystem di Linux.&lt;br /&gt;
 # sgdisk \&lt;br /&gt;
 --new=1:2048:1064960 --typecode=1:EF00 --change-name=1:&amp;quot;efi&amp;quot; \&lt;br /&gt;
 --new=2:0:+8000M ---typecode 2:8200 --change-name=2:&amp;quot;SWAP&amp;quot; \&lt;br /&gt;
 --largest-new=3 --typecode=3:8300 --change-name=3:&amp;quot;ROOT&amp;quot; /dev/sda&lt;br /&gt;
&lt;br /&gt;
La partizione '''EFI''' dovrà poi essere formattata in FAT32&lt;br /&gt;
 # mkfs.vfat -F 32 /dev/sda1&lt;br /&gt;
&lt;br /&gt;
La seconda partizione dovrà poi essere formattata con uno dei filesystem supportati da Linux (ext4, btrfs, xfs...)&lt;br /&gt;
 # mkfs.btrfs /dev/sda3&lt;br /&gt;
&lt;br /&gt;
== Montaggio del filesystem ==&lt;br /&gt;
Formattazione ed attivazione della SWAP&lt;br /&gt;
 # mkswap /dev/sda2&lt;br /&gt;
 # swapon /dev/sda2&lt;br /&gt;
&lt;br /&gt;
Montaggio del filesystem di ROOT nei sistemi BIOS&lt;br /&gt;
 # mount /dev/sda3 /mnt&lt;br /&gt;
&lt;br /&gt;
Montaggio del filesystem di ROOT nei sistemi UEFI&lt;br /&gt;
 # mount /dev/sda3 /mnt&lt;br /&gt;
 # mount --mkdir /dev/sda1 /mnt/boot&lt;br /&gt;
&lt;br /&gt;
== Pacchetti base ==&lt;br /&gt;
Per l'installazione di base si consigliano i seguenti meta-pacchetti&lt;br /&gt;
 # pacstrap -K /mnt base base-devel linux linux-headers linux-firmware&lt;br /&gt;
&lt;br /&gt;
== Configurazione ==&lt;br /&gt;
Creazione del file fstab&lt;br /&gt;
 # genfstab -U /mnt &amp;gt;&amp;gt; /mnt/etc/fstab&lt;br /&gt;
&lt;br /&gt;
Chroot nel nuovo sistema&lt;br /&gt;
 # arch-chroot /mnt&lt;br /&gt;
&lt;br /&gt;
Timezone&lt;br /&gt;
 # ln -sf /usr/share/zoneinfo/Europe/Rome /etc/localtime&lt;br /&gt;
&lt;br /&gt;
Editare il file &amp;lt;code&amp;gt;/etc/systemd/timesyncd.conf&amp;lt;/code&amp;gt; ed abilitare il servizio per la sincronizzazione automatica dell'orario&lt;br /&gt;
 # systemctl enable systemd-timesyncd.service&lt;br /&gt;
&lt;br /&gt;
Editare il file &amp;lt;code&amp;gt;/etc/locale.gen&amp;lt;/code&amp;gt; e togliere il commento agli argomenti che interessano, es.: ''en_US.UTF-8'', ''it_IT.UTF-8''. E successivamente generare la localizzazione eseguendo&lt;br /&gt;
 # locale-gen&lt;br /&gt;
&lt;br /&gt;
Configurare la lingua che vogliamo usare per il nostro sistema editando il file &amp;lt;code&amp;gt;/etc/locale.conf&amp;lt;/code&amp;gt; oppure lanciando il comando&lt;br /&gt;
 # localectl set-locale LANG=en_US.UTF-8&lt;br /&gt;
&lt;br /&gt;
Selezioniamo il layout della tastiera editando il file &amp;lt;code&amp;gt;/etc/vconsole.conf&amp;lt;/code&amp;gt;&lt;br /&gt;
 # echo &amp;quot;KEYMAP=it&amp;quot; &amp;gt;&amp;gt; /etc/vconsole.conf&lt;br /&gt;
&lt;br /&gt;
Scegliere un home host (es.: ''archstar'')&lt;br /&gt;
 # echo '''archstar''' &amp;gt;&amp;gt; /etc/hostname&lt;br /&gt;
&lt;br /&gt;
Impostare una password per l'utente root&lt;br /&gt;
 # passwd&lt;br /&gt;
&lt;br /&gt;
Installare e configurare il bootloader&lt;br /&gt;
&lt;br /&gt;
= Filesystem =&lt;br /&gt;
Su Linux, a seconda di ciò di cui abbiamo bisogno, è possibile scegliere tra numerosi filesystem. Le principali opzioni sono le seguenti:&lt;br /&gt;
&lt;br /&gt;
- BTRFS: supporta nativamente sottovolumi, snapshot ed il raid 0, 1 e 5; ma non la crittografia.&lt;br /&gt;
&lt;br /&gt;
- EXT4: il FS storico di Linux, evoluzione di ext3. Supporta nativamente la crittografia dei dati, ma non gestisce autonomamente né RAID, né snapshots. &lt;br /&gt;
&lt;br /&gt;
- [https://openzfs.github.io/openzfs-docs/index.html 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 &amp;quot;write-atomicity&amp;quot; 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.&lt;br /&gt;
&lt;br /&gt;
- [https://access.redhat.com/documentation/it-it/red_hat_enterprise_linux/9/html-single/configuring_and_managing_logical_volumes/index 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.&lt;br /&gt;
&lt;br /&gt;
== IMG ==&lt;br /&gt;
Per fare esperimenti con i filesystem può essere utile creare dei file immagine&lt;br /&gt;
&lt;br /&gt;
Creare un file immagine di una specifica grandezza (es.: 10G)&lt;br /&gt;
 $ truncate -s 10g disk.img&lt;br /&gt;
&lt;br /&gt;
Formattarlo con un filesystem (es.: btrfs)&lt;br /&gt;
 $ mkfs.btrfs disk.img&lt;br /&gt;
&lt;br /&gt;
Montarlo in loop&lt;br /&gt;
 $ sudo mount -o loop disk.img /mnt&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== BTRFS ==&lt;br /&gt;
Creazione del filesystem&lt;br /&gt;
 # mkfs.btrfs ''/dev/partizione''&lt;br /&gt;
&lt;br /&gt;
Montaggio del filesystem&lt;br /&gt;
 # mount -o compress=lzo ''/dev/partizione'' ''/mnt/punto_mount''&lt;br /&gt;
&lt;br /&gt;
(Si consiglia di usare l'opzione di compressione del filesystem per migliorare le performance ed ottimizzare l'utilizzo dello spazio)&lt;br /&gt;
&lt;br /&gt;
===Subvolumi===&lt;br /&gt;
* Creare un subvolume&lt;br /&gt;
 # btrfs subvolume create ''subvolume''&lt;br /&gt;
&lt;br /&gt;
* Controllare i subvolumi presenti sul sistema&lt;br /&gt;
 # btrfs subvolume list /&lt;br /&gt;
&lt;br /&gt;
In una tipica installazione Ubuntu avremo un output di questo tipo&lt;br /&gt;
 ID 257 gen 9755 top level 5 path @&lt;br /&gt;
 ID 292 gen 7624 top level 5 path @home&lt;br /&gt;
&lt;br /&gt;
''@'' è il nome del subvolume contenente la root '''/''' del filesystem&lt;br /&gt;
''@home'' è il nome del subvolume della /home&lt;br /&gt;
&lt;br /&gt;
=== Montaggio di un subvolume ===&lt;br /&gt;
 # mount -o subvol=''subvolume'' ''/dev/partizione'' ''/mnt/punto_mount''&lt;br /&gt;
&lt;br /&gt;
=== fstab ===&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Ecco un '''/etc/fstab''' di esempio&lt;br /&gt;
 LABEL=ROOT       /             btrfs     defaults,compress=lzo,subvol=@            0 0&lt;br /&gt;
 LABEL=ROOT       /home         btrfs     defaults,compress=lzo,subvol=@home        0 0&lt;br /&gt;
 LABEL=ROOT       /mnt/btrfs    btrfs     defaults,noauto,subvolid=0,compress=lzo   0 0&lt;br /&gt;
&lt;br /&gt;
Montando la partizione con label ROOT su /mnt/btrfs saranno visibili tutti i subvolumi.&lt;br /&gt;
&lt;br /&gt;
===Conversione da Ext3/4 a Btrfs===&lt;br /&gt;
 # btrfs-convert /dev/partizione&lt;br /&gt;
&lt;br /&gt;
Automaticamente è creata una snapshot contenente il vecchio filesystem (''/ext2_saved'')&lt;br /&gt;
&lt;br /&gt;
In caso di problemi può essere montata col comando&lt;br /&gt;
 # mount -t btrfs -o subvol=ext2_saved /dev/xxx /ext2_saved&lt;br /&gt;
 # mount -t ext3 -o loop,ro /ext2_saved/image /ext3&lt;br /&gt;
&lt;br /&gt;
Se tutto è andato a buon fine può invece essere eliminata&lt;br /&gt;
 # btrfs subvolume delete /ext2_saved&lt;br /&gt;
&lt;br /&gt;
===Riparazione di un filesystem danneggiato===&lt;br /&gt;
* Direttamente sul filesystem montato&lt;br /&gt;
 # btrfs scrub start -B /dev/partizione&lt;br /&gt;
o anche direttamente sulla root&lt;br /&gt;
 # btrfs scrub start -B /&lt;br /&gt;
&lt;br /&gt;
* Sul disco smontato&lt;br /&gt;
 # btrfs check --repair /dev/partizione&lt;br /&gt;
&lt;br /&gt;
Per non dover ricorrere ad un dispositivo di avvio alternativo, dato che btrfs-check non può essere utilizzato su un filesystem montato, si consiglia di aggiungerlo al ramdisk modificando in questo mmodo il file &amp;lt;code&amp;gt;/etc/mkinitcpio.conf&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 BINARIES=(btrfs)&lt;br /&gt;
&lt;br /&gt;
=== Quote ===&lt;br /&gt;
Per limitare le dimensioni di un subvolume è possibile abilitare la gestione delle '''quote'''.&lt;br /&gt;
&lt;br /&gt;
Utilizzare il seguente comando su un filesystem btrfs appena creato e privo di subvolumi&lt;br /&gt;
 # btrfs quota enable volume&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
 # btrfs subvolume list &amp;lt;path&amp;gt; | cut -d' ' -f2 | xargs -I{} -n1 btrfs qgroup create 0/{} &amp;lt;path&amp;gt;&lt;br /&gt;
 # btrfs quota rescan &amp;lt;path&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Assegnare una quota limite ad un subvolume&lt;br /&gt;
 # btrfs qgroup limit size /volume/subvolume&lt;br /&gt;
&lt;br /&gt;
Es.:&lt;br /&gt;
 # btrfs qgroup limit 20g /mnt/@&lt;br /&gt;
 # btrfs qgroup limit 100g /mnt/@home&lt;br /&gt;
&lt;br /&gt;
Scoprire la quantità di spazio utilizzata da un subvolume&lt;br /&gt;
 # btrfs qgroup show &amp;lt;path&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Snapshots ===&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
* Effettuare uno snapshot&lt;br /&gt;
 # btrfs subvolume snapshot @ rootsnap&lt;br /&gt;
&lt;br /&gt;
Nell'esempio abbiamo effettuato il ''backup'' del filesystem di root e l'abbiamo chiamato ''rootsnap''&lt;br /&gt;
&lt;br /&gt;
* Montare un subvolume/snapshot&lt;br /&gt;
 # mount -t btrfs -o subvol=rootsnap /dev/partizione /mnt/snapshot&lt;br /&gt;
&lt;br /&gt;
* Cancellare un subvolume/snapshot&lt;br /&gt;
 # btrfs subvolume delete rootsnap&lt;br /&gt;
&lt;br /&gt;
==== Integrazione con GRUB ====&lt;br /&gt;
È possibile caricare automaticamente all'avvio gli snapshot dei filesystem di root attraverso il programma '''grub-btrfs'''&lt;br /&gt;
 # pacman -S grub-btrfs&lt;br /&gt;
&lt;br /&gt;
Con questo tool ogni volta che rigeneriamo il file di configurazione di GRUB il sistema rileva eventuali sottovolumi avviabili (snapshot comprese) aggiungendoli al menu di avvio del GRUB &lt;br /&gt;
 # grub-mkconfig -o /boot/grub/grub.cfg&lt;br /&gt;
&lt;br /&gt;
=== Backup ===&lt;br /&gt;
Le snapshot possono essere salvate su un disco esterno, a patto che questo abbia un file system btrfs.&lt;br /&gt;
L'operazione di trasferimento può essere effettuata soltanto su snapshot in sola lettura.&lt;br /&gt;
Si ipotizza che il proprio disco di sistema sia montato in /mnt/btrfs ed il disco esterno in /mnt/ext&lt;br /&gt;
&lt;br /&gt;
* Creare la snapshot in sola lettura (opzione -r) oppure impostare il flag di sola lettura ad una snapshot già fatta&lt;br /&gt;
 btrfs subvolume snapshot -r @root @root-yymmdd-ro&lt;br /&gt;
 btrfs property set /mnt/btrfs/@root-yymmdd-ro ro true&lt;br /&gt;
* Trasferire la snapshot sul disco esterno.&lt;br /&gt;
 btrfs send /mnt/btrfs/@root-yymmdd-ro | btrfs receive /mnt/ext&lt;br /&gt;
* Quando necessario, ripristinare la snapshot&lt;br /&gt;
 btrfs send /mnt/ext/@root-yymmdd-ro | btrfs receive /mnt/btrfs/&lt;br /&gt;
* Eventualmente, rinominare la snapshot e reimpostare i privilegi di scrittura&lt;br /&gt;
 mv /mnt/ext/{@root-yymmdd-ro,@root}&lt;br /&gt;
 btrfs property set /mnt/btrfs/@root ro false&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== RAID ===&lt;br /&gt;
Tipologie e caratteristiche dei raid [https://btrfs.readthedocs.io/en/latest/mkfs.btrfs.html#profiles supportati]&lt;br /&gt;
&lt;br /&gt;
Confronto tra varie tecnologie di [https://blog.jenningsga.com/status-of-storage-within-linux/ raid]&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! RAID !! Redundancy Copies !! Redundancy Parity !! Redundancy Striping !! Spazio utilizzato !! Min/max n. dischi&lt;br /&gt;
|-&lt;br /&gt;
| disco singolo || 1 || || || 100% || 1/N&lt;br /&gt;
|- &lt;br /&gt;
| RAID0 || 1 || || 1 to N || 100% || 1/N&lt;br /&gt;
|- &lt;br /&gt;
| RAID1 || 2 || || ||  50% || 2/N &lt;br /&gt;
|- &lt;br /&gt;
| RAID1C3 || 3 || || || 33% || 3/N&lt;br /&gt;
|- &lt;br /&gt;
| RAID1C4 || 4 || || || 25% || 4/N&lt;br /&gt;
|-&lt;br /&gt;
| RAID10 || 2 || || 1 to N || 50%  || 2/N&lt;br /&gt;
|-&lt;br /&gt;
| RAID5 || 1 || 1 || 2 to N-1 || (N-1)/N || 2/N&lt;br /&gt;
|-&lt;br /&gt;
| RAID6 || 1 || 2 || 3 to N-2 || (N-2)/N || 3/N&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====RAID 0====&lt;br /&gt;
 # mkfs.btrfs -d raid0 /dev/sda1 /dev/sdb1&lt;br /&gt;
&lt;br /&gt;
===== Montare il raid =====&lt;br /&gt;
 # mount /dev/sda1 /mnt&lt;br /&gt;
&lt;br /&gt;
(È equivalente a ''mount /dev/sdb1 /mnt'', il sistema riconosce che è presente un raid 0 e provvede al montaggio corretto dei dischi)&lt;br /&gt;
&lt;br /&gt;
Verifica del montaggio&lt;br /&gt;
 # btrfs filesystem show /mnt&lt;br /&gt;
&lt;br /&gt;
 Label: none  uuid: 4714fca3-bfcb-4130-ad2f-f560f2e12f8e&lt;br /&gt;
 Total devices 2 FS bytes used 27.75GiB&lt;br /&gt;
 devid    1 size 136.72GiB used 17.03GiB path /dev/sda1&lt;br /&gt;
 devid    2 size 136.72GiB used 17.01GiB path /dev/sdb1&lt;br /&gt;
&lt;br /&gt;
=====Aggiungere una partizione=====&lt;br /&gt;
 # btrfs device add /dev/sdc1 /mnt&lt;br /&gt;
&lt;br /&gt;
 # btrfs filesystem show /mnt&lt;br /&gt;
 Label: none  uuid: 4714fca3-bfcb-4130-ad2f-f560f2e12f8e&lt;br /&gt;
 Total devices 3 FS bytes used 27.75GiB&lt;br /&gt;
 devid    1 size 136.72GiB used 17.03GiB path /dev/sda1&lt;br /&gt;
 devid    2 size 136.72GiB used 17.01GiB path /dev/sdb1&lt;br /&gt;
 devid    3 size 136.72GiB used 0.00 path /dev/sdc1&lt;br /&gt;
&lt;br /&gt;
Adesso è necessario effettuare una redistribuzione dei dati sui tre dischi&lt;br /&gt;
 # btrfs balance start -d -m /mnt&lt;br /&gt;
&lt;br /&gt;
Per vedere a che punto del bilanciamento è arrivato il sistema&lt;br /&gt;
 # btrfs fi balance status /&lt;br /&gt;
&lt;br /&gt;
 # btrfs filesystem show /mnt&lt;br /&gt;
 Label: none  uuid: 4714fca3-bfcb-4130-ad2f-f560f2e12f8e&lt;br /&gt;
 Total devices 3 FS bytes used 27.78GiB&lt;br /&gt;
 devid    1 size 136.72GiB used 10.03GiB path /dev/sda1&lt;br /&gt;
 devid    2 size 136.72GiB used 10.03GiB path /dev/sdb1&lt;br /&gt;
 devid    3 size 136.72GiB used 11.00GiB path /dev/sdc1&lt;br /&gt;
&lt;br /&gt;
=====Rimuovere un device=====&lt;br /&gt;
 # btrfs device delete /dev/sdb1 /mnt&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
==== RAID 1 ====&lt;br /&gt;
=====Creazione di un raid1 ex novo===== &lt;br /&gt;
Copiare la tabella delle partizioni da sda a sdb&lt;br /&gt;
 # sfdisk -d /dev/sda | sfdisk /dev/sdb&lt;br /&gt;
&lt;br /&gt;
Creare il raid&lt;br /&gt;
 # mkfs.btrfs -d raid1 -m raid1 /dev/sda1 /dev/sdb1&lt;br /&gt;
&lt;br /&gt;
===== Aggiungere un mirror ad un disco esistente =====&lt;br /&gt;
 # btrfs device add /dev/sdb1 ''/punto_di_mount''&lt;br /&gt;
 # btrfs balance start -dconvert=raid1 -mconvert=raid1 ''/punto_di_mount''&lt;br /&gt;
&lt;br /&gt;
===== GRUB =====&lt;br /&gt;
Se si utilizza un raid1 per la partizione di sistema '''/''' e si vuole rendere Linux avviabile automaticamente anche in caso di danneggiamento o mancanza di uno dei due dischi del raid occorrerà che sul secondo disco sia clonata la partizione EFI o BIOS GRUB (es.: /dev/sda1) e che vi sia installato il bootloader.&lt;br /&gt;
 # dd if=/dev/sda1 of=/dev/sdb1&lt;br /&gt;
 # grub-install /dev/sdb&lt;br /&gt;
&lt;br /&gt;
=====Sostituzione device danneggiato=====&lt;br /&gt;
Verificare qual è il disco che dà dei problemi&lt;br /&gt;
 # mount /dev/sda1 ''/punto_di_mount'' -o degraded&lt;br /&gt;
 # btrfs device stats ''/punto_di_mount''&lt;br /&gt;
 # btrfs filesystem show ''/punto_di_mount''&lt;br /&gt;
 # btrfs device usage ''/punto_di_mount''&lt;br /&gt;
&lt;br /&gt;
Ipotizzando che '''1''' sia l'ID del disco danneggiato secondo i comandi dati in precedenza&lt;br /&gt;
 # btrfs replace start '''1''' /dev/sdc1 ''/punto_di_mount''&lt;br /&gt;
&lt;br /&gt;
Per monitorare lo stato di ripristino del raid&lt;br /&gt;
 # btrfs replace status ''/punto_di_mount''&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
 # btrfs device delete missing /mnt&lt;br /&gt;
&lt;br /&gt;
==== RAID 5 ====&lt;br /&gt;
{{Note&lt;br /&gt;
|type=warning &lt;br /&gt;
| text= '''ATTENZIONE il raid5 su BTRFS è considerato [https://btrfs.readthedocs.io/en/latest/btrfs-man5.html#raid56-status-and-recommended-practices non sicuro] e se ne sconsiglia il suo utilizzo'''&lt;br /&gt;
}}&lt;br /&gt;
==== RAID 1C ====&lt;br /&gt;
&lt;br /&gt;
===== RAID 1C3 =====&lt;br /&gt;
Se si desidera duplicare i dati rispettivamente 2 volte in modo da poter perdere fino a due dischi su 3 senza perdere dati è possibile utilizzare una modalità chiamata raid1c3&lt;br /&gt;
&lt;br /&gt;
Per creare ex novo il raid1c3&lt;br /&gt;
 # mkfs.btrfs -d raid1c3 -m raid1c3 /dev/sda1 /dev/sdb1 /dev/sdc1&lt;br /&gt;
&lt;br /&gt;
Per convertire a raid1c3&lt;br /&gt;
 # btrfs balance start -dconvert=raid1c3 -mconvert=raid1c3 /storage-btrfs/&lt;br /&gt;
&lt;br /&gt;
===== RAID 1C4 =====&lt;br /&gt;
Se si desidera duplicare i dati rispettivamente 3 volte in modo da poter perdere fino a 3 dischi su 4 senza perdere dati è possibile utilizzare una modalità chiamata raid1c4&lt;br /&gt;
&lt;br /&gt;
Per creare ex novo il raid1c3&lt;br /&gt;
 # mkfs.btrfs -d raid1c4 -m raid1c4 /dev/sda1 /dev/sdb1 /dev/sdc1&lt;br /&gt;
&lt;br /&gt;
Per convertire a raid1c4&lt;br /&gt;
 # btrfs balance start -dconvert=raid1c4 -mconvert=raid1c4 /storage-btrfs/&lt;br /&gt;
&lt;br /&gt;
== ZFS ==&lt;br /&gt;
===Installazione di modulo e le utility da AUR===&lt;br /&gt;
 # pacman-key -r F75D9D76&lt;br /&gt;
 # pacman-key --lsign-key F75D9D76&lt;br /&gt;
 $ pikaur -S zfs-utils zfs-dkms&lt;br /&gt;
&lt;br /&gt;
===Installazione di modulo e utility da archzfs===&lt;br /&gt;
Modificare le seguenti righe al file '''pacman.conf''' di archiso&lt;br /&gt;
 [archzfs-testing]&lt;br /&gt;
 Server = https://archzfs.com/$repo/$arch&lt;br /&gt;
&lt;br /&gt;
 # pacman-key -r DDF7DB817396A49B2A2723F7403BD972F75D9D76&lt;br /&gt;
 # pacman-key --lsign-key DDF7DB817396A49B2A2723F7403BD972F75D9D76&lt;br /&gt;
 # pacman -S zfs-utils zfs-linux&lt;br /&gt;
&lt;br /&gt;
===Configurare il FS===&lt;br /&gt;
[https://wiki.archlinux.org/title/ZFS Comandi] per ottenere informazioni utili sul filesystem e sui pool&lt;br /&gt;
 # zfs list -t  all&lt;br /&gt;
 # zpool status&lt;br /&gt;
 # zpool list&lt;br /&gt;
&lt;br /&gt;
Abilitare i vari servizi sul filesystem&lt;br /&gt;
 # systemctl enable zfs-zed.service&lt;br /&gt;
 # systemctl enable zfs-mount.service&lt;br /&gt;
 # systemctl enable zfs-share.service&lt;br /&gt;
 # systemctl enable zfs-import.target&lt;br /&gt;
 # systemctl enable zfs.target&lt;br /&gt;
&lt;br /&gt;
Creare un pool su un disco&lt;br /&gt;
 # zpool create &amp;quot;pool&amp;quot; sda&lt;br /&gt;
&lt;br /&gt;
Creare un pool su una partizione&lt;br /&gt;
 # zpool create &amp;quot;pool&amp;quot; sda2&lt;br /&gt;
&lt;br /&gt;
Importare un pool&lt;br /&gt;
 # zpool import &amp;quot;pool&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Aggiungere pool alla cache per auto-import e mount (abilitare i vari demoni zfs)&lt;br /&gt;
 # zpool set cachefile=/etc/zfs/zpool.cache &amp;quot;pool&amp;quot;&lt;br /&gt;
&lt;br /&gt;
oppure si possono caricare i mountpoint in modalità legacy dall'fstab&lt;br /&gt;
 # zfs create -o mountpoint=legacy ''pool''/directory&lt;br /&gt;
&lt;br /&gt;
Aggiungere la compressione&lt;br /&gt;
 # zfs get compression ''pool''&lt;br /&gt;
 # zfs set compression=lz4 ''pool''&lt;br /&gt;
&lt;br /&gt;
Vedere le proprietà di un ''pool''&lt;br /&gt;
 # zfs get all ''zpool''&lt;br /&gt;
&lt;br /&gt;
==== RAID ====&lt;br /&gt;
Creare un pool in raid0&lt;br /&gt;
 # zpool create &amp;quot;pool&amp;quot; /dev/sdb /dev/sdc&lt;br /&gt;
&lt;br /&gt;
Creare un pool in raid1&lt;br /&gt;
 # zpool create &amp;quot;pool&amp;quot; mirror /dev/sdb /dev/sc&lt;br /&gt;
&lt;br /&gt;
Creare un pool ''raid5'' su più dischi&lt;br /&gt;
 # zpool create &amp;quot;pool&amp;quot; raidz /dev/sdb /dev/sdc /dev/sdd&lt;br /&gt;
&lt;br /&gt;
Creare un pool raid5 su immagini&lt;br /&gt;
 # zpool create &amp;quot;pool&amp;quot; raidz /path/1.img /path/2.img /path/3.img&lt;br /&gt;
&lt;br /&gt;
* [https://docs.oracle.com/cd/E19253-01/819-5461/gbbvf/index.html Sostituire] disco in raid&lt;br /&gt;
&lt;br /&gt;
Rimuovere il disco da sostituire&lt;br /&gt;
 # zpool offline disco1&lt;br /&gt;
&lt;br /&gt;
Inserire il nuovo disco&lt;br /&gt;
 # zpool replace &amp;quot;pool&amp;quot; disco1&lt;br /&gt;
 # zpool online disco1&lt;br /&gt;
&lt;br /&gt;
* Utilizza un altro disco montato al posto di quello danneggiato&lt;br /&gt;
 # zpool replace &amp;quot;pool&amp;quot; disco1 disco2&lt;br /&gt;
&lt;br /&gt;
Aggiungere uno o più dischi ad un pool&lt;br /&gt;
 # zpool add &amp;quot;pool&amp;quot; mirror disco3 disco4&lt;br /&gt;
 # zpool add &amp;quot;pool&amp;quot; raidz disco3 disco4 disco5&lt;br /&gt;
&lt;br /&gt;
Rimuovere disco1 da pool se aggiunto erroneamente&lt;br /&gt;
 # zpool remove &amp;quot;pool&amp;quot; disco1&lt;br /&gt;
&lt;br /&gt;
Controllare lo stato di un pool&lt;br /&gt;
 # zpool status&lt;br /&gt;
&lt;br /&gt;
Correggere eventuali errori&lt;br /&gt;
 # zpool clear ''pool'' ''disco''&lt;br /&gt;
 # zpool scrub  ''pool''&lt;br /&gt;
&lt;br /&gt;
=== Root filesystem ===&lt;br /&gt;
* Guida ufficiale [https://openzfs.github.io/openzfs-docs/Getting%20Started/Arch%20Linux/Root%20on%20ZFS/1-preparation.html Root on ZFS]&lt;br /&gt;
&lt;br /&gt;
Per prima cosa organizzare la tabella delle partizioni del [[#Preparazione_del_disco | disco]]&lt;br /&gt;
&lt;br /&gt;
Formattare la partizione e creare il dataset (senza mountpoint)&lt;br /&gt;
 # zpool create -m none rpool ''sda2''&lt;br /&gt;
 &lt;br /&gt;
Smontare il pool e rimontarlo in modalità legacy &lt;br /&gt;
 # zfs create -o mountpoint=none rpool/ROOT&lt;br /&gt;
 # zfs create -o mountpoint=legacy rpool/ROOT/arch&lt;br /&gt;
 # zpool set bootfs=rpool/ROOT/arch rpool&lt;br /&gt;
 # mount -t zfs rpool/ROOT /mnt&lt;br /&gt;
''rpool'' è il nome che abbiamo voluto dare al volume contenente il filesystem di sistema&lt;br /&gt;
&lt;br /&gt;
NB: se NON si usa il mountpoint in modalità legacy occorrerà impostare &amp;lt;code&amp;gt;canmount=noauto&amp;lt;/code&amp;gt; su tutti i dataset con &amp;lt;code&amp;gt;mountpoint=/&amp;lt;/code&amp;gt; (es.: zfs create -o mountpoint=/ -o canmount=noauto rpool/ROOT/arch) altrimenti il sistema cercherà di eseguirne automaticamente l'automount e fallirà se esistono più filesystem da montare su /&lt;br /&gt;
&lt;br /&gt;
Se volessimo aggiungere altri pool es.:&lt;br /&gt;
 # zfs create rpool/home&lt;br /&gt;
 # zfs create rpool/arch/pkg&lt;br /&gt;
 # zfs create rpool/var&lt;br /&gt;
 # zfs create rpool/srv&lt;br /&gt;
&lt;br /&gt;
Configurare la cache degli zpool&lt;br /&gt;
 # zpool set cachefile=/etc/zfs/rpool.cache rpool &lt;br /&gt;
&lt;br /&gt;
Copiare il file di cache nel sistema dove dovremo eseguire il chroot per l'installazione.&lt;br /&gt;
 # mkdir -p /mnt/etc/zfs&lt;br /&gt;
 # cp /etc/zfs/rpool.cache /mnt/etc/zfs/rpool.cache&lt;br /&gt;
&lt;br /&gt;
Installare il sistema di base&lt;br /&gt;
 # pacstrap -K /mnt base linux linux-firmware zfs-utils zfs-linux&lt;br /&gt;
&lt;br /&gt;
Altri pacchetti consigliati&lt;br /&gt;
 # pacstrap -K /mnt base-devel net-tools networkmanager nano zsh grml-zsh-config busybox&lt;br /&gt;
&lt;br /&gt;
Eseguire il chroot per procedere con l'installazione&lt;br /&gt;
 # arch-chroot /mnt&lt;br /&gt;
&lt;br /&gt;
Configurare il mountpoint su fstab&lt;br /&gt;
/etc/fstab &lt;br /&gt;
 rpool/ROOT/arch      /       zfs         noatime     0 0&lt;br /&gt;
&lt;br /&gt;
Editare il file /etc/mkinitcpio.conf aggiungendo zfs prima del filesystem&lt;br /&gt;
 HOOKS=&amp;quot;base udev autodetect modconf block keyboard zfs filesystems&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Abilitare i servizi per ZFS all'avvio&lt;br /&gt;
 # systemctl enable zfs-zed.service&lt;br /&gt;
 # systemctl enable zfs-mount.service&lt;br /&gt;
 # systemctl enable zfs-share.service&lt;br /&gt;
 # systemctl enable zfs-import.target&lt;br /&gt;
 # systemctl enable zfs.target&lt;br /&gt;
&lt;br /&gt;
Impostare una password di root&lt;br /&gt;
 # passwd&lt;br /&gt;
&lt;br /&gt;
Ricreare il ramdisk col supporto per ZFS&lt;br /&gt;
 # mkinitcpio -p linux&lt;br /&gt;
&lt;br /&gt;
Installare il [[Appunti_Arch_Linux#BOOT_LOADER|Boot Loader]]&lt;br /&gt;
&lt;br /&gt;
Uscire dal chroot e terminazione dell'installazione&lt;br /&gt;
 # exit&lt;br /&gt;
 # zfs unmount -a&lt;br /&gt;
 # cp /etc/zfs/rpool.cache /mnt/etc/zfs/rpool.cache&lt;br /&gt;
 # zpool export rpool&lt;br /&gt;
 # reboot&lt;br /&gt;
&lt;br /&gt;
==== BOOT LOADER ====&lt;br /&gt;
===== ZFSBootMenu =====&lt;br /&gt;
Per gestire a meglio gli snapshot e la clonazione dei pool è consigliabile utilizzare, su PC che supportano UEFI, il boot loader [https://docs.zfsbootmenu.org/en/latest/guides/alpine/uefi.html ZFSBootMenu].&lt;br /&gt;
&lt;br /&gt;
Esportiamo le variabile per configurare il primo disco /dev/sda come disco di avvio&lt;br /&gt;
 # export BOOT_DISK=&amp;quot;/dev/sda&amp;quot;&lt;br /&gt;
 # export BOOT_PART=&amp;quot;1&amp;quot;&lt;br /&gt;
 # export BOOT_DEVICE=&amp;quot;${BOOT_DISK}${BOOT_PART}&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Assicuriamoci che il nostro pool di root sia configurato come avviabile&lt;br /&gt;
 # zpool set bootfs=''rpool/ROOT/'' ''rpool''&lt;br /&gt;
&lt;br /&gt;
Formattiamo sda1 per creare la partizione EFI di boot&lt;br /&gt;
 # mkfs.vfat -F32 &amp;quot;$BOOT_DEVICE&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Aggiungiamola all'fstab e montiamola&lt;br /&gt;
 # cat &amp;lt;&amp;lt; EOF &amp;gt;&amp;gt; /etc/fstab&lt;br /&gt;
 $BOOT_DEVICE /boot/efi vfat defaults 0 0&lt;br /&gt;
 EOF&lt;br /&gt;
&lt;br /&gt;
 # mkdir -p /boot/efi&lt;br /&gt;
 # mount /boot/efi&lt;br /&gt;
&lt;br /&gt;
Scarichiamo ed installiamo il boot loader&lt;br /&gt;
 # mkdir -p /boot/efi/EFI/ZBM&lt;br /&gt;
 # curl -o /boot/efi/EFI/ZBM/VMLINUZ.EFI -L https://get.zfsbootmenu.org/efi&lt;br /&gt;
 # cp /boot/efi/EFI/ZBM/VMLINUZ.EFI /boot/efi/EFI/ZBM/VMLINUZ-BACKUP.EFI&lt;br /&gt;
&lt;br /&gt;
Forziamo zfsbootmenu a montare il nostro dataset con i permessi di scrittura&lt;br /&gt;
 # zfs set org.zfsbootmenu:commandline=&amp;quot;quiet loglevel=4 rw&amp;quot; rpool/ROOT&lt;br /&gt;
&lt;br /&gt;
Installiamo e configuriamo  ''efibootmgr''&lt;br /&gt;
 # pacman -S efibootmgr&lt;br /&gt;
&lt;br /&gt;
 # efibootmgr -c -d &amp;quot;$BOOT_DISK&amp;quot; -p &amp;quot;$BOOT_PART&amp;quot; \&lt;br /&gt;
  -L &amp;quot;ZFSBootMenu (Backup)&amp;quot; \&lt;br /&gt;
  -l \\EFI\\ZBM\\VMLINUZ-BACKUP.EFI&lt;br /&gt;
&lt;br /&gt;
 # efibootmgr -c -d &amp;quot;$BOOT_DISK&amp;quot; -p &amp;quot;$BOOT_PART&amp;quot; \&lt;br /&gt;
  -L &amp;quot;ZFSBootMenu&amp;quot; \&lt;br /&gt;
  -l \\EFI\\ZBM\\VMLINUZ.EFI&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Se si utilizza un pool distribuito su più dischi (RAID1 o RAIDZ) occorrerà installare il bootloader anche sugli altri dispositivi (nel caso del disco /dev/sdb).&lt;br /&gt;
&lt;br /&gt;
 # mount /dev/sdb1 /boot/efi&lt;br /&gt;
 # curl -o /boot/efi/EFI/ZBM/VMLINUZ.EFI -L https://get.zfsbootmenu.org/efi&lt;br /&gt;
 # efibootmgr -c -d &amp;quot;$BOOT_DISK&amp;quot; -p &amp;quot;$BOOT_PART&amp;quot; \&lt;br /&gt;
  -L &amp;quot;ZFSBootMenu sdb&amp;quot; \&lt;br /&gt;
  -l \\EFI\\ZBM\\VMLINUZ.EFI&lt;br /&gt;
&lt;br /&gt;
===== GRUB =====&lt;br /&gt;
Se non ci interessa gestire snapshot o utilizziamo un PC con BIOS è possibile optare per GRUB &lt;br /&gt;
 # pacman -S grub&lt;br /&gt;
 # grub-install /dev/sda&lt;br /&gt;
 (se si usa un pool composto da più dischi es. raidz per il filesystem di root è consigliabile installare grub su tutti i dischi: sda, sdb, sdc, sdd...)&lt;br /&gt;
 # grub-mkconfig -o /boot/grub/grub.cfg&lt;br /&gt;
&lt;br /&gt;
Esempio&lt;br /&gt;
 #Grub entry&lt;br /&gt;
 menuentry 'Arch Linux'{&lt;br /&gt;
       insmod gzio&lt;br /&gt;
       insmod part_gpt&lt;br /&gt;
       insmod zfs&lt;br /&gt;
       set root='hd0,gpt3'&lt;br /&gt;
        echo    'Loading Linux linux ...'&lt;br /&gt;
        linux   /ROOT@/boot/vmlinuz-linux root=ZFS=rpool/ROOT rw  loglevel=3 quiet&lt;br /&gt;
        echo    'Loading initial ramdisk ...'&lt;br /&gt;
        initrd  /ROOT@/boot/initramfs-linux.img&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
=== Snapshot ===&lt;br /&gt;
Snapshot del dataset ROOT&lt;br /&gt;
 # zfs snapshot -r rpool/ROOT''@snapshot-2023-03-07''&lt;br /&gt;
&lt;br /&gt;
Lista degli snapshot presenti&lt;br /&gt;
 # zfs list -t snapshot&lt;br /&gt;
&lt;br /&gt;
Ripristino dello snapshot&lt;br /&gt;
 # zfs rollback rpool''@snapshot-2023-03-07''&lt;br /&gt;
&lt;br /&gt;
Oltre che servire per il ripristino, possono essere montati per esplorarne il contenuto, ma non è possibile modificarlo.&lt;br /&gt;
 # mount -t zfs rpool@''2023-04-11'' /mnt/''snapshot''&lt;br /&gt;
&lt;br /&gt;
Copia locale di un dataset&lt;br /&gt;
 # zfs send -R rpool/ROOT''@snapshot-2023-03-07'' | zfs recv -F rpool/ROOT/backup&lt;br /&gt;
&lt;br /&gt;
Invio via SSH di una snapshot&lt;br /&gt;
 # zfs send -R rpool/ROOT''@snapshot-2023-03-07''| ssh ''user@ip_address'' zfs recv tank/backups/rootzfs&lt;br /&gt;
&lt;br /&gt;
Backup locale di una snapshot&lt;br /&gt;
 # zfs send -R rpool/ROOT@snapshot | gzip &amp;gt; /tmp/zfs_backup.gz&lt;br /&gt;
&lt;br /&gt;
Restore del backup&lt;br /&gt;
 # gzcat /tmp/zfs_backup.gz | zfs recv -F rpool/ROOT&lt;br /&gt;
&lt;br /&gt;
==== Clone ====&lt;br /&gt;
Se vogliamo eseguire operazioni di scrittura su una snapshot occorre effettuare un clone del dataset&lt;br /&gt;
 # zfs snapshot ''rpool/home''@yesterday&lt;br /&gt;
 # zfs clone ''rpool/home''@yesterday rpool/new_home&lt;br /&gt;
&lt;br /&gt;
Per sostituire il filesystem principale col clone&lt;br /&gt;
 # zfs promote rpool/new_home&lt;br /&gt;
&lt;br /&gt;
=== ZFS Cifrato ===&lt;br /&gt;
Creare un dataset cifrato con password&lt;br /&gt;
 # zfs create -o encryption=on -o keyformat=''password'' ''nomepool''/''nomedataset''&lt;br /&gt;
&lt;br /&gt;
Generazione di una chiave di cifratura&lt;br /&gt;
 # dd if=/dev/random of=/path/to/key bs=1 count=32&lt;br /&gt;
&lt;br /&gt;
Creare un dataset cifrato con una chiave di cifratura &lt;br /&gt;
 # zfs create -o encryption=on -o keyformat=raw -o keylocation=''file:///directory/della/chiave'' ''nomepool''/''nomedataset''&lt;br /&gt;
&lt;br /&gt;
Controllare il percorso della chiave per ''nomepool''/''nomedataset''&lt;br /&gt;
 # zfs get keylocation ''nomepool''/''nomedataset''&lt;br /&gt;
&lt;br /&gt;
Cambiare il percorso della chiave&lt;br /&gt;
 # zfs set keylocation=''file:///nuova/directory/della/chiave'' ''nomepool''/''nomedataset''&lt;br /&gt;
&lt;br /&gt;
Caricare manualmente le chiavi di cifratura prima del montaggio&lt;br /&gt;
 # zfs load-key ''nomepool''/''nomedataset'' # carica la chiave del determinato dataset&lt;br /&gt;
 # zfs load-key -a # carica tutte le chiavi del filesystem&lt;br /&gt;
&lt;br /&gt;
==== Unlock con systemd ====&lt;br /&gt;
Creare script per il caricamento delle chiavi all'avvio &lt;br /&gt;
&lt;br /&gt;
* Caricando la password dal keyfile&lt;br /&gt;
''/etc/systemd/system/zfs-loadkey-file.service''&lt;br /&gt;
&lt;br /&gt;
 [Unit]&lt;br /&gt;
 Description=Load ZFS encryption keys&lt;br /&gt;
 DefaultDependencies=no&lt;br /&gt;
 After=zfs-import.target&lt;br /&gt;
 Before=zfs-mount.service&lt;br /&gt;
 [Service]&lt;br /&gt;
 Type=oneshot&lt;br /&gt;
 RemainAfterExit=yes&lt;br /&gt;
 ExecStart=/usr/sbin/zfs load-key -a&lt;br /&gt;
 StandardInput=tty-force&lt;br /&gt;
 [Install]&lt;br /&gt;
 WantedBy=zfs-mount.service&lt;br /&gt;
&lt;br /&gt;
* Digitando la password&lt;br /&gt;
&lt;br /&gt;
''/etc/systemd/system/zfs-load-key@.service''&lt;br /&gt;
 [Unit]&lt;br /&gt;
 Description=Load %I encryption keys&lt;br /&gt;
 Before=systemd-user-sessions.service zfs-mount.service&lt;br /&gt;
 After=zfs-import.target&lt;br /&gt;
 Requires=zfs-import.target&lt;br /&gt;
 DefaultDependencies=no&lt;br /&gt;
 [Service]&lt;br /&gt;
 Type=oneshot&lt;br /&gt;
 RemainAfterExit=yes&lt;br /&gt;
 ExecStart=/bin/sh -c 'until (systemd-ask-password &amp;quot;Encrypted ZFS password for %I&amp;quot; --no-tty | zfs load-key %I); do echo &amp;quot;Try again!&amp;quot;; done'&lt;br /&gt;
 [Install]&lt;br /&gt;
 WantedBy=zfs-mount.service&lt;br /&gt;
&lt;br /&gt;
==== Unlock al login ====&lt;br /&gt;
Impostare il filesystem in modalità legacy così che non sia montato automaticamente all'avvio&lt;br /&gt;
 # zfs set mountpoint=legacy zroot/data/&lt;br /&gt;
&lt;br /&gt;
Modificare il file /etc/fstab&lt;br /&gt;
 zroot/data/         /home           zfs             rw,xattr,posixacl,noauto        0 0&lt;br /&gt;
&lt;br /&gt;
Creare il seguente script: &amp;lt;code&amp;gt;/sbin/mount-zfs-homedir&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 #&lt;br /&gt;
 set -eu&lt;br /&gt;
 # Password is given to us via stdin, save it in a variable for later&lt;br /&gt;
 PASS=$(cat -)&lt;br /&gt;
 #&lt;br /&gt;
 VOLNAME=&amp;quot;zroot/data/home&amp;quot;&lt;br /&gt;
 #&lt;br /&gt;
 # Unlock and mount the volume&lt;br /&gt;
 zfs load-key &amp;quot;$VOLNAME&amp;quot; &amp;lt;&amp;lt;&amp;lt; &amp;quot;$PASS&amp;quot; || continue&lt;br /&gt;
 zfs mount &amp;quot;$VOLNAME&amp;quot; || true # ignore errors&lt;br /&gt;
&lt;br /&gt;
Aggiungere lo script a PAM: /etc/pam.d/system-auth&lt;br /&gt;
&lt;br /&gt;
 auth       optional                    pam_exec.so          expose_authtok /sbin/mount-zfs-homedir&lt;br /&gt;
&lt;br /&gt;
=== Cache ===&lt;br /&gt;
Utilizzare un moderno disco a stato solido può essere una soluzione economica per velocizzare un pool, eventualmente anche raid&lt;br /&gt;
&lt;br /&gt;
 # zpool add -f ''rpool'' cache /dev/sdd1&lt;br /&gt;
 # zpool add -f ''rpool'' log /dev/sdd2&lt;br /&gt;
&lt;br /&gt;
=== Sharing ===&lt;br /&gt;
Non è molto noto, ma ZFS ha integrati dei [https://docs.oracle.com/cd/E36784_01/html/E36835/gayne.html#scrolltoc comandi] per permettere la condivisione del filesystem con altre macchine tramite i protocolli NFS o SMB.&lt;br /&gt;
&lt;br /&gt;
Premessa: occorrerà attivare il server NFS&lt;br /&gt;
 # systemctl start nfs-server.service&lt;br /&gt;
 # systemctl enable nfs-server.service&lt;br /&gt;
&lt;br /&gt;
Condividere tramite NFS l'intero pool ''home''&lt;br /&gt;
 # zfs set share.nfs=on ''pool''/home&lt;br /&gt;
&lt;br /&gt;
Verificare la condivisione&lt;br /&gt;
 # zfs get -r share.nfs ''pool''/home&lt;br /&gt;
 NAME             PROPERTY   VALUE  SOURCE&lt;br /&gt;
 pool/home        share.nfs  on     local&lt;br /&gt;
&lt;br /&gt;
Condividere tramite NFS la directory home dell'utente 1, 2...&lt;br /&gt;
 # zfs create ''pool''/home/'''utente1'''&lt;br /&gt;
 # zfs create ''pool''/home/'''utente2'''&lt;br /&gt;
&lt;br /&gt;
Si possono specificare opzioni di montaggio per i permessi sul mount&lt;br /&gt;
 # zfs set share.nfs.nosuid=on ''pool''/home/'''utente1'''&lt;br /&gt;
 # zfs set share.nfs=on ''pool''/home/'''utente1'''&lt;br /&gt;
&lt;br /&gt;
Condividere una directory con tutta la rete&lt;br /&gt;
 # zfs share -o share.nfs=on -o share.nfs.public=on pool/public%pubshare&lt;br /&gt;
&lt;br /&gt;
Condividere una directory con una parte della rete&lt;br /&gt;
 # zfs set share.nfs='rw=@192.0.10.0/16,rw=@192.0.11.0/24' pool/public%pubshare&lt;br /&gt;
&lt;br /&gt;
Disabilitare temporaneamente una condivisione&lt;br /&gt;
 # zfs unshare pool/home/''nomeshare''&lt;br /&gt;
&lt;br /&gt;
Rimuovere una condivisione&lt;br /&gt;
 # zfs set share.nfs=off pool/''share''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Montare share ===&lt;br /&gt;
Montare il volume pool1 della macchina con IP 192.168.0.2 su /mnt/pool1&lt;br /&gt;
 # mount -t nfs 192.168.0.2:/pool1 /mnt/pool1&lt;br /&gt;
&lt;br /&gt;
Aggiungere la seguente riga al file '''/etc/fstab''' per automatizzare il montaggio&lt;br /&gt;
 192.168.0.2:/pool1      /mnt/pool1      nfs       defaults          0          0&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== SWAP ===&lt;br /&gt;
Creare una partizione swap da 8 GiB&lt;br /&gt;
 # zfs create -V 8G '''&amp;lt;pool&amp;gt;/swap'''&lt;br /&gt;
&lt;br /&gt;
Formattazione della partizione&lt;br /&gt;
 # mkswap -f /dev/zvol/&amp;lt;pool&amp;gt;/swap&lt;br /&gt;
&lt;br /&gt;
Attivazione della swap&lt;br /&gt;
 # swapon /dev/zvol/&amp;lt;pool&amp;gt;/swap&lt;br /&gt;
&lt;br /&gt;
Aggiungere la swap al &amp;lt;code&amp;gt;/etc/fstab&amp;lt;/code&amp;gt;&lt;br /&gt;
 '''/dev/zvol/&amp;lt;pool&amp;gt;/swap''' none swap discard 0 0&lt;br /&gt;
&lt;br /&gt;
== Filesystem Cifrato ==&lt;br /&gt;
Esistono molti modi per cifrare volumi e file su Linux, come si può vedere da questa [https://wiki.archlinux.org/title/Data-at-rest_encryption#Comparison_table tabella]&lt;br /&gt;
&lt;br /&gt;
* Generare una password di 32 caratteri alfanumerici con /dev/random. &lt;br /&gt;
 cat /dev/random | tr -dc '[:alnum:]' | fold -w 32 | head -n 1&lt;br /&gt;
&lt;br /&gt;
=== EncFS ===&lt;br /&gt;
Cifrare una directory può essere un'alternativa alla cifratura di un intera partizione come avviene invece con Cryptsetup. EncFS è un filesystem user-space montabile tramite FUSE che permette di effettuare questa operazione. Rispetto ad un filesystem loopback criptato ci sono però diversi pregi e difetti.&lt;br /&gt;
&lt;br /&gt;
* Pro&lt;br /&gt;
# Selezionare selettivamente i contenuti da cifrare, rispetto ad avere un device completamente cifrato, appesantisce meno il lavoro della CPU specialmente quando si utilizzano processori datati privi del set di istruzioni AES.&lt;br /&gt;
# Dimensioni modificabili: un file system vuoto EncFS è composto da qualche dozzina di byte e può crescere a qualsiasi dimensione senza bisogno di essere riformattato. Con un dispositivi di cifratura a blocchi, si alloca un filesystem in anticipo con le dimensioni desiderate.&lt;br /&gt;
# Possibilità di backup incrementali: Un filesystem EncFS può essere salvato con una politica per file. Un programma di backup è in grado di rilevare quali file sono cambiati, anche se non sarà in grado di decifrarli.&lt;br /&gt;
# Permette di aggiungere la crittografia a qualsiasi filesystem&lt;br /&gt;
# Lavora a livello utente, non richiede permessi di amministratore&lt;br /&gt;
&lt;br /&gt;
* Contro&lt;br /&gt;
# Non permette di cifrare l'intera installazione, ma solo i file selezionati&lt;br /&gt;
# Chi ha accesso ai file crittografati può conoscerne i meta-dati (numero di file, permessi, dimensione)&lt;br /&gt;
# EncFS sembra non sia più attivamente mantenuto. Un'alternativa molto simile potrebbe essere gocryptfs.&lt;br /&gt;
&lt;br /&gt;
==== Montaggio automatico ====&lt;br /&gt;
Dato che non è possibile passare opzioni all'eseguibile encfs su fstab è necessario creare un wrapper, cioè uno script da rendere eseguibile (es. &amp;lt;code&amp;gt;/home/user/encfs.sh&amp;lt;/code&amp;gt;) che vada a recuperare la password da un file (es. ''encfs_password''), magari contenuto in una chiavetta USB anch'essa montata automaticamente all'avvio.&lt;br /&gt;
&lt;br /&gt;
Wrapper&lt;br /&gt;
 #!/bin/sh&lt;br /&gt;
 encfs --public --extpass=&amp;quot;cat /mnt/USB/encfs_password&amp;quot; $*&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
A questo punto è possibile aggiungere all'''/etc/fstab'' le seguenti righe.&lt;br /&gt;
 # Montaggio automatico della penna USB ''cafebabe-b00b5-deadbee'' all'avvio&lt;br /&gt;
 UUID=cafebabe-b00b5-deadbeef /mnt/USB auto defaults,auto 0 0&lt;br /&gt;
 # Richiamo del wrapper &lt;br /&gt;
 /home/''user''/encfs.sh#/home/''user''/.encrypted /home/''user''/decrypted fuse rw,user,auto 0 0&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== gocryptfs ===&lt;br /&gt;
Creare una directory cifrata ''crypt'' e montarla su ''dati''&lt;br /&gt;
 $ mkdir crypt dati&lt;br /&gt;
 $ gocryptfs -init crypt&lt;br /&gt;
 $ gocryptfs crypt dati&lt;br /&gt;
&lt;br /&gt;
Creare una versione cifrata di una preesistente home&lt;br /&gt;
&lt;br /&gt;
 $ mkdir /home/user.crypt&lt;br /&gt;
 $ gocryptfs -init -reverse /home/user&lt;br /&gt;
 $ gocryptfs -reverse /home/user /home/user.crypt&lt;br /&gt;
&lt;br /&gt;
È possibile aggiungere una linea simile alle seguente al file '''/etc/fstab''' per automatizzare il sistema di montaggio di una cartella cifrata durante il boot utilizzando un keyfile.&lt;br /&gt;
&lt;br /&gt;
 /home/user/cipher /home/user/plain fuse./usr/bin/gocryptfs nofail,allow_other,passfile=/tmp/password 0 0&lt;br /&gt;
&lt;br /&gt;
=== [https://wiki.archlinux.org/title/ECryptfs ECryptfs] ===&lt;br /&gt;
&lt;br /&gt;
=== VeraCrypt ===&lt;br /&gt;
[https://www.veracrypt.fr VeraCrypt] (fork di TrueCrypt) è un tool opensource dotato di '''interfaccia grafica''' che permette di configurare la cifratura di volumi reali o file immagini montate in loop. Ha una funzione particolare, chiamata '''Hidden Volume''' che permette di creare un volume nascosto all'interno di un normale volume VeraCrypt al quale si può accedere con una diversa password così da evitare in caso di necessità (ricatto, fidanzata/moglie gelosa, imposizione da parte delle forze dell'ordine) di mostrare il contenuto del reale archivio cifrato.&lt;br /&gt;
&lt;br /&gt;
=== LUKS ===&lt;br /&gt;
Questo strumento permette di crittografare un intero disco o una partizione, es. /dev/'''sdc2''':&lt;br /&gt;
 &lt;br /&gt;
 # cryptsetup luksFormat --cipher aes-xts-plain64 --key-size 512 --hash sha512 --iter-time 5000 /dev/'''sdc2'''&lt;br /&gt;
 &lt;br /&gt;
Una volta formattato il device è possibile montarlo, verrà chiesto di creare una password a meno che nel comando non venga esplicitato un file con la chiave di cifratura&lt;br /&gt;
 # cryptsetup open /dev/'''sdc2''' lukspart&lt;br /&gt;
&lt;br /&gt;
Adesso è possibile formattare il device col filesystem che preferiamo&lt;br /&gt;
 # mkfs.btrfs /dev/mapper/lukspart&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[https://wiki.golem.linux.it/Installare_Arch_Linux_in_una_partizione_cifrata How-to GOLEM]&lt;br /&gt;
&lt;br /&gt;
[https://guide.debianizzati.org/index.php/Volumi_criptati_LUKS_-_Creazione_e_uso_con_cryptmount How-to Debianizzati]&lt;br /&gt;
&lt;br /&gt;
=== fscrypt ===&lt;br /&gt;
È un sistema di cifratura progettato per lavorare con filesystem moderni che supportano direttamente la crittografia nativa come ext4, F2FS, UBIFS, CephFS e forse in futuro anche btrfs. &lt;br /&gt;
&lt;br /&gt;
Abilitiamo la crittografia su una directory di un device '''sdc1''' precedentemente formattato con ext4&lt;br /&gt;
 # fscrypt setup /mnt/encrypted&lt;br /&gt;
 # tune2fs -O encrypt /dev/'''sdc1'''&lt;br /&gt;
 # fscrypt encrypt /mnt/encrypted&lt;br /&gt;
&lt;br /&gt;
Per accedere alla directory al riavvio successivo&lt;br /&gt;
 # fscrypt unlock /mnt/encrypted&lt;br /&gt;
&lt;br /&gt;
=== [[Appunti_Arch_Linux#ZFS_Cifrato|ZFS]] ===&lt;br /&gt;
&lt;br /&gt;
= RAID mdadm =&lt;br /&gt;
Su Linux era possibile effettuare RAID via software anche prima dell'avvento di filesystem di nuova generazione come btrfs o zfs. Per fare ciò è possibile utilizzare il comando &amp;lt;code&amp;gt;mdadm&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Vedere l'organizzazione della tabella delle partizioni dei dischi&lt;br /&gt;
 $ lsblk&lt;br /&gt;
&lt;br /&gt;
 sda      8:16   0 447.1G  0 disk &lt;br /&gt;
 ├─sda1   8:17   0   500M  0 part &lt;br /&gt;
 ├─sda2   8:18   0    16G  0 part [SWAP]&lt;br /&gt;
 └─sda3   8:19   0 430.6G  0 part /&lt;br /&gt;
                                 &lt;br /&gt;
 sdb      8:32   1   3.7G  0 disk &lt;br /&gt;
 ├─sdb1   8:33   1   3.5G  0 part &lt;br /&gt;
 ├─sdb2   8:34   1   239M  0 part [SWAP]&lt;br /&gt;
 └─sdb3   8:19   0 430.6G  0 part /&lt;br /&gt;
&lt;br /&gt;
Nell'esempio ci sono due dischi (sda, sdb) contenenti 3 partizioni: EFI, SWAP e Linux.&lt;br /&gt;
&lt;br /&gt;
== RAID 0 ==&lt;br /&gt;
Creare un volume ''md3'' che costituito dalla somma delle due partizioni sda3 e sdb3&lt;br /&gt;
 # mdadm --create --verbose /dev/md3 --level=0 --raid-devices=2 /dev/sda3 /dev/sdb3&lt;br /&gt;
&lt;br /&gt;
Verificare che il raid funzioni correttamente&lt;br /&gt;
 # mdadm --detail /dev/md0&lt;br /&gt;
&lt;br /&gt;
Utilizzare il nuovo volume md3, formattato col filesystem XFS, per una nuova installazione di Arch Linux (montandolo in /mnt)&lt;br /&gt;
 # mkfs.xfs /dev/md3&lt;br /&gt;
 # mount /dev/md3 /mnt/&lt;br /&gt;
&lt;br /&gt;
Per memorizzare l'array nel file di configurazione&lt;br /&gt;
 # mdadm –Es &amp;gt; /etc/mdadm.conf&lt;br /&gt;
&lt;br /&gt;
== RAID 1 ==&lt;br /&gt;
Creare un volume ''md3'' mirror delle due partizioni sda3 e sdb3&lt;br /&gt;
 # mdadm --create /dev/md3 /dev/sda3 /dev/sdb3 --level=1 --raid-devices=2&lt;br /&gt;
&lt;br /&gt;
== RAID 5 ==&lt;br /&gt;
Creare un volume ''md3'' con un [https://en.wikipedia.org/wiki/Standard_RAID_levels#RAID_5 raid5], ovviamente stavolta occorreranno almeno 3 dischi es.: sda3, sdb3, sdc3. &lt;br /&gt;
&lt;br /&gt;
Per creare tre partizioni tutte della stessa dimensione è possibile copiare su sdb e sdc la tabella delle partizioni di sda&lt;br /&gt;
 #  sfdisk -d /dev/sda | sfdisk /dev/sdb&lt;br /&gt;
 #  sfdisk -d /dev/sda | sfdisk /dev/sdc&lt;br /&gt;
&lt;br /&gt;
Creare l'array in raid5&lt;br /&gt;
 # mdadm --create /dev/md/md3 /dev/sda1 /dev/sdb1 /dev/sdc1 --level=5 --raid-devices=3 --bitmap=internal&lt;br /&gt;
&lt;br /&gt;
== Modificare l'array ==&lt;br /&gt;
È possibile passare da raid1 a raid5&lt;br /&gt;
 # mdadm --grow /dev/md3 --level=5&lt;br /&gt;
 # mdadm --grow /dev/md3 --add /dev/sdc3 --raid-devices=3&lt;br /&gt;
&lt;br /&gt;
== Accorgersi di un guasto ==&lt;br /&gt;
Nei raid 1 e 5 in caso di danneggiamento di un disco sarà possibile sostituirlo e ricostruire l'array senza perdere dati. Nell'ipotesi di avere un guasto su '''sdb''' in un raid1 comparirà qualcosa di simile a questo eseguendo &amp;lt;code&amp;gt;cat /proc/mdstat&amp;lt;/code&amp;gt;&lt;br /&gt;
 md3 : active raid1 sda3[1]&lt;br /&gt;
 ''blocks [2/2] [U_]'' &lt;br /&gt;
invece che&lt;br /&gt;
 md3 : active raid1 sda3[1] '''sdb3'''[0]&lt;br /&gt;
      262016 blocks [2/2] [UU]&lt;br /&gt;
&lt;br /&gt;
===Rimuovere il disco danneggiato dal RAID===&lt;br /&gt;
Si dovrà marcare sdb3 come danneggiata e andrà rimossa dall'array.&lt;br /&gt;
 # mdadm --manage /dev/md3 --fail /dev/sdb3&lt;br /&gt;
 # mdadm --manage /dev/md3 --remove /dev/sdb3&lt;br /&gt;
&lt;br /&gt;
Se avessimo più array (es. md1, md2...) contenenti partizioni del disco sdb (sdb1, sdb2...), l'operazione andrebbe ripetuta per ciascuno di essi es.:&lt;br /&gt;
 # mdadm --manage /dev/md1 --fail /dev/sdb1&lt;br /&gt;
 # mdadm --manage /dev/md1 --remove /dev/sdb1&lt;br /&gt;
&lt;br /&gt;
 #  cat /proc/mdstat&lt;br /&gt;
 Personalities : [linear] [multipath] [raid0] [raid1] [raid5] [raid4] [raid6] [raid10]&lt;br /&gt;
 md0 : active raid1 sda3[0]&lt;br /&gt;
 24418688 blocks [2/1] [U_]&lt;br /&gt;
&lt;br /&gt;
 unused devices: &amp;lt;none&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Sostituzione del disco danneggiato ===&lt;br /&gt;
Spegnere il computer, rimuovere il disco guasto e collegarne al suo posto uno funzionante.&lt;br /&gt;
&lt;br /&gt;
'''NB: il nuovo disco dovrà essere di dimensioni uguali o maggiori del disco sostituito'''&lt;br /&gt;
&lt;br /&gt;
Installato il nuovo disco, riaccendere il PC, loggarsi come root e ricreare sul nuovo sdb le stesse partizioni presenti su sda:&lt;br /&gt;
 # sfdisk -d /dev/sda | sfdisk /dev/sdb&lt;br /&gt;
 # fdisk -l ''(per controllare che le partizioni siano uguali)''&lt;br /&gt;
&lt;br /&gt;
=== Ripristino del RAID 1 ===&lt;br /&gt;
Aggiungere ''/dev/sdb3'' a ''/dev/md3''&lt;br /&gt;
 # mdadm --manage /dev/md3 --add /dev/sdb3&lt;br /&gt;
&lt;br /&gt;
Se avessimo più array (es. md1, md2...) contenenti partizioni del disco sdb (sdb1, sdb2...), l'operazione andrebbe ripetuta per ciascuno di essi es.:&lt;br /&gt;
  # mdadm --manage /dev/md1 --add /dev/sdb1&lt;br /&gt;
&lt;br /&gt;
Controllare che tutto sia andato a buon fine&lt;br /&gt;
 # cat /proc/mdstat&lt;br /&gt;
&lt;br /&gt;
= LVM =&lt;br /&gt;
Il [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 Logical Volume Manager] (LVM o gestore logico dei volumi) è un software per la gestione dei dischi che permette di superare le limitazioni legate al normale partizionamento di questi ultimi. Si tratta di una specie di ''strato'' che si va a frapporre tra il dispositivo fisico ed il filesystem. Permette di gestire dinamicamente aggiunta, rimozione o ridimensionamento dello spazio di archiviazione, il RAID, nonché lo snapshot dei volumi.&lt;br /&gt;
&lt;br /&gt;
LVM è un prodotto oltremodo maturo, disponibile per Linux sin dal kernel 2.4, per questa ragione distribuzioni orientate al mercato aziendale come RedHat lo hanno scelto, accoppiandolo a XFS o ext4, come soluzione predefinita per implementare la maggior parte delle caratteristiche fornite dai moderni filesystem come BTRFS o ZFS &lt;br /&gt;
&lt;br /&gt;
LVM si basa sui seguenti concetti&lt;br /&gt;
&lt;br /&gt;
* '''Physical Volumes (PV)''': rappresentano qualsiasi disco si voglia inizializzare (&amp;quot;formattare&amp;quot;) come sottosistema LVM&lt;br /&gt;
 # pvcreate /dev/sda1&lt;br /&gt;
 # pvcreate /dev/sdb3&lt;br /&gt;
 # pvcreate /dev/sdc&lt;br /&gt;
 # pvdisplay&lt;br /&gt;
&lt;br /&gt;
* '''Volume Groups (VG)''': sono costituiti da ''physical volumes'' e rappresentano la capacità totale delle risorse di un LVM&lt;br /&gt;
 # vgcreate vg0 /dev/sda1 /dev/sdb3 /dev/sdc&lt;br /&gt;
 # vgdisplay vg0&lt;br /&gt;
&lt;br /&gt;
* '''Logical Volumes (LV)''': utilizzano le risorse messe a disposizione dai ''volume groups''. Possono essere inizializzati anche con proprietà di RAID o cache.&lt;br /&gt;
 # lvcreate -L 10G -n ''home'' vg0&lt;br /&gt;
 # lvdisplay /dev/vg0/home&lt;br /&gt;
&lt;br /&gt;
Oppure nel caso volessimo fare un raid5&lt;br /&gt;
 # lvcreate -n lvr5 –type raid5 -L 10G -i 3 vg0&lt;br /&gt;
 &lt;br /&gt;
 -n ''nome del volume''&lt;br /&gt;
 –type raid5 ''tipo di raid''&lt;br /&gt;
 -L ''dimensione massima della grandezza del raid''&lt;br /&gt;
 -i ''numero dei physical volumes che si vogliono utilizzare''&lt;br /&gt;
&lt;br /&gt;
Per formattare il volume logico appena creato&lt;br /&gt;
 # mkfs -t ext4 /dev/vg0/lvr5&lt;br /&gt;
&lt;br /&gt;
Per aggiungere un disco ad un Volume Groups&lt;br /&gt;
 # vgextend vg0 /dev/sdb2&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Snapshot ==&lt;br /&gt;
Creare uno snapshot della del volume logico ''/home'' che potrà contenere fino ad un massimo di 5 GiB di dati modificati rispetto all'originale&lt;br /&gt;
 # lvcreate --size 5G --snapshot --name homesnap20230306 /dev/vg0/home&lt;br /&gt;
&lt;br /&gt;
Ripristinare il volume logico ricaricando lo snapshot&lt;br /&gt;
 # lvconvert --merge /dev/vg0/homesnap20230306&lt;br /&gt;
&lt;br /&gt;
Nel caso il logical volume sia attivo il merging avverrà col prossimo riavvio e lo snapshot sparirà.&lt;br /&gt;
&lt;br /&gt;
== Cache ==&lt;br /&gt;
Utilizzare un moderno disco a stato solido può essere una soluzione economica per velocizzare un LV.&lt;br /&gt;
&lt;br /&gt;
Convertire il disco a PV ed aggiungerlo al preesistente VG&lt;br /&gt;
 # pvcreate ''/dev/discoSSD''&lt;br /&gt;
 # vgextend vg0 ''/dev/discoSSD''&lt;br /&gt;
&lt;br /&gt;
Aggiungere la cache al LV&lt;br /&gt;
 # lvcreate --type cache --cachemode writethrough -l 100%FREE -n root_cachepool vg0/home ''/dev/discoSSD''&lt;br /&gt;
&lt;br /&gt;
Rimuovere la cache dal LV&lt;br /&gt;
 # lvconvert --uncache vg0/home&lt;br /&gt;
&lt;br /&gt;
= GRUB (Boot loader) =&lt;br /&gt;
È 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.&lt;br /&gt;
&lt;br /&gt;
== Sistema con BIOS ==&lt;br /&gt;
 # pacman -S grub&lt;br /&gt;
 # grub-mkconfig -o /boot/grub/grub.cfg&lt;br /&gt;
 # grub-install /dev/sda&lt;br /&gt;
&lt;br /&gt;
== Sistema UEFI ==&lt;br /&gt;
'''NB: per installare correttamente GRUB su un sistema UEFI occorre che il device di installazione abbia effettuato il boot in modalità UEFI e non Legacy (BIOS)'''&lt;br /&gt;
&lt;br /&gt;
 # pacman -S grub&lt;br /&gt;
 # mkdir /boot/EFI&lt;br /&gt;
 # mount /dev/sda1 /boot/EFI&lt;br /&gt;
 # grub-install /dev/sda&lt;br /&gt;
 # grub-mkconfig -o /boot/grub/grub.cfg&lt;br /&gt;
&lt;br /&gt;
== Gestione snapshot BTRFS ==&lt;br /&gt;
&lt;br /&gt;
=== Manuale ===&lt;br /&gt;
Editare ''/etc/grub.d/40_custom'' (o crearlo) e aggiungere quanto segue per permettere l'avvio della snapshot ''rootsnap''&lt;br /&gt;
&lt;br /&gt;
 menuentry 'Linux snapshot' {&lt;br /&gt;
        insmod gzio&lt;br /&gt;
        insmod part_gpt&lt;br /&gt;
        insmod btrfs&lt;br /&gt;
        set root='hd1,gpt3'&lt;br /&gt;
        linux   /rootsnap/boot/vmlinuz-linux root=/dev/partizione rw rootflags=subvol=rootsnap  quiet&lt;br /&gt;
        initrd  /rootsnap/boot/initramfs-linux.img&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
dopodichè aggiornare la configurazione di GRUB con&lt;br /&gt;
 # grub-mkconfig -o /boot/grub/grub.cfg&lt;br /&gt;
&lt;br /&gt;
=== Automatico ===&lt;br /&gt;
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.&lt;br /&gt;
 # pacman -S grub-btrfs&lt;br /&gt;
&lt;br /&gt;
Ogni volta che si vorrà aggiornare grub con nuovi subvolumi basterà dare il seguente comando&lt;br /&gt;
&lt;br /&gt;
 # grub-mkconfig -o /boot/grub/grub.cfg&lt;br /&gt;
&lt;br /&gt;
== Ripristinare GRUB ==&lt;br /&gt;
Aggiornando la propria distribuzione Linux, il proprio boot loader o installando un altro sistema operativo (es. Windows) può capitare di sovrascrivere il [http://it.wikipedia.org/wiki/Master_boot_record MBR].&lt;br /&gt;
&lt;br /&gt;
Avviare il computer con un liveCD/DVD o USB: &lt;br /&gt;
* [http://archlinux.mirror.garr.it/archlinux/iso/latest/archlinux-x86_64.iso Archlinux]&lt;br /&gt;
* [http://www.sysresccd.org/Download Systemrescuecd]&lt;br /&gt;
* [http://grml.org/download/ grml]&lt;br /&gt;
* [http://na.mirror.garr.it/mirrors/ubuntu-releases/ Ubuntu]&lt;br /&gt;
&lt;br /&gt;
Ipotizziamo di avere una partizione / chiamata /dev/sda2 e nessuna /boot&lt;br /&gt;
&lt;br /&gt;
Creiamo i seguenti mount point&lt;br /&gt;
 # sudo su&lt;br /&gt;
 # cd /mnt&lt;br /&gt;
 # mkdir sda2&lt;br /&gt;
 # mount /dev/sda2 /mnt/sda2&lt;br /&gt;
&lt;br /&gt;
Se utilizziamo una scheda madre UEFI andrà montata anche la partizione efi (solitamente è la prima partizione del disco ''sda1'')&lt;br /&gt;
 # mount /dev/sda2 /mnt/sda2/boot/efi&lt;br /&gt;
&lt;br /&gt;
Se necessario editiamo il file di configurazione di grub&lt;br /&gt;
  # nano /mnt/sda2/boot/grub/grub.cfg&lt;br /&gt;
&lt;br /&gt;
=== arch-chroot ===&lt;br /&gt;
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&lt;br /&gt;
&lt;br /&gt;
 # arch-chroot /mnt/sda2&lt;br /&gt;
&lt;br /&gt;
=== Manuale ===&lt;br /&gt;
 # mount --rbind /dev /mnt/sda2/dev&lt;br /&gt;
 # mount -t proc /proc /mnt/sda2/proc&lt;br /&gt;
 # mount -t sysfs /sys /mnt/sda2/sys/&lt;br /&gt;
&lt;br /&gt;
Eseguiamo il vero e proprio chroot in /dev/sda2&lt;br /&gt;
 # chroot /mnt/sda2&lt;br /&gt;
&lt;br /&gt;
=== Reinstallazione ===&lt;br /&gt;
 # grub-mkconfig -o /boot/grub/grub.cfg&lt;br /&gt;
 # grub-install /dev/sda&lt;br /&gt;
&lt;br /&gt;
=== Riavvio del sistema ===&lt;br /&gt;
Usciamo dal chroot, smontiamo la partizione e riavviamo il sistema&lt;br /&gt;
 # exit&lt;br /&gt;
 # umount /mnt/sda1/proc&lt;br /&gt;
 # umount /mnt/sda1/dev&lt;br /&gt;
 # umount /mnt/sda1&lt;br /&gt;
 # systemctl reboot&lt;br /&gt;
&lt;br /&gt;
== Eliminare il boot loader ==&lt;br /&gt;
In caso di errori nell'installazione di GRUB è possibile cancellare il vecchio boot loader di un disco (&amp;lt;code&amp;gt;''devicename'' = sda,sdb,sdc...&amp;lt;/code&amp;gt;)&lt;br /&gt;
 # dd if=/dev/zero of=''/dev/devicename'' bs=446 count=1&lt;br /&gt;
&lt;br /&gt;
== ISOBoot ==&lt;br /&gt;
Con GRUB2 è possibile effettuare il boot di iso di LiveCD/USB Linux presenti sul disco aggiungendole su &amp;lt;code&amp;gt;/etc/grub.d/40_custom &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Ubuntu 23.04&lt;br /&gt;
 menuentry &amp;quot;Ubuntu 23.04 desktop ISO&amp;quot; {&lt;br /&gt;
        insmod part_gpt&lt;br /&gt;
        insmod ext2&lt;br /&gt;
        insmod btrfs&lt;br /&gt;
        rmmod tpm&lt;br /&gt;
     # es.: terza partizione del primo disco&lt;br /&gt;
        set root=(hd0,gpt3)&lt;br /&gt;
        set isofile=&amp;quot;/home/'''&amp;lt;username&amp;gt;'''/Downloads/ubuntu-23.04-desktop-amd64.iso&amp;quot;&lt;br /&gt;
        loopback loop $isofile&lt;br /&gt;
        linux (loop)/casper/vmlinuz boot=casper iso-scan/filename=$isofile quiet splash&lt;br /&gt;
        initrd (loop)/casper/initrd&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
= Networking =&lt;br /&gt;
&lt;br /&gt;
== Manuale ==&lt;br /&gt;
===net-tools===&lt;br /&gt;
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 [https://lists.debian.org/debian-devel/2009/03/msg00780.html obsoleta]. Tra i suoi comandi principali: arp, hostname, ifconfig, iptunnel netstat e route.&lt;br /&gt;
&lt;br /&gt;
Attivare l'interfaccia di rete eth0 ed assegnarle l'indirizzo ip 192.168.0.2&lt;br /&gt;
 # ifconfig eth0 192.168.0.2 up&lt;br /&gt;
&lt;br /&gt;
Disattivare l'interfaccia di rete eth0&lt;br /&gt;
 # ifconfig eth0 down&lt;br /&gt;
&lt;br /&gt;
Assegnare manualmente un gateway (es.: 192.168.0.1) alla rete&lt;br /&gt;
 # route add default gw 192.168.0.1&lt;br /&gt;
&lt;br /&gt;
Ovviamente occorrerà aggiungere un server DNS al file &amp;lt;code&amp;gt;/etc/resolv.conf&amp;lt;/code&amp;gt; per la risoluzione degli indirizzi.&lt;br /&gt;
&lt;br /&gt;
=== iproute2 ===&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|+ Conversione comandi da net-tools a iproute2&lt;br /&gt;
|-&lt;br /&gt;
! net-tools&lt;br /&gt;
! iproute2&lt;br /&gt;
! Note&lt;br /&gt;
|-&lt;br /&gt;
| ifconfig&lt;br /&gt;
| ip addr, ip link&lt;br /&gt;
| Address and link configuration&lt;br /&gt;
|-&lt;br /&gt;
| route&lt;br /&gt;
| ip route&lt;br /&gt;
| Routing tables&lt;br /&gt;
|-&lt;br /&gt;
| arp&lt;br /&gt;
| ip neigh&lt;br /&gt;
| Neighbors&lt;br /&gt;
|-&lt;br /&gt;
| iptunnel&lt;br /&gt;
| ip tunnel&lt;br /&gt;
| Tunnels&lt;br /&gt;
|-&lt;br /&gt;
| nameif, ifrename&lt;br /&gt;
| ip link set name&lt;br /&gt;
| Rename network interfaces&lt;br /&gt;
|-&lt;br /&gt;
| ipmaddr&lt;br /&gt;
| ip maddr&lt;br /&gt;
| Multicast&lt;br /&gt;
|-&lt;br /&gt;
| netstat&lt;br /&gt;
| ss, ip route&lt;br /&gt;
| Show various networking statistics&lt;br /&gt;
|-&lt;br /&gt;
| brctl&lt;br /&gt;
| bridge&lt;br /&gt;
| Handle bridge addresses and devices&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Elencare gli indirizzi IP: &lt;br /&gt;
 # ip addr&lt;br /&gt;
&lt;br /&gt;
Mostra le informazioni di una specifica interfaccia di rete&lt;br /&gt;
 # ip addr show ''eth0''&lt;br /&gt;
&lt;br /&gt;
Aggiungere un indirizzo all'interfaccia eth0:&lt;br /&gt;
 # ip addr add 192.0.2.10/24 dev eth0&lt;br /&gt;
&lt;br /&gt;
Cancellare un indirizzo associato all'interfaccia eth0:&lt;br /&gt;
 # ip addr delete 192.0.2.10/24 dev eth0&lt;br /&gt;
&lt;br /&gt;
Attivare l'interfaccia eth0:&lt;br /&gt;
 # ip link set dev eth0 up&lt;br /&gt;
&lt;br /&gt;
Disattivare l'interfaccia eth0:&lt;br /&gt;
 # ip link set dev eth0 down&lt;br /&gt;
&lt;br /&gt;
Svuotare la cache arp per tutte le interfacce:&lt;br /&gt;
 # ip neigh flush all&lt;br /&gt;
&lt;br /&gt;
Aggiungere una rotta che passa per gateway 192.0.2.1&lt;br /&gt;
 # ip route add default via 192.0.2.1&lt;br /&gt;
&lt;br /&gt;
Aggiungere una rotta che passa per gateway 192.168.2.1 per l'interfaccia 10.0.2.0&lt;br /&gt;
 # ip route add 10.0.2.1/24 via 192.168.0.1 dev enp0s3&lt;br /&gt;
&lt;br /&gt;
Aggiungere una rotta che passa per gateway 192.168.2.1 per l'interfaccia 10.0.2.0&lt;br /&gt;
 # ip route del 10.0.2.0/24 via 192.168.0.1 dev enp0s3 &lt;br /&gt;
&lt;br /&gt;
Mostrare la tabella di routing&lt;br /&gt;
 # ip route show&lt;br /&gt;
&lt;br /&gt;
== Systemd-networkd==&lt;br /&gt;
'''[https://wiki.archlinux.org/title/Systemd-networkd systemd-networkd'''] è un demone, parte di systemd, che gestisce la configurazione della rete.&lt;br /&gt;
&lt;br /&gt;
=== Esempi di configurazione ===&lt;br /&gt;
Per prima cosa sarà necessario abilitare il servizio&lt;br /&gt;
 # systemctl enable --now systemd-networkd.service&lt;br /&gt;
 # systemctl enable --now systemd-resolved.service&lt;br /&gt;
 # ln -rsf /run/systemd/resolve/stub-resolv.conf /etc/resolv.conf&lt;br /&gt;
&lt;br /&gt;
==== DHCP ====&lt;br /&gt;
/etc/systemd/network/20-wired.network&lt;br /&gt;
 [Match]&lt;br /&gt;
 Name=enp1s0&lt;br /&gt;
 [Network]&lt;br /&gt;
 DHCP=yes&lt;br /&gt;
&lt;br /&gt;
==== IP statico ====&lt;br /&gt;
/etc/systemd/network/20-wired.network&lt;br /&gt;
 [Match]&lt;br /&gt;
 Name=enp1s0&lt;br /&gt;
 [Network]&lt;br /&gt;
 Address=10.1.10.9/24&lt;br /&gt;
 Gateway=10.1.10.1&lt;br /&gt;
 DNS=10.1.10.1&lt;br /&gt;
&lt;br /&gt;
==== Wireless adapter ====&lt;br /&gt;
Per potersi connettere a connessioni WIFI è necessario installare e configurare un'ulteriore applicazione dedicata come '''iwd''' o '''wpa_supplicant''' per l'autenticazione alla rete.&lt;br /&gt;
&lt;br /&gt;
/etc/systemd/network/25-wireless.network&lt;br /&gt;
 [Match]&lt;br /&gt;
 Name=wlp2s0&lt;br /&gt;
 [Network]&lt;br /&gt;
 DHCP=yes&lt;br /&gt;
 IgnoreCarrierLoss=3s&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Rinominare l'interfaccia di rete ====&lt;br /&gt;
Invece che impostare una regola su udev è possibile usare un file di testo .link nel seguente modo&lt;br /&gt;
&lt;br /&gt;
/etc/systemd/network/''10-ethusb0.link''&lt;br /&gt;
 [Match]&lt;br /&gt;
 MACAddress=12:34:56:78:90:ab&lt;br /&gt;
 [Link]&lt;br /&gt;
 Description=USB to Ethernet Adapter&lt;br /&gt;
 Name=''ethusb0''&lt;br /&gt;
&lt;br /&gt;
== Wifi ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! [https://wiki.archlinux.org/title/Network_configuration/Wireless#Utilities Programmi] !! [https://wireless.wiki.kernel.org/en/developers/documentation/wireless-extensions WEXT] !! [https://wireless.wiki.kernel.org/en/developers/documentation/nl80211 nl80211] !! WEP !! WPA&lt;br /&gt;
|-&lt;br /&gt;
| [https://hewlettpackard.github.io/wireless-tools/Tools.html wireless_tools] || Sì || No || Sì || No&lt;br /&gt;
|-&lt;br /&gt;
| [https://wireless.wiki.kernel.org/en/users/documentation/iw iw] || No || Sì || Sì || No&lt;br /&gt;
|-&lt;br /&gt;
| [https://wiki.archlinux.org/title/wpa_supplicant wpa_supplicant] || Sì || Sì || No || Sì&lt;br /&gt;
|-&lt;br /&gt;
| [https://wiki.archlinux.org/title/Iwd iwd]/iwgtk || No || Sì || No || Sì&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== NetworkManager ==&lt;br /&gt;
[https://networkmanager.dev/ NetworkManager] è una utility che si è imposta come standard per la configurazione della reti Linux (LAN e Wifi)&lt;br /&gt;
&lt;br /&gt;
Si compone di un demone, un'interfaccia da riga di comando [https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/9/html/configuring_basic_system_settings/assembly_configuring-and-managing-network-access_configuring-basic-system-settings#configuring-a-static-ethernet-connection-using-nmcli_assembly_configuring-and-managing-network-access (nmcli)] ed un'interfaccia di configurazione basata su un menu testuale ([https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/9/html/configuring_basic_system_settings/assembly_configuring-and-managing-network-access_configuring-basic-system-settings nmtui]). &lt;br /&gt;
&lt;br /&gt;
I principali desktop enviroment come GNOME e KDE Plasma possiedono una utility grafica che consente loro di configurare graficamente le reti basandosi su NetworkManager.&lt;br /&gt;
&lt;br /&gt;
=== Installazione ===&lt;br /&gt;
 # pacman -S networkmanager &lt;br /&gt;
 # systemctl enable NetworkManager&lt;br /&gt;
 # systemctl start NetworkManager&lt;br /&gt;
&lt;br /&gt;
==== Configurazione  ====&lt;br /&gt;
* 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 &amp;lt;code&amp;gt;nmtui&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Per chi dovesse prediligere la configurazione manuale: &amp;lt;code&amp;gt;nmcli&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Per impedire a Network Manager di gestire una certa interfaccia di rete è sufficiente aggiungere il suo MAC Address al file di configurazione &amp;lt;code&amp;gt;/etc/NetworkManager/NetworkManager.conf&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 [main]&lt;br /&gt;
 plugins=keyfile&lt;br /&gt;
 [keyfile]&lt;br /&gt;
 unmanaged-devices=mac:''00:25:21:73:90:72''&lt;br /&gt;
&lt;br /&gt;
=== Alternative ===&lt;br /&gt;
* [https://wiki.archlinux.org/title/ConnMan ConnMan]&lt;br /&gt;
&lt;br /&gt;
== Condividere la connessione ==&lt;br /&gt;
&lt;br /&gt;
=== Abilitazione del forwarding dei pacchetti ===&lt;br /&gt;
&lt;br /&gt;
 $ sudo echo 1 &amp;gt; /proc/sys/net/ipv4/ip_forward&lt;br /&gt;
&lt;br /&gt;
Per rendere il forwarding definitivo editare il file ''/etc/sysctl.conf'' modificando come segue il parametro net.ipv4.ip_forward:&lt;br /&gt;
&lt;br /&gt;
 net.ipv4.ip_forward = 1&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Mascheramento dei pacchetti ===&lt;br /&gt;
&lt;br /&gt;
 $ sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE&lt;br /&gt;
&lt;br /&gt;
''eth0'' non è un parametro fisso, identifica l'interfaccia con la quale il PC si connette ad Internet&lt;br /&gt;
&lt;br /&gt;
Per applicare automaticamente tale regola ad ogni riavvio&lt;br /&gt;
 # iptables-save &amp;gt; /etc/iptables.ipv4.nat&lt;br /&gt;
 # iptables-restore &amp;lt; /etc/iptables.ipv4.nat&lt;br /&gt;
&lt;br /&gt;
=== Moduli kernel ===&lt;br /&gt;
&lt;br /&gt;
Assicurarsi che siano caricati i seguenti moduli:&lt;br /&gt;
 # modprobe ip_tables&lt;br /&gt;
 # modprobe ip_conntrack&lt;br /&gt;
 # modprobe iptable_nat&lt;br /&gt;
 # modprobe ipt_MASQUERADE&lt;br /&gt;
&lt;br /&gt;
=== Condivisione tramite rete ethernet ===&lt;br /&gt;
&lt;br /&gt;
==== Configurazione scheda di rete interna ====&lt;br /&gt;
&lt;br /&gt;
Assegnare un IP statico alla scheda ethernet con la quale si vuol condividere la connessione.&lt;br /&gt;
&lt;br /&gt;
 # ifconfig eth1 192.168.5.1 netmask 255.255.255.0 up&lt;br /&gt;
&lt;br /&gt;
Per rendere tale configurazione permanente sarà necessario editare il file ''/etc/network/interfaces'' ed aggiungere la seguente configurazione&lt;br /&gt;
&lt;br /&gt;
 auto eth1&lt;br /&gt;
 iface eth1 inet static&lt;br /&gt;
 address 192.168.5.1&lt;br /&gt;
 netmask 255.255.255.0&lt;br /&gt;
&lt;br /&gt;
=== Condivisione tramite rete WI-FI ===&lt;br /&gt;
&lt;br /&gt;
==== Configurazione scheda wireless ====&lt;br /&gt;
&lt;br /&gt;
Se non si desidera cifrare la rete e proteggerla con una password sarà sufficiente eseguire questi comandi.&lt;br /&gt;
&lt;br /&gt;
 # iwconfig wlan0 mode Master&lt;br /&gt;
 # iwconfig wlan0 ESSID ReteGOLEM&lt;br /&gt;
 # iwconfig wlan0 enc off&lt;br /&gt;
 # ifconfig wlan0 192.168.5.1 netmask 255.255.255.0 up&lt;br /&gt;
&lt;br /&gt;
Per rendere tale configurazione permanente sarà necessario creare un file del tipo ''/etc/systemd/network/20-wifi.network'' ed aggiungere la seguente configurazione&lt;br /&gt;
 [Match]&lt;br /&gt;
 Name=wlan0&lt;br /&gt;
 [Network]&lt;br /&gt;
 Address=192.168.5.1/24&lt;br /&gt;
&lt;br /&gt;
Naturalmente occorrerà che sia attivato il demone systemd-networkd&lt;br /&gt;
 # systemctl enable --now systemd-networkd.service&lt;br /&gt;
&lt;br /&gt;
===== Proteggere la connessione WI-FI =====&lt;br /&gt;
&lt;br /&gt;
Installare il programma hostapd&lt;br /&gt;
 # pacman -S hostapd&lt;br /&gt;
&lt;br /&gt;
Configurare hostapd modificando ''/etc/hostapd/hostapd.conf''&lt;br /&gt;
&lt;br /&gt;
 # Interfaccia di rete&lt;br /&gt;
 interface=wlan0&lt;br /&gt;
 # Driver della scheda wifi usata (non tutte le schede sono supportate)&lt;br /&gt;
 driver=nl80211&lt;br /&gt;
 # Nome della rete (SSID)&lt;br /&gt;
 ssid=ReteGOLEM&lt;br /&gt;
 hw_mode=g&lt;br /&gt;
 # Canale di trasmissione&lt;br /&gt;
 channel=6&lt;br /&gt;
 macaddr_acl=0&lt;br /&gt;
 # Righe per la protezione&lt;br /&gt;
 auth_algs=1&lt;br /&gt;
 ignore_broadcast_ssid=0&lt;br /&gt;
 wpa=2&lt;br /&gt;
 # Password del wifi&lt;br /&gt;
 wpa_passphrase=password&lt;br /&gt;
 wpa_key_mgmt=WPA-PSK&lt;br /&gt;
 wpa_pairwise=TKIP&lt;br /&gt;
 rsn_pairwise=CCMP&lt;br /&gt;
&lt;br /&gt;
Editare il file ''/etc/default/hostapd'' per impostare ''hostapd.conf'' come file di configurazione predefinito, modificando la riga DAEMON_CONF=&amp;quot;&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
 DAEMON_CONF=&amp;quot;/etc/hostapd/hostapd.conf&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== Assegnazione automatica degli IP ai client ===&lt;br /&gt;
&lt;br /&gt;
 # pacman -S dhcp&lt;br /&gt;
&lt;br /&gt;
Editare ''/etc/dhcpd.conf'' aggiungendo la configurazione per la rete interna (es.: eth1 o wlan0):&lt;br /&gt;
&lt;br /&gt;
 subnet 192.168.5.0 netmask 255.255.255.0 {&lt;br /&gt;
 range 192.168.5.100  192.168.5.200;&lt;br /&gt;
 option domain-name-servers 8.8.8.8;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== VPN ==&lt;br /&gt;
=== OpenVPN ===&lt;br /&gt;
https://wiki.archlinux.org/title/OpenVPN&lt;br /&gt;
&lt;br /&gt;
===L2TP/IPsec VPN===&lt;br /&gt;
https://wiki.archlinux.org/title/Openswan_L2TP/IPsec_VPN_client_setup&lt;br /&gt;
&lt;br /&gt;
= Container =&lt;br /&gt;
== Toolbox==&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
=== Immagini ===&lt;br /&gt;
* [https://github.com/toolbx-images/images https://github.com/toolbx-images/images] Immagini di container delle principali distribuzioni&lt;br /&gt;
&lt;br /&gt;
=== Comandi ===&lt;br /&gt;
Creare un container&lt;br /&gt;
 $ toolbox create -i quay.io/toolbx-images/rhel-toolbox:9.1 -c redhat&lt;br /&gt;
&lt;br /&gt;
Entrare in un container&lt;br /&gt;
 $ toolbox enter redhat&lt;br /&gt;
 &lt;br /&gt;
Fermare un container&lt;br /&gt;
 $ podman stop nome_macchina&lt;br /&gt;
&lt;br /&gt;
Rimuovere un container&lt;br /&gt;
 $ toolbox rm -f redhat&lt;br /&gt;
&lt;br /&gt;
Rimuovere un container e la sua immagine&lt;br /&gt;
 $ toolbox rmi redhat &lt;br /&gt;
&lt;br /&gt;
Esaminare la lista dei container e delle immagini disponibili&lt;br /&gt;
 $ toolbox list &lt;br /&gt;
&lt;br /&gt;
Permettere agli utenti non root di utilizzare i container&lt;br /&gt;
 $ sudo sh -c 'echo &amp;quot;username:100000:65536&amp;quot; &amp;gt;&amp;gt; /etc/subuid'&lt;br /&gt;
 $ sudo sh -c 'echo &amp;quot;username:100000:65536&amp;quot; &amp;gt;&amp;gt; /etc/subgid'&lt;br /&gt;
&lt;br /&gt;
Abilitare l'host al forwarding di X11 per le applicazioni che richiedono Xorg&lt;br /&gt;
 # xhost +&lt;br /&gt;
&lt;br /&gt;
Eseguire un comandi all'interno di un container&lt;br /&gt;
 $ toolbox run -c redhat libreoffice&lt;br /&gt;
&lt;br /&gt;
== LXC ==&lt;br /&gt;
[https://wiki.archlinux.org/title/Linux_Containers Linux Container] (LXC) permette di virtualizzare uno o più container Linux su un singolo host LXC, gestendone virtualmente RAM, CPU, socket e rete.&lt;br /&gt;
&lt;br /&gt;
È estremamente utile quando si ha bisogno di isolare dei servizi dal sistema host: es.: server web, imap, smtp...&lt;br /&gt;
&lt;br /&gt;
=== Installazione ===&lt;br /&gt;
Installare LXC&lt;br /&gt;
 # pacman -S lxc lxc-templates lxcfs lxd&lt;br /&gt;
&lt;br /&gt;
=== Comandi ===&lt;br /&gt;
Lista dei container installati&lt;br /&gt;
 lxc-ls -f &lt;br /&gt;
&lt;br /&gt;
Installare un container scegliendo l'immagine dalla lista di quelli disponibili&lt;br /&gt;
 lxc-create -n playtime -t download&lt;br /&gt;
&lt;br /&gt;
Se sapete già di quale container avete bisogno sarà possibile scaricarlo direttamente&lt;br /&gt;
 lxc-create -n playtime -t download -- --dist archlinux --release current --arch amd64&lt;br /&gt;
&lt;br /&gt;
Far partire il container chiamato ''debian''&lt;br /&gt;
 lxc-start debian &lt;br /&gt;
&lt;br /&gt;
Entrare dentro il container chiamato ''debian''&lt;br /&gt;
 lxc-attach debian&lt;br /&gt;
&lt;br /&gt;
Fermare l'esecuzione del container chiamato ''debian''&lt;br /&gt;
 lxc-stop debian&lt;br /&gt;
&lt;br /&gt;
Rimuovere il container chiamato ''debian''&lt;br /&gt;
 lxc-destroy debian &lt;br /&gt;
&lt;br /&gt;
Eseguire un comando dentro il container chiamato ''debian''&lt;br /&gt;
 lxc-attach --name debian nano&lt;br /&gt;
&lt;br /&gt;
=== Rete Bridge ===&lt;br /&gt;
Nel caso si debbano usare servizi da tenere esposti su Internet potrebbe essere conveniente utilizzare una rete bridge piuttosto che NAT.&lt;br /&gt;
&lt;br /&gt;
[https://wiki.debian.org/LXC/SimpleBridge Configurazione] rete bridge.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Docker ==&lt;br /&gt;
Abilitare ed avviare docker&lt;br /&gt;
 # systemctl enable --now docker&lt;br /&gt;
&lt;br /&gt;
Cercare il container desiderato&lt;br /&gt;
 # docker search &amp;quot;xxx&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Scaricare l'immagine desiderata&lt;br /&gt;
 # docker pull xxxx:latest&lt;br /&gt;
&lt;br /&gt;
Visualizzare le immagini scaricate&lt;br /&gt;
 # docker images&lt;br /&gt;
&lt;br /&gt;
Visualizzare i docker creati&lt;br /&gt;
 # docker ps -a&lt;br /&gt;
&lt;br /&gt;
Avviare docker&lt;br /&gt;
 # docker start nome_docker&lt;br /&gt;
&lt;br /&gt;
Entrare nel docker&lt;br /&gt;
 # docker attach nome_docker&lt;br /&gt;
&lt;br /&gt;
Copiare un file dal sistema host al docker&lt;br /&gt;
 # docker cp esempio.txt nome_docker: /esempio.txt&lt;br /&gt;
&lt;br /&gt;
Copiare un file dal docker.&lt;br /&gt;
 # docker cp container-id:/path/filename.txt ~/Desktop/filename.txt&lt;br /&gt;
&lt;br /&gt;
Rimuovere un docker&lt;br /&gt;
 # docker rm nome_docker&lt;br /&gt;
&lt;br /&gt;
Rimuovere tutti i docker&lt;br /&gt;
 # docker container stop $(docker container ls -aq)&lt;br /&gt;
 # docker system prune -a --volumes&lt;br /&gt;
&lt;br /&gt;
Avviare automaticamente un docker (da testare)&lt;br /&gt;
 # docker run --restart=always --name nome_docker&lt;br /&gt;
&lt;br /&gt;
Creare script di avvio ''docker-webserver''.service&lt;br /&gt;
 [Unit]&lt;br /&gt;
 Description=Some service&lt;br /&gt;
 Requires=docker.service&lt;br /&gt;
 After=docker.service&lt;br /&gt;
 [Service]&lt;br /&gt;
 Restart=always&lt;br /&gt;
 ExecStart=/usr/bin/docker start -a container_name&lt;br /&gt;
 ExecStop=/usr/bin/docker stop -t 2 container_name&lt;br /&gt;
 [Install]&lt;br /&gt;
 WantedBy=multi-user.target&lt;br /&gt;
&lt;br /&gt;
* [https://wiki.archlinux.org/title/docker Arch Linux Docker WIKI]&lt;br /&gt;
&lt;br /&gt;
== [https://wiki.archlinux.org/title/systemd-nspawn systemd-nspawn] ==&lt;br /&gt;
&lt;br /&gt;
= Fonti software alternative =&lt;br /&gt;
Nella rara eventualità che si necessiti di un programma non presente né nei repository ufficiali, né su [https://aur.archlinux.org/ AUR] è possibile optare per una delle seguenti opzioni.&lt;br /&gt;
&lt;br /&gt;
== AppImage ==&lt;br /&gt;
Scaricate qualsiasi pacchetto disponibile su [https://appimage.github.io/ appimage.github.io] e rendetelo eseguibile.&lt;br /&gt;
&lt;br /&gt;
 $ chmod a+x ''nomeprogramma''.AppImage&lt;br /&gt;
&lt;br /&gt;
Non resta che eseguirlo col seguente comando o con un doppio click&lt;br /&gt;
 $ ./''nomeprogramma''.AppImage&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Flatpak ==&lt;br /&gt;
Concepito per essere una sorta di '''Google Play Store''' per GNOME, è possibile installare programmi provenienti da [https://flathub.org/home flatpak] utilizzando i normali gestori grafici di pacchetti basati su packagekit come ''Gnome Software'' o ''Discover di Plasma''.&lt;br /&gt;
&lt;br /&gt;
Installazione&lt;br /&gt;
 # pacman -S flatpak&lt;br /&gt;
&lt;br /&gt;
Abilitazione del repository ufficiale del progetto (software di terze parti potrebbe richiedere di aggiungere altri repository)&lt;br /&gt;
 # flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo&lt;br /&gt;
&lt;br /&gt;
Elenca i repository disponibili.&lt;br /&gt;
 $ flatpak remotes&lt;br /&gt;
&lt;br /&gt;
Installa un'applicazione (es.: libreoffice)&lt;br /&gt;
 $ flatpak install flathub org.libreoffice.LibreOffice&lt;br /&gt;
&lt;br /&gt;
Esegue un'applicazione (es.: libreoffice)&lt;br /&gt;
 $ flatpak run org.libreoffice.LibreOffice&lt;br /&gt;
&lt;br /&gt;
Disinstalla un'applicazione mantenendo i dati.&lt;br /&gt;
 $ flatpak uninstall &amp;lt;nome app&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Disinstalla un'applicazione eliminando i dati (nella home utente .var/app/).&lt;br /&gt;
 $ flatpak uninstall &amp;lt;nome app&amp;gt; --delete-data&lt;br /&gt;
&lt;br /&gt;
Elimina i dati di tutte le applicazioni disinstallate (nella home utente .var/app/).&lt;br /&gt;
 $ flatpak uninstall --delete-data&lt;br /&gt;
&lt;br /&gt;
Disinstalla tutte le applicazioni flatpak installate sul sistema.&lt;br /&gt;
 $ flatpak uninstall --all&lt;br /&gt;
	&lt;br /&gt;
Cerca ed esegue aggiornamenti per le applicazioni installate.&lt;br /&gt;
 $ flatpak update&lt;br /&gt;
&lt;br /&gt;
Aggiorna una singola applicazione.&lt;br /&gt;
 $ flatpak update &amp;lt;nome app&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Elenca tutte le applicazioni flatpak installate sul sistema.&lt;br /&gt;
 $ flatpak list --app&lt;br /&gt;
	&lt;br /&gt;
Elenca i runtime installati.&lt;br /&gt;
 $ flatpak list --runtime&lt;br /&gt;
	&lt;br /&gt;
Visualizzare le informazioni sulle applicazioni in esecuzione.&lt;br /&gt;
 $ flatpak ps&lt;br /&gt;
	&lt;br /&gt;
Termina un'applicazione bloccata o danneggiata (l'ID dell'istanza si può ottenere dal comando precedente).&lt;br /&gt;
 $ flatpak kill &amp;lt;id istanza&amp;gt;&lt;br /&gt;
	&lt;br /&gt;
Tenta la riparare dei pacchetti danneggiati. Necessita dei privilegi di amministrazione. &lt;br /&gt;
 $ flatpak repair&lt;br /&gt;
&lt;br /&gt;
== Nix ==&lt;br /&gt;
[https://nixos.wiki/wiki/Nix_package_manager Nix package manager] è il gestore di pacchetti utilizzato su [https://nixos.org/ NixOS]. È possibile però utilizzarlo su qualsiasi distribuzione Linux affiancandone il gestore di pacchetti predefinito.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
[https://nixos.org/manual/nixpkgs/stable/ Guida completa]&lt;br /&gt;
&lt;br /&gt;
=== Installazione ===&lt;br /&gt;
[https://nixos.org/download.html#nix-install-linux Guida ufficiale]&lt;br /&gt;
&lt;br /&gt;
'''Single-user installation'''&lt;br /&gt;
 $ sudo install -d -m755 -o $(id -u) -g $(id -g) /nix&lt;br /&gt;
 $ sh &amp;lt;(curl -L https://nixos.org/nix/install) --no-daemon&lt;br /&gt;
&lt;br /&gt;
Aggiungere la riga seguente al &amp;lt;code&amp;gt;.bashrc&amp;lt;/code&amp;gt; o al file di configurazione della vostra shell per poter utilizzare i comandi Nix&lt;br /&gt;
 $ source $HOME/.nix-profile/etc/profile.d/nix.sh&lt;br /&gt;
&lt;br /&gt;
=== Canali ===&lt;br /&gt;
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''.&lt;br /&gt;
&lt;br /&gt;
Ecco di seguito i comandi principali per gestire questi canali&lt;br /&gt;
&lt;br /&gt;
Lista dei canali configurati&lt;br /&gt;
 $ nix-channel --list&lt;br /&gt;
&lt;br /&gt;
Aggiungere il canale principale (''nixos'')&lt;br /&gt;
 $ nix-channel --add https://nixos.org/channels/channel-name nixos&lt;br /&gt;
&lt;br /&gt;
Aggiungere altri canali&lt;br /&gt;
 $ nix-channel --add https://some.channel/url my-alias&lt;br /&gt;
&lt;br /&gt;
Rimuovere un canale&lt;br /&gt;
 $ nix-channel --remove channel-alias&lt;br /&gt;
&lt;br /&gt;
Aggiornare un canale&lt;br /&gt;
 $ nix-channel --update channel-alias&lt;br /&gt;
&lt;br /&gt;
Aggiornare tutti i canali&lt;br /&gt;
 $ nix-channel --update&lt;br /&gt;
&lt;br /&gt;
=== Comandi ===&lt;br /&gt;
Cercare un pacchetto&lt;br /&gt;
 $ nix search nixpkgs ''packagename''&lt;br /&gt;
&lt;br /&gt;
Installare un pacchetto&lt;br /&gt;
 $ nix-env -iA ''packagename''&lt;br /&gt;
&lt;br /&gt;
Vedere i pacchetti installati&lt;br /&gt;
 $ nix-env -q&lt;br /&gt;
&lt;br /&gt;
Disinstallare un pacchetto&lt;br /&gt;
 $ nix-env -e ''packagename''&lt;br /&gt;
&lt;br /&gt;
Aggiornare tutti i pacchetti&lt;br /&gt;
 $ nix-env -u&lt;br /&gt;
&lt;br /&gt;
== Snap ==&lt;br /&gt;
È 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. &lt;br /&gt;
&lt;br /&gt;
Su Arch è disponibile su AUR: [https://aur.archlinux.org/packages/snapd snapd]&lt;br /&gt;
&lt;br /&gt;
=== Installazione ===&lt;br /&gt;
Installare ed abilitare Snap&lt;br /&gt;
 $ [https://aur.archlinux.org/packages/yay yay] -S snapd&lt;br /&gt;
 $ sudo ln -s /var/lib/snapd/snap /snap&lt;br /&gt;
 $ sudo systemctl start snapd.service&lt;br /&gt;
 $ sudo systemctl enable snapd.service&lt;br /&gt;
&lt;br /&gt;
=== Comandi ===&lt;br /&gt;
Cercare un programma&lt;br /&gt;
 $ snap find ''nomeprogramma''&lt;br /&gt;
&lt;br /&gt;
Installare un programma&lt;br /&gt;
 $ sudo snap install ''nomeprogramma''&lt;br /&gt;
&lt;br /&gt;
Rimuovere un programma&lt;br /&gt;
 $ sudo snap remove ''nomeprogramma''&lt;br /&gt;
&lt;br /&gt;
Vedere i programmi installati &lt;br /&gt;
 $ snap list&lt;br /&gt;
&lt;br /&gt;
Rimuovere una determinata versione di un programma&lt;br /&gt;
 $ sudo snap remove ''nomeprogramma'' --revision&lt;br /&gt;
&lt;br /&gt;
Aggiornare manualmente i pacchetti snap&lt;br /&gt;
 $ sudo snap refresh&lt;br /&gt;
&lt;br /&gt;
= GPG =&lt;br /&gt;
[http://it.wikipedia.org/wiki/GNU_Privacy_Guard GNU Privacy Guard (GnuPG o GPG)] è un programma libero pensato per fornire un'alternativa opensource al [http://it.wikipedia.org/wiki/Pretty_Good_Privacy Pretty Good Privacy (PGP)].&lt;br /&gt;
Nel PGP sono usate sia la crittografia asimmetrica (a chiave pubblica) che quella simmetrica.&lt;br /&gt;
La chiave pubblica del destinatario serve al mittente unicamente per cifrare la chiave comune per un algoritmo di crittografia simmetrica che sarà usata per cifrare il testo in chiaro del messaggio.&lt;br /&gt;
Un destinatario decifra un messaggio protetto da GPG usando la chiave di sessione con l'algoritmo simmetrico. Tale chiave di sessione è inclusa nel messaggio in maniera criptata ed è decifrata usando la chiave privata del destinatario.&lt;br /&gt;
L'utilizzo di due cifrature oltre che a velocizzare l'esecuzione del programma (la cifratura a chiave simmetrica è molto più veloce di quella asimmetrica) permette di poter cifrare uno stesso messaggio per più destinatari.&lt;br /&gt;
&lt;br /&gt;
== Generare una chiave ==&lt;br /&gt;
 $ gpg --gen-key&lt;br /&gt;
&lt;br /&gt;
Controllare che la chiave sia stata correttamente creata&lt;br /&gt;
 $ gpg --list-keys&lt;br /&gt;
&lt;br /&gt;
== Certificato di revoca ==&lt;br /&gt;
Il certificato di revoca serve per invalidare la chiave nel caso in cui questa venga compromessa.&lt;br /&gt;
Chiunque sia in possesso del certificato di revoca può revocare la chiave corrispondente, per cui è bene tenerlo in un posto sicuro.&lt;br /&gt;
Poiché, nel momento in cui si ha bisogno del certificato di revoca, potremmo non essere più in grado di generarlo, conviene generarlo subito dopo la creazione della chiave, e prima di iniziare a utilizzarla pubblicamente.&lt;br /&gt;
 $ gpg --output certificato-di-revoca.asc --gen-revoke ''ID''&lt;br /&gt;
dove &amp;lt;code&amp;gt;ID&amp;lt;/code&amp;gt; è dato dalle ultime 8 cifre dell'impronta (fingerprint) della chiave.&lt;br /&gt;
&lt;br /&gt;
== Utilizzo pratico ==&lt;br /&gt;
=== Criptare un documento ===&lt;br /&gt;
 $ gpg -o file1.ext.gpg -e -r UserID file1.ext&lt;br /&gt;
&lt;br /&gt;
Esempio:&lt;br /&gt;
 $ gpg -o tesi.odt.gpg -e -r spookyh@gmail.com tesi.odt&lt;br /&gt;
&lt;br /&gt;
=== Decriptare un documento ===&lt;br /&gt;
 $ gpg -o file1.ext -d file1.gpg&lt;br /&gt;
&lt;br /&gt;
=== Firmare un documento ===&lt;br /&gt;
Il mittente può usare PGP per ''firmare'' un messaggio con l'algoritmo di firma RSA o Digital Signature Algorithm (DSA). Per fare ciò viene calcolato un hash (message digest) dal testo in chiaro e successivamente da questo hash è creata la [http://it.wikipedia.org/wiki/Firma_digitale firma digitale] usando la chiave privata del mittente.&lt;br /&gt;
 $ gpg -o file1.ext.sig -s file1.ext&lt;br /&gt;
&lt;br /&gt;
=== Verificare un documento ===&lt;br /&gt;
 $ gpg --verify file1.sig&lt;br /&gt;
&lt;br /&gt;
== Importare ed esportare chiavi (locali) ==&lt;br /&gt;
Importare una chiave (pubblica)&lt;br /&gt;
 $ gpg --import chiave.asc (o .txt)&lt;br /&gt;
&lt;br /&gt;
Esportare la propria chiave pubblica&lt;br /&gt;
 $ gpg -a -o chiave_pubblica.asc --export&lt;br /&gt;
&lt;br /&gt;
=== Esportare la propria chiave privata ===&lt;br /&gt;
{{Note&lt;br /&gt;
|type=attention&lt;br /&gt;
|text= La chiave privata può essere utilizzata per impersonare la vostra identità, '''NON''' inviarla mai a '''nessuno''', ed esportala solo per effettuarne backup, naturalmente da custodire in un luogo sicuro.}}&lt;br /&gt;
 $ gpg --armor --export-secret-keys &amp;lt;ID&amp;gt; &amp;gt; secret-key.gpg.asc&lt;br /&gt;
&lt;br /&gt;
== Condividere le chiavi pubbliche ==&lt;br /&gt;
Inviare la chiave ad un keyserver:&lt;br /&gt;
 $ gpg --keyserver keyserver.linux.it --send-key &amp;lt;ID&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Importare una chiave da un keyserver:&lt;br /&gt;
 $ gpg --keyserver keyserver.linux.it --recv-keys &amp;lt;ID&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se ci fidiamo del proprietario e vogliamo mostrare pubblicamente la nostra fiducia, possiamo firmare la chiave appena importata e esportare la firma su un keyserver (vedere sezioni successive).&lt;br /&gt;
&lt;br /&gt;
=== Keyserver ===&lt;br /&gt;
Quando si carica una chiave su un keyserver, poi questo la condivide con gli altri keyserver che fanno parte dello stesso circuito.&lt;br /&gt;
Non esiste un'entità centralizzata o un circuito di riferimento (per scelta di design), e, a volte, questo può generare confusione nell'utilizzatore.&lt;br /&gt;
Inoltre, alcuni keyserver potrebbero non essere sempre accessibili.&lt;br /&gt;
&lt;br /&gt;
Tra i keyserver più noti:&lt;br /&gt;
* keys.openpgp.org&lt;br /&gt;
* keyserver.ubuntu.com&lt;br /&gt;
* keys.gnupg.net&lt;br /&gt;
* pgp.surfnet.nl&lt;br /&gt;
* pgp.circl.lu&lt;br /&gt;
* pgp.mit.edu&lt;br /&gt;
&lt;br /&gt;
== Editare una chiave ==&lt;br /&gt;
Per fare operazioni e modifiche dobbiamo &amp;quot;editare&amp;quot; le chiavi, aprendo l'editor interattivo:&lt;br /&gt;
 $ gpg --edit-key &amp;lt;ID&amp;gt;&lt;br /&gt;
'''NB: Prima di uscire dall'editor, ricordarsi di salvare, altrimenti le modifiche vanno perdute'''&lt;br /&gt;
&lt;br /&gt;
* firmare&lt;br /&gt;
 &amp;gt; sign&lt;br /&gt;
* cambiare i valori di fiducia &lt;br /&gt;
 &amp;gt; trust&lt;br /&gt;
* vedere la fingerprint&lt;br /&gt;
 &amp;gt; fpr&lt;br /&gt;
* cambiare la data di scadenza&lt;br /&gt;
 &amp;gt; expire&lt;br /&gt;
* cambiare la password&lt;br /&gt;
 &amp;gt; passwd&lt;br /&gt;
* firmare localmente in modo non esportabile&lt;br /&gt;
 &amp;gt; lsign&lt;br /&gt;
* sempre '''ricordarsi di salvare'''&lt;br /&gt;
 &amp;gt; save&lt;br /&gt;
* oppure uscire&lt;br /&gt;
 &amp;gt; quit&lt;br /&gt;
&lt;br /&gt;
Digitare &amp;lt;code&amp;gt;help&amp;lt;/code&amp;gt; per una lista esaustiva.&lt;br /&gt;
&lt;br /&gt;
Tutte le modifiche da rendere pubbliche vanno inviate ad un keyserver.&lt;br /&gt;
&lt;br /&gt;
== Revocare una chiave ==&lt;br /&gt;
Avendo già il certificato di revoca:&lt;br /&gt;
 $ gpg --import certificato-di-revoca.asc&lt;br /&gt;
 $ gpg --keyserver pgp.surfnet.nl --send-key ''ID''&lt;br /&gt;
&lt;br /&gt;
== Gestione delle chiavi ==&lt;br /&gt;
Controllare il database delle chiavi: questo comando mostra tutte le chiavi che abbiamo con molte informazioni.&lt;br /&gt;
 $ gpg --list-keys --with-colons&lt;br /&gt;
&lt;br /&gt;
Fornisce tutti i valori di fiducia assegnati alle varie chiavi. (Informazioni private)&lt;br /&gt;
 $ gpg --list-ownertrust&lt;br /&gt;
&lt;br /&gt;
== Controllo firme ==&lt;br /&gt;
 $ gpg --check-sigs&lt;br /&gt;
 $ gpg --list-sigs&lt;br /&gt;
&lt;br /&gt;
== Esportare le chiavi altrui ==&lt;br /&gt;
Abbiamo importato e firmato la chiave di &amp;lt;ID&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Rimandiamola al proprietario:&lt;br /&gt;
 $ gpg --armor -export -o firma.sig &amp;lt;ID&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Questo comando crea un file di nome ''firma.sig'' nella directory corrente, che contiene la chiave firmata.&lt;br /&gt;
Spedire al proprietario ''firma.sig''.&lt;br /&gt;
&lt;br /&gt;
Chi riceve la propria chiave firmata da altri può decidere inserirla nel proprio portachiavi, con&lt;br /&gt;
 $ gpg --import firma.sig&lt;br /&gt;
&lt;br /&gt;
Si aggiungono al portachiavi le nuove firme ma anche i nuovi ID che il mittente ha sulla sua chiave, col rispettivo valore di fiducia. Firmare le chiavi degli altri implica dar loro fiducia, e, spesso, anche aver verificato la loro identità in maniera sicura.&lt;br /&gt;
Se non ci fidiamo, non firmiamo. Se si firmano a caso tutte le chiavi che capitano a tiro, si perde la reputazione che si ha presso gli altri partecipanti della rete. Se vogliamo fare un uso pubblico di questa fiducia reciproca possiamo mandare la nostra  chiave, contenente la nuova firma, al keyserver:&lt;br /&gt;
 $ gpg --keyserver pgp.circl.lu --send-key &amp;lt;ID mia chiave&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Periodicamente occorre aggiornare il proprio portachiavi digitale, così da venire a conoscenza delle modifiche sulle chiavi degli altri.&lt;br /&gt;
 $ gpg --keyserver pgp.circl.lu --refresh-keys&lt;br /&gt;
&lt;br /&gt;
== Rete di fiducia ==&lt;br /&gt;
Una chiave importata può essere firmata con un certo grado di fiducia. Possiamo rispedirla al proprietario o caricare la firma su un keyserver, e se lui la importa nel suo portachiavi, avrà la propria chiave firmata da noi. Ognuno può quindi aggiungere le firme dei conoscenti alla propria chiave, che a loro volta hanno firme di altri.&lt;br /&gt;
&lt;br /&gt;
== GUI ==&lt;br /&gt;
Esistono vari programmi a interfaccia grafica:&lt;br /&gt;
* ''Seahorse'', per gestire le chiavi e i certificati, comprese quelle ssh, per un ambiente GTK&lt;br /&gt;
* ''KGPG'', per gestire le chiavi e i certificati, comprese quelle ssh, per un ambiente QT&lt;br /&gt;
* ''Pinentry'' (anche da riga di comando) si ricorda la password della chiave per il tempo impostato (default 5 minuti)&lt;br /&gt;
&lt;br /&gt;
= Systemd =&lt;br /&gt;
 systemd-timesyncd — system time synchronization across the network;&lt;br /&gt;
 systemd/Journal — system logging&lt;br /&gt;
 systemd/Timers — alternative to cron&lt;br /&gt;
&lt;br /&gt;
= Link Utili =&lt;br /&gt;
&lt;br /&gt;
[https://wiki.archlinux.org/ ArchWiki]&lt;br /&gt;
&lt;br /&gt;
[https://wwwcdf.pd.infn.it/AppuntiLinux/a21.htm Appunti Linux]&lt;br /&gt;
&lt;br /&gt;
[https://www.linuxfromscratch.org/lfs/downloads/stable/LFS-BOOK-11.3-NOCHUNKS.html LFS-BOOK]&lt;br /&gt;
&lt;br /&gt;
[[Category: Howto]]&lt;/div&gt;</summary>
		<author><name>$pooky Hunter</name></author>
	</entry>
	<entry>
		<id>https://wiki.golem.linux.it/index.php?title=Appunti_Arch_Linux&amp;diff=9656</id>
		<title>Appunti Arch Linux</title>
		<link rel="alternate" type="text/html" href="https://wiki.golem.linux.it/index.php?title=Appunti_Arch_Linux&amp;diff=9656"/>
		<updated>2025-04-01T16:30:42Z</updated>

		<summary type="html">&lt;p&gt;$pooky Hunter: /* FScrypt */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[https://archlinux.org/ Arch Linux] è una distribuzione Linux leggera e veloce; ma la cui installazione, configurazione e amministrazione avviene prevalentemente da terminale attraverso la modifica manuale di file di configurazione testuali.&lt;br /&gt;
&lt;br /&gt;
Fornisce, seguendo un modello di distribuzione detto &amp;quot;rolling-release&amp;quot;, l'ultima versione stabile della maggior parte del software opensource disponibile per Linux. Dato che è in costante aggiornamento non richiede periodici passaggi da una versione stabile alla successiva. Il lato negativo è che aggiornamenti di componenti importanti come quelli di: '''kernel, boot loader, driver video, librerie...''' potrebbero determinare problemi tali da rendere il sistema inutilizzabile. Accorgimenti come lo snapshot periodico del filesystem riescono, per fortuna, a contrastare l'impatto di questi inconvenienti.&lt;br /&gt;
&lt;br /&gt;
= Installazione =&lt;br /&gt;
== Guida ==&lt;br /&gt;
[https://wiki.archlinux.org/title/Installation_guide Guida ufficiale]&lt;br /&gt;
&lt;br /&gt;
== Supporti ==&lt;br /&gt;
* ISO ufficiale [http://archlinux.mirror.garr.it/archlinux/iso/latest/archlinux-x86_64.iso archlinux-x86_64.iso]&lt;br /&gt;
&lt;br /&gt;
* ISO con supporto per lo [https://openzfs.github.io/openzfs-docs/Getting%20Started/Arch%20Linux/index.html ZFS] [https://archzfs.leibelt.de/media/data/archlinux-archzfs-linux.iso archlinux-archzfs-linux.iso]&lt;br /&gt;
&lt;br /&gt;
* ISO con installer grafico Calamares [https://sourceforge.net/projects/alci/files/alci-iso/ ALCI]&lt;br /&gt;
&lt;br /&gt;
* ISO live CD/USB con interfaccia Xfce, utile per operazioni di ripristino o installazione [https://www.system-rescue.org/Download/ SystemRescue]:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== ISO personalizzata ==&lt;br /&gt;
Con '''archiso''' è possibile creare un'immagine con pacchetti aggiuntivi rispetto a quelli contenuti nella versione ufficiale. &lt;br /&gt;
&lt;br /&gt;
 # pacman -S archiso&lt;br /&gt;
&lt;br /&gt;
Copiare il contenuto del pacchetto in una directory di lavoro, es.: ''/root/media''&lt;br /&gt;
 # cp -r /usr/share/archiso/configs/releng /root/media&lt;br /&gt;
&lt;br /&gt;
Se volessimo aggiungere il supporto ad un pacchetto non contenuto nei repository ufficiali come, per esempio, lo ZFS occorrerebbe:&lt;br /&gt;
&lt;br /&gt;
* Importare la chiave pubblica del suo repository&lt;br /&gt;
 # pacman-key -r DDF7DB817396A49B2A2723F7403BD972F75D9D76&lt;br /&gt;
 # pacman-key --lsign-key DDF7DB817396A49B2A2723F7403BD972F75D9D76&lt;br /&gt;
 &lt;br /&gt;
* Modificare le seguenti righe al file '''pacman.conf''' di archiso per aggiungere il repository&lt;br /&gt;
 [archzfs]&lt;br /&gt;
 SigLevel = Never&lt;br /&gt;
 Server = https://archzfs.com/$repo/$arch&lt;br /&gt;
&lt;br /&gt;
* Aggiungere le seguenti righe al file ''packages.x86_64'' per aggiungere i pacchetti che ci interessa installare&lt;br /&gt;
 zfs-utils&lt;br /&gt;
 zfs-dkms&lt;br /&gt;
 net-tools&lt;br /&gt;
&lt;br /&gt;
* Se volessimo creare una versione live di una macchina, comprensiva di tutti i suoi pacchetti, potremmo semplicemente aggiungerli al file ''packages.x86_64'' &lt;br /&gt;
&lt;br /&gt;
 # pacman -Qq &amp;gt;&amp;gt; ''/path/packages.x86_64''&lt;br /&gt;
&lt;br /&gt;
* Lanciare lo script per creare l'ISO&lt;br /&gt;
 # ./build.sh -v&lt;br /&gt;
L'immagine sarà generata nella directory /root/media/out&lt;br /&gt;
&lt;br /&gt;
== Preparazione del disco ==&lt;br /&gt;
Su Linux si può scegliere (salvo casi estremamente [https://wiki.archlinux.org/title/partitioning#Partitionless_disk particolari]) tra due [https://unix.stackexchange.com/questions/289389/what-are-the-differences-between-the-various-partition-tables tipi] di tabella delle partizioni&lt;br /&gt;
&lt;br /&gt;
* msdos (Master Boot Record o più semplicemente MBR)&lt;br /&gt;
&lt;br /&gt;
* GPT (GUID Partition Table)&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
I casi in cui è preferibile utilizzare la tabella ''msdos'' sono:&lt;br /&gt;
&lt;br /&gt;
* dual-boot con Windows (32-bit o 64-bit) con la scheda madre in modalità Legacy BIOS&lt;br /&gt;
* in schede madri molto datate il BIOS potrebbe non supportare lo schema GPT (esiste comunque un [https://wiki.archlinux.org/title/partitioning#Tricking_old_BIOS_into_booting_from_GPT trucco] per aggirare l'ostacolo)&lt;br /&gt;
&lt;br /&gt;
[https://wiki.archlinux.org/title/partitioning#Choosing_between_GPT_and_MBR Vantaggi] di GPT su MBR:&lt;br /&gt;
&lt;br /&gt;
* offre un sistema di denominazione delle partizioni indipendente dal filesystem (PARTLABEL, PARTUUID)&lt;br /&gt;
&lt;br /&gt;
* 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.&lt;br /&gt;
&lt;br /&gt;
* la grandezza massima di un disco è di 2 ZiB, mentre su MBR 2 TiB&lt;br /&gt;
&lt;br /&gt;
* permette di fare a meno della tradizionale partizione di /boot con i filesystem BTRFS e ZFS in modo da semplificare la gestione degli snapshot.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Schede madri BIOS ===&lt;br /&gt;
Creare due partizioni.&lt;br /&gt;
&lt;br /&gt;
# '''[http://en.wikipedia.org/wiki/BIOS_Boot_partition 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.&lt;br /&gt;
# '''Linux filesystem''': successivamente da formattare col filesystem di nostra scelta: BTRFS, ZFS, ext4, XFS, JFS.&lt;br /&gt;
&lt;br /&gt;
==== Partizionamento ====&lt;br /&gt;
Col seguente comando verrà creata la partizione BIOS GRUB (EF02) a partire dal 1MB, della grandezza di 64MB, 8GB per la SWAP ed il resto del disco resterà disponibile per il filesystem di Linux.&lt;br /&gt;
&lt;br /&gt;
Se avete più dischi da utilizzare in raid, questa operazione andrà ripetuta per ciascun disco.&lt;br /&gt;
&lt;br /&gt;
 # sgdisk \&lt;br /&gt;
 --new=1:2048:133120 --typecode=1:EF02 --change-name=1:&amp;quot;GRUB&amp;quot; \&lt;br /&gt;
 --new=2:0:+8000M ---typecode 2:8200 --change-name=2:&amp;quot;SWAP&amp;quot; \&lt;br /&gt;
 --largest-new=3 --typecode=3:8300 --change-name=3:&amp;quot;ROOT&amp;quot; /dev/sda&lt;br /&gt;
&lt;br /&gt;
La seconda partizione dovrà poi essere formattata con uno dei filesystem supportati da Linux (ext4, btrfs, xfs...)&lt;br /&gt;
 # mkfs.btrfs /dev/sda3&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Schede madri UEFI ===&lt;br /&gt;
Creare due partizioni.&lt;br /&gt;
&lt;br /&gt;
# '''EFI''': è una partizione in formato FAT32 necessaria per l'avvio dei sistemi operativi nei PC con schede madri UEFI.&lt;br /&gt;
# '''Linux filesystem''': successivamente da formattare col filesystem di nostra scelta: BTRFS, ZFS, ext4, XFS, JFS.&lt;br /&gt;
&lt;br /&gt;
==== Partizionamento ====&lt;br /&gt;
Col seguente comando verrà creata la partizione EFI (EF00) a partire dal 1MB, della grandezza di 512MB, 8Gb per la SWAP ed il resto del disco per il filesystem di Linux.&lt;br /&gt;
 # sgdisk \&lt;br /&gt;
 --new=1:2048:1064960 --typecode=1:EF00 --change-name=1:&amp;quot;efi&amp;quot; \&lt;br /&gt;
 --new=2:0:+8000M ---typecode 2:8200 --change-name=2:&amp;quot;SWAP&amp;quot; \&lt;br /&gt;
 --largest-new=3 --typecode=3:8300 --change-name=3:&amp;quot;ROOT&amp;quot; /dev/sda&lt;br /&gt;
&lt;br /&gt;
La partizione '''EFI''' dovrà poi essere formattata in FAT32&lt;br /&gt;
 # mkfs.vfat -F 32 /dev/sda1&lt;br /&gt;
&lt;br /&gt;
La seconda partizione dovrà poi essere formattata con uno dei filesystem supportati da Linux (ext4, btrfs, xfs...)&lt;br /&gt;
 # mkfs.btrfs /dev/sda3&lt;br /&gt;
&lt;br /&gt;
== Montaggio del filesystem ==&lt;br /&gt;
Formattazione ed attivazione della SWAP&lt;br /&gt;
 # mkswap /dev/sda2&lt;br /&gt;
 # swapon /dev/sda2&lt;br /&gt;
&lt;br /&gt;
Montaggio del filesystem di ROOT nei sistemi BIOS&lt;br /&gt;
 # mount /dev/sda3 /mnt&lt;br /&gt;
&lt;br /&gt;
Montaggio del filesystem di ROOT nei sistemi UEFI&lt;br /&gt;
 # mount /dev/sda3 /mnt&lt;br /&gt;
 # mount --mkdir /dev/sda1 /mnt/boot&lt;br /&gt;
&lt;br /&gt;
== Pacchetti base ==&lt;br /&gt;
Per l'installazione di base si consigliano i seguenti meta-pacchetti&lt;br /&gt;
 # pacstrap -K /mnt base base-devel linux linux-headers linux-firmware&lt;br /&gt;
&lt;br /&gt;
== Configurazione ==&lt;br /&gt;
Creazione del file fstab&lt;br /&gt;
 # genfstab -U /mnt &amp;gt;&amp;gt; /mnt/etc/fstab&lt;br /&gt;
&lt;br /&gt;
Chroot nel nuovo sistema&lt;br /&gt;
 # arch-chroot /mnt&lt;br /&gt;
&lt;br /&gt;
Timezone&lt;br /&gt;
 # ln -sf /usr/share/zoneinfo/Europe/Rome /etc/localtime&lt;br /&gt;
&lt;br /&gt;
Editare il file &amp;lt;code&amp;gt;/etc/systemd/timesyncd.conf&amp;lt;/code&amp;gt; ed abilitare il servizio per la sincronizzazione automatica dell'orario&lt;br /&gt;
 # systemctl enable systemd-timesyncd.service&lt;br /&gt;
&lt;br /&gt;
Editare il file &amp;lt;code&amp;gt;/etc/locale.gen&amp;lt;/code&amp;gt; e togliere il commento agli argomenti che interessano, es.: ''en_US.UTF-8'', ''it_IT.UTF-8''. E successivamente generare la localizzazione eseguendo&lt;br /&gt;
 # locale-gen&lt;br /&gt;
&lt;br /&gt;
Configurare la lingua che vogliamo usare per il nostro sistema editando il file &amp;lt;code&amp;gt;/etc/locale.conf&amp;lt;/code&amp;gt; oppure lanciando il comando&lt;br /&gt;
 # localectl set-locale LANG=en_US.UTF-8&lt;br /&gt;
&lt;br /&gt;
Selezioniamo il layout della tastiera editando il file &amp;lt;code&amp;gt;/etc/vconsole.conf&amp;lt;/code&amp;gt;&lt;br /&gt;
 # echo &amp;quot;KEYMAP=it&amp;quot; &amp;gt;&amp;gt; /etc/vconsole.conf&lt;br /&gt;
&lt;br /&gt;
Scegliere un home host (es.: ''archstar'')&lt;br /&gt;
 # echo '''archstar''' &amp;gt;&amp;gt; /etc/hostname&lt;br /&gt;
&lt;br /&gt;
Impostare una password per l'utente root&lt;br /&gt;
 # passwd&lt;br /&gt;
&lt;br /&gt;
Installare e configurare il bootloader&lt;br /&gt;
&lt;br /&gt;
= Filesystem =&lt;br /&gt;
Su Linux, a seconda di ciò di cui abbiamo bisogno, è possibile scegliere tra numerosi filesystem. Le principali opzioni sono le seguenti:&lt;br /&gt;
&lt;br /&gt;
- BTRFS: supporta nativamente sottovolumi, snapshot ed il raid 0, 1 e 5; ma non la crittografia.&lt;br /&gt;
&lt;br /&gt;
- EXT4: il FS storico di Linux, evoluzione di ext3. Supporta nativamente la crittografia dei dati, ma non gestisce autonomamente né RAID, né snapshots. &lt;br /&gt;
&lt;br /&gt;
- [https://openzfs.github.io/openzfs-docs/index.html 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 &amp;quot;write-atomicity&amp;quot; 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.&lt;br /&gt;
&lt;br /&gt;
- [https://access.redhat.com/documentation/it-it/red_hat_enterprise_linux/9/html-single/configuring_and_managing_logical_volumes/index 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.&lt;br /&gt;
&lt;br /&gt;
== IMG ==&lt;br /&gt;
Per fare esperimenti con i filesystem può essere utile creare dei file immagine&lt;br /&gt;
&lt;br /&gt;
Creare un file immagine di una specifica grandezza (es.: 10G)&lt;br /&gt;
 $ truncate -s 10g disk.img&lt;br /&gt;
&lt;br /&gt;
Formattarlo con un filesystem (es.: btrfs)&lt;br /&gt;
 $ mkfs.btrfs disk.img&lt;br /&gt;
&lt;br /&gt;
Montarlo in loop&lt;br /&gt;
 $ sudo mount -o loop disk.img /mnt&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== BTRFS ==&lt;br /&gt;
Creazione del filesystem&lt;br /&gt;
 # mkfs.btrfs ''/dev/partizione''&lt;br /&gt;
&lt;br /&gt;
Montaggio del filesystem&lt;br /&gt;
 # mount -o compress=lzo ''/dev/partizione'' ''/mnt/punto_mount''&lt;br /&gt;
&lt;br /&gt;
(Si consiglia di usare l'opzione di compressione del filesystem per migliorare le performance ed ottimizzare l'utilizzo dello spazio)&lt;br /&gt;
&lt;br /&gt;
===Subvolumi===&lt;br /&gt;
* Creare un subvolume&lt;br /&gt;
 # btrfs subvolume create ''subvolume''&lt;br /&gt;
&lt;br /&gt;
* Controllare i subvolumi presenti sul sistema&lt;br /&gt;
 # btrfs subvolume list /&lt;br /&gt;
&lt;br /&gt;
In una tipica installazione Ubuntu avremo un output di questo tipo&lt;br /&gt;
 ID 257 gen 9755 top level 5 path @&lt;br /&gt;
 ID 292 gen 7624 top level 5 path @home&lt;br /&gt;
&lt;br /&gt;
''@'' è il nome del subvolume contenente la root '''/''' del filesystem&lt;br /&gt;
''@home'' è il nome del subvolume della /home&lt;br /&gt;
&lt;br /&gt;
=== Montaggio di un subvolume ===&lt;br /&gt;
 # mount -o subvol=''subvolume'' ''/dev/partizione'' ''/mnt/punto_mount''&lt;br /&gt;
&lt;br /&gt;
=== fstab ===&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Ecco un '''/etc/fstab''' di esempio&lt;br /&gt;
 LABEL=ROOT       /             btrfs     defaults,compress=lzo,subvol=@            0 0&lt;br /&gt;
 LABEL=ROOT       /home         btrfs     defaults,compress=lzo,subvol=@home        0 0&lt;br /&gt;
 LABEL=ROOT       /mnt/btrfs    btrfs     defaults,noauto,subvolid=0,compress=lzo   0 0&lt;br /&gt;
&lt;br /&gt;
Montando la partizione con label ROOT su /mnt/btrfs saranno visibili tutti i subvolumi.&lt;br /&gt;
&lt;br /&gt;
===Conversione da Ext3/4 a Btrfs===&lt;br /&gt;
 # btrfs-convert /dev/partizione&lt;br /&gt;
&lt;br /&gt;
Automaticamente è creata una snapshot contenente il vecchio filesystem (''/ext2_saved'')&lt;br /&gt;
&lt;br /&gt;
In caso di problemi può essere montata col comando&lt;br /&gt;
 # mount -t btrfs -o subvol=ext2_saved /dev/xxx /ext2_saved&lt;br /&gt;
 # mount -t ext3 -o loop,ro /ext2_saved/image /ext3&lt;br /&gt;
&lt;br /&gt;
Se tutto è andato a buon fine può invece essere eliminata&lt;br /&gt;
 # btrfs subvolume delete /ext2_saved&lt;br /&gt;
&lt;br /&gt;
===Riparazione di un filesystem danneggiato===&lt;br /&gt;
* Direttamente sul filesystem montato&lt;br /&gt;
 # btrfs scrub start -B /dev/partizione&lt;br /&gt;
o anche direttamente sulla root&lt;br /&gt;
 # btrfs scrub start -B /&lt;br /&gt;
&lt;br /&gt;
* Sul disco smontato&lt;br /&gt;
 # btrfs check --repair /dev/partizione&lt;br /&gt;
&lt;br /&gt;
Per non dover ricorrere ad un dispositivo di avvio alternativo, dato che btrfs-check non può essere utilizzato su un filesystem montato, si consiglia di aggiungerlo al ramdisk modificando in questo mmodo il file &amp;lt;code&amp;gt;/etc/mkinitcpio.conf&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 BINARIES=(btrfs)&lt;br /&gt;
&lt;br /&gt;
=== Quote ===&lt;br /&gt;
Per limitare le dimensioni di un subvolume è possibile abilitare la gestione delle '''quote'''.&lt;br /&gt;
&lt;br /&gt;
Utilizzare il seguente comando su un filesystem btrfs appena creato e privo di subvolumi&lt;br /&gt;
 # btrfs quota enable volume&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
 # btrfs subvolume list &amp;lt;path&amp;gt; | cut -d' ' -f2 | xargs -I{} -n1 btrfs qgroup create 0/{} &amp;lt;path&amp;gt;&lt;br /&gt;
 # btrfs quota rescan &amp;lt;path&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Assegnare una quota limite ad un subvolume&lt;br /&gt;
 # btrfs qgroup limit size /volume/subvolume&lt;br /&gt;
&lt;br /&gt;
Es.:&lt;br /&gt;
 # btrfs qgroup limit 20g /mnt/@&lt;br /&gt;
 # btrfs qgroup limit 100g /mnt/@home&lt;br /&gt;
&lt;br /&gt;
Scoprire la quantità di spazio utilizzata da un subvolume&lt;br /&gt;
 # btrfs qgroup show &amp;lt;path&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Snapshots ===&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
* Effettuare uno snapshot&lt;br /&gt;
 # btrfs subvolume snapshot @ rootsnap&lt;br /&gt;
&lt;br /&gt;
Nell'esempio abbiamo effettuato il ''backup'' del filesystem di root e l'abbiamo chiamato ''rootsnap''&lt;br /&gt;
&lt;br /&gt;
* Montare un subvolume/snapshot&lt;br /&gt;
 # mount -t btrfs -o subvol=rootsnap /dev/partizione /mnt/snapshot&lt;br /&gt;
&lt;br /&gt;
* Cancellare un subvolume/snapshot&lt;br /&gt;
 # btrfs subvolume delete rootsnap&lt;br /&gt;
&lt;br /&gt;
==== Integrazione con GRUB ====&lt;br /&gt;
È possibile caricare automaticamente all'avvio gli snapshot dei filesystem di root attraverso il programma '''grub-btrfs'''&lt;br /&gt;
 # pacman -S grub-btrfs&lt;br /&gt;
&lt;br /&gt;
Con questo tool ogni volta che rigeneriamo il file di configurazione di GRUB il sistema rileva eventuali sottovolumi avviabili (snapshot comprese) aggiungendoli al menu di avvio del GRUB &lt;br /&gt;
 # grub-mkconfig -o /boot/grub/grub.cfg&lt;br /&gt;
&lt;br /&gt;
=== Backup ===&lt;br /&gt;
Le snapshot possono essere salvate su un disco esterno, a patto che questo abbia un file system btrfs.&lt;br /&gt;
L'operazione di trasferimento può essere effettuata soltanto su snapshot in sola lettura.&lt;br /&gt;
Si ipotizza che il proprio disco di sistema sia montato in /mnt/btrfs ed il disco esterno in /mnt/ext&lt;br /&gt;
&lt;br /&gt;
* Creare la snapshot in sola lettura (opzione -r) oppure impostare il flag di sola lettura ad una snapshot già fatta&lt;br /&gt;
 btrfs subvolume snapshot -r @root @root-yymmdd-ro&lt;br /&gt;
 btrfs property set /mnt/btrfs/@root-yymmdd-ro ro true&lt;br /&gt;
* Trasferire la snapshot sul disco esterno.&lt;br /&gt;
 btrfs send /mnt/btrfs/@root-yymmdd-ro | btrfs receive /mnt/ext&lt;br /&gt;
* Quando necessario, ripristinare la snapshot&lt;br /&gt;
 btrfs send /mnt/ext/@root-yymmdd-ro | btrfs receive /mnt/btrfs/&lt;br /&gt;
* Eventualmente, rinominare la snapshot e reimpostare i privilegi di scrittura&lt;br /&gt;
 mv /mnt/ext/{@root-yymmdd-ro,@root}&lt;br /&gt;
 btrfs property set /mnt/btrfs/@root ro false&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== RAID ===&lt;br /&gt;
Tipologie e caratteristiche dei raid [https://btrfs.readthedocs.io/en/latest/mkfs.btrfs.html#profiles supportati]&lt;br /&gt;
&lt;br /&gt;
Confronto tra varie tecnologie di [https://blog.jenningsga.com/status-of-storage-within-linux/ raid]&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! RAID !! Redundancy Copies !! Redundancy Parity !! Redundancy Striping !! Spazio utilizzato !! Min/max n. dischi&lt;br /&gt;
|-&lt;br /&gt;
| disco singolo || 1 || || || 100% || 1/N&lt;br /&gt;
|- &lt;br /&gt;
| RAID0 || 1 || || 1 to N || 100% || 1/N&lt;br /&gt;
|- &lt;br /&gt;
| RAID1 || 2 || || ||  50% || 2/N &lt;br /&gt;
|- &lt;br /&gt;
| RAID1C3 || 3 || || || 33% || 3/N&lt;br /&gt;
|- &lt;br /&gt;
| RAID1C4 || 4 || || || 25% || 4/N&lt;br /&gt;
|-&lt;br /&gt;
| RAID10 || 2 || || 1 to N || 50%  || 2/N&lt;br /&gt;
|-&lt;br /&gt;
| RAID5 || 1 || 1 || 2 to N-1 || (N-1)/N || 2/N&lt;br /&gt;
|-&lt;br /&gt;
| RAID6 || 1 || 2 || 3 to N-2 || (N-2)/N || 3/N&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====RAID 0====&lt;br /&gt;
 # mkfs.btrfs -d raid0 /dev/sda1 /dev/sdb1&lt;br /&gt;
&lt;br /&gt;
===== Montare il raid =====&lt;br /&gt;
 # mount /dev/sda1 /mnt&lt;br /&gt;
&lt;br /&gt;
(È equivalente a ''mount /dev/sdb1 /mnt'', il sistema riconosce che è presente un raid 0 e provvede al montaggio corretto dei dischi)&lt;br /&gt;
&lt;br /&gt;
Verifica del montaggio&lt;br /&gt;
 # btrfs filesystem show /mnt&lt;br /&gt;
&lt;br /&gt;
 Label: none  uuid: 4714fca3-bfcb-4130-ad2f-f560f2e12f8e&lt;br /&gt;
 Total devices 2 FS bytes used 27.75GiB&lt;br /&gt;
 devid    1 size 136.72GiB used 17.03GiB path /dev/sda1&lt;br /&gt;
 devid    2 size 136.72GiB used 17.01GiB path /dev/sdb1&lt;br /&gt;
&lt;br /&gt;
=====Aggiungere una partizione=====&lt;br /&gt;
 # btrfs device add /dev/sdc1 /mnt&lt;br /&gt;
&lt;br /&gt;
 # btrfs filesystem show /mnt&lt;br /&gt;
 Label: none  uuid: 4714fca3-bfcb-4130-ad2f-f560f2e12f8e&lt;br /&gt;
 Total devices 3 FS bytes used 27.75GiB&lt;br /&gt;
 devid    1 size 136.72GiB used 17.03GiB path /dev/sda1&lt;br /&gt;
 devid    2 size 136.72GiB used 17.01GiB path /dev/sdb1&lt;br /&gt;
 devid    3 size 136.72GiB used 0.00 path /dev/sdc1&lt;br /&gt;
&lt;br /&gt;
Adesso è necessario effettuare una redistribuzione dei dati sui tre dischi&lt;br /&gt;
 # btrfs balance start -d -m /mnt&lt;br /&gt;
&lt;br /&gt;
Per vedere a che punto del bilanciamento è arrivato il sistema&lt;br /&gt;
 # btrfs fi balance status /&lt;br /&gt;
&lt;br /&gt;
 # btrfs filesystem show /mnt&lt;br /&gt;
 Label: none  uuid: 4714fca3-bfcb-4130-ad2f-f560f2e12f8e&lt;br /&gt;
 Total devices 3 FS bytes used 27.78GiB&lt;br /&gt;
 devid    1 size 136.72GiB used 10.03GiB path /dev/sda1&lt;br /&gt;
 devid    2 size 136.72GiB used 10.03GiB path /dev/sdb1&lt;br /&gt;
 devid    3 size 136.72GiB used 11.00GiB path /dev/sdc1&lt;br /&gt;
&lt;br /&gt;
=====Rimuovere un device=====&lt;br /&gt;
 # btrfs device delete /dev/sdb1 /mnt&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
==== RAID 1 ====&lt;br /&gt;
=====Creazione di un raid1 ex novo===== &lt;br /&gt;
Copiare la tabella delle partizioni da sda a sdb&lt;br /&gt;
 # sfdisk -d /dev/sda | sfdisk /dev/sdb&lt;br /&gt;
&lt;br /&gt;
Creare il raid&lt;br /&gt;
 # mkfs.btrfs -d raid1 -m raid1 /dev/sda1 /dev/sdb1&lt;br /&gt;
&lt;br /&gt;
===== Aggiungere un mirror ad un disco esistente =====&lt;br /&gt;
 # btrfs device add /dev/sdb1 ''/punto_di_mount''&lt;br /&gt;
 # btrfs balance start -dconvert=raid1 -mconvert=raid1 ''/punto_di_mount''&lt;br /&gt;
&lt;br /&gt;
===== GRUB =====&lt;br /&gt;
Se si utilizza un raid1 per la partizione di sistema '''/''' e si vuole rendere Linux avviabile automaticamente anche in caso di danneggiamento o mancanza di uno dei due dischi del raid occorrerà che sul secondo disco sia clonata la partizione EFI o BIOS GRUB (es.: /dev/sda1) e che vi sia installato il bootloader.&lt;br /&gt;
 # dd if=/dev/sda1 of=/dev/sdb1&lt;br /&gt;
 # grub-install /dev/sdb&lt;br /&gt;
&lt;br /&gt;
=====Sostituzione device danneggiato=====&lt;br /&gt;
Verificare qual è il disco che dà dei problemi&lt;br /&gt;
 # mount /dev/sda1 ''/punto_di_mount'' -o degraded&lt;br /&gt;
 # btrfs device stats ''/punto_di_mount''&lt;br /&gt;
 # btrfs filesystem show ''/punto_di_mount''&lt;br /&gt;
 # btrfs device usage ''/punto_di_mount''&lt;br /&gt;
&lt;br /&gt;
Ipotizzando che '''1''' sia l'ID del disco danneggiato secondo i comandi dati in precedenza&lt;br /&gt;
 # btrfs replace start '''1''' /dev/sdc1 ''/punto_di_mount''&lt;br /&gt;
&lt;br /&gt;
Per monitorare lo stato di ripristino del raid&lt;br /&gt;
 # btrfs replace status ''/punto_di_mount''&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
 # btrfs device delete missing /mnt&lt;br /&gt;
&lt;br /&gt;
==== RAID 5 ====&lt;br /&gt;
{{Note&lt;br /&gt;
|type=warning &lt;br /&gt;
| text= '''ATTENZIONE il raid5 su BTRFS è considerato [https://btrfs.readthedocs.io/en/latest/btrfs-man5.html#raid56-status-and-recommended-practices non sicuro] e se ne sconsiglia il suo utilizzo'''&lt;br /&gt;
}}&lt;br /&gt;
==== RAID 1C ====&lt;br /&gt;
&lt;br /&gt;
===== RAID 1C3 =====&lt;br /&gt;
Se si desidera duplicare i dati rispettivamente 2 volte in modo da poter perdere fino a due dischi su 3 senza perdere dati è possibile utilizzare una modalità chiamata raid1c3&lt;br /&gt;
&lt;br /&gt;
Per creare ex novo il raid1c3&lt;br /&gt;
 # mkfs.btrfs -d raid1c3 -m raid1c3 /dev/sda1 /dev/sdb1 /dev/sdc1&lt;br /&gt;
&lt;br /&gt;
Per convertire a raid1c3&lt;br /&gt;
 # btrfs balance start -dconvert=raid1c3 -mconvert=raid1c3 /storage-btrfs/&lt;br /&gt;
&lt;br /&gt;
===== RAID 1C4 =====&lt;br /&gt;
Se si desidera duplicare i dati rispettivamente 3 volte in modo da poter perdere fino a 3 dischi su 4 senza perdere dati è possibile utilizzare una modalità chiamata raid1c4&lt;br /&gt;
&lt;br /&gt;
Per creare ex novo il raid1c3&lt;br /&gt;
 # mkfs.btrfs -d raid1c4 -m raid1c4 /dev/sda1 /dev/sdb1 /dev/sdc1&lt;br /&gt;
&lt;br /&gt;
Per convertire a raid1c4&lt;br /&gt;
 # btrfs balance start -dconvert=raid1c4 -mconvert=raid1c4 /storage-btrfs/&lt;br /&gt;
&lt;br /&gt;
== ZFS ==&lt;br /&gt;
===Installazione di modulo e le utility da AUR===&lt;br /&gt;
 # pacman-key -r F75D9D76&lt;br /&gt;
 # pacman-key --lsign-key F75D9D76&lt;br /&gt;
 $ pikaur -S zfs-utils zfs-dkms&lt;br /&gt;
&lt;br /&gt;
===Installazione di modulo e utility da archzfs===&lt;br /&gt;
Modificare le seguenti righe al file '''pacman.conf''' di archiso&lt;br /&gt;
 [archzfs-testing]&lt;br /&gt;
 Server = https://archzfs.com/$repo/$arch&lt;br /&gt;
&lt;br /&gt;
 # pacman-key -r DDF7DB817396A49B2A2723F7403BD972F75D9D76&lt;br /&gt;
 # pacman-key --lsign-key DDF7DB817396A49B2A2723F7403BD972F75D9D76&lt;br /&gt;
 # pacman -S zfs-utils zfs-linux&lt;br /&gt;
&lt;br /&gt;
===Configurare il FS===&lt;br /&gt;
[https://wiki.archlinux.org/title/ZFS Comandi] per ottenere informazioni utili sul filesystem e sui pool&lt;br /&gt;
 # zfs list -t  all&lt;br /&gt;
 # zpool status&lt;br /&gt;
 # zpool list&lt;br /&gt;
&lt;br /&gt;
Abilitare i vari servizi sul filesystem&lt;br /&gt;
 # systemctl enable zfs-zed.service&lt;br /&gt;
 # systemctl enable zfs-mount.service&lt;br /&gt;
 # systemctl enable zfs-share.service&lt;br /&gt;
 # systemctl enable zfs-import.target&lt;br /&gt;
 # systemctl enable zfs.target&lt;br /&gt;
&lt;br /&gt;
Creare un pool su un disco&lt;br /&gt;
 # zpool create &amp;quot;pool&amp;quot; sda&lt;br /&gt;
&lt;br /&gt;
Creare un pool su una partizione&lt;br /&gt;
 # zpool create &amp;quot;pool&amp;quot; sda2&lt;br /&gt;
&lt;br /&gt;
Importare un pool&lt;br /&gt;
 # zpool import &amp;quot;pool&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Aggiungere pool alla cache per auto-import e mount (abilitare i vari demoni zfs)&lt;br /&gt;
 # zpool set cachefile=/etc/zfs/zpool.cache &amp;quot;pool&amp;quot;&lt;br /&gt;
&lt;br /&gt;
oppure si possono caricare i mountpoint in modalità legacy dall'fstab&lt;br /&gt;
 # zfs create -o mountpoint=legacy ''pool''/directory&lt;br /&gt;
&lt;br /&gt;
Aggiungere la compressione&lt;br /&gt;
 # zfs get compression ''pool''&lt;br /&gt;
 # zfs set compression=lz4 ''pool''&lt;br /&gt;
&lt;br /&gt;
Vedere le proprietà di un ''pool''&lt;br /&gt;
 # zfs get all ''zpool''&lt;br /&gt;
&lt;br /&gt;
==== RAID ====&lt;br /&gt;
Creare un pool in raid0&lt;br /&gt;
 # zpool create &amp;quot;pool&amp;quot; /dev/sdb /dev/sdc&lt;br /&gt;
&lt;br /&gt;
Creare un pool in raid1&lt;br /&gt;
 # zpool create &amp;quot;pool&amp;quot; mirror /dev/sdb /dev/sc&lt;br /&gt;
&lt;br /&gt;
Creare un pool ''raid5'' su più dischi&lt;br /&gt;
 # zpool create &amp;quot;pool&amp;quot; raidz /dev/sdb /dev/sdc /dev/sdd&lt;br /&gt;
&lt;br /&gt;
Creare un pool raid5 su immagini&lt;br /&gt;
 # zpool create &amp;quot;pool&amp;quot; raidz /path/1.img /path/2.img /path/3.img&lt;br /&gt;
&lt;br /&gt;
* [https://docs.oracle.com/cd/E19253-01/819-5461/gbbvf/index.html Sostituire] disco in raid&lt;br /&gt;
&lt;br /&gt;
Rimuovere il disco da sostituire&lt;br /&gt;
 # zpool offline disco1&lt;br /&gt;
&lt;br /&gt;
Inserire il nuovo disco&lt;br /&gt;
 # zpool replace &amp;quot;pool&amp;quot; disco1&lt;br /&gt;
 # zpool online disco1&lt;br /&gt;
&lt;br /&gt;
* Utilizza un altro disco montato al posto di quello danneggiato&lt;br /&gt;
 # zpool replace &amp;quot;pool&amp;quot; disco1 disco2&lt;br /&gt;
&lt;br /&gt;
Aggiungere uno o più dischi ad un pool&lt;br /&gt;
 # zpool add &amp;quot;pool&amp;quot; mirror disco3 disco4&lt;br /&gt;
 # zpool add &amp;quot;pool&amp;quot; raidz disco3 disco4 disco5&lt;br /&gt;
&lt;br /&gt;
Rimuovere disco1 da pool se aggiunto erroneamente&lt;br /&gt;
 # zpool remove &amp;quot;pool&amp;quot; disco1&lt;br /&gt;
&lt;br /&gt;
Controllare lo stato di un pool&lt;br /&gt;
 # zpool status&lt;br /&gt;
&lt;br /&gt;
Correggere eventuali errori&lt;br /&gt;
 # zpool clear ''pool'' ''disco''&lt;br /&gt;
 # zpool scrub  ''pool''&lt;br /&gt;
&lt;br /&gt;
=== Root filesystem ===&lt;br /&gt;
* Guida ufficiale [https://openzfs.github.io/openzfs-docs/Getting%20Started/Arch%20Linux/Root%20on%20ZFS/1-preparation.html Root on ZFS]&lt;br /&gt;
&lt;br /&gt;
Per prima cosa organizzare la tabella delle partizioni del [[#Preparazione_del_disco | disco]]&lt;br /&gt;
&lt;br /&gt;
Formattare la partizione e creare il dataset (senza mountpoint)&lt;br /&gt;
 # zpool create -m none rpool ''sda2''&lt;br /&gt;
 &lt;br /&gt;
Smontare il pool e rimontarlo in modalità legacy &lt;br /&gt;
 # zfs create -o mountpoint=none rpool/ROOT&lt;br /&gt;
 # zfs create -o mountpoint=legacy rpool/ROOT/arch&lt;br /&gt;
 # zpool set bootfs=rpool/ROOT/arch rpool&lt;br /&gt;
 # mount -t zfs rpool/ROOT /mnt&lt;br /&gt;
''rpool'' è il nome che abbiamo voluto dare al volume contenente il filesystem di sistema&lt;br /&gt;
&lt;br /&gt;
NB: se NON si usa il mountpoint in modalità legacy occorrerà impostare &amp;lt;code&amp;gt;canmount=noauto&amp;lt;/code&amp;gt; su tutti i dataset con &amp;lt;code&amp;gt;mountpoint=/&amp;lt;/code&amp;gt; (es.: zfs create -o mountpoint=/ -o canmount=noauto rpool/ROOT/arch) altrimenti il sistema cercherà di eseguirne automaticamente l'automount e fallirà se esistono più filesystem da montare su /&lt;br /&gt;
&lt;br /&gt;
Se volessimo aggiungere altri pool es.:&lt;br /&gt;
 # zfs create rpool/home&lt;br /&gt;
 # zfs create rpool/arch/pkg&lt;br /&gt;
 # zfs create rpool/var&lt;br /&gt;
 # zfs create rpool/srv&lt;br /&gt;
&lt;br /&gt;
Configurare la cache degli zpool&lt;br /&gt;
 # zpool set cachefile=/etc/zfs/rpool.cache rpool &lt;br /&gt;
&lt;br /&gt;
Copiare il file di cache nel sistema dove dovremo eseguire il chroot per l'installazione.&lt;br /&gt;
 # mkdir -p /mnt/etc/zfs&lt;br /&gt;
 # cp /etc/zfs/rpool.cache /mnt/etc/zfs/rpool.cache&lt;br /&gt;
&lt;br /&gt;
Installare il sistema di base&lt;br /&gt;
 # pacstrap -K /mnt base linux linux-firmware zfs-utils zfs-linux&lt;br /&gt;
&lt;br /&gt;
Altri pacchetti consigliati&lt;br /&gt;
 # pacstrap -K /mnt base-devel net-tools networkmanager nano zsh grml-zsh-config busybox&lt;br /&gt;
&lt;br /&gt;
Eseguire il chroot per procedere con l'installazione&lt;br /&gt;
 # arch-chroot /mnt&lt;br /&gt;
&lt;br /&gt;
Configurare il mountpoint su fstab&lt;br /&gt;
/etc/fstab &lt;br /&gt;
 rpool/ROOT/arch      /       zfs         noatime     0 0&lt;br /&gt;
&lt;br /&gt;
Editare il file /etc/mkinitcpio.conf aggiungendo zfs prima del filesystem&lt;br /&gt;
 HOOKS=&amp;quot;base udev autodetect modconf block keyboard zfs filesystems&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Abilitare i servizi per ZFS all'avvio&lt;br /&gt;
 # systemctl enable zfs-zed.service&lt;br /&gt;
 # systemctl enable zfs-mount.service&lt;br /&gt;
 # systemctl enable zfs-share.service&lt;br /&gt;
 # systemctl enable zfs-import.target&lt;br /&gt;
 # systemctl enable zfs.target&lt;br /&gt;
&lt;br /&gt;
Impostare una password di root&lt;br /&gt;
 # passwd&lt;br /&gt;
&lt;br /&gt;
Ricreare il ramdisk col supporto per ZFS&lt;br /&gt;
 # mkinitcpio -p linux&lt;br /&gt;
&lt;br /&gt;
Installare il [[Appunti_Arch_Linux#BOOT_LOADER|Boot Loader]]&lt;br /&gt;
&lt;br /&gt;
Uscire dal chroot e terminazione dell'installazione&lt;br /&gt;
 # exit&lt;br /&gt;
 # zfs unmount -a&lt;br /&gt;
 # cp /etc/zfs/rpool.cache /mnt/etc/zfs/rpool.cache&lt;br /&gt;
 # zpool export rpool&lt;br /&gt;
 # reboot&lt;br /&gt;
&lt;br /&gt;
==== BOOT LOADER ====&lt;br /&gt;
===== ZFSBootMenu =====&lt;br /&gt;
Per gestire a meglio gli snapshot e la clonazione dei pool è consigliabile utilizzare, su PC che supportano UEFI, il boot loader [https://docs.zfsbootmenu.org/en/latest/guides/alpine/uefi.html ZFSBootMenu].&lt;br /&gt;
&lt;br /&gt;
Esportiamo le variabile per configurare il primo disco /dev/sda come disco di avvio&lt;br /&gt;
 # export BOOT_DISK=&amp;quot;/dev/sda&amp;quot;&lt;br /&gt;
 # export BOOT_PART=&amp;quot;1&amp;quot;&lt;br /&gt;
 # export BOOT_DEVICE=&amp;quot;${BOOT_DISK}${BOOT_PART}&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Assicuriamoci che il nostro pool di root sia configurato come avviabile&lt;br /&gt;
 # zpool set bootfs=''rpool/ROOT/'' ''rpool''&lt;br /&gt;
&lt;br /&gt;
Formattiamo sda1 per creare la partizione EFI di boot&lt;br /&gt;
 # mkfs.vfat -F32 &amp;quot;$BOOT_DEVICE&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Aggiungiamola all'fstab e montiamola&lt;br /&gt;
 # cat &amp;lt;&amp;lt; EOF &amp;gt;&amp;gt; /etc/fstab&lt;br /&gt;
 $BOOT_DEVICE /boot/efi vfat defaults 0 0&lt;br /&gt;
 EOF&lt;br /&gt;
&lt;br /&gt;
 # mkdir -p /boot/efi&lt;br /&gt;
 # mount /boot/efi&lt;br /&gt;
&lt;br /&gt;
Scarichiamo ed installiamo il boot loader&lt;br /&gt;
 # mkdir -p /boot/efi/EFI/ZBM&lt;br /&gt;
 # curl -o /boot/efi/EFI/ZBM/VMLINUZ.EFI -L https://get.zfsbootmenu.org/efi&lt;br /&gt;
 # cp /boot/efi/EFI/ZBM/VMLINUZ.EFI /boot/efi/EFI/ZBM/VMLINUZ-BACKUP.EFI&lt;br /&gt;
&lt;br /&gt;
Forziamo zfsbootmenu a montare il nostro dataset con i permessi di scrittura&lt;br /&gt;
 # zfs set org.zfsbootmenu:commandline=&amp;quot;quiet loglevel=4 rw&amp;quot; rpool/ROOT&lt;br /&gt;
&lt;br /&gt;
Installiamo e configuriamo  ''efibootmgr''&lt;br /&gt;
 # pacman -S efibootmgr&lt;br /&gt;
&lt;br /&gt;
 # efibootmgr -c -d &amp;quot;$BOOT_DISK&amp;quot; -p &amp;quot;$BOOT_PART&amp;quot; \&lt;br /&gt;
  -L &amp;quot;ZFSBootMenu (Backup)&amp;quot; \&lt;br /&gt;
  -l \\EFI\\ZBM\\VMLINUZ-BACKUP.EFI&lt;br /&gt;
&lt;br /&gt;
 # efibootmgr -c -d &amp;quot;$BOOT_DISK&amp;quot; -p &amp;quot;$BOOT_PART&amp;quot; \&lt;br /&gt;
  -L &amp;quot;ZFSBootMenu&amp;quot; \&lt;br /&gt;
  -l \\EFI\\ZBM\\VMLINUZ.EFI&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Se si utilizza un pool distribuito su più dischi (RAID1 o RAIDZ) occorrerà installare il bootloader anche sugli altri dispositivi (nel caso del disco /dev/sdb).&lt;br /&gt;
&lt;br /&gt;
 # mount /dev/sdb1 /boot/efi&lt;br /&gt;
 # curl -o /boot/efi/EFI/ZBM/VMLINUZ.EFI -L https://get.zfsbootmenu.org/efi&lt;br /&gt;
 # efibootmgr -c -d &amp;quot;$BOOT_DISK&amp;quot; -p &amp;quot;$BOOT_PART&amp;quot; \&lt;br /&gt;
  -L &amp;quot;ZFSBootMenu sdb&amp;quot; \&lt;br /&gt;
  -l \\EFI\\ZBM\\VMLINUZ.EFI&lt;br /&gt;
&lt;br /&gt;
===== GRUB =====&lt;br /&gt;
Se non ci interessa gestire snapshot o utilizziamo un PC con BIOS è possibile optare per GRUB &lt;br /&gt;
 # pacman -S grub&lt;br /&gt;
 # grub-install /dev/sda&lt;br /&gt;
 (se si usa un pool composto da più dischi es. raidz per il filesystem di root è consigliabile installare grub su tutti i dischi: sda, sdb, sdc, sdd...)&lt;br /&gt;
 # grub-mkconfig -o /boot/grub/grub.cfg&lt;br /&gt;
&lt;br /&gt;
Esempio&lt;br /&gt;
 #Grub entry&lt;br /&gt;
 menuentry 'Arch Linux'{&lt;br /&gt;
       insmod gzio&lt;br /&gt;
       insmod part_gpt&lt;br /&gt;
       insmod zfs&lt;br /&gt;
       set root='hd0,gpt3'&lt;br /&gt;
        echo    'Loading Linux linux ...'&lt;br /&gt;
        linux   /ROOT@/boot/vmlinuz-linux root=ZFS=rpool/ROOT rw  loglevel=3 quiet&lt;br /&gt;
        echo    'Loading initial ramdisk ...'&lt;br /&gt;
        initrd  /ROOT@/boot/initramfs-linux.img&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
=== Snapshot ===&lt;br /&gt;
Snapshot del dataset ROOT&lt;br /&gt;
 # zfs snapshot -r rpool/ROOT''@snapshot-2023-03-07''&lt;br /&gt;
&lt;br /&gt;
Lista degli snapshot presenti&lt;br /&gt;
 # zfs list -t snapshot&lt;br /&gt;
&lt;br /&gt;
Ripristino dello snapshot&lt;br /&gt;
 # zfs rollback rpool''@snapshot-2023-03-07''&lt;br /&gt;
&lt;br /&gt;
Oltre che servire per il ripristino, possono essere montati per esplorarne il contenuto, ma non è possibile modificarlo.&lt;br /&gt;
 # mount -t zfs rpool@''2023-04-11'' /mnt/''snapshot''&lt;br /&gt;
&lt;br /&gt;
Copia locale di un dataset&lt;br /&gt;
 # zfs send -R rpool/ROOT''@snapshot-2023-03-07'' | zfs recv -F rpool/ROOT/backup&lt;br /&gt;
&lt;br /&gt;
Invio via SSH di una snapshot&lt;br /&gt;
 # zfs send -R rpool/ROOT''@snapshot-2023-03-07''| ssh ''user@ip_address'' zfs recv tank/backups/rootzfs&lt;br /&gt;
&lt;br /&gt;
Backup locale di una snapshot&lt;br /&gt;
 # zfs send -R rpool/ROOT@snapshot | gzip &amp;gt; /tmp/zfs_backup.gz&lt;br /&gt;
&lt;br /&gt;
Restore del backup&lt;br /&gt;
 # gzcat /tmp/zfs_backup.gz | zfs recv -F rpool/ROOT&lt;br /&gt;
&lt;br /&gt;
==== Clone ====&lt;br /&gt;
Se vogliamo eseguire operazioni di scrittura su una snapshot occorre effettuare un clone del dataset&lt;br /&gt;
 # zfs snapshot ''rpool/home''@yesterday&lt;br /&gt;
 # zfs clone ''rpool/home''@yesterday rpool/new_home&lt;br /&gt;
&lt;br /&gt;
Per sostituire il filesystem principale col clone&lt;br /&gt;
 # zfs promote rpool/new_home&lt;br /&gt;
&lt;br /&gt;
=== ZFS Cifrato ===&lt;br /&gt;
Creare un dataset cifrato con password&lt;br /&gt;
 # zfs create -o encryption=on -o keyformat=''password'' ''nomepool''/''nomedataset''&lt;br /&gt;
&lt;br /&gt;
Generazione di una chiave di cifratura&lt;br /&gt;
 # dd if=/dev/random of=/path/to/key bs=1 count=32&lt;br /&gt;
&lt;br /&gt;
Creare un dataset cifrato con una chiave di cifratura &lt;br /&gt;
 # zfs create -o encryption=on -o keyformat=raw -o keylocation=''file:///directory/della/chiave'' ''nomepool''/''nomedataset''&lt;br /&gt;
&lt;br /&gt;
Controllare il percorso della chiave per ''nomepool''/''nomedataset''&lt;br /&gt;
 # zfs get keylocation ''nomepool''/''nomedataset''&lt;br /&gt;
&lt;br /&gt;
Cambiare il percorso della chiave&lt;br /&gt;
 # zfs set keylocation=''file:///nuova/directory/della/chiave'' ''nomepool''/''nomedataset''&lt;br /&gt;
&lt;br /&gt;
Caricare manualmente le chiavi di cifratura prima del montaggio&lt;br /&gt;
 # zfs load-key ''nomepool''/''nomedataset'' # carica la chiave del determinato dataset&lt;br /&gt;
 # zfs load-key -a # carica tutte le chiavi del filesystem&lt;br /&gt;
&lt;br /&gt;
==== Unlock con systemd ====&lt;br /&gt;
Creare script per il caricamento delle chiavi all'avvio &lt;br /&gt;
&lt;br /&gt;
* Caricando la password dal keyfile&lt;br /&gt;
''/etc/systemd/system/zfs-loadkey-file.service''&lt;br /&gt;
&lt;br /&gt;
 [Unit]&lt;br /&gt;
 Description=Load ZFS encryption keys&lt;br /&gt;
 DefaultDependencies=no&lt;br /&gt;
 After=zfs-import.target&lt;br /&gt;
 Before=zfs-mount.service&lt;br /&gt;
 [Service]&lt;br /&gt;
 Type=oneshot&lt;br /&gt;
 RemainAfterExit=yes&lt;br /&gt;
 ExecStart=/usr/sbin/zfs load-key -a&lt;br /&gt;
 StandardInput=tty-force&lt;br /&gt;
 [Install]&lt;br /&gt;
 WantedBy=zfs-mount.service&lt;br /&gt;
&lt;br /&gt;
* Digitando la password&lt;br /&gt;
&lt;br /&gt;
''/etc/systemd/system/zfs-load-key@.service''&lt;br /&gt;
 [Unit]&lt;br /&gt;
 Description=Load %I encryption keys&lt;br /&gt;
 Before=systemd-user-sessions.service zfs-mount.service&lt;br /&gt;
 After=zfs-import.target&lt;br /&gt;
 Requires=zfs-import.target&lt;br /&gt;
 DefaultDependencies=no&lt;br /&gt;
 [Service]&lt;br /&gt;
 Type=oneshot&lt;br /&gt;
 RemainAfterExit=yes&lt;br /&gt;
 ExecStart=/bin/sh -c 'until (systemd-ask-password &amp;quot;Encrypted ZFS password for %I&amp;quot; --no-tty | zfs load-key %I); do echo &amp;quot;Try again!&amp;quot;; done'&lt;br /&gt;
 [Install]&lt;br /&gt;
 WantedBy=zfs-mount.service&lt;br /&gt;
&lt;br /&gt;
==== Unlock al login ====&lt;br /&gt;
Impostare il filesystem in modalità legacy così che non sia montato automaticamente all'avvio&lt;br /&gt;
 # zfs set mountpoint=legacy zroot/data/&lt;br /&gt;
&lt;br /&gt;
Modificare il file /etc/fstab&lt;br /&gt;
 zroot/data/         /home           zfs             rw,xattr,posixacl,noauto        0 0&lt;br /&gt;
&lt;br /&gt;
Creare il seguente script: &amp;lt;code&amp;gt;/sbin/mount-zfs-homedir&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 #&lt;br /&gt;
 set -eu&lt;br /&gt;
 # Password is given to us via stdin, save it in a variable for later&lt;br /&gt;
 PASS=$(cat -)&lt;br /&gt;
 #&lt;br /&gt;
 VOLNAME=&amp;quot;zroot/data/home&amp;quot;&lt;br /&gt;
 #&lt;br /&gt;
 # Unlock and mount the volume&lt;br /&gt;
 zfs load-key &amp;quot;$VOLNAME&amp;quot; &amp;lt;&amp;lt;&amp;lt; &amp;quot;$PASS&amp;quot; || continue&lt;br /&gt;
 zfs mount &amp;quot;$VOLNAME&amp;quot; || true # ignore errors&lt;br /&gt;
&lt;br /&gt;
Aggiungere lo script a PAM: /etc/pam.d/system-auth&lt;br /&gt;
&lt;br /&gt;
 auth       optional                    pam_exec.so          expose_authtok /sbin/mount-zfs-homedir&lt;br /&gt;
&lt;br /&gt;
=== Cache ===&lt;br /&gt;
Utilizzare un moderno disco a stato solido può essere una soluzione economica per velocizzare un pool, eventualmente anche raid&lt;br /&gt;
&lt;br /&gt;
 # zpool add -f ''rpool'' cache /dev/sdd1&lt;br /&gt;
 # zpool add -f ''rpool'' log /dev/sdd2&lt;br /&gt;
&lt;br /&gt;
=== Sharing ===&lt;br /&gt;
Non è molto noto, ma ZFS ha integrati dei [https://docs.oracle.com/cd/E36784_01/html/E36835/gayne.html#scrolltoc comandi] per permettere la condivisione del filesystem con altre macchine tramite i protocolli NFS o SMB.&lt;br /&gt;
&lt;br /&gt;
Premessa: occorrerà attivare il server NFS&lt;br /&gt;
 # systemctl start nfs-server.service&lt;br /&gt;
 # systemctl enable nfs-server.service&lt;br /&gt;
&lt;br /&gt;
Condividere tramite NFS l'intero pool ''home''&lt;br /&gt;
 # zfs set share.nfs=on ''pool''/home&lt;br /&gt;
&lt;br /&gt;
Verificare la condivisione&lt;br /&gt;
 # zfs get -r share.nfs ''pool''/home&lt;br /&gt;
 NAME             PROPERTY   VALUE  SOURCE&lt;br /&gt;
 pool/home        share.nfs  on     local&lt;br /&gt;
&lt;br /&gt;
Condividere tramite NFS la directory home dell'utente 1, 2...&lt;br /&gt;
 # zfs create ''pool''/home/'''utente1'''&lt;br /&gt;
 # zfs create ''pool''/home/'''utente2'''&lt;br /&gt;
&lt;br /&gt;
Si possono specificare opzioni di montaggio per i permessi sul mount&lt;br /&gt;
 # zfs set share.nfs.nosuid=on ''pool''/home/'''utente1'''&lt;br /&gt;
 # zfs set share.nfs=on ''pool''/home/'''utente1'''&lt;br /&gt;
&lt;br /&gt;
Condividere una directory con tutta la rete&lt;br /&gt;
 # zfs share -o share.nfs=on -o share.nfs.public=on pool/public%pubshare&lt;br /&gt;
&lt;br /&gt;
Condividere una directory con una parte della rete&lt;br /&gt;
 # zfs set share.nfs='rw=@192.0.10.0/16,rw=@192.0.11.0/24' pool/public%pubshare&lt;br /&gt;
&lt;br /&gt;
Disabilitare temporaneamente una condivisione&lt;br /&gt;
 # zfs unshare pool/home/''nomeshare''&lt;br /&gt;
&lt;br /&gt;
Rimuovere una condivisione&lt;br /&gt;
 # zfs set share.nfs=off pool/''share''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Montare share ===&lt;br /&gt;
Montare il volume pool1 della macchina con IP 192.168.0.2 su /mnt/pool1&lt;br /&gt;
 # mount -t nfs 192.168.0.2:/pool1 /mnt/pool1&lt;br /&gt;
&lt;br /&gt;
Aggiungere la seguente riga al file '''/etc/fstab''' per automatizzare il montaggio&lt;br /&gt;
 192.168.0.2:/pool1      /mnt/pool1      nfs       defaults          0          0&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== SWAP ===&lt;br /&gt;
Creare una partizione swap da 8 GiB&lt;br /&gt;
 # zfs create -V 8G '''&amp;lt;pool&amp;gt;/swap'''&lt;br /&gt;
&lt;br /&gt;
Formattazione della partizione&lt;br /&gt;
 # mkswap -f /dev/zvol/&amp;lt;pool&amp;gt;/swap&lt;br /&gt;
&lt;br /&gt;
Attivazione della swap&lt;br /&gt;
 # swapon /dev/zvol/&amp;lt;pool&amp;gt;/swap&lt;br /&gt;
&lt;br /&gt;
Aggiungere la swap al &amp;lt;code&amp;gt;/etc/fstab&amp;lt;/code&amp;gt;&lt;br /&gt;
 '''/dev/zvol/&amp;lt;pool&amp;gt;/swap''' none swap discard 0 0&lt;br /&gt;
&lt;br /&gt;
== Filesystem Cifrato ==&lt;br /&gt;
Esistono molti modi per cifrare volumi e file su Linux, come si può vedere da questa [https://wiki.archlinux.org/title/Data-at-rest_encryption#Comparison_table tabella]&lt;br /&gt;
&lt;br /&gt;
* Generare una password di 32 caratteri alfanumerici con /dev/random. &lt;br /&gt;
 cat /dev/random | tr -dc '[:alnum:]' | fold -w 32 | head -n 1&lt;br /&gt;
&lt;br /&gt;
=== EncFS ===&lt;br /&gt;
Cifrare una directory può essere un'alternativa alla cifratura di un intera partizione come avviene invece con Cryptsetup. EncFS è un filesystem user-space montabile tramite FUSE che permette di effettuare questa operazione. Rispetto ad un filesystem loopback criptato ci sono però diversi pregi e difetti.&lt;br /&gt;
&lt;br /&gt;
* Pro&lt;br /&gt;
# Selezionare selettivamente i contenuti da cifrare, rispetto ad avere un device completamente cifrato, appesantisce meno il lavoro della CPU specialmente quando si utilizzano processori datati privi del set di istruzioni AES.&lt;br /&gt;
# Dimensioni modificabili: un file system vuoto EncFS è composto da qualche dozzina di byte e può crescere a qualsiasi dimensione senza bisogno di essere riformattato. Con un dispositivi di cifratura a blocchi, si alloca un filesystem in anticipo con le dimensioni desiderate.&lt;br /&gt;
# Possibilità di backup incrementali: Un filesystem EncFS può essere salvato con una politica per file. Un programma di backup è in grado di rilevare quali file sono cambiati, anche se non sarà in grado di decifrarli.&lt;br /&gt;
# Permette di aggiungere la crittografia a qualsiasi filesystem&lt;br /&gt;
# Lavora a livello utente, non richiede permessi di amministratore&lt;br /&gt;
&lt;br /&gt;
* Contro&lt;br /&gt;
# Non permette di cifrare l'intera installazione, ma solo i file selezionati&lt;br /&gt;
# Chi ha accesso ai file crittografati può conoscerne i meta-dati (numero di file, permessi, dimensione)&lt;br /&gt;
# EncFS sembra non sia più attivamente mantenuto. Un'alternativa molto simile potrebbe essere gocryptfs.&lt;br /&gt;
&lt;br /&gt;
==== Montaggio automatico ====&lt;br /&gt;
Dato che non è possibile passare opzioni all'eseguibile encfs su fstab è necessario creare un wrapper, cioè uno script da rendere eseguibile (es. &amp;lt;code&amp;gt;/home/user/encfs.sh&amp;lt;/code&amp;gt;) che vada a recuperare la password da un file (es. ''encfs_password''), magari contenuto in una chiavetta USB anch'essa montata automaticamente all'avvio.&lt;br /&gt;
&lt;br /&gt;
Wrapper&lt;br /&gt;
 #!/bin/sh&lt;br /&gt;
 encfs --public --extpass=&amp;quot;cat /mnt/USB/encfs_password&amp;quot; $*&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
A questo punto è possibile aggiungere all'''/etc/fstab'' le seguenti righe.&lt;br /&gt;
 # Montaggio automatico della penna USB ''cafebabe-b00b5-deadbee'' all'avvio&lt;br /&gt;
 UUID=cafebabe-b00b5-deadbeef /mnt/USB auto defaults,auto 0 0&lt;br /&gt;
 # Richiamo del wrapper &lt;br /&gt;
 /home/''user''/encfs.sh#/home/''user''/.encrypted /home/''user''/decrypted fuse rw,user,auto 0 0&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== gocryptfs ===&lt;br /&gt;
Creare una directory cifrata ''crypt'' e montarla su ''dati''&lt;br /&gt;
 $ mkdir crypt dati&lt;br /&gt;
 $ gocryptfs -init crypt&lt;br /&gt;
 $ gocryptfs crypt dati&lt;br /&gt;
&lt;br /&gt;
Creare una versione cifrata di una preesistente home&lt;br /&gt;
&lt;br /&gt;
 $ mkdir /home/user.crypt&lt;br /&gt;
 $ gocryptfs -init -reverse /home/user&lt;br /&gt;
 $ gocryptfs -reverse /home/user /home/user.crypt&lt;br /&gt;
&lt;br /&gt;
È possibile aggiungere una linea simile alle seguente al file '''/etc/fstab''' per automatizzare il sistema di montaggio di una cartella cifrata durante il boot utilizzando un keyfile.&lt;br /&gt;
&lt;br /&gt;
 /home/user/cipher /home/user/plain fuse./usr/bin/gocryptfs nofail,allow_other,passfile=/tmp/password 0 0&lt;br /&gt;
&lt;br /&gt;
=== [https://wiki.archlinux.org/title/ECryptfs ECryptfs] ===&lt;br /&gt;
&lt;br /&gt;
=== VeraCrypt ===&lt;br /&gt;
[https://www.veracrypt.fr VeraCrypt] (fork di TrueCrypt) è un tool opensource dotato di '''interfaccia grafica''' che permette di configurare la cifratura di volumi reali o file immagini montate in loop. Ha una funzione particolare, chiamata '''Hidden Volume''' che permette di creare un volume nascosto all'interno di un normale volume VeraCrypt al quale si può accedere con una diversa password così da evitare in caso di necessità (ricatto, fidanzata/moglie gelosa, imposizione da parte delle forze dell'ordine) di mostrare il contenuto del reale archivio cifrato.&lt;br /&gt;
&lt;br /&gt;
=== LUKS ===&lt;br /&gt;
Questo strumento permette di crittografare un intero disco o una partizione, es. /dev/'''sdc2''':&lt;br /&gt;
 &lt;br /&gt;
 # cryptsetup luksFormat --cipher aes-xts-plain64 --key-size 512 --hash sha512 --iter-time 5000 /dev/'''sdc2'''&lt;br /&gt;
 &lt;br /&gt;
Una volta formattato il device è possibile montarlo, verrà chiesto di creare una password a meno che nel comando non venga esplicitato un file con la chiave di cifratura&lt;br /&gt;
 # cryptsetup open /dev/'''sdc2''' lukspart&lt;br /&gt;
&lt;br /&gt;
Adesso è possibile formattare il device col filesystem che preferiamo&lt;br /&gt;
 # mkfs.btrfs /dev/mapper/lukspart&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[https://wiki.golem.linux.it/Installare_Arch_Linux_in_una_partizione_cifrata How-to GOLEM]&lt;br /&gt;
&lt;br /&gt;
[https://guide.debianizzati.org/index.php/Volumi_criptati_LUKS_-_Creazione_e_uso_con_cryptmount How-to Debianizzati]&lt;br /&gt;
&lt;br /&gt;
=== [https://wiki.archlinux.org/title/Fscrypt FScrypt] ===&lt;br /&gt;
È un sistema di cifratura progettato per lavorare con filesystem moderni che supportano direttamente la crittografia nativa come ext4, F2FS, UBIFS, CephFS e forse in futuro anche btrfs. &lt;br /&gt;
&lt;br /&gt;
Abilitiamo la crittografia su una directory di un device '''sdc1''' precedentemente formattato con ext4&lt;br /&gt;
 # fscrypt setup /mnt/encrypted&lt;br /&gt;
 # tune2fs -O encrypt /dev/'''sdc1'''&lt;br /&gt;
 # fscrypt encrypt /mnt/encrypted&lt;br /&gt;
&lt;br /&gt;
Per accedere alla directory al riavvio successivo&lt;br /&gt;
 # fscrypt unlock /mnt/encrypted &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[https://wiki.archlinux.org/title/Fscrypt How-to Arch]&lt;br /&gt;
&lt;br /&gt;
=== [[Appunti_Arch_Linux#ZFS_Cifrato|ZFS]] ===&lt;br /&gt;
&lt;br /&gt;
= RAID mdadm =&lt;br /&gt;
Su Linux era possibile effettuare RAID via software anche prima dell'avvento di filesystem di nuova generazione come btrfs o zfs. Per fare ciò è possibile utilizzare il comando &amp;lt;code&amp;gt;mdadm&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Vedere l'organizzazione della tabella delle partizioni dei dischi&lt;br /&gt;
 $ lsblk&lt;br /&gt;
&lt;br /&gt;
 sda      8:16   0 447.1G  0 disk &lt;br /&gt;
 ├─sda1   8:17   0   500M  0 part &lt;br /&gt;
 ├─sda2   8:18   0    16G  0 part [SWAP]&lt;br /&gt;
 └─sda3   8:19   0 430.6G  0 part /&lt;br /&gt;
                                 &lt;br /&gt;
 sdb      8:32   1   3.7G  0 disk &lt;br /&gt;
 ├─sdb1   8:33   1   3.5G  0 part &lt;br /&gt;
 ├─sdb2   8:34   1   239M  0 part [SWAP]&lt;br /&gt;
 └─sdb3   8:19   0 430.6G  0 part /&lt;br /&gt;
&lt;br /&gt;
Nell'esempio ci sono due dischi (sda, sdb) contenenti 3 partizioni: EFI, SWAP e Linux.&lt;br /&gt;
&lt;br /&gt;
== RAID 0 ==&lt;br /&gt;
Creare un volume ''md3'' che costituito dalla somma delle due partizioni sda3 e sdb3&lt;br /&gt;
 # mdadm --create --verbose /dev/md3 --level=0 --raid-devices=2 /dev/sda3 /dev/sdb3&lt;br /&gt;
&lt;br /&gt;
Verificare che il raid funzioni correttamente&lt;br /&gt;
 # mdadm --detail /dev/md0&lt;br /&gt;
&lt;br /&gt;
Utilizzare il nuovo volume md3, formattato col filesystem XFS, per una nuova installazione di Arch Linux (montandolo in /mnt)&lt;br /&gt;
 # mkfs.xfs /dev/md3&lt;br /&gt;
 # mount /dev/md3 /mnt/&lt;br /&gt;
&lt;br /&gt;
Per memorizzare l'array nel file di configurazione&lt;br /&gt;
 # mdadm –Es &amp;gt; /etc/mdadm.conf&lt;br /&gt;
&lt;br /&gt;
== RAID 1 ==&lt;br /&gt;
Creare un volume ''md3'' mirror delle due partizioni sda3 e sdb3&lt;br /&gt;
 # mdadm --create /dev/md3 /dev/sda3 /dev/sdb3 --level=1 --raid-devices=2&lt;br /&gt;
&lt;br /&gt;
== RAID 5 ==&lt;br /&gt;
Creare un volume ''md3'' con un [https://en.wikipedia.org/wiki/Standard_RAID_levels#RAID_5 raid5], ovviamente stavolta occorreranno almeno 3 dischi es.: sda3, sdb3, sdc3. &lt;br /&gt;
&lt;br /&gt;
Per creare tre partizioni tutte della stessa dimensione è possibile copiare su sdb e sdc la tabella delle partizioni di sda&lt;br /&gt;
 #  sfdisk -d /dev/sda | sfdisk /dev/sdb&lt;br /&gt;
 #  sfdisk -d /dev/sda | sfdisk /dev/sdc&lt;br /&gt;
&lt;br /&gt;
Creare l'array in raid5&lt;br /&gt;
 # mdadm --create /dev/md/md3 /dev/sda1 /dev/sdb1 /dev/sdc1 --level=5 --raid-devices=3 --bitmap=internal&lt;br /&gt;
&lt;br /&gt;
== Modificare l'array ==&lt;br /&gt;
È possibile passare da raid1 a raid5&lt;br /&gt;
 # mdadm --grow /dev/md3 --level=5&lt;br /&gt;
 # mdadm --grow /dev/md3 --add /dev/sdc3 --raid-devices=3&lt;br /&gt;
&lt;br /&gt;
== Accorgersi di un guasto ==&lt;br /&gt;
Nei raid 1 e 5 in caso di danneggiamento di un disco sarà possibile sostituirlo e ricostruire l'array senza perdere dati. Nell'ipotesi di avere un guasto su '''sdb''' in un raid1 comparirà qualcosa di simile a questo eseguendo &amp;lt;code&amp;gt;cat /proc/mdstat&amp;lt;/code&amp;gt;&lt;br /&gt;
 md3 : active raid1 sda3[1]&lt;br /&gt;
 ''blocks [2/2] [U_]'' &lt;br /&gt;
invece che&lt;br /&gt;
 md3 : active raid1 sda3[1] '''sdb3'''[0]&lt;br /&gt;
      262016 blocks [2/2] [UU]&lt;br /&gt;
&lt;br /&gt;
===Rimuovere il disco danneggiato dal RAID===&lt;br /&gt;
Si dovrà marcare sdb3 come danneggiata e andrà rimossa dall'array.&lt;br /&gt;
 # mdadm --manage /dev/md3 --fail /dev/sdb3&lt;br /&gt;
 # mdadm --manage /dev/md3 --remove /dev/sdb3&lt;br /&gt;
&lt;br /&gt;
Se avessimo più array (es. md1, md2...) contenenti partizioni del disco sdb (sdb1, sdb2...), l'operazione andrebbe ripetuta per ciascuno di essi es.:&lt;br /&gt;
 # mdadm --manage /dev/md1 --fail /dev/sdb1&lt;br /&gt;
 # mdadm --manage /dev/md1 --remove /dev/sdb1&lt;br /&gt;
&lt;br /&gt;
 #  cat /proc/mdstat&lt;br /&gt;
 Personalities : [linear] [multipath] [raid0] [raid1] [raid5] [raid4] [raid6] [raid10]&lt;br /&gt;
 md0 : active raid1 sda3[0]&lt;br /&gt;
 24418688 blocks [2/1] [U_]&lt;br /&gt;
&lt;br /&gt;
 unused devices: &amp;lt;none&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Sostituzione del disco danneggiato ===&lt;br /&gt;
Spegnere il computer, rimuovere il disco guasto e collegarne al suo posto uno funzionante.&lt;br /&gt;
&lt;br /&gt;
'''NB: il nuovo disco dovrà essere di dimensioni uguali o maggiori del disco sostituito'''&lt;br /&gt;
&lt;br /&gt;
Installato il nuovo disco, riaccendere il PC, loggarsi come root e ricreare sul nuovo sdb le stesse partizioni presenti su sda:&lt;br /&gt;
 # sfdisk -d /dev/sda | sfdisk /dev/sdb&lt;br /&gt;
 # fdisk -l ''(per controllare che le partizioni siano uguali)''&lt;br /&gt;
&lt;br /&gt;
=== Ripristino del RAID 1 ===&lt;br /&gt;
Aggiungere ''/dev/sdb3'' a ''/dev/md3''&lt;br /&gt;
 # mdadm --manage /dev/md3 --add /dev/sdb3&lt;br /&gt;
&lt;br /&gt;
Se avessimo più array (es. md1, md2...) contenenti partizioni del disco sdb (sdb1, sdb2...), l'operazione andrebbe ripetuta per ciascuno di essi es.:&lt;br /&gt;
  # mdadm --manage /dev/md1 --add /dev/sdb1&lt;br /&gt;
&lt;br /&gt;
Controllare che tutto sia andato a buon fine&lt;br /&gt;
 # cat /proc/mdstat&lt;br /&gt;
&lt;br /&gt;
= LVM =&lt;br /&gt;
Il [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 Logical Volume Manager] (LVM o gestore logico dei volumi) è un software per la gestione dei dischi che permette di superare le limitazioni legate al normale partizionamento di questi ultimi. Si tratta di una specie di ''strato'' che si va a frapporre tra il dispositivo fisico ed il filesystem. Permette di gestire dinamicamente aggiunta, rimozione o ridimensionamento dello spazio di archiviazione, il RAID, nonché lo snapshot dei volumi.&lt;br /&gt;
&lt;br /&gt;
LVM è un prodotto oltremodo maturo, disponibile per Linux sin dal kernel 2.4, per questa ragione distribuzioni orientate al mercato aziendale come RedHat lo hanno scelto, accoppiandolo a XFS o ext4, come soluzione predefinita per implementare la maggior parte delle caratteristiche fornite dai moderni filesystem come BTRFS o ZFS &lt;br /&gt;
&lt;br /&gt;
LVM si basa sui seguenti concetti&lt;br /&gt;
&lt;br /&gt;
* '''Physical Volumes (PV)''': rappresentano qualsiasi disco si voglia inizializzare (&amp;quot;formattare&amp;quot;) come sottosistema LVM&lt;br /&gt;
 # pvcreate /dev/sda1&lt;br /&gt;
 # pvcreate /dev/sdb3&lt;br /&gt;
 # pvcreate /dev/sdc&lt;br /&gt;
 # pvdisplay&lt;br /&gt;
&lt;br /&gt;
* '''Volume Groups (VG)''': sono costituiti da ''physical volumes'' e rappresentano la capacità totale delle risorse di un LVM&lt;br /&gt;
 # vgcreate vg0 /dev/sda1 /dev/sdb3 /dev/sdc&lt;br /&gt;
 # vgdisplay vg0&lt;br /&gt;
&lt;br /&gt;
* '''Logical Volumes (LV)''': utilizzano le risorse messe a disposizione dai ''volume groups''. Possono essere inizializzati anche con proprietà di RAID o cache.&lt;br /&gt;
 # lvcreate -L 10G -n ''home'' vg0&lt;br /&gt;
 # lvdisplay /dev/vg0/home&lt;br /&gt;
&lt;br /&gt;
Oppure nel caso volessimo fare un raid5&lt;br /&gt;
 # lvcreate -n lvr5 –type raid5 -L 10G -i 3 vg0&lt;br /&gt;
 &lt;br /&gt;
 -n ''nome del volume''&lt;br /&gt;
 –type raid5 ''tipo di raid''&lt;br /&gt;
 -L ''dimensione massima della grandezza del raid''&lt;br /&gt;
 -i ''numero dei physical volumes che si vogliono utilizzare''&lt;br /&gt;
&lt;br /&gt;
Per formattare il volume logico appena creato&lt;br /&gt;
 # mkfs -t ext4 /dev/vg0/lvr5&lt;br /&gt;
&lt;br /&gt;
Per aggiungere un disco ad un Volume Groups&lt;br /&gt;
 # vgextend vg0 /dev/sdb2&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Snapshot ==&lt;br /&gt;
Creare uno snapshot della del volume logico ''/home'' che potrà contenere fino ad un massimo di 5 GiB di dati modificati rispetto all'originale&lt;br /&gt;
 # lvcreate --size 5G --snapshot --name homesnap20230306 /dev/vg0/home&lt;br /&gt;
&lt;br /&gt;
Ripristinare il volume logico ricaricando lo snapshot&lt;br /&gt;
 # lvconvert --merge /dev/vg0/homesnap20230306&lt;br /&gt;
&lt;br /&gt;
Nel caso il logical volume sia attivo il merging avverrà col prossimo riavvio e lo snapshot sparirà.&lt;br /&gt;
&lt;br /&gt;
== Cache ==&lt;br /&gt;
Utilizzare un moderno disco a stato solido può essere una soluzione economica per velocizzare un LV.&lt;br /&gt;
&lt;br /&gt;
Convertire il disco a PV ed aggiungerlo al preesistente VG&lt;br /&gt;
 # pvcreate ''/dev/discoSSD''&lt;br /&gt;
 # vgextend vg0 ''/dev/discoSSD''&lt;br /&gt;
&lt;br /&gt;
Aggiungere la cache al LV&lt;br /&gt;
 # lvcreate --type cache --cachemode writethrough -l 100%FREE -n root_cachepool vg0/home ''/dev/discoSSD''&lt;br /&gt;
&lt;br /&gt;
Rimuovere la cache dal LV&lt;br /&gt;
 # lvconvert --uncache vg0/home&lt;br /&gt;
&lt;br /&gt;
= GRUB (Boot loader) =&lt;br /&gt;
È 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.&lt;br /&gt;
&lt;br /&gt;
== Sistema con BIOS ==&lt;br /&gt;
 # pacman -S grub&lt;br /&gt;
 # grub-mkconfig -o /boot/grub/grub.cfg&lt;br /&gt;
 # grub-install /dev/sda&lt;br /&gt;
&lt;br /&gt;
== Sistema UEFI ==&lt;br /&gt;
'''NB: per installare correttamente GRUB su un sistema UEFI occorre che il device di installazione abbia effettuato il boot in modalità UEFI e non Legacy (BIOS)'''&lt;br /&gt;
&lt;br /&gt;
 # pacman -S grub&lt;br /&gt;
 # mkdir /boot/EFI&lt;br /&gt;
 # mount /dev/sda1 /boot/EFI&lt;br /&gt;
 # grub-install /dev/sda&lt;br /&gt;
 # grub-mkconfig -o /boot/grub/grub.cfg&lt;br /&gt;
&lt;br /&gt;
== Gestione snapshot BTRFS ==&lt;br /&gt;
&lt;br /&gt;
=== Manuale ===&lt;br /&gt;
Editare ''/etc/grub.d/40_custom'' (o crearlo) e aggiungere quanto segue per permettere l'avvio della snapshot ''rootsnap''&lt;br /&gt;
&lt;br /&gt;
 menuentry 'Linux snapshot' {&lt;br /&gt;
        insmod gzio&lt;br /&gt;
        insmod part_gpt&lt;br /&gt;
        insmod btrfs&lt;br /&gt;
        set root='hd1,gpt3'&lt;br /&gt;
        linux   /rootsnap/boot/vmlinuz-linux root=/dev/partizione rw rootflags=subvol=rootsnap  quiet&lt;br /&gt;
        initrd  /rootsnap/boot/initramfs-linux.img&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
dopodichè aggiornare la configurazione di GRUB con&lt;br /&gt;
 # grub-mkconfig -o /boot/grub/grub.cfg&lt;br /&gt;
&lt;br /&gt;
=== Automatico ===&lt;br /&gt;
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.&lt;br /&gt;
 # pacman -S grub-btrfs&lt;br /&gt;
&lt;br /&gt;
Ogni volta che si vorrà aggiornare grub con nuovi subvolumi basterà dare il seguente comando&lt;br /&gt;
&lt;br /&gt;
 # grub-mkconfig -o /boot/grub/grub.cfg&lt;br /&gt;
&lt;br /&gt;
== Ripristinare GRUB ==&lt;br /&gt;
Aggiornando la propria distribuzione Linux, il proprio boot loader o installando un altro sistema operativo (es. Windows) può capitare di sovrascrivere il [http://it.wikipedia.org/wiki/Master_boot_record MBR].&lt;br /&gt;
&lt;br /&gt;
Avviare il computer con un liveCD/DVD o USB: &lt;br /&gt;
* [http://archlinux.mirror.garr.it/archlinux/iso/latest/archlinux-x86_64.iso Archlinux]&lt;br /&gt;
* [http://www.sysresccd.org/Download Systemrescuecd]&lt;br /&gt;
* [http://grml.org/download/ grml]&lt;br /&gt;
* [http://na.mirror.garr.it/mirrors/ubuntu-releases/ Ubuntu]&lt;br /&gt;
&lt;br /&gt;
Ipotizziamo di avere una partizione / chiamata /dev/sda2 e nessuna /boot&lt;br /&gt;
&lt;br /&gt;
Creiamo i seguenti mount point&lt;br /&gt;
 # sudo su&lt;br /&gt;
 # cd /mnt&lt;br /&gt;
 # mkdir sda2&lt;br /&gt;
 # mount /dev/sda2 /mnt/sda2&lt;br /&gt;
&lt;br /&gt;
Se utilizziamo una scheda madre UEFI andrà montata anche la partizione efi (solitamente è la prima partizione del disco ''sda1'')&lt;br /&gt;
 # mount /dev/sda2 /mnt/sda2/boot/efi&lt;br /&gt;
&lt;br /&gt;
Se necessario editiamo il file di configurazione di grub&lt;br /&gt;
  # nano /mnt/sda2/boot/grub/grub.cfg&lt;br /&gt;
&lt;br /&gt;
=== arch-chroot ===&lt;br /&gt;
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&lt;br /&gt;
&lt;br /&gt;
 # arch-chroot /mnt/sda2&lt;br /&gt;
&lt;br /&gt;
=== Manuale ===&lt;br /&gt;
 # mount --rbind /dev /mnt/sda2/dev&lt;br /&gt;
 # mount -t proc /proc /mnt/sda2/proc&lt;br /&gt;
 # mount -t sysfs /sys /mnt/sda2/sys/&lt;br /&gt;
&lt;br /&gt;
Eseguiamo il vero e proprio chroot in /dev/sda2&lt;br /&gt;
 # chroot /mnt/sda2&lt;br /&gt;
&lt;br /&gt;
=== Reinstallazione ===&lt;br /&gt;
 # grub-mkconfig -o /boot/grub/grub.cfg&lt;br /&gt;
 # grub-install /dev/sda&lt;br /&gt;
&lt;br /&gt;
=== Riavvio del sistema ===&lt;br /&gt;
Usciamo dal chroot, smontiamo la partizione e riavviamo il sistema&lt;br /&gt;
 # exit&lt;br /&gt;
 # umount /mnt/sda1/proc&lt;br /&gt;
 # umount /mnt/sda1/dev&lt;br /&gt;
 # umount /mnt/sda1&lt;br /&gt;
 # systemctl reboot&lt;br /&gt;
&lt;br /&gt;
== Eliminare il boot loader ==&lt;br /&gt;
In caso di errori nell'installazione di GRUB è possibile cancellare il vecchio boot loader di un disco (&amp;lt;code&amp;gt;''devicename'' = sda,sdb,sdc...&amp;lt;/code&amp;gt;)&lt;br /&gt;
 # dd if=/dev/zero of=''/dev/devicename'' bs=446 count=1&lt;br /&gt;
&lt;br /&gt;
== ISOBoot ==&lt;br /&gt;
Con GRUB2 è possibile effettuare il boot di iso di LiveCD/USB Linux presenti sul disco aggiungendole su &amp;lt;code&amp;gt;/etc/grub.d/40_custom &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Ubuntu 23.04&lt;br /&gt;
 menuentry &amp;quot;Ubuntu 23.04 desktop ISO&amp;quot; {&lt;br /&gt;
        insmod part_gpt&lt;br /&gt;
        insmod ext2&lt;br /&gt;
        insmod btrfs&lt;br /&gt;
        rmmod tpm&lt;br /&gt;
     # es.: terza partizione del primo disco&lt;br /&gt;
        set root=(hd0,gpt3)&lt;br /&gt;
        set isofile=&amp;quot;/home/'''&amp;lt;username&amp;gt;'''/Downloads/ubuntu-23.04-desktop-amd64.iso&amp;quot;&lt;br /&gt;
        loopback loop $isofile&lt;br /&gt;
        linux (loop)/casper/vmlinuz boot=casper iso-scan/filename=$isofile quiet splash&lt;br /&gt;
        initrd (loop)/casper/initrd&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
= Networking =&lt;br /&gt;
&lt;br /&gt;
== Manuale ==&lt;br /&gt;
===net-tools===&lt;br /&gt;
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 [https://lists.debian.org/debian-devel/2009/03/msg00780.html obsoleta]. Tra i suoi comandi principali: arp, hostname, ifconfig, iptunnel netstat e route.&lt;br /&gt;
&lt;br /&gt;
Attivare l'interfaccia di rete eth0 ed assegnarle l'indirizzo ip 192.168.0.2&lt;br /&gt;
 # ifconfig eth0 192.168.0.2 up&lt;br /&gt;
&lt;br /&gt;
Disattivare l'interfaccia di rete eth0&lt;br /&gt;
 # ifconfig eth0 down&lt;br /&gt;
&lt;br /&gt;
Assegnare manualmente un gateway (es.: 192.168.0.1) alla rete&lt;br /&gt;
 # route add default gw 192.168.0.1&lt;br /&gt;
&lt;br /&gt;
Ovviamente occorrerà aggiungere un server DNS al file &amp;lt;code&amp;gt;/etc/resolv.conf&amp;lt;/code&amp;gt; per la risoluzione degli indirizzi.&lt;br /&gt;
&lt;br /&gt;
=== iproute2 ===&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|+ Conversione comandi da net-tools a iproute2&lt;br /&gt;
|-&lt;br /&gt;
! net-tools&lt;br /&gt;
! iproute2&lt;br /&gt;
! Note&lt;br /&gt;
|-&lt;br /&gt;
| ifconfig&lt;br /&gt;
| ip addr, ip link&lt;br /&gt;
| Address and link configuration&lt;br /&gt;
|-&lt;br /&gt;
| route&lt;br /&gt;
| ip route&lt;br /&gt;
| Routing tables&lt;br /&gt;
|-&lt;br /&gt;
| arp&lt;br /&gt;
| ip neigh&lt;br /&gt;
| Neighbors&lt;br /&gt;
|-&lt;br /&gt;
| iptunnel&lt;br /&gt;
| ip tunnel&lt;br /&gt;
| Tunnels&lt;br /&gt;
|-&lt;br /&gt;
| nameif, ifrename&lt;br /&gt;
| ip link set name&lt;br /&gt;
| Rename network interfaces&lt;br /&gt;
|-&lt;br /&gt;
| ipmaddr&lt;br /&gt;
| ip maddr&lt;br /&gt;
| Multicast&lt;br /&gt;
|-&lt;br /&gt;
| netstat&lt;br /&gt;
| ss, ip route&lt;br /&gt;
| Show various networking statistics&lt;br /&gt;
|-&lt;br /&gt;
| brctl&lt;br /&gt;
| bridge&lt;br /&gt;
| Handle bridge addresses and devices&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Elencare gli indirizzi IP: &lt;br /&gt;
 # ip addr&lt;br /&gt;
&lt;br /&gt;
Mostra le informazioni di una specifica interfaccia di rete&lt;br /&gt;
 # ip addr show ''eth0''&lt;br /&gt;
&lt;br /&gt;
Aggiungere un indirizzo all'interfaccia eth0:&lt;br /&gt;
 # ip addr add 192.0.2.10/24 dev eth0&lt;br /&gt;
&lt;br /&gt;
Cancellare un indirizzo associato all'interfaccia eth0:&lt;br /&gt;
 # ip addr delete 192.0.2.10/24 dev eth0&lt;br /&gt;
&lt;br /&gt;
Attivare l'interfaccia eth0:&lt;br /&gt;
 # ip link set dev eth0 up&lt;br /&gt;
&lt;br /&gt;
Disattivare l'interfaccia eth0:&lt;br /&gt;
 # ip link set dev eth0 down&lt;br /&gt;
&lt;br /&gt;
Svuotare la cache arp per tutte le interfacce:&lt;br /&gt;
 # ip neigh flush all&lt;br /&gt;
&lt;br /&gt;
Aggiungere una rotta che passa per gateway 192.0.2.1&lt;br /&gt;
 # ip route add default via 192.0.2.1&lt;br /&gt;
&lt;br /&gt;
Aggiungere una rotta che passa per gateway 192.168.2.1 per l'interfaccia 10.0.2.0&lt;br /&gt;
 # ip route add 10.0.2.1/24 via 192.168.0.1 dev enp0s3&lt;br /&gt;
&lt;br /&gt;
Aggiungere una rotta che passa per gateway 192.168.2.1 per l'interfaccia 10.0.2.0&lt;br /&gt;
 # ip route del 10.0.2.0/24 via 192.168.0.1 dev enp0s3 &lt;br /&gt;
&lt;br /&gt;
Mostrare la tabella di routing&lt;br /&gt;
 # ip route show&lt;br /&gt;
&lt;br /&gt;
== Systemd-networkd==&lt;br /&gt;
'''[https://wiki.archlinux.org/title/Systemd-networkd systemd-networkd'''] è un demone, parte di systemd, che gestisce la configurazione della rete.&lt;br /&gt;
&lt;br /&gt;
=== Esempi di configurazione ===&lt;br /&gt;
Per prima cosa sarà necessario abilitare il servizio&lt;br /&gt;
 # systemctl enable --now systemd-networkd.service&lt;br /&gt;
 # systemctl enable --now systemd-resolved.service&lt;br /&gt;
 # ln -rsf /run/systemd/resolve/stub-resolv.conf /etc/resolv.conf&lt;br /&gt;
&lt;br /&gt;
==== DHCP ====&lt;br /&gt;
/etc/systemd/network/20-wired.network&lt;br /&gt;
 [Match]&lt;br /&gt;
 Name=enp1s0&lt;br /&gt;
 [Network]&lt;br /&gt;
 DHCP=yes&lt;br /&gt;
&lt;br /&gt;
==== IP statico ====&lt;br /&gt;
/etc/systemd/network/20-wired.network&lt;br /&gt;
 [Match]&lt;br /&gt;
 Name=enp1s0&lt;br /&gt;
 [Network]&lt;br /&gt;
 Address=10.1.10.9/24&lt;br /&gt;
 Gateway=10.1.10.1&lt;br /&gt;
 DNS=10.1.10.1&lt;br /&gt;
&lt;br /&gt;
==== Wireless adapter ====&lt;br /&gt;
Per potersi connettere a connessioni WIFI è necessario installare e configurare un'ulteriore applicazione dedicata come '''iwd''' o '''wpa_supplicant''' per l'autenticazione alla rete.&lt;br /&gt;
&lt;br /&gt;
/etc/systemd/network/25-wireless.network&lt;br /&gt;
 [Match]&lt;br /&gt;
 Name=wlp2s0&lt;br /&gt;
 [Network]&lt;br /&gt;
 DHCP=yes&lt;br /&gt;
 IgnoreCarrierLoss=3s&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Rinominare l'interfaccia di rete ====&lt;br /&gt;
Invece che impostare una regola su udev è possibile usare un file di testo .link nel seguente modo&lt;br /&gt;
&lt;br /&gt;
/etc/systemd/network/''10-ethusb0.link''&lt;br /&gt;
 [Match]&lt;br /&gt;
 MACAddress=12:34:56:78:90:ab&lt;br /&gt;
 [Link]&lt;br /&gt;
 Description=USB to Ethernet Adapter&lt;br /&gt;
 Name=''ethusb0''&lt;br /&gt;
&lt;br /&gt;
== Wifi ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! [https://wiki.archlinux.org/title/Network_configuration/Wireless#Utilities Programmi] !! [https://wireless.wiki.kernel.org/en/developers/documentation/wireless-extensions WEXT] !! [https://wireless.wiki.kernel.org/en/developers/documentation/nl80211 nl80211] !! WEP !! WPA&lt;br /&gt;
|-&lt;br /&gt;
| [https://hewlettpackard.github.io/wireless-tools/Tools.html wireless_tools] || Sì || No || Sì || No&lt;br /&gt;
|-&lt;br /&gt;
| [https://wireless.wiki.kernel.org/en/users/documentation/iw iw] || No || Sì || Sì || No&lt;br /&gt;
|-&lt;br /&gt;
| [https://wiki.archlinux.org/title/wpa_supplicant wpa_supplicant] || Sì || Sì || No || Sì&lt;br /&gt;
|-&lt;br /&gt;
| [https://wiki.archlinux.org/title/Iwd iwd]/iwgtk || No || Sì || No || Sì&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== NetworkManager ==&lt;br /&gt;
[https://networkmanager.dev/ NetworkManager] è una utility che si è imposta come standard per la configurazione della reti Linux (LAN e Wifi)&lt;br /&gt;
&lt;br /&gt;
Si compone di un demone, un'interfaccia da riga di comando [https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/9/html/configuring_basic_system_settings/assembly_configuring-and-managing-network-access_configuring-basic-system-settings#configuring-a-static-ethernet-connection-using-nmcli_assembly_configuring-and-managing-network-access (nmcli)] ed un'interfaccia di configurazione basata su un menu testuale ([https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/9/html/configuring_basic_system_settings/assembly_configuring-and-managing-network-access_configuring-basic-system-settings nmtui]). &lt;br /&gt;
&lt;br /&gt;
I principali desktop enviroment come GNOME e KDE Plasma possiedono una utility grafica che consente loro di configurare graficamente le reti basandosi su NetworkManager.&lt;br /&gt;
&lt;br /&gt;
=== Installazione ===&lt;br /&gt;
 # pacman -S networkmanager &lt;br /&gt;
 # systemctl enable NetworkManager&lt;br /&gt;
 # systemctl start NetworkManager&lt;br /&gt;
&lt;br /&gt;
==== Configurazione  ====&lt;br /&gt;
* 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 &amp;lt;code&amp;gt;nmtui&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Per chi dovesse prediligere la configurazione manuale: &amp;lt;code&amp;gt;nmcli&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Per impedire a Network Manager di gestire una certa interfaccia di rete è sufficiente aggiungere il suo MAC Address al file di configurazione &amp;lt;code&amp;gt;/etc/NetworkManager/NetworkManager.conf&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 [main]&lt;br /&gt;
 plugins=keyfile&lt;br /&gt;
 [keyfile]&lt;br /&gt;
 unmanaged-devices=mac:''00:25:21:73:90:72''&lt;br /&gt;
&lt;br /&gt;
=== Alternative ===&lt;br /&gt;
* [https://wiki.archlinux.org/title/ConnMan ConnMan]&lt;br /&gt;
&lt;br /&gt;
== Condividere la connessione ==&lt;br /&gt;
&lt;br /&gt;
=== Abilitazione del forwarding dei pacchetti ===&lt;br /&gt;
&lt;br /&gt;
 $ sudo echo 1 &amp;gt; /proc/sys/net/ipv4/ip_forward&lt;br /&gt;
&lt;br /&gt;
Per rendere il forwarding definitivo editare il file ''/etc/sysctl.conf'' modificando come segue il parametro net.ipv4.ip_forward:&lt;br /&gt;
&lt;br /&gt;
 net.ipv4.ip_forward = 1&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Mascheramento dei pacchetti ===&lt;br /&gt;
&lt;br /&gt;
 $ sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE&lt;br /&gt;
&lt;br /&gt;
''eth0'' non è un parametro fisso, identifica l'interfaccia con la quale il PC si connette ad Internet&lt;br /&gt;
&lt;br /&gt;
Per applicare automaticamente tale regola ad ogni riavvio&lt;br /&gt;
 # iptables-save &amp;gt; /etc/iptables.ipv4.nat&lt;br /&gt;
 # iptables-restore &amp;lt; /etc/iptables.ipv4.nat&lt;br /&gt;
&lt;br /&gt;
=== Moduli kernel ===&lt;br /&gt;
&lt;br /&gt;
Assicurarsi che siano caricati i seguenti moduli:&lt;br /&gt;
 # modprobe ip_tables&lt;br /&gt;
 # modprobe ip_conntrack&lt;br /&gt;
 # modprobe iptable_nat&lt;br /&gt;
 # modprobe ipt_MASQUERADE&lt;br /&gt;
&lt;br /&gt;
=== Condivisione tramite rete ethernet ===&lt;br /&gt;
&lt;br /&gt;
==== Configurazione scheda di rete interna ====&lt;br /&gt;
&lt;br /&gt;
Assegnare un IP statico alla scheda ethernet con la quale si vuol condividere la connessione.&lt;br /&gt;
&lt;br /&gt;
 # ifconfig eth1 192.168.5.1 netmask 255.255.255.0 up&lt;br /&gt;
&lt;br /&gt;
Per rendere tale configurazione permanente sarà necessario editare il file ''/etc/network/interfaces'' ed aggiungere la seguente configurazione&lt;br /&gt;
&lt;br /&gt;
 auto eth1&lt;br /&gt;
 iface eth1 inet static&lt;br /&gt;
 address 192.168.5.1&lt;br /&gt;
 netmask 255.255.255.0&lt;br /&gt;
&lt;br /&gt;
=== Condivisione tramite rete WI-FI ===&lt;br /&gt;
&lt;br /&gt;
==== Configurazione scheda wireless ====&lt;br /&gt;
&lt;br /&gt;
Se non si desidera cifrare la rete e proteggerla con una password sarà sufficiente eseguire questi comandi.&lt;br /&gt;
&lt;br /&gt;
 # iwconfig wlan0 mode Master&lt;br /&gt;
 # iwconfig wlan0 ESSID ReteGOLEM&lt;br /&gt;
 # iwconfig wlan0 enc off&lt;br /&gt;
 # ifconfig wlan0 192.168.5.1 netmask 255.255.255.0 up&lt;br /&gt;
&lt;br /&gt;
Per rendere tale configurazione permanente sarà necessario creare un file del tipo ''/etc/systemd/network/20-wifi.network'' ed aggiungere la seguente configurazione&lt;br /&gt;
 [Match]&lt;br /&gt;
 Name=wlan0&lt;br /&gt;
 [Network]&lt;br /&gt;
 Address=192.168.5.1/24&lt;br /&gt;
&lt;br /&gt;
Naturalmente occorrerà che sia attivato il demone systemd-networkd&lt;br /&gt;
 # systemctl enable --now systemd-networkd.service&lt;br /&gt;
&lt;br /&gt;
===== Proteggere la connessione WI-FI =====&lt;br /&gt;
&lt;br /&gt;
Installare il programma hostapd&lt;br /&gt;
 # pacman -S hostapd&lt;br /&gt;
&lt;br /&gt;
Configurare hostapd modificando ''/etc/hostapd/hostapd.conf''&lt;br /&gt;
&lt;br /&gt;
 # Interfaccia di rete&lt;br /&gt;
 interface=wlan0&lt;br /&gt;
 # Driver della scheda wifi usata (non tutte le schede sono supportate)&lt;br /&gt;
 driver=nl80211&lt;br /&gt;
 # Nome della rete (SSID)&lt;br /&gt;
 ssid=ReteGOLEM&lt;br /&gt;
 hw_mode=g&lt;br /&gt;
 # Canale di trasmissione&lt;br /&gt;
 channel=6&lt;br /&gt;
 macaddr_acl=0&lt;br /&gt;
 # Righe per la protezione&lt;br /&gt;
 auth_algs=1&lt;br /&gt;
 ignore_broadcast_ssid=0&lt;br /&gt;
 wpa=2&lt;br /&gt;
 # Password del wifi&lt;br /&gt;
 wpa_passphrase=password&lt;br /&gt;
 wpa_key_mgmt=WPA-PSK&lt;br /&gt;
 wpa_pairwise=TKIP&lt;br /&gt;
 rsn_pairwise=CCMP&lt;br /&gt;
&lt;br /&gt;
Editare il file ''/etc/default/hostapd'' per impostare ''hostapd.conf'' come file di configurazione predefinito, modificando la riga DAEMON_CONF=&amp;quot;&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
 DAEMON_CONF=&amp;quot;/etc/hostapd/hostapd.conf&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== Assegnazione automatica degli IP ai client ===&lt;br /&gt;
&lt;br /&gt;
 # pacman -S dhcp&lt;br /&gt;
&lt;br /&gt;
Editare ''/etc/dhcpd.conf'' aggiungendo la configurazione per la rete interna (es.: eth1 o wlan0):&lt;br /&gt;
&lt;br /&gt;
 subnet 192.168.5.0 netmask 255.255.255.0 {&lt;br /&gt;
 range 192.168.5.100  192.168.5.200;&lt;br /&gt;
 option domain-name-servers 8.8.8.8;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== VPN ==&lt;br /&gt;
=== OpenVPN ===&lt;br /&gt;
https://wiki.archlinux.org/title/OpenVPN&lt;br /&gt;
&lt;br /&gt;
===L2TP/IPsec VPN===&lt;br /&gt;
https://wiki.archlinux.org/title/Openswan_L2TP/IPsec_VPN_client_setup&lt;br /&gt;
&lt;br /&gt;
= Container =&lt;br /&gt;
== Toolbox==&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
=== Immagini ===&lt;br /&gt;
* [https://github.com/toolbx-images/images https://github.com/toolbx-images/images] Immagini di container delle principali distribuzioni&lt;br /&gt;
&lt;br /&gt;
=== Comandi ===&lt;br /&gt;
Creare un container&lt;br /&gt;
 $ toolbox create -i quay.io/toolbx-images/rhel-toolbox:9.1 -c redhat&lt;br /&gt;
&lt;br /&gt;
Entrare in un container&lt;br /&gt;
 $ toolbox enter redhat&lt;br /&gt;
 &lt;br /&gt;
Fermare un container&lt;br /&gt;
 $ podman stop nome_macchina&lt;br /&gt;
&lt;br /&gt;
Rimuovere un container&lt;br /&gt;
 $ toolbox rm -f redhat&lt;br /&gt;
&lt;br /&gt;
Rimuovere un container e la sua immagine&lt;br /&gt;
 $ toolbox rmi redhat &lt;br /&gt;
&lt;br /&gt;
Esaminare la lista dei container e delle immagini disponibili&lt;br /&gt;
 $ toolbox list &lt;br /&gt;
&lt;br /&gt;
Permettere agli utenti non root di utilizzare i container&lt;br /&gt;
 $ sudo sh -c 'echo &amp;quot;username:100000:65536&amp;quot; &amp;gt;&amp;gt; /etc/subuid'&lt;br /&gt;
 $ sudo sh -c 'echo &amp;quot;username:100000:65536&amp;quot; &amp;gt;&amp;gt; /etc/subgid'&lt;br /&gt;
&lt;br /&gt;
Abilitare l'host al forwarding di X11 per le applicazioni che richiedono Xorg&lt;br /&gt;
 # xhost +&lt;br /&gt;
&lt;br /&gt;
Eseguire un comandi all'interno di un container&lt;br /&gt;
 $ toolbox run -c redhat libreoffice&lt;br /&gt;
&lt;br /&gt;
== LXC ==&lt;br /&gt;
[https://wiki.archlinux.org/title/Linux_Containers Linux Container] (LXC) permette di virtualizzare uno o più container Linux su un singolo host LXC, gestendone virtualmente RAM, CPU, socket e rete.&lt;br /&gt;
&lt;br /&gt;
È estremamente utile quando si ha bisogno di isolare dei servizi dal sistema host: es.: server web, imap, smtp...&lt;br /&gt;
&lt;br /&gt;
=== Installazione ===&lt;br /&gt;
Installare LXC&lt;br /&gt;
 # pacman -S lxc lxc-templates lxcfs lxd&lt;br /&gt;
&lt;br /&gt;
=== Comandi ===&lt;br /&gt;
Lista dei container installati&lt;br /&gt;
 lxc-ls -f &lt;br /&gt;
&lt;br /&gt;
Installare un container scegliendo l'immagine dalla lista di quelli disponibili&lt;br /&gt;
 lxc-create -n playtime -t download&lt;br /&gt;
&lt;br /&gt;
Se sapete già di quale container avete bisogno sarà possibile scaricarlo direttamente&lt;br /&gt;
 lxc-create -n playtime -t download -- --dist archlinux --release current --arch amd64&lt;br /&gt;
&lt;br /&gt;
Far partire il container chiamato ''debian''&lt;br /&gt;
 lxc-start debian &lt;br /&gt;
&lt;br /&gt;
Entrare dentro il container chiamato ''debian''&lt;br /&gt;
 lxc-attach debian&lt;br /&gt;
&lt;br /&gt;
Fermare l'esecuzione del container chiamato ''debian''&lt;br /&gt;
 lxc-stop debian&lt;br /&gt;
&lt;br /&gt;
Rimuovere il container chiamato ''debian''&lt;br /&gt;
 lxc-destroy debian &lt;br /&gt;
&lt;br /&gt;
Eseguire un comando dentro il container chiamato ''debian''&lt;br /&gt;
 lxc-attach --name debian nano&lt;br /&gt;
&lt;br /&gt;
=== Rete Bridge ===&lt;br /&gt;
Nel caso si debbano usare servizi da tenere esposti su Internet potrebbe essere conveniente utilizzare una rete bridge piuttosto che NAT.&lt;br /&gt;
&lt;br /&gt;
[https://wiki.debian.org/LXC/SimpleBridge Configurazione] rete bridge.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Docker ==&lt;br /&gt;
Abilitare ed avviare docker&lt;br /&gt;
 # systemctl enable --now docker&lt;br /&gt;
&lt;br /&gt;
Cercare il container desiderato&lt;br /&gt;
 # docker search &amp;quot;xxx&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Scaricare l'immagine desiderata&lt;br /&gt;
 # docker pull xxxx:latest&lt;br /&gt;
&lt;br /&gt;
Visualizzare le immagini scaricate&lt;br /&gt;
 # docker images&lt;br /&gt;
&lt;br /&gt;
Visualizzare i docker creati&lt;br /&gt;
 # docker ps -a&lt;br /&gt;
&lt;br /&gt;
Avviare docker&lt;br /&gt;
 # docker start nome_docker&lt;br /&gt;
&lt;br /&gt;
Entrare nel docker&lt;br /&gt;
 # docker attach nome_docker&lt;br /&gt;
&lt;br /&gt;
Copiare un file dal sistema host al docker&lt;br /&gt;
 # docker cp esempio.txt nome_docker: /esempio.txt&lt;br /&gt;
&lt;br /&gt;
Copiare un file dal docker.&lt;br /&gt;
 # docker cp container-id:/path/filename.txt ~/Desktop/filename.txt&lt;br /&gt;
&lt;br /&gt;
Rimuovere un docker&lt;br /&gt;
 # docker rm nome_docker&lt;br /&gt;
&lt;br /&gt;
Rimuovere tutti i docker&lt;br /&gt;
 # docker container stop $(docker container ls -aq)&lt;br /&gt;
 # docker system prune -a --volumes&lt;br /&gt;
&lt;br /&gt;
Avviare automaticamente un docker (da testare)&lt;br /&gt;
 # docker run --restart=always --name nome_docker&lt;br /&gt;
&lt;br /&gt;
Creare script di avvio ''docker-webserver''.service&lt;br /&gt;
 [Unit]&lt;br /&gt;
 Description=Some service&lt;br /&gt;
 Requires=docker.service&lt;br /&gt;
 After=docker.service&lt;br /&gt;
 [Service]&lt;br /&gt;
 Restart=always&lt;br /&gt;
 ExecStart=/usr/bin/docker start -a container_name&lt;br /&gt;
 ExecStop=/usr/bin/docker stop -t 2 container_name&lt;br /&gt;
 [Install]&lt;br /&gt;
 WantedBy=multi-user.target&lt;br /&gt;
&lt;br /&gt;
* [https://wiki.archlinux.org/title/docker Arch Linux Docker WIKI]&lt;br /&gt;
&lt;br /&gt;
== [https://wiki.archlinux.org/title/systemd-nspawn systemd-nspawn] ==&lt;br /&gt;
&lt;br /&gt;
= Fonti software alternative =&lt;br /&gt;
Nella rara eventualità che si necessiti di un programma non presente né nei repository ufficiali, né su [https://aur.archlinux.org/ AUR] è possibile optare per una delle seguenti opzioni.&lt;br /&gt;
&lt;br /&gt;
== AppImage ==&lt;br /&gt;
Scaricate qualsiasi pacchetto disponibile su [https://appimage.github.io/ appimage.github.io] e rendetelo eseguibile.&lt;br /&gt;
&lt;br /&gt;
 $ chmod a+x ''nomeprogramma''.AppImage&lt;br /&gt;
&lt;br /&gt;
Non resta che eseguirlo col seguente comando o con un doppio click&lt;br /&gt;
 $ ./''nomeprogramma''.AppImage&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Flatpak ==&lt;br /&gt;
Concepito per essere una sorta di '''Google Play Store''' per GNOME, è possibile installare programmi provenienti da [https://flathub.org/home flatpak] utilizzando i normali gestori grafici di pacchetti basati su packagekit come ''Gnome Software'' o ''Discover di Plasma''.&lt;br /&gt;
&lt;br /&gt;
Installazione&lt;br /&gt;
 # pacman -S flatpak&lt;br /&gt;
&lt;br /&gt;
Abilitazione del repository ufficiale del progetto (software di terze parti potrebbe richiedere di aggiungere altri repository)&lt;br /&gt;
 # flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo&lt;br /&gt;
&lt;br /&gt;
Elenca i repository disponibili.&lt;br /&gt;
 $ flatpak remotes&lt;br /&gt;
&lt;br /&gt;
Installa un'applicazione (es.: libreoffice)&lt;br /&gt;
 $ flatpak install flathub org.libreoffice.LibreOffice&lt;br /&gt;
&lt;br /&gt;
Esegue un'applicazione (es.: libreoffice)&lt;br /&gt;
 $ flatpak run org.libreoffice.LibreOffice&lt;br /&gt;
&lt;br /&gt;
Disinstalla un'applicazione mantenendo i dati.&lt;br /&gt;
 $ flatpak uninstall &amp;lt;nome app&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Disinstalla un'applicazione eliminando i dati (nella home utente .var/app/).&lt;br /&gt;
 $ flatpak uninstall &amp;lt;nome app&amp;gt; --delete-data&lt;br /&gt;
&lt;br /&gt;
Elimina i dati di tutte le applicazioni disinstallate (nella home utente .var/app/).&lt;br /&gt;
 $ flatpak uninstall --delete-data&lt;br /&gt;
&lt;br /&gt;
Disinstalla tutte le applicazioni flatpak installate sul sistema.&lt;br /&gt;
 $ flatpak uninstall --all&lt;br /&gt;
	&lt;br /&gt;
Cerca ed esegue aggiornamenti per le applicazioni installate.&lt;br /&gt;
 $ flatpak update&lt;br /&gt;
&lt;br /&gt;
Aggiorna una singola applicazione.&lt;br /&gt;
 $ flatpak update &amp;lt;nome app&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Elenca tutte le applicazioni flatpak installate sul sistema.&lt;br /&gt;
 $ flatpak list --app&lt;br /&gt;
	&lt;br /&gt;
Elenca i runtime installati.&lt;br /&gt;
 $ flatpak list --runtime&lt;br /&gt;
	&lt;br /&gt;
Visualizzare le informazioni sulle applicazioni in esecuzione.&lt;br /&gt;
 $ flatpak ps&lt;br /&gt;
	&lt;br /&gt;
Termina un'applicazione bloccata o danneggiata (l'ID dell'istanza si può ottenere dal comando precedente).&lt;br /&gt;
 $ flatpak kill &amp;lt;id istanza&amp;gt;&lt;br /&gt;
	&lt;br /&gt;
Tenta la riparare dei pacchetti danneggiati. Necessita dei privilegi di amministrazione. &lt;br /&gt;
 $ flatpak repair&lt;br /&gt;
&lt;br /&gt;
== Nix ==&lt;br /&gt;
[https://nixos.wiki/wiki/Nix_package_manager Nix package manager] è il gestore di pacchetti utilizzato su [https://nixos.org/ NixOS]. È possibile però utilizzarlo su qualsiasi distribuzione Linux affiancandone il gestore di pacchetti predefinito.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
[https://nixos.org/manual/nixpkgs/stable/ Guida completa]&lt;br /&gt;
&lt;br /&gt;
=== Installazione ===&lt;br /&gt;
[https://nixos.org/download.html#nix-install-linux Guida ufficiale]&lt;br /&gt;
&lt;br /&gt;
'''Single-user installation'''&lt;br /&gt;
 $ sudo install -d -m755 -o $(id -u) -g $(id -g) /nix&lt;br /&gt;
 $ sh &amp;lt;(curl -L https://nixos.org/nix/install) --no-daemon&lt;br /&gt;
&lt;br /&gt;
Aggiungere la riga seguente al &amp;lt;code&amp;gt;.bashrc&amp;lt;/code&amp;gt; o al file di configurazione della vostra shell per poter utilizzare i comandi Nix&lt;br /&gt;
 $ source $HOME/.nix-profile/etc/profile.d/nix.sh&lt;br /&gt;
&lt;br /&gt;
=== Canali ===&lt;br /&gt;
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''.&lt;br /&gt;
&lt;br /&gt;
Ecco di seguito i comandi principali per gestire questi canali&lt;br /&gt;
&lt;br /&gt;
Lista dei canali configurati&lt;br /&gt;
 $ nix-channel --list&lt;br /&gt;
&lt;br /&gt;
Aggiungere il canale principale (''nixos'')&lt;br /&gt;
 $ nix-channel --add https://nixos.org/channels/channel-name nixos&lt;br /&gt;
&lt;br /&gt;
Aggiungere altri canali&lt;br /&gt;
 $ nix-channel --add https://some.channel/url my-alias&lt;br /&gt;
&lt;br /&gt;
Rimuovere un canale&lt;br /&gt;
 $ nix-channel --remove channel-alias&lt;br /&gt;
&lt;br /&gt;
Aggiornare un canale&lt;br /&gt;
 $ nix-channel --update channel-alias&lt;br /&gt;
&lt;br /&gt;
Aggiornare tutti i canali&lt;br /&gt;
 $ nix-channel --update&lt;br /&gt;
&lt;br /&gt;
=== Comandi ===&lt;br /&gt;
Cercare un pacchetto&lt;br /&gt;
 $ nix search nixpkgs ''packagename''&lt;br /&gt;
&lt;br /&gt;
Installare un pacchetto&lt;br /&gt;
 $ nix-env -iA ''packagename''&lt;br /&gt;
&lt;br /&gt;
Vedere i pacchetti installati&lt;br /&gt;
 $ nix-env -q&lt;br /&gt;
&lt;br /&gt;
Disinstallare un pacchetto&lt;br /&gt;
 $ nix-env -e ''packagename''&lt;br /&gt;
&lt;br /&gt;
Aggiornare tutti i pacchetti&lt;br /&gt;
 $ nix-env -u&lt;br /&gt;
&lt;br /&gt;
== Snap ==&lt;br /&gt;
È 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. &lt;br /&gt;
&lt;br /&gt;
Su Arch è disponibile su AUR: [https://aur.archlinux.org/packages/snapd snapd]&lt;br /&gt;
&lt;br /&gt;
=== Installazione ===&lt;br /&gt;
Installare ed abilitare Snap&lt;br /&gt;
 $ [https://aur.archlinux.org/packages/yay yay] -S snapd&lt;br /&gt;
 $ sudo ln -s /var/lib/snapd/snap /snap&lt;br /&gt;
 $ sudo systemctl start snapd.service&lt;br /&gt;
 $ sudo systemctl enable snapd.service&lt;br /&gt;
&lt;br /&gt;
=== Comandi ===&lt;br /&gt;
Cercare un programma&lt;br /&gt;
 $ snap find ''nomeprogramma''&lt;br /&gt;
&lt;br /&gt;
Installare un programma&lt;br /&gt;
 $ sudo snap install ''nomeprogramma''&lt;br /&gt;
&lt;br /&gt;
Rimuovere un programma&lt;br /&gt;
 $ sudo snap remove ''nomeprogramma''&lt;br /&gt;
&lt;br /&gt;
Vedere i programmi installati &lt;br /&gt;
 $ snap list&lt;br /&gt;
&lt;br /&gt;
Rimuovere una determinata versione di un programma&lt;br /&gt;
 $ sudo snap remove ''nomeprogramma'' --revision&lt;br /&gt;
&lt;br /&gt;
Aggiornare manualmente i pacchetti snap&lt;br /&gt;
 $ sudo snap refresh&lt;br /&gt;
&lt;br /&gt;
= GPG =&lt;br /&gt;
[http://it.wikipedia.org/wiki/GNU_Privacy_Guard GNU Privacy Guard (GnuPG o GPG)] è un programma libero pensato per fornire un'alternativa opensource al [http://it.wikipedia.org/wiki/Pretty_Good_Privacy Pretty Good Privacy (PGP)].&lt;br /&gt;
Nel PGP sono usate sia la crittografia asimmetrica (a chiave pubblica) che quella simmetrica.&lt;br /&gt;
La chiave pubblica del destinatario serve al mittente unicamente per cifrare la chiave comune per un algoritmo di crittografia simmetrica che sarà usata per cifrare il testo in chiaro del messaggio.&lt;br /&gt;
Un destinatario decifra un messaggio protetto da GPG usando la chiave di sessione con l'algoritmo simmetrico. Tale chiave di sessione è inclusa nel messaggio in maniera criptata ed è decifrata usando la chiave privata del destinatario.&lt;br /&gt;
L'utilizzo di due cifrature oltre che a velocizzare l'esecuzione del programma (la cifratura a chiave simmetrica è molto più veloce di quella asimmetrica) permette di poter cifrare uno stesso messaggio per più destinatari.&lt;br /&gt;
&lt;br /&gt;
== Generare una chiave ==&lt;br /&gt;
 $ gpg --gen-key&lt;br /&gt;
&lt;br /&gt;
Controllare che la chiave sia stata correttamente creata&lt;br /&gt;
 $ gpg --list-keys&lt;br /&gt;
&lt;br /&gt;
== Certificato di revoca ==&lt;br /&gt;
Il certificato di revoca serve per invalidare la chiave nel caso in cui questa venga compromessa.&lt;br /&gt;
Chiunque sia in possesso del certificato di revoca può revocare la chiave corrispondente, per cui è bene tenerlo in un posto sicuro.&lt;br /&gt;
Poiché, nel momento in cui si ha bisogno del certificato di revoca, potremmo non essere più in grado di generarlo, conviene generarlo subito dopo la creazione della chiave, e prima di iniziare a utilizzarla pubblicamente.&lt;br /&gt;
 $ gpg --output certificato-di-revoca.asc --gen-revoke ''ID''&lt;br /&gt;
dove &amp;lt;code&amp;gt;ID&amp;lt;/code&amp;gt; è dato dalle ultime 8 cifre dell'impronta (fingerprint) della chiave.&lt;br /&gt;
&lt;br /&gt;
== Utilizzo pratico ==&lt;br /&gt;
=== Criptare un documento ===&lt;br /&gt;
 $ gpg -o file1.ext.gpg -e -r UserID file1.ext&lt;br /&gt;
&lt;br /&gt;
Esempio:&lt;br /&gt;
 $ gpg -o tesi.odt.gpg -e -r spookyh@gmail.com tesi.odt&lt;br /&gt;
&lt;br /&gt;
=== Decriptare un documento ===&lt;br /&gt;
 $ gpg -o file1.ext -d file1.gpg&lt;br /&gt;
&lt;br /&gt;
=== Firmare un documento ===&lt;br /&gt;
Il mittente può usare PGP per ''firmare'' un messaggio con l'algoritmo di firma RSA o Digital Signature Algorithm (DSA). Per fare ciò viene calcolato un hash (message digest) dal testo in chiaro e successivamente da questo hash è creata la [http://it.wikipedia.org/wiki/Firma_digitale firma digitale] usando la chiave privata del mittente.&lt;br /&gt;
 $ gpg -o file1.ext.sig -s file1.ext&lt;br /&gt;
&lt;br /&gt;
=== Verificare un documento ===&lt;br /&gt;
 $ gpg --verify file1.sig&lt;br /&gt;
&lt;br /&gt;
== Importare ed esportare chiavi (locali) ==&lt;br /&gt;
Importare una chiave (pubblica)&lt;br /&gt;
 $ gpg --import chiave.asc (o .txt)&lt;br /&gt;
&lt;br /&gt;
Esportare la propria chiave pubblica&lt;br /&gt;
 $ gpg -a -o chiave_pubblica.asc --export&lt;br /&gt;
&lt;br /&gt;
=== Esportare la propria chiave privata ===&lt;br /&gt;
{{Note&lt;br /&gt;
|type=attention&lt;br /&gt;
|text= La chiave privata può essere utilizzata per impersonare la vostra identità, '''NON''' inviarla mai a '''nessuno''', ed esportala solo per effettuarne backup, naturalmente da custodire in un luogo sicuro.}}&lt;br /&gt;
 $ gpg --armor --export-secret-keys &amp;lt;ID&amp;gt; &amp;gt; secret-key.gpg.asc&lt;br /&gt;
&lt;br /&gt;
== Condividere le chiavi pubbliche ==&lt;br /&gt;
Inviare la chiave ad un keyserver:&lt;br /&gt;
 $ gpg --keyserver keyserver.linux.it --send-key &amp;lt;ID&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Importare una chiave da un keyserver:&lt;br /&gt;
 $ gpg --keyserver keyserver.linux.it --recv-keys &amp;lt;ID&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se ci fidiamo del proprietario e vogliamo mostrare pubblicamente la nostra fiducia, possiamo firmare la chiave appena importata e esportare la firma su un keyserver (vedere sezioni successive).&lt;br /&gt;
&lt;br /&gt;
=== Keyserver ===&lt;br /&gt;
Quando si carica una chiave su un keyserver, poi questo la condivide con gli altri keyserver che fanno parte dello stesso circuito.&lt;br /&gt;
Non esiste un'entità centralizzata o un circuito di riferimento (per scelta di design), e, a volte, questo può generare confusione nell'utilizzatore.&lt;br /&gt;
Inoltre, alcuni keyserver potrebbero non essere sempre accessibili.&lt;br /&gt;
&lt;br /&gt;
Tra i keyserver più noti:&lt;br /&gt;
* keys.openpgp.org&lt;br /&gt;
* keyserver.ubuntu.com&lt;br /&gt;
* keys.gnupg.net&lt;br /&gt;
* pgp.surfnet.nl&lt;br /&gt;
* pgp.circl.lu&lt;br /&gt;
* pgp.mit.edu&lt;br /&gt;
&lt;br /&gt;
== Editare una chiave ==&lt;br /&gt;
Per fare operazioni e modifiche dobbiamo &amp;quot;editare&amp;quot; le chiavi, aprendo l'editor interattivo:&lt;br /&gt;
 $ gpg --edit-key &amp;lt;ID&amp;gt;&lt;br /&gt;
'''NB: Prima di uscire dall'editor, ricordarsi di salvare, altrimenti le modifiche vanno perdute'''&lt;br /&gt;
&lt;br /&gt;
* firmare&lt;br /&gt;
 &amp;gt; sign&lt;br /&gt;
* cambiare i valori di fiducia &lt;br /&gt;
 &amp;gt; trust&lt;br /&gt;
* vedere la fingerprint&lt;br /&gt;
 &amp;gt; fpr&lt;br /&gt;
* cambiare la data di scadenza&lt;br /&gt;
 &amp;gt; expire&lt;br /&gt;
* cambiare la password&lt;br /&gt;
 &amp;gt; passwd&lt;br /&gt;
* firmare localmente in modo non esportabile&lt;br /&gt;
 &amp;gt; lsign&lt;br /&gt;
* sempre '''ricordarsi di salvare'''&lt;br /&gt;
 &amp;gt; save&lt;br /&gt;
* oppure uscire&lt;br /&gt;
 &amp;gt; quit&lt;br /&gt;
&lt;br /&gt;
Digitare &amp;lt;code&amp;gt;help&amp;lt;/code&amp;gt; per una lista esaustiva.&lt;br /&gt;
&lt;br /&gt;
Tutte le modifiche da rendere pubbliche vanno inviate ad un keyserver.&lt;br /&gt;
&lt;br /&gt;
== Revocare una chiave ==&lt;br /&gt;
Avendo già il certificato di revoca:&lt;br /&gt;
 $ gpg --import certificato-di-revoca.asc&lt;br /&gt;
 $ gpg --keyserver pgp.surfnet.nl --send-key ''ID''&lt;br /&gt;
&lt;br /&gt;
== Gestione delle chiavi ==&lt;br /&gt;
Controllare il database delle chiavi: questo comando mostra tutte le chiavi che abbiamo con molte informazioni.&lt;br /&gt;
 $ gpg --list-keys --with-colons&lt;br /&gt;
&lt;br /&gt;
Fornisce tutti i valori di fiducia assegnati alle varie chiavi. (Informazioni private)&lt;br /&gt;
 $ gpg --list-ownertrust&lt;br /&gt;
&lt;br /&gt;
== Controllo firme ==&lt;br /&gt;
 $ gpg --check-sigs&lt;br /&gt;
 $ gpg --list-sigs&lt;br /&gt;
&lt;br /&gt;
== Esportare le chiavi altrui ==&lt;br /&gt;
Abbiamo importato e firmato la chiave di &amp;lt;ID&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Rimandiamola al proprietario:&lt;br /&gt;
 $ gpg --armor -export -o firma.sig &amp;lt;ID&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Questo comando crea un file di nome ''firma.sig'' nella directory corrente, che contiene la chiave firmata.&lt;br /&gt;
Spedire al proprietario ''firma.sig''.&lt;br /&gt;
&lt;br /&gt;
Chi riceve la propria chiave firmata da altri può decidere inserirla nel proprio portachiavi, con&lt;br /&gt;
 $ gpg --import firma.sig&lt;br /&gt;
&lt;br /&gt;
Si aggiungono al portachiavi le nuove firme ma anche i nuovi ID che il mittente ha sulla sua chiave, col rispettivo valore di fiducia. Firmare le chiavi degli altri implica dar loro fiducia, e, spesso, anche aver verificato la loro identità in maniera sicura.&lt;br /&gt;
Se non ci fidiamo, non firmiamo. Se si firmano a caso tutte le chiavi che capitano a tiro, si perde la reputazione che si ha presso gli altri partecipanti della rete. Se vogliamo fare un uso pubblico di questa fiducia reciproca possiamo mandare la nostra  chiave, contenente la nuova firma, al keyserver:&lt;br /&gt;
 $ gpg --keyserver pgp.circl.lu --send-key &amp;lt;ID mia chiave&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Periodicamente occorre aggiornare il proprio portachiavi digitale, così da venire a conoscenza delle modifiche sulle chiavi degli altri.&lt;br /&gt;
 $ gpg --keyserver pgp.circl.lu --refresh-keys&lt;br /&gt;
&lt;br /&gt;
== Rete di fiducia ==&lt;br /&gt;
Una chiave importata può essere firmata con un certo grado di fiducia. Possiamo rispedirla al proprietario o caricare la firma su un keyserver, e se lui la importa nel suo portachiavi, avrà la propria chiave firmata da noi. Ognuno può quindi aggiungere le firme dei conoscenti alla propria chiave, che a loro volta hanno firme di altri.&lt;br /&gt;
&lt;br /&gt;
== GUI ==&lt;br /&gt;
Esistono vari programmi a interfaccia grafica:&lt;br /&gt;
* ''Seahorse'', per gestire le chiavi e i certificati, comprese quelle ssh, per un ambiente GTK&lt;br /&gt;
* ''KGPG'', per gestire le chiavi e i certificati, comprese quelle ssh, per un ambiente QT&lt;br /&gt;
* ''Pinentry'' (anche da riga di comando) si ricorda la password della chiave per il tempo impostato (default 5 minuti)&lt;br /&gt;
&lt;br /&gt;
= Systemd =&lt;br /&gt;
 systemd-timesyncd — system time synchronization across the network;&lt;br /&gt;
 systemd/Journal — system logging&lt;br /&gt;
 systemd/Timers — alternative to cron&lt;br /&gt;
&lt;br /&gt;
= Link Utili =&lt;br /&gt;
&lt;br /&gt;
[https://wiki.archlinux.org/ ArchWiki]&lt;br /&gt;
&lt;br /&gt;
[https://wwwcdf.pd.infn.it/AppuntiLinux/a21.htm Appunti Linux]&lt;br /&gt;
&lt;br /&gt;
[https://www.linuxfromscratch.org/lfs/downloads/stable/LFS-BOOK-11.3-NOCHUNKS.html LFS-BOOK]&lt;br /&gt;
&lt;br /&gt;
[[Category: Howto]]&lt;/div&gt;</summary>
		<author><name>$pooky Hunter</name></author>
	</entry>
	<entry>
		<id>https://wiki.golem.linux.it/index.php?title=Appunti_Arch_Linux&amp;diff=9655</id>
		<title>Appunti Arch Linux</title>
		<link rel="alternate" type="text/html" href="https://wiki.golem.linux.it/index.php?title=Appunti_Arch_Linux&amp;diff=9655"/>
		<updated>2025-04-01T16:20:00Z</updated>

		<summary type="html">&lt;p&gt;$pooky Hunter: /* Cryptsetup */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[https://archlinux.org/ Arch Linux] è una distribuzione Linux leggera e veloce; ma la cui installazione, configurazione e amministrazione avviene prevalentemente da terminale attraverso la modifica manuale di file di configurazione testuali.&lt;br /&gt;
&lt;br /&gt;
Fornisce, seguendo un modello di distribuzione detto &amp;quot;rolling-release&amp;quot;, l'ultima versione stabile della maggior parte del software opensource disponibile per Linux. Dato che è in costante aggiornamento non richiede periodici passaggi da una versione stabile alla successiva. Il lato negativo è che aggiornamenti di componenti importanti come quelli di: '''kernel, boot loader, driver video, librerie...''' potrebbero determinare problemi tali da rendere il sistema inutilizzabile. Accorgimenti come lo snapshot periodico del filesystem riescono, per fortuna, a contrastare l'impatto di questi inconvenienti.&lt;br /&gt;
&lt;br /&gt;
= Installazione =&lt;br /&gt;
== Guida ==&lt;br /&gt;
[https://wiki.archlinux.org/title/Installation_guide Guida ufficiale]&lt;br /&gt;
&lt;br /&gt;
== Supporti ==&lt;br /&gt;
* ISO ufficiale [http://archlinux.mirror.garr.it/archlinux/iso/latest/archlinux-x86_64.iso archlinux-x86_64.iso]&lt;br /&gt;
&lt;br /&gt;
* ISO con supporto per lo [https://openzfs.github.io/openzfs-docs/Getting%20Started/Arch%20Linux/index.html ZFS] [https://archzfs.leibelt.de/media/data/archlinux-archzfs-linux.iso archlinux-archzfs-linux.iso]&lt;br /&gt;
&lt;br /&gt;
* ISO con installer grafico Calamares [https://sourceforge.net/projects/alci/files/alci-iso/ ALCI]&lt;br /&gt;
&lt;br /&gt;
* ISO live CD/USB con interfaccia Xfce, utile per operazioni di ripristino o installazione [https://www.system-rescue.org/Download/ SystemRescue]:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== ISO personalizzata ==&lt;br /&gt;
Con '''archiso''' è possibile creare un'immagine con pacchetti aggiuntivi rispetto a quelli contenuti nella versione ufficiale. &lt;br /&gt;
&lt;br /&gt;
 # pacman -S archiso&lt;br /&gt;
&lt;br /&gt;
Copiare il contenuto del pacchetto in una directory di lavoro, es.: ''/root/media''&lt;br /&gt;
 # cp -r /usr/share/archiso/configs/releng /root/media&lt;br /&gt;
&lt;br /&gt;
Se volessimo aggiungere il supporto ad un pacchetto non contenuto nei repository ufficiali come, per esempio, lo ZFS occorrerebbe:&lt;br /&gt;
&lt;br /&gt;
* Importare la chiave pubblica del suo repository&lt;br /&gt;
 # pacman-key -r DDF7DB817396A49B2A2723F7403BD972F75D9D76&lt;br /&gt;
 # pacman-key --lsign-key DDF7DB817396A49B2A2723F7403BD972F75D9D76&lt;br /&gt;
 &lt;br /&gt;
* Modificare le seguenti righe al file '''pacman.conf''' di archiso per aggiungere il repository&lt;br /&gt;
 [archzfs]&lt;br /&gt;
 SigLevel = Never&lt;br /&gt;
 Server = https://archzfs.com/$repo/$arch&lt;br /&gt;
&lt;br /&gt;
* Aggiungere le seguenti righe al file ''packages.x86_64'' per aggiungere i pacchetti che ci interessa installare&lt;br /&gt;
 zfs-utils&lt;br /&gt;
 zfs-dkms&lt;br /&gt;
 net-tools&lt;br /&gt;
&lt;br /&gt;
* Se volessimo creare una versione live di una macchina, comprensiva di tutti i suoi pacchetti, potremmo semplicemente aggiungerli al file ''packages.x86_64'' &lt;br /&gt;
&lt;br /&gt;
 # pacman -Qq &amp;gt;&amp;gt; ''/path/packages.x86_64''&lt;br /&gt;
&lt;br /&gt;
* Lanciare lo script per creare l'ISO&lt;br /&gt;
 # ./build.sh -v&lt;br /&gt;
L'immagine sarà generata nella directory /root/media/out&lt;br /&gt;
&lt;br /&gt;
== Preparazione del disco ==&lt;br /&gt;
Su Linux si può scegliere (salvo casi estremamente [https://wiki.archlinux.org/title/partitioning#Partitionless_disk particolari]) tra due [https://unix.stackexchange.com/questions/289389/what-are-the-differences-between-the-various-partition-tables tipi] di tabella delle partizioni&lt;br /&gt;
&lt;br /&gt;
* msdos (Master Boot Record o più semplicemente MBR)&lt;br /&gt;
&lt;br /&gt;
* GPT (GUID Partition Table)&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
I casi in cui è preferibile utilizzare la tabella ''msdos'' sono:&lt;br /&gt;
&lt;br /&gt;
* dual-boot con Windows (32-bit o 64-bit) con la scheda madre in modalità Legacy BIOS&lt;br /&gt;
* in schede madri molto datate il BIOS potrebbe non supportare lo schema GPT (esiste comunque un [https://wiki.archlinux.org/title/partitioning#Tricking_old_BIOS_into_booting_from_GPT trucco] per aggirare l'ostacolo)&lt;br /&gt;
&lt;br /&gt;
[https://wiki.archlinux.org/title/partitioning#Choosing_between_GPT_and_MBR Vantaggi] di GPT su MBR:&lt;br /&gt;
&lt;br /&gt;
* offre un sistema di denominazione delle partizioni indipendente dal filesystem (PARTLABEL, PARTUUID)&lt;br /&gt;
&lt;br /&gt;
* 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.&lt;br /&gt;
&lt;br /&gt;
* la grandezza massima di un disco è di 2 ZiB, mentre su MBR 2 TiB&lt;br /&gt;
&lt;br /&gt;
* permette di fare a meno della tradizionale partizione di /boot con i filesystem BTRFS e ZFS in modo da semplificare la gestione degli snapshot.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Schede madri BIOS ===&lt;br /&gt;
Creare due partizioni.&lt;br /&gt;
&lt;br /&gt;
# '''[http://en.wikipedia.org/wiki/BIOS_Boot_partition 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.&lt;br /&gt;
# '''Linux filesystem''': successivamente da formattare col filesystem di nostra scelta: BTRFS, ZFS, ext4, XFS, JFS.&lt;br /&gt;
&lt;br /&gt;
==== Partizionamento ====&lt;br /&gt;
Col seguente comando verrà creata la partizione BIOS GRUB (EF02) a partire dal 1MB, della grandezza di 64MB, 8GB per la SWAP ed il resto del disco resterà disponibile per il filesystem di Linux.&lt;br /&gt;
&lt;br /&gt;
Se avete più dischi da utilizzare in raid, questa operazione andrà ripetuta per ciascun disco.&lt;br /&gt;
&lt;br /&gt;
 # sgdisk \&lt;br /&gt;
 --new=1:2048:133120 --typecode=1:EF02 --change-name=1:&amp;quot;GRUB&amp;quot; \&lt;br /&gt;
 --new=2:0:+8000M ---typecode 2:8200 --change-name=2:&amp;quot;SWAP&amp;quot; \&lt;br /&gt;
 --largest-new=3 --typecode=3:8300 --change-name=3:&amp;quot;ROOT&amp;quot; /dev/sda&lt;br /&gt;
&lt;br /&gt;
La seconda partizione dovrà poi essere formattata con uno dei filesystem supportati da Linux (ext4, btrfs, xfs...)&lt;br /&gt;
 # mkfs.btrfs /dev/sda3&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Schede madri UEFI ===&lt;br /&gt;
Creare due partizioni.&lt;br /&gt;
&lt;br /&gt;
# '''EFI''': è una partizione in formato FAT32 necessaria per l'avvio dei sistemi operativi nei PC con schede madri UEFI.&lt;br /&gt;
# '''Linux filesystem''': successivamente da formattare col filesystem di nostra scelta: BTRFS, ZFS, ext4, XFS, JFS.&lt;br /&gt;
&lt;br /&gt;
==== Partizionamento ====&lt;br /&gt;
Col seguente comando verrà creata la partizione EFI (EF00) a partire dal 1MB, della grandezza di 512MB, 8Gb per la SWAP ed il resto del disco per il filesystem di Linux.&lt;br /&gt;
 # sgdisk \&lt;br /&gt;
 --new=1:2048:1064960 --typecode=1:EF00 --change-name=1:&amp;quot;efi&amp;quot; \&lt;br /&gt;
 --new=2:0:+8000M ---typecode 2:8200 --change-name=2:&amp;quot;SWAP&amp;quot; \&lt;br /&gt;
 --largest-new=3 --typecode=3:8300 --change-name=3:&amp;quot;ROOT&amp;quot; /dev/sda&lt;br /&gt;
&lt;br /&gt;
La partizione '''EFI''' dovrà poi essere formattata in FAT32&lt;br /&gt;
 # mkfs.vfat -F 32 /dev/sda1&lt;br /&gt;
&lt;br /&gt;
La seconda partizione dovrà poi essere formattata con uno dei filesystem supportati da Linux (ext4, btrfs, xfs...)&lt;br /&gt;
 # mkfs.btrfs /dev/sda3&lt;br /&gt;
&lt;br /&gt;
== Montaggio del filesystem ==&lt;br /&gt;
Formattazione ed attivazione della SWAP&lt;br /&gt;
 # mkswap /dev/sda2&lt;br /&gt;
 # swapon /dev/sda2&lt;br /&gt;
&lt;br /&gt;
Montaggio del filesystem di ROOT nei sistemi BIOS&lt;br /&gt;
 # mount /dev/sda3 /mnt&lt;br /&gt;
&lt;br /&gt;
Montaggio del filesystem di ROOT nei sistemi UEFI&lt;br /&gt;
 # mount /dev/sda3 /mnt&lt;br /&gt;
 # mount --mkdir /dev/sda1 /mnt/boot&lt;br /&gt;
&lt;br /&gt;
== Pacchetti base ==&lt;br /&gt;
Per l'installazione di base si consigliano i seguenti meta-pacchetti&lt;br /&gt;
 # pacstrap -K /mnt base base-devel linux linux-headers linux-firmware&lt;br /&gt;
&lt;br /&gt;
== Configurazione ==&lt;br /&gt;
Creazione del file fstab&lt;br /&gt;
 # genfstab -U /mnt &amp;gt;&amp;gt; /mnt/etc/fstab&lt;br /&gt;
&lt;br /&gt;
Chroot nel nuovo sistema&lt;br /&gt;
 # arch-chroot /mnt&lt;br /&gt;
&lt;br /&gt;
Timezone&lt;br /&gt;
 # ln -sf /usr/share/zoneinfo/Europe/Rome /etc/localtime&lt;br /&gt;
&lt;br /&gt;
Editare il file &amp;lt;code&amp;gt;/etc/systemd/timesyncd.conf&amp;lt;/code&amp;gt; ed abilitare il servizio per la sincronizzazione automatica dell'orario&lt;br /&gt;
 # systemctl enable systemd-timesyncd.service&lt;br /&gt;
&lt;br /&gt;
Editare il file &amp;lt;code&amp;gt;/etc/locale.gen&amp;lt;/code&amp;gt; e togliere il commento agli argomenti che interessano, es.: ''en_US.UTF-8'', ''it_IT.UTF-8''. E successivamente generare la localizzazione eseguendo&lt;br /&gt;
 # locale-gen&lt;br /&gt;
&lt;br /&gt;
Configurare la lingua che vogliamo usare per il nostro sistema editando il file &amp;lt;code&amp;gt;/etc/locale.conf&amp;lt;/code&amp;gt; oppure lanciando il comando&lt;br /&gt;
 # localectl set-locale LANG=en_US.UTF-8&lt;br /&gt;
&lt;br /&gt;
Selezioniamo il layout della tastiera editando il file &amp;lt;code&amp;gt;/etc/vconsole.conf&amp;lt;/code&amp;gt;&lt;br /&gt;
 # echo &amp;quot;KEYMAP=it&amp;quot; &amp;gt;&amp;gt; /etc/vconsole.conf&lt;br /&gt;
&lt;br /&gt;
Scegliere un home host (es.: ''archstar'')&lt;br /&gt;
 # echo '''archstar''' &amp;gt;&amp;gt; /etc/hostname&lt;br /&gt;
&lt;br /&gt;
Impostare una password per l'utente root&lt;br /&gt;
 # passwd&lt;br /&gt;
&lt;br /&gt;
Installare e configurare il bootloader&lt;br /&gt;
&lt;br /&gt;
= Filesystem =&lt;br /&gt;
Su Linux, a seconda di ciò di cui abbiamo bisogno, è possibile scegliere tra numerosi filesystem. Le principali opzioni sono le seguenti:&lt;br /&gt;
&lt;br /&gt;
- BTRFS: supporta nativamente sottovolumi, snapshot ed il raid 0, 1 e 5; ma non la crittografia.&lt;br /&gt;
&lt;br /&gt;
- EXT4: il FS storico di Linux, evoluzione di ext3. Supporta nativamente la crittografia dei dati, ma non gestisce autonomamente né RAID, né snapshots. &lt;br /&gt;
&lt;br /&gt;
- [https://openzfs.github.io/openzfs-docs/index.html 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 &amp;quot;write-atomicity&amp;quot; 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.&lt;br /&gt;
&lt;br /&gt;
- [https://access.redhat.com/documentation/it-it/red_hat_enterprise_linux/9/html-single/configuring_and_managing_logical_volumes/index 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.&lt;br /&gt;
&lt;br /&gt;
== IMG ==&lt;br /&gt;
Per fare esperimenti con i filesystem può essere utile creare dei file immagine&lt;br /&gt;
&lt;br /&gt;
Creare un file immagine di una specifica grandezza (es.: 10G)&lt;br /&gt;
 $ truncate -s 10g disk.img&lt;br /&gt;
&lt;br /&gt;
Formattarlo con un filesystem (es.: btrfs)&lt;br /&gt;
 $ mkfs.btrfs disk.img&lt;br /&gt;
&lt;br /&gt;
Montarlo in loop&lt;br /&gt;
 $ sudo mount -o loop disk.img /mnt&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== BTRFS ==&lt;br /&gt;
Creazione del filesystem&lt;br /&gt;
 # mkfs.btrfs ''/dev/partizione''&lt;br /&gt;
&lt;br /&gt;
Montaggio del filesystem&lt;br /&gt;
 # mount -o compress=lzo ''/dev/partizione'' ''/mnt/punto_mount''&lt;br /&gt;
&lt;br /&gt;
(Si consiglia di usare l'opzione di compressione del filesystem per migliorare le performance ed ottimizzare l'utilizzo dello spazio)&lt;br /&gt;
&lt;br /&gt;
===Subvolumi===&lt;br /&gt;
* Creare un subvolume&lt;br /&gt;
 # btrfs subvolume create ''subvolume''&lt;br /&gt;
&lt;br /&gt;
* Controllare i subvolumi presenti sul sistema&lt;br /&gt;
 # btrfs subvolume list /&lt;br /&gt;
&lt;br /&gt;
In una tipica installazione Ubuntu avremo un output di questo tipo&lt;br /&gt;
 ID 257 gen 9755 top level 5 path @&lt;br /&gt;
 ID 292 gen 7624 top level 5 path @home&lt;br /&gt;
&lt;br /&gt;
''@'' è il nome del subvolume contenente la root '''/''' del filesystem&lt;br /&gt;
''@home'' è il nome del subvolume della /home&lt;br /&gt;
&lt;br /&gt;
=== Montaggio di un subvolume ===&lt;br /&gt;
 # mount -o subvol=''subvolume'' ''/dev/partizione'' ''/mnt/punto_mount''&lt;br /&gt;
&lt;br /&gt;
=== fstab ===&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Ecco un '''/etc/fstab''' di esempio&lt;br /&gt;
 LABEL=ROOT       /             btrfs     defaults,compress=lzo,subvol=@            0 0&lt;br /&gt;
 LABEL=ROOT       /home         btrfs     defaults,compress=lzo,subvol=@home        0 0&lt;br /&gt;
 LABEL=ROOT       /mnt/btrfs    btrfs     defaults,noauto,subvolid=0,compress=lzo   0 0&lt;br /&gt;
&lt;br /&gt;
Montando la partizione con label ROOT su /mnt/btrfs saranno visibili tutti i subvolumi.&lt;br /&gt;
&lt;br /&gt;
===Conversione da Ext3/4 a Btrfs===&lt;br /&gt;
 # btrfs-convert /dev/partizione&lt;br /&gt;
&lt;br /&gt;
Automaticamente è creata una snapshot contenente il vecchio filesystem (''/ext2_saved'')&lt;br /&gt;
&lt;br /&gt;
In caso di problemi può essere montata col comando&lt;br /&gt;
 # mount -t btrfs -o subvol=ext2_saved /dev/xxx /ext2_saved&lt;br /&gt;
 # mount -t ext3 -o loop,ro /ext2_saved/image /ext3&lt;br /&gt;
&lt;br /&gt;
Se tutto è andato a buon fine può invece essere eliminata&lt;br /&gt;
 # btrfs subvolume delete /ext2_saved&lt;br /&gt;
&lt;br /&gt;
===Riparazione di un filesystem danneggiato===&lt;br /&gt;
* Direttamente sul filesystem montato&lt;br /&gt;
 # btrfs scrub start -B /dev/partizione&lt;br /&gt;
o anche direttamente sulla root&lt;br /&gt;
 # btrfs scrub start -B /&lt;br /&gt;
&lt;br /&gt;
* Sul disco smontato&lt;br /&gt;
 # btrfs check --repair /dev/partizione&lt;br /&gt;
&lt;br /&gt;
Per non dover ricorrere ad un dispositivo di avvio alternativo, dato che btrfs-check non può essere utilizzato su un filesystem montato, si consiglia di aggiungerlo al ramdisk modificando in questo mmodo il file &amp;lt;code&amp;gt;/etc/mkinitcpio.conf&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 BINARIES=(btrfs)&lt;br /&gt;
&lt;br /&gt;
=== Quote ===&lt;br /&gt;
Per limitare le dimensioni di un subvolume è possibile abilitare la gestione delle '''quote'''.&lt;br /&gt;
&lt;br /&gt;
Utilizzare il seguente comando su un filesystem btrfs appena creato e privo di subvolumi&lt;br /&gt;
 # btrfs quota enable volume&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
 # btrfs subvolume list &amp;lt;path&amp;gt; | cut -d' ' -f2 | xargs -I{} -n1 btrfs qgroup create 0/{} &amp;lt;path&amp;gt;&lt;br /&gt;
 # btrfs quota rescan &amp;lt;path&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Assegnare una quota limite ad un subvolume&lt;br /&gt;
 # btrfs qgroup limit size /volume/subvolume&lt;br /&gt;
&lt;br /&gt;
Es.:&lt;br /&gt;
 # btrfs qgroup limit 20g /mnt/@&lt;br /&gt;
 # btrfs qgroup limit 100g /mnt/@home&lt;br /&gt;
&lt;br /&gt;
Scoprire la quantità di spazio utilizzata da un subvolume&lt;br /&gt;
 # btrfs qgroup show &amp;lt;path&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Snapshots ===&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
* Effettuare uno snapshot&lt;br /&gt;
 # btrfs subvolume snapshot @ rootsnap&lt;br /&gt;
&lt;br /&gt;
Nell'esempio abbiamo effettuato il ''backup'' del filesystem di root e l'abbiamo chiamato ''rootsnap''&lt;br /&gt;
&lt;br /&gt;
* Montare un subvolume/snapshot&lt;br /&gt;
 # mount -t btrfs -o subvol=rootsnap /dev/partizione /mnt/snapshot&lt;br /&gt;
&lt;br /&gt;
* Cancellare un subvolume/snapshot&lt;br /&gt;
 # btrfs subvolume delete rootsnap&lt;br /&gt;
&lt;br /&gt;
==== Integrazione con GRUB ====&lt;br /&gt;
È possibile caricare automaticamente all'avvio gli snapshot dei filesystem di root attraverso il programma '''grub-btrfs'''&lt;br /&gt;
 # pacman -S grub-btrfs&lt;br /&gt;
&lt;br /&gt;
Con questo tool ogni volta che rigeneriamo il file di configurazione di GRUB il sistema rileva eventuali sottovolumi avviabili (snapshot comprese) aggiungendoli al menu di avvio del GRUB &lt;br /&gt;
 # grub-mkconfig -o /boot/grub/grub.cfg&lt;br /&gt;
&lt;br /&gt;
=== Backup ===&lt;br /&gt;
Le snapshot possono essere salvate su un disco esterno, a patto che questo abbia un file system btrfs.&lt;br /&gt;
L'operazione di trasferimento può essere effettuata soltanto su snapshot in sola lettura.&lt;br /&gt;
Si ipotizza che il proprio disco di sistema sia montato in /mnt/btrfs ed il disco esterno in /mnt/ext&lt;br /&gt;
&lt;br /&gt;
* Creare la snapshot in sola lettura (opzione -r) oppure impostare il flag di sola lettura ad una snapshot già fatta&lt;br /&gt;
 btrfs subvolume snapshot -r @root @root-yymmdd-ro&lt;br /&gt;
 btrfs property set /mnt/btrfs/@root-yymmdd-ro ro true&lt;br /&gt;
* Trasferire la snapshot sul disco esterno.&lt;br /&gt;
 btrfs send /mnt/btrfs/@root-yymmdd-ro | btrfs receive /mnt/ext&lt;br /&gt;
* Quando necessario, ripristinare la snapshot&lt;br /&gt;
 btrfs send /mnt/ext/@root-yymmdd-ro | btrfs receive /mnt/btrfs/&lt;br /&gt;
* Eventualmente, rinominare la snapshot e reimpostare i privilegi di scrittura&lt;br /&gt;
 mv /mnt/ext/{@root-yymmdd-ro,@root}&lt;br /&gt;
 btrfs property set /mnt/btrfs/@root ro false&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== RAID ===&lt;br /&gt;
Tipologie e caratteristiche dei raid [https://btrfs.readthedocs.io/en/latest/mkfs.btrfs.html#profiles supportati]&lt;br /&gt;
&lt;br /&gt;
Confronto tra varie tecnologie di [https://blog.jenningsga.com/status-of-storage-within-linux/ raid]&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! RAID !! Redundancy Copies !! Redundancy Parity !! Redundancy Striping !! Spazio utilizzato !! Min/max n. dischi&lt;br /&gt;
|-&lt;br /&gt;
| disco singolo || 1 || || || 100% || 1/N&lt;br /&gt;
|- &lt;br /&gt;
| RAID0 || 1 || || 1 to N || 100% || 1/N&lt;br /&gt;
|- &lt;br /&gt;
| RAID1 || 2 || || ||  50% || 2/N &lt;br /&gt;
|- &lt;br /&gt;
| RAID1C3 || 3 || || || 33% || 3/N&lt;br /&gt;
|- &lt;br /&gt;
| RAID1C4 || 4 || || || 25% || 4/N&lt;br /&gt;
|-&lt;br /&gt;
| RAID10 || 2 || || 1 to N || 50%  || 2/N&lt;br /&gt;
|-&lt;br /&gt;
| RAID5 || 1 || 1 || 2 to N-1 || (N-1)/N || 2/N&lt;br /&gt;
|-&lt;br /&gt;
| RAID6 || 1 || 2 || 3 to N-2 || (N-2)/N || 3/N&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====RAID 0====&lt;br /&gt;
 # mkfs.btrfs -d raid0 /dev/sda1 /dev/sdb1&lt;br /&gt;
&lt;br /&gt;
===== Montare il raid =====&lt;br /&gt;
 # mount /dev/sda1 /mnt&lt;br /&gt;
&lt;br /&gt;
(È equivalente a ''mount /dev/sdb1 /mnt'', il sistema riconosce che è presente un raid 0 e provvede al montaggio corretto dei dischi)&lt;br /&gt;
&lt;br /&gt;
Verifica del montaggio&lt;br /&gt;
 # btrfs filesystem show /mnt&lt;br /&gt;
&lt;br /&gt;
 Label: none  uuid: 4714fca3-bfcb-4130-ad2f-f560f2e12f8e&lt;br /&gt;
 Total devices 2 FS bytes used 27.75GiB&lt;br /&gt;
 devid    1 size 136.72GiB used 17.03GiB path /dev/sda1&lt;br /&gt;
 devid    2 size 136.72GiB used 17.01GiB path /dev/sdb1&lt;br /&gt;
&lt;br /&gt;
=====Aggiungere una partizione=====&lt;br /&gt;
 # btrfs device add /dev/sdc1 /mnt&lt;br /&gt;
&lt;br /&gt;
 # btrfs filesystem show /mnt&lt;br /&gt;
 Label: none  uuid: 4714fca3-bfcb-4130-ad2f-f560f2e12f8e&lt;br /&gt;
 Total devices 3 FS bytes used 27.75GiB&lt;br /&gt;
 devid    1 size 136.72GiB used 17.03GiB path /dev/sda1&lt;br /&gt;
 devid    2 size 136.72GiB used 17.01GiB path /dev/sdb1&lt;br /&gt;
 devid    3 size 136.72GiB used 0.00 path /dev/sdc1&lt;br /&gt;
&lt;br /&gt;
Adesso è necessario effettuare una redistribuzione dei dati sui tre dischi&lt;br /&gt;
 # btrfs balance start -d -m /mnt&lt;br /&gt;
&lt;br /&gt;
Per vedere a che punto del bilanciamento è arrivato il sistema&lt;br /&gt;
 # btrfs fi balance status /&lt;br /&gt;
&lt;br /&gt;
 # btrfs filesystem show /mnt&lt;br /&gt;
 Label: none  uuid: 4714fca3-bfcb-4130-ad2f-f560f2e12f8e&lt;br /&gt;
 Total devices 3 FS bytes used 27.78GiB&lt;br /&gt;
 devid    1 size 136.72GiB used 10.03GiB path /dev/sda1&lt;br /&gt;
 devid    2 size 136.72GiB used 10.03GiB path /dev/sdb1&lt;br /&gt;
 devid    3 size 136.72GiB used 11.00GiB path /dev/sdc1&lt;br /&gt;
&lt;br /&gt;
=====Rimuovere un device=====&lt;br /&gt;
 # btrfs device delete /dev/sdb1 /mnt&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
==== RAID 1 ====&lt;br /&gt;
=====Creazione di un raid1 ex novo===== &lt;br /&gt;
Copiare la tabella delle partizioni da sda a sdb&lt;br /&gt;
 # sfdisk -d /dev/sda | sfdisk /dev/sdb&lt;br /&gt;
&lt;br /&gt;
Creare il raid&lt;br /&gt;
 # mkfs.btrfs -d raid1 -m raid1 /dev/sda1 /dev/sdb1&lt;br /&gt;
&lt;br /&gt;
===== Aggiungere un mirror ad un disco esistente =====&lt;br /&gt;
 # btrfs device add /dev/sdb1 ''/punto_di_mount''&lt;br /&gt;
 # btrfs balance start -dconvert=raid1 -mconvert=raid1 ''/punto_di_mount''&lt;br /&gt;
&lt;br /&gt;
===== GRUB =====&lt;br /&gt;
Se si utilizza un raid1 per la partizione di sistema '''/''' e si vuole rendere Linux avviabile automaticamente anche in caso di danneggiamento o mancanza di uno dei due dischi del raid occorrerà che sul secondo disco sia clonata la partizione EFI o BIOS GRUB (es.: /dev/sda1) e che vi sia installato il bootloader.&lt;br /&gt;
 # dd if=/dev/sda1 of=/dev/sdb1&lt;br /&gt;
 # grub-install /dev/sdb&lt;br /&gt;
&lt;br /&gt;
=====Sostituzione device danneggiato=====&lt;br /&gt;
Verificare qual è il disco che dà dei problemi&lt;br /&gt;
 # mount /dev/sda1 ''/punto_di_mount'' -o degraded&lt;br /&gt;
 # btrfs device stats ''/punto_di_mount''&lt;br /&gt;
 # btrfs filesystem show ''/punto_di_mount''&lt;br /&gt;
 # btrfs device usage ''/punto_di_mount''&lt;br /&gt;
&lt;br /&gt;
Ipotizzando che '''1''' sia l'ID del disco danneggiato secondo i comandi dati in precedenza&lt;br /&gt;
 # btrfs replace start '''1''' /dev/sdc1 ''/punto_di_mount''&lt;br /&gt;
&lt;br /&gt;
Per monitorare lo stato di ripristino del raid&lt;br /&gt;
 # btrfs replace status ''/punto_di_mount''&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
 # btrfs device delete missing /mnt&lt;br /&gt;
&lt;br /&gt;
==== RAID 5 ====&lt;br /&gt;
{{Note&lt;br /&gt;
|type=warning &lt;br /&gt;
| text= '''ATTENZIONE il raid5 su BTRFS è considerato [https://btrfs.readthedocs.io/en/latest/btrfs-man5.html#raid56-status-and-recommended-practices non sicuro] e se ne sconsiglia il suo utilizzo'''&lt;br /&gt;
}}&lt;br /&gt;
==== RAID 1C ====&lt;br /&gt;
&lt;br /&gt;
===== RAID 1C3 =====&lt;br /&gt;
Se si desidera duplicare i dati rispettivamente 2 volte in modo da poter perdere fino a due dischi su 3 senza perdere dati è possibile utilizzare una modalità chiamata raid1c3&lt;br /&gt;
&lt;br /&gt;
Per creare ex novo il raid1c3&lt;br /&gt;
 # mkfs.btrfs -d raid1c3 -m raid1c3 /dev/sda1 /dev/sdb1 /dev/sdc1&lt;br /&gt;
&lt;br /&gt;
Per convertire a raid1c3&lt;br /&gt;
 # btrfs balance start -dconvert=raid1c3 -mconvert=raid1c3 /storage-btrfs/&lt;br /&gt;
&lt;br /&gt;
===== RAID 1C4 =====&lt;br /&gt;
Se si desidera duplicare i dati rispettivamente 3 volte in modo da poter perdere fino a 3 dischi su 4 senza perdere dati è possibile utilizzare una modalità chiamata raid1c4&lt;br /&gt;
&lt;br /&gt;
Per creare ex novo il raid1c3&lt;br /&gt;
 # mkfs.btrfs -d raid1c4 -m raid1c4 /dev/sda1 /dev/sdb1 /dev/sdc1&lt;br /&gt;
&lt;br /&gt;
Per convertire a raid1c4&lt;br /&gt;
 # btrfs balance start -dconvert=raid1c4 -mconvert=raid1c4 /storage-btrfs/&lt;br /&gt;
&lt;br /&gt;
== ZFS ==&lt;br /&gt;
===Installazione di modulo e le utility da AUR===&lt;br /&gt;
 # pacman-key -r F75D9D76&lt;br /&gt;
 # pacman-key --lsign-key F75D9D76&lt;br /&gt;
 $ pikaur -S zfs-utils zfs-dkms&lt;br /&gt;
&lt;br /&gt;
===Installazione di modulo e utility da archzfs===&lt;br /&gt;
Modificare le seguenti righe al file '''pacman.conf''' di archiso&lt;br /&gt;
 [archzfs-testing]&lt;br /&gt;
 Server = https://archzfs.com/$repo/$arch&lt;br /&gt;
&lt;br /&gt;
 # pacman-key -r DDF7DB817396A49B2A2723F7403BD972F75D9D76&lt;br /&gt;
 # pacman-key --lsign-key DDF7DB817396A49B2A2723F7403BD972F75D9D76&lt;br /&gt;
 # pacman -S zfs-utils zfs-linux&lt;br /&gt;
&lt;br /&gt;
===Configurare il FS===&lt;br /&gt;
[https://wiki.archlinux.org/title/ZFS Comandi] per ottenere informazioni utili sul filesystem e sui pool&lt;br /&gt;
 # zfs list -t  all&lt;br /&gt;
 # zpool status&lt;br /&gt;
 # zpool list&lt;br /&gt;
&lt;br /&gt;
Abilitare i vari servizi sul filesystem&lt;br /&gt;
 # systemctl enable zfs-zed.service&lt;br /&gt;
 # systemctl enable zfs-mount.service&lt;br /&gt;
 # systemctl enable zfs-share.service&lt;br /&gt;
 # systemctl enable zfs-import.target&lt;br /&gt;
 # systemctl enable zfs.target&lt;br /&gt;
&lt;br /&gt;
Creare un pool su un disco&lt;br /&gt;
 # zpool create &amp;quot;pool&amp;quot; sda&lt;br /&gt;
&lt;br /&gt;
Creare un pool su una partizione&lt;br /&gt;
 # zpool create &amp;quot;pool&amp;quot; sda2&lt;br /&gt;
&lt;br /&gt;
Importare un pool&lt;br /&gt;
 # zpool import &amp;quot;pool&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Aggiungere pool alla cache per auto-import e mount (abilitare i vari demoni zfs)&lt;br /&gt;
 # zpool set cachefile=/etc/zfs/zpool.cache &amp;quot;pool&amp;quot;&lt;br /&gt;
&lt;br /&gt;
oppure si possono caricare i mountpoint in modalità legacy dall'fstab&lt;br /&gt;
 # zfs create -o mountpoint=legacy ''pool''/directory&lt;br /&gt;
&lt;br /&gt;
Aggiungere la compressione&lt;br /&gt;
 # zfs get compression ''pool''&lt;br /&gt;
 # zfs set compression=lz4 ''pool''&lt;br /&gt;
&lt;br /&gt;
Vedere le proprietà di un ''pool''&lt;br /&gt;
 # zfs get all ''zpool''&lt;br /&gt;
&lt;br /&gt;
==== RAID ====&lt;br /&gt;
Creare un pool in raid0&lt;br /&gt;
 # zpool create &amp;quot;pool&amp;quot; /dev/sdb /dev/sdc&lt;br /&gt;
&lt;br /&gt;
Creare un pool in raid1&lt;br /&gt;
 # zpool create &amp;quot;pool&amp;quot; mirror /dev/sdb /dev/sc&lt;br /&gt;
&lt;br /&gt;
Creare un pool ''raid5'' su più dischi&lt;br /&gt;
 # zpool create &amp;quot;pool&amp;quot; raidz /dev/sdb /dev/sdc /dev/sdd&lt;br /&gt;
&lt;br /&gt;
Creare un pool raid5 su immagini&lt;br /&gt;
 # zpool create &amp;quot;pool&amp;quot; raidz /path/1.img /path/2.img /path/3.img&lt;br /&gt;
&lt;br /&gt;
* [https://docs.oracle.com/cd/E19253-01/819-5461/gbbvf/index.html Sostituire] disco in raid&lt;br /&gt;
&lt;br /&gt;
Rimuovere il disco da sostituire&lt;br /&gt;
 # zpool offline disco1&lt;br /&gt;
&lt;br /&gt;
Inserire il nuovo disco&lt;br /&gt;
 # zpool replace &amp;quot;pool&amp;quot; disco1&lt;br /&gt;
 # zpool online disco1&lt;br /&gt;
&lt;br /&gt;
* Utilizza un altro disco montato al posto di quello danneggiato&lt;br /&gt;
 # zpool replace &amp;quot;pool&amp;quot; disco1 disco2&lt;br /&gt;
&lt;br /&gt;
Aggiungere uno o più dischi ad un pool&lt;br /&gt;
 # zpool add &amp;quot;pool&amp;quot; mirror disco3 disco4&lt;br /&gt;
 # zpool add &amp;quot;pool&amp;quot; raidz disco3 disco4 disco5&lt;br /&gt;
&lt;br /&gt;
Rimuovere disco1 da pool se aggiunto erroneamente&lt;br /&gt;
 # zpool remove &amp;quot;pool&amp;quot; disco1&lt;br /&gt;
&lt;br /&gt;
Controllare lo stato di un pool&lt;br /&gt;
 # zpool status&lt;br /&gt;
&lt;br /&gt;
Correggere eventuali errori&lt;br /&gt;
 # zpool clear ''pool'' ''disco''&lt;br /&gt;
 # zpool scrub  ''pool''&lt;br /&gt;
&lt;br /&gt;
=== Root filesystem ===&lt;br /&gt;
* Guida ufficiale [https://openzfs.github.io/openzfs-docs/Getting%20Started/Arch%20Linux/Root%20on%20ZFS/1-preparation.html Root on ZFS]&lt;br /&gt;
&lt;br /&gt;
Per prima cosa organizzare la tabella delle partizioni del [[#Preparazione_del_disco | disco]]&lt;br /&gt;
&lt;br /&gt;
Formattare la partizione e creare il dataset (senza mountpoint)&lt;br /&gt;
 # zpool create -m none rpool ''sda2''&lt;br /&gt;
 &lt;br /&gt;
Smontare il pool e rimontarlo in modalità legacy &lt;br /&gt;
 # zfs create -o mountpoint=none rpool/ROOT&lt;br /&gt;
 # zfs create -o mountpoint=legacy rpool/ROOT/arch&lt;br /&gt;
 # zpool set bootfs=rpool/ROOT/arch rpool&lt;br /&gt;
 # mount -t zfs rpool/ROOT /mnt&lt;br /&gt;
''rpool'' è il nome che abbiamo voluto dare al volume contenente il filesystem di sistema&lt;br /&gt;
&lt;br /&gt;
NB: se NON si usa il mountpoint in modalità legacy occorrerà impostare &amp;lt;code&amp;gt;canmount=noauto&amp;lt;/code&amp;gt; su tutti i dataset con &amp;lt;code&amp;gt;mountpoint=/&amp;lt;/code&amp;gt; (es.: zfs create -o mountpoint=/ -o canmount=noauto rpool/ROOT/arch) altrimenti il sistema cercherà di eseguirne automaticamente l'automount e fallirà se esistono più filesystem da montare su /&lt;br /&gt;
&lt;br /&gt;
Se volessimo aggiungere altri pool es.:&lt;br /&gt;
 # zfs create rpool/home&lt;br /&gt;
 # zfs create rpool/arch/pkg&lt;br /&gt;
 # zfs create rpool/var&lt;br /&gt;
 # zfs create rpool/srv&lt;br /&gt;
&lt;br /&gt;
Configurare la cache degli zpool&lt;br /&gt;
 # zpool set cachefile=/etc/zfs/rpool.cache rpool &lt;br /&gt;
&lt;br /&gt;
Copiare il file di cache nel sistema dove dovremo eseguire il chroot per l'installazione.&lt;br /&gt;
 # mkdir -p /mnt/etc/zfs&lt;br /&gt;
 # cp /etc/zfs/rpool.cache /mnt/etc/zfs/rpool.cache&lt;br /&gt;
&lt;br /&gt;
Installare il sistema di base&lt;br /&gt;
 # pacstrap -K /mnt base linux linux-firmware zfs-utils zfs-linux&lt;br /&gt;
&lt;br /&gt;
Altri pacchetti consigliati&lt;br /&gt;
 # pacstrap -K /mnt base-devel net-tools networkmanager nano zsh grml-zsh-config busybox&lt;br /&gt;
&lt;br /&gt;
Eseguire il chroot per procedere con l'installazione&lt;br /&gt;
 # arch-chroot /mnt&lt;br /&gt;
&lt;br /&gt;
Configurare il mountpoint su fstab&lt;br /&gt;
/etc/fstab &lt;br /&gt;
 rpool/ROOT/arch      /       zfs         noatime     0 0&lt;br /&gt;
&lt;br /&gt;
Editare il file /etc/mkinitcpio.conf aggiungendo zfs prima del filesystem&lt;br /&gt;
 HOOKS=&amp;quot;base udev autodetect modconf block keyboard zfs filesystems&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Abilitare i servizi per ZFS all'avvio&lt;br /&gt;
 # systemctl enable zfs-zed.service&lt;br /&gt;
 # systemctl enable zfs-mount.service&lt;br /&gt;
 # systemctl enable zfs-share.service&lt;br /&gt;
 # systemctl enable zfs-import.target&lt;br /&gt;
 # systemctl enable zfs.target&lt;br /&gt;
&lt;br /&gt;
Impostare una password di root&lt;br /&gt;
 # passwd&lt;br /&gt;
&lt;br /&gt;
Ricreare il ramdisk col supporto per ZFS&lt;br /&gt;
 # mkinitcpio -p linux&lt;br /&gt;
&lt;br /&gt;
Installare il [[Appunti_Arch_Linux#BOOT_LOADER|Boot Loader]]&lt;br /&gt;
&lt;br /&gt;
Uscire dal chroot e terminazione dell'installazione&lt;br /&gt;
 # exit&lt;br /&gt;
 # zfs unmount -a&lt;br /&gt;
 # cp /etc/zfs/rpool.cache /mnt/etc/zfs/rpool.cache&lt;br /&gt;
 # zpool export rpool&lt;br /&gt;
 # reboot&lt;br /&gt;
&lt;br /&gt;
==== BOOT LOADER ====&lt;br /&gt;
===== ZFSBootMenu =====&lt;br /&gt;
Per gestire a meglio gli snapshot e la clonazione dei pool è consigliabile utilizzare, su PC che supportano UEFI, il boot loader [https://docs.zfsbootmenu.org/en/latest/guides/alpine/uefi.html ZFSBootMenu].&lt;br /&gt;
&lt;br /&gt;
Esportiamo le variabile per configurare il primo disco /dev/sda come disco di avvio&lt;br /&gt;
 # export BOOT_DISK=&amp;quot;/dev/sda&amp;quot;&lt;br /&gt;
 # export BOOT_PART=&amp;quot;1&amp;quot;&lt;br /&gt;
 # export BOOT_DEVICE=&amp;quot;${BOOT_DISK}${BOOT_PART}&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Assicuriamoci che il nostro pool di root sia configurato come avviabile&lt;br /&gt;
 # zpool set bootfs=''rpool/ROOT/'' ''rpool''&lt;br /&gt;
&lt;br /&gt;
Formattiamo sda1 per creare la partizione EFI di boot&lt;br /&gt;
 # mkfs.vfat -F32 &amp;quot;$BOOT_DEVICE&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Aggiungiamola all'fstab e montiamola&lt;br /&gt;
 # cat &amp;lt;&amp;lt; EOF &amp;gt;&amp;gt; /etc/fstab&lt;br /&gt;
 $BOOT_DEVICE /boot/efi vfat defaults 0 0&lt;br /&gt;
 EOF&lt;br /&gt;
&lt;br /&gt;
 # mkdir -p /boot/efi&lt;br /&gt;
 # mount /boot/efi&lt;br /&gt;
&lt;br /&gt;
Scarichiamo ed installiamo il boot loader&lt;br /&gt;
 # mkdir -p /boot/efi/EFI/ZBM&lt;br /&gt;
 # curl -o /boot/efi/EFI/ZBM/VMLINUZ.EFI -L https://get.zfsbootmenu.org/efi&lt;br /&gt;
 # cp /boot/efi/EFI/ZBM/VMLINUZ.EFI /boot/efi/EFI/ZBM/VMLINUZ-BACKUP.EFI&lt;br /&gt;
&lt;br /&gt;
Forziamo zfsbootmenu a montare il nostro dataset con i permessi di scrittura&lt;br /&gt;
 # zfs set org.zfsbootmenu:commandline=&amp;quot;quiet loglevel=4 rw&amp;quot; rpool/ROOT&lt;br /&gt;
&lt;br /&gt;
Installiamo e configuriamo  ''efibootmgr''&lt;br /&gt;
 # pacman -S efibootmgr&lt;br /&gt;
&lt;br /&gt;
 # efibootmgr -c -d &amp;quot;$BOOT_DISK&amp;quot; -p &amp;quot;$BOOT_PART&amp;quot; \&lt;br /&gt;
  -L &amp;quot;ZFSBootMenu (Backup)&amp;quot; \&lt;br /&gt;
  -l \\EFI\\ZBM\\VMLINUZ-BACKUP.EFI&lt;br /&gt;
&lt;br /&gt;
 # efibootmgr -c -d &amp;quot;$BOOT_DISK&amp;quot; -p &amp;quot;$BOOT_PART&amp;quot; \&lt;br /&gt;
  -L &amp;quot;ZFSBootMenu&amp;quot; \&lt;br /&gt;
  -l \\EFI\\ZBM\\VMLINUZ.EFI&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Se si utilizza un pool distribuito su più dischi (RAID1 o RAIDZ) occorrerà installare il bootloader anche sugli altri dispositivi (nel caso del disco /dev/sdb).&lt;br /&gt;
&lt;br /&gt;
 # mount /dev/sdb1 /boot/efi&lt;br /&gt;
 # curl -o /boot/efi/EFI/ZBM/VMLINUZ.EFI -L https://get.zfsbootmenu.org/efi&lt;br /&gt;
 # efibootmgr -c -d &amp;quot;$BOOT_DISK&amp;quot; -p &amp;quot;$BOOT_PART&amp;quot; \&lt;br /&gt;
  -L &amp;quot;ZFSBootMenu sdb&amp;quot; \&lt;br /&gt;
  -l \\EFI\\ZBM\\VMLINUZ.EFI&lt;br /&gt;
&lt;br /&gt;
===== GRUB =====&lt;br /&gt;
Se non ci interessa gestire snapshot o utilizziamo un PC con BIOS è possibile optare per GRUB &lt;br /&gt;
 # pacman -S grub&lt;br /&gt;
 # grub-install /dev/sda&lt;br /&gt;
 (se si usa un pool composto da più dischi es. raidz per il filesystem di root è consigliabile installare grub su tutti i dischi: sda, sdb, sdc, sdd...)&lt;br /&gt;
 # grub-mkconfig -o /boot/grub/grub.cfg&lt;br /&gt;
&lt;br /&gt;
Esempio&lt;br /&gt;
 #Grub entry&lt;br /&gt;
 menuentry 'Arch Linux'{&lt;br /&gt;
       insmod gzio&lt;br /&gt;
       insmod part_gpt&lt;br /&gt;
       insmod zfs&lt;br /&gt;
       set root='hd0,gpt3'&lt;br /&gt;
        echo    'Loading Linux linux ...'&lt;br /&gt;
        linux   /ROOT@/boot/vmlinuz-linux root=ZFS=rpool/ROOT rw  loglevel=3 quiet&lt;br /&gt;
        echo    'Loading initial ramdisk ...'&lt;br /&gt;
        initrd  /ROOT@/boot/initramfs-linux.img&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
=== Snapshot ===&lt;br /&gt;
Snapshot del dataset ROOT&lt;br /&gt;
 # zfs snapshot -r rpool/ROOT''@snapshot-2023-03-07''&lt;br /&gt;
&lt;br /&gt;
Lista degli snapshot presenti&lt;br /&gt;
 # zfs list -t snapshot&lt;br /&gt;
&lt;br /&gt;
Ripristino dello snapshot&lt;br /&gt;
 # zfs rollback rpool''@snapshot-2023-03-07''&lt;br /&gt;
&lt;br /&gt;
Oltre che servire per il ripristino, possono essere montati per esplorarne il contenuto, ma non è possibile modificarlo.&lt;br /&gt;
 # mount -t zfs rpool@''2023-04-11'' /mnt/''snapshot''&lt;br /&gt;
&lt;br /&gt;
Copia locale di un dataset&lt;br /&gt;
 # zfs send -R rpool/ROOT''@snapshot-2023-03-07'' | zfs recv -F rpool/ROOT/backup&lt;br /&gt;
&lt;br /&gt;
Invio via SSH di una snapshot&lt;br /&gt;
 # zfs send -R rpool/ROOT''@snapshot-2023-03-07''| ssh ''user@ip_address'' zfs recv tank/backups/rootzfs&lt;br /&gt;
&lt;br /&gt;
Backup locale di una snapshot&lt;br /&gt;
 # zfs send -R rpool/ROOT@snapshot | gzip &amp;gt; /tmp/zfs_backup.gz&lt;br /&gt;
&lt;br /&gt;
Restore del backup&lt;br /&gt;
 # gzcat /tmp/zfs_backup.gz | zfs recv -F rpool/ROOT&lt;br /&gt;
&lt;br /&gt;
==== Clone ====&lt;br /&gt;
Se vogliamo eseguire operazioni di scrittura su una snapshot occorre effettuare un clone del dataset&lt;br /&gt;
 # zfs snapshot ''rpool/home''@yesterday&lt;br /&gt;
 # zfs clone ''rpool/home''@yesterday rpool/new_home&lt;br /&gt;
&lt;br /&gt;
Per sostituire il filesystem principale col clone&lt;br /&gt;
 # zfs promote rpool/new_home&lt;br /&gt;
&lt;br /&gt;
=== ZFS Cifrato ===&lt;br /&gt;
Creare un dataset cifrato con password&lt;br /&gt;
 # zfs create -o encryption=on -o keyformat=''password'' ''nomepool''/''nomedataset''&lt;br /&gt;
&lt;br /&gt;
Generazione di una chiave di cifratura&lt;br /&gt;
 # dd if=/dev/random of=/path/to/key bs=1 count=32&lt;br /&gt;
&lt;br /&gt;
Creare un dataset cifrato con una chiave di cifratura &lt;br /&gt;
 # zfs create -o encryption=on -o keyformat=raw -o keylocation=''file:///directory/della/chiave'' ''nomepool''/''nomedataset''&lt;br /&gt;
&lt;br /&gt;
Controllare il percorso della chiave per ''nomepool''/''nomedataset''&lt;br /&gt;
 # zfs get keylocation ''nomepool''/''nomedataset''&lt;br /&gt;
&lt;br /&gt;
Cambiare il percorso della chiave&lt;br /&gt;
 # zfs set keylocation=''file:///nuova/directory/della/chiave'' ''nomepool''/''nomedataset''&lt;br /&gt;
&lt;br /&gt;
Caricare manualmente le chiavi di cifratura prima del montaggio&lt;br /&gt;
 # zfs load-key ''nomepool''/''nomedataset'' # carica la chiave del determinato dataset&lt;br /&gt;
 # zfs load-key -a # carica tutte le chiavi del filesystem&lt;br /&gt;
&lt;br /&gt;
==== Unlock con systemd ====&lt;br /&gt;
Creare script per il caricamento delle chiavi all'avvio &lt;br /&gt;
&lt;br /&gt;
* Caricando la password dal keyfile&lt;br /&gt;
''/etc/systemd/system/zfs-loadkey-file.service''&lt;br /&gt;
&lt;br /&gt;
 [Unit]&lt;br /&gt;
 Description=Load ZFS encryption keys&lt;br /&gt;
 DefaultDependencies=no&lt;br /&gt;
 After=zfs-import.target&lt;br /&gt;
 Before=zfs-mount.service&lt;br /&gt;
 [Service]&lt;br /&gt;
 Type=oneshot&lt;br /&gt;
 RemainAfterExit=yes&lt;br /&gt;
 ExecStart=/usr/sbin/zfs load-key -a&lt;br /&gt;
 StandardInput=tty-force&lt;br /&gt;
 [Install]&lt;br /&gt;
 WantedBy=zfs-mount.service&lt;br /&gt;
&lt;br /&gt;
* Digitando la password&lt;br /&gt;
&lt;br /&gt;
''/etc/systemd/system/zfs-load-key@.service''&lt;br /&gt;
 [Unit]&lt;br /&gt;
 Description=Load %I encryption keys&lt;br /&gt;
 Before=systemd-user-sessions.service zfs-mount.service&lt;br /&gt;
 After=zfs-import.target&lt;br /&gt;
 Requires=zfs-import.target&lt;br /&gt;
 DefaultDependencies=no&lt;br /&gt;
 [Service]&lt;br /&gt;
 Type=oneshot&lt;br /&gt;
 RemainAfterExit=yes&lt;br /&gt;
 ExecStart=/bin/sh -c 'until (systemd-ask-password &amp;quot;Encrypted ZFS password for %I&amp;quot; --no-tty | zfs load-key %I); do echo &amp;quot;Try again!&amp;quot;; done'&lt;br /&gt;
 [Install]&lt;br /&gt;
 WantedBy=zfs-mount.service&lt;br /&gt;
&lt;br /&gt;
==== Unlock al login ====&lt;br /&gt;
Impostare il filesystem in modalità legacy così che non sia montato automaticamente all'avvio&lt;br /&gt;
 # zfs set mountpoint=legacy zroot/data/&lt;br /&gt;
&lt;br /&gt;
Modificare il file /etc/fstab&lt;br /&gt;
 zroot/data/         /home           zfs             rw,xattr,posixacl,noauto        0 0&lt;br /&gt;
&lt;br /&gt;
Creare il seguente script: &amp;lt;code&amp;gt;/sbin/mount-zfs-homedir&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 #&lt;br /&gt;
 set -eu&lt;br /&gt;
 # Password is given to us via stdin, save it in a variable for later&lt;br /&gt;
 PASS=$(cat -)&lt;br /&gt;
 #&lt;br /&gt;
 VOLNAME=&amp;quot;zroot/data/home&amp;quot;&lt;br /&gt;
 #&lt;br /&gt;
 # Unlock and mount the volume&lt;br /&gt;
 zfs load-key &amp;quot;$VOLNAME&amp;quot; &amp;lt;&amp;lt;&amp;lt; &amp;quot;$PASS&amp;quot; || continue&lt;br /&gt;
 zfs mount &amp;quot;$VOLNAME&amp;quot; || true # ignore errors&lt;br /&gt;
&lt;br /&gt;
Aggiungere lo script a PAM: /etc/pam.d/system-auth&lt;br /&gt;
&lt;br /&gt;
 auth       optional                    pam_exec.so          expose_authtok /sbin/mount-zfs-homedir&lt;br /&gt;
&lt;br /&gt;
=== Cache ===&lt;br /&gt;
Utilizzare un moderno disco a stato solido può essere una soluzione economica per velocizzare un pool, eventualmente anche raid&lt;br /&gt;
&lt;br /&gt;
 # zpool add -f ''rpool'' cache /dev/sdd1&lt;br /&gt;
 # zpool add -f ''rpool'' log /dev/sdd2&lt;br /&gt;
&lt;br /&gt;
=== Sharing ===&lt;br /&gt;
Non è molto noto, ma ZFS ha integrati dei [https://docs.oracle.com/cd/E36784_01/html/E36835/gayne.html#scrolltoc comandi] per permettere la condivisione del filesystem con altre macchine tramite i protocolli NFS o SMB.&lt;br /&gt;
&lt;br /&gt;
Premessa: occorrerà attivare il server NFS&lt;br /&gt;
 # systemctl start nfs-server.service&lt;br /&gt;
 # systemctl enable nfs-server.service&lt;br /&gt;
&lt;br /&gt;
Condividere tramite NFS l'intero pool ''home''&lt;br /&gt;
 # zfs set share.nfs=on ''pool''/home&lt;br /&gt;
&lt;br /&gt;
Verificare la condivisione&lt;br /&gt;
 # zfs get -r share.nfs ''pool''/home&lt;br /&gt;
 NAME             PROPERTY   VALUE  SOURCE&lt;br /&gt;
 pool/home        share.nfs  on     local&lt;br /&gt;
&lt;br /&gt;
Condividere tramite NFS la directory home dell'utente 1, 2...&lt;br /&gt;
 # zfs create ''pool''/home/'''utente1'''&lt;br /&gt;
 # zfs create ''pool''/home/'''utente2'''&lt;br /&gt;
&lt;br /&gt;
Si possono specificare opzioni di montaggio per i permessi sul mount&lt;br /&gt;
 # zfs set share.nfs.nosuid=on ''pool''/home/'''utente1'''&lt;br /&gt;
 # zfs set share.nfs=on ''pool''/home/'''utente1'''&lt;br /&gt;
&lt;br /&gt;
Condividere una directory con tutta la rete&lt;br /&gt;
 # zfs share -o share.nfs=on -o share.nfs.public=on pool/public%pubshare&lt;br /&gt;
&lt;br /&gt;
Condividere una directory con una parte della rete&lt;br /&gt;
 # zfs set share.nfs='rw=@192.0.10.0/16,rw=@192.0.11.0/24' pool/public%pubshare&lt;br /&gt;
&lt;br /&gt;
Disabilitare temporaneamente una condivisione&lt;br /&gt;
 # zfs unshare pool/home/''nomeshare''&lt;br /&gt;
&lt;br /&gt;
Rimuovere una condivisione&lt;br /&gt;
 # zfs set share.nfs=off pool/''share''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Montare share ===&lt;br /&gt;
Montare il volume pool1 della macchina con IP 192.168.0.2 su /mnt/pool1&lt;br /&gt;
 # mount -t nfs 192.168.0.2:/pool1 /mnt/pool1&lt;br /&gt;
&lt;br /&gt;
Aggiungere la seguente riga al file '''/etc/fstab''' per automatizzare il montaggio&lt;br /&gt;
 192.168.0.2:/pool1      /mnt/pool1      nfs       defaults          0          0&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== SWAP ===&lt;br /&gt;
Creare una partizione swap da 8 GiB&lt;br /&gt;
 # zfs create -V 8G '''&amp;lt;pool&amp;gt;/swap'''&lt;br /&gt;
&lt;br /&gt;
Formattazione della partizione&lt;br /&gt;
 # mkswap -f /dev/zvol/&amp;lt;pool&amp;gt;/swap&lt;br /&gt;
&lt;br /&gt;
Attivazione della swap&lt;br /&gt;
 # swapon /dev/zvol/&amp;lt;pool&amp;gt;/swap&lt;br /&gt;
&lt;br /&gt;
Aggiungere la swap al &amp;lt;code&amp;gt;/etc/fstab&amp;lt;/code&amp;gt;&lt;br /&gt;
 '''/dev/zvol/&amp;lt;pool&amp;gt;/swap''' none swap discard 0 0&lt;br /&gt;
&lt;br /&gt;
== Filesystem Cifrato ==&lt;br /&gt;
Esistono molti modi per cifrare volumi e file su Linux, come si può vedere da questa [https://wiki.archlinux.org/title/Data-at-rest_encryption#Comparison_table tabella]&lt;br /&gt;
&lt;br /&gt;
* Generare una password di 32 caratteri alfanumerici con /dev/random. &lt;br /&gt;
 cat /dev/random | tr -dc '[:alnum:]' | fold -w 32 | head -n 1&lt;br /&gt;
&lt;br /&gt;
=== EncFS ===&lt;br /&gt;
Cifrare una directory può essere un'alternativa alla cifratura di un intera partizione come avviene invece con Cryptsetup. EncFS è un filesystem user-space montabile tramite FUSE che permette di effettuare questa operazione. Rispetto ad un filesystem loopback criptato ci sono però diversi pregi e difetti.&lt;br /&gt;
&lt;br /&gt;
* Pro&lt;br /&gt;
# Selezionare selettivamente i contenuti da cifrare, rispetto ad avere un device completamente cifrato, appesantisce meno il lavoro della CPU specialmente quando si utilizzano processori datati privi del set di istruzioni AES.&lt;br /&gt;
# Dimensioni modificabili: un file system vuoto EncFS è composto da qualche dozzina di byte e può crescere a qualsiasi dimensione senza bisogno di essere riformattato. Con un dispositivi di cifratura a blocchi, si alloca un filesystem in anticipo con le dimensioni desiderate.&lt;br /&gt;
# Possibilità di backup incrementali: Un filesystem EncFS può essere salvato con una politica per file. Un programma di backup è in grado di rilevare quali file sono cambiati, anche se non sarà in grado di decifrarli.&lt;br /&gt;
# Permette di aggiungere la crittografia a qualsiasi filesystem&lt;br /&gt;
# Lavora a livello utente, non richiede permessi di amministratore&lt;br /&gt;
&lt;br /&gt;
* Contro&lt;br /&gt;
# Non permette di cifrare l'intera installazione, ma solo i file selezionati&lt;br /&gt;
# Chi ha accesso ai file crittografati può conoscerne i meta-dati (numero di file, permessi, dimensione)&lt;br /&gt;
# EncFS sembra non sia più attivamente mantenuto. Un'alternativa molto simile potrebbe essere gocryptfs.&lt;br /&gt;
&lt;br /&gt;
==== Montaggio automatico ====&lt;br /&gt;
Dato che non è possibile passare opzioni all'eseguibile encfs su fstab è necessario creare un wrapper, cioè uno script da rendere eseguibile (es. &amp;lt;code&amp;gt;/home/user/encfs.sh&amp;lt;/code&amp;gt;) che vada a recuperare la password da un file (es. ''encfs_password''), magari contenuto in una chiavetta USB anch'essa montata automaticamente all'avvio.&lt;br /&gt;
&lt;br /&gt;
Wrapper&lt;br /&gt;
 #!/bin/sh&lt;br /&gt;
 encfs --public --extpass=&amp;quot;cat /mnt/USB/encfs_password&amp;quot; $*&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
A questo punto è possibile aggiungere all'''/etc/fstab'' le seguenti righe.&lt;br /&gt;
 # Montaggio automatico della penna USB ''cafebabe-b00b5-deadbee'' all'avvio&lt;br /&gt;
 UUID=cafebabe-b00b5-deadbeef /mnt/USB auto defaults,auto 0 0&lt;br /&gt;
 # Richiamo del wrapper &lt;br /&gt;
 /home/''user''/encfs.sh#/home/''user''/.encrypted /home/''user''/decrypted fuse rw,user,auto 0 0&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== gocryptfs ===&lt;br /&gt;
Creare una directory cifrata ''crypt'' e montarla su ''dati''&lt;br /&gt;
 $ mkdir crypt dati&lt;br /&gt;
 $ gocryptfs -init crypt&lt;br /&gt;
 $ gocryptfs crypt dati&lt;br /&gt;
&lt;br /&gt;
Creare una versione cifrata di una preesistente home&lt;br /&gt;
&lt;br /&gt;
 $ mkdir /home/user.crypt&lt;br /&gt;
 $ gocryptfs -init -reverse /home/user&lt;br /&gt;
 $ gocryptfs -reverse /home/user /home/user.crypt&lt;br /&gt;
&lt;br /&gt;
È possibile aggiungere una linea simile alle seguente al file '''/etc/fstab''' per automatizzare il sistema di montaggio di una cartella cifrata durante il boot utilizzando un keyfile.&lt;br /&gt;
&lt;br /&gt;
 /home/user/cipher /home/user/plain fuse./usr/bin/gocryptfs nofail,allow_other,passfile=/tmp/password 0 0&lt;br /&gt;
&lt;br /&gt;
=== [https://wiki.archlinux.org/title/ECryptfs ECryptfs] ===&lt;br /&gt;
&lt;br /&gt;
=== VeraCrypt ===&lt;br /&gt;
[https://www.veracrypt.fr VeraCrypt] (fork di TrueCrypt) è un tool opensource dotato di '''interfaccia grafica''' che permette di configurare la cifratura di volumi reali o file immagini montate in loop. Ha una funzione particolare, chiamata '''Hidden Volume''' che permette di creare un volume nascosto all'interno di un normale volume VeraCrypt al quale si può accedere con una diversa password così da evitare in caso di necessità (ricatto, fidanzata/moglie gelosa, imposizione da parte delle forze dell'ordine) di mostrare il contenuto del reale archivio cifrato.&lt;br /&gt;
&lt;br /&gt;
=== LUKS ===&lt;br /&gt;
Questo strumento permette di crittografare un intero disco o una partizione, es. /dev/'''sdc2''':&lt;br /&gt;
 &lt;br /&gt;
 # cryptsetup luksFormat --cipher aes-xts-plain64 --key-size 512 --hash sha512 --iter-time 5000 /dev/'''sdc2'''&lt;br /&gt;
 &lt;br /&gt;
Una volta formattato il device è possibile montarlo, verrà chiesto di creare una password a meno che nel comando non venga esplicitato un file con la chiave di cifratura&lt;br /&gt;
 # cryptsetup open /dev/'''sdc2''' lukspart&lt;br /&gt;
&lt;br /&gt;
Adesso è possibile formattare il device col filesystem che preferiamo&lt;br /&gt;
 # mkfs.btrfs /dev/mapper/lukspart&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[https://wiki.golem.linux.it/Installare_Arch_Linux_in_una_partizione_cifrata How-to GOLEM]&lt;br /&gt;
&lt;br /&gt;
[https://guide.debianizzati.org/index.php/Volumi_criptati_LUKS_-_Creazione_e_uso_con_cryptmount How-to Debianizzati]&lt;br /&gt;
&lt;br /&gt;
=== [https://wiki.archlinux.org/title/Fscrypt FScrypt] ===&lt;br /&gt;
&lt;br /&gt;
=== [[Appunti_Arch_Linux#ZFS_Cifrato|ZFS]] ===&lt;br /&gt;
&lt;br /&gt;
= RAID mdadm =&lt;br /&gt;
Su Linux era possibile effettuare RAID via software anche prima dell'avvento di filesystem di nuova generazione come btrfs o zfs. Per fare ciò è possibile utilizzare il comando &amp;lt;code&amp;gt;mdadm&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Vedere l'organizzazione della tabella delle partizioni dei dischi&lt;br /&gt;
 $ lsblk&lt;br /&gt;
&lt;br /&gt;
 sda      8:16   0 447.1G  0 disk &lt;br /&gt;
 ├─sda1   8:17   0   500M  0 part &lt;br /&gt;
 ├─sda2   8:18   0    16G  0 part [SWAP]&lt;br /&gt;
 └─sda3   8:19   0 430.6G  0 part /&lt;br /&gt;
                                 &lt;br /&gt;
 sdb      8:32   1   3.7G  0 disk &lt;br /&gt;
 ├─sdb1   8:33   1   3.5G  0 part &lt;br /&gt;
 ├─sdb2   8:34   1   239M  0 part [SWAP]&lt;br /&gt;
 └─sdb3   8:19   0 430.6G  0 part /&lt;br /&gt;
&lt;br /&gt;
Nell'esempio ci sono due dischi (sda, sdb) contenenti 3 partizioni: EFI, SWAP e Linux.&lt;br /&gt;
&lt;br /&gt;
== RAID 0 ==&lt;br /&gt;
Creare un volume ''md3'' che costituito dalla somma delle due partizioni sda3 e sdb3&lt;br /&gt;
 # mdadm --create --verbose /dev/md3 --level=0 --raid-devices=2 /dev/sda3 /dev/sdb3&lt;br /&gt;
&lt;br /&gt;
Verificare che il raid funzioni correttamente&lt;br /&gt;
 # mdadm --detail /dev/md0&lt;br /&gt;
&lt;br /&gt;
Utilizzare il nuovo volume md3, formattato col filesystem XFS, per una nuova installazione di Arch Linux (montandolo in /mnt)&lt;br /&gt;
 # mkfs.xfs /dev/md3&lt;br /&gt;
 # mount /dev/md3 /mnt/&lt;br /&gt;
&lt;br /&gt;
Per memorizzare l'array nel file di configurazione&lt;br /&gt;
 # mdadm –Es &amp;gt; /etc/mdadm.conf&lt;br /&gt;
&lt;br /&gt;
== RAID 1 ==&lt;br /&gt;
Creare un volume ''md3'' mirror delle due partizioni sda3 e sdb3&lt;br /&gt;
 # mdadm --create /dev/md3 /dev/sda3 /dev/sdb3 --level=1 --raid-devices=2&lt;br /&gt;
&lt;br /&gt;
== RAID 5 ==&lt;br /&gt;
Creare un volume ''md3'' con un [https://en.wikipedia.org/wiki/Standard_RAID_levels#RAID_5 raid5], ovviamente stavolta occorreranno almeno 3 dischi es.: sda3, sdb3, sdc3. &lt;br /&gt;
&lt;br /&gt;
Per creare tre partizioni tutte della stessa dimensione è possibile copiare su sdb e sdc la tabella delle partizioni di sda&lt;br /&gt;
 #  sfdisk -d /dev/sda | sfdisk /dev/sdb&lt;br /&gt;
 #  sfdisk -d /dev/sda | sfdisk /dev/sdc&lt;br /&gt;
&lt;br /&gt;
Creare l'array in raid5&lt;br /&gt;
 # mdadm --create /dev/md/md3 /dev/sda1 /dev/sdb1 /dev/sdc1 --level=5 --raid-devices=3 --bitmap=internal&lt;br /&gt;
&lt;br /&gt;
== Modificare l'array ==&lt;br /&gt;
È possibile passare da raid1 a raid5&lt;br /&gt;
 # mdadm --grow /dev/md3 --level=5&lt;br /&gt;
 # mdadm --grow /dev/md3 --add /dev/sdc3 --raid-devices=3&lt;br /&gt;
&lt;br /&gt;
== Accorgersi di un guasto ==&lt;br /&gt;
Nei raid 1 e 5 in caso di danneggiamento di un disco sarà possibile sostituirlo e ricostruire l'array senza perdere dati. Nell'ipotesi di avere un guasto su '''sdb''' in un raid1 comparirà qualcosa di simile a questo eseguendo &amp;lt;code&amp;gt;cat /proc/mdstat&amp;lt;/code&amp;gt;&lt;br /&gt;
 md3 : active raid1 sda3[1]&lt;br /&gt;
 ''blocks [2/2] [U_]'' &lt;br /&gt;
invece che&lt;br /&gt;
 md3 : active raid1 sda3[1] '''sdb3'''[0]&lt;br /&gt;
      262016 blocks [2/2] [UU]&lt;br /&gt;
&lt;br /&gt;
===Rimuovere il disco danneggiato dal RAID===&lt;br /&gt;
Si dovrà marcare sdb3 come danneggiata e andrà rimossa dall'array.&lt;br /&gt;
 # mdadm --manage /dev/md3 --fail /dev/sdb3&lt;br /&gt;
 # mdadm --manage /dev/md3 --remove /dev/sdb3&lt;br /&gt;
&lt;br /&gt;
Se avessimo più array (es. md1, md2...) contenenti partizioni del disco sdb (sdb1, sdb2...), l'operazione andrebbe ripetuta per ciascuno di essi es.:&lt;br /&gt;
 # mdadm --manage /dev/md1 --fail /dev/sdb1&lt;br /&gt;
 # mdadm --manage /dev/md1 --remove /dev/sdb1&lt;br /&gt;
&lt;br /&gt;
 #  cat /proc/mdstat&lt;br /&gt;
 Personalities : [linear] [multipath] [raid0] [raid1] [raid5] [raid4] [raid6] [raid10]&lt;br /&gt;
 md0 : active raid1 sda3[0]&lt;br /&gt;
 24418688 blocks [2/1] [U_]&lt;br /&gt;
&lt;br /&gt;
 unused devices: &amp;lt;none&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Sostituzione del disco danneggiato ===&lt;br /&gt;
Spegnere il computer, rimuovere il disco guasto e collegarne al suo posto uno funzionante.&lt;br /&gt;
&lt;br /&gt;
'''NB: il nuovo disco dovrà essere di dimensioni uguali o maggiori del disco sostituito'''&lt;br /&gt;
&lt;br /&gt;
Installato il nuovo disco, riaccendere il PC, loggarsi come root e ricreare sul nuovo sdb le stesse partizioni presenti su sda:&lt;br /&gt;
 # sfdisk -d /dev/sda | sfdisk /dev/sdb&lt;br /&gt;
 # fdisk -l ''(per controllare che le partizioni siano uguali)''&lt;br /&gt;
&lt;br /&gt;
=== Ripristino del RAID 1 ===&lt;br /&gt;
Aggiungere ''/dev/sdb3'' a ''/dev/md3''&lt;br /&gt;
 # mdadm --manage /dev/md3 --add /dev/sdb3&lt;br /&gt;
&lt;br /&gt;
Se avessimo più array (es. md1, md2...) contenenti partizioni del disco sdb (sdb1, sdb2...), l'operazione andrebbe ripetuta per ciascuno di essi es.:&lt;br /&gt;
  # mdadm --manage /dev/md1 --add /dev/sdb1&lt;br /&gt;
&lt;br /&gt;
Controllare che tutto sia andato a buon fine&lt;br /&gt;
 # cat /proc/mdstat&lt;br /&gt;
&lt;br /&gt;
= LVM =&lt;br /&gt;
Il [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 Logical Volume Manager] (LVM o gestore logico dei volumi) è un software per la gestione dei dischi che permette di superare le limitazioni legate al normale partizionamento di questi ultimi. Si tratta di una specie di ''strato'' che si va a frapporre tra il dispositivo fisico ed il filesystem. Permette di gestire dinamicamente aggiunta, rimozione o ridimensionamento dello spazio di archiviazione, il RAID, nonché lo snapshot dei volumi.&lt;br /&gt;
&lt;br /&gt;
LVM è un prodotto oltremodo maturo, disponibile per Linux sin dal kernel 2.4, per questa ragione distribuzioni orientate al mercato aziendale come RedHat lo hanno scelto, accoppiandolo a XFS o ext4, come soluzione predefinita per implementare la maggior parte delle caratteristiche fornite dai moderni filesystem come BTRFS o ZFS &lt;br /&gt;
&lt;br /&gt;
LVM si basa sui seguenti concetti&lt;br /&gt;
&lt;br /&gt;
* '''Physical Volumes (PV)''': rappresentano qualsiasi disco si voglia inizializzare (&amp;quot;formattare&amp;quot;) come sottosistema LVM&lt;br /&gt;
 # pvcreate /dev/sda1&lt;br /&gt;
 # pvcreate /dev/sdb3&lt;br /&gt;
 # pvcreate /dev/sdc&lt;br /&gt;
 # pvdisplay&lt;br /&gt;
&lt;br /&gt;
* '''Volume Groups (VG)''': sono costituiti da ''physical volumes'' e rappresentano la capacità totale delle risorse di un LVM&lt;br /&gt;
 # vgcreate vg0 /dev/sda1 /dev/sdb3 /dev/sdc&lt;br /&gt;
 # vgdisplay vg0&lt;br /&gt;
&lt;br /&gt;
* '''Logical Volumes (LV)''': utilizzano le risorse messe a disposizione dai ''volume groups''. Possono essere inizializzati anche con proprietà di RAID o cache.&lt;br /&gt;
 # lvcreate -L 10G -n ''home'' vg0&lt;br /&gt;
 # lvdisplay /dev/vg0/home&lt;br /&gt;
&lt;br /&gt;
Oppure nel caso volessimo fare un raid5&lt;br /&gt;
 # lvcreate -n lvr5 –type raid5 -L 10G -i 3 vg0&lt;br /&gt;
 &lt;br /&gt;
 -n ''nome del volume''&lt;br /&gt;
 –type raid5 ''tipo di raid''&lt;br /&gt;
 -L ''dimensione massima della grandezza del raid''&lt;br /&gt;
 -i ''numero dei physical volumes che si vogliono utilizzare''&lt;br /&gt;
&lt;br /&gt;
Per formattare il volume logico appena creato&lt;br /&gt;
 # mkfs -t ext4 /dev/vg0/lvr5&lt;br /&gt;
&lt;br /&gt;
Per aggiungere un disco ad un Volume Groups&lt;br /&gt;
 # vgextend vg0 /dev/sdb2&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Snapshot ==&lt;br /&gt;
Creare uno snapshot della del volume logico ''/home'' che potrà contenere fino ad un massimo di 5 GiB di dati modificati rispetto all'originale&lt;br /&gt;
 # lvcreate --size 5G --snapshot --name homesnap20230306 /dev/vg0/home&lt;br /&gt;
&lt;br /&gt;
Ripristinare il volume logico ricaricando lo snapshot&lt;br /&gt;
 # lvconvert --merge /dev/vg0/homesnap20230306&lt;br /&gt;
&lt;br /&gt;
Nel caso il logical volume sia attivo il merging avverrà col prossimo riavvio e lo snapshot sparirà.&lt;br /&gt;
&lt;br /&gt;
== Cache ==&lt;br /&gt;
Utilizzare un moderno disco a stato solido può essere una soluzione economica per velocizzare un LV.&lt;br /&gt;
&lt;br /&gt;
Convertire il disco a PV ed aggiungerlo al preesistente VG&lt;br /&gt;
 # pvcreate ''/dev/discoSSD''&lt;br /&gt;
 # vgextend vg0 ''/dev/discoSSD''&lt;br /&gt;
&lt;br /&gt;
Aggiungere la cache al LV&lt;br /&gt;
 # lvcreate --type cache --cachemode writethrough -l 100%FREE -n root_cachepool vg0/home ''/dev/discoSSD''&lt;br /&gt;
&lt;br /&gt;
Rimuovere la cache dal LV&lt;br /&gt;
 # lvconvert --uncache vg0/home&lt;br /&gt;
&lt;br /&gt;
= GRUB (Boot loader) =&lt;br /&gt;
È 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.&lt;br /&gt;
&lt;br /&gt;
== Sistema con BIOS ==&lt;br /&gt;
 # pacman -S grub&lt;br /&gt;
 # grub-mkconfig -o /boot/grub/grub.cfg&lt;br /&gt;
 # grub-install /dev/sda&lt;br /&gt;
&lt;br /&gt;
== Sistema UEFI ==&lt;br /&gt;
'''NB: per installare correttamente GRUB su un sistema UEFI occorre che il device di installazione abbia effettuato il boot in modalità UEFI e non Legacy (BIOS)'''&lt;br /&gt;
&lt;br /&gt;
 # pacman -S grub&lt;br /&gt;
 # mkdir /boot/EFI&lt;br /&gt;
 # mount /dev/sda1 /boot/EFI&lt;br /&gt;
 # grub-install /dev/sda&lt;br /&gt;
 # grub-mkconfig -o /boot/grub/grub.cfg&lt;br /&gt;
&lt;br /&gt;
== Gestione snapshot BTRFS ==&lt;br /&gt;
&lt;br /&gt;
=== Manuale ===&lt;br /&gt;
Editare ''/etc/grub.d/40_custom'' (o crearlo) e aggiungere quanto segue per permettere l'avvio della snapshot ''rootsnap''&lt;br /&gt;
&lt;br /&gt;
 menuentry 'Linux snapshot' {&lt;br /&gt;
        insmod gzio&lt;br /&gt;
        insmod part_gpt&lt;br /&gt;
        insmod btrfs&lt;br /&gt;
        set root='hd1,gpt3'&lt;br /&gt;
        linux   /rootsnap/boot/vmlinuz-linux root=/dev/partizione rw rootflags=subvol=rootsnap  quiet&lt;br /&gt;
        initrd  /rootsnap/boot/initramfs-linux.img&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
dopodichè aggiornare la configurazione di GRUB con&lt;br /&gt;
 # grub-mkconfig -o /boot/grub/grub.cfg&lt;br /&gt;
&lt;br /&gt;
=== Automatico ===&lt;br /&gt;
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.&lt;br /&gt;
 # pacman -S grub-btrfs&lt;br /&gt;
&lt;br /&gt;
Ogni volta che si vorrà aggiornare grub con nuovi subvolumi basterà dare il seguente comando&lt;br /&gt;
&lt;br /&gt;
 # grub-mkconfig -o /boot/grub/grub.cfg&lt;br /&gt;
&lt;br /&gt;
== Ripristinare GRUB ==&lt;br /&gt;
Aggiornando la propria distribuzione Linux, il proprio boot loader o installando un altro sistema operativo (es. Windows) può capitare di sovrascrivere il [http://it.wikipedia.org/wiki/Master_boot_record MBR].&lt;br /&gt;
&lt;br /&gt;
Avviare il computer con un liveCD/DVD o USB: &lt;br /&gt;
* [http://archlinux.mirror.garr.it/archlinux/iso/latest/archlinux-x86_64.iso Archlinux]&lt;br /&gt;
* [http://www.sysresccd.org/Download Systemrescuecd]&lt;br /&gt;
* [http://grml.org/download/ grml]&lt;br /&gt;
* [http://na.mirror.garr.it/mirrors/ubuntu-releases/ Ubuntu]&lt;br /&gt;
&lt;br /&gt;
Ipotizziamo di avere una partizione / chiamata /dev/sda2 e nessuna /boot&lt;br /&gt;
&lt;br /&gt;
Creiamo i seguenti mount point&lt;br /&gt;
 # sudo su&lt;br /&gt;
 # cd /mnt&lt;br /&gt;
 # mkdir sda2&lt;br /&gt;
 # mount /dev/sda2 /mnt/sda2&lt;br /&gt;
&lt;br /&gt;
Se utilizziamo una scheda madre UEFI andrà montata anche la partizione efi (solitamente è la prima partizione del disco ''sda1'')&lt;br /&gt;
 # mount /dev/sda2 /mnt/sda2/boot/efi&lt;br /&gt;
&lt;br /&gt;
Se necessario editiamo il file di configurazione di grub&lt;br /&gt;
  # nano /mnt/sda2/boot/grub/grub.cfg&lt;br /&gt;
&lt;br /&gt;
=== arch-chroot ===&lt;br /&gt;
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&lt;br /&gt;
&lt;br /&gt;
 # arch-chroot /mnt/sda2&lt;br /&gt;
&lt;br /&gt;
=== Manuale ===&lt;br /&gt;
 # mount --rbind /dev /mnt/sda2/dev&lt;br /&gt;
 # mount -t proc /proc /mnt/sda2/proc&lt;br /&gt;
 # mount -t sysfs /sys /mnt/sda2/sys/&lt;br /&gt;
&lt;br /&gt;
Eseguiamo il vero e proprio chroot in /dev/sda2&lt;br /&gt;
 # chroot /mnt/sda2&lt;br /&gt;
&lt;br /&gt;
=== Reinstallazione ===&lt;br /&gt;
 # grub-mkconfig -o /boot/grub/grub.cfg&lt;br /&gt;
 # grub-install /dev/sda&lt;br /&gt;
&lt;br /&gt;
=== Riavvio del sistema ===&lt;br /&gt;
Usciamo dal chroot, smontiamo la partizione e riavviamo il sistema&lt;br /&gt;
 # exit&lt;br /&gt;
 # umount /mnt/sda1/proc&lt;br /&gt;
 # umount /mnt/sda1/dev&lt;br /&gt;
 # umount /mnt/sda1&lt;br /&gt;
 # systemctl reboot&lt;br /&gt;
&lt;br /&gt;
== Eliminare il boot loader ==&lt;br /&gt;
In caso di errori nell'installazione di GRUB è possibile cancellare il vecchio boot loader di un disco (&amp;lt;code&amp;gt;''devicename'' = sda,sdb,sdc...&amp;lt;/code&amp;gt;)&lt;br /&gt;
 # dd if=/dev/zero of=''/dev/devicename'' bs=446 count=1&lt;br /&gt;
&lt;br /&gt;
== ISOBoot ==&lt;br /&gt;
Con GRUB2 è possibile effettuare il boot di iso di LiveCD/USB Linux presenti sul disco aggiungendole su &amp;lt;code&amp;gt;/etc/grub.d/40_custom &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Ubuntu 23.04&lt;br /&gt;
 menuentry &amp;quot;Ubuntu 23.04 desktop ISO&amp;quot; {&lt;br /&gt;
        insmod part_gpt&lt;br /&gt;
        insmod ext2&lt;br /&gt;
        insmod btrfs&lt;br /&gt;
        rmmod tpm&lt;br /&gt;
     # es.: terza partizione del primo disco&lt;br /&gt;
        set root=(hd0,gpt3)&lt;br /&gt;
        set isofile=&amp;quot;/home/'''&amp;lt;username&amp;gt;'''/Downloads/ubuntu-23.04-desktop-amd64.iso&amp;quot;&lt;br /&gt;
        loopback loop $isofile&lt;br /&gt;
        linux (loop)/casper/vmlinuz boot=casper iso-scan/filename=$isofile quiet splash&lt;br /&gt;
        initrd (loop)/casper/initrd&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
= Networking =&lt;br /&gt;
&lt;br /&gt;
== Manuale ==&lt;br /&gt;
===net-tools===&lt;br /&gt;
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 [https://lists.debian.org/debian-devel/2009/03/msg00780.html obsoleta]. Tra i suoi comandi principali: arp, hostname, ifconfig, iptunnel netstat e route.&lt;br /&gt;
&lt;br /&gt;
Attivare l'interfaccia di rete eth0 ed assegnarle l'indirizzo ip 192.168.0.2&lt;br /&gt;
 # ifconfig eth0 192.168.0.2 up&lt;br /&gt;
&lt;br /&gt;
Disattivare l'interfaccia di rete eth0&lt;br /&gt;
 # ifconfig eth0 down&lt;br /&gt;
&lt;br /&gt;
Assegnare manualmente un gateway (es.: 192.168.0.1) alla rete&lt;br /&gt;
 # route add default gw 192.168.0.1&lt;br /&gt;
&lt;br /&gt;
Ovviamente occorrerà aggiungere un server DNS al file &amp;lt;code&amp;gt;/etc/resolv.conf&amp;lt;/code&amp;gt; per la risoluzione degli indirizzi.&lt;br /&gt;
&lt;br /&gt;
=== iproute2 ===&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|+ Conversione comandi da net-tools a iproute2&lt;br /&gt;
|-&lt;br /&gt;
! net-tools&lt;br /&gt;
! iproute2&lt;br /&gt;
! Note&lt;br /&gt;
|-&lt;br /&gt;
| ifconfig&lt;br /&gt;
| ip addr, ip link&lt;br /&gt;
| Address and link configuration&lt;br /&gt;
|-&lt;br /&gt;
| route&lt;br /&gt;
| ip route&lt;br /&gt;
| Routing tables&lt;br /&gt;
|-&lt;br /&gt;
| arp&lt;br /&gt;
| ip neigh&lt;br /&gt;
| Neighbors&lt;br /&gt;
|-&lt;br /&gt;
| iptunnel&lt;br /&gt;
| ip tunnel&lt;br /&gt;
| Tunnels&lt;br /&gt;
|-&lt;br /&gt;
| nameif, ifrename&lt;br /&gt;
| ip link set name&lt;br /&gt;
| Rename network interfaces&lt;br /&gt;
|-&lt;br /&gt;
| ipmaddr&lt;br /&gt;
| ip maddr&lt;br /&gt;
| Multicast&lt;br /&gt;
|-&lt;br /&gt;
| netstat&lt;br /&gt;
| ss, ip route&lt;br /&gt;
| Show various networking statistics&lt;br /&gt;
|-&lt;br /&gt;
| brctl&lt;br /&gt;
| bridge&lt;br /&gt;
| Handle bridge addresses and devices&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Elencare gli indirizzi IP: &lt;br /&gt;
 # ip addr&lt;br /&gt;
&lt;br /&gt;
Mostra le informazioni di una specifica interfaccia di rete&lt;br /&gt;
 # ip addr show ''eth0''&lt;br /&gt;
&lt;br /&gt;
Aggiungere un indirizzo all'interfaccia eth0:&lt;br /&gt;
 # ip addr add 192.0.2.10/24 dev eth0&lt;br /&gt;
&lt;br /&gt;
Cancellare un indirizzo associato all'interfaccia eth0:&lt;br /&gt;
 # ip addr delete 192.0.2.10/24 dev eth0&lt;br /&gt;
&lt;br /&gt;
Attivare l'interfaccia eth0:&lt;br /&gt;
 # ip link set dev eth0 up&lt;br /&gt;
&lt;br /&gt;
Disattivare l'interfaccia eth0:&lt;br /&gt;
 # ip link set dev eth0 down&lt;br /&gt;
&lt;br /&gt;
Svuotare la cache arp per tutte le interfacce:&lt;br /&gt;
 # ip neigh flush all&lt;br /&gt;
&lt;br /&gt;
Aggiungere una rotta che passa per gateway 192.0.2.1&lt;br /&gt;
 # ip route add default via 192.0.2.1&lt;br /&gt;
&lt;br /&gt;
Aggiungere una rotta che passa per gateway 192.168.2.1 per l'interfaccia 10.0.2.0&lt;br /&gt;
 # ip route add 10.0.2.1/24 via 192.168.0.1 dev enp0s3&lt;br /&gt;
&lt;br /&gt;
Aggiungere una rotta che passa per gateway 192.168.2.1 per l'interfaccia 10.0.2.0&lt;br /&gt;
 # ip route del 10.0.2.0/24 via 192.168.0.1 dev enp0s3 &lt;br /&gt;
&lt;br /&gt;
Mostrare la tabella di routing&lt;br /&gt;
 # ip route show&lt;br /&gt;
&lt;br /&gt;
== Systemd-networkd==&lt;br /&gt;
'''[https://wiki.archlinux.org/title/Systemd-networkd systemd-networkd'''] è un demone, parte di systemd, che gestisce la configurazione della rete.&lt;br /&gt;
&lt;br /&gt;
=== Esempi di configurazione ===&lt;br /&gt;
Per prima cosa sarà necessario abilitare il servizio&lt;br /&gt;
 # systemctl enable --now systemd-networkd.service&lt;br /&gt;
 # systemctl enable --now systemd-resolved.service&lt;br /&gt;
 # ln -rsf /run/systemd/resolve/stub-resolv.conf /etc/resolv.conf&lt;br /&gt;
&lt;br /&gt;
==== DHCP ====&lt;br /&gt;
/etc/systemd/network/20-wired.network&lt;br /&gt;
 [Match]&lt;br /&gt;
 Name=enp1s0&lt;br /&gt;
 [Network]&lt;br /&gt;
 DHCP=yes&lt;br /&gt;
&lt;br /&gt;
==== IP statico ====&lt;br /&gt;
/etc/systemd/network/20-wired.network&lt;br /&gt;
 [Match]&lt;br /&gt;
 Name=enp1s0&lt;br /&gt;
 [Network]&lt;br /&gt;
 Address=10.1.10.9/24&lt;br /&gt;
 Gateway=10.1.10.1&lt;br /&gt;
 DNS=10.1.10.1&lt;br /&gt;
&lt;br /&gt;
==== Wireless adapter ====&lt;br /&gt;
Per potersi connettere a connessioni WIFI è necessario installare e configurare un'ulteriore applicazione dedicata come '''iwd''' o '''wpa_supplicant''' per l'autenticazione alla rete.&lt;br /&gt;
&lt;br /&gt;
/etc/systemd/network/25-wireless.network&lt;br /&gt;
 [Match]&lt;br /&gt;
 Name=wlp2s0&lt;br /&gt;
 [Network]&lt;br /&gt;
 DHCP=yes&lt;br /&gt;
 IgnoreCarrierLoss=3s&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Rinominare l'interfaccia di rete ====&lt;br /&gt;
Invece che impostare una regola su udev è possibile usare un file di testo .link nel seguente modo&lt;br /&gt;
&lt;br /&gt;
/etc/systemd/network/''10-ethusb0.link''&lt;br /&gt;
 [Match]&lt;br /&gt;
 MACAddress=12:34:56:78:90:ab&lt;br /&gt;
 [Link]&lt;br /&gt;
 Description=USB to Ethernet Adapter&lt;br /&gt;
 Name=''ethusb0''&lt;br /&gt;
&lt;br /&gt;
== Wifi ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! [https://wiki.archlinux.org/title/Network_configuration/Wireless#Utilities Programmi] !! [https://wireless.wiki.kernel.org/en/developers/documentation/wireless-extensions WEXT] !! [https://wireless.wiki.kernel.org/en/developers/documentation/nl80211 nl80211] !! WEP !! WPA&lt;br /&gt;
|-&lt;br /&gt;
| [https://hewlettpackard.github.io/wireless-tools/Tools.html wireless_tools] || Sì || No || Sì || No&lt;br /&gt;
|-&lt;br /&gt;
| [https://wireless.wiki.kernel.org/en/users/documentation/iw iw] || No || Sì || Sì || No&lt;br /&gt;
|-&lt;br /&gt;
| [https://wiki.archlinux.org/title/wpa_supplicant wpa_supplicant] || Sì || Sì || No || Sì&lt;br /&gt;
|-&lt;br /&gt;
| [https://wiki.archlinux.org/title/Iwd iwd]/iwgtk || No || Sì || No || Sì&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== NetworkManager ==&lt;br /&gt;
[https://networkmanager.dev/ NetworkManager] è una utility che si è imposta come standard per la configurazione della reti Linux (LAN e Wifi)&lt;br /&gt;
&lt;br /&gt;
Si compone di un demone, un'interfaccia da riga di comando [https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/9/html/configuring_basic_system_settings/assembly_configuring-and-managing-network-access_configuring-basic-system-settings#configuring-a-static-ethernet-connection-using-nmcli_assembly_configuring-and-managing-network-access (nmcli)] ed un'interfaccia di configurazione basata su un menu testuale ([https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/9/html/configuring_basic_system_settings/assembly_configuring-and-managing-network-access_configuring-basic-system-settings nmtui]). &lt;br /&gt;
&lt;br /&gt;
I principali desktop enviroment come GNOME e KDE Plasma possiedono una utility grafica che consente loro di configurare graficamente le reti basandosi su NetworkManager.&lt;br /&gt;
&lt;br /&gt;
=== Installazione ===&lt;br /&gt;
 # pacman -S networkmanager &lt;br /&gt;
 # systemctl enable NetworkManager&lt;br /&gt;
 # systemctl start NetworkManager&lt;br /&gt;
&lt;br /&gt;
==== Configurazione  ====&lt;br /&gt;
* 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 &amp;lt;code&amp;gt;nmtui&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Per chi dovesse prediligere la configurazione manuale: &amp;lt;code&amp;gt;nmcli&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Per impedire a Network Manager di gestire una certa interfaccia di rete è sufficiente aggiungere il suo MAC Address al file di configurazione &amp;lt;code&amp;gt;/etc/NetworkManager/NetworkManager.conf&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 [main]&lt;br /&gt;
 plugins=keyfile&lt;br /&gt;
 [keyfile]&lt;br /&gt;
 unmanaged-devices=mac:''00:25:21:73:90:72''&lt;br /&gt;
&lt;br /&gt;
=== Alternative ===&lt;br /&gt;
* [https://wiki.archlinux.org/title/ConnMan ConnMan]&lt;br /&gt;
&lt;br /&gt;
== Condividere la connessione ==&lt;br /&gt;
&lt;br /&gt;
=== Abilitazione del forwarding dei pacchetti ===&lt;br /&gt;
&lt;br /&gt;
 $ sudo echo 1 &amp;gt; /proc/sys/net/ipv4/ip_forward&lt;br /&gt;
&lt;br /&gt;
Per rendere il forwarding definitivo editare il file ''/etc/sysctl.conf'' modificando come segue il parametro net.ipv4.ip_forward:&lt;br /&gt;
&lt;br /&gt;
 net.ipv4.ip_forward = 1&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Mascheramento dei pacchetti ===&lt;br /&gt;
&lt;br /&gt;
 $ sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE&lt;br /&gt;
&lt;br /&gt;
''eth0'' non è un parametro fisso, identifica l'interfaccia con la quale il PC si connette ad Internet&lt;br /&gt;
&lt;br /&gt;
Per applicare automaticamente tale regola ad ogni riavvio&lt;br /&gt;
 # iptables-save &amp;gt; /etc/iptables.ipv4.nat&lt;br /&gt;
 # iptables-restore &amp;lt; /etc/iptables.ipv4.nat&lt;br /&gt;
&lt;br /&gt;
=== Moduli kernel ===&lt;br /&gt;
&lt;br /&gt;
Assicurarsi che siano caricati i seguenti moduli:&lt;br /&gt;
 # modprobe ip_tables&lt;br /&gt;
 # modprobe ip_conntrack&lt;br /&gt;
 # modprobe iptable_nat&lt;br /&gt;
 # modprobe ipt_MASQUERADE&lt;br /&gt;
&lt;br /&gt;
=== Condivisione tramite rete ethernet ===&lt;br /&gt;
&lt;br /&gt;
==== Configurazione scheda di rete interna ====&lt;br /&gt;
&lt;br /&gt;
Assegnare un IP statico alla scheda ethernet con la quale si vuol condividere la connessione.&lt;br /&gt;
&lt;br /&gt;
 # ifconfig eth1 192.168.5.1 netmask 255.255.255.0 up&lt;br /&gt;
&lt;br /&gt;
Per rendere tale configurazione permanente sarà necessario editare il file ''/etc/network/interfaces'' ed aggiungere la seguente configurazione&lt;br /&gt;
&lt;br /&gt;
 auto eth1&lt;br /&gt;
 iface eth1 inet static&lt;br /&gt;
 address 192.168.5.1&lt;br /&gt;
 netmask 255.255.255.0&lt;br /&gt;
&lt;br /&gt;
=== Condivisione tramite rete WI-FI ===&lt;br /&gt;
&lt;br /&gt;
==== Configurazione scheda wireless ====&lt;br /&gt;
&lt;br /&gt;
Se non si desidera cifrare la rete e proteggerla con una password sarà sufficiente eseguire questi comandi.&lt;br /&gt;
&lt;br /&gt;
 # iwconfig wlan0 mode Master&lt;br /&gt;
 # iwconfig wlan0 ESSID ReteGOLEM&lt;br /&gt;
 # iwconfig wlan0 enc off&lt;br /&gt;
 # ifconfig wlan0 192.168.5.1 netmask 255.255.255.0 up&lt;br /&gt;
&lt;br /&gt;
Per rendere tale configurazione permanente sarà necessario creare un file del tipo ''/etc/systemd/network/20-wifi.network'' ed aggiungere la seguente configurazione&lt;br /&gt;
 [Match]&lt;br /&gt;
 Name=wlan0&lt;br /&gt;
 [Network]&lt;br /&gt;
 Address=192.168.5.1/24&lt;br /&gt;
&lt;br /&gt;
Naturalmente occorrerà che sia attivato il demone systemd-networkd&lt;br /&gt;
 # systemctl enable --now systemd-networkd.service&lt;br /&gt;
&lt;br /&gt;
===== Proteggere la connessione WI-FI =====&lt;br /&gt;
&lt;br /&gt;
Installare il programma hostapd&lt;br /&gt;
 # pacman -S hostapd&lt;br /&gt;
&lt;br /&gt;
Configurare hostapd modificando ''/etc/hostapd/hostapd.conf''&lt;br /&gt;
&lt;br /&gt;
 # Interfaccia di rete&lt;br /&gt;
 interface=wlan0&lt;br /&gt;
 # Driver della scheda wifi usata (non tutte le schede sono supportate)&lt;br /&gt;
 driver=nl80211&lt;br /&gt;
 # Nome della rete (SSID)&lt;br /&gt;
 ssid=ReteGOLEM&lt;br /&gt;
 hw_mode=g&lt;br /&gt;
 # Canale di trasmissione&lt;br /&gt;
 channel=6&lt;br /&gt;
 macaddr_acl=0&lt;br /&gt;
 # Righe per la protezione&lt;br /&gt;
 auth_algs=1&lt;br /&gt;
 ignore_broadcast_ssid=0&lt;br /&gt;
 wpa=2&lt;br /&gt;
 # Password del wifi&lt;br /&gt;
 wpa_passphrase=password&lt;br /&gt;
 wpa_key_mgmt=WPA-PSK&lt;br /&gt;
 wpa_pairwise=TKIP&lt;br /&gt;
 rsn_pairwise=CCMP&lt;br /&gt;
&lt;br /&gt;
Editare il file ''/etc/default/hostapd'' per impostare ''hostapd.conf'' come file di configurazione predefinito, modificando la riga DAEMON_CONF=&amp;quot;&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
 DAEMON_CONF=&amp;quot;/etc/hostapd/hostapd.conf&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== Assegnazione automatica degli IP ai client ===&lt;br /&gt;
&lt;br /&gt;
 # pacman -S dhcp&lt;br /&gt;
&lt;br /&gt;
Editare ''/etc/dhcpd.conf'' aggiungendo la configurazione per la rete interna (es.: eth1 o wlan0):&lt;br /&gt;
&lt;br /&gt;
 subnet 192.168.5.0 netmask 255.255.255.0 {&lt;br /&gt;
 range 192.168.5.100  192.168.5.200;&lt;br /&gt;
 option domain-name-servers 8.8.8.8;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== VPN ==&lt;br /&gt;
=== OpenVPN ===&lt;br /&gt;
https://wiki.archlinux.org/title/OpenVPN&lt;br /&gt;
&lt;br /&gt;
===L2TP/IPsec VPN===&lt;br /&gt;
https://wiki.archlinux.org/title/Openswan_L2TP/IPsec_VPN_client_setup&lt;br /&gt;
&lt;br /&gt;
= Container =&lt;br /&gt;
== Toolbox==&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
=== Immagini ===&lt;br /&gt;
* [https://github.com/toolbx-images/images https://github.com/toolbx-images/images] Immagini di container delle principali distribuzioni&lt;br /&gt;
&lt;br /&gt;
=== Comandi ===&lt;br /&gt;
Creare un container&lt;br /&gt;
 $ toolbox create -i quay.io/toolbx-images/rhel-toolbox:9.1 -c redhat&lt;br /&gt;
&lt;br /&gt;
Entrare in un container&lt;br /&gt;
 $ toolbox enter redhat&lt;br /&gt;
 &lt;br /&gt;
Fermare un container&lt;br /&gt;
 $ podman stop nome_macchina&lt;br /&gt;
&lt;br /&gt;
Rimuovere un container&lt;br /&gt;
 $ toolbox rm -f redhat&lt;br /&gt;
&lt;br /&gt;
Rimuovere un container e la sua immagine&lt;br /&gt;
 $ toolbox rmi redhat &lt;br /&gt;
&lt;br /&gt;
Esaminare la lista dei container e delle immagini disponibili&lt;br /&gt;
 $ toolbox list &lt;br /&gt;
&lt;br /&gt;
Permettere agli utenti non root di utilizzare i container&lt;br /&gt;
 $ sudo sh -c 'echo &amp;quot;username:100000:65536&amp;quot; &amp;gt;&amp;gt; /etc/subuid'&lt;br /&gt;
 $ sudo sh -c 'echo &amp;quot;username:100000:65536&amp;quot; &amp;gt;&amp;gt; /etc/subgid'&lt;br /&gt;
&lt;br /&gt;
Abilitare l'host al forwarding di X11 per le applicazioni che richiedono Xorg&lt;br /&gt;
 # xhost +&lt;br /&gt;
&lt;br /&gt;
Eseguire un comandi all'interno di un container&lt;br /&gt;
 $ toolbox run -c redhat libreoffice&lt;br /&gt;
&lt;br /&gt;
== LXC ==&lt;br /&gt;
[https://wiki.archlinux.org/title/Linux_Containers Linux Container] (LXC) permette di virtualizzare uno o più container Linux su un singolo host LXC, gestendone virtualmente RAM, CPU, socket e rete.&lt;br /&gt;
&lt;br /&gt;
È estremamente utile quando si ha bisogno di isolare dei servizi dal sistema host: es.: server web, imap, smtp...&lt;br /&gt;
&lt;br /&gt;
=== Installazione ===&lt;br /&gt;
Installare LXC&lt;br /&gt;
 # pacman -S lxc lxc-templates lxcfs lxd&lt;br /&gt;
&lt;br /&gt;
=== Comandi ===&lt;br /&gt;
Lista dei container installati&lt;br /&gt;
 lxc-ls -f &lt;br /&gt;
&lt;br /&gt;
Installare un container scegliendo l'immagine dalla lista di quelli disponibili&lt;br /&gt;
 lxc-create -n playtime -t download&lt;br /&gt;
&lt;br /&gt;
Se sapete già di quale container avete bisogno sarà possibile scaricarlo direttamente&lt;br /&gt;
 lxc-create -n playtime -t download -- --dist archlinux --release current --arch amd64&lt;br /&gt;
&lt;br /&gt;
Far partire il container chiamato ''debian''&lt;br /&gt;
 lxc-start debian &lt;br /&gt;
&lt;br /&gt;
Entrare dentro il container chiamato ''debian''&lt;br /&gt;
 lxc-attach debian&lt;br /&gt;
&lt;br /&gt;
Fermare l'esecuzione del container chiamato ''debian''&lt;br /&gt;
 lxc-stop debian&lt;br /&gt;
&lt;br /&gt;
Rimuovere il container chiamato ''debian''&lt;br /&gt;
 lxc-destroy debian &lt;br /&gt;
&lt;br /&gt;
Eseguire un comando dentro il container chiamato ''debian''&lt;br /&gt;
 lxc-attach --name debian nano&lt;br /&gt;
&lt;br /&gt;
=== Rete Bridge ===&lt;br /&gt;
Nel caso si debbano usare servizi da tenere esposti su Internet potrebbe essere conveniente utilizzare una rete bridge piuttosto che NAT.&lt;br /&gt;
&lt;br /&gt;
[https://wiki.debian.org/LXC/SimpleBridge Configurazione] rete bridge.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Docker ==&lt;br /&gt;
Abilitare ed avviare docker&lt;br /&gt;
 # systemctl enable --now docker&lt;br /&gt;
&lt;br /&gt;
Cercare il container desiderato&lt;br /&gt;
 # docker search &amp;quot;xxx&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Scaricare l'immagine desiderata&lt;br /&gt;
 # docker pull xxxx:latest&lt;br /&gt;
&lt;br /&gt;
Visualizzare le immagini scaricate&lt;br /&gt;
 # docker images&lt;br /&gt;
&lt;br /&gt;
Visualizzare i docker creati&lt;br /&gt;
 # docker ps -a&lt;br /&gt;
&lt;br /&gt;
Avviare docker&lt;br /&gt;
 # docker start nome_docker&lt;br /&gt;
&lt;br /&gt;
Entrare nel docker&lt;br /&gt;
 # docker attach nome_docker&lt;br /&gt;
&lt;br /&gt;
Copiare un file dal sistema host al docker&lt;br /&gt;
 # docker cp esempio.txt nome_docker: /esempio.txt&lt;br /&gt;
&lt;br /&gt;
Copiare un file dal docker.&lt;br /&gt;
 # docker cp container-id:/path/filename.txt ~/Desktop/filename.txt&lt;br /&gt;
&lt;br /&gt;
Rimuovere un docker&lt;br /&gt;
 # docker rm nome_docker&lt;br /&gt;
&lt;br /&gt;
Rimuovere tutti i docker&lt;br /&gt;
 # docker container stop $(docker container ls -aq)&lt;br /&gt;
 # docker system prune -a --volumes&lt;br /&gt;
&lt;br /&gt;
Avviare automaticamente un docker (da testare)&lt;br /&gt;
 # docker run --restart=always --name nome_docker&lt;br /&gt;
&lt;br /&gt;
Creare script di avvio ''docker-webserver''.service&lt;br /&gt;
 [Unit]&lt;br /&gt;
 Description=Some service&lt;br /&gt;
 Requires=docker.service&lt;br /&gt;
 After=docker.service&lt;br /&gt;
 [Service]&lt;br /&gt;
 Restart=always&lt;br /&gt;
 ExecStart=/usr/bin/docker start -a container_name&lt;br /&gt;
 ExecStop=/usr/bin/docker stop -t 2 container_name&lt;br /&gt;
 [Install]&lt;br /&gt;
 WantedBy=multi-user.target&lt;br /&gt;
&lt;br /&gt;
* [https://wiki.archlinux.org/title/docker Arch Linux Docker WIKI]&lt;br /&gt;
&lt;br /&gt;
== [https://wiki.archlinux.org/title/systemd-nspawn systemd-nspawn] ==&lt;br /&gt;
&lt;br /&gt;
= Fonti software alternative =&lt;br /&gt;
Nella rara eventualità che si necessiti di un programma non presente né nei repository ufficiali, né su [https://aur.archlinux.org/ AUR] è possibile optare per una delle seguenti opzioni.&lt;br /&gt;
&lt;br /&gt;
== AppImage ==&lt;br /&gt;
Scaricate qualsiasi pacchetto disponibile su [https://appimage.github.io/ appimage.github.io] e rendetelo eseguibile.&lt;br /&gt;
&lt;br /&gt;
 $ chmod a+x ''nomeprogramma''.AppImage&lt;br /&gt;
&lt;br /&gt;
Non resta che eseguirlo col seguente comando o con un doppio click&lt;br /&gt;
 $ ./''nomeprogramma''.AppImage&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Flatpak ==&lt;br /&gt;
Concepito per essere una sorta di '''Google Play Store''' per GNOME, è possibile installare programmi provenienti da [https://flathub.org/home flatpak] utilizzando i normali gestori grafici di pacchetti basati su packagekit come ''Gnome Software'' o ''Discover di Plasma''.&lt;br /&gt;
&lt;br /&gt;
Installazione&lt;br /&gt;
 # pacman -S flatpak&lt;br /&gt;
&lt;br /&gt;
Abilitazione del repository ufficiale del progetto (software di terze parti potrebbe richiedere di aggiungere altri repository)&lt;br /&gt;
 # flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo&lt;br /&gt;
&lt;br /&gt;
Elenca i repository disponibili.&lt;br /&gt;
 $ flatpak remotes&lt;br /&gt;
&lt;br /&gt;
Installa un'applicazione (es.: libreoffice)&lt;br /&gt;
 $ flatpak install flathub org.libreoffice.LibreOffice&lt;br /&gt;
&lt;br /&gt;
Esegue un'applicazione (es.: libreoffice)&lt;br /&gt;
 $ flatpak run org.libreoffice.LibreOffice&lt;br /&gt;
&lt;br /&gt;
Disinstalla un'applicazione mantenendo i dati.&lt;br /&gt;
 $ flatpak uninstall &amp;lt;nome app&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Disinstalla un'applicazione eliminando i dati (nella home utente .var/app/).&lt;br /&gt;
 $ flatpak uninstall &amp;lt;nome app&amp;gt; --delete-data&lt;br /&gt;
&lt;br /&gt;
Elimina i dati di tutte le applicazioni disinstallate (nella home utente .var/app/).&lt;br /&gt;
 $ flatpak uninstall --delete-data&lt;br /&gt;
&lt;br /&gt;
Disinstalla tutte le applicazioni flatpak installate sul sistema.&lt;br /&gt;
 $ flatpak uninstall --all&lt;br /&gt;
	&lt;br /&gt;
Cerca ed esegue aggiornamenti per le applicazioni installate.&lt;br /&gt;
 $ flatpak update&lt;br /&gt;
&lt;br /&gt;
Aggiorna una singola applicazione.&lt;br /&gt;
 $ flatpak update &amp;lt;nome app&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Elenca tutte le applicazioni flatpak installate sul sistema.&lt;br /&gt;
 $ flatpak list --app&lt;br /&gt;
	&lt;br /&gt;
Elenca i runtime installati.&lt;br /&gt;
 $ flatpak list --runtime&lt;br /&gt;
	&lt;br /&gt;
Visualizzare le informazioni sulle applicazioni in esecuzione.&lt;br /&gt;
 $ flatpak ps&lt;br /&gt;
	&lt;br /&gt;
Termina un'applicazione bloccata o danneggiata (l'ID dell'istanza si può ottenere dal comando precedente).&lt;br /&gt;
 $ flatpak kill &amp;lt;id istanza&amp;gt;&lt;br /&gt;
	&lt;br /&gt;
Tenta la riparare dei pacchetti danneggiati. Necessita dei privilegi di amministrazione. &lt;br /&gt;
 $ flatpak repair&lt;br /&gt;
&lt;br /&gt;
== Nix ==&lt;br /&gt;
[https://nixos.wiki/wiki/Nix_package_manager Nix package manager] è il gestore di pacchetti utilizzato su [https://nixos.org/ NixOS]. È possibile però utilizzarlo su qualsiasi distribuzione Linux affiancandone il gestore di pacchetti predefinito.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
[https://nixos.org/manual/nixpkgs/stable/ Guida completa]&lt;br /&gt;
&lt;br /&gt;
=== Installazione ===&lt;br /&gt;
[https://nixos.org/download.html#nix-install-linux Guida ufficiale]&lt;br /&gt;
&lt;br /&gt;
'''Single-user installation'''&lt;br /&gt;
 $ sudo install -d -m755 -o $(id -u) -g $(id -g) /nix&lt;br /&gt;
 $ sh &amp;lt;(curl -L https://nixos.org/nix/install) --no-daemon&lt;br /&gt;
&lt;br /&gt;
Aggiungere la riga seguente al &amp;lt;code&amp;gt;.bashrc&amp;lt;/code&amp;gt; o al file di configurazione della vostra shell per poter utilizzare i comandi Nix&lt;br /&gt;
 $ source $HOME/.nix-profile/etc/profile.d/nix.sh&lt;br /&gt;
&lt;br /&gt;
=== Canali ===&lt;br /&gt;
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''.&lt;br /&gt;
&lt;br /&gt;
Ecco di seguito i comandi principali per gestire questi canali&lt;br /&gt;
&lt;br /&gt;
Lista dei canali configurati&lt;br /&gt;
 $ nix-channel --list&lt;br /&gt;
&lt;br /&gt;
Aggiungere il canale principale (''nixos'')&lt;br /&gt;
 $ nix-channel --add https://nixos.org/channels/channel-name nixos&lt;br /&gt;
&lt;br /&gt;
Aggiungere altri canali&lt;br /&gt;
 $ nix-channel --add https://some.channel/url my-alias&lt;br /&gt;
&lt;br /&gt;
Rimuovere un canale&lt;br /&gt;
 $ nix-channel --remove channel-alias&lt;br /&gt;
&lt;br /&gt;
Aggiornare un canale&lt;br /&gt;
 $ nix-channel --update channel-alias&lt;br /&gt;
&lt;br /&gt;
Aggiornare tutti i canali&lt;br /&gt;
 $ nix-channel --update&lt;br /&gt;
&lt;br /&gt;
=== Comandi ===&lt;br /&gt;
Cercare un pacchetto&lt;br /&gt;
 $ nix search nixpkgs ''packagename''&lt;br /&gt;
&lt;br /&gt;
Installare un pacchetto&lt;br /&gt;
 $ nix-env -iA ''packagename''&lt;br /&gt;
&lt;br /&gt;
Vedere i pacchetti installati&lt;br /&gt;
 $ nix-env -q&lt;br /&gt;
&lt;br /&gt;
Disinstallare un pacchetto&lt;br /&gt;
 $ nix-env -e ''packagename''&lt;br /&gt;
&lt;br /&gt;
Aggiornare tutti i pacchetti&lt;br /&gt;
 $ nix-env -u&lt;br /&gt;
&lt;br /&gt;
== Snap ==&lt;br /&gt;
È 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. &lt;br /&gt;
&lt;br /&gt;
Su Arch è disponibile su AUR: [https://aur.archlinux.org/packages/snapd snapd]&lt;br /&gt;
&lt;br /&gt;
=== Installazione ===&lt;br /&gt;
Installare ed abilitare Snap&lt;br /&gt;
 $ [https://aur.archlinux.org/packages/yay yay] -S snapd&lt;br /&gt;
 $ sudo ln -s /var/lib/snapd/snap /snap&lt;br /&gt;
 $ sudo systemctl start snapd.service&lt;br /&gt;
 $ sudo systemctl enable snapd.service&lt;br /&gt;
&lt;br /&gt;
=== Comandi ===&lt;br /&gt;
Cercare un programma&lt;br /&gt;
 $ snap find ''nomeprogramma''&lt;br /&gt;
&lt;br /&gt;
Installare un programma&lt;br /&gt;
 $ sudo snap install ''nomeprogramma''&lt;br /&gt;
&lt;br /&gt;
Rimuovere un programma&lt;br /&gt;
 $ sudo snap remove ''nomeprogramma''&lt;br /&gt;
&lt;br /&gt;
Vedere i programmi installati &lt;br /&gt;
 $ snap list&lt;br /&gt;
&lt;br /&gt;
Rimuovere una determinata versione di un programma&lt;br /&gt;
 $ sudo snap remove ''nomeprogramma'' --revision&lt;br /&gt;
&lt;br /&gt;
Aggiornare manualmente i pacchetti snap&lt;br /&gt;
 $ sudo snap refresh&lt;br /&gt;
&lt;br /&gt;
= GPG =&lt;br /&gt;
[http://it.wikipedia.org/wiki/GNU_Privacy_Guard GNU Privacy Guard (GnuPG o GPG)] è un programma libero pensato per fornire un'alternativa opensource al [http://it.wikipedia.org/wiki/Pretty_Good_Privacy Pretty Good Privacy (PGP)].&lt;br /&gt;
Nel PGP sono usate sia la crittografia asimmetrica (a chiave pubblica) che quella simmetrica.&lt;br /&gt;
La chiave pubblica del destinatario serve al mittente unicamente per cifrare la chiave comune per un algoritmo di crittografia simmetrica che sarà usata per cifrare il testo in chiaro del messaggio.&lt;br /&gt;
Un destinatario decifra un messaggio protetto da GPG usando la chiave di sessione con l'algoritmo simmetrico. Tale chiave di sessione è inclusa nel messaggio in maniera criptata ed è decifrata usando la chiave privata del destinatario.&lt;br /&gt;
L'utilizzo di due cifrature oltre che a velocizzare l'esecuzione del programma (la cifratura a chiave simmetrica è molto più veloce di quella asimmetrica) permette di poter cifrare uno stesso messaggio per più destinatari.&lt;br /&gt;
&lt;br /&gt;
== Generare una chiave ==&lt;br /&gt;
 $ gpg --gen-key&lt;br /&gt;
&lt;br /&gt;
Controllare che la chiave sia stata correttamente creata&lt;br /&gt;
 $ gpg --list-keys&lt;br /&gt;
&lt;br /&gt;
== Certificato di revoca ==&lt;br /&gt;
Il certificato di revoca serve per invalidare la chiave nel caso in cui questa venga compromessa.&lt;br /&gt;
Chiunque sia in possesso del certificato di revoca può revocare la chiave corrispondente, per cui è bene tenerlo in un posto sicuro.&lt;br /&gt;
Poiché, nel momento in cui si ha bisogno del certificato di revoca, potremmo non essere più in grado di generarlo, conviene generarlo subito dopo la creazione della chiave, e prima di iniziare a utilizzarla pubblicamente.&lt;br /&gt;
 $ gpg --output certificato-di-revoca.asc --gen-revoke ''ID''&lt;br /&gt;
dove &amp;lt;code&amp;gt;ID&amp;lt;/code&amp;gt; è dato dalle ultime 8 cifre dell'impronta (fingerprint) della chiave.&lt;br /&gt;
&lt;br /&gt;
== Utilizzo pratico ==&lt;br /&gt;
=== Criptare un documento ===&lt;br /&gt;
 $ gpg -o file1.ext.gpg -e -r UserID file1.ext&lt;br /&gt;
&lt;br /&gt;
Esempio:&lt;br /&gt;
 $ gpg -o tesi.odt.gpg -e -r spookyh@gmail.com tesi.odt&lt;br /&gt;
&lt;br /&gt;
=== Decriptare un documento ===&lt;br /&gt;
 $ gpg -o file1.ext -d file1.gpg&lt;br /&gt;
&lt;br /&gt;
=== Firmare un documento ===&lt;br /&gt;
Il mittente può usare PGP per ''firmare'' un messaggio con l'algoritmo di firma RSA o Digital Signature Algorithm (DSA). Per fare ciò viene calcolato un hash (message digest) dal testo in chiaro e successivamente da questo hash è creata la [http://it.wikipedia.org/wiki/Firma_digitale firma digitale] usando la chiave privata del mittente.&lt;br /&gt;
 $ gpg -o file1.ext.sig -s file1.ext&lt;br /&gt;
&lt;br /&gt;
=== Verificare un documento ===&lt;br /&gt;
 $ gpg --verify file1.sig&lt;br /&gt;
&lt;br /&gt;
== Importare ed esportare chiavi (locali) ==&lt;br /&gt;
Importare una chiave (pubblica)&lt;br /&gt;
 $ gpg --import chiave.asc (o .txt)&lt;br /&gt;
&lt;br /&gt;
Esportare la propria chiave pubblica&lt;br /&gt;
 $ gpg -a -o chiave_pubblica.asc --export&lt;br /&gt;
&lt;br /&gt;
=== Esportare la propria chiave privata ===&lt;br /&gt;
{{Note&lt;br /&gt;
|type=attention&lt;br /&gt;
|text= La chiave privata può essere utilizzata per impersonare la vostra identità, '''NON''' inviarla mai a '''nessuno''', ed esportala solo per effettuarne backup, naturalmente da custodire in un luogo sicuro.}}&lt;br /&gt;
 $ gpg --armor --export-secret-keys &amp;lt;ID&amp;gt; &amp;gt; secret-key.gpg.asc&lt;br /&gt;
&lt;br /&gt;
== Condividere le chiavi pubbliche ==&lt;br /&gt;
Inviare la chiave ad un keyserver:&lt;br /&gt;
 $ gpg --keyserver keyserver.linux.it --send-key &amp;lt;ID&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Importare una chiave da un keyserver:&lt;br /&gt;
 $ gpg --keyserver keyserver.linux.it --recv-keys &amp;lt;ID&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se ci fidiamo del proprietario e vogliamo mostrare pubblicamente la nostra fiducia, possiamo firmare la chiave appena importata e esportare la firma su un keyserver (vedere sezioni successive).&lt;br /&gt;
&lt;br /&gt;
=== Keyserver ===&lt;br /&gt;
Quando si carica una chiave su un keyserver, poi questo la condivide con gli altri keyserver che fanno parte dello stesso circuito.&lt;br /&gt;
Non esiste un'entità centralizzata o un circuito di riferimento (per scelta di design), e, a volte, questo può generare confusione nell'utilizzatore.&lt;br /&gt;
Inoltre, alcuni keyserver potrebbero non essere sempre accessibili.&lt;br /&gt;
&lt;br /&gt;
Tra i keyserver più noti:&lt;br /&gt;
* keys.openpgp.org&lt;br /&gt;
* keyserver.ubuntu.com&lt;br /&gt;
* keys.gnupg.net&lt;br /&gt;
* pgp.surfnet.nl&lt;br /&gt;
* pgp.circl.lu&lt;br /&gt;
* pgp.mit.edu&lt;br /&gt;
&lt;br /&gt;
== Editare una chiave ==&lt;br /&gt;
Per fare operazioni e modifiche dobbiamo &amp;quot;editare&amp;quot; le chiavi, aprendo l'editor interattivo:&lt;br /&gt;
 $ gpg --edit-key &amp;lt;ID&amp;gt;&lt;br /&gt;
'''NB: Prima di uscire dall'editor, ricordarsi di salvare, altrimenti le modifiche vanno perdute'''&lt;br /&gt;
&lt;br /&gt;
* firmare&lt;br /&gt;
 &amp;gt; sign&lt;br /&gt;
* cambiare i valori di fiducia &lt;br /&gt;
 &amp;gt; trust&lt;br /&gt;
* vedere la fingerprint&lt;br /&gt;
 &amp;gt; fpr&lt;br /&gt;
* cambiare la data di scadenza&lt;br /&gt;
 &amp;gt; expire&lt;br /&gt;
* cambiare la password&lt;br /&gt;
 &amp;gt; passwd&lt;br /&gt;
* firmare localmente in modo non esportabile&lt;br /&gt;
 &amp;gt; lsign&lt;br /&gt;
* sempre '''ricordarsi di salvare'''&lt;br /&gt;
 &amp;gt; save&lt;br /&gt;
* oppure uscire&lt;br /&gt;
 &amp;gt; quit&lt;br /&gt;
&lt;br /&gt;
Digitare &amp;lt;code&amp;gt;help&amp;lt;/code&amp;gt; per una lista esaustiva.&lt;br /&gt;
&lt;br /&gt;
Tutte le modifiche da rendere pubbliche vanno inviate ad un keyserver.&lt;br /&gt;
&lt;br /&gt;
== Revocare una chiave ==&lt;br /&gt;
Avendo già il certificato di revoca:&lt;br /&gt;
 $ gpg --import certificato-di-revoca.asc&lt;br /&gt;
 $ gpg --keyserver pgp.surfnet.nl --send-key ''ID''&lt;br /&gt;
&lt;br /&gt;
== Gestione delle chiavi ==&lt;br /&gt;
Controllare il database delle chiavi: questo comando mostra tutte le chiavi che abbiamo con molte informazioni.&lt;br /&gt;
 $ gpg --list-keys --with-colons&lt;br /&gt;
&lt;br /&gt;
Fornisce tutti i valori di fiducia assegnati alle varie chiavi. (Informazioni private)&lt;br /&gt;
 $ gpg --list-ownertrust&lt;br /&gt;
&lt;br /&gt;
== Controllo firme ==&lt;br /&gt;
 $ gpg --check-sigs&lt;br /&gt;
 $ gpg --list-sigs&lt;br /&gt;
&lt;br /&gt;
== Esportare le chiavi altrui ==&lt;br /&gt;
Abbiamo importato e firmato la chiave di &amp;lt;ID&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Rimandiamola al proprietario:&lt;br /&gt;
 $ gpg --armor -export -o firma.sig &amp;lt;ID&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Questo comando crea un file di nome ''firma.sig'' nella directory corrente, che contiene la chiave firmata.&lt;br /&gt;
Spedire al proprietario ''firma.sig''.&lt;br /&gt;
&lt;br /&gt;
Chi riceve la propria chiave firmata da altri può decidere inserirla nel proprio portachiavi, con&lt;br /&gt;
 $ gpg --import firma.sig&lt;br /&gt;
&lt;br /&gt;
Si aggiungono al portachiavi le nuove firme ma anche i nuovi ID che il mittente ha sulla sua chiave, col rispettivo valore di fiducia. Firmare le chiavi degli altri implica dar loro fiducia, e, spesso, anche aver verificato la loro identità in maniera sicura.&lt;br /&gt;
Se non ci fidiamo, non firmiamo. Se si firmano a caso tutte le chiavi che capitano a tiro, si perde la reputazione che si ha presso gli altri partecipanti della rete. Se vogliamo fare un uso pubblico di questa fiducia reciproca possiamo mandare la nostra  chiave, contenente la nuova firma, al keyserver:&lt;br /&gt;
 $ gpg --keyserver pgp.circl.lu --send-key &amp;lt;ID mia chiave&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Periodicamente occorre aggiornare il proprio portachiavi digitale, così da venire a conoscenza delle modifiche sulle chiavi degli altri.&lt;br /&gt;
 $ gpg --keyserver pgp.circl.lu --refresh-keys&lt;br /&gt;
&lt;br /&gt;
== Rete di fiducia ==&lt;br /&gt;
Una chiave importata può essere firmata con un certo grado di fiducia. Possiamo rispedirla al proprietario o caricare la firma su un keyserver, e se lui la importa nel suo portachiavi, avrà la propria chiave firmata da noi. Ognuno può quindi aggiungere le firme dei conoscenti alla propria chiave, che a loro volta hanno firme di altri.&lt;br /&gt;
&lt;br /&gt;
== GUI ==&lt;br /&gt;
Esistono vari programmi a interfaccia grafica:&lt;br /&gt;
* ''Seahorse'', per gestire le chiavi e i certificati, comprese quelle ssh, per un ambiente GTK&lt;br /&gt;
* ''KGPG'', per gestire le chiavi e i certificati, comprese quelle ssh, per un ambiente QT&lt;br /&gt;
* ''Pinentry'' (anche da riga di comando) si ricorda la password della chiave per il tempo impostato (default 5 minuti)&lt;br /&gt;
&lt;br /&gt;
= Systemd =&lt;br /&gt;
 systemd-timesyncd — system time synchronization across the network;&lt;br /&gt;
 systemd/Journal — system logging&lt;br /&gt;
 systemd/Timers — alternative to cron&lt;br /&gt;
&lt;br /&gt;
= Link Utili =&lt;br /&gt;
&lt;br /&gt;
[https://wiki.archlinux.org/ ArchWiki]&lt;br /&gt;
&lt;br /&gt;
[https://wwwcdf.pd.infn.it/AppuntiLinux/a21.htm Appunti Linux]&lt;br /&gt;
&lt;br /&gt;
[https://www.linuxfromscratch.org/lfs/downloads/stable/LFS-BOOK-11.3-NOCHUNKS.html LFS-BOOK]&lt;br /&gt;
&lt;br /&gt;
[[Category: Howto]]&lt;/div&gt;</summary>
		<author><name>$pooky Hunter</name></author>
	</entry>
	<entry>
		<id>https://wiki.golem.linux.it/index.php?title=OpenBSD&amp;diff=9650</id>
		<title>OpenBSD</title>
		<link rel="alternate" type="text/html" href="https://wiki.golem.linux.it/index.php?title=OpenBSD&amp;diff=9650"/>
		<updated>2025-03-04T02:59:56Z</updated>

		<summary type="html">&lt;p&gt;$pooky Hunter: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Storia==&lt;br /&gt;
Nel Giugno del 1996 Theo de Raadt, uno dei primi sviluppatori del NetBSD, si allontana dal progetto a causa di attriti con il resto della comunità.&lt;br /&gt;
Il suo fork prenderà il nome di OpenBSD e i suoi obiettivi saranno: sicurezza, rispetto degli standard e portabilità.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Creazione di un supporto d'avvio per l'installazione==&lt;br /&gt;
In questo articolo mi occuperò solamente dell'installazione e configurazione di base del port di OpenBSD per piattaforma i386 nella sua ultima versione: la 5.5.&lt;br /&gt;
Per non sovraccaricare il server primario è consigliabile utilizzare un mirror, il mirror italiano si trova a questo indirizzo: https://ftp.eu.openbsd.org/pub/OpenBSD/5.5/i386/&lt;br /&gt;
&lt;br /&gt;
Possiamo scegliere tra diversi file d'immagine per installare il sistema:&lt;br /&gt;
&lt;br /&gt;
*floppy55.fs (Desktop PC) supporta la maggior parte delle periferiche PCI, ISA, dei controller IDE e SCSI e alcune schede PCMCIA. &lt;br /&gt;
&lt;br /&gt;
*floppyB55.fs (Servers) supporta diversi controller RAID e SCSI non presenti nel floppy55.fs.&lt;br /&gt;
&lt;br /&gt;
*floppyC55.fs (Laptops) contiene i driver CardBus and PCMCIA della maggior parte dei normali laptop.&lt;br /&gt;
&lt;br /&gt;
*cd55.iso è una immagine ISO9660 che può essere usata per creare CD d'avvio, contiene una maggior selezione di driver rispetto alle immagini floppy.&lt;br /&gt;
&lt;br /&gt;
* install55.iso simile alla cd55.iso, ma oltre al kernel contiene anche tutti i file per l'installazione di base, se la macchina in cui vogliamo installare OpenBSD ha il supporto per il CDROM questa è probabilmente la scelta migliore.&lt;br /&gt;
&lt;br /&gt;
* install55.fs come la install55.iso, ma per l'installazione da USB.&lt;br /&gt;
&lt;br /&gt;
==Creazione di un floppy di boot== &lt;br /&gt;
&lt;br /&gt;
===Da sistemi BSD===&lt;br /&gt;
Scaricare il file immagine desiderato (es. floppy55.fs)&lt;br /&gt;
&lt;br /&gt;
Formattare un floppy&lt;br /&gt;
 # fdformat /dev/rfd0c&lt;br /&gt;
 Format 1440K floppy `/dev/rfd0c'? (y/n): y&lt;br /&gt;
 Processing VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV done.&lt;br /&gt;
&lt;br /&gt;
Se il floppy dovesse avere dei settori danneggiati sostituitelo.&lt;br /&gt;
&lt;br /&gt;
Adesso scriviamo l'immagine sul floppy&lt;br /&gt;
 # dd if=floppy55.fs of=/dev/rfd0c bs=32k&lt;br /&gt;
&lt;br /&gt;
=== Da Linux ===&lt;br /&gt;
 # fdformat /dev/fd0&lt;br /&gt;
 # dd if=floppy55.fs of=/dev/fd0&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Da MS DOS o Windows===&lt;br /&gt;
Formattazione del floppy&lt;br /&gt;
 C:\&amp;gt; format a:&lt;br /&gt;
&lt;br /&gt;
Scrittura dell'immagine con rawrite&lt;br /&gt;
 C:\&amp;gt; rawrite&lt;br /&gt;
 RaWrite 1.2 - Write disk file to raw floppy diskette&lt;br /&gt;
 Enter source file name: floppy55.fs&lt;br /&gt;
 Enter destination drive: a&lt;br /&gt;
 Please insert a formatted diskette into drive A: and press -ENTER- : Enter&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Creazione di una ISO personalizzata==&lt;br /&gt;
&lt;br /&gt;
Molti potrebbero avere bisogno di un'iso per cdrom contenente non solo il sistema base, ma anche i sorgenti o dei pacchetti precompilati.&lt;br /&gt;
&lt;br /&gt;
Scaricate tutto il contenuto di https://ftp.eu.openbsd.org/pub/OpenBSD/5.5/i386/ in OpenBSD/5.5/&lt;br /&gt;
Per eseguire queste operazioni è consigliabile l'utilizzo di wget con l'opzione mirror.&lt;br /&gt;
&lt;br /&gt;
 # wget -m https://ftp.eu.openbsd.org/pub/OpenBSD/5.5/i386/&lt;br /&gt;
 # mv  ftp.eu.openbsd.org/pub/OpenBSD .&lt;br /&gt;
 # rm -rf ftp.eu.openbsd.org/&lt;br /&gt;
 # cd OpenBSD/&lt;br /&gt;
&lt;br /&gt;
Se ci interessa possiamo scaricare&lt;br /&gt;
&lt;br /&gt;
* [https://ftp.eu.openbsd.org/pub/OpenBSD/5.5/ports.tar.gz ports.tar.gz] - l'albero dei ports.&lt;br /&gt;
* [https://ftp.eu.openbsd.org/pub/OpenBSD/5.5/src.tar.gz src.tar.gz] - i sorgenti del sistema operativo di base.&lt;br /&gt;
* [https://ftp.eu.openbsd.org/pub/OpenBSD/5.5/sys.tar.gz sys.tar.gz] - i sorgenti del kernel.&lt;br /&gt;
* [https://ftp.eu.openbsd.org/pub/OpenBSD/5.5/xenocara.tar.gz xenocara.tar.gz] - i sorgenti del server grafico.&lt;br /&gt;
&lt;br /&gt;
Possiamo anche creare la directory packages/ e aggiungervi qualsiasi pacchetto precompilato si desideri installare dopo l'installazione del sistema di base. Naturalmente si dovrà fare attenzione alle dipendenze di ciascun pacchetto scaricato e a non superare lo spazio del supporto sul quale vogliamo andare a scrivere la nostra iso.&lt;br /&gt;
&lt;br /&gt;
 # mkdir packages&lt;br /&gt;
 # cd packages&lt;br /&gt;
 # wget -m https://ftp.eu.openbsd.org/pub/OpenBSD/5.5/packages/i386/&lt;br /&gt;
&lt;br /&gt;
Se non ci siete tornate nella cartella OpenBSD/ e date un comando di questo genere per creare la vostra iso&lt;br /&gt;
&lt;br /&gt;
 # mkisofs -r -l -V &amp;quot;OpenBSD-5.5&amp;quot; -A &amp;quot;OpenBSD v5.5-Release, \&lt;br /&gt;
 Custom ISO, 06-05-2014.&amp;quot; -b 5.5/i386/install55.fs -c boot.catalog \&lt;br /&gt;
 -o openbsd-i386-5.5.iso ../OpenBSD/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Per masterizzare l'iso va bene qualsiasi programma: K3B, Nero o da linea di comando:&lt;br /&gt;
&lt;br /&gt;
 # cdrecord -v -tao dev=/dev/il_vostro_masterizzatore -data driveropts=burnfree openbsd-i386-5.5.iso&lt;br /&gt;
&lt;br /&gt;
==Installazione==&lt;br /&gt;
Le parole o le lettere in neretto corrispondono a quello che dovreste digitare per proseguire con l'installazione.&lt;br /&gt;
Fate fare il boot da CDROM al vostro computer e se tutto va bene dovrebbe apparirvi questo:&lt;br /&gt;
 Welcome to the OpenBSD/i386 5.5 install program.&lt;br /&gt;
 (I)nstall, (U)pgrade, (A)utoinstall or (S)hell? '''i'''&lt;br /&gt;
 &lt;br /&gt;
Selezionare it per la tastiera italiana e dare un nome al computer.&lt;br /&gt;
 Choose your keyboard layout ('?' or 'L' for list) [default] '''it'''&lt;br /&gt;
 System hostname? (short form, e.g. 'foo') puffy&lt;br /&gt;
&lt;br /&gt;
Premere invio per configurare l'interfaccia di rete principale.&lt;br /&gt;
 Available network interfaces are: em0 vlan0.&lt;br /&gt;
 Which one do you wish to configure? (or 'done') [em0] '''Enter'''&lt;br /&gt;
&lt;br /&gt;
Utilizzare dhcp o configurare un IP manualmente.&lt;br /&gt;
 IPv4 address for em0? (or 'dhcp' or 'none') [dhcp] '''Enter'''&lt;br /&gt;
&lt;br /&gt;
Salvo esigenze particolari è possibile saltare i prossimi due passaggi premendo Invio.&lt;br /&gt;
 IPv6 address for em0? (or 'rtsol' or 'none') [none] '''Enter'''&lt;br /&gt;
 Which one do you wish to configure? (or 'done') [done] '''Enter'''&lt;br /&gt;
&lt;br /&gt;
Inserire la password di root. ''&amp;quot;Will not echo&amp;quot; significa che comparirà niente sullo schermo mentre si digita la password, per conferma dopo occorrerà ridigitarla)''&lt;br /&gt;
 Password for root account? (will not echo) '''PaSsWoRd'''&lt;br /&gt;
 Password for root account? (again) '''PaSsWoRd'''&lt;br /&gt;
&lt;br /&gt;
Configurazione dei demoni del sistema di base&lt;br /&gt;
 Start sshd(8) by default? [yes] '''Enter'''&lt;br /&gt;
&lt;br /&gt;
Il network time protocol daemon è un demone che sincronizza automaticamente l'orologio della vostra macchina con alcuni server su Internet. Se avete una connessione ADSL flat può essere una buona idea rispondere '''yes''', se non vi interessa premete Invio.&lt;br /&gt;
 Start ntpd(8) by default? [no] '''y'''&lt;br /&gt;
 NTP server? (hostname or 'default') [default] '''Enter'''&lt;br /&gt;
&lt;br /&gt;
Installazione del sistema grafico&lt;br /&gt;
 Do you expect to run the X Window System? [yes] '''Enter'''&lt;br /&gt;
&lt;br /&gt;
Inserire '''y''' per avviare X automaticamente all'avvio&lt;br /&gt;
 Do you want the X Window System to be started by xdm(1)? [no] '''y'''&lt;br /&gt;
&lt;br /&gt;
È possibile aggiungere un utente amministratore&lt;br /&gt;
 Setup a user? (enter a lower-case loginname, or 'no') [no] '''Nome utente'''&lt;br /&gt;
 Password for ''nome utente'' account? (will not echo) '''PaSsWoRd'''&lt;br /&gt;
 Password for ''nome utente'' account? (again) '''PaSsWoRd'''&lt;br /&gt;
&lt;br /&gt;
Selezionare la zona per il fusorario&lt;br /&gt;
What timezone are you in? ('?' for list) [Canada/Mountain] '''Europe/Rome'''&lt;br /&gt;
&lt;br /&gt;
Configurazione del disco&lt;br /&gt;
 Available disks are: wd0.&lt;br /&gt;
 Which one is the root disk? (or done) [wd0] '''Enter'''&lt;br /&gt;
 Use DUIDs rather than device names in fstab? [yes] Enter&lt;br /&gt;
&lt;br /&gt;
Se il sistema riconosce più di un disco (es. wd1) potete specificare un supporto diverso da wd0, probabilmente però dovrete installare un boot loader (es. GRUB) per poter avviare la partizione dove avete installato OpenBSD.&lt;br /&gt;
&lt;br /&gt;
Premere Invio per utilizzare tutto il disco, altrimenti è possibile specificare manualmente le partizioni.&lt;br /&gt;
 Use (W)hole disk or (E)dit the MBR? [whole] '''Enter'''&lt;br /&gt;
&lt;br /&gt;
Se non si ha intenzione di usare l'intero hard disk si consiglia di partizionarlo da Linux con cfdisk o gparted ''(l'fdisk dell'OpenBSD sembra studiato ad arte per portare i neuroni dell'utente al suicidio di massa)'''.&lt;br /&gt;
&lt;br /&gt;
Premere '''E''' per non lasciare al sistema il compito di creare automaticamente le varie partizioni.&lt;br /&gt;
 Use (A)uto layout, (E)dit auto layout, or create (C)ustom layout? [a] '''E'''&lt;br /&gt;
&lt;br /&gt;
Ora ci troveremo ad usare disklabel per creare le slice nella partizione dell'OpenBSD.&lt;br /&gt;
Aggiungiamo una label per la /&lt;br /&gt;
&lt;br /&gt;
 &amp;gt; a '''a'''&lt;br /&gt;
 offset: [63] '''Enter'''&lt;br /&gt;
&lt;br /&gt;
Il punto di inizio della partizione, va bene il valore che ci dà lui.&lt;br /&gt;
&lt;br /&gt;
 size: [xxxxxxxxx] '''2000m'''&lt;br /&gt;
&lt;br /&gt;
A size possiamo indicare la grandezza della slice, nel caso dell'esempio 2000 Mb, specificando k per Kb, m per Mb o g per Gb dopo il valore numerico che abbiamo inserito.&lt;br /&gt;
&lt;br /&gt;
 Rounding to nearest cylinder: xxxxxx&lt;br /&gt;
 FS type: [4.2BSD] '''Enter'''&lt;br /&gt;
 mount point: [none] '''/'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Aggiungiamo una label di swap&lt;br /&gt;
 &amp;gt; a '''b'''&lt;br /&gt;
 offset: [xxxxxx] '''Enter'''&lt;br /&gt;
 size: [xxxxxxxx] '''300m'''&lt;br /&gt;
 Rounding to nearest cylinder: xxxxxx&lt;br /&gt;
 FS type: [swap] '''Enter'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Per uso server o multiutente sarebbe indicato aggiungere anche delle slice per: /tmp, /var e /home&lt;br /&gt;
 &amp;gt; a '''d'''&lt;br /&gt;
 offset: [xxxxxxx] '''Enter'''&lt;br /&gt;
 size: [xxxxxxx] '''200m'''&lt;br /&gt;
 Rounding to nearest cylinder: xxxxx&lt;br /&gt;
 FS type: [4.2BSD] '''Enter'''&lt;br /&gt;
 mount point: [none] '''/tmp'''&lt;br /&gt;
&lt;br /&gt;
E così via...&lt;br /&gt;
 &amp;gt; p '''m'''&lt;br /&gt;
&lt;br /&gt;
Per visualizzare la situazione definitiva con i parametri in Megabyte.&lt;br /&gt;
 &amp;gt; '''q '''&lt;br /&gt;
 Write new label?: [y] '''Enter'''&lt;br /&gt;
 OpenBSD filesystems:&lt;br /&gt;
 wd0a /&lt;br /&gt;
 The next step *DESTROYS* all existing data on these partitions!&lt;br /&gt;
 Are you really sure that you're ready to proceed? [no] '''y'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Installazione del sistema di base&lt;br /&gt;
&lt;br /&gt;
 Let's install the sets!&lt;br /&gt;
 Location of sets? (cd disk ftp http or 'done') [cd] '''Enter'''&lt;br /&gt;
&lt;br /&gt;
 Available CD-ROMs are: cd0.&lt;br /&gt;
&lt;br /&gt;
Se abbiamo usato un floppy di boot, se ci siamo scordati qualcosa nella directory /5.5/i386/ della nostra iso o per qualsiasi altro motivo è possibile installare il sistema di base anche via ftp, http o da un altro disco.&lt;br /&gt;
&lt;br /&gt;
 Which one contains the install media? (or 'done') [cd0] '''Enter'''&lt;br /&gt;
 Pathname to the sets? (or 'done') [5.5/i386] '''Enter'''&lt;br /&gt;
 Select sets by entering a set name, a file name pattern or 'all'. De-select&lt;br /&gt;
 sets by prepending a '-' to the set name, file name pattern or 'all'. Selected&lt;br /&gt;
 sets are labeled '[x]'.&lt;br /&gt;
&lt;br /&gt;
 [X] bsd           [X] etc55.tgz     [X] xbase55.tgz   [X] xserv55.tgz&lt;br /&gt;
 [X] bsd.rd        [X] comp55.tgz    [X] xetc55.tgz&lt;br /&gt;
 [ ] bsd.mp        [X] man55.tgz     [X] xshare55.tgz&lt;br /&gt;
 [X] base55.tgz    [X] game55.tgz    [X] xfont55.tgz&lt;br /&gt;
&lt;br /&gt;
Premere invio per installare tutto Vi consiglio di selezionarli tutti ed installarli, ulteriori dettagli sono disponibili qui.&lt;br /&gt;
 Set name(s)? (or 'abort' or 'done') [done] Enter&lt;br /&gt;
&lt;br /&gt;
Ignorare l'avvertimento e proseguire con l'installazione&lt;br /&gt;
 Directory does not contain SHA256.sig. Continue without verification? [no] '''y'''&lt;br /&gt;
 Location of sets? (cd disk ftp http or 'done') [done] Enter&lt;br /&gt;
    &lt;br /&gt;
L'installazione è terminata, quando compare la shell scrivere ''reboot'' per avviare il sistema OpenBSD.&lt;br /&gt;
&lt;br /&gt;
==Rendere il sistema più user friendly==&lt;br /&gt;
&lt;br /&gt;
Inserite queste righe nel file: /etc/profile&lt;br /&gt;
&lt;br /&gt;
 export PS1=&amp;quot;[\u@\h \W]\\$ &amp;quot;&lt;br /&gt;
 alias ls='ls -a'&lt;br /&gt;
 alias ll='ls -l'&lt;br /&gt;
 alias free='top -n | head -5'&lt;br /&gt;
 PKG_PATH=&amp;quot;http://openbsd.mirror.garr.it/pub/OpenBSD/5.5/packages/i386/&amp;quot;&lt;br /&gt;
 export PKG_PATH&lt;br /&gt;
&lt;br /&gt;
Vi troverete una shell con un impatto visivo molto simile alla Bash di Linux, che volendo possiamo anche installare dato che è presente nei packages e nei ports.&lt;br /&gt;
&lt;br /&gt;
[nomeutente@nomecomputer directory]$&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Avendo esportato automaticamente il PKG_PATH, al prossimo login (non importa riavviare), per installare un pacchetto da Internet vi sarà sufficiente usare&lt;br /&gt;
&lt;br /&gt;
 # pkg_add nomepacchetto-versione.tgz&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Create le directory /mnt/cdrom e /mnt/floppy dove montare i rispettivi device, su OpenBSD di default non vengono create.&lt;br /&gt;
&lt;br /&gt;
 # mkdir /mnt/cdrom&lt;br /&gt;
 # mkdir /mnt/floppy&lt;br /&gt;
&lt;br /&gt;
Successivamente aggiungete le seguenti righe al file /etc/fstab&lt;br /&gt;
&lt;br /&gt;
 /dev/fd0a /mnt/floppy msdos rw,noauto,nosuid 0 0&lt;br /&gt;
 /dev/cd0a /mnt/cdrom cd9660 ro,noauto 0 0&lt;br /&gt;
 &lt;br /&gt;
OpenBSD non possiede un filesystem che supporti il journaling, ma si consiglia di aggiungere l'opzione '''[http://www.openbsd.org/faq/faq14.html#SoftUpdates softdep]''' alle partizioni ffs&lt;br /&gt;
 /dev/sd0a / ffs rw,'''softdep''' 1 1&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Adesso per montare cdrom e floppy basteranno i comandi:&lt;br /&gt;
&lt;br /&gt;
 # mount /mnt/cdrom&lt;br /&gt;
 # mount /mnt/floppy&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Se come me avete un'immagine ISO di OpenBSD con una cartella 5.5/packages piena di pacchetti precompilati, per installarvi dovrete entrare in quella cartella e dare il comando:&lt;br /&gt;
&lt;br /&gt;
 # pkg_add pacchetto-versione.tgz&lt;br /&gt;
&lt;br /&gt;
Per togliere un pacchetto invece:&lt;br /&gt;
&lt;br /&gt;
 # pkg_delete pacchetto-versione.tgz&lt;br /&gt;
&lt;br /&gt;
==L'albero dei port==&lt;br /&gt;
Per compilare i pacchetti in maniera automatica possiamo decomprimere l'archivio ports.tar.gz nella directory /usr.&lt;br /&gt;
&lt;br /&gt;
 # cp /mnt/cdrom/5.5/ports.tar.gz /usr&lt;br /&gt;
 # cd /usr&lt;br /&gt;
 # tar -xzvf ports.tar.gz&lt;br /&gt;
 # rm ports.tar.gz&lt;br /&gt;
 # cd ports&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nella directory /usr/ports troveremo tutti i sorgenti dei pacchetti del software aggiuntivo disponibili per OpenBSD. Es.: per compilare ed installare nmap dovremo fare così:&lt;br /&gt;
&lt;br /&gt;
 # cd /usr/ports/net/nmap&lt;br /&gt;
 # make install&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Configurazione di alcuni demoni utili==&lt;br /&gt;
&lt;br /&gt;
Editando il file di configurazione /etc/rc.conf è possibile gestire l'avvio automatico dei server del sistema di base.&lt;br /&gt;
Però come sostengono anche nel manuale ufficiale dell'OpenBSD sarebbe buona norma non toccare mai il file /etc/rc.conf. Per facilitare successivi upgrade è meglio creare al suo posto il file /etc/rc.conf.local che al boot ne sovrascrive le impostazioni e copiarvi solamente le linee che vogliamo modificare. In questo modo otteniamo un unico file contenente tutte le modifiche.&lt;br /&gt;
&lt;br /&gt;
Per avviare automaticamente Apache (già sotto chroot)&lt;br /&gt;
&lt;br /&gt;
 # echo httpd_flags= &amp;gt;&amp;gt; /etc/rc.conf.local&lt;br /&gt;
&lt;br /&gt;
===Bind===&lt;br /&gt;
&lt;br /&gt;
 # echo named_flags= &amp;gt;&amp;gt; /etc/rc.conf.local&lt;br /&gt;
&lt;br /&gt;
Personalmente cerco sempre di avere un server dns di cache nella mia rete locale in modo da non essere dipendente da quello del mio ISP.&lt;br /&gt;
Una volta avviato Bind per sfruttarlo dal computer dove è installato dovrete anche modificare il file /etc/resolv.conf&lt;br /&gt;
ed aggiungere come prima riga:&lt;br /&gt;
&lt;br /&gt;
nameserver 127.0.0.1&lt;br /&gt;
&lt;br /&gt;
Per gli altri computer della rete sarà sufficiente indicare come server DNS l'indirizzo IP locale del vostro server Bind, oppure effettuare tutto tramite dhcp se lo avete installato sul server.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Server dhcp ===&lt;br /&gt;
&lt;br /&gt;
Editare il file /etc/dhcpd.interfaces selezionando la scheda di rete dove vogliamo rendere attivo il server dhcp. Dovremmo scegliere una delle schede di rete della rete interna.&lt;br /&gt;
&lt;br /&gt;
 #    $OpenBSD: dhcpd.interfaces,v 1.1 1998/08/19 04:25:45 form Exp $&lt;br /&gt;
 #&lt;br /&gt;
 # List of network interfaces served by dhcpd(8).&lt;br /&gt;
 #&lt;br /&gt;
 ne0&lt;br /&gt;
 #ep0&lt;br /&gt;
 #de1&lt;br /&gt;
&lt;br /&gt;
Adesso modifichiamo in questo modo il file /etc/dhcpd.conf&lt;br /&gt;
&lt;br /&gt;
 # $OpenBSD: dhcpd.conf,v 1.1 1998/08/19 04:25:45 form Exp $&lt;br /&gt;
 #&lt;br /&gt;
 # DHCP server options.&lt;br /&gt;
 # See dhcpd.conf(5) and dhcpd(8) for more information.&lt;br /&gt;
 #&lt;br /&gt;
 # Network: 192.168.1.0/255.255.255.0&lt;br /&gt;
 # Domain name: my.domain&lt;br /&gt;
 # Name servers: 192.168.1.3 and 192.168.1.5&lt;br /&gt;
 # Default router: 192.168.1.1&lt;br /&gt;
 # Addresses: 192.168.1.32 - 192.168.1.127&lt;br /&gt;
 #&lt;br /&gt;
 shared-network LOCAL-NET {&lt;br /&gt;
 option domain-name &amp;quot;openbsd.router&amp;quot;;&lt;br /&gt;
 option domain-name-servers 127.0.0.1;&lt;br /&gt;
 subnet 192.168.0.0 netmask 255.255.255.0 {&lt;br /&gt;
 option routers 192.168.0.1;&lt;br /&gt;
 range 192.168.0.100 192.168.0.150;&lt;br /&gt;
 }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
option domain-name-servers 127.0.0.1 - indica il server DNS che nel nostro caso coincide con la macchina stessaper cui lo imposteremo con l'indirizzo 127.0.0.1&lt;br /&gt;
&lt;br /&gt;
option routers 192.168.0.1; - indica l'indirizzo IP del gateway, corrisponde all'IP della scheda di rete sul quale vogliamo attivare il dhcpd.&lt;br /&gt;
&lt;br /&gt;
range 192.168.0.100 192.168.0.150; - ci permette di selezionare un range di indirizzi IP per il dhcp. Secondo le mie impostazioni nella LAN posso utilizzare gli indirizzi da 192.168.0.1 a 192.168.0.99 staticamente come IP fissi, mentre quelli da 192.168.0.100 a 192.168.0.150 verranno assegnati dinamicamente dal demone dhcp. (Anche gli indirizzi sopra al 192.168.0.150 sono liberi).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Per attivare il servizio dhcpd dovremo editare nuovamente il file /etc/rc.conf sostituendo la riga&lt;br /&gt;
&lt;br /&gt;
 dhcpd_flags=NO        # for normal use: &amp;quot;&amp;quot;&lt;br /&gt;
con&lt;br /&gt;
 dhcpd_flags=&amp;quot;&amp;quot;        # for normal use: &amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Condivisione della connessione==&lt;br /&gt;
&lt;br /&gt;
Per condividere la connessione dobbiamo attivare l'IP forwarding in modo che i pacchetti possano passare dal router al client che li ha richiesti.&lt;br /&gt;
 # sysctl net.inet.ip.forwarding=1&lt;br /&gt;
&lt;br /&gt;
Per rendere questa modifica permanente dovremo modificare il file /etc/sysctl.conf modificando la riga&lt;br /&gt;
&lt;br /&gt;
 net.inet.ip.forwarding=0 &lt;br /&gt;
in&lt;br /&gt;
 net.inet.ip.forwarding=1&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ed abilitare il routing da /etc/rc.conf sostituendo&lt;br /&gt;
 routed_flags=NO        # for normal use: &amp;quot;-q&amp;quot;&lt;br /&gt;
con&lt;br /&gt;
 routed_flags=&amp;quot;-q&amp;quot;        # for normal use: &amp;quot;-q&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Adesso è la volta di vedere la configurazione del firewall /etc/pf.conf&lt;br /&gt;
&lt;br /&gt;
Selezioniamo l'interfaccia di rete verso l'esterno&lt;br /&gt;
 ext_if=&amp;quot;pppoe0&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Adesso quella verso la LAN interna attraverso la quale condivideremo la connessione&lt;br /&gt;
 int_if=&amp;quot;ne0&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Impostiamo il nat dall'interfaccia esterna a tutte le altre&lt;br /&gt;
nat on $ext_if from !($ext_if) -&amp;gt; ($ext_if:0)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Blocchiamo in ingresso dall'esterno la porta 53, quella del DNS, per quando riguarda&lt;br /&gt;
il protocollo UDP così che nessuno da fuori possa sfruttare il nostro dns&lt;br /&gt;
 block in on $ext_if proto udp to port = 53&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Potremmo bloccare la porta UDP 53 anche solamente per un certo range di IP, ad esempio&lt;br /&gt;
gli IP che non fanno parte della sottorete 150.xxx.xxx.0/24 &lt;br /&gt;
 block in on $ext_if proto { tcp, udp } from !150.xxx.xxx.0/24 to port = 53 keep state&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Blocchiamo i pacchetti ICMP così non ci rompono le scatole con i ping&lt;br /&gt;
 block in proto icmp from any to any&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 # scrub for NAT in PPPoE for using max mtu value&lt;br /&gt;
 # questo parametro seve per far funzionare il nat con il pppoe&lt;br /&gt;
 scrub out on pppoe0 max-mss 1440&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Configurazione dell'interfaccia hostname.pppoe&lt;br /&gt;
&lt;br /&gt;
OpenBSD permette una semplice configurazione di tutte le interfacce di rete.&lt;br /&gt;
Dobbiamo creare dei file del tipo hostname.nome_device nella directory /etc&lt;br /&gt;
&lt;br /&gt;
es. il file /etc/hostname.ep0 potrebbe contenere quanto segue:&lt;br /&gt;
&lt;br /&gt;
inet 192.168.0.1 255.255.255.0 NONE &lt;br /&gt;
&lt;br /&gt;
Oppure, se viene configurata tramite dhcp semplicemente avere questa riga:&lt;br /&gt;
&lt;br /&gt;
dhcp&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Significherebbe che la nostra scheda di rete /dev/ep0 ha l'indirizzo 192.168.0.1 e la netmask 255.255.255.0&lt;br /&gt;
I sistemi BSD identificano le schede di rete col nome del driver ed un numero, quindi possono coesistere più schede con il medesimo numeo.&lt;br /&gt;
Non avremo come su Linux /dev/eth0, eth1, eth2... ma ne0, ne1 se abbiamo due schede NE2000 compatibile; ep0, ep1, ep2 per le 3Com e così via.&lt;br /&gt;
&lt;br /&gt;
Un'impostazione tipica del file /etc/hostname.ppoe0&lt;br /&gt;
&lt;br /&gt;
 pppoedev ne0&lt;br /&gt;
 !/sbin/ifconfig ne0 up&lt;br /&gt;
 !/usr/sbin/spppcontrol \$if myauthproto=pap myauthname=testcaller \&lt;br /&gt;
 myauthkey=donttell&lt;br /&gt;
 !/sbin/ifconfig \$if inet 0.0.0.0 0.0.0.1 netmask 0xffffffff&lt;br /&gt;
 !/sbin/route add default 0.0.0.1&lt;br /&gt;
 up&lt;br /&gt;
&lt;br /&gt;
ne0 è l'interfaccia di rete alla quale è attaccato il modem ethernet.&lt;br /&gt;
myauthname e mayautkey sono rispettivamente l'username e la password.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Pure-ftpd==&lt;br /&gt;
&lt;br /&gt;
Pure-ftpd è un server ftp molto semplice, ma al tempo stesso altamente configurabile.&lt;br /&gt;
Per installarlo lanciamo il comando:&lt;br /&gt;
 # pkg_add pure-ftpd-1.0.20.tar.gz&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Per eseguirlo automaticamente all'avvio è necessario aggiungere al file /etc/rc.local queste righe:&lt;br /&gt;
 if [ -x ${PREFIX}/sbin/pure-ftpd ]; then&lt;br /&gt;
  echo Starting Pure-FTPd&lt;br /&gt;
  ${PREFIX}/sbin/pure-ftpd -A -B -H -u1000&lt;br /&gt;
 fi&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Questa sopra è la configurazione di default, ecco invece la mia:&lt;br /&gt;
 if [ -x ${PREFIX}/sbin/pure-ftpd ]; then&lt;br /&gt;
  echo Starting Pure-FTPd&lt;br /&gt;
  ${PREFIX}/sbin/pure-ftpd -B -A -H -u 1000 -c 3 -C 5 -y 4:3 -n 40000:100 -k 95 \&lt;br /&gt;
 -O stats:/var/log/pureftpd.log -I 5 -F /etc/welcome.msg -t 1:15&lt;br /&gt;
 fi&lt;br /&gt;
&lt;br /&gt;
Vi spiego brevemente a cosa servono tutti gli argomenti che ho impostato:&lt;br /&gt;
-B demonizza il processo&lt;br /&gt;
&lt;br /&gt;
-A fa il chroot del server&lt;br /&gt;
&lt;br /&gt;
-H non risolve via dns gli IP delle connessioni, risparmiando banda e cpu&lt;br /&gt;
&lt;br /&gt;
-u &amp;lt;valore&amp;gt; nessun utente con un gid inferiore a &amp;quot;valore&amp;quot; può loggarsi, utile per non far loggare root&lt;br /&gt;
&lt;br /&gt;
-c limite di connessioni dallo stesso IP&lt;br /&gt;
&lt;br /&gt;
-C limite totale di connessioni supportate&lt;br /&gt;
&lt;br /&gt;
-y limite di connessioni per uno stesso utente:utente_anonimo&lt;br /&gt;
&lt;br /&gt;
-n limite numero_files:Mb_occupati, permette di creare delle quote che l'utente non può superare&lt;br /&gt;
&lt;br /&gt;
-k se il disco è pieno più del 95% non permette upload&lt;br /&gt;
&lt;br /&gt;
-O stats:/var/log/pureftpd.log esegue il log del server nel formato stats sul file indicato&lt;br /&gt;
&lt;br /&gt;
-I Timeout in minuti, nel mio caso se un utente rimane inattivo per più di 5 min viene disconnesso&lt;br /&gt;
&lt;br /&gt;
-F permette di indicare un file col messaggio di benvenuto&lt;br /&gt;
&lt;br /&gt;
-t limita la banda degli utenti anonimi upload:download&lt;br /&gt;
&lt;br /&gt;
-T limita la banda utenti normali upload:download&lt;br /&gt;
&lt;br /&gt;
-a permette di indicare un gid corrispondente ad un gruppo di utenti considerati trusted che di conseguenza non vengono chrootati. Non va usato insieme all'opzione -A.&lt;br /&gt;
&lt;br /&gt;
[[Category:Howto]]&lt;/div&gt;</summary>
		<author><name>$pooky Hunter</name></author>
	</entry>
</feed>