XiaoCai 's Blog

当前页面是本站的「Google AMP」版。查看和发表评论请点击:完整版 »

编译一个支持跳检以及无限文件限制的 Transmission 2.94 客户端

最近在用脚本给柠檬搬运一些音乐。一个 TR 里大概塞了 3W 多个种子吧,总是会遇到因为 Too many files open 而红种的种子,这让我挺难受的,虽然说可以通过限制全局连接数数量来暂时性的解决这个问题,但是还是直接编译一个无文件限制的 TR 客户端永久的解决这个问题比较好。(而且还能增加点新功能)

[scode type="yellow"]使用修改版客户端是各大站点明令禁止的,请自行斟酌利弊。
我只修改了最大文件数量限制,与跳过校验不同的是它不会构成 feak seed。
如果你也只想修改最大文件数量限制,请自行在 github 上找到官方的源码进行修改即可。[/scode]


环境

盒子系统为 Ubuntu 18.04 使用星大脚本安装过 TR 2.94 deb

星大脚本附赠了所有编译 TR 所需要的环境以及编译工具,而且也附赠了所有的 systemctl 文件和 tr 的配置文件,所以直接开草然后替换二进制文件就可以了。

下面的问题,星大已修复。
[scode type="red"]星大脚本在 ubuntu18.04 上会少安一个包 libssl1.0-dev 这会导致严重的内存泄露(不重新编译的解决方法是将 https tracker 更改为 http),如果你在 ubutnu18.04 系统上准备安装 tr,那么请先手动 apt-get install libssl1.0-dev -y [/scode]

当然,你也可以参考这里


编译修改

首先安装依赖

apt-get install -y libcurl4-openssl-dev libglib2.0-dev libevent-dev libminiupnpc-dev libgtk-3-dev libappindicator3-dev pkg-config automake autoconf cmake libtool intltool build-essential openssl libssl1.0-dev libssl-dev

开始前先做一个备份,养成备份的好习惯,万一翻车了也能救回来(

星大脚本的 tr 的二进制文件是放在 /usr/bin/ 目录下的,将其备份到家目录下的 tr_backups

mkdir ~/tr_backups && cp /usr/bin/transmission-* ~/tr_backups/

备份以后建议先运行一下 ls ~/tr_backups 检查一下文件是否真的备份完成了,不出意外的话,你应该是能看到以下结果:

root@Main-SeedBox ~/tr_backup # ls
transmission-create  transmission-edit  transmission-remote
transmission-daemon  transmission-gtk   transmission-show

确认文件没问题后就可以下载源码了。

wget https://github.com/blackyau/Transmission_SkipHashChek/archive/2.94_mod.zip

因为下载的源码只做了跳过校验的修改,所以这里还需要二次修改解除文件限制。

unzip 2.94_mod.zip
curl https://fars.ee/Xm6D | patch -p0

感谢大佬写的patch,请跳过下面划线部分与备份。终于可以摆脱烦人的 vi 编辑器了

直接输入 367 然后回车,跳转到 367 行,不出意外的话你应该能看到下面一段代码,直接将其删除掉,然后 :wq 保存即可。

[scode type="yellow"]千万不要多删或者少删,不然过不去编译的![/scode]
[collapse status="false" title="一个备份"]

#ifndef _WIN32~~~~/* set the open-file limit to the largest safe size wrt FD_SETSIZE */
struct rlimit limit;
if (!getrlimit (RLIMIT_NOFILE, &limit))
{
const int old_limit = (int) limit.rlim_cur;
const int new_limit = MIN (limit.rlim_max, FD_SETSIZE);
if (new_limit != old_limit)
{
limit.rlim_cur = new_limit;
setrlimit (RLIMIT_NOFILE, &limit);
getrlimit (RLIMIT_NOFILE, &limit);
tr_logAddInfo ("Changed open file limit from %d to %d", old_limit, (int)limit.rlim_cur);
}
}
#endif

[/collapse]

完成后就可以进入根目录准备编译了。

cd Transmission_SkipHashChek-2.94_mod && bash autogen.sh
make

然后进入 daemon 文件夹,将新的 transmission-daemon 覆盖到 /usr/bin/ 下即可。

rm /usr/bin/transmission-daemon
cp ./transmission-daemon /usr/bin/transmission-daemon

重启 tr,这里就别无脑抄作业了,记得替换用户名。

systemctl restart transmission@你的用户名

装完了,没啥变化啊?

跳检需要一个正在校验中的种子,选中它,然后点击上方的获取更多 peers 即可。如下图

文件限制可能在种子少的时候比较少见,但是当你塞了几万个种子而且遇到站免的时候就知道了(