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...
コマンドプロンプトでは、「一時的な」ホスト名として設定されています。
# hostnamectl status
Transient hostname: badhostname.mydomain.com
...
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>
どういうわけか、カーネルまたはsystemdが古いホスト名を決定し、それを一時的なものとして使用しており、その方法について完全に途方に暮れています! 。 find ... -exec grep
を実行しましたが、/var/log/dmesg
以外の結果はありませんでした。 systemdが私のホストを悩ませています!
編集2:提供されたレスキューinitramfsで起動した場合にのみ、私はそれを取得できません。どうやら、生成されたinitramfsは汚い秘密を保持しています!
Don Crisstiの洞察と消去のプロセスのおかげで、犯人はinitramfsイメージであると結論付けられました。何とかdracut
がイメージをビルドするときに、キャッシュされたバージョンのホスト名(!?!)を含めることにしました。
Initrd/initram fsの再構築はカバーされています here ですが、要するに(親愛なる読者がアクセスできない可能性があるため)、
dracut -f -v