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