Estoy intentando sincronizar entre una máquina Linux y una máquina MacOS.
MacOS (yosemite) parece venir con una versión antigua de rsync, así que la actualicé usando homebrew. Bien, parece que tengo versiones que coinciden perfectamente:
wim@wim-imac:~$ rsync --version | head -n 1
rsync version 3.1.1 protocol version 31
wim@wim-imac:~$ ssh wim@wim-dell
wim@wim-dell:~$ rsync --version | head -n 1
rsync version 3.1.1 protocol version 31
Si se "extrae" del cuadro de MacOS (es decir, el destino es local y la fuente es remota), funciona:
wim@wim-imac:~$ rsync -nvvvv wim@wim-dell:/media/wim/wim_2tb/guitar /Volumes/wim2TB/guitar | grep Protocol
(Server) Protocol versions: remote=31, negotiated=31
(Client) Protocol versions: remote=31, negotiated=31
Pero si se envía desde el cuadro de origen (Linux) al Mac, ahora hay un pequeño problema: hay una discrepancia en el protocolo.
wim@wim-imac:~$ ssh wim@wim-dell
wim@wim-dell:~$ rsync -nvvvv /media/wim/wim_2tb/guitar wim@wim-imac:/Volumes/wim2TB/guitar | grep Protocol
(Server) Protocol versions: remote=31, negotiated=29
(Client) Protocol versions: remote=29, negotiated=29
Entonces, el síntoma de esto es que, dado que negociamos el protocolo 29 del mínimo común denominador, no obtengo soporte --iconv
y cualquier nombre de archivo con caracteres divertidos se estropea.
wim@desk35:~$ rsync -nv --iconv=UTF-8,UTF8-MAC /media/wim/wim_2tb/guitar wim@wim-imac:/Volumes/wim2TB/guitar
rsync: on remote machine: --iconv=UTF8-MAC: unknown option
rsync error: syntax or usage error (code 1) at /SourceCache/rsync/rsync-45/rsync/main.c(1333) [server=2.6.9]
rsync: connection unexpectedly closed (0 bytes received so far) [sender]
rsync error: error in rsync protocol data stream (code 12) at io.c(226) [sender=3.1.1]
Busqué cualquier tipo de rsyncd
kick que pudiera estar ejecutándose en Mac usando ps aux
, ps -ef
pero no pude encontrarlo.
¿Por qué la máquina Mac selecciona la versión anterior del protocolo cuando se contacta de forma remota y cómo puedo hacer que use la versión más nueva de rsync que instalé?
Respuesta1
Supongo que la versión casera de rsync está en /usr/local/bin en lugar de /usr/bin (que es como debería ser), pero cuando se realiza rsync desde su sistema Linux, se ejecuta /usr/bin/rsync como agente remoto. Si ese es el problema, debería poder solucionarlo agregando --rsync-path=/usr/local/bin/rsync
(o cualquiera que sea la ruta real en el lado de OS X).
Nota: no reemplace la versión de rsync proporcionada por Apple en el directorio /usr/bin; de esa manera es una locura.