Instalar paquetes más rápido en Gentoo con tmpfs y binhosts
on Monday, March 27, 2023TOC
No voy a hablar de métodos ya ampliamente conocidos y documentados como distcc y ccache. Ya están documentados en la documentación oficial de Gentoo y no hay razón para repetir lo mismo aquí.
Además, desde mi punto de vista, el proceso para activar esas características no es simple y el resultado no hace que compense.
tmpfs
Hay otra forma no oficial y no tan documentada de acelerar las compilaciones: usar tmpfs para el directorio de compilación (PORTAGE_TMPDIR
). tmpfs usa la memoria RAM como un sistema de ficheros, lo que permite accesos mucho más rápidos. Como el acceso a disco es una de las cosas que más impacto tienen en los tiempos de compilación, cambiar estos accesos a memoria RAM consigue una importante mejora en los tiempos de compilación de manera bastante simples.
Los pasos necesarios son bastante sencillos:
- Añadir una nueva entrada en
/etc/fstab
que monta un nuevo sistema de ficherostmpfs
que será el que usaremos para compilar paquetes:
El valor que ponemos entmpfs /var/tmp/portage-tmpfs tmpfs size=4G,mode=775,gid=portage,uid=portage
size
es el tamaño que tendrá ese nuevo sistema de ficheros, lo que limitará el tamaño de los paquetes que se pueden compilar en ese sistema de ficheros (más sobre esto más adelante). - Montar el nuevo sistema de ficheros:
mount /var/tmp/portage-tmpfs
- Cambiar el valor de
PORTAGE_TMPDIR
en/etc/portage/make.conf
para que use el nuevo sistema de ficheros:PORTAGE_TMPDIR=/var/tmp/portage-tmpfs
Eso es todo. A partir de ahora, los paquetes que se compilen con Portage usaran tmpfs
con un notable incremento de velocidad.
Excepciones
Sin embargo, como mencioné en el primer paso, el tamaño de los paquetes que podemos compilar en tmpfs
estará limitado por el tamaño que proporcionemos en el parámetro size
, lo que puede no ser suficiente para los paquetes más grandes como dev-qt/qtwebengine
, dev-lang/mono
o dev-lang/spidermonkey
.
Para solucionar eso, podemos añadir una excepción para que determinados paquetes sigan usando el disco duro en vez de tmpfs
usando package.env
:
- Creamos un nuevo fichero
/etc/portage/env/notmpfs
que restablecePORTAGE_TMPDIR
a su valor original en el disco duro en vez del nuevo directorio entmpfs
:PORTAGE_TMPDIR=/var/tmp/portage
- En otro fichero
/etc/portage/package.env/notmpfs
listamos los paquetes que queremos que usen las variables de entorno del ficheronotmpfs
del paso anterior:app-office/libreoffice notmpfs app-emulation/virtualbox notmpfs dev-lang/mono notmpfs dev-lang/rust notmpfs dev-lang/spidermonkey notmpfs dev-qt/qtwebengine notmpfs www-client/firefox notmpfs
Listo. Esos paquetes usarán un directorio distinto para compilar.
Paquetes binarios
Otra cosa que podemos hacer para acelerar la instalación de paquetes es, simplemente, no compilarlos.
Aunque una de las principales características de Gentoo es que todos los paquetes se compilan y no se ofrecen paquetes precompilados oficialmente, sin embargo ofrece también la posibilidad de generar paquetes binarios con los paquetes que se compilan de forma que puedan ser reutilizados.
Esto es útil por ejemplo si usas Gentoo en varias máquinas parecidas o que usan la misma arquitectura, de forma que los paquetes se compilarían solo en una de las máquinas y se reutilizarían en las demás. Sin embargo, los paquetes pueden no ser reutilizables si los USE flags o dependencias cambian entre máquinas.
Para más información, consulta la documentación oficial sobre paquetes binarios en Gentoo.
Además, puedes evitar totalmente la compilación de paquetes si usas un binhost o repositorio de paquetes binarios, pero tenemos que estar seguros de que es un repositorio de confianza en el que los paquetes compilados no han sido modificados con código malicioso. Además, algunos paquetes podrían estar compilados con opciones incompatibles con tu sistema como una versión más nueva de glibc o distinto CHOST.
Lista de repositorios binarios
Algunos repositorios disponibles para la arquitectura AMD64:
- Aunque todavía está en pruebas, Gentoo ofrece un repositorio de paquetes binarios.
- Pentoo
- Redcore Linux
- Calculate Linux
- Yo también tengo mi propio binhost
- f1r.eu. No sé realmente quién mantiene estos repositorios y algunos de ellos están compilados con una version de
sys-libs/glibc
en~amd64
, así que úsalos con cuidado
Para ARM64 no conozco ningún otro repositorio binario más que el mío propio que actualizo cuando compilo Pinetoo para el PinePhone.