Torrent
Post atualizado em agosto de 2012.
Sem dúvidas, o torrent é um dos melhores protocolos para compartilhamento de arquivos. Quando se é membro de muitos trackers, é 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
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/megnet_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:12345678901234567890&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 usando apenas 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 privado
- ANNOUNCE é a URL fornecida pelo tracker
- COMMENT é algum comentário sobre o torrent
- NAME é 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
Mais info: