Linux 上のマシンのホスト名とは異なる特定のホスト名をアプリケーションに提供する方法はありますか? 基本的に、ローカル マシンが自分のマシンのホスト名とは異なる特定のホスト名を持つことを想定するソフトウェアがあります。マシンのホスト名をグローバルに変更するのではなく、指定されたホスト名を持つ環境でプログラムを実行するか、指定されたホスト名で直接プログラムを実行できるメカニズムが必要です。
答え1
ルート権限があれば可能です。unshare --uts
新しい UTS 1名前空間を作成するには、そこに希望のホスト名を設定し、su
アカウントに戻ってアプリを実行します。例:
ongun@foo$ sudo -s
~ create a new namespace ~
root@foo# unshare --uts /bin/sh
~ this terminal now has its own namespace – change the hostname ~
root@foo# hostname quux
~ switch back ~
root@quux# sudo -s -u ongun
ongun@quux$ /usr/bin/game
名前空間はデフォルトで作成プロセスに制限されているため、新しいホスト名は実行するプログラムにのみ表示されます。内部「共有されていない」ウィンドウ。
注記:/etc/hosts
多くのプログラムが 127.0.0.1 が解決可能であることを期待/依存しているため、新しいホスト名を実際に 127.0.0.1 として追加することを忘れないでください。
1「UTS」の意味を聞かないでください。私が知っている限りでは、これは古代の Unix の名残です。
答え2
アプリケーションがファイルhostname
または/etc/hostname
ファイルからの出力を直接読み取らない場合は、以下のようにマシンのエイリアスをいつでも作成できます。
#
# /etc/hosts: static lookup table for host names
#
#<ip-address> <hostname.domain.org> <hostname>
127.0.0.1 localhost.localdomain localhost MYHOSTNAME OTHER_ALIAS
::1 localhost.localdomain localhost MYHOSTNAMEv6 OTHER_ALIASv6
または、次のように別のホスト名でchrootを作成してみることもできます。ここ
答え3
問題のプログラムのソースコードをお持ちではないと思います。マシンのホスト名の読み取りはsys呼び出しを通じて行われます。ホスト名を取得する()プログラムのソースコードにアクセスできないと、これを回避するのは困難です。
次に、仮想ソリューションを使用してプログラムを実行する必要があります。コンテナー、Docker、VM には十分な分離レベルがあるため、ホスト マシンに悪影響を与えることなく、必要な値に名前を変更できます。コンテナ非常に軽量なソリューションであり、ホストのリソースをほとんど消費しません。