2008-08-29 11 views
7

A pesar de ser principalmente un usuario de Windows, soy un gran admirador de rsync. Ahora, no quiero discutir las virtudes de rsync frente a cualquier otra herramienta ... este no es mi punto.Obstáculos técnicos para Win32 rsync puerto

La única forma que he encontrado de ejecutar rsync en Windows es a través de una versión que está diseñada para ejecutarse sobre Cygwin, y como Cygwin tiene problemas con Unicode, también lo hace rsync.

¿Alguien está lo suficientemente familiarizado con el funcionamiento de rsync para decir si hay algún obstáculo de programación técnico real para portar rsync a un binario Win32 nativo?

¿O es que tal vez nunca hubo suficiente interés por parte de los usuarios de Windows como para preocuparse por el puerto?

En parte lo pregunto porque estoy considerando intentar asumir la tarea de iniciar un puerto, pero quiero asegurarme de que no me falta algo en cuanto a por qué no es posible.

Respuesta

5

La forma en que Windows bloquea los archivos abiertos puede causar un problema que requiera que se enganche en el Servicio de Volume Shadowcopy.

Hace aproximadamente dos años este compañero portó el algoritmo a C#. No he echado un vistazo al código (o al binario proporcionado), pero podría ser un lugar para comenzar a buscar o alguien para intentar contactar.
http://www.russiantequila.com/wordpress/?p=8

+0

Actualización rápida para acelerar las cosas para alguien navegando casualmente: El autor, @kolosy, puso la fuente en github en 2009, y desde entonces la única actividad ha sido actualizaciones hasta mediados de 2010 por Matthew Steeples: https: // github.com/MatthewSteeples/rsync.net – Tao

0

Ha visto esto:

http://www.itefix.no/i2/taxonomy/term/39

he utilizado cwRsync sin ningún problema (y con la mayor parte de la miseria cygwin habitual), pero no he tenido ninguna necesidad de Unicode nombres de archivo, entonces no he visto ese problema.

Realmente no sé por qué no hay un puerto Win32 nativo, pero miré la fuente hace un tiempo porque implementé un sistema delta-copy similar en C#. Como era de esperar del mundo de los hackers brillantes * nix, la fuente son en gran parte nombres de variables de un solo carácter y una ausencia total de comentarios, lo que no es terriblemente útil y podría ser algo desagradable para los aspirantes a porteros.

0

He estado evaluando un esfuerzo para llevar a cabo un puerto win32 también. No creo que nada importante lo bloquee, pero las pruebas tanto del rsync mailing list como de otra discusión apuntan a una gran dependencia de las llamadas al sistema unix fork(). Usar hilos parece ser el camino a seguir para win32.

Threads vs. Fork discussion

+0

"Uso de hilos aparece el camino a seguir para Win32" - o I/o Puertos de finalización si desea modificar la escala realmente bien ... –

1

(exención de responsabilidad: Lo prometo, no Google mismo, pero Google Analytics me trajo aquí)

pasé por portar rsync a .NET (enlace de SIG11 es mi blog). no hay obstáculos técnicos, solo prácticos. como ya se dijo, el código es bastante ... denso. difícil de seguir y completa falta de comentarios. Estoy más que feliz de poder hacer que mi trabajo esté disponible, pero desafortunadamente, como era parte de un esfuerzo comercial, no está en una mejor forma.

En varias ocasiones, he tenido problemas con la idea de aplicar ingeniería inversa al protocolo y hacer una implementación básica que sea compatible con el cable existente, pero ... un poco más limpio para trabajar con . Incluso he comenzado una wiki para ese efecto, pero ... como se puede ver por la falta de contenido allí, otros elementos han tenido prioridad. si alguien quisiera trabajar conmigo en esto, ese puede ser el ímpetu que necesito para irme.

el concepto de la herramienta es grande, ya que es la funcionalidad que ofrece, sin embargo es bastante limitado fuera del espacio ix *, y sin duda podría beneficiarse de una API.

enlace wiki de referencia:

http://www.russiantequila.com/wiki/index.php?title=Main_Page

+0

Kolosy, me encantaría obtener una bodega de una copia de lo que tienes Quizás incluso echar una mano si puedo. Estoy de acuerdo, una versión más limpia con una API sería genial, pero sinceramente en este punto, mi primera prioridad es una versión de Windows que no confíe en Cygwin –

+0

hey, ¿qué hay de malo en googlear? :) – Tao

+0

Voy a ayudar, sin embargo, me gustaría implementarlo en C/C++ y también me gustaría crear una versión LIB del código para que podamos separarlo y usarlo en un Win32/GUI nativo también como un servicio de Windows con GUI configurando el servicio. – Eric

0

Realmente apreciaría un puerto de rsync para MS-Windows, que puede ser construido utilizando Visual Studio. Me encuentro con varios errores de protocolo al azar, de forma intermitente. Estoy usando rsync para distribuir sw a una grilla de alrededor de 200 máquinas y generalmente obtengo alrededor de una docena de fallas. Estoy usando GCC 4.4.2 y el último cygwin para compilar rsync v3.0.7. Me ayudaría mucho si pudiera experimentar con una versión que no requiere cygwin. Esto se debe a que las máquinas en la red ya tienen otra aplicación basada en cygwin en ejecución, que es una versión diferente a la que tengo.

Después de pasar algún tiempo en la lista de correo rsynv opinión parece estar dividida en cuanto a causa de errores de protocolo en MS Windows. Algunos dicen que es un error en rsync en el que no se pudo cerrar el socket, un error que se solucionó hace un tiempo. Otros dicen que es un error de protocolo fundamental en rsync donde el cliente no le dice al servidor que ha terminado, simplemente se apaga, lo que hace que los servidores MW-windows obtengan una señal RST en el socket, algo que no ocurre en Unix. .