在RHEL7.2中,systemd启动并确定主机的主机名。如果/etc/hostname不可用(即删除),并且/etc/machine-info不可用,并且内核没有配置该信息(即sysctl's kernel.hostname),那么systemd会为主机指定一个“临时”主机名。问题是:它从哪里决定这一点?
主机最初是这样命名的。然后我克隆了主机(它是一个VM)并删除了对该名称的所有引用。但是在启动过程中,很早,它就会这样设置。
如果我引导到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映像中运行。
不知何故,内核或系统d正在确定旧主机名,并将其用作临时主机名,而我完全不知道如何!我做了一个find ... -exec grep,除了/var/log/dmesg,没有任何结果。我告诉你,系统一直困扰着我的主人!
编辑2:唯一一次我没有得到它是如果我启动到提供的救援initramfs。显然,生成的initramfs包含着肮脏的秘密!
发布于 2016-05-20 22:38:02
得益于唐·克里斯蒂的洞察力,并通过消除的过程,我们得出结论,罪魁祸首是最初的形象。在构建映像时,dracut决定包含主机名的缓存版本(!?!)。
重新构建initrd/initram fs包含这里,但简而言之(因为亲爱的读者可能无法访问),请执行
dracut -f -vhttps://unix.stackexchange.com/questions/284544
复制相似问题