Der hostname
Befehle in gängigen Toolsets, einschließlich BusyBox, greifen nicht auf Dateien zurück, wenn sie den Hostnamen abfragen. Sie melden nur, was der Kernel ihnen als Hostnamen von einem Systemaufruf zurückgibt, den der Kernel mit einer Zeichenfolge wie "(none)" initialisiert. , änderbar durch Neukonfiguration und Neuerstellung des Kernels. (In der Systemd-Terminologie ist dies der dynamische Hostname , auch bekannt als vorübergehender Hostname; derjenige, der tatsächlich von Linux gemeldet wird, der Kernel.) Es gibt keinen "Standarddatei".
Normalerweise gibt es einen Single-Shot-Dienst, der ziemlich früh beim Systemstart ausgeführt wird, der diese verschiedenen Dateien durchsucht, den Hostnamen herauszieht und den Kernel-Hostnamen damit initialisiert. (In der Systemd-Terminologie ist diese Konfigurationszeichenfolge das statischer Hostname .)Zum Beispiel:
- In meinem Toolset stelle ich einen "frühen"
hostname
zur Verfügung Dienst, derset-dynamic-hostname
des Toolsets ausführt Befehl nach dem Mounten des lokalen Dateisystems und vor Benutzeranmeldediensten. Die Arbeit ist unterteilt in Dinge, die (nur) erledigt werden, wenn man eine Konfigurationsänderung vornimmt, und Dinge, die bei (jedem) System-Bootstrap erledigt werden:- Der externe Konfigurationsimportmechanismus liest
/etc/hostname
und/etc/HOSTNAME
, neben anderen Quellen (da verschiedene Betriebssysteme dies auf unterschiedliche Weise konfigurieren), und erstellt einen amalgamiertenrc.conf
. - Der externe Konfigurationsimportmechanismus verwendet den zusammengeführten
rc.conf
um denhostname
dieses Dienstes zu konfigurieren Umgebungsvariable. - Wenn der Dienst ausgeführt wird,
set-dynamic-hostname
muss sich nicht um alle Möglichkeiten der Konfigurationsquellen kümmern und nimmt einfach die Umgebungsvariable aus der für den Dienst konfigurierten Umgebung und setzt daraus den dynamischen Hostnamen.
- Der externe Konfigurationsimportmechanismus liest
- In systemd ist dies eine Initialisierungsaktion, die im Code von
systemd
fest verdrahtet ist selbst, das ausgeführt wird, bevor das Service-Management überhaupt gestartet wird. Diesystemd
Programm selbst geht und liest/etc/hostname
(und auch/proc/cmdline
, aber nicht/etc/HOSTNAME
noch/etc/default/hostname
noch/etc/sysconfig/network
) und übergibt das an den Kernel. - In Void Linux gibt es ein Start-Shell-Skript, das den statischen Hostnamen aus (nur)
/etc/hostname
liest , mit einem Fallback auf die Shell-Variable, die vonrc.conf
gelesen wird , und legt den dynamischen Hostnamen anhand seines Werts fest.
Wenn Sie ein System "von Grund auf" erstellen, müssen Sie einen Dienst erstellen, der das Äquivalent tut. Die BusyBox- und ToyBox-Tools zum Festlegen des Hostnamens aus einer Datei sind hostname -F "${filename}"
, also müssen Sie einen Dienst erstellen, der diesen Befehl für /etc/hostname
ausführt oder eine solche Datei.
BusyBox wird mit dem Dienstverwaltungs-Toolset von Runit geliefert, und ein einfacher Runit-Dienst wäre etwas in der Art von:
#!/bin/sh -e exec 2>&1 exec hostname -F /etc/hostname
Weiterführende Literatur
- Lennart Pöttering et al. (2016).
hostnamectl
. systemd Handbuchseiten. Freedesktop.org. - Jonathan de Boyne Pollard (2017). "
set-dynamic-hostname
". Handbuch für Benutzerbefehle . Nosh-Toolset. Software. - Jonathan de Boyne Pollard (2017). "
rc.conf
Zusammenschluss". nosh Guide . Software. - Jonathan de Boyne Pollard (2015). "externe Formate". Nosh-Leitfaden . Software.
- Rob Landley.
hostname
. Toybox-Befehlsliste . landley.net. - https://unix.stackexchange.com/a/12832/5132
Sie bauen dieses System also von Grund auf neu und fragen, wo der Hostname konfiguriert ist?
Die einfache Antwort ist, dass es nicht ist. Der aktuelle Hostname wird im Kernel gespeichert und wie die meisten Dinge im Kernel liest er standardmäßig keine Dateien.
Etwas in Ihrem Systemstart muss eine Konfigurationsdatei (Ihrer Wahl) lesen und den Hostnamen des Kernels festlegen. Dies muss bei jedem Start geschehen.
Sie können es von make menuconfig
ändern beim Erstellen des Kernels.