分类目录归档:Seedbox

在 $HOME 目录安装 Deluge 客户端

注意:这个教程是在 PulsedMedia 盒子上安装 Deluge 的实践,存在大量 platform-specific 的内容,在其他商家的盒子上尝试时要加以修改。

PulsedMedia 盒子的宿主机是 Ubuntu 14.04,所有自带的软件也是基于该发行版,自带的 Python 为 2.7.9,且缺乏大量的库。如果我们要安装 Deluge,需要从头解决一系列依赖问题。

在 User Space 编译安装的方法

比较清真的做法是创建 $HOME/.local 目录,然后在下面创建对应的 bin, lib 和 include 目录,然后再创建 usr 目录,并创建另一套 bin, lib 和 include。

在完成文件夹创建以后,在 .bashrc 中修改自己的 $PATH, $LD_LIBRARY_PATH, $C_INCLUDE_PATH, $CPLUS_INCLUDE_PATH 这几个环境变量:

export PATH=/home/<user>/.local/bin:/home/<user>/.local/usr/bin:$PATH
export LD_LIBRARY_PATH=/home/<user>/.local/lib:/home/<user>/.local/usr/lib:$LD_LIBRARY_PATH
export C_INCLUDE_PATH=/home/<user>/.local/include:/home/<user>/.local/usr/include:$C_INCLUDE_PATH
export CPLUS_INCLUDE_PATH=/home/<user>/.local/include:/home/<user>/.local/usr/include:$CPLUS_INCLUDE_PATH

<user> 修改为自己的 Unix 用户名

在修改了这些环境变量之后,配合编译时的 –prefix 参数以及 pip/python 的 –user 参数就可以将程序安装在自己的 $HOME 目录下

Deluge 依赖的安装

pip

对,你没看错,这机器 pip 都没有,好在这个相对来说还是比较简单,Python 官方也提供了对应的 py 程序

wget --no-check-certificate https://bootstrap.pypa.io/get-pip.py -O - | python - --user

Boost

libtorrent 编译需要 boost,我们选择 Boost 1.65.1 这个经过大量测试的版本

wget https://dl.bintray.com/boostorg/release/1.65.1/source/boost_1_65_1.tar.gz
tar xzvf boost_1_65_1.tar.gz
cd boost_1_65_1
./bootstrap.sh --prefix=$HOME/.local
./b2 install -j $(nproc)

Geoip

这也是 libtorrent 依赖的库之一

git clone https://github.com/maxmind/geoip-api-c.git
./bootstrap
./configure --prefix=$HOME/.local
make -j $(nproc)
make check
make install

libtorrent

终于可以安装 libtorrent 了,这个和之前正常安装的区别不大,唯一的区别在于要指定 –prefix 和 –with-boost-libdir

git clone https://github.com/arvidn/libtorrent.git libtorrent-1.0.11
git checkout RC_1_0
./autotool.sh
./configure --enable-python-binding --with-libiconv --disable-debug --enable-encryption --with-libgeoip=system CXXFLAGS=-std=c++11 --prefix=$HOME/.local --with-boost-libdir=$HOME/.local/lib
make -j $(nproc)
make install

Deluge 的 py 依赖

这个没什么好说的

pip install attr chardet click colorama pyopenssl pam pyasn1 pyasn1-modules serial service_identity Twisted zope.interface setuptools notify pygame mako automat constantly hyperlink incremental pyxdg --user

但是有三个库,intltool, libsrvg 和 xdg-utils 没有,我们需要另行安装

intltool

wget http://ftp.gnome.org/pub/gnome/sources/intltool/0.40/intltool-0.40.6.tar.gz
tar zxvf intltool-0.40.6.tar.gz
cd intltool-0.40.6
./configure --prefix=$HOME/.local
make && make install

libsrvg

该库依赖 librsvg2-common librsvg2-2 libglib2.0-0 和 libgdk-pixbuf,其中前三个可以直接用 apt-get download 命令取得,后一个不知为何没办法在 apt 上找到,只能去补佳乐的 package 网站上寻找,地址在这里。我们用的版本是 2.31.1-2+deb8u7。

使用 dpkg -x 命令可以将 .deb 包释放在指定目录下,但是不能完成 apt 安装的配置过程,好在这几个 library 只是文件而已,所以这么做并没有什么问题

apt-get download librsvg2-common librsvg2-2 libglib2.0-0
wget http://ftp.us.debian.org/debian/pool/main/g/gdk-pixbuf/libgdk-pixbuf2.0-0_2.31.1-2+deb8u7_amd64.deb
dpkg -x libgdk-pixbuf2.0-0_2.31.1-2+deb8u7_amd64.deb ~/.local
dpkg -x libglib2.0-0_2.42.1-1+b1_amd64.deb ~/.local
dpkg -x librsvg2-2_2.40.5-1+deb8u2_amd64.deb ~/.local
dpkg -x librsvg2-common_2.40.5-1+deb8u2_amd64.deb ~/.local

注意 .deb 的名字可能随着版本升级而改变,所以复用的时候要注意一下

xdg-utils

和上面一样,用 apt 取得包以后再释放

apt-get download xdg-utils
dpkg -x xdg-utils_1.1.0~rc1+git20111210-7.4_all.deb ~/.local

Deluge

最后,正常安装 deluge 即可

wget http://download.deluge-torrent.org/source/deluge-1.3.15.tar.gz
tar xzvf deluge*.tar.gz
python setup.py build
python setup.py install --user

之后 deluged 和 deluge-web 会被安装在 $HOME/.local/bin 下面,由于之前已经修改了环境变量,所以直接运行就可以了

如果要让 deluged 工作在不同的端口,使用 deluged -p 23333 这样的命令就行,然后在 deluge-web 中改一下连接的 daemon 端口就行了

至此,deluge 应该已经可以正常运行了。

 

一个完整的 BT 客户端安装记录

博客里面此类文章版本实在太多,每次我自己装一遍都要参考两三篇文章也实在是蛋疼,于是整理一下。

Compiler and Depencency

首先是一些依赖包的安装:

# gcc-8 Prerequisites (optional)
add-apt-repository ppa:ubuntu-toolchain-r/test
# Compiler
apt install gcc-8 g++-8 # (optional)
apt install build-essential checkinstall pkg-config automake libtool git
# Libtorrent Dependency
apt install libboost-dev libboost-system-dev libboost-python-dev libboost-chrono-dev libboost-random-dev libssl-dev libgeoip-dev
# Deluge Dependency
apt install python-pip python-attr python-chardet python-click python-colorama  python-openssl python-pam python-pyasn1 python-pyasn1-modules python-serial python-service-identity python-twisted-bin python-twisted-core python-zope.interface python-twisted python-openssl python-setuptools intltool geoip-database python-notify python-pygame python-glade2 librsvg2-common xdg-utils python-mako
apt install python-automat python-constantly python-hyperlink python-incremental # Only on Ubuntu 18.04+ (16.04 do not have these packages)
# qBittorrent Dependency
apt-get install qtbase5-dev qttools5-dev-tools libqt5svg5-dev

libtorrent

考虑到双栈 IP 汇报的问题,仍然使用 libtorrent 1.0.11

首先应该打上 std=c++11 的 patch:

diff -uNr libtorrent/bindings/python/compile_flags.in libtorrent-cpp11/bindings/python/compile_flags.in
--- libtorrent/bindings/python/compile_flags.in	2018-04-18 06:49:46.350053702 +0000
+++ libtorrent-cpp11/bindings/python/compile_flags.in	2018-04-18 07:58:13.883000009 +0000
@@ -1 +1 @@
-@COMPILETIME_OPTIONS@ @CPPFLAGS@ @LIBS@ @BOOST_CPPFLAGS@ @BOOST_SYSTEM_LIB@ @BOOST_PYTHON_LIB@ @PTHREAD_LIBS@ @OPENSSL_LIBS@ @OPENSSL_LDFLAGS@ @OPENSSL_INCLUDES@ -I@top_srcdir@/include
+@COMPILETIME_OPTIONS@ @CXXFLAGS@ @CPPFLAGS@ @LIBS@ @BOOST_CPPFLAGS@ @BOOST_SYSTEM_LIB@ @BOOST_PYTHON_LIB@ @PTHREAD_LIBS@ @OPENSSL_LIBS@ @OPENSSL_LDFLAGS@ @OPENSSL_INCLUDES@ -I@top_srcdir@/include
diff -uNr libtorrent/bindings/python/setup.py libtorrent-cpp11/bindings/python/setup.py
--- libtorrent/bindings/python/setup.py	2018-04-18 06:49:46.350053702 +0000
+++ libtorrent-cpp11/bindings/python/setup.py	2018-04-18 07:59:26.123112215 +0000
@@ -104,7 +104,7 @@
 		library_dirs = parse_cmd(extra_cmd, '-L'),
 		extra_link_args = ldflags.split() + arch(),
 		extra_compile_args = parse_cmd(extra_cmd, '-D', True) + arch() \
-			+ target_specific(),
+			+ target_specific() + ['-std=c++11'],
 		libraries = ['torrent-rasterbar'] + parse_cmd(extra_cmd, '-l'))]
 
 setup(name = 'python-libtorrent',

然后是编译:

git clone https://github.com/arvidn/libtorrent.git libtorrent-1.0.11
git checkout RC_1_0
./autotool.sh
./configure --enable-python-binding --with-libiconv --disable-debug --enable-encryption --with-libgeoip=system CXXFLAGS=-std=c++11
# if compile on armhf (SoYouStart ARM)
# ./configure --enable-python-binding --with-libiconv --disable-debug --enable-encryption --with-libgeoip=system CXXFLAGS=-std=c++11 --with-boost-libdir=/usr/lib/arm-linux-gnueabihf
make -j$(nproc)
checkinstall
ldconfig

Deluge

wget http://download.deluge-torrent.org/source/deluge-1.3.15.tar.gz
tar xzvf deluge*.tar.gz
python setup.py build
python setup.py install --install-layout=deb

注意这个最好别用 checkinstall 安装,可能会导致一些不可预知的错误。

qBittorrent

git clone https://github.com/qbittorrent/qBittorrent.git
# git clone https://github.com/c0re100/qBittorrent-Enhanced-Edition.git
git checkout <branch> # e.g. v4_1_x; v3_3_x
./configure
# ./configure --with-boost-libdir=/usr/lib/arm-linux-gnueabihf
make -j$(nproc)
checkinstall

systemd Example

deluged.service

$ cat /etc/systemd/system/deluged.service 
[Unit]
Description=Deluged
After=network-online.target

[Service]
ExecStart=/usr/bin/sudo -u <username> /usr/bin/deluged -d
ExecStop=/bin/kill -9 $(cat /run/deluged.pid)
Restart=always
PIDFile=/run/deluged.pid
TimeoutStopSec=300
RestartSec=3

[Install]
WantedBy=multi-user.target

deluge-web.service

$ cat /etc/systemd/system/deluge-web.service 
[Unit]
Description=Deluge-web
After=network-online.target deluged.service
Wants=deluged.service

[Service]
ExecStart=/usr/bin/sudo -u <username> /usr/bin/deluge-web
ExecStop=/bin/kill -9 $(cat /run/deluge-web.pid)
Restart=always
PIDFile=/run/deluge-web.pid
RestartSec=3

[Install]
WantedBy=multi-user.target

References

https://github.com/qbittorrent/qBittorrent/wiki/Compiling-qBittorrent-on-Debian-and-Ubuntu
https://dev.deluge-torrent.org/wiki/Installing/Source
https://github.com/amefs/QB/blob/master/setup/sources/libtorrent-rasterbar-RC_1_0.patch

Ubuntu 18.04 LTS 盒子环境的部署

本文测试环境为 Hetzner E3-1245V2 独服,系统为官方的 Ubuntu 18.04 Minimal 模板。本文需要综合上一篇盒子配置文章阅读。

写在前面

经过长期的测试,考虑到双栈 IP 的需求,Deluge / qBittorrent 需要 libtorrent 1.0.11 版本才能正常汇报双栈 IP,所以本文很多操作都为了这个目标而设。

Deluge 1.3.15 官方 PPA 仍然没有更新 18.04 对应的二进制包,所幸 Ubuntu 官方源里面就是 1.3.15,理论上可以使用。但是考虑到使用 apt 安装会导致安装官方源中自带的 libtorrent 1.1.5 的依赖,因此选择完全编译安装 libtorrent 与 Deluge。

Wine 官方源也没有增加 Ubuntu 18.04 的支持,Ubuntu 官方源中有对应的 wine64 软件包,因此选择安装该包而非 Wine 官方的版本。

E3-1245V2 有自带 Intel 集显,考虑到 X11VNC 配合 Xorg 使用可以支持完整的键盘操作(VNCserver 存在无法输入 tab、WinKey 的问题,还有 24bit 显示导致 VMware 颜色错乱的问题),本文中选择安装 X11VNC。考虑到通用性,仍应参考上一篇文章使用 VNCserver。

环境的部署

本文所有编译环境采用最新的 gcc-8.1 完成,注意 Boost 需要最高 1.65.1 版本,这个和目前 Ubuntu 源中的版本一致。

# gcc-8 Prerequisites
add-apt-repository ppa:ubuntu-toolchain-r/test
# Compiler
apt install gcc-8 g++-8 build-essential checkinstall pkg-config automake libtool git
# Libtorrent Dependency
apt install libboost-dev libboost-system-dev libboost-python-dev libboost-chrono-dev libboost-random-dev libssl-dev libgeoip-dev
# Deluge Dependency
apt install python-pip python-attr python-automat python-chardet python-click python-colorama python-constantly python-hyperlink python-incremental python-openssl python-pam python-pyasn1 python-pyasn1-modules python-serial python-service-identity python-twisted-bin python-twisted-core python-zope.interface python-twisted python-openssl python-setuptools intltool geoip-database python-notify python-pygame python-glade2 librsvg2-common xdg-utils python-mako
# qBittorrent Dependency
apt-get install qtbase5-dev qttools5-dev-tools libqt5svg5-dev

libtorrent 1.0.11 的编译

综合参考 Deluge 的文档与 qBittorrent 的文档。

git clone https://github.com/arvidn/libtorrent.git libtorrent-1.0.11
git checkout $(git tag | grep libtorrent-1_0_ | sort -t _ -n -k 3 | tail -n 1)
./autotool.sh
./configure --enable-python-binding --with-libiconv --disable-debug --enable-encryption --with-libgeoip=system CXXFLAGS=-std=c++11
make -j$(nproc)
checkinstall
ldconfig

注意 libtorrent 1_0_x 的代码需要修改才能正常地引用 Boost,毛球说 RC_1_0 分支不存在本问题,未作测试。

//修改include/libtorrent/export.hpp
//那两个hpp文件在boost/config/detail/下,而不是boost/config/下

#if !defined(BOOST_COMPILER_CONFIG) && !defined(BOOST_NO_COMPILER_CONFIG)
#  include <boost/config/detail/select_compiler_config.hpp>
#endif
#ifdef BOOST_COMPILER_CONFIG
#  include BOOST_COMPILER_CONFIG
#endif

#if !defined(BOOST_PLATFORM_CONFIG) && !defined(BOOST_NO_PLATFORM_CONFIG)
#  include <boost/config/detail/select_platform_config.hpp>
#endif
#ifdef BOOST_PLATFORM_CONFIG
#  include BOOST_PLATFORM_CONFIG
#endif

Deluge 安装

wget http://download.deluge-torrent.org/source/deluge-1.3.15.tar.gz
tar xzvf deluge*.tar.gz
python setup.py build
python setup.py install

注意这种方式安装的 Deluge 默认在 /usr/local/bin 下,而不是像 deb 安装一样在 /usr/bin。如果需要安装在 /usr/bin 下,安装时添加参数 –install-layout=deb。

其他软件的部署

add-apt-repository ppa:transmissionbt/ppa
curl -sL https://deb.nodesource.com/setup_10.x | sudo -E bash -
dpkg --add-architecture i386 
apt install --install-recommends xorg x11vnc transmission-daemon sshfs nodejs firefox fonts-noto xfce4 wine-stable
apt install gtk3-engines-xfce xfce4-goodies xfce4-power-manager

Xorg 配置文件

位置在 /usr/share/X11/xorg.conf.d/20-intel.conf

Section "Device"
   Identifier  "Intel Graphics"
   Driver      "intel"
   Option      "AccelMethod"  "sna"
   Option      "TearFree"     "true"
EndSection

Section "Monitor"
    Identifier      "External VGA"
    Modeline        "1600x900_60.00"  118.25  1600 1696 1856 2112  900 903 908 934 -Hsync +Vsync
    Option          "PreferredMode" "1600x900_60.00"
EndSection

Section "Screen"
    Identifier    "Screen0"
    Device        "Device0"
    Monitor       "Monitor0"
    DefaultDepth  24
    SubSection "Display"
        Depth 24
        Modes "1600x900"
        Virtual 1600 900
    EndSubSection
EndSection

X11VNC 与 Xorg 的 systemd 启动脚本

# xserver.service
[Unit]
Description=Xserver
After=network-online.target

[Service]
ExecStart=/usr/bin/sudo /usr/bin/startx -- :0
Restart=always
Type=simple
RestartSec=3

[Install]
WantedBy=multi-user.target
# x11vnc.service
[Unit]
Description=X11vnc
After=network-online.target xserver.service
Wants=xserver.service

[Service]
ExecStart=/usr/bin/sudo /usr/bin/x11vnc -rfbport 25901 -rfbauth /root/.vnc/passwd  -display :0 -forever -nevershared -bg -repeat -nowf -o /root/.vnc/x11vnc.log
Restart=always
Type=forking
RestartSec=3

[Install]
WantedBy=multi-user.target

x11vnc 需要首先创建 ~/.vnc/passwd 文件,这个 VNCserver 运行的时候也会自动创建,我懒得重新建立就没研究这个,改日有空再写吧。

Xorg 默认启动的文件为 ~/.xinitrc

#!/bin/sh

# /etc/X11/xinit/xinitrc
#
# global xinitrc file, used by all X sessions started by xinit (startx)

# invoke global X session script
. /etc/X11/Xsession
exec startxfce4

参考资料

https://wiki.archlinux.org/index.php/Xinit_(%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87)

https://wiki.archlinux.org/index.php/X11vnc_(%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87)

https://blog.csdn.net/songbaiyao/article/details/72858087

https://wiki.archlinux.org/index.php/Xorg_(%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87)

https://wiki.archlinux.org/index.php/Intel_graphics_(%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87)

https://serverfault.com/questions/174003/how-can-opengl-graphics-be-displayed-remotely-using-vnc

https://askubuntu.com/questions/537787/enable-3d-hw-acceleration-on-vmware-workstation-10-on-ubuntu-14-04

https://github.com/qbittorrent/qBittorrent/wiki/Compiling-qBittorrent-on-Debian-and-Ubuntu

https://dev.deluge-torrent.org/wiki/Installing/Source

一份目前为止理论上能用的纸片人相关资源的 Tracker 列表

我现在才意识到,花园外站的种子对 Linux 下的 BT 客户端有多么不友好。它在给种子塞进去一大堆tracker 的同时,还会把所有的 Tracker 的 Tier 设置为 0,这个对于相当一部分客户端是一个十分不友好的行为。如果是本地用 utorrent 下载,那大可忽略这个问题,但是如果是为了长期开机跑公网分流,那么在可能的情况下,我建议去 bangumi.moe 下载种子文件,那里的种子要规范得多。

然后是一份目前为止能用的 Tracker 列表,其中应该是包含了花园、萌番、ACG.RIP 和 Nyaa 的统计 Tracker,所以可以放心使用。

http://open.acgtracker.com:1096/announce

http://t.nyaatracker.com:80/announce

http://104.238.198.186:8000/announce

http://tr.bangumi.moe:6969/announce

http://t.acg.rip:6699/announce

http://tracker1.itzmx.com:8080/announce

http://opentracker.acgnx.se/announce

http://nyaa.tracker.wf:7777/announce

http://tracker.kamigami.org:2710/announce

http://tracker2.itzmx.com:6961/announce

http://tracker3.itzmx.com:6961/announce

http://tracker4.itzmx.com:2710/announce

https://tr.bangumi.moe:9696/announce

http://share.camoe.cn:8080/announce

http://tracker.kisssub.org:2015/announce

http://sukebei.tracker.wf:8888/announce

udp://tracker.kamigami.org:2710/announce

udp://t.nyaatracker.com:80/announce

udp://tr.bangumi.moe:6969/announce

或者你也可以直接下载 Tracker List.txt 文件。

以上 Tracker 都经过分流机长期的测试,虽然不保证 7×24 能用,但是至少在本文写作的三天之内,它们是有过反应的。

虽然不知道维护者都是谁,不过还是感谢 Open Tracker 的维护者们做出的贡献。

Project NyaaTracker

ACG Tracker

关于近期出现的大量公网 libtorrent BT 客户端的问题

经确认,如果 IP 来源为 CN,且客户端类型汇报为 libtorrent 这个库而非其他正常客户端的 peer,既有可能是迅雷等下载软件的离线客户端。对于一部分同样表现的海外 IP 暂时未能确认,不确定是否有一些极小众的客户端表现确实如此,对于此问题,在 qBittorrent 增强版未作修改之前,建议采取 ipfilter 的方式屏蔽这些客户端。

IP Filter 来源如下:https://emulefans.com/offline-server-ip-170205/

也可以直接下载

关于 qBittorrent 编译的一些问题

您可能是开源软件的受害者!

您可能是开源软件的受害者!

您可能是开源软件的受害者!

重要的事情说三遍。

实际上这次也没做什么理论上很麻烦的事情,就是 clone 一个 qBittorrent 4.0.4.3 的源码,配合 libtorrent 1.0.11 编译一下,理论上不应该有什么问题的对吧。然而就是出问题了……

编译的过程很顺利,安装 Deluge PPA 的 libtorrent-rasterbar-dev 和一些 boost 库之后开始编译,然后到了 linking 的过程就报错了:src/base/bittorrent/private/filterparserthread.cpp:99: reference to `boost::asio::ip::address_v4::address_v4(std::array<unsigned char, 4u> const&)'

按照 GitHub Issue #6721,这个问题可能是因为 std::arrayboost::array 这两个名称的选择在 libtorrent 和 qbittorrent 里面不同,在没有使用 stdc++11 编译的时候,使用的是 boost::array,反之使用 std::array,考虑到 qbittorrent 默认需要 C++ 11,所以 libtorrent 应该使用同样的 CXXFLAGS 编译才能在 linking 的时候不报错。因此既然出现了现在这个问题,就证明 Deluge PPA 的 libtorrent 是没有使用 C++11 编译的。

之前在编译 qb 3.3.16 的时候并没有出现这个错误,可能是 qb3 不要求 C++11 的原因。

那么如果要解决这个问题,就必须从源码开始编译 libtorrent。考虑到 lt1.1.x 至今无法解决 U2 的双栈 IP 汇报问题,因此只能采用 lt1.0。

git clone https://github.com/arvidn/libtorrent.git
cd libtorrent
git checkout $(git tag | grep libtorrent-1_0_ | sort -t _ -n -k 3 | tail -n 1)
./autotool.sh
./configure --disable-debug --enable-encryption --with-libgeoip=system CXXFLAGS=-std=c++11

在编译完成之后,checkinstall 安装,然后再去编译 qb 就应该可以了。

关于 Boost 版本

Boost 版本的选择也有一些讲究,Ubuntu Package 默认的是 1.58 版本的 boost,qb 经过测试,最高只能使用 1.65.1 版本的 boost,如果想要使用新一些的版本,只能自己编译。

我在编译 1.65.1 的时候,遇到了一个以前从来没有的问题,找不要 pyconfig.h,这个文件本应该存在于 /usr/include/python 或者 python2.7 或者 python3.5 的目录下(取决于默认 Python 版本),但是我那个 Python 2 就是没有这个文件,因此将 Python 默认改为 3.5(sudo update-alternatives --install /usr/bin/python python /usr/bin/python3.5 10)才让 boost 的编译器找到对应的 Python 头文件。如果出现这样的问题需要注意。

使用 echo -e '#include <boost/version.hpp>\nBOOST_VERSION' | gcc -x c++ -E - 这个命令可以查看当前 include 的 boost 版本。

Python 版本切换的注意点

如果安装了 Deluge,然后再切换到 Python3,可能会让 Python 找不到 Deluge 的包,然后无法运行,解决方法是修改 /usr/bin/deluged 和 /usr/bin/deluge-web 的第一行,用 python2.7 运行。或者也可以编译完 boost 以后再把默认 python 改回来。

 

关于 qBittorrent 部分问题的记录

首先是这个反复弹出 Tracker Authentication 窗口的问题,这个是因为 Tracker 对未授权的种子返回了 HTTP/401 错误,导致 qb 弹出窗口要求验证。这是一个正常行为,如果不需要它:

  • 在 qBittorrent/src/base/bittorrent/torrenthandle.cpp 文件的 void TorrentHandle::handleTrackerErrorAlert(libtorrent::tracker_error_alert *p) 函数中注释掉关于 401 错误的两行即可。

然后就是在 qb 中有大量种子的情况下,同时开始会导致 Tracker 始终处于 “Not Working” 状态,如果一个一个启动,那么就是好的,这个应该是qb本身并发设计不良导致的问题。

修改版 qbittorrent 封禁迅雷、百度等吸血客户端

写在前面

公网分流是否有必要封禁迅雷,这个问题我自己也没有一个很明确的答案。支持者认为,迅雷对于整体 BT 社区的健康发展完全没有贡献,给他们上传完全是浪费带宽。但是从另外一个角度来说,一个字幕 / Raw 组需要分流人员,是为了让观众能够更快地下载到本组的作品,使用迅雷下载的人也是观众,封禁他们就和建立分流组的初衷相悖。我个人倒是倾向于赞成封禁迅雷,因为从我的经验来看,迅雷的 BT 模块存在严重的问题,其可见进度永远是 0,这样让会让正常的客户端无所适从,无法就当前的 peer 列表情况选择合适的上传策略,从整体上来说,是不利于分享的。

下面进入正题

这篇文章想要介绍的是一个 qbittorrent 的修改版,作者为其加入了自动封禁迅雷的能力,非常适合我的使用情况。原发布帖子在这里,GitHub的代码树则在这里。我推荐使用 v3_3_x 这个 Branch,因为相对全是 bug 的 qb4,3 要稳定很多。

具体编译方面,参照 qb 官方的文档编译即可,记得使用 checkinstall 帮助自己管理软件包。

emmmm,本来还以为可以写很多,结果发现没几句话就写完了。主要目的本来就是为了介绍一下这个修改版,至于是否使用,各位就见仁见智了。

编译安装 qBittorrent 3.3.16 并处理依赖

写在前面

我想说,开源软件都是垃圾。但是问题在于,很多时候我们并没有比垃圾更好的东西用。此外,本文中处理依赖的方式为权宜之计,因此会给出依赖的下载

qb 自从更新了 4.0,bug 就一天比一天多。最近 PPA 上最新的 4.0.3 版本的 build 在安装之后,除了之前的各种 bug 以外,甚至无法正常启动,好不容易启动了以后,也不能正常地加载种子列表,我实在是不想用了。然而,官方的 PPA build 中并没有老版本的 binary,无奈之下,只好自己编译。

此次,我选择了相对稳定的 3.3.16 版本。

准备

在官方的 SourceForge 页面上获取一份源代码(这里是我自己的缓存),并且解压到某个目录下。

qb 的编译安装需要自己处理 libtorrent 的依赖,关于这点,由于我需要保持和本地 Deluge PPA 版本的兼容,因此我并不愿意选择完全从头编译的方法,只能尝试使用 Deluge PPA 的 libtorrent binary,因此遇到了一些问题。

在这里需要谈一谈 pkg-config 这个组件,由于 Linux 存在编译依赖的问题,在没有包管理器的情况下,如果想要在编译时看到链接库所需要的 CFLAGS,需要通过 pkg-config 这个程序来查看,在编译安装第一步执行的 ./configure 完成的一部分工作就是由 pkg-config 得到这些 FLAGS。在之前说过,我的盒子上已经安装了 libtorrent-rasterbar8,也就是所需要的二进制库已经安装,但是在编译前预配置时仍然返回找不到 libtorrent。经过查询,发现是因为 pkg-config 无法返回 linking 所需的编译器标志,也就是这个 binary 并没有注册到系统。所幸在一个 AskUbuntu 答案中,我发现了 libtorrent-rasterbar-dev 这个包,里面向系统注册了编译所需的头文件,安装之后,就没有出错了。

需要注意的是,仍然需要安装 Deluge PPA 对应的 libtorrent-rasterbar-dev 版本并通过 apt-mark hold 防止升级。

除了 libtorrent,还有其他的几个依赖包,不过都可以通过 apt 完成:

sudo apt-get install build-essential pkg-config automake libtool git
sudo apt-get install libboost-dev libboost-system-dev libboost-chrono-dev libboost-random-dev libssl-dev
sudo apt-get install qtbase5-dev qttools5-dev-tools libqt5svg5-dev

编译

这个相对简单

./configure
make -j$(nproc)
sudo make install

即可

在输出了一大堆日志之后,完成了安装

cd src/ && ( test -e Makefile || /usr/lib/x86_64-linux-gnu/qt5/bin/qmake /root/Software/qbittorrent-3.3.16/src/src.pro QMAKE_LRELEASE= -o Makefile ) && make -f Makefile install
make[1]: Entering directory '/root/Software/qbittorrent-3.3.16/src'
install -m 644 -p /root/Software/qbittorrent-3.3.16/doc/qbittorrent.1 /usr/local/share/man/man1/
install -m 644 -p /root/Software/qbittorrent-3.3.16/src/icons/qbittorrent.desktop /usr/local/share/applications/
install -m 644 -p /root/Software/qbittorrent-3.3.16/dist/unix/qbittorrent.appdata.xml /usr/local/share/appdata/
install -m 644 -p /root/Software/qbittorrent-3.3.16/dist/unix/menuicons/16x16/apps/qbittorrent.png /usr/local/share/icons/hicolor/16x16/apps/
install -m 644 -p /root/Software/qbittorrent-3.3.16/dist/unix/menuicons/22x22/apps/qbittorrent.png /usr/local/share/icons/hicolor/22x22/apps/
install -m 644 -p /root/Software/qbittorrent-3.3.16/dist/unix/menuicons/24x24/apps/qbittorrent.png /usr/local/share/icons/hicolor/24x24/apps/
install -m 644 -p /root/Software/qbittorrent-3.3.16/dist/unix/menuicons/32x32/apps/qbittorrent.png /usr/local/share/icons/hicolor/32x32/apps/
install -m 644 -p /root/Software/qbittorrent-3.3.16/dist/unix/menuicons/36x36/apps/qbittorrent.png /usr/local/share/icons/hicolor/36x36/apps/
install -m 644 -p /root/Software/qbittorrent-3.3.16/dist/unix/menuicons/48x48/apps/qbittorrent.png /usr/local/share/icons/hicolor/48x48/apps/
install -m 644 -p /root/Software/qbittorrent-3.3.16/dist/unix/menuicons/64x64/apps/qbittorrent.png /usr/local/share/icons/hicolor/64x64/apps/
install -m 644 -p /root/Software/qbittorrent-3.3.16/dist/unix/menuicons/72x72/apps/qbittorrent.png /usr/local/share/icons/hicolor/72x72/apps/
install -m 644 -p /root/Software/qbittorrent-3.3.16/dist/unix/menuicons/96x96/apps/qbittorrent.png /usr/local/share/icons/hicolor/96x96/apps/
install -m 644 -p /root/Software/qbittorrent-3.3.16/dist/unix/menuicons/128x128/apps/qbittorrent.png /usr/local/share/icons/hicolor/128x128/apps/
install -m 644 -p /root/Software/qbittorrent-3.3.16/dist/unix/menuicons/192x192/apps/qbittorrent.png /usr/local/share/icons/hicolor/192x192/apps/
install -m 644 -p /root/Software/qbittorrent-3.3.16/dist/unix/menuicons/16x16/status/qbittorrent-tray.png /usr/local/share/icons/hicolor/16x16/status/
install -m 644 -p /root/Software/qbittorrent-3.3.16/dist/unix/menuicons/22x22/status/qbittorrent-tray.png /usr/local/share/icons/hicolor/22x22/status/
install -m 644 -p /root/Software/qbittorrent-3.3.16/dist/unix/menuicons/24x24/status/qbittorrent-tray.png /usr/local/share/icons/hicolor/24x24/status/
install -m 644 -p /root/Software/qbittorrent-3.3.16/dist/unix/menuicons/32x32/status/qbittorrent-tray.png /usr/local/share/icons/hicolor/32x32/status/
install -m 644 -p /root/Software/qbittorrent-3.3.16/dist/unix/menuicons/36x36/status/qbittorrent-tray.png /usr/local/share/icons/hicolor/36x36/status/
install -m 644 -p /root/Software/qbittorrent-3.3.16/dist/unix/menuicons/48x48/status/qbittorrent-tray.png /usr/local/share/icons/hicolor/48x48/status/
install -m 644 -p /root/Software/qbittorrent-3.3.16/dist/unix/menuicons/64x64/status/qbittorrent-tray.png /usr/local/share/icons/hicolor/64x64/status/
install -m 644 -p /root/Software/qbittorrent-3.3.16/dist/unix/menuicons/72x72/status/qbittorrent-tray.png /usr/local/share/icons/hicolor/72x72/status/
install -m 644 -p /root/Software/qbittorrent-3.3.16/dist/unix/menuicons/96x96/status/qbittorrent-tray.png /usr/local/share/icons/hicolor/96x96/status/
install -m 644 -p /root/Software/qbittorrent-3.3.16/dist/unix/menuicons/128x128/status/qbittorrent-tray.png /usr/local/share/icons/hicolor/128x128/status/
install -m 644 -p /root/Software/qbittorrent-3.3.16/dist/unix/menuicons/192x192/status/qbittorrent-tray.png /usr/local/share/icons/hicolor/192x192/status/
install -m 644 -p /root/Software/qbittorrent-3.3.16/dist/unix/menuicons/128x128/apps/qbittorrent.png /usr/local/share/pixmaps/
install -m 755 -p qbittorrent /usr/local/bin/qbittorrent
strip /usr/local/bin/qbittorrent

Known Issues

降级之后,不用担心配置文件的问题。无论是 apt-get purge(会移除 /etc 下的配置文件),还是 apt-get remove(不移除配置文件)的方式卸载新版本 qb,都不会影响 $HOME 下的用户配置文件,因此种子列表和配置并不会丢失。

降级之后可能发生种子列表 GUI 紊乱的问题,会出现大量的空白,这个把所有的信息都勾上显示出来,再取消即可解决。

所有的种子的分享率限制可能会莫名其妙变成 0,如果发现无法启动种子,一直保持 Completed 状态,可以检查一下种子的分享率限制(不是 qb 全局)。

References

https://github.com/qbittorrent/qBittorrent/wiki/Compiling-qBittorrent-on-Debian-and-Ubuntu

https://askubuntu.com/questions/837960/how-to-install-qbittorrent-in-ubuntu-16-10

https://askubuntu.com/questions/231562/what-is-the-difference-between-apt-get-purge-and-apt-get-remove

https://sourceforge.net/projects/qbittorrent/files/qbittorrent/qbittorrent-3.3.16/

调整 Deluge 使用的 libtorrent-rasterbar 版本以实现双栈 IP 汇报

最近一版的 qBittorrent 更新之后,Deluge 所依赖的 libtorrent 变成了 1.1.5(libtorrent-rasterbar9 1.1.5+git20171122.a57ad00e15+patched-configure-1ppa1~xenial1),然而 Deluge 的双栈 IP 汇报是一件很玄学的事情,目前只有 libtorrent-rasterbar8 1.0.11-1~xenial~ppa1.1(也就是目前 Deluge PPA 上面的版本)才能实现对 U2 和 CMCT 的双栈 IP 汇报,因此需要做一些调整。

经过查询一些资料,发现 Deluge 通过 python-libtorrent 这个包实现对于 libtorrent 版本的绑定,该软件包的版本决定了底层使用的 libtorrent 版本。

先看一下 1.1.5 版的 libtorrent 安装后,系统上的软件包情况:

$ dpkg -l|grep libtorrent
ii  libtorrent-rasterbar8                1.0.11.1+git20170907.c074e87885-1ppa1~xenial1                amd64        C++ bittorrent library by Rasterbar Software
ii  libtorrent-rasterbar9                1.1.5+git20171122.a57ad00e15+patched-configure-1ppa1~xenial1 amd64        C++ bittorrent library by Rasterbar Software
ii  python-libtorrent                    1.1.5+git20171122.a57ad00e15+patched-configure-1ppa1~xenial1 amd64        Python bindings for libtorrent-rasterbar
ii  qbittorrent                          4.0.1.99~201711271728-6211-f977d12~ubuntu16.04.1             amd64        bittorrent client based on libtorrent-rasterbar with a Qt4 GUI

可以看到,python-libtorrent 和 libtorrent-rasterbar9 一样,使用了 1.1.5 的版本,那么如何降级呢?

经过 apt-cache policy <package name> 命令的查询,我们发现其实是可以安装 1.0.11 版本的 python-libtorrent 的:

$ apt-cache policy python-libtorrent
python-libtorrent:
  Installed: 1.1.5+git20171122.a57ad00e15+patched-configure-1ppa1~xenial1
  Candidate: 1.1.5+git20171122.a57ad00e15+patched-configure-1ppa1~xenial1
  Version table:
 *** 1.1.5+git20171122.a57ad00e15+patched-configure-1ppa1~xenial1 100
        100 /var/lib/dpkg/status
     1.0.11-1~xenial~ppa1.1 500
        500 http://ppa.launchpad.net/deluge-team/ppa/ubuntu xenial/main amd64 Packages
     1.0.7-1build1 500
        500 http://mirrors.online.net/ubuntu xenial/universe amd64 Packages

$ apt-cache policy libtorrent-rasterbar8
libtorrent-rasterbar8:
  Installed: 1.0.11.1+git20170907.c074e87885-1ppa1~xenial1
  Candidate: 1.0.11.1+git20170907.c074e87885-1ppa1~xenial1
  Version table:
 *** 1.0.11.1+git20170907.c074e87885-1ppa1~xenial1 100
        100 /var/lib/dpkg/status
     1.0.11-1~xenial~ppa1.1 500
        500 http://ppa.launchpad.net/deluge-team/ppa/ubuntu xenial/main amd64 Packages
     1.0.7-1build1 500
        500 http://mirrors.online.net/ubuntu xenial/universe amd64 Packages

$ apt-cache policy libtorrent-rasterbar9
libtorrent-rasterbar9:
  Installed: 1.1.5+git20171122.a57ad00e15+patched-configure-1ppa1~xenial1
  Candidate: 1.1.5+git20171122.a57ad00e15+patched-configure-1ppa1~xenial1
  Version table:
 *** 1.1.5+git20171122.a57ad00e15+patched-configure-1ppa1~xenial1 500
        500 http://ppa.launchpad.net/qbittorrent-team/qbittorrent-stable/ubuntu xenial/main amd64 Packages
        100 /var/lib/dpkg/status

从输出结果中可以看出,python-libtorrent 有三个版本,1.1.5 1.0.11 和 1.0.7,我们在这里需要 1.0.11 的版本。同时,为了保证依赖完整,我们需要安装相同版本的 libtorrent-rasterbar8,这个操作可以通过 apt-get install <package name>=<version name> 的命令完成。

之后,还需要做的一件事是方式 apt-get upgrade 的时候更新了我们已经降级的软件包。这个操作通过 apt-mark hold <package name> 完成,在执行了这个命令以后,我们可以看一下效果:

$ dpkg --get-selections|grep libtorrent
libtorrent-rasterbar8				hold
libtorrent-rasterbar9				install
python-libtorrent				hold

可以发现对应的软件包已经被锁定,重启 deluged 之后也成功降级到了 1.0.11 版本。

综上,解决方案如下:

apt-get install libtorrent-rasterbar8=1.0.11-1~xenial~ppa1.1 python-libtorrent=1.0.11-1~xenial~ppa1.1
apt-mark hold libtorrent-rasterbar8 python-libtorrent
dpkg --get-selections|grep libtorrent

.deb 依赖包下载,以防 Deluge PPA 更新导致方法无效:https://down.gloriousdays.pw/Tools/Deluge-libtorrent-1.0.11.tar.xz