Hlavní navigace

Aria2: profesionální pomocník na stahování

11. 3. 2011
Doba čtení: 7 minut

Sdílet

Stahování dat je staré jako síť sama a jelikož linuxovým operačním systémům nikdy práce se sítí nedělala problémy, není divu, že se kolem něj začaly objevovat dnes už nesmrtelné stahovací nástroje, které všichni používáme, ani o tom nevíme. Dnes se podíváme na jeden, který se nyní snaží dostat na vrchol.

Servery jsou už dlouhou dobu připojovány 100 či 1000 Mbps linkami a u jednotlivých strojů se zatím nějaká revoluce nechystá. Nicméně rychlost připojení domácností stoupá to velmi rychle. Narazit na 10 Mbps linku doma ve zdi už není takový problém a tak se může stát, že úzkým hrdlem není domácí linka, ale nějaký prvek mezi ní a serverem, ze kterého se stahuje. Navíc některé servery limitují rychlost toku dat pro jednotlivá spojení a někde i IP adresy a tady přicházejí na řadu nástroje, mezi kterými je královna Aria2, projekt, který v mnoha ohledech zastoupí i wget.

HTTP, FTP a BitTorrent

Aria2 pracuje se třemi protokoly, které dokáže navzájem kombinovat. Stahování přes HTTP umí kdeco, takže se teď možná ptáte, v čem je Aria2 tak výjimečná, a já bych to shrnul do krátkého seznamu:

  • stahování jednoho souboru z více zdrojů,
  • automatické navázání stahování – i po přerušení připojení do sítě,
  • omezení rychlosti stahování,
  • stahování více souborů najednou,
  • podpora IPv6,
  • podpora cookies,
  • oprava poškozených souborů.

S instalaci balíčku aria2 ve vaší distribuci se vám v systému objeví řádková utilitka aria2c, která se pro samotné stahování používá. Chcete-li stáhnout nějaký soubor, stačí to udělat podobně, jak jste zvyklí s wgetem:

$ aria2c http://example.com/soubor1.iso 

Když znáte dva zdroje stejného souboru, jednoduše ho přidejte:

$ aria2c http://example.com/soubor1.iso http://example2.com/soubor1.iso 

Aria2 si soubor rozdělí na části a ty pak stahuje z různých zdrojů. Toto chování lze ovlivnit parametrem -s resp. –split.

$ aria2c -s 2 -j 2 http://example.com/soubor1.iso http://example2.com/soubor1.iso 

Tím jste řekli Arie, aby stáhla soubor1.iso, tak že ho rozdělí na dva kusy a použije k tomu 2 spojení (-j). Chování je nicméně automatické a Aria2 se snaží jednat co nejefektivněji, takže tyto parametry můžete s přehledem vynechat.

Pokud se jedná o dva rozdílné soubory, stáhne je jako dva soubory.

Zajímavější je podpora BitTorrentu, která je na velmi dobré úrovni. Neodpustím si opět krátký seznam výhod:

  • podpora DHT včetně IPv6,
  • omezení jak počtu spojení tak rychlosti stahování a odesílání,
  • po stažení samotného souboru .torrent, začne stahovat rovnou jeho obsah,
  • podpora šifrování,
  • podpora proxy,
  • XML-RPC.

V praxi to pak vypadá tak, že si najdete nějaký odkaz na .torrent soubor a předáte ho utilitce aria2c:

$ aria2c http://releases.ubuntu.com/maverick/ubuntu-10.10-alternate-amd64.iso.torrent 

Aria2 stáhne co jste ji předhodili a jelikož pochopí, že jde o .torrent, rovnou se podívá co je v něm a to začne stahovat také. Po přidání parametru –follow-torrent=mem, se stažený .torrent uchová pouze v paměti, takže se zbytečně neplete mezi staženými soubory.

Samozřejmostí je podpora DHT a magnet linků. DHT je distribuovaná databáze, ve které si na základě hashe můžete najít, co se bude stahovat. Když naleznete hash třeba ke hledanému isu distribuce, předáte ho aria2c a ta si už z DHT stáhne veškeré informace a když zjistí odkud, začne stahovat i samotné iso.

$ aria2c magnet:?xt=urn:btih:bcf2e587afd4d3b1bdd8ec..... 

Důležitou vlastností je bezproblémová podpora IPv6. Když aria2c detekuje IPv6 adresu, začne na ní automaticky naslouchat.

Když potřebujete stáhnout nějaký delší soubor, ať už přes HTTP nebo BitTorrent, můžete spustit aria2c jako daemona pomocí parametru -d a nezabírat tak prostor mezi terminály. Stav lze pak kontrolovat třeba pythoním skriptem, ale v některých distribucích k tomu najdete přímo určené utilitky aria2rpc a aria2mon.

$ aria2c --enable-xml-rpc 

Příklad komunikace v Pythonu:

In [2]: import xmlrpclib
In [3]: s = xmlrpclib.ServerProxy('http://localhost:6800/rpc')

In [8]: s.aria2.tellActive()
Out[8]: []

In [9]: s.aria2.addUri(["http://releases.ubuntu.com/maverick/ubuntu-10.10-alternate-i386.iso.torrent"],{"dir":"/mnt/halda/"})
Out[9]: '1'

In [10]: s.aria2.tellActive()
Out[10]:
[{'bitfield': '000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000',
'bittorrent': {'announceList': [['http://torrent.ubuntu.com:6969/announce'],
                ['http://ipv6.torrent.ubuntu.com:6969/announce']],
        'comment': 'Ubuntu CD releases.ubuntu.com',
        'creationDate': 1286702527,
        'info': {'name': 'ubuntu-10.10-alternate-i386.iso'},
        'mode': 'single'},
'completedLength': '0',
'connections': '0',
'dir': '/mnt/halda/',
'downloadSpeed': '0',
'files': [{'index': '1',
    'length': '726228992',
    'path': '/mnt/halda//ubuntu-10.10-alternate-i386.iso',
    'selected': 'true',
    'uris': []}],
'gid': '2',
'infoHash': 'add9677e614a70ab2ecd309d069f7586984dda55',
'numPieces': '1386',
'numSeeders': '0',
'pieceLength': '524288',
'status': 'active',
'totalLength': '726228992',
'uploadLength': '0',
'uploadSpeed': '0'}] 

Konfigurace

Seznámili jsme se ze základním ovládáním a nyní je čas podívat se na adresář ~/aria2. V něm najdeme konfigurační soubor aria2.conf a také routovací tabulku k DHT. Do konfiguračního souboru můžeme zadat stejné parametry, jako zadáváme do příkazové řádky při spouštění aria2c. Pouze odstraníme první dva znaky . Konfigurační soubor pak může vypadat třeba takto:

follow-torrent=mem
seed-ratio=3
enable-xml-rpc
log=/tmp/aria2.log
enable-dht=true 

Tento konfigurační soubor je ekvivalentem tomuto:

$ aria2c --follow-torrent=mem --seed-ratio=3 --enable-xml-rpc --log=/tmp/aria2.log --enable-dht=true 

Všechny další volby najdete v manuálové stránce.

$ man aria2c 

Metalinky

A dostáváme se pomalu k tomu nejzajímavějšímu. Metalink je soubor, kde jsou vypsány všechny zdroje, ze kterých lze nějaký soubor stáhnout. Pokrývá jak HTTP a FTP servery, tak BitTorrent. Největší výhoda, kromě potenciálně výrazně vyššího využití vašeho připojení k síti, je fakt, že když nezůstane nikdo, kdo by sdílel torrent, je možné si soubor dotáhnout z jiného zdroje. Metalink je XML formát a obsahuje informace o stahovaném souboru, jeho hashe i priority jednotlivých zdrojů. Takovým krátkým příkladem může být třeba metalink pro stažení DVD Ubuntu 10.04.2:

<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/xsl" href="http://download.eclipse.org/eclipse/metalink.xsl"?>
<metalink version="3.0" pubdate="Thu, 17 Feb 2011 19:45:51 +0000" xmlns="http://www.metalinker.org/">
  <publisher>
    <name>Ubuntu</name>
    <url>http://www.ubuntu.com/</url>
  </publisher>
  <version>10.04.2</version>
  <description>Ubuntu CD Image</description>
  <logo>http://www.ubuntu.com/themes/ubuntu07/images/ubuntulogo.png</logo>
  <files>
    <file name="ubuntu-10.04.2-dvd-i386.iso">
      <size>4476102656</size>
      <os>Linux-x86</os>
      <verification>
        <hash type="md5">e1b88a1d9cc625ce45bb26fba8fa855c</hash>
      </verification>
      <resources maxconnections="1">
    <url type="bittorrent" preference="200">http://cdimage.ubuntu.com/releases/10.04.2/release/ubuntu-10.04.2-dvd-i386.iso.torrent</url>
    <url type="http">http://cdimage.ubuntu.com/releases/10.04.2/release/ubuntu-10.04.2-dvd-i386.iso</url>
      </resources>
    </file>
  </files>
</metalink> 

Metalink lze stáhnout stejně jako kterýkoli jiný soubor, stačí jeho URL předhodit utilitce aria2c.

$ aria2c http://ftp.heanet.ie/pub/ubuntu-cdimage/releases/10.04.1/release/ubuntu-10.04.2-dvd-i386.metalink 

Při stahování velkých souborů se můžete setkat s tím, že aria2c si na začátku alokuje celý soubor, aby měla jistotu, že na něj je prostor. Na souborovém systému, který podporuje falloc (třeba Ext4 nebo Btrfs), to je otázka vteřin, ale je potřeba falloc vnutit parametrem –file-allocation=falloc.

apt-metalink

Pro uživatele distribucí Ubuntu a Debian existuje utilitka apt-metalink, která dokáže využít výhod při stahování balíčků z repositářů. Podmínkou je mít více zadaných zrcadel v /etc/apt/sources­.list a někam si stáhnout pythoní skript apt-metalink.

V případě první podmínky jsem použil jako zrcadla:

  • http://ftp.sh­.cvut.cz/MIRROR­S/ubuntu/
  • http://cs.archi­ve.ubuntu.com/u­buntu/

Sources.list může pak vypadat takhle:

deb http://ftp.sh.cvut.cz/MIRRORS/ubuntu/ maverick main restricted
deb-src http://ftp.sh.cvut.cz/MIRRORS/ubuntu/ maverick main restricted
deb http://cs.archive.ubuntu.com/ubuntu/ maverick main restricted
deb-src http://cs.archive.ubuntu.com/ubuntu/ maverick main restricted
[...] 

Druhou podmínku splníme jednoduše:

$ aria2c https://github.com/tatsuhiro-t/apt-metalink/raw/master/apt-metalink 

Pak stačí stáhnout seznamy balíčků:

$ sudo apt-get update 

A použít apt-metalink na aktualizaci:

CS24_early

$ sudo ./apt-metalink upgrade 

Pomocí apt-metalink se nyní budou balíčky stahovat ze dvou zdrojů najednou.

Závěr

Pod název Aria2 se toho skrývá mnohem víc, a pokud se podíváte do manuálových stránek, tak zjistíte, že s ní můžete stáhnout téměř vše a navíc efektivně. Aria2 je vyvíjená převážně jedním vývojářem, který je zároveň autorem apt-metalink.

Odkazy

Byl pro vás článek přínosný?

Autor článku

Adam Štrauch je redaktorem serveru Root.cz a svobodný software nasazuje jak na desktopech tak i na routerech a serverech. Ve svém volném čase se stará o komunitní síť, ve které je již přes 100 členů.