construcción y compilación manual del kernel en Gentoo (make menuconfig)

larry-cave-cow-1280x1024La compilación manual es la recomendada en Gentoo, tanto por su versatilidad como por su sorprendente simplicidad, sí, has leído bien, simplicidad. Que todo es difícil en Gentoo es un falso mito. Gentoo no es difícil, sino complejo, pero esa complejidad tan sólo es pureza y riqueza de posibilidades, no dificultad.

Vamos allá:

descargamos un paquete de fuentes de kernel, podemos usar alguno de los que están en Portage o cualquier otro. Hay que tener en cuenta que conviene usar fuentes que incluyan los parches para Gentoo. Como ejemplo podemos buscar kernels en Portage así:

emerge -s sources

lo que encontrará fuentes del núcleo linux; en este ejemplo vamos a instalar las fuentes oficiales de Gentoo:

sys-kernel/gentoo-sources

las emergemos de Portage:

sudo emerge -a gentoo-sources

Hay que tener en cuenta que por defecto si emergemos “gentoo-sources” Portage descargará la última versión del kernel que haya. Si queremos instalar un kernel determinado más antiguo de los que hay aquí /usr/portage/sys-kernel/gentoo-sources tenemos que emergerlo llamándolo específicamente a él anteponiendo un signo igual (=), así:

sudo emerge -a =sys-kernel/gentoo-sources-3.14.39

de esta manera emergemos específicamente la versión 39 del kernel 3.14 (LTS).

Portage no instala el nuevo kernel, sino que se limita a crear su directorio de fuentes en:

/usr/src/linux-3.16.5-gentoo/

podemos comprobar que están ahí.

Lo primero es hacer que el enlace simbólico /usr/src/linux apunte a las nuevas fuentes, esto es necesario pues como luego usaremos el comando genkernel para instalar el “initramfs” se necesita que apunte a las fuentes correctas.

eselect kernel list

sudo eselect kernel set 1 (o el número que sea)

entramos en el directorio de la fuentes, en nuestro caso:

/usr/src/linux-3.16.5-gentoo/

abrimos una terminal y nos hacemos root

su

make menuconfig

ahora se nos muestra el menú para determinar las opciones que queremos que compile nuestro kernel, las opciones que trae por defecto suelen funcionar, pero como es lógico conviene comprobar que compile el kernel para nuestra tarjeta de red ethernet, para la tarjeta wifi, para la tarjeta gráfica y para la tarjeta de sonido y ALSA.

Podemos encontrar información sobre nuestros dispositivos de hardware con:

sudo lspci -k (encontraremos nuestros dispositivos de red, Ethernet y Wireless)

sudo lspci | grep -i audio (nuestra tarjeta de sonido)

sudo lspci | grep -i VGA (la tarjeta gráfica)

las opciones principales están en “Device Drivers”, podemos seleccionarlas con “Y” (se marca con un asterisco) lo cual supone que se compilará dentro del kernel, o si la seleccionamos con “M” (se marca con una letra M) se instalará como módulo. Sobre la famosa cuestión de si es mejor instalar los controladores dentro del kernel o como módulos hay mucha polémica. Cada opción tiene sus ventajas. Yo suelo integrar dentro del núcleo los principales, tarjeta gráfica, tarjeta ethernet, tarjeta wifi y sonido. Eso no hace mucho más grande el kernel y, así evito problemas de que sean cargados o no al inicio, evitando que tengan que ser reconocidos por udev, etc.  Pero en esto, para gustos hay colores.

**********************************************

MAKE MENUCONFIG

Tarjeta Ethernet:

> Device Drivers > Network device support > Ethernet driver support >

Tarjeta Wifi:

> Device Drivers > Network device support > Wireless LAN >

Tarjeta Gráfica:

> Device Drivers > Graphics support >

Tarjeta de Sonido:

> Device Drivers > Sound card support > Advanced Linux Sound Architecture>

Web-Cam:

> Device Drivers —>
<M> Multimedia support —>
[*] Cameras/video grabbers support
[*] Media USB Adapters —>
<M> USB Video Class (UVC)
[*] UVC input events device support (NEW)

Pantalla Táctil (touchscreen):

> Device Drivers > HID support > Special HID drivers —>
<*> HID Multitouch panels

**********************************************
Nótese que en el menuconfig se accede a los distintos apartados selecionándolo y haciendo enter, y se retrocede un paso con cada “exit”. Al hacer “exit” desde la página principal se sale de menuconfig. Ya hemos dicho que para entrar sólo hace falta “make menuconfig” en la carpeta de las fuentes del kernel.
Una vez que hemos seleccionado nuestras opciones se guardan (Save) en el archivo .config ese archivo será el que compile después el comando “make”. Yo personalmente suelo guardar primero una copia con otro nombre, por ejemplo .config-01 para tener un control de las versiones compiladas, y después lo vuelvo a guardar como .config, pues ese será el que siempre se compile, y así no sobreescribo las configuraciones previas si hago sucesivas compilaciones.

Salimos de menuconfig con “exit” (hacemos exit las veces necesarias).

Volvemos a estar en la terminal y ya sólo nos resta empezar la compilación propiamente dicha, con el comando estándar “make”:

make

ahora toca esperar, pues dependiendo del microprocesador, así como de la cantidad de opciones a compilar, puede tardar entre unos 20-30 minutos en ordenadores modernos y más de una hora en equipos antiguos.

Nos tomamos un café.

compilando

cafeCuando termine de compilar hacemos:

make modules_install

para instalar los controladores que hemos activado como módulos, que se copiarán en el directorio /lib/modules

después:

make install

lo cual instalará el nuevo kernel en /boot/

Instalamos genkernel si no está instalado:

sudo emerge -a genkernel

y luego instalamos en /boot/ el “initramfs” mediante genkernel.

genkernel --install initramfs

Ya está, sólo nos queda actualizar GRUB2 para poder arrancar con el nuevo kernel:

grub-mkconfig -o /boot/grub/grub.cfg

exit

reboot

Al arrancar el equipo elegimos en el menú de GRUB el nuevo kernel y lo probamos.
Si todo va bien, ya tenemos nuestro nuevo kernel personalizado y compilado por nosotros, si alguna cosa no funciona, puede que no hayamos compilado sus drivers en el kernel, por lo que habría que activarlos en nuestro archivo .config (make menuconfig) y recompilar.

Depurar, compilar y recompilar en Gentoo, constituye unos de sus placeres viciosos y gozosos.

menuconfig

Anuncios

19 comentarios en “construcción y compilación manual del kernel en Gentoo (make menuconfig)”

  1. Saludos…! Que tal…!
    Amigo, está muy bueno el tutorial…
    Me pregunto… ¿Cómo instalar GNOME o KDE…?
    Escritorio MATE… Y si es posible instalarlos juntos…
    He investigado acerca de GNOME, y lo que he encontrado es que demora demasiado para la compilación (hasta 2 días, pero no me consta)…
    Sé que en la Wiki hay info… Pero es demasiado explícita como para ir al grano de una vez por todas…
    Tengo un procesador i3… 2 Núcleos => con 4 hilos…
    No sé si eso es de ayuda… Necesito saber más acerca de Gentoo con respecto a la instalación de algún escritorio y de aplicaciones GTK+ y Qt…
    Me gustaría tener KDE, GNOME y MATE… Todo esto lo hago, porque quiero remplazar mi Fedora por un Gentoo estable…
    Gracias…!

  2. En lugar de menuconfig yo suelo utilizar nconfig (me resulta mas cómodo que el primero ya que este permite manejar las distintas opciones a través de las teclas de función).

  3. Muchas gracias por la informacion, me gustaria saber si hay algun manual o tutorial o enlace donde se explique que es cada una de las opciones que tienen los apartados del kernel, algunos los entiendo y otros no, por eso mi interes de aprenderlo. Saludos.

    1. pues acabo de hacer una búsqueda en San Google y no he encontrado nada. Pero mi experiencia es que es menos complicado de lo que parece. Se trata de saber tu tarjeta wifi, y gráfica y no suele haber problema. Y en caso de duda en los foros de Gentoo te echarán una mano.
      Un saludo.

      1. Gracias Essaú, tambien no he encontrado nada en San Google, queria estudiarlo para sacar lo que mas pueda y que no este necesitando. Nose si por este afan de optimizar se note.

        Saludos.

  4. Hola Essaú, he seguido la guia que nos muestras pero me encuentro con el problema cuando hago el boot: Could not find root block device in . (UUID=)
    He buscado en los foros y por google pero no he encontrado solucion a este problema. Si sabes de algo me avisas.

    Saludos.

    1. hola Norberto,
      imposible, como comprenderás, saber a distancia qué ha salido mal. Si fuese una nueva instalación yo me haría chroot de nuevo y vería qué hay en el directorio boot, si el kernel está, e investigaría grub, pues suena a un problema de grub…
      pero….
      imposible de saber…
      un saludo.

  5. Essaú, mil disculpas, pero no puede borrar mi comentario anterior, el problema lo he solucionado como bien decian en forums.gentoo.org, y en mi caso fue con un seteo o deseteo del apartado Serial ATA en el kernel.

    Saludos.

    1. perfecto Norberto,
      me alegro de que dieses con la solución. No es necesario borrar el comentario anterior, pues alguien puede pasar por lo mismo y serle de utilidad.
      La configuración por defecto de los kernels Gentoo suele arrancar CASI siempre, pero veo que en tu caso tuviste que hacer un cambio en la configuración ATA.
      Un saludo.

  6. Essaú, vaya a saber, estuve tocando el kernel y quizas haya desactivado esa opcion, esto es casi seguro lo que paso.

    Si me permites te hare una sugerencia para esta entrada que bien explicada esta la construccion y compilacion “manual” del kernel, sin embargo veo que estas usando genkernel para construir el initframs, genkernel es propio de Gentoo, porque no le hechas un vistazo a “dracut” para crear initframs en vez del script que trae Gentoo?

    Saludos.

    1. hola,
      pues nunca he usado Dracut, la verdad es que yo no suelo instalar ‘initrams” pues no lo necesito. Veo que en Portage por defecto está enmascarado:

      sys-kernel/dracut [ Masked ]
      Latest version available: 043-r2
      Latest version installed: [ Not Installed ]
      Size of files: 267 KiB
      Homepage: https://dracut.wiki.kernel.org
      Description: Generic initramfs generation tool
      License: GPL-2

      supongo que para que por defecto se use el Genkernel propio de Gentoo.
      A ver si la próxima vez que instale un kernel, me animo y le echo un vistazo a Dracut.
      Un saludo.

  7. Hola:
    Dos preguntas por curiosidad:
    1º- ¿Qué es initrams para qué sirve y porqué no lo necesitas?
    2º- ¿Se nota diferencia en cuanto al arranque, uso de RAM o rapidez del sistema por estar compilado el kernel frente a los kernels de las distros binarias ya empaquetados para que funcione casi todo? Por ejemplo funtoo ofrece un debian -sources ya precompilado en el stage 3.
    Saludos.

    1. Hola,
      1. https://wiki.gentoo.org/wiki/Initramfs/Guide/es
      2. en un sistema de sobremesa de usuario no se nota gran cosa, y menos hoy en día con los potentes microprocesadores. Otro asunto es la capacidad de Gentoo para compilar un kernel perfecto ajustado a un frigorífico del Internet de la cosas o una supercomputadora. Ay sí. A mí me gusta Gentoo por su filosofía y arquitectura, en cuanto a su rendimiento, si sólo fuese por eso prefiero Arch, muy parecido y sin tener que compilar.
      Un saludo.

  8. Hola:
    Si yo también creo que gentoo está pensada para superordenadores o para ajustarse a arquitecturas que nos son el ordenador de casa y hacer que funcionen, ninguna otra distribución puede ajustarse tanto para estos fines, en cambio archlinux sería para el ordenador de casa, debian por ejemplo sería para servidores y también para el ordenador de casa o del trabajo en el que se busque la máxima estabilidad.
    Desde luego emerge es admirable que sea capaz de bajar el código fuente y compilarlo con tantas variables diferentes.
    Saludos.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s