[[TOC(heading=Índice)]] = Pruebas Enviando las imágenes con torrent = == Introducción == Partimos de los explicado en [wiki:ServidorTorrents Añadir soporte Bittorrent en servidor] y de la librería [source:branches/engine-1.0/client/engine/FileTransfer.lib FileTransfer.lib]. Por ahora sólo está probándose cómo compartir ficheros con un servidor centralizado que haría de tracker. Falta ver como compartir ficheros cuando uno de los clientes sea el que sirva de tracker. == Herramienta para los Clientes torrent == Para los equipos clientes se está utilizando el cliente de torrent ctorrent, funciona en línea de comando y permite tanto compartir archivos como generar el fichero de metainformación .torrent. Descartamos otros clientes como bittorrent o bittornado que tienen comandos distintos para cada función, obligándonos a aumentar el número de ficheros que incluimos en nuestros clientes. == Estructura Servidor !OpengGnSys para función de tracker y semillero == Inicialmente estamos dando los servicios desde el mismo equipo donde tenemos el repositorio. Tenemos intalado un tracker y un cliente multiple que hace el papel "semillero" compartiendo todas imágenes que tenemos. === tracker === Las primeras pruebas se han hecho con bttrack de bittornado y de bittorrent. También hemos probado como tracker el modulo de apache mod_bt: * Por ahora a la configuración por defecto sólo le hemos cambiado el puerto. * Tiene la desventaja que en el informe que muestra por web inicialmente sólo no aparecen los nombres de los archivos compartidos sino que se identifican por su hash * Existe una página register donde nos permiten poner los datos del nombre del archivo y el tamaño. * Habría que mirar la seguridad, con la configuración por defecto parece cualquier equipo de la red podría utilizarlo como tracker. === seeder (semillero) === Para lanzar todos los archivos de la imágenes a la vez estamos usando el comando btlaunchmany (no da problemas con los ficheros generados con ctorrent). El cliente comprueba los ficheros torrent que existe en el directorio indicado al arrancar. Con la opción '''"--parse_dir_interval seconds"''' definimos cada cuantos segundos queremos que revise el directorio en busca de cambios (por defecto 0, que es igual a nunca), nosotros ponemos la opción a 20 segundos. En la función para crear el fichero torrent revisamos si existe un archivo con el mismo nombre, si es así lo borramos y esperamos un tiempo igual al --parse_dir_interval para que de tiempo al cliente a detectar que el fichero no existe. Luego generamos el nuevo fichero torrent de forma que el cliente no lo confunde con el anterior y no da error (descrito más adelante). Si modificaramos el valor de la opción '''"--parse_dir_interval seconds"''' al arrancar el cliente, también tendriamos que modificarlo en la función ogCreateTorrent. === Errores posibles === Los errores los hemos detectado ejecutando el cliente desde la consola en vez de iniciarlo con /etc/init.d/opengnsys. La orden ha sido: {{{ btlaunchmany --parse_dir_interval 20 /opt/opengnsys/images }}} ==== "got bad file info" (fichero corrupto) ==== Si generamos un archivo torrent con el cliente ctorrent utilizando ''la ruta completa de archivo'' que queremos compartir, el tracker no reconoce los ficheros .torrent y al lanzar un cliente para que .los comparta recibirá en mensaje de error "got bad file info". ==== rejected by tracker - Requested download is not authorized for use with this tracker. ==== Este error nos aparece cuando un cliente quiere compartir un fichero torrent que no está incluido en el tracker. Si el tracker lo incluye posteriormente, aunque sigue apareciendo el mensaje de error cierto tiempo el fichero se comparte correctamente. El mensaje deja de mostrarse porque el cliente vuelve a solicitar nuevos peer cada cierto tiempo y encuentra el tracker. El tiempo que tarda el cliente en solicitar nuevos pares se configura en el parámetro "--rerequest_interval segundos". El valor por defecto 300, lo dejamos así ya que no nos afecta. ==== "/opt/opengnsys/images/Ubuntu9.img.torrent": "" (0.0%) - 0P0S0.000D u0.0K/s-d0.0K/s u0K-d0K "" ==== La línea correcta sería: {{{ "/opt/opengnsys/images/Ubuntu9.img.torrent": "seeding" (100.0%) - 0P0s0.000D u0.0K/s-d0.0K/s u0K-d0K "" }}} Si estamos compartiendo un archivo, con su fichero torrent ya creado y generamos un nuevo fichero torrent con exactamente la misma información el cliente deja de compartir el archivo. Esto no es normal pero en nuestro caso si generamos una nueva versión de una imagen sí sucedería. El error se evita si dejamos un intervalo de tiempo entre que borramos el fichero torrent anterior y se genera el nuevo, de modo que de tiempo que el cliente revise el directorio y no encuentre ni el archivo nuevo ni el antiguo. Cuando en una revisión posterior vuelve detectar un archivo con el mismo nombre no da error. == Estructura cliente !OpengGnSys para función de tracker y semillero == === Herramientas software necesarias === Para que un cliente !OpenGnsys pueda convertirse puntualmente en tracker debe de disponer de las herramientas necesarias para ello. Tracker: bttrack de bittornado? test OK Seeder: ctorrent ? test OK Exportar el fichero Torrent: nfs ? Pendiente de definir cuales de éstas serán las utilizadas por defecto en el sistema !OpenGnsys. === Propuesta 1: === Según http://www.informatica.us.es:8080/opengnsys/wiki/DirsRepositorio ==== Cliente con función tracket+semillero ==== El cliente cuando deba de crear el fichero torrent a partir de la imagen (*.img) almacenada en su cache, con un punto de montaje tal /mnt/$IP/$OGIMG/xxx.img. Para inciar la funcionalidad Tracker+Semiller, debe lanzar la función StartTracker y ShareTorrent (información /mnt/$IP/$OGIMG/xxx.img) y tenga accesible el fichero torrent (export nfs). ==== Cliente solo descarga ==== Accedera al fichero torrent mountado la cache del cliente Tracker+Semillero en /mnt/$IP/ Siguiendo en tal caso, como si estuviese conectado a un Repo de !OpenGnsys == Funciones y script == === Script === Se han modificado los script de crear y restaurar la imagen para que puedan utilizar el protocolo torrent: ==== createImage ==== Crea una imagen de una partición. Siempre que se crea una imagen se genera el archivo torrent correspondiente en el mismo directorio que la imagen. Si se guarda en el repositorio utiliza como tracker el el mismo servidor, si se guarda en cache utiliza de tracker el equipo local. La sintaxis del script no ha cambiado: {{{ createImagen ndisco nparticion REPO|CACHE imagen ej: createImagen 1 2 REPO Ubuntu9 }}} ==== restoreImagen ==== Restaura una partición desde una imagen, la imagen podrá estar en cache o en el repositorio. Si queremos restaurar el fichero desde la cache primero se comprueba si ya esta guardado en local y en caso de no existir se lo trae del repositorio por el protocolo torrent o unicast. La sintaxis incluye el protocolo para la transferencia del fichero como parámetro opcional, necesario si se restaura desde cache. {{{ restoreImagen REPO|CACHE imagen num_disco num_particion [ TORRENT|UNICAST ] ej: restoreImagen CACHE WinXP 1 1 TORRENT }}} Nota: necesita modificación, despues de ejecutar la salida del teclado no se ve en pantalla, aunque sí funciona. ==== updateCache ==== Por definir. === Funciones === En la librería !FileTransfer.lib aparecen varias funciones relacionadas con torrent. Pasamos a comentarlas: ==== ogCreateTorrent ==== Crea un fichero torrent con la información del archivo de una imagen, se guardará en el mismo directorio donde este la imagen. Hemos de decir darle como parámetro la imagen y la ip del tracker. {{{ ogCreateTorrent [ Repositorio| num_disco num_particion ] Imagen IpTracker ej: ogCreateTorrent 1 1 WinXP 10.1.12.90 ogCreateTorrent REPO Suse 10.1.12.90 }}} ==== ogShareTorrent ==== Comparte una imagen por el protocolo torrent. Hemos de decirle donde está guardado el fichero torrent, le damos los parámetros de la imagen. {{{ ogShareTorrent [ Repositorio| num_disco num_particion ] Imagen ej: ogShareTorrent 1 1 WinXP 10.1.12.90 ogShareTorrent REPO Suse 10.1.12.90 }}} ==== ogReceiveTorrent ==== Obtiene una imagen del repositorio por protocolo torrent, copiándola a la cache local. {{{ ogReceiveTorrent [ Repositorio| num_disco num_particion ] [path_relativo_Imagen] [path_completo_imagen] ej: ogReceiveTorrent 1 1 WinXP ogReceiveTorrent REPO Suse ogReceiveTorrent /mnt/sda2/Ubuntu9 }}}