RHEL 7.2 では、systemd
が起動し、ホストのホスト名を決定します。/etc/hostname
が使用不可 (つまり、削除されている)/etc/machine-info
かつ が使用不可で、カーネルがその情報で構成されていない場合 (つまり、sysctl
の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 イメージ内で実行されています。
- それは 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