Guía Genkernel de Gentoo Linux

Tim Yamin  Autor
Jimi Ayodele  Colaborador
Thomas Seiler  Soporte NFS
Joshua Saddler  Editor
John Christian Stoddart  Traductor
José Luis Rivero  Traductor
Ervin Sarkisov  Traductor
Andrés Pereira  Traductor
Sergio D. Rodríguez Inclan  Traductor

Actualizado 22 de junio, 2008

1.  Introducción

Fundamentos

Genkernel está diseñado para permitir a los usuarios que no suelen compilar un núcleo propio utilizar una configuración similar a la del CD de Instalación Gentoo que auto-detecta su hardware. Algunos usuarios también pueden estar interesados en utilizar genkernel para aquél hardware que precisa de un núcleo operativo e inicialización antes de que arranque el sistema. Genkernel también compila automáticamente los módulos de su núcleo, lo que permite usar el hardware que requiere la carga de estos módulos con parámetros personalizados.

Público objetivo

Genkernel a menudo es una buena elección para aquellos que no están acostumbrados a compilar su propio núcleo o para los que no están seguros de su configuración de hardware. Genkernel está diseñado para aliviar el proceso de compilación del núcleo y debería dar soporte por defecto a la mayoría de su hardware.

Sin embargo, si conoce los drivers que requiere su sistema, puede reducir aún más el tiempo de compilación del núcleo. Esto es posible debido a que puede indicarle a genkernel que sólo construya los drivers relevantes a su hardware. Con frecuencia el número de drivers que requiere su sistema será menor (implicando un tiempo de compilación más corto) que los que provee la configuración por defecto.

Instalando genkernel

Puede obtener genkernel ejecutando simplemente el comando emerge genkernel. Si está usando la Plataforma de Referencia de Gentoo (GRP) recuerde instalar los paquetes binarios usando la opción -k de emerge. Ya que algunos paquetes de genkernel en GRP pueden ser anticuados, ese parámetro puede no ser el mismo. Se recomienda consultar siempre genkernel --help para obtener ayuda sobre cómo usar la versión de genkernel instalada en su sistema.

2.  Trabajando con genkernel

Cómo usar genkernel

Aunque hay varias formas de ejecutar genkernel, el enfoque menos inapropiado es mediante genkernel all. Con este se usa una configuración genérica que funciona bien en la mayoría de los sistemas. Tal como se mencionaba antes, este enfoque presenta ciertas desventajas pues la mayor parte de los módulos creados no son útiles para el usuario promedio y puede incrementar el tiempo de compilación. Abajo se muestra una ilustración de un enfoque más eficiente el cual se logra al pasar ciertos parámetros a genkernel como el usuario root:

Listado de Código 2.1: Ejecutando genkernel (con parámetros)

# genkernel --splash --no-install --no-clean --menuconfig all

La línea descrita arriba provoca que genkernel construya un núcleo con la pantalla de presentación de arranque activada (--splash) el cual tendrá que ser instalado manualmente (--no-install). Mientras se esté preparando el árbol de fuentes del núcleo, genkernel se abstendrá de borrar cualquiera de los archivos objeto preexistentes en el árbol de las fuentes (--no-clean). Se desplegará al usuario una herramienta de configuración basada en menús para seleccionar qué módulos se construirán en el sistema (--menuconfig).

Existen otros parámetros que alteran el resultado de genkernel. Por ejemplo, reemplazar --no install con el parámetro --install permite a genkernel instalar automáticamente el nuevo núcleo en el directorio /boot. Al usar el parámetro --mountboot permite que genkernel monte su partición /boot automáticamente si es necesario.

Recuerde, genkernel está diseñado para que la compilación del núcleo sea fácil y sin mayores inconvenientes. Por esta razón, genkernel ofrece diversos parámetros para facilitar el esfuerzo que involucra la compilación del núcleo. Por ejemplo, hay algunos parámetros que ayudan con la configuración del núcleo, mientras que hay otros que afectan la compilación actual. Algunos por su parte incluso pueden servir de ayuda en la depuración del proceso de compilación. Aquellos que estén interesados en optimizaciones adicionales tengan en cuenta que existen parámetros que afectan el ensamblado del núcleo, el empaquetamiento e incluso la inicialización del núcleo.

El resto de este capítulo examina la funcionalidad de varios parámetros y las acciones disponibles de genkernel. Algunos de los parámetros tienen variantes que llevan a cabo la operación contraria. Dichas variantes tienen antepuesto el prefijo no- y sus efectos se encierran dentro de paréntesis cuadrados, [].

Parámetros de Configuración

Los parámetros de configuración listados abajo le ayudan a decidir qué características deberían estar activadas o no en el núcleo previo a su compilación. Incluso puede elegir si el archivo de configuración creado en el proceso debería ser o no guardado. Los siguientes son los parámetros principales de configuración:

Parámetros de Compilación

Los siguientes parámetros normalmente hacen efecto durante la compilación actual:

Parámetros del Compilador

Genkernel soporta los siguientes parámetros que pueden ser pasados a aplicaciones relevantes mientras está siendo ensamblado el núcleo. Dichos parámetros hacen efecto sobre el compilador usado para el proceso de compilación del núcleo aunque a un nivel mucho más bajo.

Parámetros de Depuración

El uso de parámetros de depuración durante el proceso de compilación del núcleo controla la cantidad de información que se reporta, así como la presentación de dicha información.

Parámetros de Inicialización

Los parámetros indicados aquí son usados para crear ciertos efectos durante el inicio del sistema. Algunos de estos parámetros son meramente para efectos de estética mientras que otros pueden ser esenciales para la activación de algunas características en el sistema.

Parámetros misceláneos

Genkernel también soporta una serie de otros parámetros que no pueden clasificarse en las categorías descritas anteriormente:

Acciones posibles

Una acción le dice a genkernel qué construir. Actualmente, se reconocen las siguientes acciones:

La última acción, all, es la que se recomienda para la mayoría de los usuarios pues construye las etapas requeridas para tener un núcleo funcional. Recuerde, una acción simplemente le dice a genkernel qué construir y no qué instalar.

Configuración del Gestor de Arranque

Para configurar genkernel de modo que funcione con su gestor de arranque, se deberían hacer tres o cuatros cambios al archivo de configuración del gestor:

  1. Añada los parámetros del núcleo root=/dev/ram0 e init=/linuxrc para pasarles a la imagen del kernel.
  2. Añada por ejemplo real_root=/dev/hda3, a los parámetros de núcleo que pasamos a la imagen en caso que /dev/hda3 sea su partición de raíz.
  3. Si está utilizando la pantalla de presentación de arranque (splash), añada un parámetro correcto para el modo de pantalla, por ejemplo vga=0x317, así como splash=verbose o splash=silent según el nivel de detalle que desee.
  4. Añada initrd a la configuración de su gestor de arranque; véase El Manual de Gentoo para aprender como hacerlo con el tipo de gestor de arranque que posee.

3.  Opciones de configuración

Editando /etc/genkernel.conf

Pasar parámetros a genkernel desde la línea de comandos puede ser engorroso, especialmente si tiene cerca de una docena de parámetros:

Listado de Código 3.1: Ejecutando genkernel (sobrecargado con parámetros)

# genkernel --debuglevel=5 --no-color --no-mrproper --clean --splash \
--kerneldir=/ruta/alternativa/a/las/fuentes/del/núcleo --install --menuconfig \
--kernel-config=/ruta/al/archivo/de/configuración --save-config --mountboot all

Afortunadamente existe un archivo de configuración donde se puede ajustar (o cambiar) la mayoría de las opciones básicas en la medida que sea necesario. Lo que sigue a continuación es un resumen de las opciones más relevantes:

Al elegir las opciones apropiadas en /etc/genkernel.conf, puede reducir hasta la mitad del número de parámetros pasados a genkernel en la línea de comandos.

Listado de Código 3.2: Ejecutando genkernel (con parámetros) luego de usar genkernel.conf

# genkernel --splash --kerneldir=/ruta/alternativa/a/las/fuentes/del/núcleo \
--kernel-config=/ruta/al/archivo/de/configuración --install all

Los resultados obtenidos por ambos métodos son idénticos pero el último tiene la mayor parte de las opciones almacenadas en un guión que puede ser modificado después.

4.  Arranque por Red con genkernel

Arranque por Red a partir de un CD de Instalación

El utilitario genkernel puede construir el núcleo y las imagenes initrd que dan soporte para arranque por red, o netbooting. Con suerte, debería ser capaz de hacer netboot en cualquier computador reciente en el ambiente ofrecido por el CD de Instalación.

La magia está en el guión linuxrc de genkernel: este intentará realizar un netmount (montaje vía red) del CD de Instalación usando NFS. A partir de allí los guiones de inicio del CD de Instalación pueden tomar el control como si el CD estuviera presente de forma local.

Construyendo el Núcleo y las Imagenes Initrd con Soporte para Arranque por Red

Para activar el soporte de arranque por red incluya las siguientes opciones mientras configura el núcleo:

Aviso: El soporte para arranque por red con genkernel es experimental y puede presentar bugs.

Primero, la imagen del núcleo debe incluir los drivers para sus tarjetas de interfaz de red (NIC). Normalmente, los drivers para tales dispositivos serán compilados como módulos. Sin embargo, es esencial (para el arranque por red) tener dichos drivers compilados directamente en la imagen del núcleo y no como módulos.

Listado de Código 4.1: Configurando un núcleo de la serie 2.6.x para dar soporte al driver de las tarjetas de red

Device Drivers --->
   Networking Support --->
      Ethernet (10 or 100Mbit)  --->
         [*] Ethernet (10 or 100Mbit)
         <*>   El driver para su tarjeta de red
(Asegúrese de seleccionar <*> y no <M>)

Segundo, sugerimos que active las opciones: IP: kernel level autoconfiguration y IP: DHCP support. Esto evita una capa innecesaria de complejidad ya que la dirección IP y la ruta NFS al CD de instalación pueden ser configuradas en un servidor DHCP. Por supuesto, esto significa que la línea de comandos del núcleo permanecerá constante para todas las máquinas — lo que es muy importante para realizar etherbooting (arranque vía ethernet).

Listado de Código 4.2: Configurando un núcleo de la serie 2.6.x para dar soporte a DHCP

Device Drivers --->
   Networking Support --->
      Networking options
         [*] TCP/IP networking--->
         [*]   IP: kernel level autoconfiguration
         [*]     IP: DHCP support
(Estas opciones le dicen al núcleo que envíe una petición DHCP al iniciar
el arranque)

Adicionalmente, debería activar SquashFS ya que la mayoría de los CD de Instalación modernos de Gentoo lo requieren. El soporte para SquashFS no se incluye en el árbol genérico de fuentes del núcleo. Para activar SquashFS, debe conseguir y aplicar los parches necesarios para las fuentes genéricas del núcleo o instalar gentoo-sources.

Listado de Código 4.3: Configurando el núcleo para dar soporte a SquashFS

File systems--->
   Miscellaneous filesystems --->
      [*] SquashFS 2.X - Squashed file system support

Una vez completado el proceso de compilación, cree un tarball (tar.gz) que contenga los módulos del núcleo. Este paso es solamente necesario si su versión del núcleo no concuerda con la versión de la imagen del núcleo del CD de Instalación.

Listado de Código 4.4: Creando un tarball comprimido que contenga los módulos del núcleo

(Crea un tar.gz que contiene todos los módulos)
# cd /
#  tar -cf /tmp/modules-X.Y.Z.tar.gz /lib/modules/X.Y.Z/

Dependiendo de su mecanismo de arranque por red necesitará hacer alguno de los siguientes pasos:

Listado de Código 4.5: Creando una imagen de arranque

(Crea una imagen de etherboot)
# emerge mknbi
# cd /boot
# mkelf-linux -params="root=/dev/ram0 init=/linuxrc ip=dhcp" núcleo... initrd... > etherboot.img

(Crea una imagen OpenBoot / SPARC64 TFTP)
# emerge sparc-utils
# cd /boot
# elftoaout kernel... -o kernel.aout
# piggyback64 kernel.aout System.map-... initrd-...
# mv kernel.aout openboot.img (Esta en la imagen de arranque)

(PXE no necesita de más pasos, el núcleo e initrd pueden ser usados tal cual)

Finalmente, copie este núcleo a su servidor TFTP. Los detalles dependen de la arquitectura y están más allá del alcance de esta guía. Por favor, consulte la documentación de su plataforma.

Configuración de NFS

Para configurar un recurso compartido de NFS que contenga el CD de Instalación, use el dispositivo loop para montar la imagen ISO y luego copie los contenidos del CD en el recurso NFS. Como característica extra, los guiones initrd de genkernel extraerán todos los archivos tar.gz ubicados en el directorio /nfs/livecd/add/. Todo lo que debe hacer aquí es copiar el archivo modules-X.Y.Z.tar.gz al directorio /nfs/livecd/add/.

Listado de Código 4.6: Preparando el recurso compartido NFS

(Esto asume que /nfs/livecd es un recurso NFS compartido)
# mount /tmp/gentoo-livecd.iso /mnt/cdrom -o loop
# cp -p /mnt/cdrom /nfs/livecd
# umount /mnt/cdrom

(Copie modules.tar.gz en /add)
# mkdir /nfs/livecd/add
# cp /tmp/modules-X.Y.Z.tar.gz /nfs/livecd/add

Configuración de DHCP

Las imagenes del arranque por red (netboot) le pedirán a su servidor DHCP una IP así como el parámetro de la ruta raíz. Ambos pueden ser especificados por máquina usando un dirección MAC para identificarlas:

Listado de Código 4.7: Configuración de ejemplo de cliente en 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";
}
# Aquí, 192.168.1.2 el servidor NFS
# Mientras que 192.168.1.10 será la dirección IP de la máquina que arrancará por red
...

Instrucciones de Arranque por Red

El arranque por red es nuevamente muy dependiente de la plataforma. La parte importante es especificar los parámetros ip=dhcp y init=/linuxrc en la línea de comandos del núcleo pues esto activará la interfaz de red y le dirá a los guiones initrd que monten el CD de Instalación vía NFS. Aquí le mostramos algunos consejos dependientes de la plataforma:

Listado de Código 4.8: Instrucciones de Arranque por Red

# Etherboot - Inserte el disco de etherboot en la disquetera y reinicie
# La línea de comandos del núcleo fue especificada cuando se construyó la imagen

# Sparc64 - Presione Stop-A en el intérprete de arranque
ok boot net ip=dhcp init=/linuxrc

# PXE - Configure pxelinux (parte de syslinux),
luego cree un archivo pxelinux.cfg/default similar a:

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

5.  Conclusión

¿Automatizar o no automatizar?

El propósito de genkernel es otorgar un alternativa (más fácil) a la clásica y forma efectiva de compilar el núcleo. Como siempre, es libre de decidir si quiere o no automatizar el proceso de compilación del núcleo.