快轉到主要內容

什麼是rpm-ostree:原子化Linux系統套件管理器使用概觀

· 民國115年丙午年
·
切換繁體/簡體
分類 Linux系統 Linux使用技巧
標籤 Fedora RHEL
目錄

一個簡要的rpm-ostree教學。

「rpm-ostree」是混合映像檔與套件部署模式的Linux套件管理器,專為原子化更新的Linux發行版設計。

過去,大部分的Linux發行版採用套件(package)管理器來安裝套件與更新系統。例如Fedora會用dnf指令安裝rpm。現在興起一種以映像檔(image)部署系統更新的Linux發行版,我們稱之為原子化(atomic)系統,或稱不可變(immutable)系統,例如Fedora Atomic Desktop,這類系統拋棄了dnf,而是以映像檔方式部署系統更新。

基於我粗淺的理解,rpm-ostree vs dnf,兩者的差別可以用以下簡圖表示:

在採用原子化更新的Linux發行版,系統大部分分區都是不可以修改的,這是為了確保穩定性以及未來出錯可回滾。傳統修改系統分區的安裝套件方式行不通,使用者應多採用容器化技術安裝軟體。若真的需要修改系統,就需要rpm-ostree這個工具介入。

rpm-ostree可以說是結合了OSTree與DNF兩個軟體功能的解決方案。libostree本身讓Linux系統成為一個巨大的Git儲存庫,然後libdnf的部分允許對其安裝rpm套件。

它可以修改系統映像檔,加上一個分層(layer)在目前的系統映像之上,安裝任意的rpm套件,藉此完成對系統的修改。這個過程可以粗略的類比為Podman的layer機制。

Rpm-ostree可以跟OSTree或是bootc的系統互動。rpm-ostree安裝軟體的過程就好像在對Git儲存庫做提交(commit)一樣,是可以追蹤變化的。每次更新系統的時候,rpm-ostree會下載整個新系統的映像檔,然後再套用使用者額外安裝的套件。

這個更新過程是原子化的,要嘛成功,要嘛失敗,不會更新到一半中斷,導致系統進入生死不明的混亂狀態。

另外,rpm-ostree可以保持基本系統處於乾淨的狀態。若使用者安裝的rpm套件弄壞了系統,只要把他們清除掉就好。

rpm-ostree顧名思義,基本上只能處理rpm套件。對於採用deb套件的發行版,需要使用apt2ostree。

使用rpm-ostree套件管理器的系統目前有:Fedora Atomic Desktop (Silverblue, Kinoite)、Universal Blue (Aurora, Bluefin, Bazzite)、RHEL CoreOS等等。

1. 使用rpm-ostree安裝rpm套件
#

  1. 以Fedora Silverlbue系統來說,使用rpm-ostree指令,它會從Fedora對應版本的套件庫下載rpm套件。套件庫就是看/etc/yum.repos.d/所定義的網址。

  2. rpm-ostree指令跟dnf用法很像,舉例,安裝Vim:

sudo rpm-ostree search vim

sudo rpm-ostree install vim
  1. 它也可以用來安裝不在Fedora套件庫內的野生rpm套件,或者是添加第三方rpm套件庫:
sudo rpm-ostree install ./package.rpm
  1. 每次rpm-ostree執行install指令,都是在對系統這個大型儲存庫做一個提交(commit),新增一個分層(layer)。因此安裝套件後,系統要重新開機,新安裝的程式才能使用(在開機選單會顯示為ostree:0ostree:1則是上一個系統版本)。或者,你可以在執行rpm-ostree install指令時加上--apply-live參數,透過OverlayFS機制,免重開機就能使用新安裝的軟體。

  2. 因為它是對系統映像檔做修改,rpm-ostree安裝軟體的速度比dnf慢很多,且使用者手動安裝的套件越多,未來系統更新就越久。另外,rpm-ostree不支援DKMS編譯out of tree的kernel module。以Fedora的情況來看,推薦使用akmod版本的驅動套件。

  3. 若要查看系統變更紀錄,使用:

sudo rpm-ostree status
  1. rpm-ostree所安裝的套件,可能對未來的系統更新產生不穩定影響。若要一鍵刪除使用者所安裝的套件,使用這個指令重置:
sudo rpm-ostree reset

2. 使用rpm-ostree更新系統
#

rpm-ostree也可以用來管理系統更新。既然Linux系統被視為一個「整體」,一個系統就是一個映像檔,那麼這個系統映像檔就可以任意在多個版本映像檔之間切換。

  1. 更新全系統的指令如下,這會讓rpm-ostree下載新版系統映像檔,然後套用更新,直接覆蓋舊版系統分區。
sudo rpm-ostree upgrade
  1. 若更新系統弄壞了怎麼辦?用rollback指令回滾上一個版本:
sudo rpm-ostree rollback
  1. 需要注意的是,rollback這個指令只能退回到上一個版本的系統,如果要再往前跳,建議使用rebasedeploy指令。

  2. 若要進行大版本更新,或者切換目前的系統到其他更新頻道,可以用到rebase指令。由於Atomic系統大部分分區都是唯讀的,透過rebase的方式,能夠輕易的在多個系統版本之間切換,而不容易造成系統毀損(不過軟體存在使用者家目錄的dotfile若一直切版本可能造成程式異常就是了)

sudo rpm-ostree status

sudo rpm-ostree rebase fedora:fedora/44/x86_64/silverblue

3. 修改kernel boot parameters
#

  1. 要指定Linux核心開機時啟用哪些功能,通常會透過GRUB的/etc/default/grub設定檔修改kernel parameters,不過Atomic發行版不會讓你寫入/boot/分區,這個時候可以讓rpm-ostree代勞。

  2. 使用rpm-ostree kargs指令,修改開機時傳給Linux核心的核心參數。執行以下指令,開啟編輯器:

sudo rpm-ostree kargs --editor
  1. 它會在需要的時候自動幫你重新建立initramfs,做到類似dracut的功用。

4. rpm-ostree未來被取代的可能性
#

參考Fedora論壇的討論:Questions about bootc and rpm-ostree

rpm-ostree這個技術未來可能被「bootc」和「dnf5」替代,bootc負責處理系統更新,dnf5安裝rpm套件。不過尚未成熟。

目前很多Atomic發行版仍然使用rpm-ostree來管理與安裝系統套件。

參考資料
#

相關文章


此處提供二種留言板。點選按鈕,選擇您覺得方便的留言板。

(留言板載入中)這是Giscus留言板,需要Github帳號才能留言。支援Markdown語法,若要上傳圖片請善用外部圖床。您的留言會在Github Discussions向所有人公開。

Click here to edit your comments.

(留言板載入中)這是Disqus留言板,您可能會看到Disqus強制投放的廣告。為防止垃圾內容,有時留言可能會被系統判定需審核,導致延遲顯示,請見諒。若要上傳圖片請善用外部圖床網站。