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.
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
|
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
|
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" |