Alien的博客

在树莓派中使用aria2下载工具

一直在树莓派中用aria2来下载各种东西,唯一的缺点就是不支持电驴下载,除了这以外简直是堪称完美,很多人借助其开发了其他的插件,让aria2也可以下载网盘里的东西,简直就是下载利器啊,最近发现aria2升级到1.19.0版了,趁周末闲着无聊把它新版本安装了一下,顺便把过程写下来

1.编译安装

首先去官网上下载他的最新版本的源码文件,当然也可以他github上clone更省事


http://aria2.sourceforge.net/
https://github.com/tatsuhiro-t/aria2

下载完成之后,指定了一个安装目录执行编译安装
这里要说明一下,作为一个下载工具对于磁盘的读写肯定是很频繁的,所以如果在树莓派上使用的话最好挂载一个usb硬盘,然后把数据都放到usb硬盘里面


./configure --prefix=/mnt/usb2/aria2v1.19/
make
make install

经过了漫长的编译,其实我也不知道具体编译了多久,我是挂了一宿让他编译
如果真图省事的话其实直接执行apt-get install aria2也是可以安装的,只是版本有点老而已

2.创建配置文件

安装完成后在/mnt/usb2/aria2v1.19/目录下生成了两个文件夹,其中bin下有一个aria2c文件。
这时候直接运行aria2c后面跟一些下载参数就可以直接下载东西了,这种方式只能一个个的下载,简直大材小用,要把它打造成下载机,这样玩可是不能满足需求的
下面我在安装目录下新建了一个aria2的配置文件

 


root@raspberrypi:/mnt/usb2/aria2v1.19# cat aria2.conf
#OPTIONS
#下载路径
dir=/mnt/usb2/aria2_download
#log路径
log=/mnt/usb2/aria2v1.19/aria2.log
#session
input-file=/mnt/usb2/aria2v1.19/aria2.session
#最大下载数,默认5
max-concurrent-downloads=5
#校验完整性,只在bt下有效果,默认false
check-integrity=true
#断点续传
continue=true

#HTTP/FTP/SFTP Options
#同时连接的服务器数量,默认1
max-connection-per-server=5
#最大尝试次数,默认5
max-tries=20
#最小文件分割大小,默认20M
min-split-size=10M
#单个文件最大线程,默认5
split=10
#超时时间,默认60
timeout=120

#BitTorrent Specific Options
#启用本地发现
bt-enable-lpd=true
#hash校验种子,默认true
bt-hash-check-seed=true
#最大打开文件数量,默认100
bt-max-open-files=200
#单个种子最大连接数
bt-max-peers=100
#在磁力下载中,保留torrent文件
bt-save-metadata=true
#监听端口,默认6881-6999
listen-port=6881-6999
#最大上传限制,0是无限制
max-overall-upload-limit=100K
#下载完成后做种的设置
seed-ratio=1.0
seed-time=120

#RPC Options
#启用rpc
enable-rpc=true
#允许所有访问
rpc-allow-origin-all=true
#监听所有网络
rpc-listen-all=true
#监听端口
rpc-listen-port=6800
#rcp保存上传的元数据,默认false
rpc-save-upload-metadata=true

#Advanced Options
#下载时覆盖已经存在的文件,默认false
allow-overwrite=false
#此选项为true可能会导致下载进度丢失,默认false
allow-piece-length-change=true
#总是尝试恢复下载,默认true
always-resume=true
#指定dns服务器
#async-dns=true
#async-dns-server=8.8.4.4,208.67.222.222
#如果文件存在,自动重命名,仅适用于http,ftp
auto-file-renaming=true
#自动保存间隔,控制文件保存在.aria2中
auto-save-interval=60
#作为守护进程启用
daemon=true
#禁用ipv6
disable-ipv6=true
#磁盘缓存,默认16M
disk-cache=16M
#文件是否启用预先分配,默认prealloc
file-allocation=falloc
#最大下载结果在内存中保留数量,默认1000
max-download-result=500
#最大失败重试次数,默认0
max-resume-failure-tries=0
#下载完成时候执行的脚本
on-bt-download-complete=/mnt/usb2/aria2v1.19/on-bt-download-complete
on-download-complete=/mnt/usb2/aria2v1.19/on-download-complete
on-download-error=/mnt/usb2/aria2v1.19/on-download-error
#总体下载速度限制
max-overall-download-limit=512K
#单个下载最大速度限制
max-download-limit=512K
#保存下载进度,很有用的配置
save-session=/mnt/usb2/aria2v1.19/aria2.session
#保存间隔,默认0
save-session-interval=60

如果按照我的配置文件写,第一次设置的话需要新建一个session的空文件,不然在启动的时候会报错的

上面的一些配置是我参考了他的官网写的,需要注意的就是配置文件中的一些路径吧


http://aria2.sourceforge.net/manual/en/html/aria2c.html

3.创建启动停止脚本

新建了两个脚本文件用于启动和关闭

 


root@raspberrypi:~# cat aria2_start.sh
/mnt/usb2/aria2v1.19/bin/aria2c --conf-path=/mnt/usb2/aria2v1.19/aria2.conf -D

root@raspberrypi:~# cat aria2_stop.sh
#!/bin/bash
process_name=aria2c
kill_process(){
process_id=`ps -eo pid,command|grep $process_name |grep -v "grep" |awk '{print $1}'`
kill $process_id
}
kill_process

4.安装管理工具

由于aria2自身没有图形界面的管理工具,所以要借助第三方的工具来管理了
第三方的管理工具非常多,支持各大平台,不过我不愿意装乱七八糟的应用,所以还是比较偏爱web版的
web版本我所用的有俩个,webui-aria2和yaaw,可以都装上,想用哪个用哪个
安装过程很简单,首先在树莓派上启动一个web服务,nginx或apache都可
然后在web的html根目录下执行git clone就行了


git clone https://github.com/ziahamza/webui-aria2.git
git clone https://github.com/binux/yaaw.git

完成之后在你电脑上打开浏览器访问http;//树莓派IP/yaaw/或者http://树莓派IP/webui-aria2/
这个需要aria2启用rpc,我上面的配置文件中已经启用了

网页打开并且提示连接aria2成功后就可以在这里添加各种的种子和下载链接了,除了电驴。。。。

4.1汉化版的yaaw

发现国人做的yaaw汉化版,他把yaaw放到了架到了公网,你本地不需要任何web服务就可以用
直接打开http://aria2c.com/,然后在设置里JSON-RPC Path里面输入http://树莓派IP:6800/jsonrpc,保存.(需要你的电脑可以直接访问树莓派才行)
当然你如果愿意把yaaw架设到本地也可以,去这哥们的git项目地址中下载吧


https://github.com/aa65535/yaaw-zh-hans

5.通过rpc接口访问aria2

我自己有一个需求,白天的时候希望aria2能限速下载,凌晨的时候希望aria2全速下载
如果通过配置文件来修改速度的话,那还需要重启aria2才能生效,比较不实际
所以我就想既然那些管理工具是通过rpc来控制aria2的,我能不能也通过接口来控制他的速度呢
查了官方文档终于被我找到了


#查看所有全局配置
curl -H 'Content-Type:application/json' -d '{"jsonrpc":"2.0","id":"qwer","method":"aria2.getGlobalOption"}' http://localhost:6800/jsonrpc
#白天的速度
curl -H 'Content-Type:application/json' -d '{"jsonrpc":"2.0","id":"qwer","method":"aria2.changeGlobalOption","params":[{"max-overall-download-limit":"100K","max-overall-upload-limit":"20K"}]}' http://localhost:6800/jsonrpc
#凌晨的速度
curl -H 'Content-Type:application/json' -d '{"jsonrpc":"2.0","id":"qwer","method":"aria2.changeGlobalOption","params":[{"max-overall-download-limit":"10M","max-overall-upload-limit":"1M"}]}' http://localhost:6800/jsonrpc

直接把命令放到树莓派的crontab中去定时执行就行了
通过aria2的rpc接口可以做任何的事情,具体的去看官网文档吧


http://aria2.sourceforge.net/manual/en/html/aria2c.html?highlight=json#rpc-interface

6.下载完成后所执行的任务

在我的配置文件中有几行这种配置


on-bt-download-complete=/mnt/usb2/aria2v1.19/on-bt-download-complete
on-download-complete=/mnt/usb2/aria2v1.19/on-download-complete
on-download-error=/mnt/usb2/aria2v1.19/on-download-error

是可以设置当文件下载完成,下载失败,开始下载,停止下载等下载状态改变的时候所执行的脚本
我是想靠他来区分下载完成和为完成的状态的


root@raspberrypi:/mnt/usb2/aria2v1.19# cat on-download-complete
#!/bin/sh
touch $3.complete
exit 0
root@raspberrypi:/mnt/usb2/aria2v1.19# cat on-download-error
#!/bin/sh
touch $3.error
exit 0

我所设置的是当下载完成或者失败的时候都会新建一个扩展名文件用来区分下载状态

7.下载网盘的内容

这个也是国内大神开发的浏览器插件,直接安装使用就行了,很简单


https://github.com/acgotaku/BaiduExporter
https://github.com/acgotaku/115