jueves, septiembre 13, 2007

Sincronización de direcotrios remotos.

Instalamos rsync tanto en el cliente como en el servidor:
apt-get install rsync
Como curiosidad comentar que no hay paquete de cliente y paquete de servidor, si no que todo forma parte de un solo paquete.
Copiamos el fichero de configuración de ejemplo a /etc:
cp /usr/share/doc/rsync/examples/rsyncd.conf /etc/
Editamos el fichero:
vi /etc/rsyncd.conf
# sample rsyncd.conf configuration file

# GLOBAL OPTIONS

#motd file=/etc/motd
#log file=/var/log/rsyncd
# for pid file, do not use /var/run/rsync.pid if
# you are going to run rsync out of the init.d script.
pid file=/var/run/rsyncd.pid
#syslog facility=daemon
#socket options=

# MODULE OPTIONS

[sincronizable]

comment = recurso sincronizable
path = /home/usuario/rsync
use chroot = yes
max connections=3
lock file = /var/lock/rsyncd
# the default for read only is yes...
read only = yes
list = yes
uid = nobody
gid = nogroup
# exclude =
# exclude from =
# include =
# include from =
# auth users =
# secrets file = /etc/rsyncd.secrets
strict modes = yes
# hosts allow =
# hosts deny =
ignore errors = no
ignore nonreadable = yes
transfer logging = no
# log format = %t: host %h (%a) %o %f (%l bytes). Total %b bytes.
timeout = 600
refuse options = checksum dry-run
dont compress = *.gz *.tgz *.zip *.z *.rpm *.deb *.iso *.bz2 *.tbz

Con esto tenemos un recurso llamada sincronizable donde sólo se puede leer, si deseamos que se requiera de una contraseña tan sólo debemos de descomentar la fila secret file y añadir al fichero /etc/rsyncd.secrets una entrada con el formato "usuario":"password".

Una de las cosas que más me a sorprendido de rsync es que se puede arrancar como demonio o desde xinetd como cualquier otro servicio, pero este sólo se puede arrancar como demonio de la siguiente forma:
rsync --daemon --config=/etc/rsyncd.conf

Como podemos comprobar ahora ya se encuentra a la escucha.
debianvmware:/home/jujo# netstat -tuna|grep 873
tcp 0 0 0.0.0.0:873 0.0.0.0:* LISTEN
tcp6 0 0 :::873 :::* LISTEN

Comprobamos su correcto funcionamiento:
rsync localhost::

sincronizable recurso sincronizable

En cambio si lo hacemos desde /etc/init.d/ como el resto de servicios este no funciona:
/etc/init.d/rsync start
netstat -tuna|grep 873

Si preferimos activarlo desde Xinetd editamos o creamos el fichero /etc/xinetd.d/rsync

service rsync
{
disable = no
socket_type = stream
wait = no
user = root
server = /usr/bin/rsync
server_args = --daemon
log_on_failure += USERID
}

Recordad que si usamos xinetd hay que reiniciarlo:
/etc/init.d/xinetd restart

Ahora desde otra máquina serí­a tan sencillo como:

rsync -azuv dir_servidor::sincronizable/* "dir local"

Si requiere de contraseña:
rsync -azuv --password-file=/password.rsync -e ssh usuario@dir_servidor:rsync "dir local" PASSWORD

Opciones:
-a preserva todos los atributos de los ficheros
-z comprime
-u update
-v verbose
-n simulación
-e ssh
--delete si en orige no está borra en destino

Si lo queremos sincronizar a través de SSH:
rsync -azuv -e ssh usuario@dir_servidor:path_sincronizable "dir local"

Esta opción es como usar una opción de ssh donde se puede sincronizar, pero realmente no es necesario tener el demonio rsync a la escucha ni como daemon ni por xinetd.

No hay comentarios: