5 Tips Speed Compile 00 Featured Image

5 trucos para acelerar los tiempos de compilación en Gentoo Linux

Gentoo es una distribución de Linux potente y flexible. Con su innovador administrador de paquetes, Portage, le permite esculpir su sistema informático hasta sus partes más básicas.

Esto se debe a que Gentoo, por defecto, requiere que compile todos los paquetes que desea instalar. Ese enfoque le permite cambiar la configuración de tiempo de compilación. Esto incluye configuraciones para varias tecnologías que no habrían sido posibles en una distribución basada en binario.

¿Qué es la gestión de paquetes de origen?

La gestión de paquetes basada en código fuente es la forma original de distribuir programas de terceros en Linux. Este es un sistema donde un mantenedor tiene una lista de recetas en la obtención y creación de programas.

Estas recetas pueden contener tanto el código fuente de un programa como las instrucciones sobre cómo obtenerlo. Como usuario, puede descargar estas recetas de su distribuidor a través de su administrador de paquetes. Una vez hecho esto, su máquina descargará el código fuente del programa y lo creará en tiempo real para usted.

5 Consejos Speed ​​Compile 04 Ebuild Distribución

Si bien esto puede parecer anticuado, hacerlo de esta manera tiene una serie de beneficios:

  • Distribuir solo la receta de un paquete requiere menos datos que distribuir copias binarias. Esto, a su vez, reduce la cantidad de recursos necesarios para alojar un espejo de un repositorio.
  • Compilar un paquete a partir de su código fuente lo expone a los programas que hacen que su sistema operativo funcione. Esto puede ser especialmente útil si desea aprender cómo funciona su computadora y cómo puede ampliar sus funciones.
  • Por último, compilar un paquete a partir de su código fuente le brinda la posibilidad de personalizar y cambiar el comportamiento de sus programas. Puede incluir o eliminar fácilmente funciones que no necesita.

A pesar de eso, este enfoque también viene con una serie de desventajas. Por ejemplo, paquetes como Firefox y Chromium tardan horas en compilarse e instalarse. Esto se debe a que se trata de programas con millones de líneas de código y cientos de dependencias.

5 Tips Speed ​​Compile 05 Ejemplo de programa compilado

Sabiendo eso, este artículo tiene como objetivo presentar cinco trucos que puede usar para mejorar sus tiempos de compilación cuando usa Gentoo.

1. Optimiza MAKEOPTS

Una de las formas más sencillas de acelerar los tiempos de compilación en Gentoo es optimizar su make.conf. Este es el archivo de configuración principal que utiliza Portage para determinar la configuración de compilación de su máquina. Como tal, contiene una variedad de variables que determinan la configuración y la arquitectura de su sistema.

Puede encontrar el archivo make.conf en “/etc/portag”. También puede imprimir el contenido del archivo con el siguiente comando:

cat /etc/portage/make.conf

5 Consejos Velocidad Compilación 06 Ejemplo Hacer Conf

Lo único que necesita cambiar para optimizar Portage es MAKEOPTS. Esta es la configuración que se ocupa de las banderas de optimización para su sistema. Considere el siguiente ejemplo:

[...]
 
MAKEOPTS="-j1 -l1"
 
[...]

En este caso, hay dos banderas que puede usar con MAKEOPTS:

  • los -j indica la cantidad de trabajos de compilación que desea asignar a su CPU. Una buena regla general al establecer este valor es darle la mitad de la cantidad de núcleos que tiene su CPU. Por ejemplo, si está ejecutando una CPU de cuatro núcleos, puede establecer este valor en -j2.
  • los -l flag, por otro lado, establece el promedio de carga que desea para su sistema. El promedio de carga es la cantidad combinada de tareas que la CPU realiza durante un período de tiempo. Por ejemplo, si desea acelerar los tiempos de compilación de su sistema, puede establecer este valor en -l2.

2. Aproveche CCache

Otra forma de acelerar los tiempos de compilación es usando CCache. Este es un programa de terceros que le permite guardar archivos compilados comunes en un espacio temporal en su computadora.

5 Consejos Speed ​​Compile 07 Ccache Website

A partir de ahí, su compilador puede usar estos archivos guardados en lugar de volver a compilarlos. Esto puede ser especialmente útil si está constantemente reconstruyendo programas o compilando un paquete grande.

Puede instalar CCache a través de Portage:

sudo emerge --ask dev-util/ccache

5 Consejos Velocidad Compilación 08 Ccache Instalar

Lo siguiente que debe hacer es configurar la configuración de CCache. Para ello, debe crear el archivo ccache.conf:

sudo mkdir /var/cache/ccache/ && touch /var/cache/ccache/ccache.conf

Desde aquí, puede usar los ajustes de configuración predeterminados de CCache para comenzar:

max_size = 20.0G
umask = 002
hash_dir = false
compiler_check = %compiler% -v
cache_dir_levels = 3

Lo último que debe hacer es decirle a Portage que use CCache al compilar paquetes. Para hacerlo, puede incluir las siguientes líneas en su make.conf:

FEATURES="ccache"
CCACHE_DIR="/var/cache/ccache"

3. Pruebe DistCC

Similar a CCache, DistCC también es un programa de terceros que puede ayudar a acelerar los tiempos de compilación. A diferencia de CCache, DistCC hace esto al distribuir las tareas de compilación a otras computadoras en su red. Esto puede ser especialmente útil si tiene varias computadoras sin usar en su hogar.

5 Consejos Speed ​​Compile 09 Distcc Sitio web

La forma en que funciona es que DistCC se divide en dos programas: distccd y distcc.

  • distccd es la utilidad que se ejecuta en el servidor de cómputo. Este es un programa simple que escucha las solicitudes DistCC entrantes de los clientes y toma tareas de ellos. Una vez que se completa la compilación, el objeto compilado se envía de vuelta al cliente para que se empaquete.
  • distcc, por otro lado, es el programa cliente que se conecta a distccd. Este es el programa que funciona con Portage para programar y distribuir sin problemas tareas de compilación en una red.

Crear un pequeño clúster de DistCC es relativamente simple. Para hacer eso, necesita instalar el programa distcc tanto en su servidor como en su PC cliente:

sudo emerge --ask sys-devel/distcc

Configuración de un servidor DistCC

A continuación, debe configurar su servidor para aceptar conexiones DistCC. Puede hacerlo creando un archivo de configuración de distcc en “/etc/conf.d/”:

sudo touch /etc/conf.d/distccd

Una vez hecho esto, puede incluir la siguiente línea de código en su archivo distccd:

DISTCCD_OPTS="--port 3632 --log-level notice --log-file /var/log/distccd.log -N 10 --allow 192.168.254.101"
  • los port La bandera indica el puerto donde distccd escuchará las conexiones entrantes. 3632 es el puerto predeterminado para DistCC.
  • los log-level y log-file le dice a DistCC que mantenga un archivo de registro para las tareas que está tomando.
  • los N bandera indica la «amabilidad» de distccd. Esta es una variable que le dice a DistCC cuánto puede usar la CPU del servidor para tareas de compilación. Este es un valor que va de 0 a 20, donde 0 es lo menos agradable y 20 lo más.
  • Por último, el allow flag le dice a DistCC que solo escuche las conexiones entrantes de direcciones específicas. Por ejemplo, la línea anterior le dice a DistCC que solo escuche las conexiones entrantes de un solo cliente.

5 Consejos Compilación de velocidad 11 Distcc Config

Lo siguiente que debe hacer es crear el archivo de registro distccd:

sudo touch /var/log/distccd.log
sudo chown distcc:root /var/log/distccd.log

Una vez hecho esto, ahora puede habilitar su servidor distccd para aceptar conexiones DistCC entrantes:

sudo rc-update add distccd default
sudo rc-service distccd start

Configurando su Cliente DistCC

A diferencia de distccd, configurar su cliente DistCC es increíblemente simple. Primero debe decirle a su cliente dónde buscar el servidor distccd:

sudo /usr/bin/distcc-config --set-hosts "localhost 192.168.254.102"

5 Consejos Velocidad Compilación 12 Distcc Cliente Configuración

Esto le indicará a DistCC que use tanto la máquina local como el servidor para compilar programas. A partir de ahí, lo único que queda por hacer es configurar su make.conf para usar DistCC.

Similar a CCache, necesita usar la variable FEATURES para decirle a Portage que está ejecutando DistCC en su red. Por ejemplo, este es un make.conf de una máquina cliente:

MAKEOPTS="-j4 -l4"
FEATURES="distcc"

4. Usa BuildPKG

Otra forma de acelerar los tiempos de compilación en Gentoo es creando un servidor de distribución binaria. En esto, está utilizando una máquina separada donde los paquetes se construyen y distribuyen en forma binaria.

A diferencia de DistCC, la distribución de binarios solo requiere una sola máquina para realizar la compilación. El programa resultante luego se comparte entre varias máquinas donde pueden instalarlo normalmente.

5 Consejos Velocidad Compilación 13 Buildpkg Distribución

Hacerlo de esta manera puede ser útil si ya está utilizando Gentoo en varias máquinas similares. Esto se debe a que los archivos binarios reducen el tiempo que lleva crear y mantener un solo cliente.

Para comenzar, solo necesita agregar la siguiente línea al make.conf de su servidor de compilación:

5 Consejos Speed ​​Compile 14 Buildpkg Build Server Config

Esto, a su vez, le indicará a Portage que cree automáticamente un paquete binario para cada programa que instale en su servidor.

A partir de ahí, debe crear una forma de compartir esos archivos binarios con las máquinas de su red. Para hacer eso, puede instalar un servidor web HTTP simple:

sudo emerge --ask www-servers/lighttpd

Luego, dígale a lighttpd que sirva los paquetes de su servidor agregando la siguiente línea a su «/etc/lighttpd/lighttpd.conf»:

server.modules += ( "mod_alias" )
alias.url = ( "/packages" => "/var/cache/binpkgs" )

Instalando Paquetes Binarios en Gentoo

Una vez hecho esto, la instalación de paquetes binarios desde su servidor de distribución es un proceso simple de dos pasos. Primero, necesita decirle a Portage la dirección de su servidor de distribución:

PORTAGE_BINHOST="https://192.168.254.110/packages"

5 Consejos Speed ​​Compile 15 Buildpkg Client Config

A partir de ahí, usé Portage para instalar paquetes binarios:

sudo emerge --ask -K www-client/firefox

Aquí el -K obligará a Portage a buscar únicamente los archivos binarios del paquete que desea instalar.

Al hacer esto, buscará en el servidor si tiene alguna copia del programa Firefox. Si Portage no puede encontrar ninguno, la instalación fallará. En última instancia, esto significa que el servidor ya debe tener el binario de un programa antes de que los clientes lo soliciten.

5. Optimice su compilador en Gentoo

Por último, también puede configurar el Compilador GNU C (GCC) para permitirle optimizar la velocidad.

5 Consejos Compilación rápida 16 Compilación de ejemplo

Sin embargo, a diferencia de MAKEOPTS, estas opciones dependerán de la máquina que tenga. Esto incluye la CPU, así como el disco duro y la memoria que tiene.

Además, debe colocar estas opciones en el COMMON_FLAGS variable. Por ejemplo:

COMMON_FLAGS="-march=native -O1 -pipe"

En esto, hay tres opciones que puede configurar para optimizar GCC:

  • los march La opción le dice a GCC que compile el programa en la CPU que desee. En la mayoría de los casos, le dice a GCC que cree el programa para su CPU local. Para hacer eso, puede dar el valor «nativo» y GCC se compilará para la CPU en la que se está ejecutando actualmente.
  • los O La opción indica el nivel de optimización que desea para sus programas. Este es un rango entre 0 y 3 y cuanto mayor sea el valor que establezca, más rápido se ejecutará el programa. Sin embargo, hacer eso aumentará el tiempo que lleva compilarlo.
  • los pipe La opción es un conmutador que puede configurar para acelerar el proceso de compilación. Lo hace manteniendo objetos en la RAM en lugar de guardarlos en archivos temporales. Como tal, esto consumirá mucha memoria y usar esto con RAM limitada bloqueará GCC.

5 consejos Compilación rápida 17 opciones de optimización

Preguntas frecuentes

1. No tengo una variable MAKEOPTS o FEATURES en mi make.conf. ¿Está rota mi instalación de Gentoo?

¡No! Es normal que el archivo make.conf predeterminado no tenga las variables MAKEOPTS y FEATURES. Simplemente puede agregar las variables y sus valores a su make.conf y Portage lo reconocerá y lo aplicará de inmediato.

2. ¿Es posible habilitar CCache solo para los paquetes que quiero?

¡Sí! Habilite fácilmente CCache solo para paquetes específicos. Para hacer eso, primero debe eliminar el valor «ccache» en su variable FEATURES.

A partir de ahí, debe editar el archivo «/etc/portage/package.env». Este es el archivo donde puede habilitar las características de Portage por paquete. Sabiendo eso, este es un archivo package.env que usa CCache para algunos programas:

www-client/firefox ccache.conf
sys-devel/gcc ccache.conf
sys-devel/clang ccache.conf

Al hacerlo, habilité CCache para Firefox, GCC y Clang. Esto significa que Portage solo guardará los archivos objeto de estos programas y sus dependencias asociadas.

3. ¿Hay algún problema con la ejecución de un servidor de distribución de Gentoo?

Uno de los principales problemas del mantenimiento de un servidor de distribución es que usted es responsable de mantener actualizados los paquetes binarios. Esto significa que antes de que pueda actualizar cualquier cliente, primero deberá actualizar el servidor de distribución y luego eliminar los archivos binarios antiguos en sus clientes.

Otro problema con la ejecución de un servidor de distribución es que pierde la flexibilidad de los indicadores USE para sus máquinas cliente. Esto significa que debe habilitar las banderas que no necesita en todas sus máquinas.

Credito de imagen: Unsplash

Experto Geek - Tu Guía en Tendencias Tecnológicas