`hostname` 的默认文件是什么?

Bob*_*bay 14 linux hostname

嘿!我目前正在从头开始开发一个非 lfs 系统,以busybox 作为明星。现在,我的登录名说:

(none) login:
Run Code Online (Sandbox Code Playgroud)

因此,我的主机名已损坏。hostname也给我(none)带来。

我遵循的指南告诉我将主机名扔到/etc/HOSTNAME. 我也试过了/etc/hostname。无论我做什么,都会hostname返回(none)- 除非我运行hostname <thename>hostname -F /etc/hostname. 现在很明显,我不希望每次有人新安装发行版时都这样做 - 那么真正的默认文件是什么,如果不是/etc/hostname呢?

提前致谢!

Jde*_*eBP 36

hostname常见工具集中的命令(包括 BusyBox)在查询主机名时不会回退到文件。它们仅将内核返回给它们的内容报告为系统调用中的主机名,内核将其初始化为诸如“(none)”之类的字符串,可通过重新配置和重建内核来更改。(在 systemd 术语中,这是动态主机名,又名瞬态主机名;Linux 内核实际报告的主机名。)没有“默认文件”。

通常有一个单次服务在系统启动时运行,相当早,它会查看这些不同的文件,提取主机名,并用它初始化内核主机名。(在 systemd 术语中,此配置字符串是静态主机名。)例如:

  • 在我的工具集中,我提供了一个“早期”hostname服务,它set-dynamic-hostname在本地文件系统挂载之后和用户登录服务之前运行工具集的命令。工作分为(仅)在进行配置更改时完成的工作,以及在(每个)系统引导程序时完成的工作:
    • 外部配置导入机制读取/etc/hostname/etc/HOSTNAME以及其他来源(因为不同的操作系统以不同的方式配置它),并将rc.conf.
    • 外部配置导入机制使用 amalgamatedrc.conf来配置此服务的hostname环境变量。
    • 当服务运行时,set-dynamic-hostname不需要关心所有配置源的可能性,只需从为服务配置的环境中获取环境变量,并从中设置动态主机名。
  • 在 systemd 中,这是一个初始化操作,它被硬连接到systemd自己的代码中,甚至在服务管理启动之前运行。该systemd程序本身去并读取/etc/hostname(和也/proc/cmdline,但不能 /etc/HOSTNAME 也不 /etc/default/hostname 也不是 /etc/sysconfig/network),并传递给内核。
  • 在 Void Linux 中有一个启动 shell 脚本,它从 (only) 读取静态主机名/etc/hostname,回退到从 读取的 shell 变量rc.conf,并根据其值设置动态主机名。

如果您要“从头开始”构建一个系统,那么您必须创建一个具有同等功能的服务。用于从文件设置主机名的 BusyBox 和 ToyBox 工具是hostname -F "${filename}",因此您必须创建一个服务来针对/etc/hostname或某个此类文件运行该命令。

BusyBox 带有 runit 的服务管理工具集,一个简单的 runit 服务应该是这样的:

#!/bin/sh -e
执行 2>&1
exec 主机名 -F /etc/hostname

进一步阅读


Phi*_*ing 6

所以你是从头开始构建这个系统,你问主机名是在哪里配置的?

简单的答案是它不是。当前主机名存储在内核中,与大多数内核一样,默认情况下它不读取任何文件。

系统启动中的某些内容必须读取配置文件(您选择的)并设置内核的主机名。这必须在每次启动时发生。


pin*_*ime 5

您可以make menuconfig在构建内核时更改它。