RPCに対応した軽量ダウンローダーaria2を使ってみた

コマンドラインプログラミング言語等から操作可能なダウンロードツールを探していたらaria2というダウンローダーを見つけたので使ってみた。

aria2の特徴

  • HTTP, HTTPS, FTP, BitTorrent, Metalinkに対応
  • 軽量
    • メモリの使用量は一般的に4MiB〜9MiB
    • CPUの使用率は6%程度(BitTorrentでDL速度2.8MiB/sの場合)
  • 複数ソースからの多重ダウンロードに対応
    • 複数ミラーサイトから同時にダウンロードすることでダウンロード速度をアップさせる
  • RPC(Remote Procedure Call)によるリモートコントロールが可能

インストール

Arch Linuxでは公式リポジトリからインストール可能。

$ pacman -S aria2

コマンドラインから使う

普通にダウンロード

$ aria2c http://hoge.org/path/file.zip

分割ダウンロード(分割数=2)

$ aria2c -x2 http://hoge.org/path/file.zip

複数ミラーサイトから同時にダウンロード

$ aria2c http://hoge.org/path/file.zip http://fuga.com/path/file.zip

などなど。aria2のオプションについてはこちらを参照。

分割ダウンロードとか複数サイトからの同時ダウンロードとかは凄いけど、コマンドラインで使うのなら使い勝手はcURLとかwgetと大して変わらない(オプションは全然違うけど)。

RPCで使う

RPC(Remote Procedure Call)とは簡単に言うと、別のPCにある機能を使うための技術。aria2をRPCサーバーとして起動すると、ネットワーク上の他のPCからaria2の機能(URLの追加/削除、ダウンロードの開始/終了、等々)を利用できるようになる。RPC自体は別にどうでも良いのだが、aria2をRPCサーバーとして起動すると次のようなメリットがある。

  • プログラミング言語から扱いやすくなる

    多くのプログラミング言語にはRPCを簡単に扱うためのライブラリがある。

  • グラフィカルなフロントエンドが利用できる

    ブラウザを利用したGUIフロントエンドが利用可能。

  • ダウンロードキューを動的に制御が出来る

    コマンドラインモードでもダウンロードするURLのリストをファイルで指定できるが、動的なキューの制御は出来ない(多分)。RPCサーバーモードだとキューを動的に制御できる。

RPCサーバーとして起動

6800番を待受ポートとしてaria2サーバーを起動するには次のコマンドを使う。

$ aria2c --enable-rpc --rpc-listen-port=6800 --rpc-listen-all

終了するにはCtrl+Cを使用。

RPCで制御

RPCを扱えるツールなら何でも良いのだが、例としてPython3.4.2を使ってaria2にArch LinuxのISOファイルをダウンロードさせてみる。

aria2のRPCインターフェースの詳細はこちら

adduri.py
import xmlrpc.client

proxy = xmlrpc.client.ServerProxy('http://localhost:6800/rpc')
gid = proxy.aria2.addUri(
	['http://ftp.tsukuba.wide.ad.jp/Linux/archlinux/iso/2015.02.01/archlinux-2015.02.01-dual.iso'],
	{'dir': '/home/user/Downloads', 'out': 'archlinux.iso'}
)
print(gid)

ServerProxy()でaria2サーバーのホスト名とポートを指定。

addUri()はダウンロードキューにURLを追加する。第1引数はURL。第2引数はオプションで、dirは保存ディレクトリ、outは保存ファイル名。

addUri()はGIDと呼ばれるダウンロードアイテム毎に割り当てられるIDを返す。ダウンロードの停止/再開/削除等を行うにはGIDを指定する。

上記のスクリプトを実行するにはaria2と別の端末で次のコマンドを入力。

$ python3 adduri.py

するとaria2が起動している端末にダウンロードの進捗状況が表示される。

ブラウザから使用する

aria2の進捗表示はお世辞にも見やすいとは言えないし、端末を閉じるとaria2が終了してしまう。webui-aria2を使うとブラウザからダウンロードの追加/削除、状況確認が行える。

まずはaria2をデーモンとして起動する。

$ aria2c --daemon --enable-rpc --rpc-listen-port=6800 --rpc-listen-all

次にwebui-aria2をgit cloneするなりDownload Zipするなりして入手する。

後はwebui-aria2のindex.htmlをブラウザで開くだけ。接続先はデフォルトでlocalhostの6800番ポートになっている。変更するときはヘッダメニューのSettings > Connection Settingsから行う。

ヘッダメニューのAdd > By URIsからダウンロードしたいファイルのURLを追加できる(勿論、先ほど作ったスクリプトからも追加できる)。