GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Was ist die Standarddatei für „hostname“?

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, der set-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 amalgamierten rc.conf .
    • Der externe Konfigurationsimportmechanismus verwendet den zusammengeführten rc.conf um den hostname 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.
  • 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. Die systemd 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 von rc.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.


Linux
  1. Linux – Was ist die Standarddatei für „hostname“?

  2. Was sind die standardmäßigen GCC-Include-Verzeichnisse?

  3. Was ist das Standard-Root-Passwort für MySQL 5.7

  4. Was ist das Standardpasswort des Bildschirms?

  5. Wie finde ich den Standard-Dateimanager?

Was ist die aktuelle Linux-Kernelquelle?

Was ist das Äquivalent zum Linux-Dateibefehl für Windows?

Was ist die Standardreihenfolge der Linux-Sortierung?

Was ist der Sinn des Befehls hostnamectl?

Wie lauten der Standardbenutzername und das Standardkennwort für eine Ubuntu Live-CD?

Was ist die Standard-Shell von Busybox?