:. Aplicativos do Linux parte 1: Programas P2P

 Por Carlos E. Morimoto
 http://www.guiadohardware.net
 13/12/2003


Hoje em dia as redes P2P estão ficando tão populares que para muitas pessoas elas são quase tão importantes quanto o navegador. Como disse acima, o desenvolvimento de programas open source para Linux é influenciado diretamente pela utilidade que os projetos terão. Neste caso temos um número muito grande de interessados o que resulta em vários clientes diferentes, cobrindo as principais redes P2P. Vou dar aqui alguns exemplos dos programas que já testei:

:. GtkGnutella


Como o nome sugere, o GtkGnutella usa a rede Gnutella, que é compartilhada por vários programas P2P, como o Limewire, BearShare, Xolox, Gnucleus, Shareaza e Morpheus. Os arquivos compartilhados por usuários de qualquer um destes programas fica disponível para todos os demais, o que garante uma oferta considerável de arquivos.

Uma das queixas freqüentes dos usuários é a demora das buscas, que demoram vários minutos para serem completadas. Este é um sintoma da arquitetura descentralizada adotada na rede Gnutella, não existem servidores centrais como no caso do Napster ou do Audiogalaxy, cada micro conectado funciona como um nó na rede, arcando com parte do trabalho.

Ao fazer uma busca o pedido precisa ser transmitido a vários nós até que seja possível obter um número adequado de respostas, daí a demora.

Por outro lado, o fato de ser uma rede descentralizada torna muito difícil desativar a rede a qualquer tempo. A única forma de fazer isso seria de alguma forma convencer todos os usuários a se desconectarem. Não existe um ponto fraco central como no caso do Napster, que eram mantido por uma empresa.

A interface do GtkGnutella é espartana, pois o programa foi desenvolvido usando o GTK 1.x, mas ele cumpre bem o que se propõe. A interface é bem funcional, e você encontra os mesmos recursos de busca e compartilhamento que em outros programas.

Uma das vantagens do GtkGnutella é que o arquivo de instalação é pequeno e o programa bastante leve. Na página oficial você encontra pacotes para várias distribuições. Ele não possui nenhuma dependência fora o GTK básico, por isso os problemas de instalação são raros: http://gtk-gnutella.sourceforge.net

Ele também vem incluído por default no Kurumin a partir do 2.01


:. Xmule


Este é um cliente para a rede do EDonkey que já conquistou um número muito grande de usuários. Além da versão Linux estão disponíveis também versões para Mac OS, Windows e BSD.

Assim como no EDonkey o primeiro passo é obter um arquivo server.met que contém uma lista de servidores que estão compartilhando arquivos. Basta clicar no "Update" na tela principal. A partir dai você escolhe um servidor e começa a fazer as buscas. O downloads são feitos a partir de vários micros simultâneamente e nas versões recentes os arquivos são comprimidos. A compressão não ajuda muito no caso de filmes em divx ou musicas em mp3 por exemplo, que já são formatos de arquivos compactados, mas não deixa de ser útil para arquivos sem compressão, como por exemplo músicas em wav.

Os downloads são feitos por default dentro da pasta .xMule, dentro do seu diretório de usuário. Lembre-se que sendo uma pasta oculta, você deve marcar o "mostrar arquivos ocultos" nas preferências do Konqueror para vê-la. Já tive problemas do Xmule não funcionar por não conseguir atualizar o arquivo server.met dentro desta mesma pasta. Se isso acontecer com você, basta mudar as permissões de acesso do arquivo.

Se o endereço default estiver fora do ar, dê uma passada nos fóruns para obter o endereço atualizado. Esta é uma das coisas legais em usar o Xmule, o programa é atualizado frequentemente e é fácil obter ajuda no fórum. Novos recursos do EDonkey e mudanças no protocolo são sempre implementados em questão de dias, como por exemplo o suporte a compressão dos downloads incluído na versão 1.7.1.

A página oficial é a: http://xmule.org

O endereço do fórum é: http://unthesis.web.aplus.net/forums

E a página de download é: https://sourceforge.net/project/showfiles.php?group_id=81622

Estão disponíveis pacotes RPM para o Mandrake e o SuSe, além do pacote .tar.gz habitual. O xmule está disponível também via apt-get e incluí um ícone mágico no Kurumin, na seção Internet.


:. Nicotine


O Nicotine é um cliente para a rede do Soulseek, um programa P2P for Windows que se tornou extremamente popular em pouco tempo. O número de arquivos compartilhados impressiona e ao mesmo tempo as buscas são rápidas.

O Nicotine é um dos melhores programas P2P na minha opinião, sobretudo para baixar músicas de bandas pouco conhecidas. A interface é bem feita e você encontra todos os recursos esperados, incluindo o chat e a função de criar uma lista de amigos.

Na página oficial você encontra apenas um pacote com o código fonte, mas o pacote está disponível no apt-get para as distribuições baseadas no Debian. No Kurumin você encontra um ícone mágico no menu Internet. Em tempo, a página é:

http://www.nicotine.thegraveyard.org/

Para funcionar, o nicotine precisa que os seguintes pacotes estejam instalados: Python (versão 2.2.0 ou mais recente), GTK+-2.2 (ou mais recente) e PyGTK-1.99.16 (ou mais recente, em algumas distribuições este pacote chama python-gtk2)

Estes pacotes são bibliotecas usadas por diversos programas, por isso é provável que elas já estejam instaladas. No caso da instalação via apt-get você não vai precisar se preocupar com isso pois ele já baixa os pacotes necessários automaticamente.

O Nicotine é bastante popular, fazendo uma pesquisa no google você pode encontrar pacotes para outras distribuições sem muita dificuldade.

Para instalar o Nicotine a partir do código fonte, baixe e descompacte o pacote e, dentro da pasta criada rode o comando:

# python setup.py install

Você pode também especificar uma pasta onde deseja que ele seja instalado, como em:

$ python setup.py install --prefix=/home/morimoto/nicotine

Existe ainda a opção de rodar o programa diretamente, sem compilar nada. Isso é possível pois o Python é uma linguagem interpretada. Os programas não precisam necessariamente serem compilados para rodar, o interpretador pode fazer isso em realtime. Neste caso você precisaria apenas de um:

$ python ./nicotine


:. Kazaa Lite


O Kazaa não é exatamente um cliente P2P for Linux, mas é possível rodar a versão Windows através do Wine, o que faz com que ele seja relativamente popular.

Para rodá-lo o primeiro passo é instalar o Wine e o Winesetuptk, o configurador gráfico que ajuda na configuração inicial. Para roda-lo basta chamá-lo com o comando "winesetup". Em muitas distribuições o configurador já vem junto no pacote do Wine.

Com o Wine rodando, abra o arquivo .wine/config que é criado dentro do seu diretório de usuário e adicione as seguintes linhas no final do arquivo:

[Version]
"Windows" = "win98"

[AppDefaults\\Kazaa.exe\\DllOverrides]
"*" = "builtin, native, so"
"commctrl" = "native"
"comctl32" = "builtin"
"shdoclc" = "native"
"shdocvw" = "native"
"shlwapi" = "native"
"comdlg32" = "native"

[FontDirs]
"dir" = "/usr/X11R6/lib/X11/fonts/TTF"

Em seguida você vai precisar copiar algumas dlls do Windows 98 para a pasta:
/home/user/.wine/fake_windows/Windows/System/

Todos os arquivos precisam estar com os nomes em letras minúsculas. Renomeie caso necessário:

commctrl.dll
comctl32.dll
comdlg32.dll
msvcrt.dll
shdoclc.dll
shdocvw.dll
shlwapi.dll
urlmon.dll
wininet.dll

Depois de tudo pronto você pode executar o arquivo de instalação do kazaa através do wine (como usuário, nunca como root neste caso):

$ wine kazaa_lite_202_english.exe

A instalação corre normalmente, da mesma forma que no Windows. Com um pouco de sorte serão criados inclusive ícones do Iniciar do KDE ou Gnome. Se você precisar criar manualmente o ícone, use o comando:

wine /home/user/.wine/fake_windows/Program\ Files/KaZaA\ Lite/Kazaa.exe

Lembre-se que todos os aplicativos instalados dentro do Wine vão para esta pasta. A wine/fake_windows é vista pelos programas como se fosse a pasta c:\

Este procedimento permite usar várias versões difernete do Kazaa Lite, você pode testar com a versão que tiver à mão ou baixar a mais recente no: http://www.kazaalite.tk

Uma das referências mais completas sobre o Kazaa via Wine é a pagina no Manoel Pinho, atualizada frequentemente com links atualizados:

http://www.mpinho.cjb.net


:. BitTorrent


"BitTorrent" significa algo como "correnteza de bits". Ele foi feito para facilitar a distribuição de arquivos muito procurados, como por exemplo novas versões das distribuições, musicas ou games gratuitos e assim por diante. Claro que além destes exemplos, é possível distribuir qualquer tipo de arquivo, legal ou não através dele.

Não existe uma interface centralizada como em outros programas. Os arquivos são distribuídos na forma de pequenos arquivos .torrent que contém algumas informações sobre o arquivo, um código de verificação de integridade e o endereço do tracker onde ele pode ser encontrado.

O tracker é um host que serve como ponto de encontro, ele não disponibiliza nenhum arquivo diretamente e por isso é capaz de lidar com um número muito grande de requisições. Um tracker rodando numa conexão ADSL com 128k de upload pode dar conta de milhares de downloads simultâneos.

Como disse, o tracker só centraliza informações sobre os hosts que estão compartilhando o arquivo, não disponibiliza nada diretamente. Para colocar um arquivo em circulação é criado um seed (semente), um host que será responsável por servir como um ponto inicial para download do arquivo.

A partir do momento em que outras pessoas começam a baixar o arquivo elas automaticamente também compartilham os pedaços já baixados e conforme mais e mais gente vai tentando baixar a oferta do arquivo fica cada vez maior e o download mais e mais rápido. Com o tempo algumas pessoas começam a deixar o bittorrent aberto compartilhando o arquivo completo e o seed passa a nem ser mais necessário.

É exatamente o contrário do que aconteceria caso o arquivo fosse disponibilizado num FTP comum. Uma simples conexão ADSL pode distribuir o arquivo para milhares de pessoas e um mesmo tracker pode coordenar a distribuição de vários arquivos.

O ponto fraco do bittorrent é quando é preciso distribuir um monte de arquivos que individualmente possuem pouca procura. Se apenas uma ou duas pessoas tentarem baixar de cada vez, quase todo o trafego vai recair sobre os micros que estiverem disponibilizando o arquivo de qualquer forma.

Existem versões para Linux e Windows, a versão Linux pode ser baixada no:

http://bitconjurer.org/BitTorrent/download.html

Procure pelo link "some RPMs" que levará a alguns pacotes pré-compilados para várias distribuições. Se você estiver no Debian ou Kurumin a instalação será mais fácil, pois ele está disponível no apt-get. Basta um:

# apt-get install bittorrent

Existem duas opções de cliente. O btdownloadcurses e o btdownloadgui. Os dois fazem exatamente a mesma coisa, a única diferença é que o primeiro mostra a barra de progresso numa janela de terminal, enquanto o outro mostra uma barra gráfica.

Para usá-los, basta copiar o link do arquivo .torrent desejado e usar o comando "btdownloadcurses --url", como em:

btdownloadcurses --url http://www.levien.com/mandrake9.1.torrent

Depois é só deixar a janela aberta o máximo de tempo possível, mesmo depois de terminar de baixar o arquivo, para ajudar outras pessoas que também estejam tentando baixá-lo. Se o download for interrompido, basta usar o comando novamente, no mesmo diretório. O programa verifica a integridade do arquivo e continua da onde parou.

Se você instalou a partir de um dos pacotes RPM, então os comandos serão btdownloadcurses.py e o btdownloadgui.py

Você pode também configurar o navegador para associar a extensão .torrent com os programas, assim você não precisará ficar dando os comandos no terminal. O Mozilla 1.4 já vem configurado.

Para disponibilizar arquivos você precisa antes de mais nada criar os arquivos .torrent a partir dos arquivos originais. Para isso, use o comando btmakemetafile (ou btmakemetafile.py), fornecendo o nome do arquivo e o endereço do tracker, como em:

btmakemetafile.py kurumin-1.4.iso http://algum-lugar.com:6969/announce

O "kurumin-1.4.iso" é o nome do arquivo enquanto o "http://algum-lugar.com:6969" é o endereço do tracker que será usado, incluindo a porta tcp onde ele está escutando. O comando gerará um arquivo .torrent de uns 20 kb que você pode colocar no seu site ou enviar por e-mail aos interessados. Não retire o "/announce" do comando, ele é necessário, independentemente de como o tracker esteja configurado.

Como disse, um tracker pode gerenciar vários downloads simultâneos, você pode encontrar vários endereços de trackers simplesmente abrindo os arquivos .torrent que encontrar por aí num editor de textos. Você pode pedir permissão para usar um tracker de alguém, ou criar o seu. Neste caso, use o comando:

./bttrack.py --port 6969 --dfile dstate

Substitua o "6969" pela porta TCP desejada.

Depois de criar os arquivos .torrent e verificar o tracker, você precisa de um seed, uma máquina para iniciar a disseminação do arquivo. Pode ser a sua própria máquina.

Acesse a pasta onde está o arquivo completo e use o comando:

btdownloadheadless.py --url http://guiadohardware.net/kurumin-1.4.iso.torrent
--saveas kurumin-1.4.iso

O "http://guiadohardware.net/kurumin-1.4.iso.torrent" onde você hospedou o arquivo .torrent gerado na etapa anterior. O parâmetro "--saveas kurumin-1.4.iso" força ele a salvar o arquivo com o nome especificado.

Como já existirá um arquivo completo na pasta, ele simplesmente verificará a integridade e iniciará o compartilhamento do arquivo completo imediatamente. Agora é só divulgar a localização do seu arquivo .torrent e iniciar a reação em cadeia. Quanto mais gente tentar baixar, mais rápido será o download.


:. Dica para usar o bittorrent por trás de um firewall ou NAT

Assim como outros programas P2P, o bittorrent consegue funcionar sem maiores problemas por trás de um firewall ou através de uma conexão compartilhada via NAT. Mesmo sem nenhuma porta de entrada disponível, o cliente consegue se conectar ao tracker e negociar o download e upload dos arquivos.

Mas, ao mesmo tempo, muita gente que o utiliza desta maneira reclama da lentidão para baixar arquivos. No caso de arquivos muito procurados, onde existe uma oferta muito grande é possível conseguir baixar na velocidade máxima da conexão, mas no caso de arquivos onde a oferta é menor é comum baixar a 3 ou 4 KB/s numa conexão via ADSL, o que faz os downloads demorarem uma eternidade...

Isso acontece por um motivo simples. O bittorrent aceita conexões nas portas 6881 à 6889 (ele tenta primeiro a 6881 e depois vai tentando as demais caso ela esteja fechada). Estas portas são usadas para que o tracker (o servidor que coordena o download e upload dos arquivos) possa requisitar que o seu micro envie dados para outros micros da rede.

Se estas portas estão fechadas no seu micro as suas taxas de upload serão mais baixas, já que o tracker não tem como "mandar" o seu micro transmitir dados a outros o que torna a negociação muito mais lenta. Muita gente vai achar isso bom, afinal o que interessa é baixar logo os arquivos o mais rápido possível e sair de fininho não é mesmo?

Se você é dessa opinião, lamento dizer que no bittorrent as coisas não funcionam assim. O protocolo tem um sistema de compensação, que faz com que você consiga baixar os arquivos na medida que você também contribui. Isso significa que se você contribui pouco, também vai demorar mais para baixar.

No bittorrent o tracker rastreia as taxas de upload e download de cada micro, e mantém um cálculo da "oferta" e da "demanda" de um determinado arquivo. Se temos 10 micros compartilhando e mais 10 micros tentando baixar, então a oferta é de mais ou menos 2/1 (os que estão baixando também compartilham o arquivo), de modo que você vai conseguir baixar aproximadamente 2 KB para cada 1 KB que der de upload.

Se por outro lado tem muita gente tentando baixar e poucos com o arquivo completo dando upload, então a taxa pode ser de 1/1 ou menos.

Numa linha ADSL a taxa de upload é apenas metade da taxa de download. Numa situação normal o upload ficará estável em uns 13 KB/s e o download ficará um pouco acima disso. Se as portas 6881 à 6889 estão fechadas, então o upload provavelmente será mais baixo, mas o download ficará muito mais lento e instável.

- Ok, ok, eu entendi, como eu faço então para abrir as tais portas e poder baixar os arquivos mais rápidos

Se você está rodando o firewall localmente, ou seja você está usando o micro que está conectado na Internet, então você precisa apenas abrir as portas. No linux a regra para o iptables será:

iptables -A INPUT -p tcp --destination-port 6881:6889 -j ACCEPT

Se por outro lado você está usando o micro Linux para compartilhar a conexão com outros micros da rede local, então você deve usar as linhas abaixo para redirecionar as portas (forward) para o micro onde você está usando o bittorrent:

iptables -t nat -A PREROUTING -i ppp0 -p tcp --dport 6881:6889 -j DNAT --to-dest 192.168.0.3
iptables -A FORWARD -p tcp -i ppp0 --dport 6881:6889 -d 192.168.0.3 -j ACCEPT
iptables -t nat -A PREROUTING -i ppp0 -p udp --dport 6881:6889 -j DNAT --to-dest 192.168.0.3
iptables -A FORWARD -p udp -i ppp0 --dport 6881:6889 -d 192.168.0.3 -j ACCEPT

Observe que o "ppp0" corresponde à interface que está conectada na Internet. Se você acessa via ADSL PPPoE ou via modem então a interface é essa mesma, mas, se você acessa através de algum serviço que utilize ip fixo, ou o endereço seja obtido via dhcp (sem autenticação) então a interface será eth0 ou eth1. Use o comando "ifconfig" em caso de dúvidas.

Não se esqueça de substituir o "192.168.0.3" pelo endereço IP correto do micro que você deseja que receba as portas.

Se você tem dois ou mais micros na rede interna que vão usar o bittorent, você pode distribuir as portas entre eles. Se forem 3 micros, cada um pode ficar com 3. Você poderia usar as regras abaixo:

iptables -t nat -A PREROUTING -i ppp0 -p tcp --dport 6881:6883 -j DNAT --to-dest 192.168.0.3
iptables -A FORWARD -p tcp -i ppp0 --dport 6881:6883 -d 192.168.0.3 -j ACCEPT
iptables -t nat -A PREROUTING -i ppp0 -p udp --dport 6881:6883 -j DNAT --to-dest 192.168.0.3
iptables -A FORWARD -p udp -i ppp0 --dport 6881:6883 -d 192.168.0.3 -j ACCEPT

iptables -t nat -A PREROUTING -i ppp0 -p tcp --dport 6887:6889 -j DNAT --to-dest 192.168.0.4
iptables -A FORWARD -p tcp -i ppp0 --dport 6887:6889 -d 192.168.0.4 -j ACCEPT
iptables -t nat -A PREROUTING -i ppp0 -p udp --dport 6887:6889 -j DNAT --to-dest 192.168.0.4
iptables -A FORWARD -p udp -i ppp0 --dport 6887:6889 -d 192.168.0.4 -j ACCEPT

iptables -t nat -A PREROUTING -i ppp0 -p tcp --dport 6884:6886 -j DNAT --to-dest 192.168.0.5
iptables -A FORWARD -p tcp -i ppp0 --dport 6884:6886 -d 192.168.0.5 -j ACCEPT
iptables -t nat -A PREROUTING -i ppp0 -p udp --dport 6884:6886 -j DNAT --to-dest 192.168.0.5
iptables -A FORWARD -p udp -i ppp0 --dport 6884:6886 -d 192.168.0.5 -j ACCEPT

Lembre-se que nenhum ser humano normal fica digitando estas linhas manualmente cada vez que ligar o micro. Ao invés disso, simplesmente copie tudo para dentro de um arquivo de texto e transforme-o em um executável usando o comando "chmod +x". Depois disso basta executar o arquivo ou colocá-lo para inicializar junto com o sistema através de algum arquivo de inicialização.




Copyright 2003 Carlos E. Morimoto, http://www.guiadohardware.net - Todos os direitos reservados