hostname
的預設文件是什麼?
嘿嘿!我目前正在以busybox為明星從頭開始研究非lfs系統。現在,我的登錄資訊說:
(none) login:
因此,我的主機名已損壞。
hostname
也帶給我(none)
。我跟隨的指南告訴我將主機名扔到
/etc/HOSTNAME
. 我也試過了/etc/hostname
。無論我做什麼,hostname
都會返回(none)
- 除非我執行hostname <thename>
或hostname -F /etc/hostname
. 現在顯然,我不希望每次有人新安裝發行版時都這樣做 - 那麼真正的預設文件是什麼,如果不是/etc/hostname
?提前致謝!
查詢主機名時,常用工具集中的
hostname
命令(包括 BusyBox)不會回退到文件。它們僅報告核心從系統呼叫返回給它們的主機名,核心將其初始化為諸如“(無)”之類的字元串,可通過重新配置和重建核心來更改。(在 systemd 術語中,這是動態主機名,也稱為瞬態主機名;Linux 核心實際報告的主機名。)沒有“預設文件”。通常有一個單次服務在系統啟動時執行,在相當早的時候,它會查看這些不同的文件,提取主機名,並用它初始化核心主機名。(在 systemd 術語中,此配置字元串是靜態主機名。)例如:
在我的工具集中,我提供了一個“早期”服務,它在本地文件系統掛載之後和使用者登錄服務之前
hostname
執行工具集的命令。set-dynamic-hostname
這項工作分為(僅)在進行配置更改時完成的工作,以及在(每個)系統引導時完成的工作:
- 外部配置導入機制讀取
/etc/hostname
和/etc/HOSTNAME
以及其他來源(因為不同的作業系統以不同的方式配置它),並合併rc.conf
.- 外部配置導入機制使用合併
rc.conf
配置此服務的hostname
環境變數。- 當服務執行時,
set-dynamic-hostname
不需要關心所有配置源的可能性,只需從為服務配置的環境中獲取環境變數,並從中設置動態主機名。在 systemd 中,這是一個硬連線到
systemd
自身程式碼中的初始化操作,甚至在服務管理啟動之前執行。systemd
程序本身會讀取/etc/hostname
(and also/proc/cmdline
,但not/etc/HOSTNAME
nor/etc/default/hostname
nor )並將其/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 執行主機名 -F /etc/主機名
進一步閱讀
- Lennart Poettering 等人。(2016 年)。
hostnamectl
. systemd 手冊頁。自由桌面.org。- 喬納森·德博因·波拉德 (2017)。“
set-dynamic-hostname
”。 使用者命令手冊。nosh 工具集。軟體。- 喬納森·德博因·波拉德 (2017)。“
rc.conf
合併”。 小吃指南。軟體。- 喬納森·德博因·波拉德 (2015)。“外部格式”。 小吃指南。軟體。
- 羅伯·蘭德利。
hostname
. Toybox 命令列表。蘭德利網。- https://unix.stackexchange.com/a/12832/5132