分享Ivon使用Fedora Silverlbue的心得。
1. 簡介Fedora Silverblue#
Fedora有很多種分支,較多人用的分支是為「Fedora Workstation」,而本文介紹的乃是相對新穎的「Fedora Atomic Desktop」分支版。
Fedora Silverblue是2018年推出的Linux發行版,基於更早推出的Fedora CoreOS所開發,主要面向的客群為桌面用戶。
關於名字的意義,這講來有點複雜。Silverblue主打不變系統(immutable system)和原子更新(Atomic updates),系統設計上跟傳統的Fedora Workstation不太一樣。「Fedora Silverblue」是指採用GNOME桌面的Immutable系統,後來推出的「Fedora Kinoite」則是指採用KDE桌面的Immutable系統,另外還有採用XFCE、Sway的分支版本。這些可以視為相當於Fedora Spins的存在吧。
2024年,Fedora開發組將所有包含Immutable與Atomic特性的分支統稱為「Fedora Atomic Desktop」,這樣Silverblue和Kinoite便成為了該傘式術語下的子集合,方便人們用來稱呼這類Immutable系統,又不會與傳統的Fedora混淆。
什麼是不變系統(immutable system)呢?它使用ostree管理更新,因此系統本身可視為大型的Git儲存庫。Immutable的系統應當是不可變更的,但若要的話也是可以。使用者所安裝的軟體會被詳細紀錄,就好像對Git repositroy送出commits一樣。系統更新出錯了能隨意回滾(rollback)到舊版。
跟Fedora Workstation一樣,Silverblue系統套件版本很接近上游。儘管有人說Fedora Silverblue是滾動更新模式,但是它版本還是跟著Fedora Workstation跑的。
Fedora Silverblue系統是不可變的,只有少數目錄能夠讀寫。系統更新的時候會下載新版本映像檔,覆蓋掉舊有的系統檔案。這樣能夠順便清除一些沒用的垃圾檔案,防止電腦用久了出現一堆不知道哪來的軟體。使用者應該儘量避免修改系統的東西,轉而使用容器技術來跑軟體。
要類比的話,Silverblue比較接近ChromeOS的作法,不允許使用者隨意修改系統設定,保持更新穩定性。
對傳統Linux的使用者來說,會覺得Silverblue很難「駭」進系統,隨意修改設定值。例如想換桌面,其他發行版也許可以裝套件自行設定,但在Silverblue很困難,可能系統更新之後你做的變更就消失了。目前官方僅提供預裝GNOME與KDE的系統,更多桌面的Spin會在未來加入。
如果想嘗試更穩定的系統,並且知道如何調整工作流以適應Fedroa Silverblue,那麼這個系統還是值得嘗試的。
0. 前置需求#
Fedora Silverlue不支援DKMS這類原始碼樹外編譯驅動,因此電腦硬體對Linux的支援度必須要夠好,不能有一堆奇怪的驅動要裝。
例如我的MSI Modern 15 A10筆電,雙顯示卡Intel/Nvidia勉強受Fedora Silverblue支援;Wifi網路卡廠牌為Intel,就不需要另外編譯驅動。
只是這台筆電不論哪個發行版,只要系統核心是5.15以後,睡眠(暫停)模式就會睡死。睡死是個小問題,用gnome-tweaks
關閉闔上螢幕自動暫停的功能就行。
1. 安裝Fedora Silverblue#
至官網下載 Fedora Silverblue的ISO。Fedora Silverblue官方預設的桌面環境為GNOME,若需要KDE請改下載 Fedora Kinoite
用 Ventoy製作開機隨身碟。
選取Install Fedora Silverblue 37
語言選中文
接著只要點「安裝目標位置」,點選「取回所有空間」將目標硬碟格式化為BTRFS,即可點選安裝。
等待安裝完成。Fedora Silverblue會自動安裝GNOME桌面環境的相關程式,還有注音輸入法(ibus-zhuyin)。
開機後按照螢幕指示建立使用者帳號,並啟用第三方軟體庫。
因為筆電有獨立顯示卡,還需另外給Fedora安裝Nvidia專有驅動和CUDA套件。
# 更新系統至最新板
sudo rpm-ostree upgrade
sudo systemctl reboot
# 安裝RPM Fusion
sduo rpm-ostree install https://download1.rpmfusion.org/free/fedora/rpmfusion-free-release-$(rpm -E %fedora).noarch.rpm https://download1.rpmfusion.org/nonfree/fedora/rpmfusion-nonfree-release-$(rpm -E %fedora).noarch.rpm
sudo systemctl reboot
# 安裝Nvidia驅動
sudo rpm-ostree install akmod-nvidia xorg-x11-drv-nvidia xorg-x11-drv-nvidia-cuda
sudo systemctl reboot
# 禁止nouveau開機載入
sudo rpm-ostree kargs --append=rd.driver.blacklist=nouveau --append=modprobe.blacklist=nouveau --append=nvidia-drm.modeset=1
sudo systemctl reboot
我習慣的用法是螢幕顯示交給Intel,程式需要Nvidia時再用 Nvidia PRIME指令切換。
至於說跑CUDA的方法?使用Podman + Nvidia Container Toolkit,這樣不用在本機安裝CUDA。最低限度的要求變成只要有Nvidia閉源驅動就行。至於Nvidia驅動,Silverblue可以照上述方法用ostree裝,或是使用 ublue事先整合好的Silverblue映像檔。
2. Silverblue安裝軟體#
Silverblue安装軟體的方式有三種。
2.1. Flatpak#
Flatpak容器技術主要用於安裝圖形化的桌面應用程式,例如Google Chrome和Visual Studio Code。
Silverblue內建的GNOME軟體商店就能下載軟體,只不過內建的是Fedora自己的Flatpak軟體庫。
如果要存取較多人使用的Flathub,則按照 官網說明自行加入Flathub軟體庫。未來Silverblue 38會改成預載Flathub的軟體庫。
2.2. Toolbox#
Fedora Silverblue內建Container Toolbox,基於Podman研發的容器技術,主要用於建立開發環境,建立容器後就能使用熟悉的DNF指令安裝套件。
習慣使用DNF安裝套件的,得將工作流程調整為配合容器環境工作。例如開發Python程式你或許會用虛擬環境防止套件污染,而Toolbx能更方便隔離各個開發環境。
開啟終端機,新建容器並進入:
toolbox create development
toolbox enter development
隨後就能在容器內部使用DNF指令,需要sudo。注意家目錄是會一併掛載進容器的,檔案系統並非完全隔離。
退出容器:
toolbox exit development
順帶一提,如果需要其他Linux系統的工具工作, DistroBox會是更好的選擇,這也是 openSUSE MicroOS推薦使用的工具。
2.3. rpm-ostree#
修改目前的系統映像檔,疊一層(layer)軟體在目前的系統映像。安裝新軟體就好像在對Git repositroy做commit一樣,是可以追蹤變化的。
若要將軟體安裝至系統就得使用rpm-ostrem,例如VIM和KVM,概念上類似用傳統的DNF安裝軟體。然而不是所有軟體都有rpm-ostree版,rpm-ostree也無法搜尋套件。
舉例,安裝VIM:
sudo rpm-ostree install vim
安裝新軟體後要重新開機才能使用。或者在指令加上--apply-live
參數免重開機安裝程式。
另外根據
官方文件,你可以使用rpm-ostree kargs
指令,修改開機傳給核心的kernel parameters。
3. 更新與回滾系統#
Fedroa Silverblue系統的根目錄全部唯讀,更新後直接覆蓋,僅/var
和/etc
分區能修改。然而sudo和systemctl的指令還是能使用,只是軟體不要裝到系統目錄,盡量多採用Flatpak和Toolbx的技術裝軟體。
Silverblue更新全系統套件的指令如下,安裝後需要重新開機。
sudo rpm-ostree-update
更新後,GRUB開機選單會出現新版本和舊版本,點選可以暫時回滾(降級)至舊版本。由於Silverblue的系統設計機制緣故,系統要弄壞很難。
更新系統弄壞了怎麼辦?用指令回滾上一個版本:
sudo rpm-ostree rollback
若要進行大版本更新,例如從Fedora 39升級到Fedora 40,就要用到rebase指令:
sudo rpm-ostree upgrade
sudo rpm-ostree rebase fedora:fedora/40/x86_64/silverblue