之前一直在 NAS 上使用 transmission 作为 PT 的客户端, 不过前段时间 皇后PT 突然封了 transmission 客户端, 理由据说是有人用了离线网盘下载内容, 而离线网盘用的客户端是 transmission. 于是就无差别封了所有是 transmission 的客户端了, 比较脑残.
不过本来就觉得我目前用的 transmission web - transmission-control 有点小 bug 而且也没 RSS 功能, 也就正好借着这个机会去试试看其他的客户端. 一圈观察下来最终选中了 RTorrent
安装准备
RTorrent 不同于 transmission 有第三方的源可以直接装, 而需要自己通过 optware(ipkg) 来安装. 所以首先需要准备好 optware 环境, 安装的过程可以参考: How to Install Bootstrap - SynologyWiki
另外每次升级系统以后也需要重新安装下 optware.
安装 RTorrent
首先 ipkg update 更新可安装包列表, 然后安装 RTorrent
ipkg install rtorrent screen bash
完成以后, 创建运行 RTorrent 所需要的目录
mkdir -p /opt/share/torrent/session/ mkdir /opt/var/log/
接着修改 /opt/etc/rtorrent.conf 文件, 在最后加入
scgi_port = 127.0.0.1:5050 encoding_list = UTF-8
其中 scgi_port 用于其他程序进行控制, 而 encoding_list 据说用于解决中文乱码问题.
另外如果需要命令行去查看 RTorrent 信息的话, 还需要将系统的默认输出编码修改成 UTF-8, 我们在 /etc/profile 最后加入
export LANG=en_US.UTF-8
然后重新登入 SSH 使得设置生效, 接着就可以通过命令启动 RTorrent
/opt/etc/init.d/S99rtorrent start
运行 RTorrent 后, 可以通过 screen -r 来查看启动情况
DS1337> screen -r *** rTorrent 0.8.6/0.12.6 - DS1337:16437 *** [View: main] (12:51:56) Using 'epoll' based polling. (12:51:56) Ignoring ~/.rtorrent.rc. (12:51:56) XMLRPC initialized with 519 functions. (12:51:56) The SCGI socket is bound to a specific network device yet may still pose a security risk, consider using 'scgi_local'. [Throttle 80/ 80 KB] [Rate 0.0/ 0.0 KB] [Port: 51780] [U 0/26] [D 0/26] [H 0/32] [S 0/3/768] [F 0/128]
然后按 ctrl+a + d 可以切出 screen. 还继续输入 screen -r 有可以进入查看了.
如果遇到出现这样的错误
DS1337> screen -r Cannot find termcap entry for 'xterm-256color'.
就需要在 ~/.profile 的最后加入
if [ "$TERM" == "xterm-256color" ]; then export TERM=xterm-color fi
因为 ipkg 安装的 screen 并不支持 256color, 要支持的话需要手工重新编译才行.
另外输入 /opt/etc/init.d/S99rtorrent stop 可以停止 RTorrent.
安装 ruTorrent
之前安装的 RTorrent 只是一个后台进程, 要通过浏览器对他进行控制的话我们还需要安装 ruTorrent.
ruTorrent 是 php 写的 WEB 程序, 所以还需要安装对应的服务器软件.
按文档这里应该使用 lighttpd 作为 ruTorrent 的服务器, 不过我在我 NAS上测试后发现, 重启NAS 以后自动启动的 lighttpd 会运行几秒钟, 然后自动关闭. 而手工启动的 lighttpd 却没有任何问题. 研究了半天无果, 最终决定放弃 lighttpd 改用 nginx.
所以这里我们输入
ipkg install nginx php-fcgi spawn-fcgi
等安装完成以后在 /opt/etc/init.d/ 下新建一个文件 S80php-fcgi 内容是
#!/bin/sh phpfcgid_children="1" phpfcgid_requests="1000" prefix="/opt" PATH=${prefix}/bin:${prefix}/sbin:/sbin:/bin:/usr/sbin:/usr/bin NAME=php-fcgi DAEMON=${prefix}/bin/spawn-fcgi DAEMON_OPTS="-s /opt/tmp/php-fcgi.sock -C ${phpfcgid_children} -u nobody -P /opt/var/run/php-fcgi.pid -- ${prefix}/bin/${NAME}" test -x $DAEMON || exit 0 if [ -z "$1" ] ; then case `echo "$0" | sed 's:^.*/\(.*\):\1:g'` in S??*) rc="start" ;; K??*) rc="stop" ;; *) rc="usage" ;; esac else rc="$1" fi case "$rc" in start) export PHP_FCGI_MAX_REQUESTS=$phpfcgid_requests echo "Starting web server: $NAME" $DAEMON $DAEMON_OPTS ;; stop) if [ -n "`pidof $NAME`" ]; then echo "Stopping web server: $NAME" killall $NAME 2> /dev/null fi ;; restart) "$0" stop sleep 1 "$0" start ;; *) echo "Usage: $0 (start|stop|restart|usage)" ;; esac exit 0
然后给予这个文件执行权限和建立相关目录并启动
chmod +x /opt/etc/init.d/S80php-fcgi mkdir -p /opt/var/run/ /opt/etc/init.d/S80php-fcgi start
完成以后开始配置 nginx 让他支持 php, 我们编辑 /opt/etc/nginx/nginx.conf
把第一行的 #user nobody; 的注释解开也就是改成
user nobody;
然后找到
server { listen 8082; server_name localhost;
找到这段以后, 在最后加入
location ~ \.php$ { fastcgi_pass unix:/opt/tmp/php-fcgi.sock; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; }
保存后用命令 /opt/etc/init.d/S80nginx start 启动 nginx 服务器. 然后开始装 RTorrent 和 Plugins
cd /opt/share/nginx wget -O rutorrent-3.6.tar.gz http://dl.bintray.com/novik65/generic/rutorrent-3.6.tar.gz wget -O plugins-3.6.tar.gz http://dl.bintray.com/novik65/generic/plugins-3.6.tar.gz tar xvf rutorrent-3.6.tar.gz tar xvf plugins-3.6.tar.gz -C rutorrent/ rm rutorrent-3.6.tar.gz rm plugins-3.6.tar.gz
然后还需要修改 rutorrent/conf/config.php 文件
- 将其中的 $scgi_port 修改成 5050 这是之前 /opt/etc/rtorrent.conf 中配置的端口.
- 另外将 $forbidUserSettings 修改成 true 这个设置的作用是让不同的用户可以有不同的设置, 没啥必要所以去掉.
由于之前解压 ruTorrent 的目录就是 lighttpd 的默认目录, 所以可以直接启动 lighttpd, 输入命令
/opt/etc/init.d/S80lighttpd start
接着通过浏览器访问 http://NAS_IP:8082/rutorrent 其中 NAS_IP 需要根换成正确的IP地址, 就可以看到如下的效果
可以从日志中看到很多错误, 这个我们先不管, 首先要做的是切换到 插件
需要将其中的 rpc 插件关闭, 因为我们已经载入了一个叫 httprpc 的插件了, 这2个插件作用是相同的, 另外因为有 httprpc 插件, 所以才不需要像其他文档一样需要在 lighttpd 上设置 /PRC2.
另外还需要关闭的一个插件是 filedrop 那个插件是用来让 ruTorrent 支持种子拖拽上传的, 不过插件本身有问题会导致上传的种子文件保存后文件名乱码, 但如果通过添加按钮添加的则不会, 所以先禁用, 以后等有机会看看是哪里的问题.
至于剩下的插件要开要关就自己看着办了.
设置用户认证
默认 ruTorrent 是没有任何认证机制的, 他的认证需要考 HTTP 服务器来实现.
输入命令
/usr/syno/apache/bin/htpasswd -c /opt/etc/nginx/htpasswd admin password
其中 admin 就是登录的用户名, 而 password 就是登录的密码.
接着编辑 /opt/etc/nginx/nginx.conf 继续找到刚刚的加入 php 的那段后加入
location /rutorrent { auth_basic "Restricted"; auth_basic_user_file htpasswd; }
然后重启服务器
/opt/etc/init.d/S80nginx restart
刷新下浏览器上 ruTorrent 的页面, 现在那个页面应该需要输入用户名和密码才可以使用了.
设置 webman 代理
一般我们设置好了 DDNS 以后就可以在外面访问家里的 NAS 了, 而我们刚刚搭建的 ruTorrent 如果不开 8081 的映射是无法访问的, 所以这里我们把 ruTorrent 映射到 5000 端口的 /rutorrent 下.
先在 /opt/share/www/nginx/rutorrent/conf/rutorrent.alias.conf 新建个文件输入
LoadModule proxy_module modules/mod_proxy.so LoadModule proxy_http_module modules/mod_proxy_http.so ProxyRequests On ProxyPreserveHost Off ProxyPass /rutorrent http://127.0.0.1:8082/rutorrent ProxyPassReverse /rutorrent http://127.0.0.1:8082/rutorrent
然后链接回群晖自带的 apache
ln -sf /opt/share/www/nginx/rutorrent/conf/rutorrent.alias.conf /usr/syno/etc/sites-enabled/rutorrent.alias.conf
接着重启群晖的 apache
/usr/syno/apache/bin/httpd -DSSL -f /usr/syno/apache/conf/httpd.conf-sys -k restart
然后我们通过浏览器访问 http://NAS_IP:5000/rutorrent 查看 rutorrent 了.
其他设置
rTorrent 不像其他 BT 软件会自动的用 upnp 在路由器上映射端口, 所以我们需要手工帮他映射端口
默认 rTorrent 使用 51777-51780 端口做通讯, 所以我们打开 DMS, 在 “控制面板” > “路由器配置” 中加入如图红框的自定义端口
另外需要注意的是
在 ruTorrent 的配置都是临时的, 重启服务器以后就会消失. 如果要保证配置文件重启后生效, 需要手工去修改 /opt/etc/rtorrent.conf 这点比较麻烦.
最后
之后的工作只是把之前其他 BT 的种子之类的导入到新的 RTorrent 中. 当然新的 RTorrent 还支持 RSS 之类的就没仔细研究了.
另外实际使用下来发现 ruTorrent 无法批量的修改 ticker, 如果重置 PT 网站 passkey 的话工作量可想而至, 如果有谁知道如何批量修改的话也请告知, 谢谢
参考资料
- RTorrent ruTorrent HowTo - SynologyWiki
- pidof is missing libssp.so.0
- PHPFcgiExampleOld - Nginx Community
- Oleg: 安裝網頁伺服器 (thttpd, lighttpd, nginx) 和 PHP FastCGI
- 數位天堂 / nginx + php
via。https://wido.me/sunteya/install-rtorrent-on-synology-nas