Rsync en MacOS
El programa rsync viene incluido con Mac OSX pero si necesitas una versión más moderna y que soporte más funcionalidades, como por ejemplo preservar metadatos, soporte de caracteres extendidos o caracteres multiplataforma entonces vas a tener que instalarte una de las últimas versiones.
Para poder compilar la última versión necesitarás:
- Saber utilizar Terminal.app
- Tener instaladas las Apple Developer Tools
Los pasos para realizar la instalación son los siguientes. Cuando lo hice se trataba de la versión 3.1.0 que compilé en MacOSX 10.8.5 en modo 64 bits. Como root:
# cd /tmp
# curl -O http://rsync.samba.org/ftp/rsync/rsync-3.1.0.tar.gz
# tar -xzvf rsync-3.1.0.tar.gz
# rm rsync-3.1.0.tar.gz
# curl -O http://rsync.samba.org/ftp/rsync/rsync-patches-3.1.0.tar.gz
# tar -xzvf rsync-patches-3.1.0.tar.gz
# rm rsync-patches-3.1.0.tar.gz
# cd rsync-3.1.0
# patch -p1 < patches/fileflags.diff
# patch -p1 < patches/crtimes.diff
# ./prepare-source
# ./configure
# make
# make install
# mv /usr/local/bin/rsync /usr/bin
Instalación daemon rsyncd en MacOSX
Si lo consideras necesario puedes actualizar a la última versión de rsync tal como describo más arriba. En cualquier caso lo que describo a continuación vale tanto para la última versión como para versiones anteriores.
En esta sección vamos a ver cómo configurar el MacOSX para que arranque “rsync” en modo daemon, o lo que es lo mismo, se ejecute el comando rsync --daemon
en el background.
Para poder ejecutar un “daemon” en el Mac y que arranque en cada boot hay que usar “launchd” y “launchdctl” para cargar un fichero XML que describa qué proceso quieres ejecutar en modo daemon. El fichero XML es un fichero “PLIST o property list” que se instala como root en /Library/LaunchDaemon.
Así que allá vamos. Crear el fichero org.samba.rsync.plist
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Disabled</key>
<false/>
<key>Label</key>
<string>org.samba.rsync</string>
<key>Program</key>
<string>/usr/bin/rsync</string>
<key>ProgramArguments</key>
<array>
<string>/usr/bin/rsync</string>
<string>--daemon</string>
<string>--config=/etc/rsyncd.conf</string>
</array>
<key>inetdCompatibility</key>
<dict>
<key>Wait</key>
<false/>
</dict>
<key>Sockets</key>
<dict>
<key>Listeners</key>
<dict>
<key>SockServiceName</key>
<string>rsync</string>
<key>SockType</key>
<string>stream</string>
</dict>
</dict>
</dict>
</plist>
Desde Terminal.app y como root copio el fichero a /Library/LaunchDaemons
# cp org.samba.rsync.plist /Library/LaunchDaemons/
Creo el fichero /etc/rsyncd.conf
pid file = /var/run/rsyncd.pid
use chroot = yes
read only = yes
charset = utf-8
\[Datos\]
path=/Volumes/Datos
comment = Repositorio de Luis
uid = luis
gid = luis
list = yes
read only = false
auth users = luis
secrets file = /etc/rsync/rsyncd.secrets
Fichero de secretos /etc/rsync/rsyncd.secrets. Usar la misma contraseña (Clean) que usará el cliente.
luis:CONTRASEÑA
# chmod 400 rsyncd.secrets
Cargo el plist en el registro de launchd. El proceso “rsync –daemon” no arranca, lo que estamos haciendo es que se registre el servicio y cuando llegue una petición al puerto 783 el proceso launchd se encargará de arrancar “rsync –daemon”.
# netstat -na|grep 873
:
# launchctl load -w /Library/LaunchDaemons/org.samba.rsync.plist
# netstat -na|grep 873
tcp6 0 0 \*.873 \*.\* LISTEN
tcp4 0 0 \*.873 \*.\* LISTEN
Desde un cliente podemos comprobar que está funcionando
$ rsync --stats luis@miservidor.midominio.com::Datos
Password:
:
sent 58 bytes received 618 bytes 193.14 bytes/sec
total size is 24580 speedup is 36.36