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/MIRRORS/ubuntu/
- http://cs.archive.ubuntu.com/ubuntu/
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:
$ 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.