有没有办法为应用程序提供与 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/hosts
为 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,例如这里