Woher bestimmt systemd den vorübergehenden Hostnamen?

Woher bestimmt systemd den vorübergehenden Hostnamen?

In RHEL 7.2 systemdwird gestartet und der Hostname des Hosts bestimmt. Wenn /etc/hostnamenicht verfügbar (d. h. entfernt) und /etc/machine-infonicht verfügbar ist und der Kernel nicht mit dieser Information konfiguriert ist (d. h. sysctl's kernel.hostname), systemdwird dem Host ein „vorübergehender“ Hostname zugewiesen. Die Frage ist: Woher wird dies bestimmt?

Der Host hatte ursprünglich diesen Namen. Dann habe ich den Host geklont (es ist eine VM) und alle Verweise auf diesen Namen gelöscht. Aber dann wird er während des Bootvorgangs, ganz am Anfang, so eingestellt.

Beim Booten rescuemodesehe ich, dass der Hostname sehr früh festgelegt wird:

[    0.456076] systemd[1]: systemd 208 running in system mode. (+PAM +LIBWRAP +AUDIT +SELINUX +IMA +SYSVINIT +LIBCRYPTSETUP +GCRYPT +AC
L +XZ)
[    0.456664] systemd[1]: Detected virtualization 'kvm'.
[    0.456955] systemd[1]: Running in initial RAM disk.
[    0.458496] systemd[1]: Set hostname to <badhostname.example.com>.
[    0.475394] systemd[1]: Expecting device dev-mapper-vgroot\x2dlvroot.device...

In der Eingabeaufforderung wird es als „vorübergehender“ Hostname festgelegt:

# hostnamectl status
Transient hostname: badhostname.mydomain.com
...

Es kann sein, dass dies nicht der Fall ist systemd: Ich habe dieses Problem sogar bei Verwendung init=/bin/bash, aber systemd wird innerhalb des Initrd-Image ausgeführt.

  • Es ist nicht in Grub oder so eingestellt.
  • Es wird nicht durch DHCP festgelegt, da die Netzwerkverbindung beim Booten deaktiviert ist.
  • Es befindet sich nirgendwo im Dateisystem:

    # find / \( -path /sys -prune -o -path /proc -prune -o -path /run -prune \) -o -type f -exec grep -ilrF "${HOSTNAME}" {} +
    <some .git files>
    <history files of non-root user>
    

Irgendwie ermittelt der Kernel oder systemd den alten Hostnamen und verwendet ihn als Übergangswert, und ich bin völlig ratlos, wie das geht! . Ich habe eins ausgeführt, find ... -exec grepohne Ergebnisse außer /var/log/dmesg. Ich sage Ihnen, systemd hat meinen Host heimgesucht!

EDIT 2: Das einzige Mal, wenn ich das System nicht starte, ist das bereitgestellte Rettungs-Initramfs. Anscheinend birgt das generierte Initramfs schmutzige Geheimnisse!

Antwort1

Dank Don Crissti‘s Erkenntnissen und durch Ausschlussverfahren wird der Schluss gezogen, dass der Übeltäter das Initramfs-Image ist. Aus irgendeinem Grund dracutentscheidet sich das Image beim Erstellen, eine zwischengespeicherte Version des Hostnamens einzuschließen (!?!).

Der Wiederaufbau des initrd/initram fs ist abgedecktHieraber kurz gesagt (da Sie, lieber Leser, möglicherweise keinen Zugriff haben),

dracut -f -v

verwandte Informationen