Wodurch wird der Linux-Hostname bestimmt?

Wodurch wird der Linux-Hostname bestimmt?

In den wenigen Jahren, in denen ich Linux als mein Hauptsystem verwendet habe, insbesondere Fedora, war mein Hostname immer nur auf „localhost“ eingestellt, mit Ausnahme der Fälle, in denen ich mich mit einigen Netzwerken verbinde und er zu meiner IP wird. Heute habe ich das folgende Verhalten festgestellt, das ich allerdings nicht verstehe.

Ich habe eine Ubuntu-Installation auf einer anderen Partition meines Laptops eingerichtet und während der Ubuntu-Installation einen Computernamen/Hostnamen festgelegt. Als ich jedoch wieder Fedora neu startete, hatte Fedora meinen Hostnamen auf den Namen aktualisiert, den ich bei der Ubuntu-Installation festgelegt hatte.

Ich dachte immer, der Hostname sei konfiguriert und auf der Partition der Distributionsinstallation gespeichert, und tatsächlich lautet der Inhalt von /etc/hostname auf Fedora immer noch „localhost.localdomain“, aber wenn man den hostnameBefehl ausführt, wird der neue Hostname angezeigt. Beide Installationen teilen sich eine EFI-Bootpartition, sind aber ansonsten diskret. Ich frage mich, woher und warum die Fedora-Installation den neuen Hostnamen liest?

Antwort1

Das hostnameProgramm führt einen uname-Systemaufruf aus, wie aus der Ausführung hervorgeht:

strace hostname
...

e="Linux", nodename="my.hostname.com", ...}) = 0 ... Auf der Manpage des uname-Syscalls heißt es, dass der Syscall die folgende Struktur vom Kernel abruft:

  struct utsname {
               char sysname[];    /* Operating system name (e. */
               char nodename[];   /* Name within "some implementation-defined
                                     network" */
               char release[ystem release (e.g., "2.6.28") */
               char version[];    /* Operating system version */
               char machine[];    /* Hardware identifier */
           #ifdef _GNU_SOURCE
               char domainname[]; /* NIS or YP domain name */
           #endif
           };

Der Domänenname stammt also vom NISystem, wenn wir dem Kommentar Glauben schenken. Es ist also mehr als wahrscheinlich, dass der YP-Dienst auf Ihrem Nhat Ihnen den Namen zurückgibt, der vom Ubuntu-Betriebssystem festgelegt wurde.

Antwort2

Es gibt zwei unabhängige(!) Konzepte für einen Hostnamen auf einem Linux-System.

Was auch immer der Kernel als lokalen Hostnamen betrachtet (wie es von den Systemaufrufen gethostname/uname und sethostname gehandhabt wird), ist unabhängig von jeglicher Netzwerkkonnektivität – diese Mechanismen würden auch dann bestehen, wenn Sie einen Kernel ohne TCP/IP-Netzwerkfähigkeit erstellen würden.

Es gibt einen oder mehrere Hostnamen, die tatsächlich mit TCP/IP-Adressen (oder anderen Netzwerkstapeln – nicht alle Netzwerke der Welt basieren auf IP!) verbunden sind, die der Host hat, und diese werden im Benutzerbereich von den Resolver-Bibliotheksfunktionen (Teil von libc) verarbeitet, die einen solchen Namen bestimmen, indem sie Quellen (lokale Datei /etc/hosts, DNS, NIS …) entsprechend den Regeln interpretieren, die Sie ihnen in den entsprechenden Konfigurationsdateien (/etc/nsswitch.conf, /etc/host.conf usw.) geben.

Antwort3

Wahrscheinlich hat sich Ubuntu während der Installation über Ihren Heimrouter mit dem Internet verbunden. Dazu hat es seinen Hostnamen an den Router gemeldet und eine temporäre lokale IP erhalten.

Wenn Sie jetzt Fedora neu starten, wird es sich mit demselben Router verbinden, um seine IP-Adresse zu erhalten, aber die alte, für Ubuntu erstellte Lease ist immer noch gültig. Da es sich um dieselbe Maschine mit derselben Netzwerkkarte und derselben Hardware-MAC-Adresse handelt, wird dieselbe Lease wiederverwendet.

Ich vermute, dass der Router den Hostnamen mitsendet, unter dem die IP-Lease registriert wurde, und Fedora diesen aufnimmt.

Leider habe ich keine Beweise oder Quellen, die meine Antwort stützen. Ich kann nur aus eigener Erfahrung sprechen, wenn ich Ubuntu im Dual-Boot-Modus mit Windows installiere. Damals weigerte sich Ubuntu, während der Installation denselben Hostnamen festzulegen, den ich in Windows verwendet hatte, weil es behauptete, der Name sei bereits im Netzwerk vorhanden. Wahrscheinlich passiert hier etwas Ähnliches.

Um zu überprüfen, ob meine Vermutung auch auf Ihre Situation zutrifft, versuchen Sie, Ihre IP-Lease in der Konfigurationsoberfläche Ihres Routers zu widerrufen und dann Fedora neu zu starten. Wenn es dann nicht mehr den Hostnamen von Ubuntu annimmt, sollte ich Recht haben.

verwandte Informationen