# Aria2

我的Raspi-4B安装了官方提供的Rasbian,刷入过程非常简单,下载解压dd三步搞定,可以参考Pi官网。Aria2下载器相信大家也都不陌生,直接使用apt安装即可(记得换源)。

sudo apt update && sudo apt install aria2

安装完毕之后依照惯例创建aria2的各项文件。

由于需要通过SFTP、SMB来管理下载的文件,我们设置aria2以低权限用户aria运行。

groupadd -r aria # 添加用户组aria
useradd -r -g aria -s /usr/sbin/nologin -c "Aria 2" aria # 添加用户aria

sudo mkdir -p /home/aria/aria2 # 创建工作目录
touch /home/aria/aria2/aria2.session # 创建aria2进度文件
touch /home/aria/aria2/aria2.log # 创建aria2日志文件
touch /home/aria/aria2/aria2.config # 创建aria2配置文件

chown aria:aria /home/aria/* # 将工作目录下的文件移交给aria用户

然后nano /home/aria/aria2/aria2.config编辑配置文件。

配置示例
# 下载地址
dir=/home/pi/Downloads
# 启用磁盘缓存, 0为禁用缓存, 需1.16以上版本, 默认:16M
#disk-cache=32M
# 文件预分配方式, 能有效降低磁盘碎片, 默认:prealloc
# 预分配所需时间: none < falloc ? trunc < prealloc
# falloc和trunc则需要文件系统和内核支持
# NTFS建议使用falloc, EXT3/4建议trunc, MAC 下需要注释此项
file-allocation=trunc

continue=true

## 下载连接相关 ##

# 最大同时下载任务数, 运行时可修改, 默认:5
max-concurrent-downloads=5
# 同一服务器连接数, 添加时可指定, 默认:1
max-connection-per-server=16
# 最小文件分片大小, 添加时可指定, 取值范围1M -1024M, 默认:20M
# 假定size=10M, 文件为20MiB 则使用两个来源下载; 文件为15MiB 则使用一个来源下载
min-split-size=10M
# 单个任务最大线程数, 添加时可指定, 默认:5
split=16
# 整体下载速度限制, 运行时可修改, 默认:0
#max-overall-download-limit=0
# 单个任务下载速度限制, 默认:0
#max-download-limit=0
# 整体上传速度限制, 运行时可修改, 默认:0
max-overall-upload-limit=10K
# 单个任务上传速度限制, 默认:0
max-upload-limit=20
# 禁用IPv6, 默认:false
disable-ipv6=false

## 进度保存相关 ##

# 从会话文件中读取下载任务
input-file=/home/aria/aria2/aria2.session
# 在Aria2退出时保存`错误/未完成`的下载任务到会话文件
save-session=/home/aria/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 服务中启用 SSL/TLS 加密时的证书文件(.pem/.crt)
#rpc-certificate=/etc/letsencrypt/live/aria.wannaexpresso.com/fullchain.pem
# 在 RPC 服务中启用 SSL/TLS 加密时的私钥文件(.key)
#rpc-private-key=/etc/letsencrypt/live/aria.wannaexpresso.com/privkey.pem
# 事件轮询方式, 取值:[epoll, kqueue, port, poll, select], 不同系统默认值不同
#event-poll=select
# RPC监听端口, 端口被占用时可以修改, 默认:6800
#rpc-listen-port=6800
# 设置的RPC授权令牌, v1.18.4新增功能, 取代 --rpc-user 和 --rpc-passwd 选项
#rpc-secret=secret
# 设置的RPC访问用户名, 此选项新版已废弃, 建议改用 --rpc-secret 选项
#rpc-user=<USER>
# 设置的RPC访问密码, 此选项新版已废弃, 建议改用 --rpc-secret 选项
#rpc-passwd=<PASSWD>

## BT/PT下载相关 ##

# 当下载的是一个种子(以.torrent结尾)时, 自动开始BT任务, 默认:true
#follow-torrent=true
# BT监听端口, 当端口被屏蔽时使用, 默认:6881-6999
listen-port=51413
# 单个种子最大连接数, 默认:55
#bt-max-peers=55
# 打开DHT功能, PT需要禁用, 默认:true
#enable-dht=false
# 打开IPv6 DHT功能, PT需要禁用
enable-dht6=true
# DHT网络监听端口, 默认:6881-6999
#dht-listen-port=6881-6999
# 本地节点查找, PT需要禁用, 默认:false
#bt-enable-lpd=false
# 种子交换, PT需要禁用, 默认:true
enable-peer-exchange=true
# 每个种子限速, 对少种的PT很有用, 默认:50K
#bt-request-peer-speed-limit=50K
# 客户端伪装, PT需要
#peer-id-prefix=-TR2770-
#user-agent=Transmission/2.77
# 当种子的分享率达到这个数时, 自动停止做种, 0为一直做种, 默认:1.0
#seed-ratio=0
# 强制保存会话, 话即使任务已经完成, 默认:false
# 较新的版本开启后会在任务完成后依然保留.aria2文件
#force-save=false
# BT校验相关, 默认:true
#bt-hash-check-seed=true
# 继续之前的BT任务时, 无需再次校验, 默认:false
bt-seed-unverified=true
# 保存磁力链接元数据为种子文件(.torrent文件), 默认:false
bt-save-metadata=true
bt-tracker=udp://62.138.0.158:6969/announce,udp://87.233.192.220:6969/announce,udp://111.6.78.96:6969/announce,udp://90.179.64.91:1337/announce,udp://51.15.4.13:1337/announce,udp://151.80.120.113:2710/announce,udp://191.96.249.23:6969/announce,udp://35.187.36.248:1337/announce,udp://123.249.16.65:2710/announce,udp://210.244.71.25:6969/announce,udp://78.142.19.42:1337/announce,udp://173.254.219.72:6969/announce,udp://51.15.76.199:6969/announce,udp://51.15.40.114:80/announce,udp://91.212.150.191:3418/announce,udp://103.224.212.222:6969/announce,udp://5.79.83.194:6969/announce,udp://92.241.171.245:6969/announce,udp://5.79.209.57:6969/announce,udp://82.118.242.198:1337/announce

然后建立自启动sudo touch /etc/systemd/system/aria2.service

2021/02/21更新:修改aria2c二进制文件权限的方法似乎不能保证下载的文件可以由其他用户修改。我发现可以在service文件中使用UMask=来确保今后下载文件的权限为777。

# /etc/systemd/system/aria2.service
[Unit]
Description=Aria2 Service
After=network.target

[Service]
User=aria
Group=aria
UMask=0000
ExecStart=/usr/bin/aria2c --conf-path=/home/pi/.config/aria2/aria2.config
ExecStop=/bin/kill $MAINPID

[Install]
WantedBy=multi-user.target

利用下面的systemctl命令来开启aria2的自启动:

sudo systemctl daemon-reload # 重新加载修改过的service文件
sudo systemctl enable aria2 # 开启自启动
sudo systemctl start aria2 # 启动服务
sudo systemctl status aria2 # 查看日志

Notes: 查看日志,如果出现问题,可以利用sudo -u aria aria2c /home/aria/aria2/aria2.config来进行调试。

Aria2到这里就配置好了。

# AriaNG

GitHub下载Aria2的前端AriaNG。这时在图形界面的计算机上,可以打开刚才下载的index.html,尝试连接127.0.0.1:6800/jsonrpc,来检查Aria2是否配置正确。

如果你想直接用树莓派架设管理界面,那么就要用到AriaNG一类的封装配合HTTP服务器。但我不建议这么做,因为运营商封禁HTTP/HTTPS端口导致配置尤其复杂,也导致难以获得域名证书,难以使用安全的HTTPS连接到树莓派;此外,无备案架设HTTP服务器也有被运营商关闭端口的风险。

# Caddy 2

首先使用wget将AriaNG下载到树莓派。

wget https://github.com/mayswind/AriaNg/releases/download/1.2.1/AriaNg-1.2.1-AllInOne.zip # 下载AriaNG的示例
sudo apt install unzip
unzip AriaNg-1.2.1-AllInOne.zip # 解压

以下将使用/path/containing/arianghtml代替解压的目录。

我们要用到的HTTP服务器Caddy已经更新到了2.0(撒花),因此这里我们也与时俱进一把。

# 依照官方指南安装Caddy

  1. GitHub下载*linux_armv7*版本的caddy,解压后利用sudo mv caddy /usr/bin复制到/usr/bin。

  2. caddy version来检验安装是否成功。

  3. 添加用户组caddy

groupadd --system caddy
  1. 创建一个名为caddy的用户,并为他指派工作目录。
useradd --system \
	--gid caddy \
	--create-home \
	--home-dir /var/lib/caddy \
	--shell /usr/sbin/nologin \
	--comment "Caddy web server" \
	caddy
  1. 下载caddy.service文件,利用sudo mv caddy.service /etc/systemd/system/caddy.service将其复制到目标目录。
# 啊哈你获得了一个三连!
sudo systemctl daemon-reload
sudo systemctl enable caddy
sudo systemctl start caddy

用以上的命令在后台常驻caddy。 其他一些有用的命令如下:

systemctl status caddy # 查看运行状态
journalctl -u caddy # 查看全部日志
sudo systemctl reload caddy # 重新加载Caddy配置文件
sudo systemctl stop caddy # 关停
  1. Caddy 2的运行可以通过Caddyfile配置文件或者API控制,我们这里使用比较简单的Caddyfile。官方给出的后台服务caddy.service调用的是/etc/caddy/下的Caddyfile。
sudo touch /etc/caddy/Caddyfile
sudo nano /etc/caddy/Caddyfile

编辑内容为如下:

Your.Raspberry.Pi.IP{
  root * /path/containing/arianghtml
  file_server
  reverse_proxy /jsonrpc 127.0.0.1:6800
}
  • Your.Raspberry.Pi.IP就是你的树莓派在家庭网络中的地址。
  • /path/containing/arianghtml就是你刚才解压index.html的目录。
  • reverse_proxy /jsonrpc 127.0.0.1:6800表示将aria2的端口反向代理到443端口,可以解决aria2没有证书,无法在https页面上使用的问题。
sudo systemctl reload caddy # 重新加载Caddyfile

此时打开浏览器访问https://Your.Raspberry.Pi.IP,在AriaNG设置填入Your.Raspberry.Pi.IP:443/jsonrpc,就可以连接你的树莓派下载站了。

# 外网访问

外网访问我只在此简单叙述,需要实现请另外查阅其他资料。

# 解决方案一:公网IP+DDNS+域名

在你的路由器上配置DDNS,将动态的IP通过DNS服务转化为静态的地址。由于运营商会封闭家用网路的443和80端口,因此你需要将AriaNG架设在其他端口。

这里会遇到的问题是Caddy自动获取证书至少需要443端口畅通,这是做不到的,因此只能利用DNS Challenge配合Certbot手动获取证书

需要提醒的是如果用Cloudflare,Raspberry Pi的Certbot插件还不支持Zone Key,只能使用CF的Global Key。

获取证书之后可以这样配置Caddyfile

Your.Raspberry.Pi.IP, Your.Domain:OtherPorts{
  tls /path/to/fullchain.pem /path/to/privkey.pem
  root * /path/containing/arianghtml
  file_server
  reverse_proxy /jsonrpc 127.0.0.1:6800
}

# 解决方案二: ZeroTier

利用ZeroTier组建虚拟局域网,便可以用Zerotier提供的IP地址访问树莓派,也可以在路由器安装,配置好后可以用家庭网络的IP访问树莓派,配置的过程非常容易。

# 其他解决方案

其他方案还有FRP、花生壳等,感兴趣可以自行研究。

# 总结

事实上现在也并不怎么下载东西,折腾仅仅是为了折腾。不过折腾也能乐在其中……