systemd 在启动时忽略 /etc/hostname

systemd 在启动时忽略 /etc/hostname

我们的团队使用适用于嵌入式设备的定制准系统 Linux 发行版,它使用 systemd。

该系统过去依赖 SystemV 初始化脚本,直到内容迁移到 systemd(包括网络服务)。

我们注意到,在重新引导或启动时,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 指出的那样,systemd 正在被 initrd 解雇,或者更确切地说 initramfs 和 /etc/ 尚未安装。

这就是我们案例中发生的情况。

相关内容