Compartir portage

Contenido:

1. Introducción

Cuando se tienen varias máquinas con Gentoo en una misma red local es una pérdida de tiempo y ancho de banda hacer emerge --sync contra un servidor de Internet en cada una de ellas. En vez de eso lo que podemos hacer es ejecutar emerge --sync contra un servidor de Internet en una sóla máquina y en el resto hacerlo contra la máquina anterior. Es decir, podemos tener nuestro propio servidor rsync dentro de la red local.

Las ventajas son una sincronización rapidísima del árbol del portage y un ahorro sustancial de ancho de banda tanto para nosotros como para los servidores rsync de Gentoo. Además con una tarea en el crontab para que todos los días se sincronice nuestro servidor tendremos garantizado que nuestro servidor rsync estará siempre al día.

Y por último también podremos compartir el directorio /usr/portage/distfiles/ para no tener que descargar lo mismo dos veces, ahorrando, una vez más, ancho de banda para nosotros y para los servidores de Gentoo. Para compartir ese directorio del servidor usaremos NFS.

2. Datos usados en los ejemplos

Clave Explicación Ejemplo
$IP_SERVIDOR La dirección IP del servidor dentro de la red local 192.168.1.100
$TU_RED_LOCAL Todo el rango de direcciones IP de tu red local 192.168.1.0/24

3. Configurando el servidor rsync

No es necesario la instalación de ningún paquete.

Fichero /etc/rsyncd.conf

Configuramos el fichero /etc/rsyncd.conf. Lo más importante aquí es especificar qué hosts pueden conectar, qué directorio sincronizamos y qué directorios excluímos.

Listado de código 3.1: contenido del fichero

pid file = /var/run/rsyncd.pid
use chroot = yes
read only = yes
hosts allow = $TU_RED_LOCAL
[gentoo-portage]
path = /usr/portage
comment = Gentoo Portage tree
exclude = /distfiles /packages

Ahora añadimos el servicio rsync al nivel de ejecución por defecto para que arranque automáticamente cada vez que el servidor se pona en marcha.

Listado de código 3.2: ejecutar en el arranque

# rc-update add rsyncd default

4. Añadir la tarea al crontab

Para mantener nuestro servidor rsync siempre al día lo mejor es que cada día se sincronice de forma automática. Esto se consigue añadiendo una tarea en el crontab. Y para eso hace falta tener instalado un demonio cron, por ejemplo vixie-cron.

Listado de código 4.1: instalar el demonio cron

# emerge vixie-cron

Para añadir la tarea hay que editar el crontab de root.

Listado de código 4.2: editar crontab

# crontab -e

Añadimos esta linea y guardamos los cambios.

Listado de código 4.3: añadir tarea

0 4 * * * emerge --sync --quiet

Esa linea significa que todos los días a las 04:00 se ejecutará la órden emerge --sync --quiet
La primera cifra es el minuto (de 0 a 59).
La segunda cifra es la hora (de 0 a 23).
La tercera cifra es el día del mes (de 1 a 31).
La cuarta cifra es el mes (de 1 a 12).
La quinta cifra es el día de la semana (de 0 a 6; 0=domingo, 1=lunes, 2=martes, etc.)

También hacemos que el demonio cron se ejecute automáticamente durante el arranque del sistema

Listado de código 4.4: ejecutar en el arranque

# rc-update add vixie-cron default

5. Compartir el directorio distfiles

Para compartir este directorio con NFS necisitamos tener un kernel con soporte para NFS y además tener instalado el paquete nfs-utils

Listado de código 5.1: configuración del kernel

File systems --->
  [*] Network File Systems --->
     < >   NFS client support
     <*>   NFS server support
     [*]           NFS server support for NFS version 3
     [ ]             NFS server support for the NFSv3 ACL protocol extension
     [ ]           NFS server support for NFS version 4 (EXPERIMENTAL)

Listado de código 5.2: instalar nfs-utils

# emerge nfs-utils

Ahora vamos a especificar qué directorio compartimos y quién tiene permismo para acceder. El directorio será /usr/portage/distfiles/ y las máquinas autorizadas serán todas las de nuestra red local. Esa configuración se lleva a cabo en el fichero /etc/exports

Listado de código 5.3: fichero /etc/exports

/usr/portage/distfiles $TU_RED_LOCAL(async,rw,no_subtree_check,insecure,no_root_squash)

Para terminar la parte del servidor hacemos que el demonio nfs se ejecute durante el arranque.

Listado de código 5.2: ejecutar en el arranque

# rc-update add nfs boot

6. Configurando los clientes

Ahora hay que modificar ciertas cosas en el resto de máquinas de nuestra red local para que usen nuestro servidor cada vez que hagan emerge --sync y para que el directorio compartido /usr/portage/distfiles/ del servidor se monte en cada una de las máquinas. Los requisitos son tener un kernel con soporte NFS, tener el paquete nfs-utils instalado y el directorio /usr/portage/distfiles/ vacío.

Listado de código 6.1: configuración del kernel

File systems --->
  [*] Network File Systems --->
     <*>   NFS client support
     [*]           NFS client support for NFS version 3
     [ ]             NFS client support for the NFSv3 ACL protocol extension
     [ ]           NFS client support for NFS version 4 (EXPERIMENTAL)
     [ ]           Root file system on NFS
     < >   NFS server support

Listado de código 6.2: instalar nfs-utils

# emerge nfs-utils

Listado de código 6.3: vaciar /usr/portage/distfiles/

# rm -Rf /usr/portage/distfiles/*

Ahora añadimos en el fichero /etc/fstab la linea que montará el directorio compartido.

Listado de código 6.4: modificar /etc/fstab

$IP_SERVIDOR:/usr/portage/distfiles	/usr/portage/distfiles	nfs	rw 0 0

También haremos que ese directorio se monte automáticamente durante el arranque del sistema.

Listado de código 6.5: ejecutar en el arranque

# rc-update add nfsmount default

Y para acabar sólo nos queda añadir una linea en el fichero /etc/make.conf para que cuando hagamos emerge --sync lo haga usando nuestro propio servidor.

Listado de código 6.6: modificar /etc/make.conf

SYNC="rsync://$IP_SERVIDOR/gentoo-portage"