在 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