Torrent

may. 30, 2011·
Julio Batista Silva
Julio Batista Silva
· 9 min de lectura

Post actualizado en agosto de 2012

Este artículo está bastante desactualizado. Mi recomendación actual es usar Docker.

Sin dudas, el torrent es uno de los mejores protocolos para compartir archivos.

Para un acumulador de datos (data hoarder), es importante tener un cliente potente y bien configurado para manejar miles de torrents sin usar mucha memoria.

Mis clientes favoritos para Linux son Deluge, Transmission y rTorrent. Ya tuve problemas con el primero, pues parecía no aguantar muchos archivos, unos 600 en la época, y muchas veces se colgaba. El segundo es más simple, pero muy bueno, fácil de configurar y con interfaces para Gnome y KDE. En este post trataré del tercero, rTorrent, que es el cliente que uso actualmente y aparenta ser el más liviano, potente y con más opciones de configuración.

rTorrent

ATENCIÓN: si quieres usar Pyroscope, salta la instalación de xmlrpc, libtorrent y

rtorrent. El script de instalación de libtorrent instala versiones de esos paquetes automáticamente.

Instalación por el gestor de paquetes

  1. Instala rTorrent como se explica en la wiki:

    sudo pacman -S rtorrent
    

    Esto es suficiente para tener la última versión estable de rTorrent funcionando. Para mucha gente esto es suficiente, pero yo prefiero ejecutar la versión en desarrollo.

    Otro motivo para compilar rTorrent es para añadir parches, y necesito que sea una versión compilada con la bandera --with-xmlrpc-c.

Instalación de dependencias

  1. Crea una carpeta para svn:

      sudo mkdir /srv/svn
    
  2. Pon tu usuario como propietario de esa carpeta:

      sudo chown -R julio.users /srv/svn
    
  3. Elimina los programas que serán instalados por svn:

      sudo pacman -R xmlrpc-c rtorrent
    
  4. Instala CPPUNIT y libsigc++:

      sudo pacman -S cppunit libsigc++
    
  5. Exporta la variable PKG_CONFIG_PATH:

      PKG_CONFIG_PATH=/usr/local/lib/pkgconfig
      export PKG_CONFIG_PATH
    
  6. Instala xmlrpc-c:

      cd /srv/svn
      svn co http://xmlrpc-c.svn.sourceforge.net/svnroot/xmlrpc-c/advanced xmlrpc-c
      cd xmlrpc-c
      ./configure
      make
      sudo make install
    

Instalación por Git

AUR

En la fecha de la primera edición de este post todavía no existía el paquete rtorrent-git en AUR. En realidad, rtorrent se mantenía en SVN en aquella época. Pero para nuestra alegría, un miembro generoso de la comunidad está manteniendo el paquete en este enlace: https://aur.archlinux.org/packages.php?ID=53151. Solo hay que descargar y ejecutar; el PKGBUILD ya viene con las banderas que uso.

Manualmente

  1. Crea una carpeta para mantener programas descargados con git:

    [root@julio-acer ~]# mkdir /srv/git/
    julio@julio-acer ~> cd /srv/git
    
  2. Clona el repositorio oficial de libtorrent

    julio@julio-acer /srv/git> git clone https://github.com/rakshasa/libtorrent
    
  3. Entra en el directorio descargado y compila libtorrent

    julio@julio-acer /srv/git> cd libtorrent
    julio@julio-acer /srv/git/libtorrent> ./autogen.sh
    julio@julio-acer /srv/git/libtorrent> ./configure
    julio@julio-acer /srv/git/libtorrent> make
    julio@julio-acer /srv/git/libtorrent> make check
    
  4. Instala libtorrent

    julio@julio-acer /srv/git/libtorrent> sudo make install
    
  5. Exporta la variable PKG_CONFIG_PATH

    julio@julio-acer ~> export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig
    
  6. Clona el repositorio de rtorrent.

    julio@julio-acer /srv/git> git clone https://github.com/rakshasa/rtorrent
    
  7. Compila rtorrent con la opción xmlrpc (requerida por algunas interfaces)

    julio@julio-acer /srv/git/rtorrent> ./autogen.sh
    julio@julio-acer /srv/git/rtorrent> ./configure --with-xmlrpc-c
    julio@julio-acer /srv/git/rtorrent> make
    
  8. Instala rtorrent

    julio@julio-acer /srv/git/rtorrent> sudo make install
    

Instalación por SVN

UPDATE: El desarrollo de rtorrent fue movido a git y el svn es solo un mirror, por lo tanto prefiere la instalación por git, explicada arriba.

  1. Instala libtorrent:

    cd /srv/svn
    svn co svn://rakshasa.no/libtorrent/trunk rtorrent
    cd rtorrent/libtorrent
    ./autogen.sh
    ./configure
    make
    sudo make install
    sudo ldconfig
    
  2. Instala rtorrent:

    cd ../rtorrent
    ./autogen.sh
    ./configure - -with-xmlrpc-c (observa los dos guiones antes de with)
    make
    sudo make install
    

Configuración de rTorrent

La configuración se hace a través del archivo “~/.rtorrent.rc”. Por él podemos configurar rTorrent para:

  • Usar un rango específico de puertos
  • Limitar la velocidad de descarga/subida
  • Vigilar una carpeta y bajar todos los .torrents que haya
  • Ejecutar un script tras la finalización de la descarga
  • y mucho más…

En mi notebook, el funcionamiento es el siguiente:

  • Todo se guarda en un disco duro externo, que está siempre conectado

  • En la carpeta /media/externo/Downloads/Torrents/rtorrent/watch existen otras carpetas

    • Ebooks » Contiene .torrent de ebooks
    • Filmes » Contiene .torrent de películas
    • Musicas » Contiene .torrent de álbumes
    • Seriados » Contiene .torrent de series
    • Misc » Contiene .torrent de todas las otras categorías

Estas carpetas son vigiladas constantemente por rTorrent. Cuando agrego un archivo .torrent en alguna de ellas, inicia la descarga automáticamente a la carpeta /media/externo/Downloads/Torrents/leeching/{Ebooks,Filmes,Misc,Musicas,Seriados}/

Tras la finalización de la descarga, los archivos son movidos a la carpeta /media/externo/Downloads/Torrents/seeding/{Ebooks,Filmes,Misc,Musicas,Seriados}/

  • Crea las carpetas:

    mkdir \
      /media/externo/Downloads/Torrents/leeching/{Ebooks,Filmes,Misc,Musicas,Seriados,Programas} \
      /media/externo/Downloads/Torrents/seeding/{Ebooks,Filmes,Misc,Musicas,Seriados,Programas} \
      /media/externo/Downloads/Torrents/rtorrent/sessions \
      /media/externo/Downloads/Torrents/rtorrent/watch/{Ebooks,Filmes,Misc,Musicas,Seriados,Programas}
    

Decidí dejar las carpetas sessions y watch en el disco externo mismo, pues así puedo conectarlo a otro ordenador que tenga rtorrent instalado y continuar las transferencias sin problema. Para bajar algo con el disco externo desconectado, será necesario utilizar un .rtorrent.rc modificado, pues no encontrará la carpeta sessions y ni iniciará.

Mi .rtorrent.rc puede encontrarse en GitHub. Buena parte fue tomada de aquí.

Enlaces magnéticos (Magnet)

Magnet URI

rTorrent 0.8.9

Necesitarás activar DHT.

Guarda el siguiente script en algún lugar (uso ~/Scripts/magnet_torrent.sh aquí):

#!/bin/bash

cd /media/externo/Downloads/Torrents/rtorrent/watch/Misc
[[ "$1" =~ xt=urn:btih:([^&/]+) ]] || exit;
echo "d10:magnet-uri${#1}:${1}e" > "meta-${BASH_REMATCH[1]}.torrent"
julio@julio-acer ~> ~/Scripts/magnet_torrent.sh \
   "magnet:?xt=urn:btih:1234567890&dn=Meu+Torrent&tr=udp%3A%2F%2Ftracker.com%3A80&tr=udp%3A%2F%2Ftracker2.com%3A80"

Este comando creará el archivo meta-1234567890.torrent en tu carpeta.

RuTorrent

Usar rTorrent solo con la interfaz ncurses es un poco complicado. Una buena solución es instalar una interfaz web.

Aquí estoy usando ruTorrent, similar a la interfaz de µtorrent, que me permite gestionar los torrents por la web. Para eso es necesario configurar Apache y PHP antes.

Parte de los pasos fueron tomados del foro de ArchLinux y de la wiki de ruTorrent.

RuTorrent: Instalación por el gestor de paquetes

  1. Descarga ruTorrent disponible en AUR

  2. Descarga mod_scgi

  3. Descarga ruTorrent-plugins

  4. Instala geoip

    sudo pacman -S php-geoip
    
  5. Cambia los permisos de la carpeta

    sudo chmod 777 -R /srv/http/rutorrent/
    
  6. Edita las configuraciones de Apache (/etc/httpd/conf/httpd.conf):

    Listen 80
    Añade al final de la sección LoadModule:
    LoadModule scgi_module modules/mod_scgi.so
    LoadModule php5_module modules/libphp5.so
    

    Después de # Various default settings añade una nueva sección:

    # php5
    Include conf/extra/php5_module.conf
    Añade al final del archivo:
    SCGIMount /RPC2 127.0.0.1:5000:
    
  7. Protege el directorio de ruTorrent con una contraseña

    1. Crea una contraseña usando htpasswd:

      julio@julio-acer ~> htpasswd -c /home/julio/rtorrent/.htpasswd julio
      New password:
      Re-type new password:
      Adding password for user julio
      
    2. En Apache:

      <directory /srv/http/rutorrent/>
      AuthName "Log In"
      AuthType Basic
      AuthUserFile /home/julio/rtorrent/.htpasswd
      AuthGroupFile /dev/null
      require user julio
      </directory>
      
  8. En /etc/php/php.ini:

    1. Descomenta en html_errors:

      • log_errors
      • Default Value: On
    2. Descomenta en Dynamic Extensions:

      • extension=curl.so
      • extension=pdo_sqlite.so
      • extension=sockets.so
      • extension=sqlite3.so
      • extension=sqlite.so
      • extension=xmlrpc.so
      • extension=xsl.so
    3. Deja el open_basedir parecido a:

      open_basedir = /usr/bin/:/usr/local/bin/:/srv/http/:/home/:/tmp/:/usr/share/pear/:/media/externo/Downloads/Torrents
      
  9. En /etc/php/conf.d/geoip.ini, descomenta:

    extension=geoip.so
    
  10. Reinicia el servidor

    # /etc/rc.d/httpd restart
    
  11. Prueba la instalación en http://localhost/rutorrent/

Instalación por SVN

  1. Basta con hacer checkout del repositorio

    cd /srv/svn
    svn co http://rutorrent.googlecode.com/svn/trunk/rutorrent/ rutorrent
    
  2. Configura normalmente

Plugins

ruTorrent posee algunos plugins muy útiles. Yo recomiendo los siguientes:

Throttle

Permite limitar la velocidad de descarga y/o subida por grupo de torrents.

julio@acer http/rutorrent/plugins> sudo svn co http://rutorrent.googlecode.com/svn/trunk/plugins/throttle

Ratio

Permite parar de hacer upload de un torrent tras alcanzar un determinado ratio.

julio@acer http/rutorrent/plugins> sudo svn co http://rutorrent.googlecode.com/svn/trunk/plugins/ratio

Track Labels

Añade una etiqueta con el nombre del tracker a cada torrent.

julio@acer http/rutorrent/plugins> sudo svn co http://rutorrent.googlecode.com/svn/trunk/plugins/tracklabel

Pyroscope

PyroScope contiene varias herramientas de línea de comandos y algunos parches que mejoran bastante el uso de rTorrent. No necesitas instalar rTorrent como expliqué arriba, pues el script de PyroScope instala una versión especial de rTorrent, el rTorrent-extended.

Pyrocore

La forma más fácil es por https://aur.archlinux.org/packages/rtorrent-pyro-git/.

Otra forma fácil de instalar pyrocore sería con pip (sudo pip2 install pyrocore), pero la versión de allí está muy desactualizada.

Lo mismo sucede con la versión disponible en el AUR.

Existe otra versión que parece estar más actualizada, pero no la probé.

En la página del proyecto existe un tutorial de cómo instalar todo desde el código fuente. Aquí solo intentaré explicar de forma más clara cómo instalar, pero recomiendo mirar el sitio oficial para información más completa y actualizada.

  1. Instala las dependencias

    julio@acer ~> sudo pacman -S tmux python-virtualenv
    
  2. Instala rTorrent-extended

    julio@julio-acer ~> mkdir ~/src; cd ~/src
    julio@julio-acer ~/src> svn co http://pyroscope.googlecode.com/svn/trunk/pyrocore/docs/rtorrent-extended
    julio@julio-acer ~/src> cd rtorrent-extended
    julio@julio-acer ~/src/rtorrent-extended> ./build.sh all
    julio@julio-acer ~/src/rtorrent-extended> ./build.sh extend
    
  3. Instala Pyroscope

    julio@julio-acer ~> svn checkout http://pyroscope.googlecode.com/svn/trunk/ ~/lib/pyroscope
    

    Si estás en Arch Linux, edita la ruta para python2 en el archivo ~/lib/pyroscope/update-to-head.sh:

    PYTHON=${1:-/usr/bin/python2}
    

    Ejecuta el script:

    julio@julio-acer ~> ~/lib/pyroscope/update-to-head.sh
    

    Añade ~/bin al $PATH. Añade la siguiente línea al .zshrc y .bashrc:

    export PATH="$HOME/bin:$PATH"
    

    Ejecuta el script para convertir tu .rtorrent.rc a la nueva sintaxis:

    julio@julio-acer ~> ~/lib/pyroscope/pyrocore/docs/rtorrent-extended/migrate_rtorrent_rc.sh ~/.rtorrent.rc
    

    Añade al ~/.rtorrent.rc:

    #################################
    ## PyroScope SETTINGS
    #################################
    method.insert = pyro.extended, value|const, 1
    method.insert = pyro.bin_dir, string|const,
    method.insert = pyro.rc_dialect, string|const|simple, "execute.capture=bash,-c,\"test $1 = 0.8.6 && echo -n 0.8.6 || echo -n 0.8.9\",dialect,$system.client_version="
    method.insert = pyro.rtorrent_rc, string|const|private, "$cat=~/.pyroscope/rtorrent-,\"$pyro.rc_dialect=\",.rc.default"
    import = $pyro.rtorrent_rc=
    schedule = pyro_watchdog,30,300,"pyro.watchdog=~/.pyroscope,"
    
    # Show traffic of the last hour
    network.history.depth.set = 112
    schedule = network_history_sampling,1,32, network.history.sample=
    method.insert = network.history.auto_scale.toggle, simple|private, "branch=network.history.auto_scale=,\"network.history.auto_scale.set=0\",\"network.history.auto_scale.set=1\""
    method.insert = network.history.auto_scale.ui_toggle, simple|private, "network.history.auto_scale.toggle= ;network.history.refresh="
    branch=pyro.extended=,"schedule = bind_auto_scale,0,0,\"ui.bind_key=download_list,=,network.history.auto_scale.ui_toggle=\""
    

    Ejecuta el script para crear una configuración:

    julio@julio-acer ~> pyroadmin --create-config
    
  4. Prueba la instalación

    julio@julio-acer ~> which rtorrent
    /home/julio/bin/rtorrent
    
    julio@julio-acer ~> rtorrent
    

    La pantalla debe estar en color. Presiona * para alternar entre collapsed view y expanded view.

    Más consejos se pueden encontrar aquí

Nota: Si abres rTorrent con GNU Screen y se queja de la cantidad de colores de tu terminal, añade la siguiente línea a ~/.screenrc: term screen-256color.

Ya tuve problemas con el script de instalación por incompatibilidades de versión. En ese caso necesitarías hacer un downgrade de varios programas y ejecutar el script nuevamente.

Creación de .torrent con mktorrent

Además de descargar, compartir tus archivos también es importante. Manteniendo la filosofía de simplicidad de los programas Unix, rtorrent no posee la función de crear torrents.

Para esta tarea, utilizo mktorrent.

  1. Descarga mktorrent

    julio@julio-acer ~ $ sudo pacman -S mktorrent
    
  2. Mueve todos los archivos a enviar a una carpeta propia.

  3. Ejecuta el comando con los parámetros y opciones adecuados

    mktorrent -v -p -a="ANNOUNCE" -c="COMMENT" -n="NAME" -o="OUTPUT.torrent"
    

    Donde

    • -v Verbose
    • -p hace el torrent privado
    • ANNOUNCE es la URL proporcionada por el tracker
    • COMMENT es algún comentario sobre el torrent
    • NAME es el nombre del paquete, que quedará en el metainfo. Mejor dejarlo vacío para evitar cambiar de carpeta.
    • OUTPUT es el nombre del archivo .torrent

    Ejemplo:

    $ mktorrent -v -p -a "http://tracker.url/announce.php?passkey=123456xxxx&uid=xxxxx" -n "Artista - Año - Álbum" -c "Original Release" -o album.torrent "Pasta_Ano - Disco"
    mktorrent 1.0 (c) 2007, 2009 Emil Renner Berthing
    
    Options:
    Announce URLs:
    1 : http://tracker.url/announce.php?passkey=123456xxxx&uid=xxxxx
    Torrent name: Artista - Año - Álbum
    Metafile: /media/externo/Musicas/album.torrent
    Piece length: 262144
    Be verbose: yes
    Write date: yes
    Web Seed URL: none
    Comment: "Original Release"
    
    Adding cover.jpg
    Adding 01 - Track01.flac
    Adding 02 - Track02.flac
    Adding 03 - Track03.flac
    Adding 04 - Track04.flac
    Adding 05 - Track05.flac
    Adding Artist - Album.log
    Adding Album.cue
    
    236381529 bytes in all.
    That's 902 pieces of 262144 bytes each.
    
    Hashed 902 of 902 pieces.
    Writing metainfo file… done.
    

Si intentamos utilizar el mismo comando para hacer cross-seed, o sea, subir los mismos archivos en trackers diferentes, rtorrent devolverá el error “Info hash already used by another torrent”. Para resolver ese problema y hacer diferentes los hashes, se puede:

  1. Añadir o modificar algún archivo al crear el segundo .torrent

  2. Definir un tamaño diferente para cada pieza con el parámetro -l. Ejemplo:

    mktorrent -v -p -a "http://tracker.url/announce.php?passkey=123456xxxx&uid=xxxxx" -l 19 -o album_tracker2.torrent "Pasta_Ano - Disco"
    

Que utiliza 512 kb por cada pieza.


ruTorrent también permite una configuración multiusuario, manteniendo los archivos de cada usuario en carpetas específicas (rutorrent/share/users/USERNAME/settings/).


iPhone:


Enlaces

Julio Batista Silva
Autores
Senior Cloud Developer
comments powered by Disqus