Genkernel, per chi ancora non lo conoscesse, è una specie di script che va ad automatizzare la compilazione del kernel. Lo scopo principale è quello di rilevare automaticamente la configurazione hardware del sistema.

Genkernel è un tool per la compilazione di un kernel Linux per la distribuzione Gentoo.
Genkernel compila il kernel con ogni driver per l’hardware inserito come modulo, poi copia questi nel disco RAM che è passato al kernel al momento del boot, offrendo un’identificazione automatica dell’hardware. Questo tool è pensato per gli utenti meno esperti nella configurazione di un kernel Linux che devono affrontare questo problema.
La ragione principale per la creazione di genkernel è che la configurazione e la compilazione del kernel avvengono durante l’installazione di Gentoo, e questo rappresenta un problema per i nuovi utenti. Gli utenti esperti, invece, preferiscono configurare e compilare il kernel manualmente.

Per prima cosa è sincronizzare emerge e andare a installare/aggiornare genkernel. Per far questo bisogna andare ad aprire un terminale e con privilegi di amministratore dare il comando:

emerge –sync && layman -S
per sincronizzare, mentre per installare genkernel:

emerge genkernel
In alternativa è possibile installare genkernel utilizzando il pacchetto presente in Entropy o via terminale con equo install.

Al comando emerge genkernel avrete un output simile al seguente:

sabayonportatile carlo # emerge genkernel

* IMPORTANT: 7 news items need reading for repository ‘gentoo’.
* Use eselect news to read news items.

* IMPORTANT: config file ‘/etc/portage/package.use’ needs updating.
* See the CONFIGURATION FILES section of the emerge
* man page to learn how to update config files.
Calculating dependencies… done!

>>> Verifying ebuild manifests

>>> Emerging (1 of 1) sys-kernel/genkernel-3.4.19
* genkernel-3.4.19.tar.bz2 RMD160 SHA1 SHA256 size 😉 … [ ok ]
* dmraid-1.0.0.rc14.tar.bz2 RMD160 SHA1 SHA256 size 😉 … [ ok ]
* mdadm-3.1.4.tar.bz2 RMD160 SHA1 SHA256 size 😉 … [ ok ]
* LVM2.2.02.74.tgz RMD160 SHA1 SHA256 size 😉 … [ ok ]
* device-mapper.1.02.22.tgz RMD160 SHA1 SHA256 size 😉 … [ ok ]
* busybox-1.18.1.tar.bz2 RMD160 SHA1 SHA256 size 😉 … [ ok ]
* open-iscsi-2.0-872.tar.gz RMD160 SHA1 SHA256 size 😉 … [ ok ]
* e2fsprogs-1.41.14.tar.gz RMD160 SHA1 SHA256 size 😉 … [ ok ]
* fuse-2.7.4.tar.gz RMD160 SHA1 SHA256 size 😉 … [ ok ]
* unionfs-fuse-0.22.tar.bz2 RMD160 SHA1 SHA256 size 😉 … [ ok ]
* gnupg-1.4.11.tar.bz2 RMD160 SHA1 SHA256 size 😉 … [ ok ]
>>> Unpacking source…
>>> Unpacking genkernel-3.4.19.tar.bz2 to /var/tmp/portage/sys-kernel/genkernel-3.4.19/work
>>> Source unpacked in /var/tmp/portage/sys-kernel/genkernel-3.4.19/work
>>> Compiling source in /var/tmp/portage/sys-kernel/genkernel-3.4.19/work/genkernel-3.4.19 …
>>> Source compiled.
>>> Test phase [not enabled]: sys-kernel/genkernel-3.4.19

>>> Install genkernel-3.4.19 into /var/tmp/portage/sys-kernel/genkernel-3.4.19/image/ category sys-kernel
* Copying files to /var/cache/genkernel/src…
* bash-completion.eclass has been deprecated.
* Please update your ebuilds to use bash-completion-r1 instead.
>>> Completed installing genkernel-3.4.19 into /var/tmp/portage/sys-kernel/genkernel-3.4.19/image/

ecompressdir: bzip2 -9 /usr/share/man

>>> Installing (1 of 1) sys-kernel/genkernel-3.4.19

* Documentation is available in the genkernel manual page
* as well as the following URL:

* http://www.gentoo.org/doc/en/genkernel.xml

* This package is known to not work with reiser4. If you are running
* reiser4 and have a problem, do not file a bug. We know it does not
* work and we don’t plan on fixing it since reiser4 is the one that is
* broken in this regard. Try using a sane filesystem like ext3 or
* even reiser3.

* The LUKS support has changed from versions prior to 3.4.4. Now,
* you use crypt_root=/dev/blah instead of real_root=luks:/dev/blah.

* The following bash-completion scripts have been installed:
* genkernel
*
* To enable command-line completion on a per-user basis run:
* eselect bashcomp enable
a questo punto, sempre con privilegi di amministratore, andiamo a dare il comando:

USE=”sources_standalone” emerge sabayon-sources
seguito da:

eselect kernel list
come si vede dal seguente output, eselect andrà a creare un elenco dei kernel possibili:

[1] linux-2.6.39-sabayon *
[2] linux-3.0
[3] linux-3.0.0-fusion
[4] linux-3.0.0-sabayon
Starà a noi scegliere quale kernel utilizzare. L’importante è segnarsi il numero del kernel interessato. Il numero, che da ora lo chiameremo X, ovviamente è quello compreso fra parentesi quadre.
Andiamo quindi a definire il kernel desiderato:

eselect kernel set x
#NB. al posto di X va inserito il numero del Kernel

zcat /proc/config.gz > /usr/src/config
Arrivati qui la parte più complicata è fatta, infatti non ci resta altro che dare il comando:

genkernel –kernel-config=/usr/src/config –menuconfig –bootloader=grub –splash=sabayon –disklabel –luks all
Se si sceglie di editare manualmente le partizioni, altrimenti utilizzare:

genkernel –kernel-config=/usr/src/config –menuconfig –bootloader=grub –splash=sabayon –disklabel –lvm –luks all
se, sempre per quanto riguarda le partizioni, ci si vuole affidare ad anaconda/diskdruid

Consiglio la lettura del paragrafo 2 e 3 della guida a genkernel in Gentoo Linux per comprendere meglio le flag di compilazione.

Infine, se necessitate della ricompilazione dei moduli potete usufruire del comando:

module-rebuild rebuild