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/bashsystemdはinitrdイメージ内で実行されていました。

  • それはグラブや他のものに設定されていません。
  • 起動時にネットワークが無効になるため、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

ドン・クリスティの洞察力と除去の過程で、犯人はinitramfsのイメージであるという結論を得ました。どういうわけかdracutイメージをビルドするときに、ホスト名(!?!)のキャッシュされたバージョンを含めることにします。

initrd/initram fs 再構築を扱います。ここしかし、簡単に言うと(親愛なる読者の皆さんにアクセス権がない可能性があるため)、次のようにしてください。

dracut -f -v

関連情報