8.5. Compilación e instalación de un kernel personalizado

En primer lugar, hagamos un breve recorrido por el directorio donde se lleva a cabo la compilación del kernel. Todos los directorios mencionados hacen referencia al directorio principal, que es /usr/src/sys, al que también podemos acceder desde /sys. Existen gran cantidad de subdirectorios que representan diferentes partes del kernel, pero el más importante para lo que deseamos hacer son arch y /conf, que es donde se llevara a cabo la edición del fichero de configuración y la compilación propiamente dicha del mismo, el punto de partida para la personalización del kernel. El directorio arch representa la arquitectura del sistema, por lo que puede ser i386, alpha, amd64, ia64, powerpc, sparc64 o pc98 (una arquitectura alternativa, similar a PC y muy popular en Japón). Todo lo que existe dentro de un directorio de una arquitectura en particular, es específico para dicha arquitectura; el resto del código es común para todas las plataformas en las que FreeBSD puede funcionar. Observe la organización lógica de la estructura de los directorios, con cada dispositivo utilizable en el sistema, sistema de ficheros y opciones, cada cosa en su propio subdirectorio.

A lo largo de este capítulo asumiremos que está utilizando la arquitectura i386, puesto que sobre ella son los ejemplos que vamos a ir exponiendo. Si no es este su caso debe hacer los cambios adecuados a su arquitectura de hardware en las rutas que vayamos utilizando.

Nota: Si no existe el directorio /usr/src/sys en su sistema quiere decir que no están instaladas las fuentes del kernel. La forma más sencilla de tenerlas es mediante /stand/sysinstall. Como usuario root seleccione Configure, luego Distributions, después src y finalmente sys. Si no le gusta mucho sysinstall y tiene acceso a un CDROM “oficial” de FreeBSD puede instalar las fuentes por medio de la siguiente línea de órdenes:

# mount /cdrom
# mkdir -p /usr/src/sys
# ln -s /usr/src/sys /sys
# cat /cdrom/sys/ssys.[a-d]* | tar -xzvf

Ahora vaya al al directorio arch/conf y copie el fichero de configuración GENERIC con el nombre que desee. Por ejemplo:

# cd /usr/src/sys/i386/conf
# cp GENERIC MIKERNEL

Por tradición el nombre se escribe con mayúsuculas y si tiene varias maquinas FreeBSD, con diferente hardware es recomendable darle a cada kernel el mismo nombre que la máquina en la que va a ejecutarse. En este ejemplo usaremos el nombre de MIKERNEL .

Sugerencia: Guardar su fichero de configuración directamente bajo el directorio /usr/src, puede que no sea una idea muy astuta. Si empieza a tener problemas puede ser muy tentador borrar /usr/src y comenzar desde cero. Cinco segundos después de haber hecho esto se dará cuenta de que ha eliminado el fichero de configuración de su kernel, en el que quizás llevaba horas trabajando.

Le proponemos una alternativa: guardar su fichero de configuración cualquier otro sitio y crear un enlace simbólico al fichero que hay en el directorio i386.

Por ejemplo:

# cd /usr/src/sys/i386/conf
# mkdir /root/kernels
# cp GENERIC /root/kernels/MIKERNEL   
# ln -s /root/kernels/MIKERNEL

Ahora edite el fichero de configuración MIKERNEL con su editor de textos favorito. Si se trata de una instalación reciente probablemente el único editor disponible sea vi, del cual es complicado explicar su uso detallado en este documento, pero existen bastantes libros que detallan su uso; puede ver algunos en la bibliografía. FreeBSD dispone de un editor de uso muy sencillo, llamado ee; si es usted principiante le será de mucha ayuda. Cambie los comentarios al principio del fichero con algo que refleje los cambios realizados o al menos para diferenciarlo del fichero GENERIC.

Si ha compilado un kernel en SunOS™ o algún otro sistema operativo BSD seguramente la mayor parte de fichero le será muy familiar. Si viene usted de otros sistemas operativos como DOS, el fichero GENERIC puede parecerle intimidante, así que siga las instrucciones descritas en El Fichero de Configuración detenidamente y con sumo cuidado.

Nota: Asegúrese siempre de verificar el fichero /usr/src/UPDATING antes de realizar cualquier actualización del sistema si ha sincronizado sus fuentes para disponer de la última versión de los mismos. En el fichero /usr/src/UPDATING está toda la información importante sobre las actualizaciones. Al distribuirse con FreeBSD dicha información deberá estar más actualizada que la que hay en este mismo texto.

Ahora es momento de llevar a cabo la compilación del código fuente del kernel.

Compilación del kernel

  1. Vaya al directorio /usr/src:

    # cd /usr/src
    
  2. Compile el kernel:

    # make buildkernel KERNCONF=MIKERNEL
    
  3. Instale el nuevo kernel:

    # make installkernel KERNCONF=MIKERNEL
    

Nota: Es imprescindible que disponga del código fuente completo de FreeBSD para poder compilar el kernel.

Sugerencia: Por omisión, si compila un kernel personalizado todos los módulos del kernel serán recompilados también. Si quiere que la actualización de su kernel sea mucho más rápida o compilar solamente ciertos módulos personalizados, edite kernel modules will be rebuilt as well. /etc/make.conf antes de compilar el kernel:

MODULES_OVERRIDE = linux acpi sound/sound sound/driver/ds1 ntfs

Esta variable crea una lista de módulos listos para ser compilados, sin tocar los demás.

WITHOUT_MODULES = linux acpi sound/sound sound/driver/ds1 ntfs

Esta variable crea una lista de módulos que serán excluidos del proceso de compilación. Hay otras variables que pueden resultarle útiles durante este proceso; consulte la página de manual de make.conf(5).

El nuevo kernel se copiará al directorio raíz como /kernel y el kernel viejo tendrá el nombre de /kernel.old. Ahora reinicie su sistema para poder probar su nuevo kernel. En caso de que se presente algun problema hay algunos consejos para la resolución de problemas al final de este capítulo. Asegúrese de leer la sección que explica cómo recuperar el sistema en caso de que su kernel no quiera arrancar.

Nota: Ciertos ficheros relacionados con el proceso de arranque, como loader(8)y su configuración, se guardan en /boot. Los módulos personalizados o de terceros se suelen guardar en /boot/kernel, aunque debe tener presente que es muy importante que los módulos y el kernel estén sincronizados. Si intenta usar módulos con un kernel para el que no están destinados puede haber errores o incluso producirse intesatabilidades.

Puede descargar éste y muchos otros documentos desde ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/.

Si tiene dudas sobre FreeBSD consulte la documentación antes de escribir a la lista <questions@FreeBSD.org>.
Envíe sus preguntas sobre la documentación a <doc@FreeBSD.org>.