10年前写过10次如何在树莓派上 Aria2,10年过去了,运行依旧稳定。
但是在10年后的今天,我们不得不更新一些配置,以增强安全性和适应现在Linux服务配置等,本篇博客主要介绍以下3个更新。
- RPC 配置
 - SSL 配置
 - IPV6 配置
 - systemctl 服务配置
 
RPC在之前使用 –rpc-user 和 –rpc-passwd 两个参数来配置授权,而在v1.18.4之后,RPC 使用token授权令牌,取代 –rpc-user 和 –rpc-passwd 选项,提高安全性,具体参数为:
rpc-secret=<TOKEN>
在进行远程 RPC 连接时,SSL 在今天当然是必不可少,而且如果你使用web 客户端管理的话,web客户端如果通过https 连接,那么 http 和 websock 方式的RPC会被禁用,只能使用https和websocks方式进行RPC连接,具体配置为:
rpc-secure=true
rpc-certificate=/path/key/fullchain.pem
rpc-private-key=/path/key/privkey.key
要特别注意,Aria2 不支持自签名证书,所以必须使用具有根证书授权的机构颁发的SSL证书,这里推荐使用Let’s Encrypt 的免费证书,但是有一个问题是,Let’s Encrypt 自动更新的证书只有root用户才能访问,aria2 必须以root用户身份运行才能读取到证书文件,否则每次Let’s Encrypt 自动更新后都要手动复制证书并修改权限才能被以普通用户运行的aira2运行。
为了实现全自动化,我们用 root 用户来运行 aira2,但是这样同样会有问题,就是下载的文件所有者全部都是root,其他用户只能读取无法进行修改、删除、移动等操作,我的最终方案是通过 on-download-complete 参数,让下载后的文件通过脚本自动修改权限为普通用户,具体设置:
先写一个脚本文件:
nano /home/pi/.config/aria2/chown.sh
内容:
#!/bin/bash
# 检查 aria2 传递的参数数量
if [ $# -lt 3 ]; then
    echo "Usage: $0 <gid> <filepath> <filename>"
    exit 1
fi
# 定义目标用户和组
# 请将 pi 替换为你希望拥有文件的实际用户名和组名
TARGET_USER="pi"
TARGET_GROUP="pi"
# aria2c 在 on-download-complete 钩子中传递的参数是:
# $1: GID(全局 ID,aria2c 内部使用)
# $2: 文件数
# $3: 文件路径(如果下载的是单个文件)
# 
# 由于你只需要处理文件权限,我们主要关心文件路径
# $3, $4, $5, ... 是下载文件的路径
# 遍历所有下载完成的文件
shift 2 # 移除前两个参数 (GID, 文件数)
for FILE_PATH in "$@"; do
    if [ -f "$FILE_PATH" ] || [ -d "$FILE_PATH" ]; then
        echo "Changing ownership of $FILE_PATH to ${TARGET_USER}:${TARGET_GROUP}"
        # 使用 chown 命令递归地将文件/目录所有权更改为目标用户
        sudo chown -R ${TARGET_USER}:${TARGET_GROUP} "$FILE_PATH"
        # 确保目标用户拥有写权限,新组拥有读权限
        sudo chmod -R u+rw,g+r "$FILE_PATH"
    fi
done
exit 0
给予执行权限:
chmod +x /home/pi/.config/aria2/chown.sh
然后再 arai2.conf 中添加配置:
on-download-complete=/home/pi/.config/aria2/chown.sh
这样 RPC和SSL的支持就配置完成了,顺便说一句,10年前aria2就已经支持IPV6,但是当时由于运营商的网络发展并不完善,IPV6经常遇到问题,而在2025年,IPV6已经是运营商强烈建议使用的网络方式,所以我们可以在配置中不在禁用IPV6,完整的 aria2.conf 如下:
## 文件保存相关 ##
# 文件保存目录
dir=/home/pi/Downloads
# 启用磁盘缓存, 0为禁用缓存, 需1.16以上版本, 默认:16M
disk-cache=32M
# 断点续传
continue=true
# 文件预分配方式, 能有效降低磁盘碎片, 默认:prealloc
# 预分配所需时间: none < falloc ? trunc < prealloc
# falloc和trunc则需要文件系统和内核支持
# NTFS建议使用falloc, EXT3/4建议trunc, MAC 下需要注释此项
file-allocation=prealloc
## 下载连接相关 ##
# 最大同时下载任务数, 运行时可修改, 默认: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=false
# 最小文件分片大小, 添加时可指定, 取值范围1M -1024M, 默认:20M
# 假定size=10M, 文件为20MiB 则使用两个来源下载; 文件为15MiB 则使用一个来源下载
min-split-size=10M
# 单个任务最大线程数, 添加时可指定, 默认:5
split=10
## 进度保存相关 ##
# 从会话文件中读取下载任务
input-file=/home/pi/.config/aria2/aria2.session
# 在Aria2退出时保存错误的、未完成的下载任务到会话文件
save-session=/home/pi/.config/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>
rpc-secure=true
rpc-certificate=/home/pi/.config/aria2/fullchain.pem
rpc-private-key=/home/pi/.config/aria2/privkey.key
## 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
# 下载后完成
on-download-complete=/home/pi/.config/aria2/chown.sh
接下来再来配置通过 systemctl 控制 aira2 的启动:
添加配置文件
nanao /usr/lib/systemd/system/arai2.system
内容(用户root是为了读取 SSL 证书文件):
[Unit]
Description=Aria2 Service
After=network.target
 
[Service]
User=root
ExecStart=/usr/bin/aria2c --conf-path=/home/pi/.config/aria2/aria2.conf
 
[Install]
WantedBy=default.target
然后输入以下命令来重载 systemctl 控制器
sudo systemctl daemon-reload
开机自动启动配置:
sudo systemctl enable aria2.service
至此配置完成。

Comment