Jak zbudować pulpit Debiana jako niezmienny system oparty na OSTree

Przykładowy scenariusz: Wyobraź sobie, że Maya utrzymuje pulpit Debiana 13 używany do celów programistycznych i chce, aby aktualizacje systemu można było wycofać w pełnej wersji. Może wykorzystać ten cel do przetestowania pochodnej Debiana opartej na OSTree, ale nie powinna uruchamiać polecenia w swojej obecnej instalacji i oczekiwać, że stanie się ona niezmienna. OSTree potrzebuje drzewa systemowego, integracji z systemem rozruchowym oraz procesu aktualizacji zaprojektowanego z myślą o wdrożeniach.

OSTree przechowuje kompletne drzewa systemu plików jako wersjonowane zatwierdzenia i organizuje wdrożenia startowe. Nowe wdrożenie można wybrać do następnego uruchomienia, podczas gdy wcześniejsze pozostaje dostępne do wycofania. Zmienia to sposób budowania i aktualizacji systemu operacyjnego; nie przekształca ono automatycznie zwykłego zarządzania pakietami Debiana w system atomowy. Aktualny ostree-bootpakiet Debiana jest opisywany jako integracja z systemem pochodnym Debiana i wymaga systemu initramfs zbudowanego w DraCut oraz obsługiwanego bootloadera. Poniższe kroki opisują zatem testowalny przepływ pracy systemu pochodnego, a nie obsługiwaną konwersję zainstalowanego pulpitu Debiana za pomocą jednego polecenia.

Pulpit Debiana wyświetlany na monitorze obok okna maszyny wirtualnej i zewnętrznego dysku kopii zapasowej, ilustrujący przygotowania przed migracją OSTree.
Przed utworzeniem systemu OSTree wykonaj kopię zapasową pulpitu i przetestuj ścieżkę rozruchową na maszynie wirtualnej.

Co zmienia OSTree, a czego nie

OSTree to system wdrażania i aktualizacji systemu operacyjnego, a nie zamiennik repozytorium pakietów Debiana ani mechanizmu rozwiązywania zależności. Proces kompilacji nadal wymaga zainstalowania pakietów i złożenia kompletnego systemu plików głównego. OSTree następnie rejestruje i wdraża to drzewo. W przypadku aktualizacji proces kompilacji tworzy kolejne zatwierdzenie pełnego drzewa, a klient przełącza się na nie jako na wdrożenie. Właśnie dlatego środowisko OSTree wymaga powtarzalnego sposobu budowania obrazu systemu; uruchomienie apt upgradena aktywnym systemie głównym nie jest tym samym modelem aktualizacji.

„Niezmienny” to również użyteczny skrót, a nie stwierdzenie, że każdy plik na komputerze jest tylko do odczytu. W typowym wdrożeniu drzewo systemowe jest traktowane jako tylko do odczytu, podczas gdy /etcprzechowuje konfigurację komputera i /varma zmienny stan. Pliki użytkownika zazwyczaj znajdują się poza wersjonowanym drzewem systemu operacyjnego, często w /home. Obsługa tych ścieżek i wpisów rozruchowych przez OSTree jest częścią projektu systemu. Zmiany wprowadzone we wdrożeniu /usrnie są trwałym substytutem tworzenia nowego obrazu.

1. Zdecyduj, czy to podejście pasuje do Twojego pulpitu Debian

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:

sudo apt update
sudo apt install ostree ostree-boot 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:

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

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.

Koncepcja interfejsu oprogramowania przedstawia drzewo główne Debiana z jednej strony i zatwierdzenie OSTree rozgałęziające się na obiekty systemu plików z drugiej strony, co przedstawia przygotowane drzewo zarejestrowane jako wersja.
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.

Koncepcyjne menu rozruchowe pokazuje opcję Nowe wdrożenie wybrane powyżej opcji Poprzednie wdrożenie, ilustrując w ten sposób, w jaki system testowy może zaoferować wcześniejszą wersję do wycofania.
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.

Okno stanu OSTree w formie koncepcyjnej zawiera dwa wiersze wdrożenia i wskaźnik dostępności wycofania, reprezentujący kontrolę weryfikacyjną po wdrożeniu.
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.

Dokumentacja podstawowa

Zostaw komentarz

Ustaw publiczny adres URL NextCloud, aby mógł się do siebie dodzwonić

Napraw ostrzeżenie Nextcloud o brakującym adresie wychodzącym, ustawiając jego kanoniczny adres URL i sprawdzając routing DNS, HTTPS i odwrotnego serwera proxy na samym serwerze.

Konfigurowanie buforowania Nextcloud Redis w systemie Ubuntu 24.04

Konfigurowanie buforowania Nextcloud Redis w systemie Ubuntu 24.04

Skonfiguruj APCu i Redis przez lokalne gniazdo Unix na potrzeby buforowania i blokowania plików w usłudze Nextcloud, wraz z instrukcjami dla bieżących i starszych wersji usługi Nextcloud.

Uruchom automatycznie Nextcloud Cron za pomocą timera Systemd

Sprawdź tryb cron Nextcloud, napraw usługę systemd i timer oraz zweryfikuj, czy zadania w tle są uruchamiane po uruchomieniu i co pięć minut.

Usuń ostrzeżenie o blokowaniu plików w NextCloud za pomocą Redis

Włącz niezawodne blokowanie plików Nextcloud, wybierz odpowiedni serwer Redis lub Valkey i sprawdź, czy ostrzeżenie zostanie usunięte bez ryzyka równoczesnych zmian w plikach.

Co jest potrzebne, aby uzyskać ocenę bezpieczeństwa Nextcloud A+

Co jest potrzebne, aby uzyskać ocenę bezpieczeństwa Nextcloud A+

Napraw typowe błędy skanowania Nextcloud dzięki bieżącym aktualizacjom, protokołom HTTPS i HSTS, precyzyjnemu zaufaniu do odwrotnego serwera proxy i sprawdzeniu względem serwera publicznego.

Włącz szyfrowanie po stronie serwera Nextcloud z mierzalnym wpływem

Skonfiguruj Nextcloud SSE dla pamięci masowej, która tego wymaga, chroń klucze szyfrujące i zmierz wpływ transferu i procesora przed zaszyfrowaniem istniejących plików.

Dodaj wyszukiwanie pełnotekstowe Elasticsearch do NextCloud

Połącz wyszukiwarkę plików Nextcloud z Elasticsearch, zindeksuj zawartość dokumentów i wybierz konfigurację odpowiadającą Twoim potrzebom w zakresie serwera i bezpieczeństwa.

Ustaw niezawodną politykę wygasania dla usuniętych plików w usłudze NextCloud

Ustaw niezawodną politykę wygasania dla usuniętych plików w usłudze NextCloud

Skonfiguruj Nextcloud tak, aby usuwał usunięte pliki po upływie określonego czasu przechowywania, niezawodnie planował zadania w tle i unikał poleceń, które usuwają śmieci każdego użytkownika.

Ostrzeżenie o braku indeksów bazy danych NextCloud

Ostrzeżenie o braku indeksów bazy danych NextCloud

Wykonaj bezpieczną naprawę OCC w Nextcloud, przejrzyj zmiany w bazie danych i sprawdź, dlaczego ostrzeżenie może nadal się pojawiać.

Zwiększ limit przesyłania danych do sieci w NextCloud powyżej 2 GB

Zwiększ limit przesyłania danych do sieci w NextCloud powyżej 2 GB

Zezwól na przesyłanie większych plików przez przeglądarkę Nextcloud, dostosowując ustawienia PHP, Nginx lub Apache, tymczasowego miejsca przechowywania i limitu czasu — i sprawdź, który limit blokuje plik.