Hallo! Ich arbeite derzeit an einem Nicht-LFS-System von Grund auf mit Busybox als Star. Jetzt sagt mein Login:
(none) login:
Daher ist mein Hostname kaputt. hostname bringt mir (none) auch.
Der Leitfaden, dem ich folgte, sagte mir, ich solle den Hostnamen an /etc/HOSTNAME übergeben . Ich habe es auch mit /etc/hostname versucht . Egal was ich tue, hostname gibt (none) zurück – es sei denn, ich führe hostname <thename> aus oder hostname -F /etc/hostname . Nun möchte ich natürlich nicht, dass dies jedes Mal geschieht, wenn jemand die Distribution neu installiert – was ist also die wirkliche Standarddatei, wenn nicht /etc/hostname ?
Vielen Dank im Voraus!
Akzeptierte Antwort:
Der hostname Befehle in gängigen Toolsets, einschließlich BusyBox, greifen nicht auf Dateien zurück, wenn sie den Hostnamen abfragen.
Sie berichten lediglich, was der Kernel ihnen als Hostnamen von einem Systemaufruf zurückgibt, den der Kernel mit einer Zeichenkette wie „ (none)“, änderbar durch Neukonfiguration und Neuerstellung des Kernels.
(In der Systemd-Terminologie ist dies der dynamische Hostname , auch bekannt als vorübergehender Hostname; derjenige, der eigentlich 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 der statische Hostname .)
Zum Beispiel:
- In meinem Toolset gebe ich einen „frühen“
hostnamean Dienst, der denset-dynamic-hostnamedes 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/hostnameund/etc/HOSTNAME, neben anderen Quellen (da verschiedene Betriebssysteme dies auf unterschiedliche Weise konfigurieren), und erstellt eine amalgamierterc.conf. - Der externe Konfigurationsimportmechanismus verwendet die zusammengeführte
rc.confum denhostnamedieses Dienstes zu konfigurieren Umgebungsvariable. - Wenn der Dienst läuft,
set-dynamic-hostnamemuss sich nicht um alle Möglichkeiten der Konfigurationsquelle kümmern und nimmt einfach die Umgebungsvariable aus der für den Dienst konfigurierten Umgebung und legt daraus den dynamischen Hostnamen fest.
- Der externe Konfigurationsimportmechanismus liest
- In systemd ist dies eine Initialisierungsaktion, die im Code von
systemdfest verdrahtet ist selbst, das ausgeführt wird, bevor das Service-Management überhaupt gestartet wird. DassystemdProgramm selbst geht und liest/etc/hostname(und auch/proc/cmdline, aber nicht/etc/HOSTNAMEnoch/etc/default/hostnamenoch/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/hostnameliest , mit einem Fallback auf die Shell-Variable, die ausrc.confgelesen wird , und legt den dynamischen Hostnamen anhand seines Werts fest.
Wenn Sie ein System „von Grund auf neu“ erstellen, müssen Sie einen Dienst erstellen, der das Gleiche 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.confVerschmelzung". Nosh-Leitfaden . Software. - Jonathan de Boyne Pollard (2015). „Fremde Formate“. Nosh-Leitfaden . Software.
- Rob Landley.
hostname. Toybox-Befehlsliste . landley.net. - https://unix.stackexchange.com/a/12832/5132