systemd 從哪裡決定臨時主機名稱?

systemd 從哪裡決定臨時主機名稱?

在 RHEL 7.2 中,systemd啟動並決定主機的主機名稱。如果/etc/hostname不可用(即,刪除),且不/etc/machine-info可用,且核心未配置該資訊(即,sysctl's kernel.hostname),systemd則為主機指派「臨時」主機名稱。問題是:從哪裡決定這一點?

主機最初是這樣命名的。然後,我克隆了主機(它是一個虛擬機器)並擦除了對該名稱的所有參考。但在啟動過程中,很早就,它就這樣設定了。

如果我啟動,rescuemode我可以看到它很早就設定了主機名稱:

[    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...

在命令提示字元下,它被設定為“臨時”主機名稱:

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

可能不是systemd:我甚至在使用時遇到這個問題init=/bin/bash,但 systemd 正在 initrd 映像中運行。

  • 它沒有在 grub 或其他任何東西中設定。
  • 它不是由 DHCP 設定的,因為網路在啟動時被禁用。
  • 它不在檔案系統中的任何位置:

    # 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>
    

不知何故,內核或 systemd 正在確定舊主機名並將其用作瞬態,而我完全不知道如何! 。我做了一個find ... -exec grep除了 之外沒有任何結果/var/log/dmesg。我告訴你,systemd 困擾我的主機!

編輯2:唯一一次我沒有得到它是如果我啟動到提供的救援initramfs。顯然,生成的 initramfs 包含骯髒的秘密!

答案1

感謝 Don Crissti 的見解並通過排除過程,得出的結論是罪魁禍首是 initramfs 映像。不知何故,dracut當它建立映像時,它決定包含主機名稱的快取版本(!?!)。

涵蓋了重建 initrd/initram fs這裡但簡而言之(因為你,親愛的讀者可能沒有訪問權限),

dracut -f -v

相關內容