树莓派安装Aria2实现离线下载

作为服务器使用的树莓派,离线下载应该是最常用的功能之一。之前费尽周折给树莓派挂载移动硬盘就是为了这一天。由于之前在VPS上安装过Aria2,参考VPS搭建Aria2下载环境,体验还是很不错的,主要还是国外的网速快,索性给树莓派也安装一个Aria2试试。

安装Aria2

首先,使用命令行安装aria2

1
sudo apt-get install aria2

创建配置文件

接下来创建aria2的配置文件夹以及配置文件

1
2
3
sudo mkdir /etc/aria2
sudo touch /etc/aria2/aria2.session
sudo touch /etc/aria2/aria2.conf

编辑/etc/aria2/aria2.conf配置文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
## 文件保存相关 ##

# 文件保存目录
dir=/mnt/mobileHDD/download
# 启用磁盘缓存, 0为禁用缓存, 需1.16以上版本, 默认:16M
disk-cache=32M
# 断点续传
continue=true

# 文件预分配方式, 能有效降低磁盘碎片, 默认:prealloc
# 预分配所需时间: none < falloc ? trunc < prealloc
# falloc和trunc则需要文件系统和内核支持
# NTFS建议使用falloc, EXT3/4建议trunc, MAC 下需要注释此项
#file-allocation=falloc

## 下载连接相关 ##

# 最大同时下载任务数, 运行时可修改, 默认:5
#max-concurrent-downloads=5
# 同一服务器连接数, 添加时可指定, 默认:1
max-connection-per-server=15
# 整体下载速度限制, 运行时可修改, 默认:0(不限制)
#max-overall-download-limit=0
# 单个任务下载速度限制, 默认:0(不限制)
#max-download-limit=0
# 整体上传速度限制, 运行时可修改, 默认:0(不限制)
#max-overall-upload-limit=0
# 单个任务上传速度限制, 默认:0(不限制)
#max-upload-limit=0
# 禁用IPv6, 默认:false
disable-ipv6=true

# 最小文件分片大小, 添加时可指定, 取值范围1M -1024M, 默认:20M
# 假定size=10M, 文件为20MiB 则使用两个来源下载; 文件为15MiB 则使用一个来源下载
min-split-size=10M
# 单个任务最大线程数, 添加时可指定, 默认:5
split=10

## 进度保存相关 ##

# 从会话文件中读取下载任务
input-file=/etc/aria2/aria2.session
# 在Aria2退出时保存错误的、未完成的下载任务到会话文件
save-session=/etc/aria2/aria2.session
# 定时保存会话, 0为退出时才保存, 需1.16.1以上版本, 默认:0
save-session-interval=60

## RPC相关设置 ##

# 启用RPC, 默认:false
enable-rpc=true
# 允许所有来源, 默认:false
rpc-allow-origin-all=true
# 允许外部访问, 默认:false
rpc-listen-all=true
# RPC端口, 仅当默认端口被占用时修改
# rpc-listen-port=6800
# 设置的RPC授权令牌, v1.18.4新增功能, 取代 --rpc-user 和 --rpc-passwd 选项
#rpc-secret=<TOKEN>

## BT/PT下载相关 ##

# 当下载的是一个种子(以.torrent结尾)时, 自动开始BT任务, 默认:true
#follow-torrent=true
# 客户端伪装, PT需要
peer-id-prefix=-TR2770-
user-agent=Transmission/2.77
# 强制保存会话, 即使任务已经完成, 默认:false
# 较新的版本开启后会在任务完成后依然保留.aria2文件
#force-save=false
# 继续之前的BT任务时, 无需再次校验, 默认:false
bt-seed-unverified=true
# 保存磁力链接元数据为种子文件(.torrent文件), 默认:false
bt-save-metadata=true

然后设置aria2读取以上配置文件

1
aria2c --conf-path=/etc/aria2/aria2.conf -D

设置Aria2开机自启

接下来将aria2设置成服务并实现aria2开机自启

1
sudo touch /etc/init.d/aria2c

编辑/etc/init.d/aria2c文件内容

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
#!/bin/sh
### BEGIN INIT INFO
# Provides: aria2c
# Required-Start: $network $local_fs $remote_fs
# Required-Stop: $network $local_fs $remote_fs
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: aria2c RPC init script.
# Description: Starts and stops aria2 RPC services.
### END INIT INFO

#VAR
RUN="/usr/bin/aria2c"
ARIA2C_PID=$(ps ux | awk '/aria2c --daemon=true --enable-rpc/ && !/awk/ {print $2}')
ARIA2C_CONF_FILE="/etc/aria2/aria2.conf"
OPTIONS=" --daemon=true --enable-rpc=true -D --conf-path=$ARIA2C_CONF_FILE"

start() {
echo "Starting script aria2c "
if [ -z "$ARIA2C_PID" ]; then
$RUN $OPTIONS
echo "Started"
else
echo "aria2c already started"
fi
}

stop() {
echo "Stopping script aria2c"
if [ ! -z "$ARIA2C_PID" ]; then
kill $ARIA2C_PID
fi
echo "OK"
}

status() {
if [ ! -z "$ARIA2C_PID" ]; then
echo "The aria2c is running with PID = "$ARIA2C_PID
else
echo "No process found for aria2c RPC"
fi
}

restart() {
stop
sleep 3
start
}

case "$1" in
start)
start
;;
stop)
stop
;;
status)
status
;;
restart)
restart
;;
*)
echo "Usage: /etc/init.d/aria2c {start|stop|restart|status}"
exit 1
;;
esac

exit 0

/etc/init.d/aria2c可执行权限

1
sudo chmod +x /etc/init.d/aria2c

设置aria2开机自启

1
sudo update-rc.d aria2c defaults

接下来就测试一下刚创建的aria2c服务吧

1
sudo service aria2c start

添加管理页面

到这一步,aria2还缺一个管理页面。由于我的树莓派安装了Nginx服务器,所以只需要在/var/www/html目录下,添加一个web页面就能实现aria2页面管理了。管理页面我用的是webui-aria2

1
2
cd /var/www/html
sudo git clone https://github.com/ziahamza/webui-aria2

最后来测试一下吧,输入网址http://yourRaspberryIPAddress/webui-aria2即可。

心得

由于我的移动硬盘格式既有FAT32分区又有NTFS分区,两种分区作为Aria2的下载目录我都测试了一遍。

首先是FAT32分区,Linux系统默认可以装载,但是问题是中文会出现乱码,如果用Aria2下载中文的文件或文件夹时,会报错

1
cannot create directory or file

解决这个问题的办法就是在装载FAT32分区的时候,设置中文选项

1
sudo mount -o utf8=1 /dev/sda1 /mnt/mobileHDD/download

如果是NTFS分区,可以使用ntfs-3g来装载,默认就支持中文

1
sudo ntfs-3g /dev/sda2 /mnt/mobileHDD/download

还有一个注意点就是,由于移动硬盘装载后,默认属于root用户以及root用户组,所以下载文件的时候,要在下载设置中填写root用户以及root用户密码

否则,你的文件始终无法下载。

如果要支持外网访问的话,路由器NAT映射需要将6800端口(默认端口)映射出去,当然也可以去/etc/aria2/aria2.conf配置文件中修改该端口。

建议开启rpc-secret密码令牌,这样可以防止他人知道了你的Aria2管理页面入口后,偷窥你的隐私或肆意破坏。一样是在/etc/aria2/aria2.conf配置文件中修改。

支持https协议

虽然有一个密码令牌一层保护,但是只要是建立在http协议下的网站,都属于明文传输,是极不安全的。所以需要支持https协议。
在配置文件/etc/aria2/aria2.conf最后添加

1
2
3
4
# 支持https协议
rpc-secure=true
rpc-certificate=/etc/letsencrypt/live/yourdomain/fullchain.pem
rpc-private-key=/etc/letsencrypt/live/yourdomain/privkey.pem

页面管理中的连接设置里地址保持不变,仍然是https://yoursite.com:6800/jsonrpc。以https打开管理页面时,启用SSL/TLS加密默认会被勾上。

最后,任何对配置文件的修改,记得都要重启一下aria2服务。

总结

我家里的宽带是百兆网速,Aria2下载的时候,满载可以达到2MB/s,这可能取决于文件资源的连接数。我对这个成绩表示满意的。但是Aria2在下载的时候,速度时快时慢,可能是资源不稳定,有时候甚至没有速度。有机会我会尝试一下transmission,听说下载bt文件的时候,速度很快。

avatar

chilihotpot

You Are The JavaScript In My HTML