Torrent

Post atualizado em agosto de 2012

Este artigo já está bem datado. Minha recomendação atual é utilizar Docker.

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

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 URI

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

  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

    sudo 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:

      <directory /srv/http/rutorrent/>
      AuthName "Log In"
      AuthType Basic
      AuthUserFile /home/julio/rtorrent/.htpasswd
      AuthGroupFile /dev/null
      require user julio
      </directory>
      
  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 (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:

  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:


Julio Batista Silva
Julio Batista Silva
Engenheiro de Dados

Eu sou um engenheiro de computação apaixonado por ciência, tecnologia, fotografia e idiomas. Atualmente trabalhando como Engenheiro de Dados na Alemanha.

comments powered by Disqus