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

24
3713

Bueno, dada la gran acogida de mi anterior post, vengo a contarles un poco más sobre mi distribución favorita, Gentoo Linux. Prometo que este post tendrá información entretenida que les ayudará a entender un poco sobre los mitos que surgen frente a la temible compilación de software. También prometo que esta información será útil para la próxima guía de instalación de Gentoo Linux en ~20 pasos (todavía no los he contado bien, pero creo que son incluso menos). Sin más que aumentar, comencemos:

¿Qué es compilar?

Es el proceso que realiza un programa (comúnmente llamado compilador) para convertir código escrito en lenguaje humano (archivos C, C++,etc) en código entendible para una máquina (código binario). Miremos el siguiente ejemplo:


Diseño propio, Christopher Díaz Riveros

Este es nuestro pequeño programa en C ( si después desean otros tutoriales sobre C también estaré encantado de mostrar lo poco que he aprendido en este tiempo). Ahora veamos cómo se ve el resultado después de compilar.

Diesño propio, Chrirstopher Díaz Riveros

Hermoso, ¿no es cierto? 🙂 Esto es lo que nuestra máquina entiende para poder escribir ese pequeño “Hola” en nuestra terminal cada vez que se ejecuta el programa.

El proceso de compilación:

Como no sirve de nada tener un programa que imprima un simple “Hola” en la pantalla, pues los archivos .c y .h abundan en proyectos (como en todos los lenguajes de programación). Para poder hacer el proceso de compilación un poco más sencillo aparecieron nuevas herramientas, la más representativa de todas es el comando make.

Make toma un archivo Makefile como punto de partida y compila lo necesario para poder crear el ejecutable final, en algunos casos este paso requiere ejecutar un archivo llamado configure para poder asignar unas cuantas variables necesarias para el compilador para compilar (valga la redundancia) un archivo útil.

Es por esto que en muchos tutoriales encontraremos los siguientes pasos:

Diseño propio. Christopher Díaz Riveros

La magia de ./configure:

Para mostrales uno de los secretos más ocultos y entretenidos del código fuente, iremos al código fuente de un programa que todos conocemos a la perfección, sudo. Primero los pasos de siempre, pero me detendré en ./configure  para mostrarles algo especial.

Diseño propio. Christopher Díaz Riveros

Esto nos devolverá una larga lista de opciones, entre las cuales les mostraré la que más me llama la atención.

Diseño propio. Christopher Díaz Riveros

--with-insults… como su nombre lo indica, compila sudo con insultos 😀 es una divertida funcionalidad que permite lanzar un insulto al usuario cada vez que se equivoca en su clave. ¿Para qué sirve? pues no hace mucho 😛 pero deja claro un punto. Existen miles de opciones que no vienen por defento en la mayoría de distribuciones.

Así como estás, hay muchas otras que tal vez estarán activas en distribuciones de código binario y que nunca utilizarás, o habrá algunas que necesites, pero no vendrán con tu binario distribuido oficial, lo que implica que cada actualización será manual.

Empieza la diversión en Gentoo:

Ya hemos visto cuántas opciones podemos estar perdiendo o arrastrando con programas precompilados. Pero ahora vamos a centrarnos un poco en el problema de lo pre-compilado.

Performance:

¿Alguno se ha preguntado por qué las máquinas nuevas solo se ven un poco más rápidas comparadas con otras no tan modernas? Si el procesador es mejor, hay más RAM, todo es mejor, ¿por qué no va más rapido? La respuesta es sencilla… compilación.

Pongamos un ejemplo muy práctico.

Mis programas son compilados con la opción --march=broadwell… esto es debido a que mi procesador es broadwell (i7 de intel). ¿La desventaja de esto? ningún procesador anterior a broadwell es capaz de reconocer este binario. En este punto ya deberías verlo muy claro, si yo compilo con un –march  específico, todo lo anterior no funcionará… ¿entonces cómo hacen los paquetes binarios para soportar tantos tipos de hardware? Fácil, compilan con la menor opción posible 🙂 esto garantiza que todo tipo de hardware va a poder leerlo (al menos por compatibilidad).

El verdadero problema… si tu usas programas que están compilados para i3… ¡¡Todo el poder de tu i7 ( o sus respectivas analogías AMD) es desperdiciado!! ¿ No es eso triste? 🙁

Flexibilidad:

Dado que los desarrolladores de Gentoo son muy inteligentes, todo este proceso de tar, ./configure, make, etc… ha sido reemplazado con el poder de Portage. Todas estas configuraciones curiosas han pasado a denominarse USE flags, por lo que si tu deseas una configuración específica, no necesitas entrar al código fuente, solo configurar la variable. Aquí un ejemplo de cómo hacerlo con sudo en portage. Primero veremos qué opciones tenemos en nuestra configuración actual con equery.

Diseño propio. Christopher Díaz Riveros

Como podemos ver, las opciones rojas están activadas, las azules no, bueno… todos pueden leer la leyenda 🙂

digamos que yo quiero agregar una opción…

Diseño propio. Christopher Díaz Riveros

Tan sencillo como agregar una línea en un archivo llamado sudo (el nombre es referencial) dentro de /etc/portage/package.use/. Con esto la siguiente vez que instalemos sudo nos dirá que se va a recompilar con la opción activada.

Diseño propio. Christopher Díaz Riveros

Si damos, YES, todo lo que hay que hacer es esperar un poco y listo 🙂 tan sencillo como esto.

Consideraciones finales:

Bueno, ya hemos visto lo sencillo que es manejar funcionalidades extra en Gentoo, lo que nos permite agregar, quitar o modificar opciones dentro de nuestros programas favoritos. También hemos visto cómo es que el performance de nuestros programas depende mucho de las variables con las que lo compilemos. Si tienes una máquina muy nueva, Gentoo es tu mejor opción. Si tienes una máquina muy vieja, Gentoo también es tu opción (aunque demore un poco en compilar, los programas finales serán mucho más ligeros).

Dentro de poco estaré escribiendo mi guía de instalación de Gentoo, tanto para los amantes de SystemD como para los aventureros por OpenRC (yo uso systemd con GNOME). Por cierto, otra de las grandes ventajas de Gentoo es la posibilidad de elegir todo dentro de tu sistema, y cuando digo todo es TODO.

Si te perdiste mi primer post, aquí el enlace:

Gentoo Linux: La historia de un viaje

Saludos,

COMPARTIR
Artículo anteriorGentoo Linux: La historia de un viaje
Artículo siguienteGentoo: El corazón de la bestia
ChrisADR

Soy un jóven desarrollador de software, apasionado por la seguridad informática. Colaboro en mi comunidad linux (Gentoo Linux) como Coordinador de Avisos de Seguridad de Gentoo (GLSA) y en diversos proyectos FOSS como git y el kernel.

24 COMENTARIOS

  1. Genial! Estaré esperando la guía de instalación de Gentoo con Gnome. Tal vez me anime a migrar a Gentoo aunque todavia tenga una PC un poco antigua (intel core i5 3a gen.). Saludos!

  2. Creo que empezaré a ver por acá muchos posts acerca de mi distrubución linux favorita o!!
    Llevo en Gentoo desde 2005 dónde lo use para montar un Mail Server en la universidad donde estudiaba (y donde ahora trabajo) y aunque he sufrido ataques esporádicos de distrohopping siempre termino regresando con mi querida Gertroodis (primero con Gnome2, después Xfce y ahora openbox), y como comentas en tu post anterior, cada vez con mayores habilidades y conocimientos para ponerla a punto 😉
    Estaré en espera de tus próximos aportes, saludos y gracias por alegrarme el dia =D!

    • Pues ya sale el siguiente 🙂 es como tener una entretenida conversación sobre mi tema favorito, dentro de muy poco vendrá el siguiente, y el siguiente, y el siguiente 😛 Saludos y muchas gracias por tu comentario 🙂

  3. Llevo años saltando entre distros y llevaba tiempo pensando en compilar el mio…. esa guía va a ser el paso que me faltaba…. mientras me voy a entretener con el handbook. Gracias por todo……

    • Bueno, el handbook es todo un paraíso de información, hay simplemente de todo 🙂 yo solo puedo aportar mi pequeño grano de arena 🙂 pero muy pronto, ya sale el siguiente post, y dentro de poco saldrá la (ya estoy viendo que bastante esperada) guía de instalación de ~20 pasos . Saludos,

      • Que caballero no me has dado tiempo de pasar del principio que habla de los distintos microprocesadores y ya está la guía!!!!! Este fin de me lio y a por la PRIMERA! !!! Millones de gracias!!!!

  4. Hola ChrisADR, primero quiero decirte que no he dormido bien desde tu primer artículo sobre Gentoo, y está relacionado con este nuevo artículo, mis sueños se basan en andar compilando un Gentoo en mi antigua Aspire One Netbook. En mi sueño me dice el sistema que está muy vieja mi netbook por lo que no reconoce el hardware.
    Por otro lado, una vez vi un Gentoo y me llamó mucho la atención, mencionaron la potencia que le ofrecía a la computadora (ordenador). Desde ese día me dije que un día lo instalaría, han pasado más de 10 años y no lo he hecho, quizás porque me dijeron que era muy complicado instalarlo, en ese entonces yo era casi anti-linux así que acrecentaron mi agravio hacia él. Sin embargo la curiosidad continuó. Una ocasión traté de instalar un BSD en mi netbook sin éxito alguno, y me dijeron que Gentoo era un linux muy parecido a BSD.
    ¿Qué me recomiendas para instalar Gentoo en mi antigua Aspire One con compilador Atom viejito?

    y muchas gracias por tus artículos sigo esperando más

    • Pues yo te recomiendo… ¡HAZLO! y por último, si al final falla (cosa que dudo mucho porque el kernel está hecho para soportar todo tipo de hardware) habrás vivido una experiencia sumamente enriquecedora en el mundo Linux 🙂 habrás compilado tu kernel, habrás montado desde cero tu sistema de ficheros, habrás hecho configuraciones que pocos hacen en su vida 🙂 te dará una nueva perspectiva del mundo jajaja Sino puedes ver mi perfil de Unix&StackExchange 🙂 mis respuestas abarcan la gran gama de linux que hay porque saber Gentoo me ha permitido aprender muchísismas cosas sobre todos los Linux 😉 te dejo el link de mi perfil por aquí

      https://unix.stackexchange.com/users/246185/christopher-d%C3%ADaz-riveros?tab=profile

      No tengas miedo, y al final, si todo sale bien (seguro que costará un poco) será un logro para tu libro 😉 Saludos

  5. Yo también estoy pensando en migrar a Gentoo, pero tengo algunas dudas. En primer lugar, ¿Cómo de actualizados están los paquetes con respecto a Arch? Por otra parte, mi portátil tiene la batería integrada, y todos sabemos lo que el calor excesivo de forma continuada hace a las baterías. Y como pasaría mucho tiempo compilando…

    • Pues la verdad no podría decirte a cienta cierta cuál es más Rolling Release 😛 lo que te puedo decir con certeza es que Gentoo tiene dos ramas: la “estable” y la “no estable”, aunque la “no estable” debe tener la mayora cantidad de paquetes al borde de la tecnología, tengo muchos conocidos developers que la usan en su día a día sin complicaciones. Muchos de estos están hechos para funcionar con los repositorios git de los proyectos, por lo que no existe nada más actual 🙂 Yo personalmente uso la rama “estable”, pero esto es en especial por mi trabajo dentro de la comunidad como coordinador de seguridad y como miembro del equipo de pruebas (Arch Tester). Si no tuviese que tener una versión “estable” para ese trabajo, seguramente estaría al borde de la tecnología con el “no estable”.
      No se si responde a tu pregunta, pero al menos espero que te llame la atención lo suficiente como para probarlo 😛 Saludos

  6. La verdad es que me estas metiendo ganas 😉
    Me interesa mucho lo que has indicado de tutoriales de C, así cómo de Python y te agradecería si tienes alguna joya escondida por ahí para abuelos torpes.
    Por ponerte alguna pega y con todo mis respetos ya que creo es más importante el contenido que el continente, pero cómo soy algo picajoso con el idioma te comento una cosilla.
    Dices al principio:
    “Compilación es el proceso que realiza un compilador para utilizar código escrito en lenguaje humano y convertirlo en código entendible para una máquina.”
    En mi opinión no es correcto incluir lo definido en la definición, ya que para definir la compilación incluyes el termino compilador, por lo que hubiese sido algo más correcto una cosa así:
    Compilación es el proceso por el cual un programa obtiene desde un fichero texto escrito en un lenguaje (C, C++) un fichero ejecutable por el ordenador.

    • Pues la verdad no lo sé 😛 depende de lo que vayas a hacer con tu equipo, o el hardware del que dispone, o si tienes tiempo (y ganas) de aprender a usar Gentoo. Yo te diría que si tienes tiempo, y ganas, pue ¡ADELANTE! y verás que aprenderás mucho en el camino 😉
      Saludos

  7. Hola:
    Si la verdad que gentoo tiene mucho que leer, por ejemplo haces un emerge -pv paquete y te salen uses en rojo, en azul y en verde, mas posibles bloqueos que requieren cambios de uses desenmascarar paquetes, cambios de slot vamos muy diferente a lo que muestran los demás gestores de paquetes.
    Supongo que gentoo habrá que actualizarlo todos los días, si lo dejas 1 mes tocará discurrir como arreglarlo.
    Saludos.

    • Si jeje al principio marea un poco 🙂 pero con el tiempo te vas familiarizando e incluso llegas al punto de pensar por qué en ningún otro gestor de paquetes tienes tanta flexibilidad 🙂 en cuanto al tiempo, conozco gente que tiene el mismo servidor corriendo desde hace años sin actualizar y se mantiene totalmente firme como el primer día, y para aquellos que llevan años (no meses) existe un sector especial del wiki describiendo las posibles soluciones al problema:

      https://wiki.gentoo.org/wiki/Upgrading_Gentoo/es#Actualizar_sistemas_antiguos

      Y en cuanto a las actualizaciones, tal vez ver temas de seguridad de manera directa me ha hecho tomar una nueva perspectiva, pero actualizar todos los días es algo que sin importar la distribución debería hacerse, normalmente no toma más de dos comandos en todas las distribuciones, y en gentoo además de generar un buen hábito, evita las largas esperas cuando se acumulan todos los paquetes.
      Saludos

  8. Hola:
    En las distros binarias, yo uso manjaro y antes usé ubuntu, es sencillo actualizar, yo todos los días miro si hay actualizaciones, es lo primero que miro, pero en manjaro no me ha dado problemas relevantes el actualizar, normalmente decirle a pacman que si a todo y a lo sumo tener que actualizar las firmas o igual borrar un archivo. Pero por lo que leo en gentoo la terminología a veces es complicada de entender que es lo que dice portage.
    Saludos.

    • Decir si a todo nunca es bueno fernan 🙂 si has llegado a GNU/Linux debes saberlo y comprenderlo. Pues nada que ver, es simplemente costumbre, con el tiempo te vas dando cuenta que rojo es lo que tienes, azul lo que no, verde lo que se va a agregar y listo :). Yo nunca tengo que cambiar nada para actualizar si he configurado bien para empezar, alguna que otra vez agrego o quito USE flags, pero lo común es dar Y de yes después de haber leído la lista para saber lo que se está haciendo 🙂
      PS: pacman -Syy es lo mismo que emerge –sync
      Pacman -Suy es lo mismo que emerge -uD @world (el -av es solamente para que sea verboso y te pregunte antes de proceder, lo cual es inneecesario si conoces tu equipo y sabes lo que haces, pero yo lo pongo para evitar problemas después 😉 ) yo no lo veo tan complicado de recordar 🙂

      Saludos

  9. Excelente tus artículos, tanto el anterior como éste. Me queda una duda y es qué tanta velocidad ganas entre Arch o Manjaro y Gentoo. Independientemente de que la personalización y aprendizaje de por sí, hacen que valga la pena instalarlo.
    Otra duda que tengo es cómo lidiar con los controladores (drivers), esto es algo que me ha dado problemas en Arch.

    • Hola Mauricio,
      Pues nunca me he detenido a realizar un benchmarking entre ambos, y en realidad es una pregunta muy ambigua, dependiendo del software que utilices, y el equipo que tengas, esto puede variar entre poco o nada, a bastante. Al menos hoy por hoy ambos sistemas me funcionan bastante bien en lo que necesito usarlos. (Tengo un Gentoo principal y un Arch que uso de vez en cuando) Normalmente lo utilizo en virtualización y edición de programas (pero normalmente por terminal así que no utiliza mucha memoria en un IDE. Chrome me soporta de manera totalmente tranquila más de 40 pestañas ( eso lo he probado una que otra vez, aunque por lo general solo tengo máximo 5 abiertas por periodos prolongados.
      Si un día te animas a probar me comentas cómo te fue 🙂

      En cuanto a los drivers, pues como tu controlas el kernel a voluntad, normalmente la mayoría de drivers “comúnes” son instalables, o al menos manejables. En caso de hardware muy especializado (sobre todo el poco compatible com Linux en general), pues supongo que es el mismo trabajo que en muchas otras distros, yo no tengo mucho hardware especializado así que no puedo comentar mucho al respecto 🙂

      Saludos y suerte

Dejar una respuesta