有沒有辦法為應用程式提供與 Linux 上的電腦主機名稱不同的特定主機名稱?

有沒有辦法為應用程式提供與 Linux 上的電腦主機名稱不同的特定主機名稱?

有沒有辦法為應用程式提供與 Linux 上的電腦主機名稱不同的特定主機名稱?基本上,我有一個軟體期望本機電腦具有與我的電腦主機名稱不同的特定主機名稱。我不想全域更改電腦主機名,而是希望有一種機制,可以在具有指定主機名稱的環境中運行程序,或直接使用指定主機名稱運行程序。

答案1

有了root權限就可以了。使用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/hosts127.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

我認為您沒有相關程式的原始程式碼。讀取機器的主機名稱是透過系統呼叫完成的,取得主機名稱(),如果不存取程式原始碼,就很難規避這一點。

然後,您應該使用虛擬解決方案來執行該程式。容器、docker、虛擬機器具有足夠的隔離程度,可讓您將它們重新命名為所需的值,而不會影響您的主機。一個容器是非常輕量級的解決方案,只會消耗很少的主機資源。

相關內容