嘿!我目前正在从头开始开发一个非 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.rc.conf来配置此服务的hostname环境变量。set-dynamic-hostname不需要关心所有配置源的可能性,只需从为服务配置的环境中获取环境变量,并从中设置动态主机名。systemd自己的代码中,甚至在服务管理启动之前运行。该systemd程序本身去并读取/etc/hostname(和也/proc/cmdline,但不能 /etc/HOSTNAME 也不 /etc/default/hostname 也不是 /etc/sysconfig/network),并传递给内核。/etc/hostname,回退到从 读取的 shell 变量rc.conf,并根据其值设置动态主机名。如果您要“从头开始”构建一个系统,那么您必须创建一个具有同等功能的服务。用于从文件设置主机名的 BusyBox 和 ToyBox 工具是hostname -F "${filename}",因此您必须创建一个服务来针对/etc/hostname或某个此类文件运行该命令。
BusyBox 带有 runit 的服务管理工具集,一个简单的 runit 服务应该是这样的:
#!/bin/sh -e 执行 2>&1 exec 主机名 -F /etc/hostname
hostnamectl. systemd 手册页。Freedesktop.org。set-dynamic-hostname”。 用户命令手册。nosh 工具集。软件。rc.conf合并”。 小吃指南。软件。hostname. 玩具箱命令列表。兰利网。所以你是从头开始构建这个系统,你问主机名是在哪里配置的?
简单的答案是它不是。当前主机名存储在内核中,与大多数内核一样,默认情况下它不读取任何文件。
系统启动中的某些内容必须读取配置文件(您选择的)并设置内核的主机名。这必须在每次启动时发生。
| 归档时间: |
|
| 查看次数: |
2320 次 |
| 最近记录: |