Contents
前言
QuickBox是一个比较流行的seedbox 安装脚本。使用这个脚本可以很快速的在干净的系统上安装seedbox环境。它提供了一个非常漂亮的控制面板,能够方便的控制各种功能,并且监视系统状态。这套脚本建立在Debian系的基础上(目前暂时删除了Debian支持,仅保留Ubuntu16.04 、15.10两个发行版支持)。
大约在半年前我接触到这么一套解决方案,当时就被它丰富的功能和大方的界面设计吸引了,但是在试用后发现仍然有相当多不符合自己要求的地方,例如rtorrent的安装并没有ipv6支持,deluge的安装无法正常使用stable版本,再比如说没有transmission。我与几个好友曾经试过使用这个脚本并且希望通过小修小补大搞自己要求,但是后来发现,修改任何功能,都可能出现牵一发而动全身的情况,最后导致面板失效,软件冲突等问题。这个假期我抽出一部分时间,了解了一下shell脚本之后,决定对这套脚本进行一些修改,达成自己的目标。
QuickBox的源码是开放在github上的,在大约4月的时候迁移到QB仓库中。我fork了一份之后,开始预览整个setup脚本部分。
修复rtorrent安装
解决libtorrent依赖库问题
对比之前的2月份脚本来看,脚本变化不是很大,移除了debian支持,增加了一个主题,也增加了vsftpd的被动模式,修复了少量安全问题,但是删除了rtorrent的编译安装选项。
# libtorent function (20) # apt rtorrent handles the libtorrent install # remember this is temporary until patched # rtorrent function (21) # commenting until patch comes for comp/build # using apt install rtorrent in the meantime
由此看来,是这项编译安装脚本有一些故障,因此临时取消了。那么,想要拥有ipv6功能的话,就必须自己编译安装才行,因此我开始尝试修复编译安装。首先取消从apt源中安装rtorrent,并且运行脚本。运行后我发现,libtorrent/rtorrent确实没有被成功安装,通过查询log后发现,libtorrent在编译过程中遇到了问题。
^~~~~ In file included from diffie_hellman.cc:43:0: diffie_hellman.cc:107:63: error: invalid use of incomplete type ‘DH {aka struct dh_st}’ BN_bn2bin(m_dh->pub_key, dest + length - BN_num_bytes(m_dh->pub_key)); ^ In file included from /usr/include/openssl/bn.h:32:0, from diffie_hellman.cc:43: /usr/include/openssl/ossl_typ.h:104:16: note: forward declaration of ‘DH {aka struct dh_st}’ typedef struct dh_st DH; ^~~~~ Makefile:422: recipe for target 'diffie_hellman.lo' failed make[3]: *** [diffie_hellman.lo] Error 1
搜索后发现,是openssl 1.1.0更换了新的函数名,解决方法有两个, 一是通过打补丁,让libtorrent支持使用openssl1.1.0编译,但是在实验后我发现,它会造成rtorrent找不到相应函数,也就是说,并不能通过只修改libtorrent达到目的。于是只能寻求第二个方案,编译安装可以兼容的openssl1.0.2版本。编译过程基本很顺利,同时也能够完全的修复这个无法编译安装rtorrent的问题,但是这样必须取消安装apt源中的libssl(或者说会覆盖)那么,如何让libtorrent识别一个自己指定的openssl目录呢?研究config脚本后我发现,实际上作者已经提供了这样的参数:OPENSSL_LIBS和OPENSSL_CFLAGS,通过几次实验,并且在otakunekop的帮助下。我成功指定了libtorrent使用的openssl1.0.2l的编译目录:OPENSSL_LIBS=”-L/root/openssl-1.0.2l -lssl -lcrypto” OPENSSL_CFLAGS=”-I/root/openssl-1.0.2l/include”再次测试后,确定能够通过指定这样的参数,让libtorrent仅调用我指定的lib/include库,这样就可以在不修改系统自带ssl库的情况下完成libtorrent的编译。
为rtorrent添加ipv6支持
rtorrent0.9.6的代码中已经含有ipv6补丁,因此仅需在编译参数中添加–enable-ipv6即可。但是0.9.6并不受到很多pt站的支持,因此,我必须考虑为rt0.9.4打上ipv6补丁。好在网络上已经提供了相当多的补丁方案,在斟酌再三后,我找到了Debian论坛中提到的一个补丁,使用patch功能修复libtorrent0.13.4/rt0.9.4的ipv6支持。并且通过增加判断条件,使得补丁仅针对0.9.4版本使用。在雪々的协助测试后确认ipv6功能已经可以正常工作。到此,rt的全部修复工作完成。0.9.6/0.9.4均可以正常编译安装,且支持ipv6。
修复deluge编译安装
脚本中原本提供了repo/stable/dev三种deluge的安装版本,repo顾名思义,来源于ubuntu的仓库。直接使用apt源进行安装,因此没有什么问题,但是安装出来的deluge版本并非最新的stable版本。尝试stable版本的时候,我发现编译脚本又出现了错误。根据log信息搜索原因后发现,似乎系统提供了不兼容的boost库,我只好自行安装。boost库的编译虽然要不少时间,但是编译并不困难,简单解决后,deluge的安装就变得顺风顺水,就当我以为一切顺利的时候,发现。通过git源安装的deluge尽管是stable分支,却还是会编译出1.3.15-dev0,于是我将源码更改为deluge官方下载库打包的tar.gz代码。编译后确认生成了stable的deluge主程序。
一些小小的修改
添加bbr
谷歌开发的新型tcp网络阻塞解决方案BBR目前已经成为非常流行的提高网速的方法。我通过添加Vicer公布的一键脚本,在qb的安装脚本中继承了BBR功能。
添加transmission
otakunekop曾经有一个修改版本的QuickBox已经集成了transmission,我就使用那份代码进行了移植,重新将transmission以及transmission-web-control集成到新的安装脚本中,同时添加了安装开关。
重新启用h5ai
在QB中,作者禁用了h5ai,我又再一次将它启用。
修复hosts问题
在hosts中添加修改后的hostname防止出现”sudo: unable to resolve host”问题。
为rt添加PT常用参数
我在rt预设的配置文件中加入了强制加密等pt常用的配置。
修复vultr的安装问题
这次我测试安装脚本的平台是vultr,在安装过程中vultr的系统会缺少一个自签的ssl-cert-snakeoil证书,并且会导致apache2启动失败,我通过openssl自行生成此证书,修复这个问题。
锁定ffmpeg的版本
在最后两次安装过程中,ffmpeg出现了编译失败问题,查询源码后,我发现ffmpeg的master分支添加了一些新特新,并且最终导致编译失败,于是我锁定分支到release版本,解决了这项编译安装失败的问题。
一些预设值的改变
仅针对我个人常用的安装要求,对rtorrent/deluge/多用户等的安装预设值进行了一定的调整。
2条评论. Leave new
前几天发现了你改好的脚本赶快fork了一份 ←_←
以前我自己也修改过QuickBox让它装的rt支持v6,不过只是很简单的修改,在QB更新后就没用了,我也就没再折腾
感觉非常奇怪的是现在QuickBox官方加了你给的rt0.9.4的v6补丁但安装的使用还是不用-enable-ipv6,不知道怎么想的……
感觉他并没有特别想支持v6,主要是我这一波修改能让他正常编译安装了,这个才是比较主要的变化吧