在上一個主要版本發布兩年後,GNU Shepherd服務管理器0.9 版(以前稱為 dmd)正式向公眾發布。它由 GNU Guix 發行版的開發者開發,旨在取代系統依賴性感知的 SysV-init 初始化程式。
Shepherd以服務的形式非同步提供使用者空間功能。在 Shepherd 中,這些服務是通用函數和物件資料類型,它們被匯出供 Shepherd 以定義的方式擴展基礎作業系統。與 systemd 不同,使用者空間監控進程以該使用者的身分運作。
關於牧羊人
Shepherd 使用者空間初始化模型的核心是擴展的概念,這是一種可組合性形式,其中服務被設計成可以與其他服務重疊,並根據需要添加更複雜或更專門的行為。這體現了許多現代化初始化系統中基於實例化的依賴關係,使系統模組化,同時也允許服務以任意方式與其他服務進行互動。
Shepherd還提供所謂的虛擬服務,該服務能夠透過一類相關的服務物件進行動態交付,例如所有為系統建立郵件傳輸代理程式 (MTA) 實例的服務物件。
由 Shepherd 守護進程管理的系統可以將其用戶空間表示為有向無環圖,其中“系統服務”(負責早期引導和啟動階段)作為根,所有後續初始化的服務作為系統服務功能的擴展,直接或通過其他服務傳遞。
由於 GNU Shepherd 是用 Guile Scheme 編寫和配置的,因此它被設計成可以由系統管理員進行高度編程,但它也可以用來管理每個使用者的非特權守護程序和服務的設定檔。
它的服務和配置統一儲存為物件導向的 Scheme 程式碼,雖然基本的 Guix 系統提供了一組核心服務,但可以靈活地聲明任意新服務,並且透過 Guile 的物件系統 GOOPS,使用者可以根據需要重新定義現有服務,只需在實例化時要求 Shepherd 以特定方式動態重寫服務即可。
GNU Shepherd 最初是為與 GNU Hurd 一起工作而設計的,後來被 Guix 系統採用。
GNU Shepherd 0.9 的主要新特性
此新版本重點介紹了臨時(瞬態)服務的概念實現,這些服務在進程終止或呼叫「停止」方法後會自動斷開連接,這對於終止後無法重新啟動的合成服務可能是必需的。
另一個值得注意的變更是,對於沒有「#:log-file」參數的服務,輸出會傳送到 syslog;而對於有「#:log-file」參數的服務,日誌會寫入一個單獨的文件,該檔案指示非特權 Shepherd 進程中日誌的時間,並儲存在 $XDG_DATA_DIR 目錄中。
此外,值得注意的是,添加了“make-inetd-constructor”程序來創建類似於inetd的服務,並添加了“make-systemd-constructor”程序來創建在網絡活動中激活的服務(樣式systemd socket激活)。
新版本的其他顯著變化包括:
- 添加了啟動後台服務的過程:
- 在“make-forkexec-constructor”過程中添加了“:supplementary-groups”、“#:create-session”和“#:resource-limits”參數。
- 等待 PID 文件時保證無鎖操作。
- 刪除了對使用 Guile 2.0 進行編譯的支持。 修復了使用 Guile 版本 3.0.5-3.0.7 時的問題。
- 現在需要使用 Fibers library 1.1.0 或更高版本。
- 改進的文檔和示例
- 牧羊犬不能再用 Guile 2.0 建造
- 修復 Guile 3.0 編譯器錯誤。[5-7]
- 更新的翻譯
最後,如果您有興趣了解更多或想要獲取此新版本,您可以點擊以下連結查看詳細資訊、文件和下載。