systemdは起動時に/ etc / hostnameを無視します。

systemdは起動時に/ etc / hostnameを無視します。

私たちのチームは、systemdを使用する組み込みデバイス用のカスタムベアボーンLinuxディストリビューションを使用しています。

システムは、エントリがsystemd(ネットワークサービスを含む)に移動されるまで、SystemV初期化スクリプトに依存していました。

再起動または起動時に、systemdは/etc/hostnameの静的ホスト名を無視し、代わりに一時ホスト名を「localhost」と同じに設定することを確認しました。

これが私たちがリリースしたときに見るものです。

[    2.662439] systemd[1]: No hostname configured.
[    2.667050] systemd[1]: Set hostname to <localhost>.

ただし、/ etc / hostnameは正しく設定されており、hostnamectlを使用して問題なくホスト名(永続または一時)を設定できます。

システムが再起動した場合にのみ、systemdは/ etc / hostnameを無視し、一時ホスト名をlocalhostに設定します。

~によるとsystemd/ホスト名文書、systemdは静的ホスト名を読み取る必要があります。

systemd(1) および関連ツールは、以下からホスト名を取得します。

  • カーネルコマンドラインパラメータsystemd.hostname =が有効なホスト名を指定した場合、systemd(1)はそれを使用して
    初期起動中にホスト名を設定します。 kernel-command-line(7) をご覧ください。
  • それ以外の場合は、前述のように/ etc / hostnameで指定された「静的」ホスト名が使用されます。
  • そうでない場合は、たとえば DHCP リース情報に基づいて一時ホスト名を実行時に設定できます。
    systemd-hostnamed.service(8) をご覧ください。 NetworkManagerと
    systemd-networkd.service(8)の両方を許可します。
    systemd-hostnamed.service(8) は静的ホスト名に高い優先順位を与えるため、
    一時ホスト名は静的ホスト名が構成されていない場合にのみ使用されます。
  • それ以外の場合は、コンパイル時に構成された代替ホスト名(「localhost」)が使用されます。

ただし、コンパイル時に設定されたホスト名(「localhost」)に置き換えられます。

なぜこれが起こるのか、どこを見なければならないのか知っていますか?

一時ホスト名は、他のすべてのサービスが動作する前に設定されます。

ありがとうございます。

答え1

私自身の質問に答えるために。 @Marcus-Müllerが指摘したように、initrdによってsystemdが実行されているか、むしろinitramfsと/ etc /がまだマウントされていません。

これが私たちの場合に起こったことです。

関連情報