1

我们环境中的许多服务器的环回线路/etc/hosts配置如下:

127.0.0.1        mydevserver.testdomain.com mydevserver localhost.localdomain localhost

通常,这不是问题。但是,我们现在正在处理来自供应商的一些外部软件,这些软件调用 gethostbyaddr,如果结果hostname --ip-address为 127.0.0.1,他们的安装程序会失败。这当然会导致它在我们的系统上失败,因为服务器主机名在/etc/hosts.

我的问题是,如果我将安装程序包装在 bash 或 perl 脚本中,有没有办法在hostname --ip-address不更改 /etc/hosts 文件的情况下“屏蔽”或临时更改结果?

(澄清:他们在编译的二进制安装程序中调用 gethostbyaddr() 函数。从命令行获得类似结果的方法是hostname --ip-address

4

4 回答 4

4

一种方法可能是编写自己的gethostbyaddr()函数,将其编译为库(例如libmyfunc.so),然后将其预加载到包装脚本中,以便供应商的安装程序使用它而不是系统gethostbyaddr()

#!/bin/bash    
export LD_PRELOAD=libmyfunc.so
export LD_LIBRARY_PATH=.:$LD_LIBRARY_PATH

/path/to/crappy_vendor_binary $@
于 2011-04-14T00:49:57.923 回答
1

编写你自己的实现hostname来做预期的事情,把它放在某个地方,在$PATH.

于 2011-04-14T00:22:32.853 回答
1

如果真的调用主机名命令,那么没有比这更容易的了:只需将其替换为您自己的版本即可。

于 2011-04-14T00:24:18.497 回答
0

好吧,如果它是一个普通的 BASH 脚本,请在调用“主机名”之前添加它:
function hostname(){ echo -n; }

于 2011-04-14T01:33:11.797 回答