Linux

hostname 的預設文件是什麼?

  • November 1, 2020

嘿嘿!我目前正在以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/主機名

進一步閱讀

引用自:https://unix.stackexchange.com/questions/613231