树莓派 4B 命令行部署 BT/PT 下载机

树莓派 4B 相比于 3B/3B+ 等 3 系有很多改进,但主要的是内存从 1G 加到了顶配版 8G,网卡也从百兆升级到了千兆,使得树莓派 4B 有了作为下载机的实用性。

系统直接使用官方的 Raspberry Pi。BT 软件一开始尝试使用 qBittorrent 的命令行版本 qBittorrent-nox,开启服务用 web UI 进行远程控制。但实际使用后发现在高压力下,qBittorrent-nox 因为内存占用巨大而频繁被杀进程,然后由系统服务重启,再被杀,再重启,最差时每两三分钟就被杀一次。报错日志看得我心惊肉跳。频繁异常重启也导致了文件丢失、下载进度丢失以及网站封禁等情况,其配置中关于内存限制的参数完全无用,搜索后发现官方开发组把很多反馈,包括内存控制、磁盘碎片、重启丢文件等都甩锅给 libtorrent。遂放弃。

对 qBittorrent 的评价又下降了。之前在 windows 下也是因为 qBittorrent 的缺陷(数量巨大的硬盘碎片)而放弃的。

一番周折后,最终改用了 Transmission 作为 BT/PT 服务器端(transmission-daemon),开启 RPC 以允许 Web UI 和第三方客户端连接,Samba 作为局域网文件共享服务器的方案。并自行编写了 RSS 下载脚本以实现 RSS 订阅自动下载。

Transmission

安装与文件目录连接

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 安装
sudo apt update
sudo apt install transmission-daemon

# 获得配置文件的权限
sudo chown -R $USER:$USER /etc/transmission-daemon

# 设置配置文件软链接
sudo mkdir -p /home/$USER/.config/transmission-daemon/
sudo ln -s /etc/transmission-daemon/settings.json /home/$USER/.config/transmission-daemon/
sudo chown -R $USER:$USER /home/$USER/.config/transmission-daemon/

## 挂载 USB 外接硬盘并设置目录权限
sudo mkdir -p /home/$USER/Momoda # Momoda 是硬盘挂载目录
sudo mount /dev/sda1 /home/$USER/Momoda # 挂载硬盘
sudo chown -R $USER:$USER /home/$USER/Momoda # 设置权限
mkdir -p /home/$USER/Momoda/BT # 建立下载目录

修改系统服务设置

1
2
3
4
5
6
7
8
9
10
# 修改启动脚本
sudo nano /etc/init.d/transmission-daemon
>> 在 nano 编辑器中,修改 USER=<YOURUSERNAME> 为你的用户名,<Ctrl+S> 保存 <Ctrl+X> 退出。

# 修改服务配置
sudo nano /etc/systemd/system/multi-user.target.wants/transmission-daemon.service
>> 在 nano 编辑器中,继续修改 User=<YOURUSERNAME> 为你的用户名,<Ctrl+S> 保存 <Ctrl+X> 退出。

# 重新加载服务
sudo systemctl daemon-reload

修改配置文件

Trasmission 会在停止服务时自动保存配置文件,运行服务时修改会被覆盖,必须停机修改。

1
2
3
4
# 停止服务
sudo systemctl stop transmission-daemon
# 编辑配置文件
nano ~/.config/transmission-daemon/settings.json
1
2
3
4
5
6
7
8
9
10
11
12
13
// 部分参数后续可以在 web UI 中再次修改,但当前另一些参数只能在配置文件中修改。
{
"download-dir": "/home/kaikai/Momoda/BT", // 设置下载目录,kaikai 替换为你的用户名
"rpc-whitelist-enabled": true, // 只允许白名单内的 IP 访问
"rpc-whitelist": "192.168.*.*", // 局域网白名单,如果公网要访问则为 *.*.*.*
"rpc-authentication-required": false, // 因为只是家用,不需要密码。若公网访问则设置为 true,之后下两条有效
"rpc-user-name": <username>, // 独立的用于 webUI/RPC 登录的用户名,自己设置,和本文其它用户名无关
"rpc-password": <password>, // 独立的用于 webUI/RPC 登录的密码,transmission 会自动修改内容加密
"umask": 2, // 设置下载文件的权限
"preallocation": 1, // 设置预分配磁盘空间方法,0 No 1 Fast 2 Full
"watch-dir-enabled": true, // 开启监视目录,将种子文件放入监视目录,transmission 会自动开始下载
"watch-dir": "/home/kaikai", // 设置监视目录路径
}

(可选)替换默认的 webui 为 Flood-for-transmission

1
2
3
4
5
6
7
8
# 下载
wget https://github.com/johman10/flood-for-transmission/releases/download/latest/flood-for-transmission.zip
# 解压
unzip flood-for-transmission.zip
# 备份原来的 webui
sudo mv /usr/share/transmission/web /usr/share/transmission/web.bak
# 替换
sudo cp -r flood-for-transmission /usr/share/transmission/web

还有 Transmission-web-controlTransmissionioc 等多个选择。当然默认的也很好。
另外还有独立的客户端比如 Transmission Remote GUI,如果有多个下载服务器的话用客户端更好。

重启 transmission-daemon 服务

1
2
3
4
# 启动服务
sudo systemctl start transmission-daemon
# 查看服务状态
sudo systemctl status transmission-daemon

远程访问

1
2
# 查看树莓派的 IP 地址
ip a

在浏览器中输入 http://<树莓派的ip>:9091 即可访问 webUI,如果设置了 "rpc-authentication-required": true 则会跳出认证输入框。使用 RPC 远程客户端也是类似设置。

RSS 订阅

Transmission 并不支持 RSS 订阅,所以我自己写了个脚本,定期检查指定的 RSS,并通过 RPC 接口发送 torrent-add 消息给 Transmisson。https://github.com/kaikaiiiiiii/rss-feed-down 。特色在于支持 PAC 代理读取 RSS。

1
2
3
4
5
6
7
git clone https://github.com/kaikaiiiiiii/rss-feed-down
cd rss-feed-down
npm install

node ./rss.js
# 在 rss.js 中修改下载目录 savepath = <path>
# 在 rssFeeds.txt 修改订阅源,格式为 <name>,<url>,<useProxy>

通过 crontab 定时执行脚本,实现 RSS 订阅更新并自动下载 torrent 文件。

Samba

安装与配置

1
2
3
sudo apt update
sudo apt install samba samba-common-bin
sudo nano /etc/samba/smb.conf

smb.conf 文件有一堆内容,拉到最下面,修改或添加以下内容:

1
2
3
4
5
6
7
[Pi]                        # 虚拟共享文件夹的名字,后续访问时的路径为 \\<树莓派的ip>\Pi
path = /home/kaikai/Momoda # Pi 虚拟文件夹对应的本地目录
writeable=Yes # 可以写,即可以上传文件,同时也可以删除文件
create mask=0777 # 新建文件的权限
directory mask=0777 # 新建文件夹的权限
public=no # 不是公共文件夹,ananymous 不能访问
# 编辑完成后按 Ctrl+S 保存,Ctrl+X 退出

添加 samba 的授权用户

1
2
# kaikaiHome 为独立的用于 samba 登录的用户名,和本文其它用户名无关
sudo smbpasswd -a kaikaiHome

随后系统会提示输入密码,输入两次并确认

重启 samba 服务

1
sudo systemctl restart smbd

在 Windows 的 <映射网络驱动器> 或其它可以用 smb/cifs 的程序 app 输入 \\<树莓派的ip>\Pi 并输入 kaikaiHome 的用户名和密码即可访问。