如何建構基於 OSTree 的不可變系統的 Debian 桌面

範例場景:假設 Maya 維護一台用於開發的 Debian 13 桌面系統,她希望系統更新能夠完整回滾。她可以利用這個目標來評估基於 OSTree 的 Debian 衍生版本,但她不應該在當前系統上運行命令後就期望它變得不可更改。 OSTree 需要一個作業系統樹、啟動整合以及專為部署而設計的更新流程。

OSTree 將完整的檔案系統樹儲存為版本化的提交,並組織可引導的部署。使用者可以選擇新的部署用於下次啟動,同時先前的部署仍然可用,以便回滾。這改變了作業系統的建構和更新方式;它不會自動將普通的 Debian 軟體包管理轉換為原子系統。 Debian 目前的ostree-boot軟體包被描述為 Debian 衍生版本的集成,它需要一個由 dracut 構建的 initramfs 以及一個受支援的引導程式。因此,以下步驟描述的是一個可測試的衍生版本工作流程,而不是對已安裝的 Debian 桌面系統進行受支援的單一命令轉換。

顯示器上顯示的是 Debian 桌面,旁邊是虛擬機器視窗和外部備份驅動器,說明了 OSTree 遷移前的準備工作。
在建置 OSTree 系統之前,請備份桌面並在虛擬機器中測試啟動路徑。

OSTree 會改變什麼,又不會改變什麼。

OSTree 是一個作業系統部署和升級系統,它並非 Debian 軟體包倉庫或依賴解析器的替代品。建置過程仍然需要安裝軟體包並組裝完整的根檔案系統。 OSTree 隨後記錄並部署該根檔案系統樹。對於更新,建置過程會建立一個新的完整根檔案系統樹提交,客戶端會切換到該提交進行部署。這就是為什麼 OSTree 桌面需要一種可重複的方式來建立其係統鏡像;apt upgrade直接在當前根目錄下運行更新與這種更新模式並不相同。

「不可變」也是一種有用的簡寫,而非聲稱電腦上的每個文件都是唯讀的。在典型的部署中,系統樹被視為唯讀,而/etc係統配置和/var可變狀態則分別儲存在不同的目錄下。使用者檔案通常位於版本化的作業系統樹之外,通常位於 `/usr/local/bin` 目錄下/home。 OSTree 對這些路徑和啟動項的處理是系統設計的一部分。部署的 `/usr/local/bin` 所做的變更/usr並不能永久取代產生新的映像。

1. 確定這種方法是否適合您的 Debian 桌面系統。

對 Maya 來說,首先要考慮的是她想要的是一個學習專案還是一個日常使用的作業系統。 OSTree 可以讓更新和回滾更加可控,但 Debian 的軟體包描述中並沒有提供一鍵式的「轉換工作站」工作流程。開發者必須準備作業系統樹,建立 initramfs,整合引導程序,決定如何將軟體包更新轉換為新的提交,並測試硬體。對於希望獲得維護完善、即裝即用的桌面體驗的用戶來說,基於 OSTree 的成熟發行版可能更合適。

在投入時間之前,請先檢查啟動鏈。 Debian 的ostree-bootTrixie 軟體包頁面列出了 dracut 作為 initramfs 的要求,以及 GRUB 2、syslinux/extlinux 或 U-Boot 作為支援的開機載入程式系列。但該清單並不能保證所有韌體設定、安全啟動配置、磁碟加密方案或廠商特定的啟動選單都能在無需額外整合的情況下正常運作。尤其需要注意的是,在對機器內部磁碟進行任何操作之前,請務必在目標機器或配置相近的虛擬機器上進行測試。

此外,還要列出必須保留的桌面功能:顯示卡驅動程式、Wi-Fi 韌體、睡眠和喚醒功能、音訊、印表機、加密儲存、多顯示器支援以及任何外部核心模組。成功啟動進入圖形介面只是開始。如果 Maya 依賴專有驅動程式或特殊的核心模組,則該驅動程式或模組必須在建置的映像中可用,並且與核心和 initramfs 相容。

2. 建立安全的建置和測試環境

首先,使用與目標系統相符的 Debian 版本和架構建立一次性虛擬機器。在進行任何實驗之前,請先建立虛擬機器快照。備份真實桌面電腦的家目錄、瀏覽器設定檔、SSH 金鑰、密碼管理器復原資料以及任何尚未同步到其他位置的資料。備份檔案應與虛擬機器磁碟分開存放。在首次測試中,請勿對日常使用的電腦進行重新分割或格式化。

使用單獨的建置目錄和單獨的目標磁碟映像。記錄 Debian 版本、架構、軟體包清單、核心版本、引導程式以及對軟體包樹所做的更改。可復現的建置記錄有助於 Maya 區分實際的映像變更和特定於機器的配置變更。如果目標是完全保留現有桌面,則全新的基礎軟體包樹無法自動實現:已安裝的軟體包、使用者帳戶、硬體設定和設定需要手動遷移或重新建立。

3. 在建構器上安裝 OSTree 工具

在 Debian Trixie 建構器上,安裝可用的 OSTree 工具、啟動整合和 dracut 軟體包:

sudo apt update
sudo apt install ostree ostree-boot dracut

軟體包的可用性和相依性可能因 Debian 版本和架構而異,因此請使用 APT 在建構器上進行確認。此操作僅在機器上安裝工具;它不會更改機器的啟動過程,也不會使其根檔案系統不可更改。 Debian 軟體包描述明確指出,ostree-boot它提供用於啟動 Debian 衍生系統的元件。

4. 建立一個乾淨的 Debian 根目錄

使用發行版自備的軟體包工具或 Debian 鏡像建置系統準備完整的根檔案系統。包含目標系統所需的核心、systemd、桌面環境、韌體和驅動程序,以及 OSTree 啟動整合及其 initramfs 支援。有意配置使用者、區域設定、網路、服務和桌面預設。例如,一個能夠啟動到控制台的最小目錄樹還不是桌面,為一台機器建立的目錄樹可能不包含另一台機器的驅動程式。

在提交目錄樹之前,請確保其符合 OSTree 的部署佈局。上游適配指南指出,預設配置應位於 `/etc/config/config` 目錄下/usr/etc,而非傳統的根目錄樹/etc;OSTree 以此作為可變部署的基礎/etc。該目錄樹還必須包含核心和相容的 initramfs,且其位置必須能夠被所選的 OSTree 版本和啟動整合所識別。此處應結合 Debian 特定的啟動包和上游指南進行讀取:僅憑有效的目錄樹並不一定能建立一個可啟動的 Debian 部署。

不要盲目地將整個運行中的主機配置複製/到提交中。這樣做可能會包含臨時檔案、特定於機器的狀態、位置錯誤的套件管理器狀態以及基於舊啟動流程的配置。 OSTree 要求鏡像建構者定義軟體包的組裝方式以及更新的產生方式。鏡像建置流程是 Debian 桌面轉換的主要工程工作。

5. 將準備好的樹提交到本機儲存庫

根樹準備好後,建立一個本地倉庫,並將該樹提交到一個描述性的分支名稱下。在本例中,` /srv/debian-root<branch_name>` 是已準備好的樹;它不是正在執行的主機根目錄:

sudo mkdir -p /srv/ostree/repo
sudo ostree --repo=/srv/ostree/repo init --mode=archive
sudo ostree --repo=/srv/ostree/repo commit \
  --branch=debian/trixie/desktop \
  --subject="Debian Trixie desktop test image" \
  /srv/debian-root
sudo ostree --repo=/srv/ostree/repo refs

提交會記錄程式碼樹中的文件,分支指向該版本。它不會配置磁碟、建立韌體啟動項,也不會驗證 initramfs 是否能找到部署。請保持程式碼庫和建置輸入可用,以便重新建置並比較下一個鏡像。對於真正的更新服務,還需要設計安全傳輸、程式碼庫存取控制、在適當情況下使用簽章提交,以及完善的發布流程文件。

軟體介面概念圖顯示,一側是 Debian 根樹,另一側是 OSTree 提交分支到檔案系統對象,表示已準備好的樹記錄為一個版本。
建置流程會組裝一個完整的 Debian 根樹,然後將其記錄為一個帶有版本控制的 OSTree 提交。

6. 準備一個整合了 OSTree 啟動功能的測試磁碟

透過安裝程式或鏡像建置工作流程來配置全新的虛擬機器磁碟,該工作流程必須能夠建立 OSTree 系統根目錄並配置其引導程式。 OSTreeadmin init-fs指令會初始化一個空的實體根檔案系統,管理員可以初始化狀態根目錄並部署提交,但這些指令只是建置模組,並非適用於所有 Debian 桌面的完整安裝程式。它們並不能取代分區佈局、安裝韌體引導檔案、產生相容的 initramfs 以及配置韌體和引導程式等步驟。

使用 Debian 整合套件支援的引導程式系列,並驗證引導條目是否將 OSTree 部署參考傳遞給 initramfs。 OSTree 的部署文件解釋說,引導條目包含一個ostree=核心參數,initramfs 使用該參數來定位選定的部署。對於使用加密、LVM、RAID、安全啟動或特殊儲存的系統,請確保在測試之前 initramfs 包含所需的模組和金鑰。不要假設一個可用的常規 Debian 引導條目會自動啟動 OSTree 部署。

首次部署時,請依照安裝程式或鏡像建構器的說明,使用正確的啟動路徑。類似這樣的純命令ostree admin deploy只會將提交添加到已配置的 OSTree 系統的預設部署佇列中;它不會將目前運行的 Debian 系統轉換為該系統。

7. 啟動、檢查和測試回滾

將虛擬機器啟動到新部署環境中,並確認登入畫面以外的其他功能:檢查網路連線、圖形加速、聲音、睡眠和復原功能、儲存掛載、更新以及應用程式行為。然後檢查部署清單:

sudo ostree admin status

此指令會列出可用的部署,並標記目前啟動的部署。測試期間,請保留先前已知良好的部署。如果新鏡像啟動失敗,請使用啟動選單選擇先前的部署,或使用已安裝版本的 OSTree 回溯工作流程文件。確認先前的桌面可以啟動,且使用者資料保持完整。 OSTree 會對作業系統樹進行版本控制;它不會自動還原個人文件,也不會撤銷每個應用程式對共用資料的變更/var。

概念啟動選單顯示「新部署」已選擇在「先前部署」之上,說明測試系統如何提供早期版本以供回溯。
在接受更新之前,請測試啟動功能表並保留一個已知良好的部署版本。

8. 定義更新和維護流程

為了確保桌面系統的可維護性,每次作業系統更新都應該來自一個新的、可審核的提交。需要明確由誰來建立系統,Debian 軟體包更新如何進入提交樹,核心和韌體更新如何測試,提交如何到達客戶端,以及舊版本保留多長時間。如果使用者需要其他應用程序,請選擇受支援的應用程式分發方式(例如,在合適的情況下使用 Flatpak),而不是使用普通的 APT 命令靜默地更改基礎作業系統。

仔細規劃狀態。新部署可能會保留本機/etc編輯,但配置變更仍需管理員審核。資料在/var不同部署之間共享,因此回滾作業系統不一定意味著資料庫架構或應用程式資料格式也會回滾。使用者檔案應有自己的備份和復原計畫。不可變系統檔案提高了切換作業系統版本的能力;但它們並不能使所有機器狀態都具有事務性。

一個概念性的 OSTree 狀態視窗顯示了兩行部署資訊和一個回滾可用指示器,表示部署後的驗證檢查。
用於ostree admin status確認目前哪個部署處於活動狀態,以及先前的部署是否仍然可用。

實際準備清單

  • 此建置過程可復現,並針對預期的 Debian 版本和架構。
  • 根樹使用 OSTree 的預期配置佈局,包含匹配的核心和 initramfs,並具有所需的桌面驅動程式。
  • 該目標系統採用 Debian 支援的 dracut 和引導程式集成,在硬體安裝之前已在虛擬機器中進行了測試。
  • 新部署的系統會啟動到桌面,也可以選擇並啟動先前的部署。
  • 備份涵蓋使用者資料以及作業系統回滾無法復原的任何狀態。
  • 軟體包更新、鏡像重建、版本簽名或驗證以及核心變更測試都有相應的文件化流程。

對於 Maya 的假想桌面而言,實際結果是得到一個經過測試的、基於 Debian 的 OSTree 鏡像,以及一種可重複部署的方法——而不是一個未經修改的 Debian 安裝突然變得不可更改。首先在虛擬機器中啟動,保持更新流程的簡潔,只有在啟動整合、桌面驅動程式和回滾路徑在目標機器上都能正常運作之後,才遷移到實體硬體上。

原始文件

留下評論

在低記憶體VPS上運行Debian 12:如何減少MySQL記憶體不足崩潰

在低記憶體VPS上運行Debian 12:如何減少MySQL記憶體不足崩潰

診斷 Debian 12 上的 MySQL OOM 崩潰問題,檢查 VPS 記憶體限制,配置交換空間,並調整資料庫記憶體和並發性,但不保證提供通用的解決方案。

如何建構基於 OSTree 的不可變系統的 Debian 桌面

如何建構基於 OSTree 的不可變系統的 Debian 桌面

學習如何在虛擬機器中建立和測試基於 Debian 的 OSTree 桌面,包括系統樹準備、啟動整合、部署檢查和回滾。

How to Mount a Remote SSHFS Directory Automatically at Boot in Debian

How to Mount a Remote SSHFS Directory Automatically at Boot in Debian

Configure an SSHFS boot mount in Debian with SSH keys, fstab, and systemd automount. Includes reboot checks, permissions, timeouts, and troubleshooting.

2026年10月臺北、新北種什麼?蔬菜、香草、花卉與每週播種定植清單

2026年10月臺北、新北種什麼?蔬菜、香草、花卉與每週播種定植清單

2026年10月臺北與新北種植指南:依中央氣象署與農業部資料整理蔬菜、香草、草花、直播、育苗、定植與每週工作,並分清氣候常態與短期預報。

2026年你需要了解的播客發展趨勢:新手入門指南

2026年你需要了解的播客發展趨勢:新手入門指南

剛接觸播客?了解 2026 年影響影片、發現、文字稿、人工智慧、分析、獲利以及實用啟動計畫的趨勢。

UGC大師班:打造贏得信任並促成行動的使用者生成內容

UGC大師班:打造贏得信任並促成行動的使用者生成內容

這是一門實用的使用者生成內容 (UGC) 大師班,內容涵蓋客戶和創作者內容的來源、授權、簡報、發布和衡量,同時又不失真實性。

為什麼社群建立是新的行銷方式——以及何時它並非如此

為什麼社群建立是新的行銷方式——以及何時它並非如此

社群建立可以加深信任、提高用戶留存率、收集回饋並增強用戶擁護度,但它並不能取代所有行銷管道。權衡利弊,選擇合適的模式。

Navigating Social Media Algorithm Changes in 2026: What’s Confirmed, Contextual, and Still Unknown

Navigating Social Media Algorithm Changes in 2026: What’s Confirmed, Contextual, and Still Unknown

Learn what major social platforms have actually confirmed about ranking changes in 2026, what depends on context, and how to adapt without chasing myths.

品牌行銷中的真實故事敘述:如何在不顯得刻板的情況下建立信任

品牌行銷中的真實故事敘述:如何在不顯得刻板的情況下建立信任

學習如何運用證據、真實的緊張感、符合倫理的客戶故事和實用的真實性檢驗,使品牌故事聽起來可信、人性化且具體。

第四季電子郵件行銷成功策略:哪些方面需要優先考慮、測試和權衡

第四季電子郵件行銷成功策略:哪些方面需要優先考慮、測試和權衡

透過平衡覆蓋範圍、發送頻率、折扣、自動化、送達率和效果衡量,制定更聰明的第四季電子郵件行銷策略,實現假日季獲利成長。