Torrent
Post atualizado em agosto de 2012
Sem dúvidas, o torrent é um dos melhores protocolos para compartilhamento de arquivos.
Para um arquivista (data hoarder), é importante ter um cliente poderoso e bem configurado para manejar milhares de torrents sem usar muita memória.
Meus clientes favoritos para Linux são Deluge
, Transmission
e rTorrent
. Já tive problemas com
o primeiro, pois ele parecia não dar conta de muitos arquivos, uns 600 na época, e muitas vezes
travava. O segundo é mais simples, mas muito bom, fácil de configurar e com interfaces para Gnome e
KDE. Nesse post tratarei do terceiro, o rTorrent
, que é o cliente que uso atualmente e aparenta
ser o mais leve, poderoso e com mais opções de configuração.
rTorrent
Instalação pelo gerenciador de pacotes
-
Instale o rTorrent conforme explicado na wiki:
sudo pacman -S rtorrent
Isso é o suficente para ter a última versão estável do rTorrent funcionando. Para muita gente isso é o suficiente, mas eu prefiro rodar a versão em desenvolvimento.
Outro motivo para compilar o rTorrent é para adicionar patches e preciso que ele seja uma versão compilada com a flag
--with-xmlrpc-c
.
Instalação das dependências
-
Crie uma pasta para o svn:
sudo mkdir /srv/svn
-
Coloque seu usuário como o dono dessa pasta:
sudo chown -R julio.users /srv/svn
-
Remova os programas que serão instalados pelo svn:
sudo pacman -R xmlrpc-c rtorrent
-
Instale o CPPUNIT e o libsigc++:
sudo pacman -S cppunit libsigc++
-
Exporte a variável PKG_CONFIG_PATH:
PKG_CONFIG_PATH=/usr/local/lib/pkgconfig export PKG_CONFIG_PATH
-
Instale o 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
Instalação pelo Git
AUR
Na data da primeira edição deste post ainda não existia o pacote rtorrent-git
no AUR. Na realidade
o rtorrent era mantido no SVN na época. Mas para nossa alegria um membro generoso da comunidade está
mantendo o pacote nesse link: https://aur.archlinux.org/packages.php?ID=53151. É só baixar e
rodar, o PKGBUILD
já vem com as flags que eu uso.
Manualmente
-
Crie uma pasta para manter programas baixados com o git:
[root@julio-acer ~]# mkdir /srv/git/ julio@julio-acer ~> cd /srv/git
-
Clone o repositório oficial do libtorrent
julio@julio-acer /srv/git> git clone https://github.com/rakshasa/libtorrent
-
Entre no diretório baixado e compile o 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
-
Instale o libtorrent
julio@julio-acer /srv/git/libtorrent> sudo make install
-
Exporte a variável PKG_CONFIG_PATH
julio@julio-acer ~> export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig
-
Clone o repositório do rtorrent.
julio@julio-acer /srv/git> git clone https://github.com/rakshasa/rtorrent
-
Compile o rtorrent com a opção xmlrpc (requerido por algumas 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
-
Instale o rtorrent
julio@julio-acer /srv/git/rtorrent> sudo make install
Instalação pelo SVN
UPDATE: O desenvolvimento do rtorrent foi movido para o git e o svn é apenas um mirror, portanto prefira a instalação pelo git, explicada acima.
-
Instale o libtorrent:
cd /srv/svn svn co svn://rakshasa.no/libtorrent/trunk rtorrent cd rtorrent/libtorrent ./autogen.sh ./configure make sudo make install sudo ldconfig
-
Instale o rtorrent:
cd ../rtorrent ./autogen.sh ./configure - -with-xmlrpc-c (perceba os dois traços antes de with) make sudo make install
Configuração do rTorrent
A configuração é feita através do arquivo “~/.rtorrent.rc”. Por ele podemos configurar o rTorrent para:
- Usar uma faixa específica de portas
- Limitar a velocidade de download/upload
- Vigiar uma pasta e baixar todos os .torrents dela
- Executar um script após a conclusão do download
- e muito mais…
No meu notebook o funcionamento é o seguinte:
-
Tudo é salvo em um HD externo, que está sempre conectado
-
Na pasta
/media/externo/Downloads/Torrents/rtorrent/watch
existem outras pastas- Ebooks » Contém
.torrent
de ebooks - Filmes » Contém
.torrent
de filmes - Musicas » Contém
.torrent
de álbuns - Seriados » Contém
.torrent
de seriados - Misc » Contém
.torrent
de todas as outras categorias
- Ebooks » Contém
Essas pastas são constantemente vigiadas pelo rTorrent. Quando adiciono um arquivo .torrent
em
alguma delas ele inicia o download automaticamente para a pasta
/media/externo/Downloads/Torrents/leeching/{Ebooks,Filmes,Misc,Musicas,Seriados}/
Após a conclusão do download, os arquivos são movidos para a pasta
/media/externo/Downloads/Torrents/seeding/{Ebooks,Filmes,Misc,Musicas,Seriados}/
-
Crie as pastas:
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}
Resolvi deixar a pasta sessions e a watch no HD externo mesmo, pois assim eu posso ligá-lo em outro computador que tenha o rtorrent instalado e continuar as transferências sem problema. Para baixar alguma coisa com o HD externo desconectado, será preciso utilizar um .rtorrent.rc modificado, pois ele não encontrará a pasta sessions e nem inicializará.
O meu .rtorrent.rc pode ser encontrado no GitHub. Boa parte foi retirado daqui.
Magnet links
rTorrent 0.8.9
Você precisará ativar a DHT.
Salve o seguinte script em algum lugar (uso ~/Scripts/magnet_torrent.sh
aqui):
#!/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 criará o arquivo meta-1234567890.torrent
na sua pasta.
RuTorrent
Usar o rTorrent
apenas com a interface ncurses
é um pouco complicado. Uma boa solução é instalar
uma Web GUI.
Aqui estou usando o ruTorrent, similar à interface do
µtorrent
, que me permite gerenciar os torrents pela web. Para isso é necessário configurar o
Apache e PHP antes.
Parte dos passos foram retirados do fórum do ArchLinux e da wiki do ruTorrent.
RuTorrent: Instalação pelo gerenciador de pacotes
-
Baixe o ruTorrent disponível no AUR
-
Baixe mod_scgi
-
Baixe ruTorrent-plugins
-
Instale o geoip
sudo pacman -S php-geoip
-
Mude as permissões da pasta
sudo chmod 777 -R /srv/http/rutorrent/
-
Edite as configurações do Apache (/etc/httpd/conf/httpd.conf):
Listen 80 Adicione ao final da sessão LoadModule: LoadModule scgi_module modules/mod_scgi.so LoadModule php5_module modules/libphp5.so
Depois de # Various default settings adicione uma nova sessão:
# php5 Include conf/extra/php5_module.conf Adicione ao final do arquivo: SCGIMount /RPC2 127.0.0.1:5000:
-
Proteja o diretório do ruTorrent com uma senha
-
Crie uma senha usando o htpasswd:
julio@julio-acer ~> htpasswd -c /home/julio/rtorrent/.htpasswd julio New password: Re-type new password: Adding password for user julio
-
No Apache:
<directory /srv/http/rutorrent/> AuthName "Log In" AuthType Basic AuthUserFile /home/julio/rtorrent/.htpasswd AuthGroupFile /dev/null require user julio </directory>
-
-
Em /etc/php/php.ini:
-
Descomente em html_errors:
- log_errors
- Default Value: On
-
Descomente em Dynamic Extensions:
- extension=curl.so
- extension=pdo_sqlite.so
- extension=sockets.so
- extension=sqlite3.so
- extension=sqlite.so
- extension=xmlrpc.so
- extension=xsl.so
-
Deixe o open_basedir parecido com:
open_basedir = /usr/bin/:/usr/local/bin/:/srv/http/:/home/:/tmp/:/usr/share/pear/:/media/externo/Downloads/Torrents
-
-
Em
/etc/php/conf.d/geoip.ini
, descomente:extension=geoip.so
-
Reinicie o servidor
# /etc/rc.d/httpd restart
-
Teste a instalação em http://localhost/rutorrent/
Instalação por SVN
-
Basta dar checkout no repositório
cd /srv/svn svn co http://rutorrent.googlecode.com/svn/trunk/rutorrent/ rutorrent
-
Configure normalmente
Plugins
O ruTorrent
possui alguns plugins muito úteis.
Eu recomendo os seguintes plugins:
Throttle
Permite limitar a velocidade de download e/ou upload por grupo de torrents.
julio@acer http/rutorrent/plugins> sudo svn co http://rutorrent.googlecode.com/svn/trunk/plugins/throttle
Ratio
Permite parar de fazer upload de um torrent após alcançado determinado ratio.
julio@acer http/rutorrent/plugins> sudo svn co http://rutorrent.googlecode.com/svn/trunk/plugins/ratio
Track Labels
Adiciona uma label com o nome do tracker a cada torrent.
julio@acer http/rutorrent/plugins> sudo svn co http://rutorrent.googlecode.com/svn/trunk/plugins/tracklabel
Pyroscope
O PyroScope contém várias ferramentas em linha de comando e
alguns patches que melhoram bastante o uso do rTorrent. Você não precisa instalar o rTorrent como
expliquei acima, pois o script do PyroScope instala uma versão especial do rTorrent, o
rTorrent-extended
.
Pyrocore
O jeito mais fácil é pelo https://aur.archlinux.org/packages/rtorrent-pyro-git/.
Outro jeito fácil de instalar o pyrocore
seria com o pip (sudo pip2 install pyrocore
), porém a
versão de lá está muito desatualizada.
O mesmo acontece com a versão disponível no AUR.
Existe outra versão que parece estar mais atualizada, mas não testei.
Na página do projeto existe um tutorial de como instalar tudo pelo código fonte. Aqui apenas tentarei explicar de forma mais clara como instalar, mas recomendo olhar o site oficial para informações mais completas e atualizadas.
-
Instale as dependências
julio@acer ~> sudo pacman -S tmux python-virtualenv
-
Instale o 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
-
Instale o Pyroscope
julio@julio-acer ~> svn checkout http://pyroscope.googlecode.com/svn/trunk/ ~/lib/pyroscope
Se você estiver no Arch Linux, edite o caminho para o python2 no arquivo
~/lib/pyroscope/update-to-head.sh
:PYTHON=${1:-/usr/bin/python2}
Execute o script:
julio@julio-acer ~> ~/lib/pyroscope/update-to-head.sh
Adicione
~/bin
ao$PATH
. Adicione a seguinte linha ao.zshrc
e.bashrc
:export PATH="$HOME/bin:$PATH"
Rode o script para converter seu
.rtorrent.rc
para a nova sintaxe:julio@julio-acer ~> ~/lib/pyroscope/pyrocore/docs/rtorrent-extended/migrate_rtorrent_rc.sh ~/.rtorrent.rc
Adicione ao
~/.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=\""
Execute o script para criar uma configuração:
julio@julio-acer ~> pyroadmin --create-config
-
Teste a instalação
julio@julio-acer ~> which rtorrent /home/julio/bin/rtorrent
julio@julio-acer ~> rtorrent
A tela deve estar colorida. Pressione
*
para alternar entre collapsed view e expanded view.Mais dicas podem ser encontradas aqui
Obs.: Se você abrir o rTorrent com o GNU Screen e ele reclamar da quantidade de cores do seu
terminal, adicione a seguinte linha ao ~/.screenrc
: term screen-256color
.
Já tive problemas com o script de instalação por problemas de compatibilidade de versão. Nesse caso você precisaria fazer um downgrade de vários programas e rodar o script novamente.
Criação de .torrent com mktorrent
Além de fazer downloads, compartilhar seus arquivos também é importante. Mantendo a filosofia de simplicidade de programas Unix, o rtorrent não possui a função de criar torrents.
Para essa tarefa, utilizo o mktorrent.
-
Baixe o mktorrent
julio@julio-acer ~ $ sudo pacman -S mktorrent
-
Mova todos os arquivos a serem enviados para uma pasta própria.
-
Execute o comando com os parâmetros e opções adequados
mktorrent -v -p -a="ANNOUNCE" -c="COMMENT" -n="NAME" -o="OUTPUT.torrent"
Onde
-v
Verbose-p
torna o torrent privadoANNOUNCE
é a URL fornecida pelo trackerCOMMENT
é algum comentário sobre o torrentNAME
é o nome do pacote, que ficará no metainfo. Melhor deixar sem para evitar mudar de pasta.OUTPUT
é o nome do arquivo .torrent
Exemplo:
$ mktorrent -v -p -a "http://tracker.url/announce.php?passkey=123456xxxx&uid=xxxxx" -n "Artista - Ano - Album" -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 - Ano - Album 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.
Se tentarmos utilizar o mesmo comando, para fazer cross-seed, ou seja, fazer upload dos mesmos arquivos em trackers diferentes, o rtorrent retornará o erro “Info hash already used by another torrent”. Para resolver esse problema tornando os hashs diferentes, o que pode ser feito das seguintes formas:
-
Adicionar ou modificar algum arquivo quando for criar o segundo .torrent
-
Definir um tamanho diferente para cada pedaço pelo parâmetro -l. Exemplo:
mktorrent -v -p -a "http://tracker.url/announce.php?passkey=123456xxxx&uid=xxxxx" -l 19 -o album_tracker2.torrent "Pasta_Ano - Disco"
Que utiliza 512kb para cada pedaço.
O ruTorrent também permite uma configuração multiusuário, mantendo os arquivos de cada usuário em
pastas 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
Links
- http://forums.rutorrent.org/index.php?topic=87.0
- http://code.google.com/p/rutorrent/wiki/Installation
- http://libtorrent.rakshasa.no/ticket/735 - Patch para dar prioridade a um tracker
- http://wiki.rtorrent.org/MagnetUri