Blog do Julio

Hacks, tutoriais e dicas

Torrent

| Comments

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

ATENÇÃO: se quiser usar o Pyroscope, pule a instalação do xmlrpc, libtorrent e rtorrent. O script de instalação do libtorrent instala versões desses pacotes automaticamente.

Instalação pelo gerenciador de pacotes

  1. 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

  1. Crie uma pasta para o svn: sudo mkdir /srv/svn
  2. Coloque seu usuário como o dono dessa pasta: sudo chown -R julio.users /srv/svn
  3. Remova os programas que serão instalados pelo svn: sudo pacman -R xmlrpc-c rtorrent
  4. Instale o CPPUNIT e o libsigc++: sudo pacman -S cppunit libsigc++
  5. Exporte a variável PKG_CONFIG_PATH: PKG_CONFIG_PATH=/usr/local/lib/pkgconfig export PKG_CONFIG_PATH
  6. 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

  1. Crie uma pasta para manter programas baixados com o git: [root@julio-acer ~]# mkdir /srv/git/ julio@julio-acer ~> cd /srv/git
  2. Clone o repositório oficial do libtorrent julio@julio-acer /srv/git> git clone https://github.com/rakshasa/libtorrent
  3. 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
  4. Instale o libtorrent julio@julio-acer /srv/git/libtorrent> sudo make install
  5. Exporte a variável PKG_CONFIG_PATH julio@julio-acer ~> export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig
  6. Clone o repositório do rtorrent. julio@julio-acer /srv/git> git clone https://github.com/rakshasa/rtorrent
  7. 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
  8. 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.

  1. 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

  2. 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

Magnet URI http://libtorrent.rakshasa.no/ticket/2100

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

http://wiki.rtorrent.org/MagnetUri

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.

Instalação pelo gerenciador de pacotes

  1. Baixe o ruTorrent disponível no AUR
  2. Baixe mod_scgi
  3. Baixe ruTorrent-plugins
  4. Instale o geoip sudo pacman -S php-geoip
  5. Mude as permissões da pasta # chmod 777 -R /srv/http/rutorrent/
  6. 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:

  7. Proteja o diretório do ruTorrent com uma senha

    1. 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
    2. No Apache: AuthName “Log In” AuthType Basic AuthUserFile /home/julio/rtorrent/.htpasswd AuthGroupFile /dev/null require user julio
  8. Em /etc/php/php.ini:

    1. Descomente em html_errors:

      • log_errors
      • Default Value: On
    2. 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
    3. Deixe o open_basedir parecido com: open_basedir = /usr/bin/:/usr/local/bin/:/srv/http/:/home/:/tmp/:/usr/share/pear/:/media/externo/Downloads/Torrents

  9. Em /etc/php/conf.d/geoip.ini, descomente:

    • extension=geoip.so
  10. Reinicie o servidor # /etc/rc.d/httpd restart
  11. Teste a instalação em http://localhost/rutorrent/

Instalação por SVN

  1. Basta dar checkout no repositório cd /srv/svn svn co http://rutorrent.googlecode.com/svn/trunk/rutorrent/ rutorrent
  2. 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.

  1. Instale as dependências julio@acer ~> sudo pacman -S tmux python-virtualenv

  2. 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

  3. 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

  4. 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.

  1. Baixe o mktorrent julio@julio-acer ~ $ sudo pacman -S mktorrent
  2. Mova todos os arquivos a serem enviados para uma pasta própria.
  3. 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 © 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:

  1. Adicionar ou modificar algum arquivo quando for criar o segundo .torrent
  2. 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: * SVN. * http://forums.rutorrent.org/index.php?topic=87.0 * http://code.google.com/p/rutorrent/wiki/Installation * Patch para dar prioridade a um tracker: http://libtorrent.rakshasa.no/ticket/735

Comments