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

相关内容