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

1 つの方法は、独自のgethostbyaddr()関数を作成し、ライブラリ (たとえば、libmyfunc.so) にコンパイルしてから、ラッパー スクリプトにプリロードして、ベンダーのインストーラーが system ではなくそれを使用するようにすることです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

本当に hostname コマンドを呼び出す場合は、それよりも簡単なことはありません。それを独自のバージョンに置き換えるだけです。

于 2011-04-14T00:24:18.497 に答える
0

プレーンなBASHスクリプトの場合は、「hostname」を呼び出す前にこれを追加します。
function hostname(){ echo -n; }

于 2011-04-14T01:33:11.797 に答える