Twórcy projektu postmarketOS, rozwijającego dystrybucję Linux dla urządzeń mobilnych, ogłosili stworzenie wersji dystrybucji, która umożliwia atomowe aktualizacje. Nowa edycja rozwija się pod nazwą Duranium i charakteryzuje się tym, że system jest dostarczany jako całość, bez podziału na osobne pakiety. Zauważono, że nowa wersja odpowiada idei, że urządzenie powinno po prostu działać, bez konieczności, aby użytkownik miał wiedzę o istnieniu terminala i rozumiał specyfikę systemu.
Środowisko systemowe w sekcji /usr montowane jest w trybie tylko do odczytu z wykorzystaniem systemu plików EROFS i weryfikowane przy każdym uruchomieniu za pomocą podpisu cyfrowego. Sekcja /usr ma rozmiar 5GB. Aby kontrolować integralność danych w sekcji /usr, stosuje się dm-verity, a w przypadku wykrycia modyfikacji zawartości, uruchomienie jest blokowane. Kontrolny skrót jest wbudowany w zunifikowany obraz UKI (Unified Kernel Image), który łączy obsługę ładowania jądra z UEFI (UEFI boot stub), obraz jądra Linux oraz ładowane w pamięć środowisko systemowe initrd, stosowane do początkowej inicjalizacji przed montowaniem głównego systemu plików. Obraz UKI jest przedstawiany jako jeden plik wykonywalny w formacie PE i jest wywoływany przez bootloader UEFI.
Pozostałe katalogi, z wyjątkiem /usr, wchodzą w skład głównej sekcji, dostępnej do zapisu i zachowywanej pomiędzy ponownymi uruchomieniami i aktualizacjami. Zawartość głównej sekcji musi być szyfrowana przy użyciu LUKS2, co podnosi wymagania sprzętowe. Szyfrowany główny system plików jest tworzony podczas pierwszego uruchomienia lub po przywróceniu ustawień fabrycznych. Domyślnie tworzy się pusty klucz, pozwalający na automatyczne odblokowanie szyfrowanej sekcji. W kreatorze początkowej konfiguracji oraz w konfiguratorze użytkownik jest proszony o ustawienie hasła do deszyfrowania.
Ustawienia domyślne przechowywane są w składzie obrazu systemowego w katalogu /usr/share/factory/etc. Podczas pierwszego uruchomienia w katalogu /etc tworzone są linki symboliczne do wszystkich plików w /usr/share/factory/etc, z wyjątkiem plików passwd, group, shadow, fstab, machine-id i hostname. W razie potrzeby zmiany ustawień w trakcie pracy, link symboliczny jest zastępowany kopią pliku.
Aktualizacje są instalowane za pomocą zastąpienia całego obrazu systemowego. Na nośniku tworzone są dwa identyczne podziały główne - aktywny i pasywny. Nowa aktualizacja jest instalowana w pasywnym podziale, nie wpływając na działanie aktywnego. Po weryfikacji poprawności zainstalowanej aktualizacji oraz udanym ponownym uruchomieniu, podziały są zamieniane miejscami - podział z aktualizacją staje się aktywny, a poprzedni aktywny podział przechodzi w stan pasywny i czeka na instalację następnej aktualizacji. Jeśli po aktualizacji wystąpią problemy z uruchomieniem, następuje automatyczny powrót do poprzedniej wersji systemu.
Tego typu podejście znacznie ułatwia debugowanie i diagnostykę problemów, ponieważ programiści mogą dokładnie odtworzyć stan, w którym wystąpił błąd, bez potrzeby odtwarzania składu systemu użytkownika na poziomie poszczególnych pakietów i uwzględniania dostępnych kombinacji wersji pakietów. Wadą są wyższe wymagania sprzętowe, co uniemożliwi korzystanie z Duranium na wszystkich urządzeniach wspieranych w postmarketOS.
Zawartość obrazu systemowego Duranium jest tworzona z jednego repozytorium pakietowego postmarketOS, opartego na Alpine Linux, standardowej biblioteki C Musl oraz zestawie narzędzi BusyBox. Wydania postmarketOS i Duranium są niemal identyczne pod względem składu, ale różnią się metodami dostarczania systemu. Do tworzenia, instalacji i aktualizacji obrazów systemowych wykorzystywane są komponenty systemd-sysupdate, systemd-repart oraz systemd-verity-setup.
Dodatkowe aplikacje są instalowane w formacie Flatpak lub przy użyciu menedżera pakietów Coldbrew. Coldbrew pozwala na instalację pakietów z repozytoriów Alpine Linux w katalogu domowym użytkownika. Podczas uruchamiania takie pakiety są izolowane przy pomocy narzędzi bubblewrap.
Źródło: opennet.ru
