aria2 是另一款 Linux 下轻量级的多线程下载工具,支持 Http/Https、Ftp、BitTorrent、Metalink 协议。它比 axel 优秀的地方在于:完全支持 BitTorrent 协议,同时可以作为 BitTorrent 客户端来下载种子文件;支持 Metalink 协议;远程控制(通过 web 端)下载进程。 比起 wget, aria2 支持多线程下载,比起 Transmission, aria2 更快,支持的协议更多。
Aria 2 本身是一款纯命令行工具,看来 6 MB 的体积没能容下精心设计的图形界面,但这绝不妨碍它成为一款使用体验上佳的下载器——退一步讲,没有图形界面也算变相避开了广告等无关因素的骚扰吧。Aria 2 支持 BT、磁力链和普通 HTTP(s) / FTP 下载,没能解析 ed2k:// 是个遗憾。作为下载器中的高端货,设置磁盘缓存、多线程、远程服务器登录和上下行限速等不在话下,它甚至能够处理 URL 通配符、从多个地址下载/合并同一文件、加载 Cookie / Header、伪装 User Agent 和允许远程控制等等。
官网地址:http://aria2.sourceforge.net ,首页有简略使用教程(Usage Examples),更多高阶教程围观官网 Manual(一切宝藏尽在这里)。
一、aria2 安装
默认 repo 里没有 aria2 ,我们需要添加第三方的 yum 源。
CentOS:
1、先安装 RepoForge Repos
2、 yum -y install aria2
Ubuntu:
$ sudo apt-get install aria2
# wget http://pkgs.repoforge.org/rpmforge-release/rpmforge-release-0.5.2-2.el6.rf.i686.rpm # rpm -ivh rpmforge-release-0.5.2-2.el6.rf.i686.rpm # yum -y install aria2
编译安装:
源码下载地址:http://aria2.sourceforge.net/,目前最新版的是1.18.10, http://sourceforge.net/projects/aria2/files/stable/aria2-1.18.10/
1、下载 源码包
2、编译安装
# wget http://sourceforge.net/projects/aria2/files/stable/aria2-1.18.10/aria2-1.18.10.tar.gz # tar xf aria2-1.18.10.tar.gz -C /usr/local/src # cd /usr/local/src # ./configure # make ### 报错 ... CXX A2STR.lo CXX AbstractAuthResolver.lo CXX AbstractCommand.lo In file included from AbstractCommand.cc:35: AbstractCommand.h:261: error: ‘nullptr‘ was not declared in this scope AbstractCommand.h:263: error: ‘nullptr‘ was not declared in this scope In file included from FileAllocationMan.h:39, from DownloadEngine.h:50, from AbstractCommand.cc:40: SequentialPicker.h: In member function ‘T* aria2::SequentialPicker<T>::pickNext()‘: SequentialPicker.h:78: error: ‘nullptr‘ was not declared in this scope In file included from DownloadEngine.h:52, from AbstractCommand.cc:40: DNSCache.h: In member function ‘void aria2::DNSCache::CacheEntry::getAllGoodAddrs(OutputIterator) const‘: DNSCache.h:86: error: expected initializer before ‘:‘ token ...
This is because compiler is too old to support C++11 features aria2 requires. And configure check for C++11 feature is a bit weak. At the moment, gcc >= 4.8.3 or clang >= 3.4 compile aria2 fine. gcc 4.6 or 4.7 may also work. But less than that probably fails.
建议下载低版本的 aria2 (aria2-1.17.1), 然后编译安装。
# wget http://sourceforge.net/projects/aria2/files/stable/aria2-1.17.1/aria2-1.17.1.tar.gz # tar xf aria2-1.17.1.tar.gz -C /usr/local/src # cd /usr/local/src # cd aria2-1.17.1/ # ./configure # make && make install # 默认情况下,会在/usr/local/bin 目录创建 aria2c 可执行程序。 # aria2c -v aria2 version 1.17.1 Copyright (C) 2006, 2013 Tatsuhiro Tsujikawa
二、aria2 命令行基本使用
1、Download from WEB # aria2c -c -s 5 http://example.org/mylinux.iso -c : 断点续传 -s : 使用线程数 2、Download from 2 sources # aria2c http://a/f.iso ftp://b/f.iso 3、Download using 2 connections per host # aria2c -x2 http://a/f.iso 4、BitTorrent Magnet URI # aria2c ‘magnet:?xt=urn:btih:248D0A1CD08284299DE78D5C1ED359BB46717D8C‘ 5、Metalink # aria2c http://example.org/mylinux.metalink 6、Download URIs found in text file # aria2c -i uris.txt 7、BT # aria2c /tmp/CentOS-6.3-i386-bin-DVD1to2.torrent
三、aria2 配置示例
aria2 或者 aria2c 通常有两种模式:
第一种模式:
直接下载,比如 aria2c ‘http://host/file.tar.gz‘ 这种,然后当下载完成后,就自动退出了,就和wget 的工作方式一样。
第二种模式:
另一种就是 rpc server 模式,特点就是,它启动之后什么都不干,然后等着从rpc接口添加任务,下载完也不退出,而是一直等着。对,就像迅雷干的那样,当然,它不会上传你硬盘上的数据。
因为第一种方式要每次都敲命令,除非像我是原生*nix,没有命令行就没法用电脑,估计也没什么用,于是常用的就是第二种。一般启动命令是 # aria2c --enable-rpc --rpc-listen-all=true --rpc-allow-origin-all -c -D 。但是,其实这个命令是不好的!不要使用这种启动方式。 默认情况下是没有保存设定的功能的,重启服务或服务器,配置都会丢失。
首先,用命令方式导致配置不方便修改保存,-D导致无法看到出错信息。推荐启动方式是使用配置文件 $HOME/.aria2/aria2.conf 或者 /etc/aria2.conf。嗯,我知道路由上这个地址是无法修改或者重启后会丢失的,那么你可以放到别的地方,然后 aria2c --conf-path=<PATH> -D 注意 <PATH> 填完整路径,因为鬼知道这个程序是从那个路径启动的。-D (用于后台执行,daemon 模式, 这样ssh断开连接后程序不会退出) 只有在确认OK之后在启动脚本中使用。
以下方案都基于配置文件方式
## 图形界面
aria2是没有图形界面的,已知相对好用的图形界面有:
- YAAW
- 另一个web前端 webui-aria2
请使用 chrome,firefox 等现代浏览器访问。这两个东西都可以直接使用,除了看英文不爽以外,有什么必要下载回来使用。这两个东西上的配置在重启后都会失效! 使用配置文件保存您的设置
- windows下有Aria2c Remote Control
- iphone有Aria2 Download Manager
图形界面基本都基于RPC模式,所以一定确定开启了RPC,IP端口可访问,并且在管理器中填写了正确的地址。
##配置
http://aria2.sourceforge.net/manual/en/html/index.html
请将所有配置置于配置文件中
只有在确认配置无误后再加上 -D
选项
请阅读出错信息!
###RPC
需要1.14及以上版本
http://aria2.sourceforge.net/manual/en/html/aria2c.html#rpc-options
#允许rpc enable-rpc=true #允许所有来源, web界面跨域权限需要 rpc-allow-origin-all=true #允许非外部访问 rpc-listen-all=true #RPC端口, 仅当默认端口被占用时修改 #rpc-listen-port=6800
如果启动时出现 Initializing EpollEventPoll failed.
或相似错误, 在配置中加上 event-poll=select
使用token验证(建议使用,需要1.18.4以上版本,帐号密码方式将在后续版本中停用!)
# token验证 rpc-secret=secret
在YAAW中使用 http://token:[email protected]:port/jsonrpc
的地址格式设置secret.
如果需要使用密码验证(需要1.15.2以上,1.18.6以下版本)
#用户名 rpc-user=username #密码 rpc-passwd=passwd
在YAAW中使用 http://username:[email protected]:port/jsonrpc
的地址格式设置密码.
对于RPC模式来说, 界面和后端是分离的, 只要给后端设置密码即可. 前端认证什么的是毫无意义的.
如果你比较新潮, 在YAAW中也可以用 ws://
为前缀,只用websocket连接aria2c, 如果你不知道websocket是什么. 那就算了.
###速度相关
#最大同时下载数(任务数), 路由建议值: 3 max-concurrent-downloads=5 #断点续传 continue=true #同服务器连接数 max-connection-per-server=5 #最小文件分片大小, 下载线程数上限取决于能分出多少片, 对于小文件重要 min-split-size=10M #单文件最大线程数, 路由建议值: 5 split=10 #下载速度限制 max-overall-download-limit=0 #单文件速度限制 max-download-limit=0 #上传速度限制 max-overall-upload-limit=0 #单文件速度限制 max-upload-limit=0 #断开速度过慢的连接 #lowest-speed-limit=0 #验证用,需要1.16.1之后的release版本 #referer=*
###进度保存相关
aria2c只有在正常退出时(ctrl-c), 突然断电是无法保存进度的. 在第一次使用的时候会出现会话文件不存在的错误, 手动创建一个空文件即可. 如果您编写的是自动启动脚本, 在启动aria2前加上 touch aria2.session
这句命令.
input-file=/some/where/aria2.session save-session=/some/where/aria2.session #定时保存会话,需要1.16.1之后的release版 #save-session-interval=60
###磁盘相关
#文件保存路径, 默认为当前启动位置 dir=/some/where #文件缓存, 使用内置的文件缓存, 如果你不相信Linux内核文件缓存和磁盘内置缓存时使用, 需要1.16及以上版本 #disk-cache=0 #另一种Linux文件缓存方式, 使用前确保您使用的内核支持此选项, 需要1.15及以上版本(?) #enable-mmap=true #文件预分配, 能有效降低文件碎片, 提高磁盘性能. 缺点是预分配时间较长 #所需时间 none < falloc ? trunc << prealloc, falloc和trunc需要文件系统和内核支持 file-allocation=prealloc
###BT相关
http://aria2.sourceforge.net/manual/en/html/aria2c.html#bittorrent-specific-options
#启用本地节点查找 bt-enable-lpd=true #添加额外的tracker #bt-tracker=<URI>,… #单种子最大连接数 #bt-max-peers=55 #强制加密, 防迅雷必备 #bt-require-crypto=true #当下载的文件是一个种子(以.torrent结尾)时, 自动下载BT follow-torrent=true #BT监听端口, 当端口屏蔽时使用 #listen-port=6881-6999
aria2亦可以用于PT下载, 下载的关键在于伪装
#不确定是否需要,为保险起见,need more test enable-dht=false bt-enable-lpd=false enable-peer-exchange=false #修改特征 user-agent=uTorrent/2210(25130) peer-id-prefix=-UT2210- #修改做种设置, 允许做种 seed-ratio=0 #保存会话 force-save=true bt-hash-check-seed=true bt-seed-unverified=true bt-save-metadata=true #定时保存会话,需要1.16.1之后的某个release版本(比如1.16.2) #save-session-interval=60
配置实战 (注意:请留意aria2的软件版本,其配置参数不一定都适用,请自行调整)
## 第一步:编辑配置文件 # touch /data/aria2.session # vim /etc/aria2.conf #最大同时下载数(任务数), 路由建议值: 3 max-concurrent-downloads=10 #断点续传 continue=true #同服务器连接数 max-connection-per-server=5 #最小文件分片大小, 下载线程数上限取决于能分出多少片, 对于小文件重要 min-split-size=10M #单文件最大线程数, 路由建议值: 5 split=10 #下载速度限制 max-overall-download-limit=0 #单文件速度限制 max-download-limit=0 #上传速度限制 max-overall-upload-limit=10K #单文件速度限制 max-upload-limit=0 #断开速度过慢的连接 #lowest-speed-limit=0 #文件缓存, 使用内置的文件缓存, 如果你不相信Linux内核文件缓存和磁盘内置缓存时使用, 需要1.16及以上版本 #disk-cache=0 #另一种Linux文件缓存方式, 使用前确保您使用的内核支持此选项, 需要1.15及以上版本(?) #enable-mmap=true #文件预分配, 能有效降低文件碎片, 提高磁盘性能. 缺点是预分配时间较长 #所需时间 none < falloc ? trunc << prealloc, falloc和trunc需要文件系统和内核支持 file-allocation=prealloc ### ====== #文件下载保存路径,默认为当前启动aria2的目录 dir=/data/download #Log log=/data/aria2c.log force-save=true bt-hash-check-seed=true bt-seed-unverified=true bt-save-metadata=true #定时保存会话,需要1.16.1之后的某个release版本(比如1.16.2) input-file=/data/aria2.session save-session=/data/aria2.session #save-session-interval=60 ### ====== #BT下载相关 #启用本地节点查找 bt-enable-lpd=true #添加额外的tracker #bt-tracker=<URI>,… #单种子最大连接数 #bt-max-peers=55 #强制加密, 防迅雷必备 #bt-require-crypto=true #当下载的文件是一个种子(以.torrent结尾)时, 自动下载BT,Default: true follow-torrent=true #BT监听端口, 当端口屏蔽时使用 #listen-port=6881-6999 #允许rpc enable-rpc=true #允许所有来源, web界面跨域权限需要 rpc-allow-origin-all=true #允许非外部访问 rpc-listen-all=true #RPC端口, 仅当默认端口被占用时修改 #rpc-listen-port=6800 ## 第二步:启动服务 [[email protected] ~]# aria2c --conf-path=/etc/aria2.conf -D 04/21 22:20:53 [WARN] Unknown option: max-overall-upload-limit=10K 04/21 22:20:53 [WARN] Unknown option: max-upload-limit=0 04/21 22:20:53 [WARN] Unknown option: bt-enable-lpd=true 04/21 22:20:53 [WARN] Unknown option: follow-torrent=true ### 报错,我们把 /etc/aria2.conf 中相应的参数 注释即可。 [[email protected] ~]# aria2c --conf-path=/etc/aria2.conf -D [[email protected] ~]# ss -tulpn | grep aria2c tcp LISTEN 0 1 :::6800 :::* users:(("aria2c",41664,7)) tcp LISTEN 0 1 *:6800 *:* users:(("aria2c",41664,6))
网上copy的一个 aria2.conf 配置,大家可以参考:
mkdir -p /opt/var/log/aria2 mkdir -p /opt/etc/aria2 mkdir -p /tmp/mnt/disca_3/Downloads touch /opt/etc/aria2/aria2.conf vi /opt/etc/aria2/aria2.conf ###SWITCH TO INSERT MODE WITH ‘i‘ ###### daemon=true enable-rpc=true rpc-listen-port=6800 rpc-listen-all=true ####### your download folder, ensure that this folder exist! ########## dir=/tmp/mnt/disca_3/Downloads #where is your logfile located log=/opt/var/log/aria2/aria2.log log-level=warn dht-listen-port=6801 auto-save-interval=30 #seed ratio and seed time in minutes seed-ratio=1.0 seed-time=1460 max-upload-limit=20K event-poll=select ####end of file aria2.conf#### ### Enter ‘ESC‘ and ‘:wq‘ to store and leave vi ###
aria2c 的服务管理脚本:
touch /opt/etc/init.d/S85aria2 vi /opt/etc/init.d/S85aria2 ###SWITCH TO INSERT MODE WITH ‘i‘ ###### # For Olegs & Ily‘s FW for Asus Routers # store this script in /opt/etc/init.d if you‘ve installed optware # Prgmname=/full_path/Prgmname prgmname1="/opt/bin/aria2c" shortname="aria2c" #one option options="--conf-path=" # configfile=/full_path/configfile configfile="/opt/etc/aria2/aria2.conf" start() { # Code here to start the program logger -t ARIA2C "Starting aria2c daemon " ${prgmname1} ${options}${configfile} sleep 5 return 0 } stop() { # Code here to stop the program and check it‘s dead if [ -n "`pidof $shortname`" ]; then logger -t ARIA2C "Shutting down aria2c daemon " /usr/bin/killall $shortname sleep 5 fi return 0 } ##########################start here########################## case "$1" in start) start ;; stop) stop ;; restart) logger -t ARIA2C "$shortname restart, executed from $(whoami)" stop sleep 2 start ;; *) echo $"Usage: $0 {start|stop|restart}" exit 1 esac sleep 1 exit #### end of file S85aria2 #### ### Enter ‘ESC‘ and ‘:wq‘ to store and leave vi ### chmod 755 /opt/etc/init.d/S85aria2 reboot
四、aria2 web 前端控制界面
YAAW – Yet Another Aria2 Web Frontend
是一个纯前端实现的Aria2 Web前端界面。无需架设任何服务器,只需要在浏览器(chrome, firefox, 使用IE的同学嘛。。。)中打开即刻使用。
http://aria2.ghostry.cn/yaaw-master/
在扳手处填入path: http://<ip_of_your_route>:6800/jsonrpc,然后修改 JSON-RPC Path, 否则报错: Error: Internal server error
Aria2 webui
Aria 2 Web-UI 是一个在线图形界面(下载到本地也可以使用),完美支持 Aria 2 的各种功能,包括自定义客户端地址进行远程控制。要下载最新版本请访问 http://github.com/ziahamza/webui-aria2
或用你的浏览器(推荐Firefox, Chrome)直接访问 http://ziahamza.github.com/webui-aria2
http://ziahamza.github.io/webui-aria2/
我们可以直接访问在线的链接, 然后设置服务器地址即可。
Aria2 webui 部署到本地服务器:
1、首先部署 web 服务器,这里使用nginx
# 使用yum工具安装 gcc 编译器以及相关工具 [[email protected] ~]# yum -y install gcc gcc-c++ automake autoconf libtool make # 使用yum工具安装模块依赖的库 # pcre, zlib, 前者为了支持重写rewrite, 后者为了支持gzip压缩 # ssl [[email protected] ~]# yum -y install zlib zlib-devel openssl openssl-devel pcre pcre-devel # 添加用户和组 # groupadd nginx # useradd -g nginx -s /sbin/nologin nginx # cd /usr/local/src # wget http://nginx.org/download/nginx-1.7.9.tar.gz # tar xf nginx-1.7.9.tar.gz # cd nginx-1.7.9 # ./configure --prefix=/usr/local/nginx --conf-path=/etc/nginx/nginx.conf --pid-path=/var/run/nginx/nginx.pid --lock-path=/var/lock/nginx/lock --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --with-http_ssl_module --with-http_flv_module --with-http_gzip_static_module --user=nginx --group=nginx # make && make install # 注意iptables 与 SELinux , 这里我们关闭它 ## For iptables # service iptables stop # chkconfig iptables off ## For SELinux # setenforce 0 # getenforce # sed -i ‘/SELINUX/s/enforcing/disabled/‘ /etc/selinux/config ## nginx 服务管理脚本 # vim /etc/init.d/nginx #!/bin/bash # # nginx - this script starts and stops the nginx daemon # # chkconfig: - 85 15 # description: Nginx is an HTTP(S) server, HTTP(S) reverse # proxy and IMAP/POP3 proxy server # processname: nginx # config: /usr/local/nginx/conf/nginx.conf # pidfile: /var/run/nginx.pid # Source function library. . /etc/rc.d/init.d/functions # Source networking configuration. . /etc/sysconfig/network # Check that networking is up. [ "$NETWORKING" = "no" ] && exit 0 nginx="/usr/local/nginx/sbin/nginx" prog=$(basename $nginx) NGINX_CONF_FILE="/etc/nginx/nginx.conf" [ -f /etc/sysconfig/nginx ] && . /etc/sysconfig/nginx lockfile=/var/lock/subsys/nginx make_dirs() { # make required directories user=`$nginx -V 2>&1 | grep "configure arguments:" | sed ‘s/[^*]*--user=\([^ ]*\).*/\1/g‘ -` if [ -z "`grep $user /etc/passwd`" ]; then useradd -M -s /bin/nologin $user fi options=`$nginx -V 2>&1 | grep ‘configure arguments:‘` for opt in $options; do if [ `echo $opt | grep ‘.*-temp-path‘` ]; then value=`echo $opt | cut -d "=" -f 2` if [ ! -d "$value" ]; then # echo "creating" $value mkdir -p $value && chown -R $user $value fi fi done } start() { [ -x $nginx ] || exit 5 [ -f $NGINX_CONF_FILE ] || exit 6 make_dirs echo -n $"Starting $prog: " daemon $nginx -c $NGINX_CONF_FILE retval=$? echo [ $retval -eq 0 ] && touch $lockfile return $retval } stop() { echo -n $"Stopping $prog: " killproc $prog -QUIT retval=$? echo [ $retval -eq 0 ] && rm -f $lockfile return $retval } restart() { configtest || return $? stop sleep 1 start } reload() { configtest || return $? echo -n $"Reloading $prog: " killproc $nginx -HUP RETVAL=$? echo } force_reload() { restart } configtest() { $nginx -t -c $NGINX_CONF_FILE } rh_status() { status $prog } rh_status_q() { rh_status >/dev/null 2>&1 } case "$1" in start) rh_status_q && exit 0 $1 ;; stop) rh_status_q || exit 0 $1 ;; restart|configtest) $1 ;; reload) rh_status_q || exit 7 $1 ;; force-reload) force_reload ;; status) rh_status ;; condrestart|try-restart) rh_status_q || exit 0 ;; *) echo $"Usage: $0 {start|stop|status|restart|condrestart|try-restart|reload|force-reload|configtest}" exit 2 esac ## 添加可执行权限 # chmod +x /etc/init.d/nginx # 启动 [[email protected] ~]# ss -tulpn | grep nginx tcp LISTEN 0 128 *:80 *:* users:(("nginx",44232,6),("nginx",44234,6))
2、下载官方的 aria2 webgui
# git clone https://github.com/ziahamza/webui-aria2.git
3、部署到nginx
# cp -r webui-aria2 /usr/local/nginx/html/ ## 编辑 nginx.conf 配置文件 # vim /etc/nginx/nginx.conf location /webui-aria2 { root html; index index.html index.htm; } ## 重启nginx # service nginx restart nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful Stopping nginx: [ OK ] Starting nginx: [ OK ]
4、访问
打开浏览器,在地址栏输入 http://your_ip/webui-aria2 即可访问
webui-aria2, 以及 yaaw 都有相应的中文汉化版。可以 查看这个网址: http://aria2.ghostry.cn/
yaaw:
https://github.com/ghostry/yaaw
上面几种方式都可以进行下载,但是需要提醒的是:
因为下载完成后文件是存在服务器上的,所以下载完成后需要通过ftp或ssh等其他方式才能取得文件。
五、ThunderLixianExporter
作用:
- 将迅雷离线地址导出成aria2/wget等下载命令,方便Linux/Mac用户使用
- 您需要拥有迅雷会员帐号才能使用此插件
- 原生导出界面整合, 原生设置界面整合
- 反文件名截断
- 多种可扩展的导出器(aria2/aria2-rpc/wget/IDM/Orbit)
- 云点播HTML5播放,导出
- 直接输出选中的链接,配合FlashGot/DownThemAll使用
接下来要改造chrome 浏览器。请访问 http://binux.github.com/ThunderLixianExporter/
按照网站的提示,将书签「ThunderLixianExporter」拖动到书签栏中。
然后我们去迅雷离线网站 lixian.xunlei.com,然后通过某个方式找一个迅雷账号,登录。在主界面下,点下刚才保存的书签,会在取回本地按钮边出现一个下拉菜单(先不要点哈)。
先点 右上角 的齿轮图标,进去后填如下地址,当然IP还是改成你的 aria2 服务器的 IP,其它不改
保存设置,然后找到一个文件,点取回本地的下拉“三角”, 选择 YAAW
然后打开刚才弄好的Aria WebUI,看看是不是有任务开始下载了?如果你没有成功,别着急,可能需要重新打开迅雷离线网站,点下那个书签,再下一次,应该没问题的。
##常见问题
###Internal server error
手动访问你的JSON-RPC地址 http://hostname:port/jsonrpc?jsoncallback=1
如果没有返回, 请确认aria2是否启动以及连通性. 如果aria2在路由器后或没有公网IP, 请做好端口映射.
###如何使用迅雷离线
http://binux.github.com/ThunderLixianExporter/
安装后, 在迅雷离线的右上角的设置中设置RPC地址.
提供chrome插件:https://chrome.google.com/webstore/detail/thunderlixianassistant/eehlmkfpnagoieibahhcghphdbjcdmen
###如何使用旋风离线(QQ离线)
http://userscripts.org/scripts/show/142624安装脚本后, 在旋风离线页面使用.
###如何安装aria2
我也不知道, 看你的box上有什么开源包管理器之类的东西, 有什么用什么. 如果没有, google之, 如果没有, 放弃吧.