Gibt es eine Möglichkeit, einer Anwendung einen bestimmten Hostnamen zuzuweisen, der sich vom Hostnamen des Computers unter Linux unterscheidet? Im Grunde habe ich eine Software, die erwartet, dass der lokale Computer einen bestimmten Hostnamen hat, der sich vom Hostnamen meines Computers unterscheidet. Anstatt den Hostnamen des Computers global zu ändern, hätte ich gerne einen Mechanismus, mit dem ich das Programm entweder in einer Umgebung mit dem angegebenen Hostnamen ausführen oder das Programm direkt mit dem angegebenen Hostnamen ausführen kann.
Antwort1
Dies ist mit Root-Rechten möglich. Verwenden Sieunshare --uts
Um einen neuen UTS 1- Namespace zu erstellen, legen Sie darin den gewünschten Hostnamen fest, kehren Sie dann su
zu Ihrem Konto zurück und führen Sie die App aus. Beispiel:
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
Namespaces sind standardmäßig auf den Prozess beschränkt, der sie erstellt hat, sodass der neue Hostname nur für die Programme sichtbar ist, die Sie ausführeninnendas Fenster „Nicht freigegeben“.
Notiz:Vergessen Sie nicht, den neuen Hostnamen als 127.0.0.1 hinzuzufügen /etc/hosts
, da viele Programme davon ausgehen bzw. darauf angewiesen sind, dass dieser auflösbar ist.
1 Fragen Sie nicht, was „UTS“ bedeutet. Ich weiß nur, dass es ein Überbleibsel des alten Unix ist.
Antwort2
hostname
Wenn Ihre Anwendung die Ausgabe oder Datei nicht direkt liest /etc/hostname
, können Sie immer wie unten beschrieben einen Alias für Ihren Computer erstellen.
#
# /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
oder Sie können versuchen, eine Chroot mit einem anderen Hostnamen zu erstellen, wieHier
Antwort3
Ich nehme an, Sie haben den Quellcode des betreffenden Programms nicht. Das Lesen des Hostnamens einer Maschine erfolgt über einen Systemaufruf.gethostname(), die ohne Zugriff auf den Quellcode des Programms nur schwer zu umgehen wären.
Sie sollten dann eine virtuelle Lösung verwenden, um das Programm auszuführen. Container, Docker und VMs verfügen über einen ausreichenden Grad an Isolation, sodass Sie sie in den erforderlichen Wert umbenennen können, ohne Ihren Hostcomputer zu beeinträchtigen.Ein Containerist eine sehr leichtgewichtige Lösung, die Ihre Host-Ressourcen nur geringfügig beansprucht.