在 RHEL 7.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...
Run Code Online (Sandbox Code Playgroud)
在命令提示符下,它被设置为“临时”主机名:
# hostnamectl status
Transient hostname: badhostname.mydomain.com
...
Run Code Online (Sandbox Code Playgroud)
可能不是这样systemd:我什至在使用时遇到这个问题init=/bin/bash,但 systemd 正在 initrd 映像中运行。
它不在文件系统中的任何地方:
# 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>
Run Code Online (Sandbox Code Playgroud)不知何故,内核或 systemd 正在确定旧主机名并将其用作瞬态,我完全不知道如何!. 我做了一个find ... -exec grep除了/var/log/dmesg. 我告诉你,systemd 一直困扰着我的主机!
编辑 2:唯一一次我没有得到它是如果我启动到提供的救援 initramfs。显然,生成的 initramfs 包含肮脏的秘密!
感谢 Don Crissti 的洞察力和通过消除过程,得出的结论是罪魁祸首是 initramfs 映像。不知何故,dracut当它构建图像时决定包含主机名的缓存版本(!?!)。
重建 initrd/initram fs 已在此处介绍,但简而言之(因为您,亲爱的读者可能无法访问),请执行
dracut -f -v
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4513 次 |
| 最近记录: |