Esta pagina se ve mejor con JavaScript habilitado

Utilizar un server como servidor de paquetes binarios en Gentoo

 ·  🎃 kr0m

Hay ocasiones en las que reutilizar la compilación de ebuilds de una gentoo en otra puede resultar muy provechoso, uno de estos casos es cuando se tiene mas de una RaspBerryPi, siguiendo esta estrategia tan solo compilariamos los binarios en una de las RaspBerryPis y la otra se bajaría e instalaría los paquetes precompilados. Si además en la RaspBerryPi que hará de servidor de repos le metemos distcc ya tendremos el combo definitivo, la compilación será rápida gracias a distcc y la instalación de paquetes en el resto de RaspBerryPis irá como un tiro.

La reutilización de paquetes binarios nos ofrece varias ventajas

  • Rapidez en la instalación de ebuilds
  • Recuperación de sistemas corruptos en los que el compilador no funciona
  • Actualización de sistemas muy antiguos

Para poder instalar paquetes de un equipo a otro deben compartir arquitectura y el parámetro CHOST en el /etc/make.conf, los parámetros C(XX)FLAGS deben ser compatibles en ambos equipos, las Uses también deben ser compatibles en los dos.


Podemos configurar un equipo para que cuando compile un ebuild genere el binario y lo guarde(packages server).

vi /etc/make.conf

FEATURES=buildpkg

Otra opción es indicarle a emerge que lo haga, pero solo para ese paquete:

emerge -b PAQUETE

También es posible SOLO generar el binario pero NO instalarlo:

emerge -B PAQUETE

NOTA: Si no tiene las dependencias necesarias para compilar el paquete la compilación fallará

Otra opción es generar un binario mediante el comando quickpkg:

  • quickpkg "sys-devel/gcc" --include-config=y: Crea el paquete binario para todas las versiones de gcc instaladas
  • quickpkg "/" --include-config=y: Crea el paquete binario para todos los paquetes instalados
  • quickpkg "kde-base/*" --include-config=y: Crea los paquetes binarios de todos los paquetes instalados bajo la categoría indicada

Los paquetes binarios serán almacenados en /usr/portage/packages/:

vi /etc/make.conf

PKGDIR="/usr/portage/packages"

Los paquetes binarios se pueden servir de distintos modos, ftp, http, ssh, pero como la Rasp no destaca precisamente por su potencia de calculo lo haremos mediante http con ligthttp como webserver:

emerge www-servers/lighttpd

vi /etc/lighttpd/lighttpd.conf
server.document-root = "/usr/portage/packages"
/etc/init.d/lighttpd start
rc-update add lighttpd default

Configuramos el cliente (en dir PKGDIR es donde almacenará los binarios descargados del master):

vi /etc/make.conf

PKGDIR="/usr/portage/packages"
PORTAGE_BINHOST="http://yourbinhostserver/"
FEATURES=getbinpkg

NOTA: También se puede hacer que solo instale un paquete desde el servidor de binarios con emerge -g sys-devel/gcc y comentando la opción FEATURES=getbinpkg

Se puede hacer que emerge instale software solo desde determinados origenes.

Solo instala desde:

  • --usepkg (-k): Utiliza paquetes binarios localizados en PKGDIR , en caso de no estar disponibles los compila.
  • --usepkgonly (-K): Utiliza paquetes binarios localizados en PKGDIR , en caso de no estar disponibles da error.
  • --getbinpkg (-g): Descarga paquetes binarios si no está lo compila.
  • --getbinpkgonly (-G): Descarga paquetes binarios si no está da error.

Hay ocasiones en las que querremos utilizar la preferencia indicada pero con la excepción de algún paquete:

emerge -uDNg @world --usepkg-exclude "sys-kernel/gentoo-sources virtual/*"

NOTA: El cliente debe ejecutar emerge --rebuilt-binaries en caso de que se haya actualizado algún binario en el master mediante revdep-rebuild o python-updater.

Cada vez que se compile un ebuild se generará un binario, esto implica que si se realizan actualizaciones se irán acumulando binarios de versiones antiguas, para hacer limpieza y solo dejar los binarios de los ebuilds que están actualmente instalados:

emerge app-portage/gentoolkit
eclean packages

En /usr/portage/packages se encuentra el indice de los paquetes binarios este se llama Packages, cuando se compila un ebuild es actualizado pero hay ocasiones en las que puede ser necesario forzar la regeneración:

emaint binhost --fix

Como prueba se instaló vim de un modo y otro obteniendo los siguientes resultados:

Compilando:

real    39m35.152s  
user    30m41.440s  
sys    1m33.210s  

Binarios:

real    3m1.905s  
user    2m21.840s  
sys    0m6.720s

Como podéis observar el aumento de rendimiento es abrumador.

Si te ha gustado el artículo puedes invitarme a un RedBull aquí