Fedora 最小化目標
第二階段提案
目標導向: Adam Samalik (asamalik)
問題
雖然 Fedora 非常適合傳統的實體/虛擬工作站和伺服器,但對於傳統安裝以外的使用情況,Fedora 常常被忽略。
某些現代部署類型 (例如物聯網和容器) 對規模相當敏感。 對於物聯網而言,通常是緩慢的資料連線 (只用於更新/管理),而對於雲端和容器而言,則是龐大的規模。
一個具體的例子是 Systemd - 雖然它非常有用 (每個人都喜歡 Systemd),而且一直存在於實體系統中,但在容器中卻很少需要它。 因此,對於套件來說,需要 Systemd 只是為了_systemd-sysusers_來建立使用者並不是問題。 但是,在容器中,這意味著所占用的體積大小都會大幅增加。
除此之外,基本上所有類型的部署都能從縮小規模中獲益,因為安裝的足跡與攻擊面和相關的 CVE 有直接關係。
產物
Fedora 是一個很受歡迎的平台,因為它的生態系既尖端又針對現代部署 (例如物聯網和容器) 做了很好的最佳化。 這使得許多人使用 Fedora,而不是直接從上游專案建立和組裝自己的藝術品。 這也減輕了開放原始碼開發者的壓力,因為使用者會要求他們的特定安全和其他問題能快速修正。
So:
-
開放原始碼開發人員可直接專注於功能開發
-
系統管理員可以輕鬆使用預先編譯好的二進制檔案,這些二進制檔案也會定期更新
-
Fedora 的貢獻者 (廠商和個人) 可以在 Fedora 社群中合作,共同探索和開發開放原始碼解決方案,以解決未來的問題
輸出
Fedora 定義了特定的使用個案。 然後,社群會將開發與維護、最佳化 (如: 最小化) 與測試 (如: CI 與 gating) 的重點放在這些使用個案上。 這些使用個案可根據社群利益,以透明的方式排定基礎架構資源的優先順序。
Feedback Pipeline 會主動監控每個使用個案,並記錄其大小及執行所需的依賴性。 資料歷史會被保留並顯示出來,以查看隨時間的變化。 此外,為了讓事情隨著時間的推移保持在較小的範圍內,Feedback Pipeline 也會自動偵測大小的增加,並可能自動開啟 Bugzilla bug,以透明的方式追蹤/修正/證明這些增加。
積極專注於最小化,意味著我們的維護人員只需付出相同或更少的努力,就能產生體積大小最佳化的內容。 工具、服務和資料可幫助他們輕易地就相依性做出正確的決策,並隨著時間的推移而保持較小的規模。
動作
找出相關的使用個案,並允許社群 (不只是最小化團隊) 定義他們自己的使用個案。 我們認為用例是安裝在特定情境中、有特定目的的套件集 - 例如 Apache HTTP Server Container。 至少為以下項目定義用例:
-
httpd(網頁伺服器)
-
nginx(網頁伺服器)
-
MariaDB(資料庫)
-
PostgreSQL
-
Fedora 物聯網
-
Python 3
此外,請考慮研究容器原生的使用案例,例如:
-
使用GO開發的容器應用程式
-
使用Rust開發的容器應用程式
-
Quarkus(使用JAVA進行開發的容器應用程式)
透過在科技活動、網路論壇和其他可行的場合與人們交談,收集特定的使用案例。
擴展監控服務(反饋管道),其中:
-
可視化每個用例的依賴關係和總大小
-
監控體積大小會隨時間的變化
-
自動偵測體積變大的變更
-
通知維護者有關意外的大小增加
除了功能之外,我們還需要:
-
撰寫測試,大幅簡化貢獻
-
針對服務進行效能最佳化,以達到良好的擴充效果
-
探索使用 CI 和 Rawhide Gating
能夠看到正在發生什麼是實施任何變革的先決條件。 看到所有相關的機會有助於我們專注於最有影響力的機會,而透明的追蹤有助於我們證明工作的有用性,並進一步專注於最有影響力的活動。
透過最佳化 RPM 相依性、功能、軟體架構和其他因素,最小化使用個案的安裝大小。 具體而言,請尋找:
-
不必要的 RPM 相依性(雖然可能不會很多)
-
不同套件所需的相同功能有多種實作 - 嘗試讓它們使用相同的實作
-
特定情境的需求 - 例如在傳統部署中需要 Systemd 並無問題,但在容器中則意味著大幅增加所占用的體積大小。 在這些情況下,利用弱依賴性 (可能需要變更程式碼)。
-
依賴於大型的東西,卻使用一小部分的功能 - 例如需要整個 Perl 堆疊來執行一個腳本 - 這樣的腳本可以改寫成 Python,而 Python 無處不在,主要是因為 DNF的關係
-
與上游開發人員**就包裝與架構的較大變更進行合作。 例如 Systemd 和分割 systemd-sysuser 套件。
-
實施流程和政策變更反映更大、更普遍的變更。 同樣地,在容器中使用 Systemd 或在容器中建立使用者的一般問題就是很好的例子。
以部落格文章、影片和會議講座的形式,為 Fedora 社群 提供指導。 儘管我們已經制定了相關的指導方針和政策,但宣傳依舊永遠是非常重要的。
第一階段成果
請參閱 狀態頁面 以取得詳細資訊和歷史性的每週更新。 摘要如下。
-
更好的了解** - 是的,我們現在對問題有了更好的了解,也對接下來的步驟有了更好、更明確的想法。
Feedback Pipeline - 監控用例大小和依賴關係的服務。 包括表格與互動式相依性圖表的各種檢視。
Systemd 與容器 - 我們遇到 Systemd vs. 容器的問題,尤其是需要它的套件,只是為了使用 systemd-sysuser 在容器中建立使用者。 我們正與上游合作分拆套件。 考慮過,但尚未提出更廣泛的相關政策。
-
郵件列表討論區:https://lists.fedoraproject.org/archives/list/devel@lists.fedoraproject.org/thread/6YX6CEFBPU3XVZZEHTN6CBH2F7JDF35N/#EJD4BNBE52JTEOPKAT6HFOO4HVUPBTCH
政策思考:
-
A - 如果只需要 systemd 來啟動服務,套件應該只「推薦」systemd。 這將允許容器在沒有 systemd 的情況下安裝套件。
-
B - 如果程式只是使用 systemd 的函式庫,則只需要 systemd-libs。 例如:libusb
-
C - 如果套件想要使用 systemd-sysusers 來建立使用者/群組,只需要 systemd-sysusers。 (注意: 這個子套件尚未實作)
initial-setup - 如果建立的映像沒有使用者,就需要在啟動時加入使用者。 它拉入 anaconda-tui 及 anaconda-core。 這兩個套件之後開始拉入許多其他相當大的套件。這是針對物聯網映像檔以及其他映像檔。 我們目前沒有建議,但正在努力中。
-
使用 pcre2 而非 pcre** - 盡量減少的努力是試著將事情縮小到只有一個 pcre,那就是 pcre2。 只剩一個 pcre,那就是 pcre2。
Polkit 和 mozjs60 - 讓我們用一個可怕的比喻來解釋這個問題!Polkit 是一個可愛的人 (.5M),他按下您家的門鈴,並說他們會幫您家洗窗戶。 在您同意之後,他們拿出他們的大象 (mozjs60 30M) 並用大象噴灑您的窗戶。Polkit 拉來 mozjs60,這是一個相當大的包裹。所以,我們也在嘗試釐清這個問題。
Want to help? Learn how to contribute to Fedora Docs ›