<?xml version='1.0' encoding="UTF-8"?>
<!DOCTYPE guide SYSTEM "/dtd/guide.dtd">
<!-- $Header: /var/cvsroot/gentoo/xml/htdocs/doc/it/genkernel.xml,v 1.11 2012/11/05 12:47:49 ago Exp $ -->

<guide lang="it">
<title>Guida a Genkernel in Gentoo Linux</title>

<author title="Autore">
  <mail link="plasmaroo@gentoo.org">Tim Yamin</mail>
</author>
<author title="Revisione">
  Jimi Ayodele
</author>
<author title="Supporto NFS">
  Thomas Seiler
</author>
<author title="Redazione">
  <mail link="nightmorph"/>
</author>
<author title="Redazione">
  <mail link="sping"/>
</author>
<author title="Traduzione">
  Dario Mèndez
</author>
<author title="Traduzione">
  <mail link="cristiano.chiucchiolo@gmail.com">Cristiano Chiucchiolo</mail>
</author>
<author title="Traduzione">
  <mail link="veni78@email.it">Andrea Venino</mail>
</author>

<abstract>
Questa guida si propone di descrivere tutte le funzioni fornite da genkernel.
</abstract>

<!-- The content of this document is licensed under the CC-BY-SA license -->
<!-- See http://creativecommons.org/licenses/by-sa/2.5 -->
<license/>

<version>8</version>
<date>2012-06-29</date>

<chapter>
<title>Introduzione</title>
<section>
<title>In generale</title>
<body>

<p>
Per gli utenti che non vogliono compilare il kernel, genkernel è uno strumento 
che automatizza questo processo. Può aiutare a creare un'immagine del kernel 
simile a quelle disponibili sui CD di installazione Gentoo, che sono progettate 
per rilevare automaticamente la configurazione hardware del sistema. Alcuni 
utenti possono anche essere interessati ad usare genkernel per quel genere di 
hardware che richiede una inizializzazione e un kernel funzionante prima di 
essere usato.
</p>

</body>
</section>
<section>
<title>A chi si rivolge genkernel</title>
<body>

<p>
Se si è incerti su come compilare un kernel, o semplicemente non si ha
familiarità con la propria configurazione hardware, genkernel può essere molto
utile. È progettato per eliminare il disagio della compilazione del kernel, e
supporta in modo predefinito gran parte dell'hardware.
</p>

<p>
Tuttavia, se si conoscono i driver richiesti dal proprio sistema, è possibile
ridurre ulteriormente il tempo necessario per compilare il kernel. Questo è
possibile configurando genkernel in modo che compili solo i driver necessari per
il proprio hardware. Spesso, il numero di driver richiesti dal proprio sistema è
minore (con conseguente minore tempo di compilazione) di quello fornito con la
configurazione predefinita.
</p>

</body>
</section>
<section>
<title>Installare genkernel</title>
<body>

<p>
Per ottenere genkernel, eseguire <c>emerge genkernel</c> dalla linea di comando.
Consultare <c>genkernel --help</c> per ottenere aiuto su come usare la versione 
di genkernel installata nel proprio sistema.
</p>

</body>
</section>
</chapter>

<chapter>
<title>Lavorare con genkernel</title>
<section>
<title>Come usare genkernel</title>
<body>

<p>
Sebbene vi siano diversi modi per eseguire genkernel, l'approccio meno intrusivo
è costituito da <c>genkernel all</c>. Con questo comando, verrà utilizzata una
configurazione generica, che funziona bene per la maggior parte dei sistemi.
Come è stato già detto, questo metodo non è privo di difetti; la maggior parte
dei moduli creati sono inutili per l'utente medio, e potrebbero aumentare il
tempo di compilazione. Qui sotto è illustrato un approccio più efficiente,
che consiste nel passare alcune determinate flag a genkernel, come root:
</p>

<pre caption="Eseguire genkernel (con flag)">
# <i>genkernel --splash --no-install --no-clean --menuconfig all</i>
</pre>

<p>
Il comando illustrato sopra fa in modo che genkernel crei un kernel con il
supporto a bootsplash abilitato (<c>--splash</c>) che dovrà essere installato
manualmente (<c>--no-install</c>). Nella preparazione dell'albero dei sorgenti
del kernel, genkernel si asterrà dal cancellare qualsiasi file oggetto presente
nell'albero dei sorgenti (<c>--no-clean</c>). Verrà infine visualizzata una
utilità di configurazione strutturata in menù, che consentirà all'utente di
selezionare quali moduli debbano essere compilati per il sistema
<c>--menuconfig</c>.
</p>

<p>
Ci sono altre flag che modificano il risultato prodotto da genkernel. Ad
esempio, sostituendo <c>--no-install</c> con la flag <c>--install</c>, genkernel
installerà automaticamente il nuovo kernel nella directory <path>/boot</path>, e
creerà i collegamenti simbolici necessari se verrà specificato l'opzione 
<c>--symlink</c>. La flag <c>--mountboot</c> consente invece a genkernel di 
montare automaticamente la partizione <path>/boot</path>, se necessario.
</p>

<p>
Ricordarsì che genkernel è progettato per rendere la compilazione del kernel
semplice e non stressante. Per questo motivo, genkernel supporta diverse flag
per semplificare il processo di compilazione del kernel. Per fare alcuni esempi,
ci sono flag che aiutano la configurazione del kernel, mentre altre influenzano
la compilazione vera e propria. Alcune flag aiutano anche il debugging del
processo di compilazione. Per chi fosse interessato ad una maggiore
ottimizzazione, ci sono flag che influenzano l'assemblamento, la
pacchettizzazione e persino l'inizializzazione del kernel.
</p>

<p>
Il resto di questo capitolo esamina il funzionamento di varie flag, variabili di
configurazione e azioni disponibili per genkernel. Per una lista più completa si
prega di fare riferimento a <c>man genkernel</c> e ai commenti in 
<path>/etc/genkernel.conf</path>. Alcune flag hanno varianti che servono a 
compiere una operazione inversa. Le varianti inverse contengono il prefisso
<b><c>no-</c></b>, e i loro effetti sono racchiusi tra parentesi quadre, [].
</p>

</body>
</section>
<section>
<title>Flag di configurazione</title>
<body>

<p>
Le flag di configurazione elencate qui sotto servono ad aiutare l'utente a
decidere quali funzioni dovrebbero essere attivate o disattivate nel kernel
prima della compilazione. Si può anche scegliere se salvare o no il file di
configurazione creato durante il processo. Ecco le flag di configurazione
principali:
</p>

<ul>
  <li>
    <b>--<c>no-</c>menuconfig</b>: Attiva <e>[o disattiva]</e> il comando
    <c>make menuconfig</c> (che invoca una utilità di configurazione del kernel
    interattiva e strutturata in menù), prima di compilare il kernel.
  </li>
  <li>
    <b>--gconfig</b>: Fornisce una utility di configurazione del kernel che
    dipende dalle librerie GTK+. Il vantaggio di questa opzione è che la maggior
    parte degli utenti trovano più semplice e più chiaro configurare il kernel
    usando questo strumento, dato che si basa sul sistema di finestre X. Lo
    svantaggio di questa opzione è che <b>è necessario</b> il sistema X per
    poterla utilizzare, quindi non funzionerà sulla riga di comando.
  </li>
  <li>
    <b>--xconfig</b>: Fornisce una utility di configurazione del kernel che
    dipende dalle librerie QT. Il vantaggio di questa opzione è che la maggior
    parte degli utenti trovano più semplice e più chiaro configurare il kernel
    usando questo strumento, dato che si basa sul sistema di finestre X. Lo
    svantaggio di questa opzione è che <b>è necessario</b> il sistema X per
    poterla utilizzare, quindi non funzionerà sulla riga di comando.
  </li>
  <li>
    <b>--<c>no-</c>save-config</b>: Salva <e>[o non salva]</e> la configurazione
    del kernel in un file nella directory <path>/etc/kernels/</path> per un
    eventuale uso successivo.
  </li>
</ul>

</body>
</section>
<section>
<title>flag di compilazione</title>
<body>

<p>
Le seguenti flag di solito producono i loro effetti durante la compilazione
vera e propria.
</p>

<ul>
  <li>
    <b>--kerneldir=<path>percorso/sorgenti/</path></b>: Specifica una
    collocazione alternativa dei sorgenti, diversa da quella predefinita
    (<path>/usr/src/linux/</path>).
  </li>
  <li>
    <b>--kernel-config=<path>/percorso/config-file</path></b>: Specifica quale
    file alternativo di configurazione del kernel debba essere usato, al posto
    di quello predefinito (<path>/percorso/sorgenti/.config</path>).
  </li>
  <li>
    <b>--module-prefix=<path>/percorso/prefix-directory/</path></b>: Specifica
    un prefisso alla directory dove verranno installati i moduli del kernel (il
    percorso predefinito è <path>/lib/modules/</path>.)
  </li>
</ul>

<ul>
  <li>
    <b>--<c>no-</c>clean</b>: Attiva <e>[o disattiva]</e> il comando <c>make
    clean</c> prima di compilare il proprio kernel. Il comando <c>make clean</c>
    rimuove tutti i file oggetto e le dipendenze dall'albero dei sorgenti del
    kernel.
  </li>
  <li>
    <b>--<c>no-</c>mrproper</b>: Attiva <e>[o disattiva]</e> il comando <c>make
    mrproper</c> prima della compilazione del kernel. Come il comando <c>make
    clean</c>, <c>make mrproper</c> rimuove tutti i file oggetto e le dipendenze
    dall'albero dei sorgenti del kernel. Tuttavia, sarà rimosso anche ogni
    precedente file di configurazione (in
    <path>/percorso/sorgenti/.config</path> o
    <path>/percorso/sorgenti/.config-old</path>.)
  </li>
  <li>
    <b>--oldconfig</b>: invoca il comando <c>make oldconfig</c>, che tenta di
    raccogliere informazioni di configurazione per l'architettura del sistema da
    uno script generico in <path>/usr/share/genkernel/</path>. Questo è un
    processo non interattivo; non è previsto alcun input dell'utente. Inoltre,
    se <c>--oldconfig</c> è usato in unione con <c>--clean</c>, quest'ultima
    flag viene negata, causando l'attivazione della flag <c>--no-clean</c>.
  </li>
</ul>

<ul>
  <li>
    <b>--callback="<c>echo hello</c></b>: Chiama gli argomenti specificati
    (<c>echo hello</c>, in questo caso) dopo che il kernel e i moduli rilevanti
    sono stati compilati, ma prima di compilare l'immagine initrd. Questo può
    essere utile se si vogliono installare moduli esterni nell'immagine initrd,
    emergendo gli oggetti rilevanti con la funzione callback, e ridefinendo poi
    un gruppo di moduli genkernel.
  </li>
</ul>

<ul>
  <li>
    <b>--<c>no-</c>install</b>: Attiva <e>[o disattiva]</e> il comando <c>make
    install</c>, che installa la nuova immagine del kernel, il file di
    configurazione, l'immagine initrd e il file System.map all'interno della
    partizione di boot. Anche i moduli compilati verranno installati.
  </li>
  <li>
    <b>--no-ramdisk-modules</b>: Impedisce che i moduli vengano copiati
    nell'immagine initrd creata da genkernel. Questa flag è un'eccezione alla
    regola del prefisso <c>no-</c>; l'omissione di questo prefisso genera una
    flag non valida.
  </li>
  <li>
    <b>--all-ramdisk-modules</b>: Copia tutti i moduli disponibili nella
    immagine initrd appena creata da genkernel.
  </li>
  <li>
    <b>--genzimage</b>: Crea l'immagine initrd prima dell'immagine del kernel.
    (Questo trucco attualmente si applica solo ai sistemi PPC Pegasos.)
  </li>
</ul>

</body>
</section>
<section>
<title>Flag del compilatore</title>
<body>

<p>
Genkernel supporta i seguenti parametri, che vengono passati alle applicazioni
importanti durante l'assemblamento del kernel. Queste flag influenzano il
<e>compilatore</e> usato per il processo di compilazione del kernel, sebbene ad
un livello più basso.
</p>

<ul>
  <li>
    <b>--kernel-cc=<c>nomeCompiler</c></b>: Questo parametro specifica il
    compilatore che verrà usato per compilare il kernel.
  </li>
  <li>
    <b>--kernel-ld=<c>nomeLinker</c></b>: Questo parametro specifica il linker
    che verrà usato per compilare il kernel.
  </li>
  <li>
    <b>--kernel-make=<c>nomeMake</c></b>: Questo parametro specifica il GNU Make
    alternativo che verrà usato per compilare il kernel.
  </li>
</ul>

<ul>
  <li>
    <b>--utils-cc=<c>nomeCompiler</c></b>: Questo parametro specifica un
    compilatore che verrà usato per compilare le utility di supporto.
  </li>
  <li>
    <b>--utils-ld=<c>nomeLinker</c></b>: Questo parametro specifica un linker
    che verrà usato per compilare le utility di supporto.
  </li>
  <li>
    <b>--utils-as=<c>nomeAssembler</c></b>: Questo parametro specifica
    l'assemblatore che verrà usato per compilare le utility di supporto.
  </li>
  <li>
    <b>--utils-make=<c>nomeMake</c></b>: Questo parametro specifica un GNU Make
    alternativo che verrà usato per compilare le utility di supporto.
  </li>
</ul>

<ul>
  <li>
    <b>--makeopts=<c>-jX</c></b>: Specifica il numero di thread contemporanei
    che la utilità make può implementare durante la compilazione del kernel (e
    delle utilità). La variabile <b>'X'</b> è un numero che si ottiene
    aggiungendo 1 al numero di CPU usate dal sistema. Quindi, per un sistema con
    una sola CPU, la flag appropriata è <c>-j2</c>; un sistema con due CPU userà
    la flag <c>-j3</c>, e così via. <e>(Un sistema con un processore che
    supporti la tecnologia Hyper-Threading&amp;trade (HT), può usare la flag
    </e><c>-j3</c><e>, sempre che il supporto Symmetric Multi-Processing (SMP)
    sia abilitato nel kernel.)</e>
  </li>
</ul>

</body>
</section>
<section>
<title>Flag di debugging</title>
<body>

<p>
L'uso di flag di debugging durante il processo di compilazione del kernel
controlla le informazioni ottenute, nonché il modo in cui tali dati si
presentano.
</p>

<ul>
  <li>
    <b>--loglevel=<c>verblevel</c></b>: Controlla il livello di verbosità
    delle informazioni fornite da genkernel. La variabile <c>verblevel</c> è un
    intero tra 0 e 5. Il livello '0' rappresenta un output minimale, mentre '5'
    fornisce tutte le informazioni possibili sulle attività di genkernel durante
    il processo di compilazione.
  </li>
  <li>
    <b>--logfile=<path>/percorso/outputfile</path></b>: Ignora il valore
    impostato nell'argomento <c>--loglevel</c>, e invia <b>tutti</b> i dati di
    debugging prodotti da genkernel verso lo specificato file di output, che è
    collocato in modo predefinito in <path>/var/log/genkernel.log</path>.
  </li>
  <li>
    <b>--<c>no-</c>color</b>: Attiva <e>[o disattiva]</e> l'output colorato
    delle informazioni di debugging (fornite da genkernel) usando sequenze di
    escape.
  </li>
</ul>

</body>
</section>
<section>
<title>Flag di inizializzazione</title>
<body>

<p>
Queste flag sono usate per creare determinati effetti durante l'avvio del
sistema. Alcune di esse agiscono principalmente sull'estetica, mentre altre
possono essere essenziali per attivare alcune funzioni sul sistema.
</p>

<ul>
  <li>
    <b>--<c>no-</c>splash</b>: Attiva <e>[o disattiva]</e> il supporto per <uri
    link="http://fbsplash.berlios.de/wiki/doku.php">framebuffer splash</uri>
    nell'immagine initrd prodotta da genkernel. Per sovrascrivere il tema
    utilizzato in modo predefinito da fbsplash, si usa
    <b>--splash=<c>TemaPreferito</c></b> (dove <c>TemaPreferito</c> è il nome
    di una delle directory in <path>/etc/splash/</path>.)
  </li>
  <li>
    <b>--splash-res=<c>RisoluzionePreferita</c></b>: Questa flag consente di
    selezionare quali risoluzioni dello splash screen saranno supportate da
    initrd durante l'avvio del sistema. Questo è utile per due ragioni: in primo
    luogo, si è in grado di selezionare solo le risoluzioni dello splash screen
    che ci interessano per il proprio sistema; in secondo luogo, si evita
    l'aumento non necessario dello spazio su disco richiesto da initrd (dato che
    initrd non deve supportare risoluzioni non rilevanti per la propria
    configurazione di sistema.) Tuttavia, potrebbe essere utile omettere questa
    flag se si sta compilando il kernel per un CD di installazione; questo
    consente infatti a splash di supportare tutte le possibili risoluzioni.
  </li>
  <li>
    <b>--do-keymap-auto</b>: Forza la selezione della mappatura della tastiera
    durante la sequenza di boot.
  </li>
  <li>
    <b>--lvm</b>: Include il supporto per lo storage utilizzando il <uri
    link="http://sources.redhat.com/lvm2/">Logical Volume Management</uri>
    (LVM2) da binari <e>statici</e>, se disponibile nel sistema. I binari LVM2
    (statici) che servono, se non sono disponibili vengono compilati.
    Assicurarsi di installare il pacchetto lvm2 con <c>emerge lvm2</c> prima di
    abilitare questa flag, e consulta la guida <uri
    link="/doc/it/lvm2.xml">Installazione di Gentoo con LVM2</uri>.
  </li>
  <li>
    <b>--dmraid</b>: Include il supporto per <uri
    link="http://people.redhat.com/~heinzm/sw/dmraid/readme">DMRAID</uri>,
    l'utilità che crea mappature RAID usando il sottosistema device-mapper del
    kernel. DMRAID rileva, attiva, disattiva e mostra le proprietà dei set RAID
    software (ATARAID, per esempio) e delle partizioni DOS contenute.
  </li>
  <li>
    <b>--luks</b>: Include il supporto per <uri
    link="http://luks.endorphin.org/">Linux Unified Key Setup</uri> o LUKS.
    Permette di usare un dispositivo criptato tramite LUKS contenente il
    filesystem di root. Sul bootloader verrà quindi impostato quel dispositivo
    criptato come valore di crypt_root (e real_root sarà il dispositivo non
    criptato creato da LUKS).
  </li>
  <li>
    <b>--disklabel</b>: Aggiunge il supporto alle etichette dei dischi e agli 
    UUID al proprio initrd.
  </li>
  <li>
    <b>--iscsi</b>: Aggiunge il supporto per iSCSI al proprio initrd.
  </li>
  <li>
    <b>--multipath</b>: Aggiunge il supporto per <uri
    link="/doc/it/multipath.xml">Multipath</uri> al proprio initrd.
  </li>
  <li>
    <b>--linuxrc=/percorso/linuxrc</b>: Specifica un <e>linuxrc</e> &mdash;
    creato dall'utente; si tratta di uno script che viene inizializzato durante
    la fase di avvio del kernel, prima del processo di boot vero e proprio. (Uno
    script linuxrc predefinito dovrebbe trovarsi nella directory
    <path>/usr/share/genkernel/</path>.) Questo script consente di avviare un
    kernel leggero e modularizzato, caricando (come moduli) i driver che sono
    necessari al sistema.
  </li>
  <li>
    <b>--cachedir="/percorso/directory/alternativa/</b>: Sostituisce la
    collocazione predefinita della cache usata durante la compilazione del
    kernel.
  </li>
  <li>
    <b>--tempdir=/percorso/nuova/tempdir/</b>: Specifica la collocazione dei
    file temporanei usati da genkernel durante la compilazione del kernel.
  </li>
  <li>
    <b>--unionfs</b>: Include il supporto per lo <uri
    link="http://www.fsl.cs.sunysb.edu/project-unionfs.html">Unification File
    System</uri> nell'immagine initrd.
  </li>
</ul>

</body>
</section>
<section>
<title>Altre flag</title>
<body>

<p>
Le flag elencate qui sotto sono supportate da genkernel, ma non fanno parte di
nessuna delle altre categorie:
</p>

<ul>
  <li>
    <b>--mountboot</b>: Rileva se la directory <path>/boot</path> deve essere
    montata su una partizione separata, oppure no. Controllerà poi lo script
    <path>/etc/fstab</path> per istruzioni su come montare la partizione di boot
    su un filesystem (se necessario).
  </li>
  <li>
    <b>--kernname=<c>NickName</c></b>: Consente di modificare il nome
    dell'immagine del kernel e di quella initrd nella directory
    <path>/boot/</path>, cosicché le immagini prodotte si chiameranno
    kernel-<c>NickName</c>-versione e initramfs-<c>NickName</c>-versione.
  </li>
</ul>

</body>
</section>
<section>
<title>Azioni possibili</title>
<body>

<p>
Un'azione dice a genkernel cosa produrre. Attualmente, sono supportate le
seguenti azioni:
</p>

<ul>
  <li>
    <c>all</c>: Produce tutti gli stage &mdash; l'immagine initrd, quella del
    kernel e i moduli.
  </li>
  <li><c>bzImage</c>: Produce solo l'immagine del kernel</li>
  <li><c>kernel</c>: Produce solo l'immagine del kernel e i moduli</li>
  <li><c>initramfs</c>: Produce solo l'immagine initramfs/ramdisk</li>
  <li><c>ramdisk</c>: Produce solo l'immagine initramfs/ramdisk</li>
</ul>

<p>
La prima azione, <c>all</c>, è raccomandata per la maggior parte degli utenti,
dato che produce gli stage necessari per avere un kernel funzionante. È
importante ricordare che un'<e>azione</e> dice semplicemente a genkernel cosa
<e>produrre</e>, non cosa <e>installare</e>.
</p>

</body>
</section>
<section>
<title>Configurazione del bootloader</title>
<body>

<p>
Per permettere a genkernel di funzionare con il proprio bootloader, è necessario
effettuare tre o quattro modifiche al file di configurazione di quest'ultimo.
</p>

<ol>
  <li>
    Aggiungere <c>real_root=/dev/hda3</c>, per esempio, ai parametri da fornire
    all'immagine del kernel se <path>/dev/hda3</path> contiene la partizione di
    root.
  </li>
  <li>
    Se si stà utilizzando splash, è necessario fornire un modalità video
    corretta come <c>vga=0x317</c> ai parametri da passare al kernel ed
    aggiungere <c>splash=verbose</c> o <c>splash=silent</c>, a seconda del grado
    di verbosità che si richiede al bootloader.
  </li>
  <li>
    Aggiungere le informazioni initrd a seconda di come il bootloader le
    richieda: per maggiori informazioni su come rendere il bootloader in grado
    di usare initrd, consultare il capitolo <uri
    link="doc/it/handbook/handbook-x86.xml?part=1&amp;chap=10">Configurazione
    del Bootloader</uri> nel Manuale Gentoo.
  </li>
</ol>

</body>
</section>
</chapter>

<chapter>
<title>Opzioni di configurazione</title>
<section>
<title>Modificare /etc/genkernel.conf</title>
<body>

<p>
Passare le flag a genkernel da linea di comando può essere macchinoso,
specialmente quando se ne hanno una dozzina:
</p>

<pre caption="Eseguire genkernel (con molte flag)">
# <i>genkernel --loglevel=5 --no-color --no-mrproper --clean --splash \
--kerneldir=/path/to/alternate/kernel/sources --install --menuconfig \
--kernel-config=/path/to/preferred/configfile --save-config --mountboot all</i>
</pre>

<p>
Per fortuna, esiste un file di configurazione dove può essere impostata (o
modificata) a proprio piacimento gran parte delle opzioni principali: 
<path>/etc/genkernel.conf</path>. Ecco una sintesi delle opzioni più importanti:
</p>

<ul>
  <li>
    <b>MENUCONFIG=<c>[yes|no]</c></b>: Questa opzione equivale alla flag
    <c>--menuconfig</c> usata da genkernel, che fa sì che venga utilizzato il
    comando <c>make menuconfig</c> per invocare una utilità di configurazione
    del kernel basata sulla linea di comando. Per invocare automaticamente
    questa utilità durante la configurazione del kernel attraverso questo
    script, impostare l'opzione su 'yes'; altrimenti, scegliere 'no'.
  </li>
  <li>
    <b>CLEAN=<c>[yes|no]</c></b>: Impostare questa opzione su 'yes' equivale
    alla flag <c>--clean</c> usata da genkernel, e invoca il comando <c>make
    clean</c> per rimuovere tutti i file oggetto e le dipendenze dall'albero dei
    sorgenti del kernel. Impostare quasta opzione su 'no' crea un effetto a
    cascata &#8212; equivale alla flag <c>--no-clean</c> di genkernel, che
    disabilita il comando <c>make clean</c> e implica la flag
    <c>--no-mrproper</c> &mdash; annullando in pratica il comando <c>make
    mrproper</c>.
  </li>
  <li>
    <b>MRPROPER=<c>[yes|no]</c></b>: Impostare questa opzione su 'yes' equivale
    alla flag <c>--mrproper</c> usata da genkernel, e invoca il comando <c>make
    mrproper</c>, che ripulisce l'albero dei sorgenti del kernel da qualunque
    file di configurazione. Selezionare 'no' equivale invece alla flag
    <c>--no-mrproper</c>, che disabilita il comando <c>make mrproper</c>.
  </li>
  <li>
    <b>MOUNTBOOT=<c>[yes|no]</c></b>: Impostare questa opzione su 'yes' equivale
    alla flag <c>--mountboot</c>, che monta automaticamente la directory
    <path>/boot/</path> durante la compilazione (se necessario). Se la directory
    <path>/boot/</path> si trova su una partizione separata, è consigliabile
    attivare questa opzione; sarà un passo (essenziale) in meno da ricordare
    dopo.
  </li>
  <li>
    <b>SAVE_CONFIG=<c>[yes|no]</c></b>: Dopo la configurazione del kernel, le
    opzione selezionate vengono salvate come <path>.config</path> nell'albero
    del sorgenti del kernel. Questo script può essere sovrascritto nella
    compilazione del kernel successiva, o addirittura può essere cancellato
    dall'albero dei sorgenti. Scegliere 'yes' qui equivale alla flag
    <c>--save-config</c>, che salva tutte le opzioni selezionate durante la
    configurazione del kernel in uno script nella directory
    <path>/etc/kernels/</path>. Scegliere 'no' mantiene lo <e>status quo</e>.
  </li>
  <li>
    <b>USECOLOR=<c>[yes|no]</c></b>: Impostare questa opzione su 'yes' equivale
    alla flag <c>--color</c>, che colora l'output di genkernel per facilitare il
    debugging (quando necessario.)
  </li>
  <li>
    <b>LOGLEVEL=<c>[0|1|2|3|4|5]</c></b>: Questa opzione serve a regolare la
    verbosità dell'output prodotto da genkernel &mdash; impostando questa
    opzione a '0', con <c>--loglevel=0</c> sarà soppresso ogni output prodotto
    da genkernel; impostare questa opzione a '5', con <c>--loglevel=5</c>,
    fornisce all'utente tutto l'output prodotto da genkernel.
  </li>
</ul>

<note>
Ulteriori opzioni sono descritte in <path>/etc/genkernel.conf</path>.
</note>

<p>
Scegliendo le opzioni appropriate in <path>/etc/genkernel.conf</path>, si può
ridurre il numero delle flag passate a genkernel dalla riga di comando:
</p>

<pre caption="Eseguire genkernel (con flag), dopo aver configurato
genkernel.conf">
# <i>genkernel --splash --kerneldir=/path/to/alternate/kernel/sources \
--kernel-config=/path/to/preferred/configfile --install all</i>
</pre>

<p>
Con entrambi i metodi si ottengono risultati identici, ma il secondo ha la
maggior parte delle opzioni salvate in uno script che può essere modificato in
un secondo tempo.
</p>

</body>
</section>
</chapter>

<chapter>
<title>Avvio da rete con genkernel</title>
<section>
<title>Avvio da rete con un CD di Installazione</title>
<body>

<p>
L'utilità genkernel può produrre immagini del kernel e di initrd che supportino
l'avvio da rete, o <e>netboot</e>. Con un po' di fortuna, si dovrebbe riuscire
ad avviare da rete qualsiasi computer recente, entrando nell'ambiente fornito
dal CD di installazione.
</p>

<p>
La magia sta nello script linuxrc di genkernel: esso proverà ad effettuare il
<e>netmount</e> del CD di Installazione usando NFS. Fatto ciò, gli <e>init
scripts</e> del CD di Installazione potranno assumere il controllo, come se il
CD fosse presente localmente.
</p>

</body>
</section>
<section>
<title>Produrre immagini del kernel e initrd con supporto per l'avvio da
rete</title>
<body>

<p>
Per abilitare il supporto all'avvio da rete, includere le seguenti opzioni
durante la configurazione del kernel:
</p>

<warn>
Il supporto all'avvio da rete con genkernel è sperimentale e potrebbe contenere
bug.
</warn>

<p>
Per prima cosa, l'immagine del kernel deve includere i driver per le proprie
schede di rete, o Network Interface Cards (NIC). Normalmente, i driver per
l'avvio da rete è essenziale avere questi driver compilati direttamente
all'interno dell'immagine del kernel, e <b>non</b> come moduli.
</p>

<pre caption="Configurare un kernel della serie 2.6.x affinché supporti il
proprio driver di rete">
Device Drivers --->
   Networking Support --->
      Ethernet (10 or 100Mbit)  --->
         [*] Ethernet (10 or 100Mbit)
         &lt;*&gt;   il driver per la propria schede di rete
<comment>(Assicurarsi di selezionare &lt;*&gt; e non &lt;M&gt;)</comment>
</pre>

<p>
In secondo luogo, si suggerisce di attivare le opzioni <c>IP: kernel level
autoconfiguration</c> e <c>IP:DHCP support</c>. Questo rende le cose più
semplici, dato che gli indirizzi IP e il percorso NFS del CD di Installazione
possono essere configurati su un server DHCP. Certo, questo significa che la
linea di comando del kernel rimarrà la stessa per ogni macchina &mdash; il che è
molto importante nell'<e>etherbooting</e>.
</p>

<pre caption="Configurare un kernel della serie 2.6.x affinché supporti DHCP">
Device Drivers --->
   Networking Support --->
      Networking options
         [*] TCP/IP networking--->
         [*]   IP: kernel level autoconfiguration
         [*]     IP: DHCP support
<comment>(Queste opzioni dicono al kernel di inviare una richiesta DHCP all'avvio.)</comment>
</pre>

<p>
Inoltre, si dovrebbe abilitare SquashFS, dato che la maggior parte dei moderni
CD di Installazione Gentoo lo richiedono. Il supporto per SquashFS non è incluso
nell'albero dei sorgenti del kernel generico. Per abilitare SquashFS, applicare
le patch necessarie al kernel generico, oppure installare <c>gentoo-sources</c>.
</p>

<pre caption="Configurare il kernel affinché supporti SquashFS">
File systems--->
   Miscellaneous filesystems --->
      [*] SquashFS 2.X - Squashed file system support
 </pre>

 <p>
Una volta completato il processo di compilazione, creare un <e>tarball</e>
compresso (tar.gz) che contenga i moduli del kernel. Questo passaggio è
necessario solo se la versione del proprio kernel non corrisponde alla versione
dell'immagine del kernel sul CD di Installazione.
</p>

 <pre caption="Creare un tarball compresso contenente i moduli del kernel">
<comment>(Creare un file tar.gz contenente tutti i moduli)</comment>
# <i>cd /</i>
# <i>tar -cf /tmp/modules-X.Y.Z.tar.gz /lib/modules/X.Y.Z/</i>
</pre>

<p>
A seconda del meccanismo usato dall'avvio da rete, si dovranno eseguire alcuni
dei seguenti passaggi:
</p>

<pre caption="Creare un'immagine di boot">
<comment>(Creare un'immagine di boot da rete)</comment>
# <i>emerge mknbi</i>
# <i>cd /boot</i>
# <i>mkelf-linux -params="root=/dev/ram0 init=/linuxrc ip=dhcp" kernel... initrd... > etherboot.img</i>

<comment>(Creare un'immagine TFTP OpenBoot / SPARC64)</comment>
# <i>emerge sparc-utils</i>
# <i>cd /boot</i>
# <i>elftoaout kernel... -o kernel.aout</i>
# <i>piggyback64 kernel.aout System.map-... initrd-...</i>
# <i>mv kernel.aout openboot.img</i>
<comment>(Questa è un'immagine di boot)</comment>

<comment>(PXE non necessita di ulteriori passaggi, il kernel e initrd possono essere usati così come sono.)</comment>
</pre>

<p>
Per finire, copiare questo kernel sul proprio server TFTP. I dettagli dipendono
dall'architettura e non rientrano negli scopi di questa guida. Si prega di fare
riferimento alla documentazione per la propria piattaforma.
</p>

</body>
</section>
<section>
<title>Configurazione NFS</title>
<body>

<p>
Per configurare una condivisione NFS che contenga il CD di Installazione, usare
il loop device per montare l'immagine ISO, e poi copiare il contenuto del CD
all'interno della condivisione NFS. In più, gli script initrd di genkernel
estrarranno tutti i files tar.gz che si trovano nella directory
<path>/nfs/livecd/add/</path>. Tutto ciò che si deve fare è copiare l'archivio
<c>modules-X.Y.Z.tar.gz</c> nella directory <path>/nfs/livecd/add/</path>.
</p>

<pre caption="Preparare la condivisione NFS">
<comment>(Si presuppone che /nfs/livecd sia una condivisione NFS esportata)</comment>
# <i>mount /tmp/gentoo-livecd.iso /mnt/cdrom -o loop</i>
# <i>cp -p /mnt/cdrom /nfs/livecd</i>
# <i>umount /mnt/cdrom</i>

<comment>(Copiare modules.tar.gz in /add)</comment>
# <i>mkdir /nfs/livecd/add</i>
# <i>cp /tmp/modules-X.Y.Z.tar.gz /nfs/livecd/add</i>
</pre>

</body>
</section>
<section>
<title>Configurazione DHCP</title>
<body>

<p>
Le immagini netboot chiederanno al proprio server DHCP un indirizzo IP e un
parametro root-path. Entrambi possono essere specificati usando un indirizzo MAC
per identificare le macchine:
</p>

<pre caption="Esempio configurazione client dhcpd.conf">
...

host netbootableMachine {
         hardware ethernet 11:22:33:44:55:66;
         fixed-address 192.168.1.10;
         option root-path "192.168.1.2:/nfs/livecd";
}
<comment># Qui, 192.168.1.2 è il server NFS
# Mentre 192.168.1.10 sarà l'indirizzo IP della macchina avviata da rete
</comment>
...
</pre>

</body>
</section>
<section>
<title>Istruzione per l'avvio da rete</title>
<body>

<p>
L'avvio da rete di per sé dipende molto dalla piattaforma. La parte importante
sta nello specificare i parametri <c>ip=dhcp</c> e <c>init=/linuxrc</c> sulla
riga di comando del kernel, visto che questo attiverà l'interfaccia di rete e
dirà agli script initrd di montare il CD di Installazione via NFS. Ecco alcuni
consigli specifici per le diverse piattaforme:
</p>

<pre caption="Istruzioni per l'avvio da rete">
<comment># Etherboot - inserire il disco etherboot nel drive e riavviare
# La riga di comando del kernel è stata specificata quando è stata prodotta l'immagine</comment>

<comment># Sparc64 - Selezionare Stop-A nel prompt di boot</comment>
ok boot net ip=dhcp init=/linuxrc

<comment># PXE - Configurare pxelinux (parte di syslinux), poi creare un file pxelinux.cfg/default con queste righe:</comment>

DEFAULT gentoo
TIMEOUT 40
PROMPT 1

LABEL gentoo
    KERNEL kernel-X.Y.Z
    APPEND initrd=initrd-X.Y.Z root=/dev/ram0 init=/linuxrc ip=dhcp
</pre>

</body>
</section>
</chapter>

<chapter>
<title>Avviare un'immagine initramfs creata con genkernel</title>
<section>
<title>Introduzione</title>
<body>
<p>
Se hai creato un'immagine initramfs con genkernel dovresti prendere in
considerazione le varie opzioni che si possono (o si devono) definire nella
configurazione del proprio bootloader. Le più comuni sono state aggiunte a
questa guida.
</p>
</body>
</section>
<section>
<title>Attivare il supporto a LVM o al RAID software</title>
<body>
<p>
Se il tuo sistema usa LVM o il RAID software dovresti sicuramente aver creato
l'immagine initramfs usando le opzioni <c>--lvm</c> e <c>--mdadm</c>. Tuttavia
non dimenticarti che occorre abilitare anche il supporto in fase di boot. Ciò
può essere fatto usando le opzioni <c>dolvm</c> e <c>domdadm</c>.
</p>

<pre caption="Attivare il supporto a LVM e/o al RAID software">
<comment># Esempio per GRUB 1.x</comment>
title Gentoo Linux
root (hd0,0)
kernel /vmlinuz root=/dev/md3 <i>dolvm domdadm</i>
initrd /initramfs-genkernel-x86_64-3.4.3
</pre>
</body>
</section>
<section>
<title>Effettuare il boot in modalità singolo utente</title>
<body>
<p>
Se per qualche ragione il boot fallisce è possibile ripristinare il sistema
riavviandolo in modalità singolo utente. In questo modo verranno avviati solo i
servizi veramente necessari e poi verrà resa disponibile una shell di ripristino
con privilegi di root.
</p>
<pre caption="Effettuare il boot in modalità singolo utente">
<comment># Esempio per GRUB 1.x</comment>
title Gentoo Linux
root (hd0,0)
kernel /vmlinuz root=/dev/md3 <i>init_opts=S</i>
initrd /initramfs-genkernel-x86_64-3.4.3
</pre>
</body>
</section>
</chapter>

<chapter>
<title>Conclusione</title>
<section>
<title>Automatizzare o non automatizzare?</title>
<body>

<p>
Lo scopo di genkernel è quello di fornire un'alternativa (più facile) al metodo
tradizionale di compilazione del kernel. Come sempre, si può scegliere se si
vuole automatizzare il processo di compilazione del kernel, oppure no.
</p>

</body>
</section>
</chapter>

</guide>
