Gentoo: El corazón de la bestia

23
3142

Wow, veo una gran acogida a mis pequeños aportes y me motiva mucho más a poder seguir compartiendo con esta bella comunidad. Ya sé que he prometido una guía de menos de 20 pasos, pero tendrán que comer ansias un poco todavía… Es que sencillamente no puedo empezar un tutorial de Gentoo sin detenerme a hablar de su corazón y la esencia misma de todo su poder Portage, su gestor de paquetes. Además, como fiel usuario de Gentoo creo yo que es mejor entender antes que repetir, y con esto solo quiero decir que antes de empezar una guía sencilla como copiar un script (repetir), es mejor saber lo que hacemos para poder después escribir el script. Como el conocido refrán:

“Dale a un hombre un pez y le habrás calmado el hambre por un día, enséñale a pescar y lo habrás salvado de por vida”.


Sin más que agregar, comencemos:

¿Qué es portage?

Portage, es el gestor de paquetes de Gentoo Linux. Sus equivalentes en otras distribuciones son apt (Debian y derivados) , yum (Red Hat, SUSE y derivados) , pacman (Arch y derivados)… Está inspirado en Ports de FreeBSD, eso debido a que el fundador de Gentoo utilizó una temporada FreeBSD y de ahí la inspiración y parecido en muchas de las maneras. Estuvo escrito en bash al principio y emerge (el nombre del programa que se encarga de instalaciones en línea de comando) a lo largo de su historia ha tenido una amplia base de bash y más actualmente Python para poder realizar sus funciones.

¿Por qué es importante saber esto?

Bueno, como todo usuario Linux, el gestor de paquetes es tu herramienta principal para poder mantener tu sistema funcional y operativo, te permite instalar, actualizar, eliminar, y muchas otras cosas más. Portage se subdivide en diversos comandos que se especializan en realizar una cosa, y hacerla bien (una conocida forma de trabajar en UNIX).

El corazón de Portage:

A diferencia de otros gestores de paquetes (al menos los que ya he mencionado antes), Portage basa todo su poder en un archivo de configuración. Este archivo se encuentra dentro de la ruta /etc/portage/make.conf . Por el momento es muy difícil explicar el intrincado sistema que existe en Gentoo que permite entregar todo el poder de la distribución a este archivo sin romper nada en otro lado, pero sigamos que eso lo dejaré para otro post 😉

Un vistazo al corazón:

Diseño propio. Christopher Díaz Riveros

Como podrán ver, no es algo fuera de este mundo, en realidad, tengo otros archivos que son mucho más específicos, pero lo que está aquí es más que suficiente para poder tener tu Gentoo operativo y funcional. Comencemos a revisar las líneas que siguen:

CFLAGS/CXXFLAGS:

El primer paso por nuestra aventura en el corazón de Gentoo son los C Flags. Estos flags permiten compilar programas en C (los más básicos que necesita un sistema para funcionar) con distintos tipos de ventajas. Como pueden apreciar en mi configuración, -march=broadweel me permite usar la generación de mi procesador al momento de compilar mis programas. -O2 y -pipe vienen por defecto, y si me detengo a explicar cada una me va a tomar tal vez un libro completo.

Sin embargo, aquí les dejo unos cuantos tipos de -march explicados en la wiki de Gentoo.

https://wiki.gentoo.org/wiki/Safe_CFLAGS

CHOST:

El CHOST se encarga de mostrar la ubicacióny tipo por defecto del compilador, esta variable es utilizada en equipos que cuenten con distintos tipos de compiladores, como los fanáticos de Arduino. Para una configuración básica no es necesario entrar en detalles.

Nota del autor: Gracias por tu aporte njord, y por compartir tus conocimientos con el resto de la comunidad 🙂

Esta variable del sistema no indica como tal la ubicación del compilador, más bien le indica al compilador la arquitectura del procesador, y opcionalmente la plataforma de hardware, sistema operativo y libreria de C para los cuales se van compilar los paquetes y aunque esta variable se define de manera global dentro de make.conf (como todo lo demás que aparecé ahí) nada impide que se puedan compilar paquetes para otras arquitecturas.

USE:

El corazón de los programas, los USE flags de make.conf son universales. Con esto me refiero a que cualquier programa que cuente con un USE de X, al momento de ser compilado, contará con el X activado. Esta opción es bastante útil para aquellos USE flags que vas a utilizar en muchos (si no son todos) de tus programas. Como pueden ver, gnome systemd hacen que mi sistema compile soporte para estos tipos de programas en cualquier software que lo tenga como posibilidad.

MAKEOPTS:

Esta es una de las mejores ventajas de los procesadores rápidos. MAKEOPTS como su nombre lo implica, son opciones que se agregan a la sentencia make que se corre al compilar cada programa. en este caso el -j9 me permite compilar 9 programas al mismo tiempo, 1 por cada hilo en mi núcleo del i7. Un número más conservador es -j5, pero incluso aquí, el tiempo de compilación se reduce bastante para cada instalación.

CPU_FLAGS_X86:

Oh oh… ahora deben estar pensando… ¿qué son esos números? y ¿de dónde o cómo sé yo qué poner aquí? La respuesta es la pura esencia de Gentoo 🙂 aprovecha a la comunidad 😉 quienes ya crearon un programa que te da el resultado. Para mostrar esto solo hace falta instalar el siguiente programa y ejecutarlo:

Diseño propio. Christopher Díaz Riveros

Como pueden ver, me muestra los FLAGS que mi procesador posee y los puedo copiar a mi archivo make.conf mediante redirects o escribiendo con nano, vim, o cualquier otro editor de texto 🙂  (Ya irán viendo cuán automatizado está todo en Gentoo 😉 )

PORTDIR:

Simplemente el directorio donde comienza la raíz de los ebuilds. Estos son los scripts de Bash que permiten a portage instalar programas, pero eso lo dejaremos para otro post 😉

DISTDIR:

Como Gentoo instala todo desde su fuente, este directorio almacenará todo el código fuente que vamos descargando, si desean pueden borrar su contenido cada cierto tiempo, pero hay muchos otros usos interesantes para estos programas, pero eso también para otro post 😉

VIDEO_CARDS:

Bueno, como su nombre lo indica, la marca de tu tarjeta de vide, esto evita que tengas que instalar drivers al momento de instalar cosas como X u Wayland.

LANG:

Un espacio bastante cómodo para poder agregar todos los idiomas que quieres que soporte tu sistema, en mi caso yo quiero tener en español de Perú, pero se pueden agregar más para poder cambiar en caso de ser necesario.

INPUT_DEVICES:

El formato o driver con el que funcionan tus periféricos, dado que uso GNOME, libinput se encarga de mi touchpad. Otra opción bastante conocida pero que está siendo reemplazada es synaptics.

LINGUAS:

L10N:

Los que saben de programación sabrán por qué no hay nada en el anterior, sino, miren cómo funciona which en muchos lenguajes de programación 😉 .

Estas variables permiten saber el lenguaje  de los programas instalados, en mi caso tanto en inglés como en español está bien.

RUBY_TARGETS:

Los TARGETS muestran otra funcionalidad bastante peculiar de Gentoo Linux. Es posible tener distintas versiones conviviendo dentro del mismo sistema. Esto quiere decir que yo podría tener Ruby 21, 22 ,23 y 24  al mismo tiempo y sin conflictos, lo mismo que Python, Apache, Tomcat, MariaDB, entre muchos otros. Esta función se denomina SLOT en nuestra comunidad y es tema para un post completo, por lo que lo dejaremos para otra oportunidad 😉

GENTOO_MIRRORS:

Los lugares de donde vas a copiar tu colección de ebuilds, sirve de manera especial para poder tener puntos de acceso al momento de sincronizar. Yo tengo estos dos de backup, puesto que mi lista de ebuilds la descargo directamente de Github, y solo es necesario hacer git pull para descargar (obviamente, Gentoo lo hace por mi de todas maneras cuando escribo emerge –sync)

MUCHO MÁS:

Estas no son todas las opciones de make.conf, existen muchas más, y probablemente algunas permitirán mayores ventajas o configuraciones, pero con esas es más que suficiente para tener un sistema funcional 🙂

/etc/portage:

Les presento un poco de lo que existe dentro de esta carpeta, solo para que se puedan hacer una idea de lo que falta por conocer y que iremos viendo en estos días y posts 🙂

Diseño propio. Christopher Díaz Riveros

Un poco más:

Como no puedo dejar de comentar un poco más, me adelantaré un poco y les mostraré una parte especial de esta carpeta, el archivo make.profile. Los perfiles de Gentoo te permiten generar configuraciones especializadas para cada tipo de usuario, así no es necesario que escribas o conozcas todos los USE, o muchas cosas más, simplemente puedes escoger un perfil y empezar sobre ese. Esta es la lista actual de perfiles que tenemos en Gentoo el día de hoy.

Diseño propio. Christopher Díaz Riveros

Como pueden ver, mi perfil está seleccionado con amd64, un desktop, con GNOME y usando systemd. Al seleccionar este perfil me aseguro que todos los USE flags y demás configuraciones sean los mínimos requeridos para tener mi sistema corriendo, y en base a eso yo hago los retoques. (Seguro alguno que otro creía que tendría que pensarlo todo desde cero… eso es mentira aquí 😉 )

Como podemos ver, perfiles son muchos, y cada uno con sus beneficios propios.

Para terminar:

Bueno, otro post que se va de mis manos para sus ojos 🙂 espero que las ansias de probar Gentoo ya los tenga bastante impacientes 😀 así podré sentir una emoción mayor al momento de crear la guía de instalación. Saludos a todos,

23 COMENTARIOS

  1. Muy buena la serie de post. Me pica la curiosidad con Gentoo. Atualmente uso Arch con BtrFS y Snapshots como sistema operativo principal. Lo unico que me detiene es que mi PC actual no es muy potente (core2duo) y voy a tardar una eternidad compilando todos los paquetes que tengo. Cuando compre mi siguiente PC definitivamente hare unas pruebas con Gentoo.

    Saludos!

    • Hola Eduardo 🙂 muchas gracias por tus comentarios, me motivan bastante, ahora está saliendo el siguiente capítulo de la serie, y un paso más cerca de la guía de instalación de Gentoo 🙂 prefiero perfilar un par de cosas antes de empzar ese post que seguro ayudará a muchos a instalar sus sistemas. Saludos!

  2. Pedazo de post! como los anteriores, salvo que en este me atreveré a dejarte una aclaración:

    CHOST -> Esta variable del sistema no indica como tal la ubicación del compilador, más bien le indica al compilador la arquitectura del procesador, y opcionalmente la plataforma de hardware, sistema operativo y libreria de C para los cuales se van compilar los paquetes y aunque esta variable se define de manera global dentro de make.conf (como todo lo demás que aparecé ahí) nada impide que se puedan compilar paquetes para otras arquitecturas.

    Y aunque no me lo pides, un agregado: Creo que a estas alturas sería muy bueno dejar completamente en claro que la principal ventaja de usar Gentoo(y derivados) sobre otras distribuciones, es la posibilidad de ajustar toooodo a la medida, no solo de tu hardware, sino también de tus gustos y filosofías, como por ejemplo la posibilidad de instalar un sistema 100% funcional sin depender de los bodoques de Poettering [SystemD, pulseaudio y NetworkManager](espero no se arme aquí una guerra mundial >.<), sustituyendolos por OpenRC (System init desarrollado por la propia comunidad de Gentoo, una verdadera joya si me permiten expresarlo) (o si quieren algo más transparente y veloz también soporta runit), alsa y wpa_supplpicant, respectivamente; y a lo cual digo Aleluya!!! =P

    Saludos!

    • Wow, muchas gracias por el aporte 🙂 como en todo lugar, siempre aprendiendo cosas nuevas 😀 y si, no lo especifiqué en este, pero debí comentar que como todo en make.conf, puede especializarse mucho más en archivos separados u otras partes del sistema.
      Gracias por la aclaración y me alegra contarles que es 100% verdad, la joya de Gentoo es la capacidad de elegir tu sistema, con todo lo que te gusta y nada más.
      Ya hay unos cuantos post a punto de salir, esperemos que los editores los revisen 🙂

  3. Esperando de verdad con ansias la próxima publicación, de verdad con unas gana inmensas de probar gentoo, ojalá no tarde mucho, saludos y sigue así.

  4. Definitivamente estos post servirán mucho de guía, pero también para animarse a instalar Gentoo.
    Tendré como referencia y guía estos post para un futuro. Porque creo que estaría más satisfecho si instalara Gentoo en una PC con procesador más reciente. Y mi actual PC está un poco atrasada. Mientras seguiré con Arch Linux.

    • Claro Mart 🙂 esa es la idea, estar cómodo con tu computadora. Yo también tengo una partición con Arch 🙂 y si no existiera Gentoo probablemente usaría Arch a diario, junto con mi Kali linux 🙂 ya pronto estarán saliendo más posts y ya estoy a la mitad de la guía 😉

    • Pues, para el sistema base la compilación no es tan tardada y para escritorios ligeros (como xfce o mate o lxde) o administradores de ventanas minimalistas (como i3, openbox, fluxbox, awesome, etc.) es relativamente corto. Ahora entornos de escritorios robustos y completos (como gnome, kde o cinamon) será tardado. Aún asi, Curiosamente lo que mas le toma tiempo en la compilación son los navegadores web (como firefox o chrome, pero hay navegadores menos pesados como qutebrowser o palemoon que probablemente podrian tardar menos) y la ofimatica. Por eso, gentoo ofrece unos binarios para esos programas en caso que necesites algo funcional para resolver mientras la compilación hace lo suyo.

      Si tienes una computadora doble nucleo, creo que será suficiente para compilar el sistema en unas 2 o 3 horas (y me refiero unas horas si eliges un escritorio robusto como kde o gnome) pero para la compilacion del navegador y la ofimatica te recomiendo hacerlo en la noche, dejando la pc encendida haciendo lo suyo o usar los binarios si quieres

  5. ahora el el turno de molestar los de gentoo 🙂

    apt-build world

    funciona en cualquier distribución “debian based” como ubuntu, mint…. y te compila todos los paquetes optimizados para tu cpu.

    saludos
    MaX

    • Jajajaja para nada molesta, la es poder elegir. Yo encantado si en debian lo hacen, pero ese mundo no lo conozco, yo vengo a compartir lo que me emociona de mi distribución 🙂 y qué bueno que la venerable Debian también tenga su dosis de elección 🙂 saludos

    • No sabía. Suena bien interesante, pero dígame qué sucede con las actualizaciones? apt-build maneja todas, con toditas sus respectivas dependencias, como Gentoo o hay que hacer apt-build manualmente a todas? Y soporta apt-build USEs como Gentoo?

      Saludos.

      • Pues una vez instalado las actualizaciones son con un solo comando que resuelve todas las dependencias “emerge –ask –update –deep –newuse @world” o su versión corta “emerge -avuDN @world” para que actualice todas las dependencias al mismo tiempo que cambia a la versión más actual de los programas

      • no se si quiere decir debian o gentoo, pero para debian es el cĺasico:

        apt-build update

        apt-build upgrade

        y con esto baja la lista de paquetes para actualizar, luego baja las fuentes, la compila y la instala y todo automáticamente.

        Pero claro, no hay una distribución mejor. Todas son buenas. Sería como preguntarse cual es el lenguaje mejor.

  6. Muy bueno el artículo, amigo, pero le recomiendo que evite expresiones gringas que hacen rechinar los dientes, como ese horrible “wow” que parece puro tercermundista acomplejado xD. Usemos nuestra hermosa lengua, que es bien rica y mucho más perfecta y bien articulada que el primitivo idioma de los gringos xD. ¿Cuándo carajos hemos ladrado como perro (“wow = guau”) los hispanos? xD.
    El artículo, bien interesante. Tuviera un computador menos viejito y capaz que me dieran ganas de experimentar en el mundo Gentoo. Pero con mi pobre tartana no más instalar el sistema base se me demoraría varios días xD.

    Saludos.

    • :/ de verdad me parece un comentario un poco fuera de lugar. Si eres de España, pues tal vez me sea más entendible, pero aquí en Latino América el inglés es algo bastante común, y más aún.. como ustedes podrán imaginar al ver el mapa de developers de Gentoo (gente con la que trato todo el día) no hay nadie en Suramérica ni en España… así que gran parte del día estoy hablando en inglés y algunas expresiones se pegan…
      Bueno, eso en cuanto a mi forma de escribir, agradecería no poner calificativos al respecto, y más aún comparar cosas 🙂 cada lengua tiene sus ventajas y desventajas, y pues como Linux cada quien es libre de elegir 🙂
      En cuanto a la máquina, pues nunca lo sabrá hasta que no lo intente 😉 el proceso de compilación es bastante rápido para la mayoría de paquetes, tal vez los más pesados como firefox o thunderbird tome un buen tiempo, pero Gentoo resuelve también ese problema entregando versiones binarias (al estilo normal) para que el tiempo de compilación se reduzca en esos programas pesados 🙂 Saludos

Dejar una respuesta