Gibt es eine Möglichkeit, einer Anwendung einen bestimmten Hostnamen zuzuweisen, der sich vom Hostnamen des Computers unter Linux unterscheidet?

3

Gibt es eine Möglichkeit, einer Anwendung einen bestimmten Hostnamen zuzuweisen, der sich vom Hostnamen des Computers unter Linux unterscheidet? Grundsätzlich habe ich eine Software, die erwartet, dass der lokale Rechner einen bestimmten Hostnamen hat, der sich von meinem Rechner-Hostnamen unterscheidet. Anstatt den Hostnamen des Computers global zu ändern, möchte ich einen Mechanismus, mit dem ich das Programm entweder in einer Umgebung mit dem angegebenen Hostnamen oder direkt mit dem angegebenen Hostnamen ausführen kann.

wyer33
quelle
Wie wird der Hostname im Programm verwendet? Für DNS-Zwecke?
Heavyd

Antworten:

3

Es ist mit root-Rechten möglich. Verwenden Sie unshare --utsdiese Option , um einen neuen UTS 1- Namespace zu erstellen , legen Sie den gewünschten Hostnamen darin fest, kehren Sie dann suzu Ihrem Konto zurück und führen Sie die App aus. Zum 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 ihren Erstellungsprozess beschränkt, sodass der neue Hostname nur für Programme sichtbar ist, die Sie im Fenster "unshare" ausführen.

Hinweis: Vergessen Sie nicht, den neuen Hostnamen tatsächlich zu /etc/hosts127.0.0.1 hinzuzufügen , da viele Programme erwarten / davon abhängig sind, dass er aufgelöst werden kann.


1 Fragen Sie nicht, was "UTS" bedeutet. Das Beste, was ich weiß, ist, dass es ein Überbleibsel aus dem alten Unix ist.

Grawity
quelle
Wenn das Programm nur den Hostnamen auflösen muss, müssen Sie nur / etc / hosts ändern und keinen neuen Namespace erstellen. Dies ist etwas sicherer, da Sie Root-Rechte nur einmal benötigen, wenn Sie / etc / hosts bearbeiten, und nicht bei jedem Anwendungsstart.
Lie Ryan
0

Wenn Ihre Anwendung die Ausgabe von hostnameoder die /etc/hostnameDatei nicht direkt liest , können Sie jederzeit einen Alias ​​für Ihren Computer wie unten 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 wie hier zu erstellen

Ongun
quelle
0

Ich nehme an, Sie haben nicht den Quellcode des betreffenden Programms. Das Lesen des Hostnamens einer Maschine erfolgt durch einen sys-Aufruf, gethostname () , den man nur schwer umgehen kann, wenn man nicht auf den Quellcode des Programms zugreift .

Sie sollten dann eine virtuelle Lösung verwenden, um das Programm auszuführen. Container, Docker und VMs sind ausreichend isoliert, damit Sie sie in den erforderlichen Wert umbenennen können, ohne Ihren Hostcomputer zu gefährden. Ein Container ist eine sehr leichte Lösung, die nur sehr wenig von Ihren Host-Ressourcen beansprucht.

MariusMatutiae
quelle