RivetTracker: Monta tu propio tracker torrent | Algo de Linux

miércoles, 19 de febrero de 2014

RivetTracker: Monta tu propio tracker torrent

Muchas veces he compartido archivos con otros compañeros en la intranet mediante un servidor apache instalado en alguna de las máquinas del centro. Teniendo en cuenta que la máquina usada para tal fin no era un servidor propiamente dicho y que muchas veces los archivos a compartir eran muy grandes (como por ejemplo, imágenes de clonación), hemos tenido los siguientes inconvenientes:
  • La máquina desde la que lo compartía se sobrecargaba al hacer un uso intensivo de disco cuando mucha gente descargaba a la vez.
  • Las descargas se hacían lentas.
Una solución que me pareció interesante, fue montar un Tracker y compartir los archivos mediante bittorrent. De este modo:
  • No hay una única fuente de descarga.
  • Se comparte el archivo entre todos.
  • Las descargas serán más rápidas.
Buscando y leyendo un poco en internet, al final me decidí por usar RivetTracker, un servidor tracker de torrents montado sobre apache, php y mysql.


RivetTracker me va a permitir gestionar la configuración y subidas de archivos mediante una interfaz web:
http://IPservidor/tracker

Me interesa configurar el tracker usando la IP, en lugar de un servidor de nombres para que desde otros centros se pueda acceder al tracker sin tener registrado el nombre de la máquina en sus servidores dns.

Antes de pasar a la instalación, como habrá gente que no sabe de qué va el tema, vamos a explicar algunos términos:

¿Qué es Bittorrent?
Bittorrent es sencillamente un protocolo de comunicación P2P para compartir ficheros.

¿Cómo funciona?
El usuario deberá instalar un cliente de Bittorrent. Cada vez que quiera descargar un archivo, descargará un fichero .torrent desde algún sitio web. Este fichero .torrent contiene la información necesaria para que el programa cliente pueda obtener el archivo, entre ella, la información del tracker que gestiona la descarga del mismo.

¿Qué es un tracker?
Es un servidor cuya función es poner en conexión a los clientes que están descargando y/o compartiendo un determinado archivo. Es importante destacar que el tracker normalmente no contiene los archivos. Tan sólo conecta a los usuarios que tienen partes del archivo que están descargando o compartiendo.


¿Qué son los peers?
Se llama peers a los clientes. Éstos pueden ser de dos tipos:
  • seeders: Clientes que están haciendo de fuente de partes de un archivo.
  • leechers (sanguijuelas): Clientes que están descargando partes de un archivo.

Un usuario comienza siendo leecher, cuando aún no tiene partes de un archivo y termina convirtiéndose en seeder cuando comparte partes de un archivo.

¿Qué son seeds?
Son semillas. Un usuario seeder es aquél que tiene una copia completa de un archivo de un cierto torrent. Cuando alguien termina  una descarga, lo normal es que deje su programa cliente abierto para que otros puedan descargar. La filosofía es compartir.

¿Qué es el re-seeding?
Cuando un cliente tiene el archivo completo, puede compartirlo de nuevo para que otros lo descarguen, si dispone además del archivo .torrent. En particular, el cliente de bittorrent Transmission tiene una opción "Verificar datos locales" que nos permite hacer re-seeding fácilmente.

Bien, pues una vez entendida toda la terminología, vamos a ver cómo instalar RivetTracker:

Requisitos previos.- Tener instalado:
  • Apache.
  • Php.
  • Mysql.
No vamos a entrar en detalles sobre cómo instalar los requisitos previos para evitar hacer un tutorial demasiado largo.


Primero.- Descargamos RivetTracker desde sourceForge: http://sourceforge.net/projects/rivettracker/files/ Si queréis hacerlo directamente mediante wget:

# wget --trust-server-name http://downloads.sourceforge.net/project/rivettracker/rivettracker/RivetTracker%201.03/rivettracker_1-03.zip?r=http%3A%2F%2Fsourceforge.net%2Fprojects%2Frivettracker%2Ffiles%2F&ts=1392807657&use_mirror=optimate

Segundo.- Una vez descargado, lo descomprimimos en /var/www:

# unzip rivettracker_1-03.zip -d /var/www/

Tercero.- Se nos ha creado una carpeta llamada rivettracker. La renombramos para que el nombre sea genérico al usar el tracker:

# mv /var/www/rivettracker /var/www/tracker

Cuarto.- Ahora vamos a configurar RivetTracker. Así que abrimos un navegador en un equipo cualquiera de nuestra red e introducimos la dirección al archivo de instalación:

http://IP.DEL.SERVIDOR/tracker/install.php

En lugar de la IP, podríamos usar el nombre del servidor. Como ya comenté, en mi caso me interesa usar la IP. Así que, para configurar mi servidor introduzco la siguiente dirección:

http://172.19.144.16/tracker/install.php

Se nos mostrará la pantalla de inicio de la instalación. En esta pantalla se nos ofrecen dos opciones. Como no tengo aún creados el usuario, el password y el nombre de la base de datos, hago clic en el segundo botón, que me va a permitir crearlos:



Se abrirá una pantalla como la siguiente, donde tendré que introducir:
  • El usuario administrador con permisos para poder crear la B.D. En mi caso: root.
  • La password del administrador.
  • El nombre del host que aloja la base de datos. En mi caso: localhost.
  • Un nombre de usuario para esta BD. En mi caso lo he llamado: tracker
  • La contraseña de dicho usuario.
  • El nombre de la B.D. rivet.


Una vez introducidos todos los datos, pulsamos el botón "Install".

A continuación, introducimos los datos para configurar el servidor. Como mínimo introducimos:
  • Un nombre de usuario que va a tener permisos para subir torrents al tracker. En mi caso, le he llamado: gestor.
  • La contraseña para el usuario anterior.
  • Un nombre de usuario para el administrador del tracker. En mi caso, he elegido: root. El administrador tendrá acceso a un panel de administración con el que podrá modificar la configuración del servidor, subir nuevos torrents, borrarlos, editarlos, etc...
  • La contraseña para el usuario administrador.
  • La url principal del tracker seguido del nombre del directorio donde hemos instalado la aplicación RivetTracker: http://172.19.144.16/tracker (En la captura de pantalla podéis ver que inicialmente usé el nombre del servidor, pero lo cambié a la IP)
  • Por último, seleccionamos la zona horaria en la que se encuentra el servidor.
  • Y pulsamos el botón "Create Config File" para crear el fichero de configuración:


Todos los ajustes configurados, podemos modificarlos posteriormente desde el panel de control del usuario administrador, así que no os preocupéis si tenéis que cambiar algún ajuste después.

Al pulsar el botón "Create Config File", si todo ha ido bien, se nos mostrará una pantalla como la siguiente:


Como podéis ver, al terminar el proceso de configuración, el instalador nos informa sobre tres cosas:
  • Se ha creado el archivo de configuración config.php.
  • Si hemos terminado el proceso de configuración, debemos borrar el archivo install.php.
  • Debemos revisar los permisos para asegurarnos de que los directorios torrents y rss se encuentran accesibles en modo escritura para el servidor.
No olvidéis revisar estos tres puntos, sobre todo lo de borrar el archivo install.php.

Una vez instalado y configurado el servidor, vamos a realizar unos pequeños ajustes adicionales para lo que nos conectaremos al servidor en un terminal local o vía ssh. 

Quinto.- Como es posible que el directorio /var se me termine quedando pequeño y tengo espacio en otro disco duro que tiene montado el servidor para las copias de seguridad, voy a crear una carpeta para los torrents en el segundo disco duro y voy a montarlo mediante bindfs en el directorio de torrents del primero. Veámoslo paso a paso:

Creo la carpeta en el segundo disco duro del servidor:


A continuación hago el bindfs para que se monte en la carpeta de torrents del servidor:


Como ya sabéis, si monto así el directorio de torrents, la próxima vez que reinicie, no se realizará el montaje. Para que el montaje se efectúe automáticamente en cada inicio de la máquina, tendré que configurarlo en el fichero /etc/fstab:


Sexto.- Voy a crear un directorio download dentro de la carpeta /var/www/tracker/torrents donde almacenaré los archivos que voy a compartir vía torrent:

# mkdir /var/www/tracker/torrents/download

Séptimo.- Voy a asignar el usuario www-data como propietario y grupo del directorio /var/www/tracker y todo su contenido:

# chown -R www-data:www-data /var/www/tracker

Y eso es todo!!!

Bueno, por si en algún momento quisiéramos crear un fichero torrent directamente, en el propio servidor, podríamos instalar el paquete transmission-cli:

# apt-get -y install transmission-cli

Una vez instalado, podríamos utilizarlo del siguiente modo para crear un torrent:


Una vez creado, tendríamos que subirlo al servidor. Aunque supongo que esta tarea os resultará más cómodo realizarla con el cliente gráfico de transmission, pero para no mezclar coas, dejemos esto de momento para otro post.

Publicado por primera vez en http://enavas.blogspot.com.es

4 comentarios:

Ledwin Rivas dijo...

Saludos un exelente manual, existe un problema con la version de php en la que fue desarrollado el servidor

mensaje en guindon$
Fatal error: Cannot redeclare hex2bin() in C:\Apache24\htdocs\rivettracker\funcsv2.php on line 80

mensaje en gnu/linux
Fatal error: Cannot redeclare hex2bin() in var/www/rivert/funcsv2.php on line 80

la solucion es redifinir la funcion

comenta o descomenta la funcion que esta en la linea 80
funcion original
function hex2bin ($input, $assume_safe=true)
{
if ($assume_safe !== true && ! ((strlen($input) % 2) === 0 || preg_match ('/^[0-9a-f]+$/i', $input)))
return "";
return pack('H*', $input );
}

cambiala por esta otra


if(!function_exists('hex2bin'))
{
function hex2bin ($input, $assume_safe=true)
{
if ($assume_safe !== true && ! ((strlen($input) % 2) === 0 || preg_match ('/^[0-9a-f]+$/i', $input)))
return "";
return pack('H*', $input );
}
}

Esteban M. Navas Martín dijo...

Gracias por la ampliación! En Debian Squeeze funciona tal cual. No es necesario redefinir ninguna función. ¿Podrías decirme en qué distribución de linux has tenido que realizar la modificación? Seguro que le viene bien saberlo a quien lo instale en el mismo sistema que tú.

Ledwin Rivas dijo...

saludos tengo instalado debian wheezy 3.2.0-4-amd64

y segui esta guia

http://cwcyrix.no-ip.info/rivettracker_1.03-1.04_patches.txt

hay que hacer modificaciones en varias paginas php, agregar codigo, reemplazar, despues de eso todo va muy bien,

exitos!!

Ledwin Rivas dijo...

lo que hice fue montar el servidor de torrent en una raspberry pi, tengo instalado raspberian 3.10.25 todo va bien con las modificaciones que hice seguiendo la guia
http://cwcyrix.no-ip.info/rivettracker_1.03-1.04_patches.txt

ahi tengo montado tambien un owncloud, y ahora el servidor torrent y anda exelente sin conflicto tu guia es explicada y tiene detalles de conceptos muy entendibles.

tambien me apoye un poco con esta guia
http://www.forat.info/2012/02/13/servidor-tracker-torrent-ubuntu-server/

recurro a otras fuentes por que la solucion de ese error era recurrente, pero la solucion final esta en el primer link que esta en este comentario, visite los links para bajar la version mas reciente del server de torrent pero esta muerto, y modificarlo no cuesta mucho,