Gentoo-sources: Cómo armar tu kernel sin morir en el intento

Bueno, este es uno más de esos puntos que no puedo pasar por alto antes de comenzar la guía de instalación de Gentoo :) sé que ya muchos estarán esperando con ansias este post, y perdón por hacerlos esperar, pero también considero que no explicar esto atenta contra mi status de usuario Gentoo :P Sin más que mencionar, comencemos.

¿Qué es el kernel?

El kernel es propiamente la parte Linux de toda distribución, es el programa que nos permite comunicar cada pieza de hardware de nuestro equipo con los programas que corremos en él. Su creador, Linus Torvalds, decidió liberarlo bajo la licencia GPL y gracias a él, y al proyecto GNU, podemos disfrutar hoy en día de tantas distribuciones y variedades para elegir. Está escrito en C en su mayoría, con un poco de Assembly por aquí y por allá, y hoy por hoy es el proyecto más grande de software libre, con miles de desarrolladores trabajando en él, tanto por hobby como profesionalmente, y mantiene una línea constante de crecimiento acelerado desde hace ya varios años. Aquí les dejo la página oficial del kernel para que puedan dar un vistazo en profundidad.

¿Cómo se encuentra en Gentoo?

Bueno, como es de esperarse en Gentoo, existen muchas opciones de kernel, les dejo aquí una pequeña lista para que vean mejor a lo que me refiero:

  • gentoo-sources: Kernel 4.12 con parches especiales para Gentoo Linux.
  • git-sources: Kernel directamente descargado desde el repositorio Git de Linus.
  • vanilla-sources: Kernel completo sin ningún tipo de parche.
  • xbox-sources: Kernel completo para Xbox Linux.
  • zen-sources: El kernel vivo de Zen

Para una lista completa les dejo el link del wiki donde pueden encontrar todos los kernel que mantiene Gentoo en sus repositorios.(todo lo que termina con -sources)

Tengo el código, ¿ahora qué?

Bueno, a diferencia de todos los demás paquetes de Linux, el kernel NO se actualiza, se instala. Esto nos permite tener múltiples kernel en nuestro sistema al mismo tiempo, claro que siempre se podrá correr solamente uno a la vez. Para poder compilarlo es necesario usar las herramientas que ya hemos discutido en un post anterior. Pero como en Gentoo la comunidad hace el 80% de tu trabajo, vamos a hacer la forma más sencilla ;)

genkernel-next:

Permítanme presentarles una herramienta que es simplemente estupenda :) se llama genkernel-next, la pueden encontrar en los repositorios de Gentoo.

Diseño propio. Christopher Díaz Riveros

La lista de opciones es aún más grande, pero aquí se pueden ver algunas de mis opciones favoritas. Uno de los pasos más importantes al momento de instalar Gentoo es la configuración de tu kernel, esto te permitirá sacar el máximo potencial a tu computadora y al mismo tiempo evitar todo aquel peso extra que tienen muchos kernel pre-compilados.

CLI y GUI:

Como es de esperarse, la configuración del kernel también tiene varias formas de realizarse :) elecciones por todos lados, simplemente impresionante. Aquí les dejo algunas de las fotos de cómo se ven las opciones:

genkernel –xconfig all

Diseño propio. Christopher Díaz Riveros

genkernel –qconfig all

Diseño propio. Christopher Díaz Riveros

genkernel –nconfig all

Diseño propio. Christopher Díaz Riveros

genkernel –menuconfig all (mi favorito)

Diseño propio. Christopher Díaz Riveros

Estupendo, pero ¿cómo encuentro las cosas?

Una sabia pregunta que todos seguro se están haciendo ahora mismo. Si no deseas tener que buscar línea por línea, recuerda que “/” y “?” son tus amigos en esta misión. Pero como es mejor ver que leer, les muestro a lo que me refiero con esto.

Supongamos que necesitamos revisar nuestro procesador, el kernel soporta tanto intel como amd, y el nuestro es intel. Si presionames / (slash), nos llevará al siguiente menú:

Diseño propio. Christopher Díaz Riveros

Genial, ahora veamos la magia en acción :)

Diseño propio. Christopher Díaz Riveros

¡Estupendo! Ahora tenemos una lista desplegable con toda la información que podemos necesitar, el nombre técnico del módulo, la ruta, el tipo de valor, etc. Y ahora la pregunta… ¿cómo llego a la ubicación? ¡También muy sencillo! si nos fijamos en la parte izquierda, tenemos números dentro de paréntesis. Presiona uno de ellos y verás la magia ocurrir nuevamente.

Diseño propio. Christopher Díaz Riveros

¡Tan rápido como esto! Ya estamos en la ubicación que necesitamos. Pero… espera, yo te dije que es tu amigo, ¿lo recuerdas? Pues veamos qué sucede si apretamos ? justo ahora.

Diseño propio. Christopher Díaz Riveros

Una pequeña descripción del módulo, sus opciones y dependencias :) todo al alcance de tu mano. Una vez terminada tu búsqueda, puedes dar a exit. Podrás notar que la barra superior ha retrocedido a la línea Search (intel), si vuelves a dar exit, te regresará al menú principal donde podrás comenzar una nueva búsqueda.

¿Qué mover y qué no?

En este punto ya debes sentirte totalmente poderoso, porque has conseguido algo que pocos humanos hacen en su vida, compilar un kernel. ¡Felicitaciones! Pero ahora surge la pregunta… ¿qué debo modificar? Eso mi amigo, es algo que solo tú puedes descubrir, pero por supuesto que yo te puedo dar un par de recomendaciones que a mí me ayudan mucho:

El default funciona

Como en todo programa, Linux está configurado para funcionar con las configuraciones por defecto. Esto te garantiza que incluso si no deseas configurar nada, al momento de compilar vas a tener un kernel funcional.

Si no lo conoces, no lo muevas

Esto es algo que tal vez los más aventureros pasarán por alto. Es genial poder navegar de manera rápida por las opciones, pero si te interesa conocer realmente cómo piensa tu máquina, una lectura de cada opción es una forma estupenda de hacerte a la idea. Siempre recordando lo que cambias y buscando o comparando con un navegador es bastante recomendable también.

El mayor peso está en los drivers

Muchos drivers vienen cargados por defecto, esto hace al kernel pesado. Por ejemplo, solo para tarjetas de red, existen como 10 drivers oficiales en el kernel, y muchas distribuciones compilan los 10, o más, pero en realidad tu en tu computadora solo usarás uno (ojo que para wifi hay otra sección aparte). Si deseas disminuir el peso de tu kernel de forma considerable, tu primer opción está ahí. Para esto, tus mejores amigos serán lspci, lsusb, Google. Con esto podrás tener una idea bastante clara de lo que tiene tu sistema y solo dejar los drivers necesarios para hacerlo funcionar. Por ejemplo les dejo mi output de lspci:

Diseño propio. Christopher Díaz Riveros

Con esto puedo tener bastante claro información crítica, como mi controlador de red, el de wifi, mi disco duro SATA, y muchas cosas más que me ayudan a disminuir el peso de mi kernel.

Revisa bien que estés compilando lo que es necesario con *

Gracias nuevamente a nuestro compañero njord, un punto importante que olvidé mencionar por la emoción :)

Además hay que mencionar que hay características del kernel que conviene incluir dentro del mismo(*), y otras manejarlas como módulos (M). Recuerdo mi primer kernel compilado, queriendo dejar como módulo el soporte para reiserfs de mi root, cuándo en la vida iba a funcionar?!?! xD…

Ciertamente, si tu kernel necesita de algo para funcionar, no puede ser un módulo. Por defecto, los módulos cargan después de que el kernel ha hecho todo el proceso de inicio. Si tu kernel necesita algo para iniciar, mejor que esté compilado dentro <Y> en lugar de como módulo <M>… Lo que nos lleva al primer punto otra vez “?”  es nuestro amigo ;)

En resumen:

Bueno, ahora que se han sumergido un poco en el mundo del kernel, creo que ya he cumplido con otro hito necesario para poder generar una guía de instalación de Gentoo de ~20 pasos :) pero si encuentro algo más por ahí, intentaré explicar antes que solo dejar suelto en el aire.

Saludos,

Published by

ChrisADR

I'm a young developer who loves open source and free software technologies, I'm the founder of CodeLabora, an open source community which aims to help young developers from Latin America to get involved with open source and free software projects and communities around the world. I like to learn and my favorite subjects are security and Linux. I've recently finished an internship as security analyst and contribute to the security project from my Linux community, Gentoo Linux, as Gentoo Linux Security Advise (GLSA) Coordinator