更新我們的預設 docker 映像檔
重點摘要:我們已更新 Docker 映像檔和建置時間 GLIBC 選項。
- 我們已更新預設 docker 映像檔,改為基於 alma9
- 現在可以更輕鬆地覆寫
c_stdlib_version
(特別是針對啟用 CUDA 的 feedstock),但我們的 2.17 基準線並未變更。 - 在必要時,您可以更輕鬆地透過設定
os_version: ...
來切換映像檔(請參閱下方)。 - 我們已整合映像檔名稱,使其遵循一致的模式
linux-anvil-{x86_64,aarch64,ppc64le}:{cos7,alma8,alma9}
一般而言,在絕大多數情況下,不需要覆寫 docker-image,但如果您需要這樣做,可以將以下內容新增至 conda-forge.yml
os_version: # just to demo different values;
linux_64: cos7 # whenever possible, please use
linux_aarch64: alma8 # homogeneous distro versions
linux_ppc64le: alma9 # across platforms
conda-forge 中的 Linux 建置作業在衍生自 RHEL 及其 клонов 的基礎架構上執行 — 先前是 CentOS,現在是 AlmaLinux。主要來說,我們需要這個用於四個不同但相互關聯的部分
- docker 映像檔(包含將執行我們建置作業的作業系統)
- sysroot(主要是 C 標準函式庫,
glibc
) - CDT(發行版中的組件,我們無法自行封裝)
- feedstock 使用
yum_requirements.txt
第一個關鍵觀察是 glibc 出現兩次 — 一次是明確地在我們封裝(並針對其編譯!)的 sysroot 中,另一次是隱含地在我們的 CI 執行的映像檔中。此設定對於預設提供高度相容的套件至關重要(透過針對 cos7 基準線進行編譯),同時避免 feedstock 不斷遇到麻煩,因為在其中任何建置/主機/執行依賴項都需要比基準線更新的 glibc。
這是因為,對於需要較新 c_stdlib_version
的套件(因此透過 {{ stdlib("c") }}
基礎架構針對較新的 sysroot 進行編譯),將繼承 __glibc >=c_stdlib_version
的執行時期需求,這在執行時期具有過舊 glibc 的 docker 映像檔上將無法滿足。
自 2021 年以來(當我們的 glibc 基準線為來自 cos6 的 2.12 時,但我們已經使用 cos7 映像檔),我們已經有了此設定,但在將 glibc 基準線提高到 2.17 後,我們的映像檔再次失去了領先地位。這主要與上述第三個組件 CDT(核心依賴樹)有關。這些代表來自發行版本身的套件,我們很難或不可能提供,但需要一種系統化的方式與之互動。您可以在此處閱讀更多關於為什麼我們想要盡可能避免它們的資訊。
由於我們所知的 CentOS 即將結束,無論如何我們都必須重寫許多邏輯以切換到 Alma,我們藉此機會縮減了我們未來將提供的 CDT 集合。在絕大多數情況下,我們針對過去僅作為 CDT 提供的一些項目提供了常規 conda 套件。
CDT 和 yum_requirements.txt
中的套件密切相關;在許多方面,它可以被視為與我們的 sysroot(我們針對其編譯)與執行時期的映像檔中的 glibc 類似的編譯與執行時期分離。此處的分離是 CDT 是我們用來針對給定發行版套件進行編譯的工具,而 yum_requirements.txt
是我們告訴基礎架構將它們安裝到映像檔中的方式,如果它們在執行時期也是必要的(情況並非總是如此)。
換句話說,使用我們自己的套件通常允許 feedstock 避免使用 CDT 和 yum_requirements.txt
。您可以在此處查看我們移除的 CDT,以及 yum_requirements.txt
如何從 CentOS 轉換為 Alma(分別是我們自己的套件)在此處。
映像檔的變更可能表示我們尚未針對 Alma 重新封裝的 CDT 與映像檔中實際存在的內容不再匹配,或者 — 在極少數情況下 — yum_requirements.txt
下的套件名稱需要更新。如果您在那裡遇到問題,請告訴我們(在查看上述兩個連結,了解如何轉換給定套件之後)。
最後,在極少數情況下,我們明確要求 feedstock 作者選擇退出最新的映像檔:對於任何在 linux 上進行二進位重新封裝的 feedstock(即,未從原始碼編譯套件),請確保您的映像檔版本(如 conda-forge.yml
中指定,請參閱上方)與您正在使用的 c_stdlib_version
相符。預設值為 2.17,這表示您必須執行
os_version:
linux_64: cos7
linux_aarch64: cos7
linux_ppc64le: cos7
如果您需要給定平台的 c_stdlib_version
為 2.28,則設定 alma8
。