aria2 - Utilitário para Download Super Ultra Rápido

Author:Tatsuhiro Tsujikawa
Email:tatsuhiro.t_at_gmail_dot_com
translator:pt_BR Portuguese, tradutor: gsavix@gmail.com

Renúncia

Este programa não vem com garantias. O uso deste programa é por sua conta e risco.

Introdução

aria2 é um utilitário para download de arquivos. Os protocolos suportados são HTTP, HTTPS, FTP, BitTorrent e Metalink. aria2 pode baixar arquivos de múltiplas fontes protocolos e tenta utilizar para isso a máxima banda possível. Pode funcionar em diversas plataformas de computadores e sistemas operacionais, como por exemplo: GNU Linux, OS X, Windows, Android entre outros. Ao mesmo tempo pode executar download de HTTP, HTTPS, FTP e BitTorrent enquanto estes dados podem ser disponibilizados (uploaded) ao mesmo tempo para o BitTorrent ou para você ir assistindo um filme enquanto o download prossegue. Através da verificação (checksum) de partes dos dados dos Metalink’s, aria2 automaticamente valida partes (chunks) do BitTorrent.

A página do projeto está em https://aria2.github.io/.

Veja aria2 Manual Online para aprender como a usar aria2.

Funcionalidades

Lista de Configurações:

  • Interface de linha de comando
  • Download arquivos protocolos HTTP, HTTPS, FTP, BitTorrent
  • Download Segmentado
  • Metalink versão 4 (RFC 5854) suporte (HTTP, FTP, BitTorrent)
  • Metalink versão 3 suporte (HTTP, FTP, BitTorrent)
  • Metalink (RFC 6249) suporte (HTTP)
  • Implementação HTTP/1.1
  • Suporte Proxy HTTP Proxy
  • Suporte autenticação HTTP BASIC
  • Suporte autenticação HTTP Proxy
  • Váriavéis de ambiente (conjunto abrangente) para proxy: http_proxy, https_proxy, ftp_proxy, all_proxy e no_proxy
  • HTTP com gzip, suporte a codificação de conteúdo (deflate)
  • Verificação de peer usando Certificados Acreditados informado em HTTPS
  • Processamento de autenticação Cliente usando Certificado Acreditado HTTPS
  • Suporte a transferência (Chunked) codificada
  • Carga de Cookies a partir de arquivos formato Firefox 3, Chromium/Google Chrome e Mozilla / Firefox / IcedWeasel / (1.x/2.x) / Netscape.
  • Salvar Cookies em arquivo formato Mozilla 3, Firefox (1.x/2.x), Chromium, Netscape.
  • Suporte a Cabeçalho HTTP modificado ou personalizado
  • Suporte a Conexões Persistentes
  • FTP através de Proxy HTTP
  • Controle de velocidade Download e Upload (utilização da Banda Rede)
  • Extensões BitTorrent: Conexão rápida, DHT, PEX, MSE/PSE, Multi-Tracker
  • BitTorrent WEB-Seeding. aria2 faz requisições de mais de uma parte de um (chunk) para reduzir sobreposições de requisições. Também permite requisições pipeline com tamanho especificado
  • BitTorrent Local Peer Discovery
  • Atualização ou Modificação (Rename) de estrutura de diretórios de downloads BitTorrent já finalizados
  • Interface JSON-RPC (sobre HTTP e WebSocket) / XML-RPC
  • Execução em modo daemon
  • Download Seletivosem múltiplos arquivos torrent/Metalink
  • Validação e checksum de parte (Chunk) em Metalink
  • Desabilidar download segmentado em Metalink
  • Suporte a Netrc
  • Suporte a arquivo de Configuração
  • Download de URIs a partir de arquivo texto ou entrada padrão com especificação opcional de arquivo de saída
  • Suporte a URI parametrizadas (intervalos, etc)
  • Suporte a IPv6

Como obter o código fonte

O código fonte é mantido no Github: https://github.com/aria2/aria2

Para obter o último código fonte, execute o seguinte comando:

$ git clone git://github.com/aria2/aria2.git

Aria2 será criado no diretório corrente do seu computador com os arquivos fonte.

Dependências

funcionalidade dependência
HTTPS GnuTLS ou OpenSSL
BitTorrent libnettle+libgmp ou libgcrypt ou OpenSSL
Metalink libxml2 ou Expat.
Checksum libnettle ou libgcrypt ou OpenSSL
gzip, deflate em HTTP zlib
Async DNS C-Ares
Firefox3/Chromium cookie libsqlite3
XML-RPC libxml2 ou Expat.
JSON-RPC sobre WebSocket libnettle ou libgcrypt ou OpenSSL

Nota

libxml2 tem precedência sobre Expat se ambas bibliotecas instaladas. Caso prefira Expat, execute o configure com --without-libxml2.

Nota

GnuTLS tem precedência sobre OpenSSL se ambas bibliotecas estiverem instaladas. Caso prefira OpenSSL, execute configure com --without-gnutls --with-openssl.

Nota

libnettle tem precedência sobre libgcrypt se ambas bibliotecas instaladas. Caso prefira libgcrypt, execute configure com --without-libnettle --with-libgcrypt. Se OpenSSL é selecionada em detrimento de GnuTLS, nem libnettle nem libgcrypt poderão ser usadas.

São necessárias as seguintes configurações de bibliotecas SSl e crypto:

  • libgcrypt
  • libnettle
  • OpenSSL
  • GnuTLS + libgcrypt
  • GnuTLS + libnettle

BitTorrent e Metalink podem ser desabilitados fornecendo-se as opções --disable-bittorrent e --disable-metalink ao executar o script ./configure.

Para habilitar DNS assíncrono é necessário c-ares.

Como fazer o build

Para fazer o build do aria2 a partir dos fontes, instalar antes pacotes de desenvolvimento ( o nome pode variar nas distribuições):

  • libgnutls-dev (Requerido para suporte HTTPS, BitTorrent, Checksum)
  • nettle-dev (Requerido para suporte BitTorrent, Checksum)
  • libgmp-dev (Requerido para suporte BitTorrent)
  • libc-ares-dev (Requerido para suporte DNS async DNS )
  • libxml2-dev (Requerido para suporte Metalink)
  • zlib1g-dev (Requerido para suporte em HTTP decodificação gzip e deflate)
  • libsqlite3-dev (Requerido para suporte cookie Firefox3 / Chromium)

Você pode usar libgcrypt-dev ao invés de nettle-dev e libgmp-dev:

  • libgpg-error-dev (Requerido para suporte BitTorrent, Checksum)
  • libgcrypt-dev (Requerido para suporte BitTorrent, Checksum)

Pode ser usado libssl-dev ao invés de libgnutls-dev, nettle-dev, libgmp-dev, libgpg-error-dev e libgcrypt-dev:

  • libssl-dev (Requerido para suporte Checksum de HTTPS, BitTorrent )

Pode ser usado libexpat1-dev ao invés de libxml2-dev:

  • libexpat1-dev (Requerido for Metalink suporte)

Pode ser necessário usar pkg-config para detectar as bibliotecas acima mencionadas.

Para a distribuição Fedora são necessários os seguintes pacotes:

  • gcc, gcc-c++, kernel-devel, libgcrypt-devel, libgcrypt-devel, libxml2-devel, openssl-devel

Se foi feito o download do código fonte a partir de um repositório git, deverá ser executado o seguinte comando para criar o script de configuração (configure) e outros scripts também necessários para o build ou compilação do aria2:

$ autoreconf -i

Para construir a documentação é necessário instalar Sphinx que constroi página (man), html ou pdf contendo a documentação nos idiomas existentes.

Para construir aria2 para Mac OS X, de uma olhada em build_osx_release.sh, o qual cria binários DMG que são padrões para OS X.

A maneira mais rápida para compilar o aria2 é executar o script:

$ ./configure

Para compilar com link-edição estática utilize o opção da linha de comando ARIA2_STATIC=yes:

$ ./configure ARIA2_STATIC=yes

Após a configuração feita, execute make para compilar o programa:

$ make

Ver Compilação Cross Windows binário para Criar Binário para Windows. Ver Compilação Cross Android binário para criar Binário para Android. O script configure verifica as bibliotecas disponíveis e habilita ou desabilita as funcionalidades na maior abrangência possivel, pois por padrão todas as funcionalidades são habilitadas. Desde a versão 1.1.0, aria2 verifica o certificado do servidor HTTPS como padrão. Se a compilação usou OpenSSL ou a recente versão de GnuTLS na qual há função gnutls_certificate_set_x509_system_trust() e a biblioteca foi adequadamente configurada para localizar o certificado CA armazenado, aria2 carrega automaticamente estes certificados no início. Se este não ocorrer, recomenda-se fornecer o caminho para o arquivo que contém o certificado. Por Exemplo, no Debian o caminho para o arquivo CA é “/etc/ssl/certs/ca-certificates.crt” (no pacote ca-certificates). Isto varia de acordo com sua distribuição Linux. Pode ser informada a opção --with-ca-bundle para configurar o script usado pelo make:

$ ./configure --with-ca-bundle='/etc/ssl/certs/ca-certificates.crt'
$ make

Sem a opção --with-ca-bundle, haverá um erro ao acessar servidores HTTPS pois o certificado não pode ser verificado sem possuir um pacote CA (entidade certificadora). Nesse caso, pode ser especificado um arquivo de certificado usando opção aria2’s --ca-certificate. Caso não haja um certificado instalado, então o último recurso é desabilitar a validação do certificado usando a opção --check-certificate=false.

Por padrão, arquivo chamado (bash_completion) aria2c é instalado no diretório $prefix/share/doc/aria2/bash_completion. Para mudar o diretório de instalação do arquivo utilize a opção --with-bashcompletiondir.

O executavel é ‘aria2c’ no diretório src.

aria2 usa CppUnit para (test unit) automatizado. Para executar o test unit emita o comando:

$ make check

Compilação Cross Windows binário

Nessa seção, está descrito como fazer o build do binário para Windows usando o compilador cross mingw-w64 no Debian Linux.

Basicamente, após compilar e instalar as bibliotecas dependentes, que são pré-requisitos pode ser feita a compilação cross apenas passando através da opção --host e especificando-se as variáveis CPPFLAGS, LDFLAGS e PKG_CONFIG_LIBDIR que serão usadas no procedimento (configure). Para maior conveniência e menor custo de desenvolvimento, é fornecida uma maneira fácil de configurar as características do build / compilação.

O script mingw-config é um (wrapper) para mingw-w64. Sua utilização é para gerar uma compilação oficial para Windows. Esse script assume que as seguintes bibliotecas tenham sido compiladas e/ou instaladas para a compilação cross:

  • c-ares
  • openssl
  • expat
  • sqlite3
  • zlib
  • cppunit

Algumas variáveis de ambiente precisam ser ajustadas para compilar:

HOST
compilação-cross para compilar programas que serão executados em um computador HOST. Padrão para i686-w64-mingw32. Para compilar binário para 64bits, especificar x86_64-w64-mingw32.
PREFIX
Prefixo do diretório onde as bibliotecas dependentes estão instaladas. Padrão para /usr/local/$HOST. -I$PREFIX/include será adicionado às opções CPPFLAGS. -L$PREFIX/lib será adicionado em LDFLAGS. $PREFIX/lib/pkgconfig será configurado para PKG_CONFIG_LIBDIR.

Por exemplo, para construir um binário para 64bits utilize:

$ HOST=x86_64-w64-mingw32 ./mingw-config

Compilação Cross Android binário

Nessa seção, descrevemos como construir um binário usando o compilador-cross NDD no Linux Debian.

android-config é um script para configurar compilação para Android, o qual assume que as seguintes bibliotecas também foram construídas para compilador-cross:

  • c-ares
  • openssl
  • expat

Quando compilando as bibliotecas, certifique-se que o compartilhamento (share) esteja desabilitado e confirme que somente biblioteca estática está habilitado. A compilação será feita somente com bibliotecas estáticas.

A bibliteca zlib que vem com o Android NDK, portanto não é necessário compilar uma zlib nova.

android-config assume os seguintes pontos:

  • Android NDK está instalado no local definido pela variável de ambiente $ANDROID_HOME. Consultar seção “3/ Chamando o compilador (jeito fácil):” no Android NDK docs/STANDALONE-TOOLCHAIN.html para instalar (toolchain) personalizada.
  • Bibliotecas dependentes devem estar instaladas em $ANDROID_HOME/usr/local.

Antes executar android-config e android-make, a variável de ambiente $ANDOIRD_HOME deve apontar para o caminho correto.

Após android-config, executar android-make para compilar os fontes.

aria2 para dispositivos Android

aria2 é utilitário para download leve e multi-protocolo bem como multi-fontes operado através da linha de comando de um emulador de terminal que é executado no android. Há Suporte para downloads do tipo HTTP, HTTPS, FTP, BitTorrent e Metalink.

Instalando aria2 no Android

aria2 não é uma aplicação Android Java. aria2 é uma aplicação escrita em C++ nativo e opera em modo linha de comando. Não é necessário ter acesso ao usuário ‘root’ para usar aria2. Como já dito, aria2 é um programa de linha de comando e por isso é necessário um emulador de terminal, portanto antes instale um emulador de Terminal Android a partir do Android Market (ou compile a partir da fonte e instale). Veja Github jackpal.

  1. Copiar o executável do aria2c para /mnt/sdcard do seu dispositivo.

  2. Executar Emulador Terminal Android.

  3. Criar diretório mkdir /data/data/jackpal.androidterm/aria2

  4. Anexar aplicação cat /mnt/sdcard/aria2c > /data/data/jackpal.androidterm/aria2/aria2c

  5. Habilitar modo execução chmod 744 /data/data/jackpal.androidterm/aria2/aria2c

  6. Adicionar o seguintes comandos ao Emulador de Terminal Android Terminal Emulator:

    export HOME=/data/data/jackpal.androidterm/aria2; cd $HOME
    
  7. Sair do Emulador de Terminal Android.

  8. Executar novamente o Emulador de Terminal Android.

  9. Execute aria2c chamando o comando ./aria2c -v

Como usar comandos do aria2 no Android

Ver o manual do aria2 online nos seguintes idiomas: Tradução em Português. Original em Inglês. Tradução em Russo.

Notas sobre uso do aria2 no Android

O executável aria2c foi gerado usando android-ndk-r8d.

As seguintes bibliotecas foram ligadas estaticamente.

  • openssl 1.0.1e
  • expat 2.1.0
  • c-ares 1.9.1

Como o Android não possuem /etc/resolv.conf, c-ares (resolvedor assíncrono de DNS) é desabilitado por padrão. Muitas vezes a resolução de nomes é lenta, recomenda-se habilitar c-ares. Para desabilitar use :option:--async-dns e especifique os servidores DNS usando opção :option:--async-dns-server, como abaixo:

--async-dns --async-dns-server=`getprop meu.dns1`,`getprop meu.dns2`

Para não se entediar digitando estes parâmetros, toda vez que usar aria2c, o seguinte script shell pode ser útil:

#!/system/bin/sh
/data/data/jackpal.androidterm/aria2c \
  --async-dns \
  --async-dns-server=`getprop meu.dns1`,`getprop meu.dns2` \
  "$@"

Lembrar de tornar este script executável, através do comando chmod. Também substitua meu.dns1 e meu.dns2 pelos DNS reais que você quer. Exemplo: (chmod 744 /path-para-o/scriptSCRIPT)

Problemas Conhecidos com o aria2c no Android

  • Como Android não tem /dev/stdout, -l- não funciona.
  • Em alguns casos o Emulador de Terminal Android, para de atualizar a console. É como se o aria2c congelasse, mas o aria2c continua executando normalmente.

Para Gerar a documentação

Sphinx é usado para construir a documentação. As páginas (man) da documentação também são criadas através do comando make man caso estas páginas estejam desatualizadas. Também podem ser construídas a documentação em diversos formatos como html, latexpdf, epub, devhelp, latex, htmlhelp. Exemplo: Para construir a documentação aria2 em HTML use o comando make html. O resultado será criado na subpasta _build dentro da pasta onde baixou o fonte do aria2. Ex: se baixou e descompactou o aria2 no local /home/usuario/aria2/ então a documentação gerada está em:

/home/usuario/aria2/doc/manual-src/pt/_build/

A pasta pt indica o idioma que atualmente pode ser (en,pt,ru). Para gerar documento PDF use a opção make latexpdf certifique-se de que os pré-requisitos de fontes usados pelo latex estejam presentes.

A versão online HTML também está disponível em: Original em Inglês e nas traduções em: (Português e Russo).

BitTorrrent

Sobre Nome de arquivos

O nome do arquivo que será baixado é determinado da seguinte maneira:

modo arquivo simples
O a chave “name” está presento no arquivo .torrent, o nome do arquivo será o valor da chave “name”. De outra maneira o nome do arquivo será baseado no arquivo .torrent mais o sufixo “.file”. Exemplo: arquivo .torrent é “brasil.torrrent”, então o nome do arquivo baixado será: “brasil.torrent.file”. O diretório onde será armazenado o arquivo pode ser especificado através da opção -d.
modo arquivos múltiplos
A estrutura completa diretório/arquivo mencionada no arquivo .torrent será creada. O diretório base que conterá toda estrutura de diretórios e arquivos baixados, pode ser especificado através da opção -d. Antes do download iniciar a estrutura completa dos diretórios necessários ao download será criada. Por padrão aria2 abre no mínimo 100 arquivos mencionados no arquivo .torrent e diretamente executa gravação e leitura desses arquivos. O número máximo de arquivos para serem abertos simultaneamente pode ser controlado através da opção :option:--bt-max-open-files.

DHT

aria2 suporte DHT. Por padrão, a tabela de roteamento para IPv4 DHT é salva em $HOME/.aria2/dht.dat e a tabela de roteamento para IPv6 DHT é salva em $HOME/.aria2/dht6.dat. aria2 utiliza o mesmo número de porta para ouvir ambos IPv4 e IPv6 DHT.

Rastreador UDP

Rastreador UDP é habilitado quando DHT IPv4 é habilitado. O número da porta do rastreador UDP é compartilhado com DHT. Usar opção :option:--dht-listen-port para modificar o número da porta.

Outras informações importantes

  • Se a opção -o é usada para mudar o nome do arquivo de saida .torrent não o nome do arquivo dentro do arquivo .torrent. Para esta finalidade utilizar opção :option:--index-out.
  • Os números de portas padrões que o aria2 utiliza para TCP e UDP estão no intervalo de 6881 até 6999 (6881-6999).
  • aria2 não configura automaticamente port-forwarding. Por favor configurar manualmente seu roteador ou firewall.
  • O número máximo de é 55. Este limite pode ser excedido quando a taxa de download é muito baixa. Esta taxa de download pode ser ajustada com a opção :option:--bt-request-peer-speed-limit.
  • Desde a versão 0.10.0, aria2 parou de enviar mensagem de requisição após o download seletivo completar-se.

netrc

O suporte netrc é habilitado por padrão para HTTP, HTTPS e FTP. Para desabilitar especificar opção -n na linha de comando. Seu arquivo .netrc precisa possuir permissões corretas (600).

WebSocket

O servidor WebSocket intrínseco no aria2 implementa a especificação definida na RFC 6455. O protocolo suportado refere-se a versão 13.