Strona główna
» Jak
»
How to Build a Debian Desktop as an OSTree-Based Immutable System
How to Build a Debian Desktop as an OSTree-Based Immutable System
Example scenario: Imagine Maya maintains a Debian 13 desktop used for development and wants system updates that can be rolled back as a complete version. She can use this goal to evaluate an OSTree-based Debian derivative, but she should not run a command on her current installation and expect it to become immutable. OSTree needs an operating-system tree, boot integration, and an update process designed for deployments.
OSTree stores complete filesystem trees as versioned commits and arranges bootable deployments. A new deployment can be selected for the next boot while an earlier one remains available for rollback. This changes how the OS is built and updated; it does not turn ordinary Debian package management into an atomic system automatically. Debian’s current ostree-boot package is described as integration for a Debian derivative, and it requires a dracut-built initramfs plus a supported bootloader. The steps below therefore describe a testable derivative workflow, not a supported one-command conversion of an installed Debian desktop.
Before building an OSTree system, back up the desktop and test the boot path in a virtual machine.
What OSTree changes—and what it does not
OSTree is an operating-system deployment and upgrade system, not a replacement for Debian’s package repository or dependency resolver. A build process still needs to install packages and assemble a complete root filesystem. OSTree then records and deploys that tree. For updates, the build process creates another full tree commit, and the client switches to it as a deployment. This is why an OSTree desktop needs a repeatable way to build its system image; running apt upgrade against the live root is not the same update model.
“Immutable” is also a useful shorthand rather than a claim that every file on the computer is read-only. In a typical deployment, the system tree is treated as read-only, while /etc holds machine configuration and /var holds mutable state. User files normally live outside the versioned operating-system tree, often under /home. OSTree’s handling of these paths and of boot entries is part of the system design. Changes made to the deployment’s /usr are not a durable substitute for producing a new image.
1. Decide whether this approach fits your Debian desktop
Dla Mayi pierwszym pytaniem jest, czy chce projektu edukacyjnego, czy systemu operacyjnego do codziennego użytku. OSTree może zapewnić większą kontrolę nad aktualizacjami i wycofywaniem zmian, ale Debian nie oferuje gotowego procesu „konwertowania tej stacji roboczej” w opisie pakietu. Deweloper musi przygotować drzewo systemu operacyjnego, utworzyć jego initramfs, zintegrować bootloader, zdecydować, jak aktualizacje pakietów staną się nowymi zatwierdzeniami, oraz przetestować sprzęt. Znana dystrybucja oparta na OSTree może być lepszym rozwiązaniem dla komputerów stacjonarnych, gdzie użytkownik oczekuje utrzymywanego, gotowego do instalacji środowiska.
Sprawdź łańcuch rozruchowy przed zainwestowaniem czasu. ostree-bootStrona pakietów Trixie w Debianie wymienia dracut jako wymaganie initramfs, a GRUB 2, syslinux/extlinux lub U-Boot jako obsługiwane rodziny bootloaderów. Ta lista nie gwarantuje, że każda konfiguracja oprogramowania sprzętowego, konfiguracja Secure Boot, konfiguracja szyfrowania dysku lub menu rozruchowe specyficzne dla dostawcy będą działać bez dodatkowej integracji. W szczególności, przed dotknięciem dysku wewnętrznego należy przetestować konkretną maszynę lub konfigurację bliskiej maszyny wirtualnej.
Wymień również funkcje pulpitu, które muszą działać: sterowniki graficzne, oprogramowanie układowe Wi-Fi, tryb uśpienia i wznowienia, dźwięk, drukarki, szyfrowana pamięć masowa, wiele monitorów oraz wszelkie moduły jądra spoza drzewa (out-of-tree). Pomyślne uruchomienie i graficzne zalogowanie to dopiero początek. Jeśli Maya wymaga zastrzeżonego sterownika lub specjalnego modułu jądra, musi on być dostępny w skompilowanym obrazie i być zgodny z jądrem i initramfs.
2. Stwórz bezpieczne środowisko do kompilacji i testowania
Zacznij od jednorazowej maszyny wirtualnej, używając wydania Debiana i architektury, które odpowiadają docelowemu systemowi. Przed rozpoczęciem eksperymentów wykonaj migawkę maszyny wirtualnej. Utwórz kopię zapasową katalogu domowego, profili przeglądarek, kluczy SSH, materiałów do odzyskiwania haseł i wszelkich danych, które nie są jeszcze zsynchronizowane z innym systemem. Przechowuj kopię zapasową oddzielnie od dysku maszyny wirtualnej. Nie zmieniaj partycji ani nie formatuj komputera używanego na co dzień w ramach pierwszego testu.
Użyj osobnego katalogu kompilacji i osobnego obrazu dysku docelowego. Zachowaj notatki dotyczące wydania Debiana, architektury, listy pakietów, wersji jądra, bootloadera i zmian wprowadzonych w drzewie. Powtarzalny zapis kompilacji pomaga Mayi odróżnić faktyczną zmianę obrazu od zmiany konfiguracji specyficznej dla danej maszyny. Jeśli celem jest dokładne zachowanie istniejącego pulpitu, nowe drzewo bazowe nie zrobi tego automatycznie: zainstalowane pakiety, konta użytkowników, ustawienia sprzętowe i konfiguracja muszą zostać celowo przeniesione lub utworzone na nowo.
3. Zainstaluj narzędzia OSTree w kompilatorze
Na systemie Debian Trixie zainstaluj dostępne narzędzia OSTree, integrację z systemem rozruchowym i pakiety dracut:
Dostępność i zależności pakietów mogą się różnić w zależności od wydania i architektury Debiana, dlatego należy je potwierdzić za pomocą APT w programie budującym. To narzędzie instaluje jedynie narzędzia na komputerze; nie zmienia procesu rozruchu ani nie sprawia, że system plików root staje się niezmienny. Opis pakietu Debiana wyraźnie wskazuje, że ostree-bootpakiet zawiera elementy do rozruchu wersji pochodnej Debiana.
4. Zbuduj czyste drzewo główne Debiana
Przygotuj kompletny system plików root za pomocą narzędzi pakietowych wydania lub systemu budowania obrazu Debiana. Uwzględnij jądro, systemd, środowisko graficzne, oprogramowanie układowe i sterowniki potrzebne dla systemu docelowego, a także integrację rozruchową OSTree i obsługę initramfs. Skonfiguruj użytkowników, ustawienia regionalne, sieć, usługi i domyślne ustawienia pulpitu. Na przykład, minimalne drzewo, które uruchamia się na konsoli, nie jest jeszcze środowiskiem graficznym, a drzewo zbudowane dla jednej maszyny może nie zawierać sterowników dla innej.
Przed zatwierdzeniem drzewa należy dostosować je do schematu wdrożenia OSTree. W przewodniku adaptacji upstream podano, że domyślna konfiguracja należy do /usr/etc, a nie do tradycyjnego drzewa głównego /etc; OSTree używa go jako bazy dla zmiennego drzewa dla każdego wdrożenia /etc. Drzewo musi również zawierać jądro i kompatybilny initramfs w lokalizacjach zrozumiałych dla wybranej wersji OSTree oraz integracji rozruchowej. Pakiet rozruchowy specyficzny dla Debiana i przewodnik upstream należy przeczytać razem: samo prawidłowe drzewo katalogów nie jest koniecznie rozruchową instalacją Debiana.
Nie kopiuj bezmyślnie całego hosta /do commita. Może to spowodować przechwycenie plików przejściowych, stanu specyficznego dla maszyny, stanu menedżera pakietów w niewłaściwym miejscu oraz konfiguracji zakładającej stary proces rozruchu. OSTree oczekuje, że program do budowania obrazu zdefiniuje sposób kompilacji pakietów i generowania aktualizacji. Ten proces budowania obrazu to główna praca inżynieryjna w konwersji pulpitu Debiana.
5. Zatwierdź przygotowane drzewo w lokalnym repozytorium
Po przygotowaniu drzewa głównego utwórz lokalne repozytorium i zatwierdź drzewo pod opisową nazwą gałęzi. W tym przykładzie /srv/debian-rootjest to przygotowane drzewo, a nie główny katalog hosta:
Zatwierdzenie rejestruje pliki w drzewie, a gałąź wskazuje na tę wersję. Nie konfiguruje dysku, nie tworzy wpisu rozruchowego oprogramowania układowego ani nie dowodzi, że initramfs może znaleźć wdrożenie. Należy zachować repozytorium i dane wejściowe kompilacji, aby można było przebudować i porównać kolejny obraz. Aby usługa aktualizacji działała prawidłowo, konieczne jest również zaprojektowanie bezpiecznego transportu, kontroli dostępu do repozytorium, podpisanych zatwierdzeń w stosownych przypadkach oraz udokumentowanego procesu udostępniania.
Proces kompilacji tworzy kompletne drzewo główne Debiana, a następnie rejestruje je jako zatwierdzenie wersji OSTree.
6. Przygotuj dysk testowy z integracją rozruchową OSTree
Przygotuj nowy dysk maszyny wirtualnej za pomocą instalatora lub procesu tworzenia obrazu, który potrafi utworzyć katalog sysroot OSTree i skonfigurować jego bootloader. admin init-fsPolecenie OSTree inicjuje pusty fizyczny system plików root, a administrator może zainicjować katalog stateroot i wdrożyć commit, ale te polecenia stanowią jedynie elementy składowe, a nie kompletny przepis na instalator dla każdego pulpitu Debiana. Nie eliminują one konieczności rozmieszczania partycji, instalowania plików rozruchowych oprogramowania układowego, generowania kompatybilnego initramfs ani konfigurowania ustawień oprogramowania układowego i bootloadera.
Użyj rodziny bootloaderów obsługiwanych przez pakiet integracyjny Debian i sprawdź, czy wpis rozruchowy przekazuje odwołanie do wdrożenia OSTree do initramfs. Dokumentacja wdrożeniowa OSTree wyjaśnia, że wpisy rozruchowe zawierają ostree=argument jądra, którego initramfs używa do zlokalizowania wybranego wdrożenia. W przypadku systemów z szyfrowaniem, LVM, RAID, Secure Boot lub nietypowymi systemami pamięci masowej, przed testowaniem upewnij się, że initramfs zawiera wymagane moduły i klucze. Nie zakładaj, że działający, konwencjonalny wpis rozruchowy Debian automatycznie uruchomi wdrożenie OSTree.
W przypadku pierwszego wdrożenia należy postępować zgodnie z instrukcjami instalatora lub programu do tworzenia obrazu, aby uzyskać dokładną ścieżkę rozruchową. Polecenie „goły”, takie jak „ ostree admin deploykolejkuje zatwierdzenie jako domyślne wdrożenie w już skonfigurowanym systemie OSTree, ale nie przekształca aktualnie uruchomionej instalacji Debiana w tym systemie”.
7. Uruchom, sprawdź i przetestuj wycofanie
Uruchom maszynę wirtualną w nowym wdrożeniu i sprawdź nie tylko ekran logowania: sprawdź łączność sieciową, akcelerację graficzną, dźwięk, wstrzymanie i wznowienie, montowanie pamięci masowej, aktualizacje oraz działanie aplikacji. Następnie przejrzyj listę wdrożeń:
sudo ostree admin status
Polecenie wyświetla listę dostępnych wdrożeń i zaznacza to, które jest aktualnie uruchomione. Zachowaj poprzednie, znane, dobre wdrożenie podczas testowania. Jeśli nowy obraz się nie powiedzie, użyj menu rozruchowego, aby wybrać poprzednie wdrożenie, lub skorzystaj z udokumentowanego procesu przywracania OSTree dla zainstalowanej wersji. Upewnij się, że uruchamia się wcześniejszy pulpit i że dane użytkownika pozostają nienaruszone. OSTree wersjonuje drzewo systemu operacyjnego; nie przywraca automatycznie plików osobistych ani nie cofa zmian wprowadzonych przez każdą aplikację w danych współdzielonych w systemie /var.
Przed zaakceptowaniem aktualizacji przetestuj menu rozruchowe i przygotuj sprawdzone, dobre wdrożenie.
8. Zdefiniuj proces aktualizacji i konserwacji
Aby zapewnić łatwość utrzymania pulpitu, każda aktualizacja systemu operacyjnego powinna pochodzić z nowego, weryfikowalnego zatwierdzenia drzewa. Zdecyduj, kto ją kompiluje, w jaki sposób aktualizacje pakietów Debiana trafiają do drzewa, jak testowane są aktualizacje jądra i oprogramowania sprzętowego, w jaki sposób zatwierdzenia docierają do klientów i jak długo przechowywane są poprzednie wersje. Jeśli użytkownicy potrzebują dodatkowych aplikacji, wybierz obsługiwaną metodę dostarczania aplikacji – taką jak Flatpak, jeśli jest to możliwe – zamiast po cichu zmieniać podstawowy system operacyjny za pomocą zwykłych poleceń APT.
Starannie zaplanuj stan. Nowsze wdrożenie może przenieść lokalne /etczmiany, ale zmiany konfiguracji mogą nadal wymagać weryfikacji przez administratora. Dane /varsą współdzielone między wdrożeniami, więc przywrócenie poprzedniej wersji systemu operacyjnego niekoniecznie oznacza przywrócenie schematu bazy danych lub formatu danych aplikacji. Pliki użytkownika powinny mieć własny plan tworzenia kopii zapasowych i odzyskiwania. Niezmienne pliki systemowe zwiększają możliwości przełączania wersji systemu operacyjnego; nie sprawiają, że cały stan komputera staje się transakcyjny.
Użyj tej opcji ostree admin status, aby potwierdzić, które wdrożenie jest aktywne i czy starsze nadal jest dostępne.
Praktyczna lista kontrolna gotowości
Kompilacja jest możliwa do powtórzenia i jest przeznaczona dla zamierzonej wersji i architektury Debiana.
Drzewo główne wykorzystuje oczekiwany układ konfiguracji OSTree, obejmuje odpowiednie jądro i initramfs oraz posiada wymagane sterowniki pulpitu.
Cel wykorzystuje obsługiwany przez Debian dracut i integrację bootloadera, przetestowaną na maszynie wirtualnej przed instalacją sprzętu.
Nowe wdrożenie zostanie uruchomione na pulpicie, a poprzednie wdrożenie może zostać wybrane i uruchomione.
Kopie zapasowe obejmują zarówno dane użytkownika, jak i każdy stan, którego nie da się przywrócić poprzez cofnięcie poprzedniej wersji systemu operacyjnego.
Istnieje udokumentowany proces aktualizacji pakietów, przebudowy obrazów, podpisywania lub weryfikowania wydań i testowania zmian jądra.
W przypadku hipotetycznego pulpitu Maya praktycznym rezultatem jest przetestowany obraz OSTree oparty na Debianie i powtarzalny sposób tworzenia jego kolejnego wdrożenia – a nie nieskażona instalacja Debiana, która magicznie staje się niezmienna. Zacznij od maszyny wirtualnej, zachowaj prostotę procesu aktualizacji i przejdź na sprzęt fizyczny dopiero po tym, jak integracja rozruchu, sterowniki pulpitu i ścieżka przywracania będą działać poprawnie dla docelowej maszyny.