如何從頭開始填充根文件系統?
我的情況是這樣的:我有一個新編譯的核心,為新平台編譯的所有應用程序和庫,我知道如何使用我選擇的引導載入程序進行引導,但我沒有根文件系統。
我想知道是否有關於如何為給定的 linux 核心填充新的根文件系統的官方或經過充分測試的指南,linux 核心真正需要哪些庫以及執行 linux 核心所需的所有花里胡哨和一個簡約的 linux 盒子。
我認為顯而易見的一個是 C 庫,無論如何我都需要 ac 庫,但我真的不知道我是否可以只使用一個 C 庫 + 所有我喜歡的額外程序和庫,或者核心需要一些東西否則,即使就配置文件而言,我也沒有真正找到關於 linux 核心期望在根文件系統上找到哪些文件的明確資訊。
我發現的所有內容都是關於想要與 linux 兼容的文件系統的目錄結構,它基本上說你應該擁有
/lib
、/usr
和/bin
更多目錄,但實際上對於創建新文件系統並沒有什麼實質意義。附言
這個問題與如何創建文件系統、如何引導它或其他任何事情**無關;**我只想知道完成核心+文件系統對需要哪些文件,這樣我就可以啟動一個新的 linux 機器。
Linux 核心並不在意。引導載入程序告訴核心將根文件系統掛載到哪裡——通常是初始 ramdisk 映像(initrd),但它也可以是實際的根文件系統——並且核心將從
/sbin/init
(/init
在 initramfs 上)啟動 init 程序,除非另有說明。甚至核心文件系統的位置——
/proc
,/sys
,/dev
if udev 等等——基本上都由使用者空間來決定。Linux Standards Base項目在各種 Linux 發行版中對這些進行了標準化。(嗯,或多或少。在設備命名等方面仍有一些小差異,還有關於合併
/usr/bin
和/bin
合併/usr/lib
的討論/lib
)。它的一個版本被接受為 ISO 標準 ISO/IEC 23360。截至 2016 年 10 月,LSB 的目前版本是LSB 5。Linux 核心開發人員非常努力地在使用者空間界面中保持向後兼容。這就是為什麼 2.6 版資訊非常適用於 4.4 版的原因。幾乎只有在引入新的設施和介面時,新版本才會與舊版本不同,您需要找到它們的文件。
您提到您已經編譯了一些庫和應用程序。如果是這樣,您使用的編譯時設置(檢查
configure
設置--prefix
等)以及這些庫和應用程序查找其配置文件的目錄(以及 C 庫、國際化等的時區文件)決定了您的目錄結構絕對需要。Linux 從零開始!是一個社區,它開發有關如何從頭開始編譯和建構完整的 Linux 發行版的書籍。它並不完全是最小的——你可以在某些情況下省略某些包,剝離其他包,等等——但一切都得到了解釋。
Rob Landley以記錄 Linux 核心內容而聞名。他對 initramfs 的介紹、如何使用 initramfs以及為 initramfs 程式,如果您想像許多嵌入式設備一樣,製作一個直接從 initramfs 執行的最小系統,那麼這些都是非常有趣的。
至於
systemctl
一般的 systemd,我會把你指向它的首頁,祝你好運。我自己正在尋找避免它的方法,並改用更健壯的 init 系統,這些系統仍然承認Unix 哲學,而不是一時興起而聚集成一團糟。(根據我的經驗,前者在長期內保持功能性和可維護性,而後者雖然由於聚集的新功能和外部修飾而經常受到最終使用者的喜愛,但從長遠來看,這會使系統和系統管理員變得脆弱和破碎。您的經驗和意見可能會有所不同;我只是在描述我的。)當我開發一個用於評估 Linux 集群節點的簡單基準測試 USB 記憶棒時,我檢查了您可以安裝的最小 Debian 和 CentOS 系統,以了解 OP 要求的詳細資訊(除了我不是在尋找最小系統,而是在尋找小型輕量級系統可以執行與在最終集群本身上執行的相同二進製文件的系統;即,包括基本服務和庫)。今天,我推薦看看Devuan,因為它支持多個 init 系統。在虛擬機中試驗這些應該是非常有用的。
實踐規則凌駕於理論或標準之上。沒有強制執行的標準,或者真的沒有任何標準;甚至 LSB 和 ISO/IEC 23360 更像是成功互操作性的指南。從 Linux 核心原始碼中提取的Linux 核心文件確實描述了核心期望,但如前所述,影響文件系統樹的非常非常少。甚至那些往往是引導時或編譯時可配置的。