最近正在使用openSUSE Tumbleweed,搭配KDE桌面环境。要装一个eD2K客户端,aMule是Linux下为数不多的选择之一。固然可以直接在源里sudo zypper install amule,不过直接安装编译好的aMule包除了本体外,还附带三个对我来说没什么用的程序(生成eD2K链接的aMuleLinkCreator、图形界面aMule在线统计的WxCAS,还有个好像是命令行版的aMule),这让本强迫症患者看着很不爽。而且原版aMule不支持反吸血的DLP(Dynamic Leech Protection)功能,为了屏蔽吸血客户端,更好的选择是使用aMule-DLP,这个源里面没有,必须自己编译。
下载源代码
aMule-DLP的GitHub项目地址:
https://github.com/persmule/amule-dlp
其支持的antiLeech项目地址:
https://github.com/persmule/amule-dlp.antiLeech
克隆或将下载的amule-dlp-master.zip解压,进入目录。
安装GeoIP
(2020年3月25日新增)
不知什么原因,2020年3月23日时openSUSE从源中移除GeoIP及相关包,于是不能直接安装libGeoIP-devel,只能手动编译安装。
在GitHub上下载GeoIP的安装包,截至目前,最新Release版本为1.6.12,解压后进入目录。
mkdir Build && cd Build
make -j`nproc`
make check
没问题就可以进行安装:
sudo make install
如果你看到这篇文章时,GeoIP的包又回来了,那就简单多了,直接:
sudo zypper install libGeoIP-devel
生成配置脚本
首先需要安装几个包:
sudo zypper install autoconf automake gettext-tools libtool
如果直接运行autogen.sh,会收到大量类似“source file XXXXXXXXXX is in a subdirectory, but option ‘subdir-objects’ is disabled”的警告。
需要编辑configure.ac文件,在第28行AM_INIT_AUTOMAKE后面加上如图所示的参数“subdir-objects”。
然后就可以让它自动生成configure脚本了:
./autogen.sh
运行配置脚本
编译aMule/aMule-DLP并不难,aMule-DLP项目提供了一个简单的Wiki里有安装指南,如果是Ubuntu系统的话,直接一个sudo apt-get build-dep amule就可以一步将需要的包安装完毕,Fedora上也有类似的操作。但openSUSE里只能手动安装依赖包,比较麻烦的是Ubuntu里包的名字不见得和openSUSE相同,得一个个检查,有些包已经装好了就不用管了。
我本次安装了下列包,如果仍然提示缺少某些文件,则再安装相应的包:
sudo zypper install make gcc-c++ zlib-devel gd-devel wxWidgets-3_0-nostl-devel libupnp-devel libcryptopp-devel flex boost-devel libboost_system-devel ccache
注1:安装的wxWidgets是目前最新的稳定版3.0.4版,虽然有更新的3.1.3版,但试了一下用它编译的aMule界面很乱,可见不一定是越新越好。
注2:关于wxWidgets-3_0-nostl-devel包,见本文结尾。
如果需要打开WebServer支持,还需安装bison包:
sudo zypper install bison
我不需要什么WebServer,这个就跳过了。
安装指南里建议建一个子目录进行编译,于是:
mkdir Build && cd Build
../configure --enable-optimize --with-denoise-level=3 --disable-debug --enable-upnp --enable-geoip --enable-nls --disable-amule-daemon --disable-amulecmd --disable-webserver --disable-alcc --disable-alc --enable-cas --disable-wxcas --enable-mmap --enable-ccache --disable-plasmamule --with-boost --with-geoip-lib=/usr/local/lib64/ --with-geoip-static
其中–disable-alcc --disable-alc分别是不安装命令行版和GUI版的eD2K链接生成器,–disable-wxcas是不安装那个图形界面aMule在线统计程序,–disable-amule-daemon --disable-amulecmd是不安装aMule守护程序和命令行版aMule,还有一个–disable-plasmamule是不安装aMule的Plasma部件及其引擎,不知道是个什么样的东西,打开的话又要装别的依赖包,想着也没什么用就不装了。
最后两个–with-geoip参数是因为源代码编译安装的GeoIP,需要手动制定libGeoIP的位置,还将其设为了静态,如果能够从源里自动安装GeoIP,则可以去掉这两个参数。
如果需要其中的某个程序,就把相应的disable改成enable,使用–help参数可以查看configure的详细帮助。
配置脚本提示完成系统检查并显示清单后,就可以开始编译。
编译安装
调动全部核心(其实应该是线程),充分利用CPU的算力:
make -j`nproc`
也可以手动指定线程数,比如
make -j2
编译完成、没有报错后开始安装:
sudo make install
编译antiLeech
这个没什么需要配置的,进入目录直接几个命令走起:
./autogen.sh
mkdir Build && cd Build
../configure
make -j`nproc`
sudo make install
开始使用吧。
antiLeech的拦截记录
关于wxWidgets-3_0-nostl-devel包
先前安装的wxWidgets-3_0-devel包,aMule-DLP可以正常编译,但编译antiLeech时就会报以下两类错误
没有能力修改源代码,花了好一阵子找到的解决办法,一个把wxWidgets换成2.8.12版,因为没有RPM包,得去官网下载源代码手动编译安装;另一个办法就是把wxWidgets-3_0-devel换成wxWidgets-3_0-nostl-devel,两个包是互相冲突的。
wxWidgets-3_0-devel的描述是:
wxWidgets-3_0-devel - Development files for GTK2-backed wxWidgets 3.0
wxWidgets is a C++ library for cross-platform GUI development. With wxWidgets, you can create applications for different GUIs (GTK+, Motif, MS Windows, MacOS X, Windows CE, GPE) from the same source code.
This package contains all files needed for developing with wxGTK2. Note: wxWidgets variant devel packages are mutually exclusive.
Please read /usr/share/doc/packages/wxWidgets-3_0/README.SUSE to pick a correct variant.
而wxWidgets-3_0-nostl-devel的描述则是:
wxWidgets-3_0-nostl-devel - Development files for an old API variant of wxWidgets
wxWidgets is a C++ library for cross-platform GUI development. With wxWidgets, you can create applications for different GUIs (GTK+, Motif, MS Windows, MacOS X, Windows CE, GPE) from the same source code.
This package contains all files needed for developing with wxGTK2.
Note: wxWidgets variant devel packages are mutually exclusive.
Please read /usr/share/doc/packages/wxWidgets-3_0-nostl/README.SUSE to pick a correct variant.
不知道对别的程序会不会有什么影响,暂时先这么用着。
请了解具体区别的网友请不吝赐教。