Fedora 最小化目標

第二階段提案

目標導向: Adam Samalik (asamalik)

問題

雖然 Fedora 非常適合傳統的實體/虛擬工作站和伺服器,但對於傳統安裝以外的使用情況,Fedora 常常被忽略。

某些現代部署類型 (例如物聯網和容器) 對規模相當敏感。 對於物聯網而言,通常是緩慢的資料連線 (只用於更新/管理),而對於雲端和容器而言,則是龐大的規模。

一個具體的例子是 Systemd - 雖然它非常有用 (每個人都喜歡 Systemd),而且一直存在於實體系統中,但在容器中卻很少需要它。 因此,對於套件來說,需要 Systemd 只是為了_systemd-sysusers_來建立使用者並不是問題。 但是,在容器中,這意味著所占用的體積大小都會大幅增加。

除此之外,基本上所有類型的部署都能從縮小規模中獲益,因為安裝的足跡與攻擊面和相關的 CVE 有直接關係。

遠見

數以千計的個人和企業貢獻者在 Fedora 社群中合作,共同探索新的問題,並建立一個快速發展的現代化作業系統,其豐富的生態系統可讓他們進行現代化基礎架構的實驗。

使命

幫助使用開放原始碼的開發人員、系統管理員和 Linux 發行版維護人員,更加專注於與他們相關的工作。

產物

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 社群 提供指導。 儘管我們已經制定了相關的指導方針和政策,但宣傳依舊永遠是非常重要的。

資源與投入

雲端資源的服務原型。 在我們開發的任何東西被證實有用且值得穩定和改變生產環境之前,我們不會以任何方式改變現有的 Fedora 基礎架構。

目前不需要現有的 Fedora 架構團隊或發行工程資源。 不過,我們可能需要協助設定 (或存取) 雲端資源。

我們絕對需要維護者、FPC 以及其他社群成員的積極支持。 這顯然不是我們可以「要求」的,但仍是必要的投入。

指導原則

實用性重於大小: 實用性與大小之間需要平衡。 我們考慮到這一點,不會實施會妨礙我們的使用者使用 Fedora 的劇變。 然而,沒有什麼可以阻止我們製作更多非常特定且最小化的藝術品。

使用 RPM: 我們正在使用 RPM 進行此操作。 我們不是在安裝後刪除檔案來達到最小化。 這可能很明顯,但仍值得一提。

第一階段成果

請參閱 狀態頁面 以取得詳細資訊和歷史性的每週更新。 摘要如下。

  • 更好的了解** - 是的,我們現在對問題有了更好的了解,也對接下來的步驟有了更好、更明確的想法。

Feedback Pipeline - 監控用例大小和依賴關係的服務。 包括表格與互動式相依性圖表的各種檢視。

Systemd 與容器 - 我們遇到 Systemd vs. 容器的問題,尤其是需要它的套件,只是為了使用 systemd-sysuser 在容器中建立使用者。 我們正與上游合作分拆套件。 考慮過,但尚未提出更廣泛的相關政策。

  • 郵件列表討論區:https://lists.fedoraproject.org/archives/list/devel@lists.fedoraproject.org/thread/6YX6CEFBPU3XVZZEHTN6CBH2F7JDF35N/#EJD4BNBE52JTEOPKAT6HFOO4HVUPBTCH

  • 標籤: https://pagure.io/minimization/issue/13

政策思考:

  • 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,這是一個相當大的包裹。所以,我們也在嘗試釐清這個問題。