LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1105|回复: 11

如何传递configure和make参数给emerge,为mldonkey添加upnp支持?(已解决)

[复制链接]
发表于 2012-3-15 10:31:19 | 显示全部楼层 |阅读模式
mldonkey从3.06开始支持upnp和natmap,也就是说,不需要到路由器中手工添加端口映射,只要路由器和mldonkey都启用upnp支持,即自动完成。这样Donkey网路才能获得高id。

to compile using pre-installed libs: configure --enable-upnp-natpmp
to compile UPNP libs during MLDonkey compile use: --enable-force-upnp-natpmp

但是当前的ebuild仅支持以下的USE参数
[ebuild  N ] net-p2p/mldonkey-3.1.0  USE="ocamlopt -bittorrent -doc -fasttrack -gd -gnutella -gtk -guionly -magic"

尝试添加upnp natmap enable-upnp-natpmp等参数到USE中,编译都能通过,但是mldonkey对upnp和natmap还是不支持的。
启动mldonkey server,从http://localhost:4080页面,Help+ -> Sysinfo -> Features:里面可以看到所以当前mldonkey支持和不支持的特性, Configure args:则是运行./configure所传递的参数,里面并没有--enable-upnp-natpmp

事实上,emerge编译的时候,只处理了ebuild预定义的参数,其他参数都被忽略掉了。
从/usr/portage/net-p2p/mldonkey/mldonkey-3.1.0.ebuild文件中的src_configure() 函数,也可以看出,emerge仅处理预定义的configure参数,也就是USE="ocamlopt -bittorrent -doc -fasttrack -gd -gnutella -gtk -guionly -magic"中的参数,其他的都被忽略不计了。


现在想请教大家的问题是,emerge有没有什么办法,可以将需编译程序的configure参数传入,就跟
./configure --xxx  --xxx
达到同样的效果?
发表于 2012-3-15 10:50:04 | 显示全部楼层
把 EXTRA_ECONF="--enable-upnp-natpmp" 寫到 portage/env/ 下?……
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-3-15 11:14:16 | 显示全部楼层
Post by jtshs256;2161828
把 EXTRA_ECONF="--enable-upnp-natpmp" 寫到 package.env/ 下?……


从mldonkey-3.1.0.ebuild文件中的src_configure() 函数看,只有预设的USE="ocamlopt -bittorrent -doc -fasttrack -gd -gnutella -gtk -guionly -magic"参数才会被处理,其他的都被忽略了。
回复 支持 反对

使用道具 举报

发表于 2012-3-15 11:45:47 | 显示全部楼层
自己写个ebuild,添加到overlay里
回复 支持 反对

使用道具 举报

发表于 2012-3-15 11:45:58 | 显示全部楼层
可以改ebuild
回复 支持 反对

使用道具 举报

发表于 2012-3-15 11:47:01 | 显示全部楼层
呃,4楼同见地
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-3-15 11:58:10 | 显示全部楼层
嗯,已经尝试修改/usr/portage/net-p2p/mldonkey/mldonkey-3.1.0.ebuild文件了,在src_configure() 函数里面插入了一行“--enable-upnp-natpmp \”

--disable-batch \
        --enable-upnp-natpmp \
        $(use_enable bittorrent) \


还需要修改 /usr/portage/net-p2p/mldonkey/Manifest文件,因为mldonkey-3.1.0.ebuild文件尺寸、RMD160、SHA1、SHA256的值全都变了,需要修改。



刚开始折腾gentoo,不知到overlay在哪里,怎么操作?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-3-15 12:08:09 | 显示全部楼层
emerge了 net-libs/miniupnpc, net-libs/libnatpmp
编译mldongkey错误,似乎gentoo自带的 libnatpmp 20110808-r1 版本过高,mldonkey提示 initnatpmp参数个数不一致。mldonkey 3.10需要版本libnatpmp-20100202
回复 支持 反对

使用道具 举报

发表于 2012-3-15 12:17:11 | 显示全部楼层
Post by hongly;2161832
从mldonkey-3.1.0.ebuild文件中的src_configure() 函数看,只有预设的USE="ocamlopt -bittorrent -doc -fasttrack -gd -gnutella -gtk -guionly -magic"参数才会被处理,其他的都被忽略了。

EXTRA_ECONF在Portage内部被处理,直接加到econf使用的参数上,和ebuild文件没有关系(除非ebuild没有调用econf...)。目前看,EXTRA_ECONF是最简单的方法。

首先注意--enable-upnp-natpmp可能依赖net-libs/libnatpmp和net-libs/miniupnpc 。

临时开启UPnP(下次编译之后失效):
  1. EXTRA_ECONF="--enable-upnp-natpmp" emerge -v net-p2p/mldonkey
复制代码
永久开启的方法,就像jtshs256说的那样:
  1. mkdir -p /etc/portage/env/net-p2p
  2. echo 'EXTRA_ECONF="--enable-upnp-natpmp"' > /etc/portage/env/net-p2p/mldonkey
复制代码

另外可以在Gentoo Bugzilla报bug要求增加natpmp的USE flag。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-3-15 12:59:14 | 显示全部楼层
刚接触gentoo,不懂的东西太多了。感谢大家的回复和帮助!

感觉9楼的这个方法应该是最正统和简便的。


配置参数必须使用--enable-force-upnp-natpmp,
这样mldonkey会自动下载libnatpmp-20100202.tar.gz和miniupnpc-1.4.20100609.tar.gz进行本地编译。
因为gentoo的最新版本是libnatpmp-20110808-r1和miniupnpc-1.6-r1,编译无法通过。

使用--enable-force-upnp-natpmp参数并用 FEATURES=noclean 后,还需要拷贝编译结果patches/local/usr/里面所有文件到/usr目录下才能工作,这样其实就是mldonkey本地编译的miniupnpc-1.4覆盖了emerge的miniupnpc-1.6, libnatpmp-20100202覆盖了libnatpmp 20110808。我现在就是这样的,upnp可以工作并自动获取高id。

但是用旧版覆盖新版的文件,总是感觉不太好,没准以后其他程序调用upnp或natpmp库就会出错。所以想使用静态链接的方式。mldonkey的提示是使用 make mlnet.static

那么现在的问题就是 ,用什么方式把 mlnet.static 这个make参数传递给emerge呢?直接用 MAKEOPTS吗?
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表