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

12
2275

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 😛 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 y les dejo otros de mis posts por si se los pierden:

Gentoo Linux: La historia de un viaje

Gentoo: ¿Por qué opté por compilar mis propios programas?

Gentoo: El corazón de la bestia

 

12 COMENTARIOS

  1. Muy buen post, como siempre.

    Y aquí va mi grano de arena: Para que nuestro kernel funcione correctamente hemos de adecuarlo a nuestro hardware, por lo que debemos conocerlo sumamente bien. Con este propósito hemos de ver a ‘lspci’ y ‘lsusb’ como principales fuentes de información. Y si necesitamos algo mas específico, les dejo esta página, que me ha sacado de apuros en más de una ocasión https://kmuto.jp/debian/hcl/

    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…

    Saludos!

    • Exacto njord, por ello este post no llegara a ser lo suficientemente descriptivo si no conoces el HW que tienes, como recomendación es importante visitar la página del fabricante así como leer con la ayuda del mismo kernel sobre los módulos que te puedan servir, bajo estos comentarios he agregado un enlace a mi blog donde puedes descargar un archivo config ya avanzado para una Hp Pavilion 23-p132la, espero les sea de ayuda y ojala mas y mas usuarios compartan estos archivos con diferentes aplicaciones en HW.

  2. Hola amigo, me encantan tus artículos, por eso estoy suscrito a tu página desde hace tiempo. También comparto el mideo a lo desconocido de entrar a gentoo, pero estoy entuciasmado por seguir esta serie de artículos.
    Felicidades por tu sitio web.
    Sólo te pido un favor: No subas imágenes en *.bmp, ya que mi conexión es algo lenta y mi navegador tarda mucho en cargar imágenes pesadas, por ello te recomiendo que conviertas las imágenes en *.png o *.jpg.
    Saludos.

    • Uy, disculpa 🙂 pero muchas gracias por hacerlo notar, no lo había pensado y aunque algo experimentado en Gentoo, todavía no domino muy bien este tema de los blogs 😛 pero de ahora en adelante intentaré cambiar el formato, normalmente solo tomo recortes con Shutter y los subo directo, para no hacer mucho peso en mi equipo, pero también voy a considerar el peso para ustedes 😉 Saludos y muchas gracias por tus comentarios, me animan bastante a seguir escribiendo, ya les tengo el regalo de fin de semana 🙂

  3. Me parece súper interesante la serie de artículos que estás escribiendo. Yo alguna vez he instalado Gentoo como hobby, pero siempre con mil y un problemas, sin controlar realmente mucho de lo que hacía y trampeando cosas para salir del paso. Aún así, he logrado ver en mis múltiples intentos que esa sería la distribución en la que me quedaría si consiguiese tener una instalación óptima y correcta y dominarla. Ahora mismo estoy en Fedora, aunque no soy un fedoriano convencido. Estoy un poco como la mascota de Gentoo: “Larry the cow was a bit frustrated
    at the current state of Linux distributions…
    …until he tried Gentoo Linux.”
    Te dejo un par de “tips” de cara a tus futuros artículos, por si te parece interesante tocarlos concretamente y que derivan de mis propias dudas:
    – Gentoo posee un repositorio bastante extenso, pero aún así hay especificidades que no se encuentran en él; bien sean algunos programas científicos u otras cositas muy concretas. Sería interesante conocer de primera mano como podemos instalar aquello que no encontremos en sus repos. Conozco pero no entiendo bien la existencia de los “overlays”. Debian tiene una manera oficial y recomendad de instalar software que no está en sus repositorios, ¿existe algo similar en Gentoo? ¿Cuál sería la mejor manera de instalar sin el clásico ./configure && make && make install?
    – Por último, mi mayor problema a la hora de realizar la instalación de Gentoo viene tras el primer reinicio en el que me enfrento a una consola sin tener configurada la red. Supone un punto de frustración, ya que no entiendo bien como lograr levantar la wifi desde ahí. Sería interesantísimo saber modo tutorial cuáles son los pasos exactos para hacerlo y poder continuar la instalación del escritorio y demás utilidades. En mis instalaciones anteriores lo que hice fue instalar Gnome y todo desde el chroot de la instalación del sistema base; un apaño, vamos.
    Nada más. Gracias a ti y a DesdeLinux por estos artículos sobre una distribución tan poco mainstream y sin embargo tan interesante.
    Por cierto y ya abuso un poquito más de ti: Siempre leo sobre Gentoo desde la perspectiva de profesionales informáticos como tú, programadores, ingenieros de sistemas o de redes, etc. Pero nunca he visto una opinión del lado de un usuario final que use la distribución; ¿Es buena idea Gentoo para ese usuario final, que, yo que sé, sea fotógrafo, o estudie ciencias ambientales o mecatrónica, o simplemente quiera Steam, …? (Supongo que se entiende a lo que me refiero)
    Muchas gracias ChrisADR y un saludo afectuoso

    • Pues anotadas tus peticiones 🙂 ahora que al fin terminé la guía de instalación paso a paso, tendrán que darme un par de días porque tengo un examen de certificación este sábado (LFSC de la Linux Foundation) y tengo que prepararme estos días que quedan. En cuanto a los Overlays, vienen a ser como AUR en Arch, un lugar donde los usuarios pueden crear sus propios ebuild, otro tema que queda pendiente para un post completo. Y al mismo tiempo también quedan los procesos normales de instalación, que son tan variados como granos de arena hay en la playa… pero eso también para otro post 😉 En cuanto a los usuarios, en Gentoo hay de todo un poco, hay gente que es gamer (al viejo estilo, porque no estoy 100% si Steam está en nuestro repositorio principal), hay Hackers que tienen su propio derivado de Gentoo para Pentesting, Pentoo… Conozco algunos compañeros en la comunidad que no son necesariamente ingenieros, ni matemáticos, y pues les va bien 🙂 También hay gente más científica y proyectos sobre geociencias, o incluso religión… en fin hay de todo un poco en Gentoo, para todos los gustos, ya que la filosofía nos permite elegir 🙂 pronto estaré escribiendo más artículos y trataré de cubrir tus dudas 🙂 Saludos

      PS. Como buen usuario de Gentoo que soy, ya con el tiempo lo notarás, muchas veces tenemos que pensar “out of the box” y si eso incluye una que otra maña por ahí, pues genial 😉 ya lo verás en mi guía de instalación de Gentoo que pronto va a salir 🙂

    • ¡Excelente! Muchas gracias por compartir tus experiencias con el resto de la comunidad, sin lugar a duda mi post no es 100% exacto ni perfecto, porque creo que en ese caso mejor escribo un libro completo 😛 pero al menos espero con esto despertar la curiosidad de más de uno y así poder dejar algo de tarea para cada uno en su tiempo libre 😉 Saludos y gracias

    • Para que te hagas una pequeña idea, Nuestros amigos de Linux From Scratch dicen esto sobre la construcción.

      “We installed a system that was just enough to run the Apache web server; total disk space usage was approximately 8 MB. With further stripping, that can be brought down to 5 MB or less.”[1]

      Traducido al español dice que han conseguido correr un servidor Apache embebido en tan solo 8MB, que incluso podrían haber sido 5MB. Gran parte de ese espacio es solamente kernel, por lo que si deseas un sistema que haga específicamente una cosa, o que use unicamente tu hardware. 10M de kernel te permiten tener el resto de RAM disponible (recuerda que el kernel corre en RAM todo el tiempo que usas tu equipo). Además de los beneficios de seguridad y otros que implica tener un kernel personalizado, se puede ver una mejora significativa en espacio. Lo cual puede que repercuta en la velocidad también.

      Saludos

      [1]http://wiki.linuxfromscratch.org/lfs/

  4. Hola:
    He bajado en una carpeta el stage 3 y luego de sincronizar portage he probado emerge gentoo-sources pero ¿cuesta horas el proceso? luego de media hora seguían apareciendo mensajes del tipo
    /usr/linux/gentoo-sources 4.12.12/arch/arm/*
    ¿debe descomprimirse tanto y estar igual horas o hay alguna opción para hacerlo mas rápido? ya que este emerge solo deja las fuentes para posteriormente compilarlas con las opciones.
    saludos.

    • Hola fernan, pues la verdad nunca he intentado instalar en un procesador arm. Tengo entendido que dependiendo de la versión de RPi (en caso que estés usando uno) los buses de USB e internet están conectados, por lo que el tiempo de descarga puede ser mucho mayor al normal. (Incluso en mi laptop i7 el tiempo de descarga del kernel en el repositorio git es de unos 4 a 5 minutos)
      Bueno, no sé que tan familiarizado estés con el tema, pero podrías compilar todo en una laptop mucho más potente y pasarlo ya compilado al dispositivo final, eso ayudaría bastente con el tema de tiempos.
      Saludos

Dejar una respuesta