Torrent
Post actualizado en agosto de 2012
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
rtorrent. El script de instalación de libtorrent instala versiones de esos paquetes automáticamente.
Instalación por el gestor de paquetes
Instala rTorrent como se explica en la wiki:
sudo pacman -S rtorrentEsto 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
Crea una carpeta para svn:
sudo mkdir /srv/svnPon tu usuario como propietario de esa carpeta:
sudo chown -R julio.users /srv/svnElimina los programas que serán instalados por svn:
sudo pacman -R xmlrpc-c rtorrentInstala CPPUNIT y libsigc++:
sudo pacman -S cppunit libsigc++Exporta la variable PKG_CONFIG_PATH:
PKG_CONFIG_PATH=/usr/local/lib/pkgconfig export PKG_CONFIG_PATHInstala 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
Crea una carpeta para mantener programas descargados con git:
[root@julio-acer ~]# mkdir /srv/git/ julio@julio-acer ~> cd /srv/gitClona el repositorio oficial de libtorrent
julio@julio-acer /srv/git> git clone https://github.com/rakshasa/libtorrentEntra 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 checkInstala libtorrent
julio@julio-acer /srv/git/libtorrent> sudo make installExporta la variable PKG_CONFIG_PATH
julio@julio-acer ~> export PKG_CONFIG_PATH=/usr/local/lib/pkgconfigClona el repositorio de rtorrent.
julio@julio-acer /srv/git> git clone https://github.com/rakshasa/rtorrentCompila 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> makeInstala 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.
Instala libtorrent:
cd /srv/svn svn co svn://rakshasa.no/libtorrent/trunk rtorrent cd rtorrent/libtorrent ./autogen.sh ./configure make sudo make install sudo ldconfigInstala 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/watchexisten otras carpetas- Ebooks » Contiene
.torrentde ebooks - Filmes » Contiene
.torrentde películas - Musicas » Contiene
.torrentde álbumes - Seriados » Contiene
.torrentde series - Misc » Contiene
.torrentde todas las otras categorías
- Ebooks » Contiene
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)
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
Descarga ruTorrent disponible en AUR
Descarga mod_scgi
Descarga ruTorrent-plugins
Instala geoip
sudo pacman -S php-geoipCambia los permisos de la carpeta
sudo chmod 777 -R /srv/http/rutorrent/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.soDespué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:Protege el directorio de ruTorrent con una contraseña
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 julioEn Apache:
<directory /srv/http/rutorrent/> AuthName "Log In" AuthType Basic AuthUserFile /home/julio/rtorrent/.htpasswd AuthGroupFile /dev/null require user julio </directory>
En /etc/php/php.ini:
Descomenta en html_errors:
- log_errors
- Default Value: On
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
Deja el open_basedir parecido a:
open_basedir = /usr/bin/:/usr/local/bin/:/srv/http/:/home/:/tmp/:/usr/share/pear/:/media/externo/Downloads/Torrents
En
/etc/php/conf.d/geoip.ini, descomenta:extension=geoip.soReinicia el servidor
# /etc/rc.d/httpd restartPrueba la instalación en http://localhost/rutorrent/
Instalación por SVN
Basta con hacer checkout del repositorio
cd /srv/svn svn co http://rutorrent.googlecode.com/svn/trunk/rutorrent/ rutorrentConfigura 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.
Instala las dependencias
julio@acer ~> sudo pacman -S tmux python-virtualenvInstala 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 extendInstala Pyroscope
julio@julio-acer ~> svn checkout http://pyroscope.googlecode.com/svn/trunk/ ~/lib/pyroscopeSi 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.shAñade
~/binal$PATH. Añade la siguiente línea al.zshrcy.bashrc:export PATH="$HOME/bin:$PATH"Ejecuta el script para convertir tu
.rtorrent.rca la nueva sintaxis:julio@julio-acer ~> ~/lib/pyroscope/pyrocore/docs/rtorrent-extended/migrate_rtorrent_rc.sh ~/.rtorrent.rcAñ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-configPrueba la instalación
julio@julio-acer ~> which rtorrent /home/julio/bin/rtorrentjulio@julio-acer ~> rtorrentLa 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.
Descarga mktorrent
julio@julio-acer ~ $ sudo pacman -S mktorrentMueve todos los archivos a enviar a una carpeta propia.
Ejecuta el comando con los parámetros y opciones adecuados
mktorrent -v -p -a="ANNOUNCE" -c="COMMENT" -n="NAME" -o="OUTPUT.torrent"Donde
-vVerbose-phace el torrent privadoANNOUNCEes la URL proporcionada por el trackerCOMMENTes algún comentario sobre el torrentNAMEes el nombre del paquete, que quedará en el metainfo. Mejor dejarlo vacío para evitar cambiar de carpeta.OUTPUTes 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:
Añadir o modificar algún archivo al crear el segundo .torrent
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:
- http://code.google.com/p/torrentouch/
- http://code.google.com/p/rtorrent-for-iphone/
- http://kramerican.dk/index.php?page=rtorrent-for-iphone