Esta web utiliza cookies, puedes ver nuestra política de cookies, aquí Si continuas navegando estás aceptándola

Utilizar un server como servidor de paquetes binarios en Gentoo


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 rasps y la otra se bajaría e instalaría los paquetes precompilados. Si además en la rasp 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 rasps 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.


Autor: Kr0m -- 26/04/2014 21:04:27