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

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 :D 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 :P 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.

Saludos,

Gentoo Linux: La historia de un viaje

Gentoo Linux es…

¡Vaya! Creo que es necesario empezar con un poco de información antes de comentarles algo respecto a esta distribución que ha sido el punto de partida en mi vida Linux.

Un poco de “yo”:

Primero empezaré por contarte un poco de mí (si es que no te incomoda claro, pero si es así, puedes saltar un par de párrafos hacia abajo, no me voy a ofender :) ).

Mi nombre es Christopher, tengo 24 años y ya llevo poco más de 2 años usando distintas distribuciones Linux. Ha sido un camino lleno de alegrías (aunque también confusiones debo admitir :P ) y a lo largo del viaje he podido aprender múchisimas cosas.

Yo estudio (ya estoy por terminar mi carrera) desarrollo de software en Lima, Perú. A lo largo de mi carrera he visto distintos tipos de lenguajes y frameworks, y uno que otro lo he utilizado para proyectos personales.

Soy un apasionado de la seguridad informática, ese es un campo en el que espero desenvolverme profesionalmente, sobre todo en la investigación de vulnerabilidades.

Con esta pequeña introducción creo que ya hay más que suficiente, ahora si podemos entrar a nuestra historia.

Un poco de “ustedes”:

DesdeLinux es uno de los principales puntos de encuentro para usuarios de habla hispana de distintas distribuciones. Y es probable que todos los que estén leyendo estos párrafos ya han usado, usen o deseen usar alguna distribución Linux. Los más conservadores podrán usar un sistema dual con algunas otra versión de otro sistema operativo, y los más aventureros seguramente saltarán de distribución en distribución con el pasar de los meses. Sea donde sea que te encuentres en este instante permíteme compartir un poco de mi historia con Linux, un mundo lleno de aventuras, desafíos y éxitos.

Como muchos, especialmente aquí en América Latina, cuando era más joven, no tenía ni idea de la existencia de Linux. Siempre me había sentido insatisfecho de las continuas fragmentaciones de disco, el perder velocidad con cada instalación, el tener que pagar por cada mantenimiento, en fin, mil y una situaciones que tal vez todos hemos atravesado en algún momento.

Primer capítulo, Ubuntu:

Todo esto cambió cuando me presentaron Ubuntu poco antes de comenzar a estudiar Desarrollo de Software. Todavía recuerdo la primera vez que inició el Live USB de Ubuntu, con ese típico color naranja, la barra lateral, el nuevo orden y esa “extraña” manera de buscar mis aplicaciones apretando la tecla Windows.

Ubuntu 17.10
Ubuntu Linux

El primer encuentro:

Debo admitir que fue amor a primera vista, un nuevo mundo de posibilidades, cosas por aprender y sin lugar a dudas la nueva experiencia de vivir libremente con tu equipo. Pero como todo amor repentino, no duró mucho… Debo admitir que al principio no tenía idea de lo que implicaba actualizar los repositorios ni siquiera cómo actualizar un paquete. Instalar mi software favorito siempre era una experiencia que, aunque a tropiezos, me dejaba una sensación de satisfacción absoluta al ver ejecutarse en la pantalla principal la ventana con el programa que me había tomado (a veces poco, a veces mucho) tiempo configurar.

Los desamores:

Al poco tiempo empecé a notar que en mi falta de experiencia, había empezado a instalar cientos de repositorios, archivos, programas, etc, etc. Así que un día me dije a mi mismo: “Hoy vamos a limpiar la computadora” (no es que estuviera lenta ni nada por el estilo cabe mencionar, simplemente me parecía que sería mejor tenerla con pocas cosas que ya no usaba). Tras un par de horas de limpieza empecé a notar que habían muchas más cosas de las que yo había instalado en primer lugar, programas y paquetes que desconocía su función y sobre todo el motivo por el cual estaban en mi sistema.

La curiosidad:

Mientras terminaba de descubrir las novedades, mi siempre activa curiosidad me impulsaba a seguir buscando más cosas por descubrir. De esta manera empecé a leer sobre todos los tipos de distribuciones de Linux existentes. En poco tiempo ya habían pasado por mis ojos nombres como Fedora, SUSE, CentOs… y la lista siguió y siguió hasta que encontré uno que me llamaba mucho la atención… Arch Linux…

Arch Linux es una distribución que explotó mi mente… Rolling Release… fue una de las primeras cosas que me llamó la atención. La segunda fue la filosofía KISS. Muy pronto empecé a soñar al respecto, poder crear mi sistema desde lo mínimo, saber exactamente qué tenía y tener exactamente lo que deseaba, sin programas extra, sin configuraciones extra. Debo admitir que me sentí poco capaz en ese momento, a decir verdad solo llevaba unos cuantos meses en esto de Linux, pero pensaba que no podría estar a la altura de la instalación por consola. El miedo me superó y decidí buscar algo un poco más sencillo.

Mis sueños se hicieron realidad al encontrar Manjaro

Segundo capítulo, Manjaro:

Para todos los conocidos en el tema, Manjaro es una de las distribuciones que se enfocan en acercar a los usuarios más nuevos del mundo Linux al ambiente Rolling Release de Arch Linux. Su entorno y sus aplicaciones tienen una amplia selección de programas que facilitan la vida a cualquier usuario y le permiten familiarizarse con pacman, el gestor de paquetes de Arch.

Logo de Manjaro
Manjaro Linux

Ya llevaba poco más de cuatro meses de haber usado Ubuntu, y decidí optar por Manjaro. Me dije a mi mismo: “Si puedes con esto, estarás más cerca de poder instalar Arch en la laptop”. Fue una experiencia enriquecedora, pude aprender cómo se manejaban distintos tipos de kernel ( y descubrir lo que el kernel era) aquí. Pude instalar muchos paquetes nuevos y aprendí mucho sobre configuraciones y lo mínimo que necesita un sistema para poder iniciar. Al mismo tiempo empecé a practicar en máquinas virtuales el proceso de instalación de Arch. Sin sentirme totalmente preparado para dar el salto decidí intentar instalar Arch en una máquina que me pude prestar en el instituto. Siguiendo al pie de la letra la guía de instalación y uno que otro tutorial por internet. Y en un abrir y cerrar de ojos, ya lo había conseguido, la instalación completa en mi laptop.

Tercer capítulo, Arch:

Logo de Arch Linux
Arch Linux

Mi primer instalación tuvo muchos tropiezos, todavía desconocía muchas cosas del mundo de Linux, pero al menos ya me sentía un poco más experimentado en el tema. Había conseguido instalar un sistema que otros consideraban difícil y lo había logrado en mi segundo intento ( el primero fue en la máquina que me presté en el instituto). Al poco tiempo decidí volver a instalar mi sistema, me parecía que todavía habían muchas cosas que podía configurar mejor, o instalar mejor. Con el tiempo me di cuenta de cuan pocos eran los paquetes que realmente necesitaba para poder hacer funcionar mi laptop y me sentía cada vez más cómodo con la terminal, los comandos y las ubicaciones de archivos.

Todo iba de maravilla hasta que un día, navegando por internet, me topé con una imagen que me despertó curiosidad…

¿Qué era esto? ¿Había algo más avanzado que Arch Linux? ¿Gentoo? ¿Linux From Scratch?… Mi curiosidad llamaba nuevamente. Más decidida que nunca a poder empezar este nuevo reto.

Un nuevo capítulo, Gentoo:

Logo Gentoo
Gentoo Linux

Lo primero que encuentras al hablar de Gentoo es documentación, mucha documentación. La Wiki de Gentoo es un lugar maravilloso donde puedes encontrar todo tipo de información referente a miles de programas y configuraciones. Pero la más básica de todas, era un compendio lleno de arquitecturas y procesos llamado Gentoo Handbook.

En el Handbook uno puede encontrar paso a paso todo lo necesario para poder realizar una instalación de Gentoo desde cero. Sumamente detallado y explicado de manera entendible, este manual te lleva de la mano en el proceso de configuración e instalación de Gentoo Linux. Debo admitir que intenté aplazar la instalación lo más que pude, pensando que no iba a ser capaz de realizarla completa, pero un fin de semana, con toda la emoción y un poco de miedo, me lancé a comenzar la instalación que cambiaría mi forma de ver Linux.

El proceso me tomó poco menos de dos días (un día de lectura previa y un día entre compilación e instalación). Digo compilación porque en Gentoo puedes compilar todos tus programas en lugar de descargar una copia binaria, pero en realidad es bastante parecido a pacman, apt o incluso yum. Uno de los procesos más largos fue el kernel, la parte de configuración, leer las opciones, seleccionar lo necesario. Otro nuevo mundo de posibilidades y formas de personalización que escapaba a todas las otras distribuciones que había visto hasta ese momento.

Acabado el proceso, no puedo negar que fue una emoción totalmente nueva el ver prender por primera vez mi entorno de escritorio GNOME, mover mi mouse y ver todo lo que había logrado con mi trabajo. Todo esto sucedió en enero y desde ese entonces no puedo negar que cada día aprendo más sobre esta impactante distribución, y he decidido quedarme aquí hasta el día en que deje de poder usar una computadora.

El verdadero comienzo:

Ya es la tercera vez que instalo desde cero mi laptop con Gentoo, con cada instalación siento más la habilidad de poder configurar mejor mi computadora, sacar el mayor provecho a mi hardware y disfrutar la emoción de saber que el equipo es completamente mío, y que yo soy quien lo hace funcionar.

También he probado la instalación de Linux From Scratch ( sin lugar a duda era una obligación para mí). Pude completarla y prender mi terminal, sabiendo que yo había compilado desde cero cada programa, y lo había montado desde cero dentro de mi laptop, otra experiencia maravillosa debo admitir.

Linux from scratch

Pero es en este punto donde he encontrado y reforzado las razones por las cuales quedarme en Gentoo y seguir disfrutando de mi distribución.

Un vistazo rápido a Gentoo:

Al final de esta aventura he optado por Gentoo por los siguientes motivos:

Contar con una comunidad hace más sencillo el mantenimiento:

Esto siempre será verdad, Linux from scratch es maravilloso, pero no es posible mantenerlo de manera sencilla, mucho menos cuando existen vulnerabilidades de seguridad de por medio, o cuando quieres tener el software más reciente en tu equipo.

Una comunidad y documentación de primera:

La documentación de Gentoo es magnífica, todo está a disposición en algún lugar, solo es cuestión de leerlo. En caso de no encontrarlo, siempre se puede encontrar a alguien en IRC para pedir consejo. Muchos son muy amables, y aunque poco conversadores, la mayoría siempre están en disposición de ayudar a todos.

Control y performance total:

Al usar Gentoo, tu construyes todo, y todo es TODO. Pero la principal diferencia con Linux from scratch es que después de instalarlo, el mantenimiento es bastante sencillo. Portage, el gestor de paquetes de Gentoo, es sumamente versátil y permite configurar en cada detalle (y de forma sencilla) los atributos de los programas que instalas. Esta configuración al mismo tiempo permite exprimir al máximo el hardware de tu equipo. Si tu laptop es moderna y no usa Gentoo, está perdiendo mucho de su potencial.

Para terminar:

Si has llegado hasta aquí, espero que hayas podido emocionarte un poco de las maravillosas oportunidades que ofrece Linux a sus usuarios. El poder de conocer en cada aspecto tu máquina, si eres desarrollador de software como yo, es una de las experiencias más satisfacctorias que puedes experimentar. Si tu curiosidad te inclina a probar nuevas cosas, solo te puedo recomendar ¡HAZLO!  Sin esperar mucho tiempo, sin poner peros, y si no lo consigues a la primera, sigue intentando. Al poco tiempo te darás cuenta de cuánto has aprendido y descubierto en el proceso.