quarta-feira, 25 de fevereiro de 2009

Cliente Torrent em Background


Quem já trocou algumas palavras comigo sabe como eu considero difícil baixar coisas da internet para assistir. Para mim é difícil porque eu não tenho disponibilidade de deixar o computador baixando à noite ou coisa assim. Mas chato mesmo é nos finais de semana, quando quero baixar pelo note e meus irmãos no desktop reclamam que roubo a banda inteira.

Então comecei a buscar alternativas. Maneiras de deixar meus torrents baixando enquanto eu não estava por perto e sem depender de eles lembrarem de "dar o play" no programa cliente.

Então fui à luta - melhor dizendo, à pesquisa. Primeiro encontrei o torrentflux, e ele é bem interessante. Mas ele não serve ao meu objetivo. O torrentflux é um centralizador de torrents, pelo que pude entender. Ele serve para que numa LAN apenas uma máquina baixe os torrents, e todas as pessoas possam pesquisar, adicionar e baixar seus arquivos acessando uma interface web instalada nesta máquina. O meu maior problema com o torrentflux foi o play. Ele não me livrou da necessidade de ter que iniciar manualmente o download dos arquivos sempre que o computador é ligado.

Por uma insistência quase troll do nilson, pesquisei sobre algum cliente python, e acabei achando uma biblioteca, o que é meio caminho andado. A biblioteca é o pytorrent, que é bem simples de se usar. Tão simples que deixa o desenvolvedor com pouquíssimo controle do que acontece. Tão simples que a documentação é mínima. Não encontrei nem uma função para limitar a taxa de downloads.

Pesquisando mais sobre o pytorrent, descobri que ele é ligado ao projeto do transmission. E olhando os pacotes disponíveis do transmission para o Ubuntu, vi que ele tem a interface gráfica GTK padrão, mas também tem um funcionamento via linha de comando (transmission-cli) e em formato de daemon (transmission-daemon como servidor e transmission-remote como cliente), além de uma interface web que controla aspectos básicos, como adicionar, pausar e "dar play" nos torrents.

O que eu precisei fazer foi apenas um script de inicialização para chamar o transmission-daemon no boot e um arquivo de configuração que contivesse o diretório de download e os limites de download e upload que eu queria.

O arquivo de configuração é em formato json, bem fácil de entender. O ponto (·) que coloquei no final de cada linha menos a última é para trocar por espaços.

{
"blocklist-enabled": 0,·
"download-dir": "\/home\/compartilhado\/downloads",·
"download-limit": 5,·
"download-limit-enabled": 1,·
"encryption": 1,·
"max-peers-global": 200,·
"peer-port": 32458,·
"pex-enabled": 1,·
"port-forwarding-enabled": 0,·
"rpc-access-control-list": "+127.0.0.1",·
"rpc-authentication-required": 0,·
"rpc-password": "",·
"rpc-port": 9091,·
"rpc-username": "",·
"upload-limit": 1,·
"upload-limit-enabled": 1
}


Este arquivo deve ser salvo num diretório onde o transmission-daemon vai salvar as outras configurações dele, como que torrents estão na fila. Se você vai fazer um script para ser executado no boot, o usuário root vai chamá-lo, e por padrão este diretório será o /root/.config/transmission-daemon.

Espero que estas informações possam ajudar a quem quer fazer o mesmo, eu por enquanto não vou postar o conteúdo do script de inicalização (odeio esta palavra, mas não conheço uma melhor) porque o post já está grande demais.

4 comentários:

Nilson disse...

entre as dificuldades finalmente conseguiu, pareceu até coisa divina esse caminho, ah se eu acreditasse em deus... rsrsrs

PS: codigo python é auto-explicativo, dai a ausencia de documentacao.

Xisberto disse...

Coisa divina sim, deus Google e deus manual.

Mas o código python que não tem a função que eu busco é muito turvo.

Silveira Neto disse...

A interface web do Transmission está sensacional. Rodando ele em background com esse transmission-cli fica perfeito.

Xisberto disse...

E o transmission-daemon melhorou bastante, agora ele já vem com uma configuração inicial e com o script de inicialização.
Mas só é possível editar o arquivo de configuração (/etc/transmission-daemon/settings.json) se o serviço estiver parado, caso contrário ele irá ignorar as alterações.