Po trzech miesiącach prac rozwojowych dostępne premiera menedżera systemowego systemd 261. Kluczowe zmiany: przygotowanie do wsparcia API do weryfikacji wieku, wsparcie dla podsystemów Kexec Handover i Live Update Orchestration do ponownego uruchomienia bez utraty stanu, podsystem IMDS (Instance Metadata Service), funkcjonalność ochrony rozruchu na systemach bez fizycznego TPM (Trusted Platform Module), komponent systemd-sysinstall z realizacją instalatora.
Wśród zmian w nowym wydaniu:
- Dodano nowy komponent systemd-sysinstall z realizacją prostego instalatora systemu operacyjnego, którym można zarządzać z linii poleceń lub przez interaktywny tekstowy interfejs. Funkcjonalność systemd-sysinstall powstała na bazie już istniejących możliwości systemd: do konfiguracji partycji dyskowych wykorzystano systemd-repart, do instalacji jądra i generowania menu rozruchowego – komenda „bootctl link”, do instalacji bootloadera systemd-boot – komenda „bootctl install”, do wstępnej konfiguracji instalowanego systemu (np. wybór lokalizacji i układu klawiatury) – systemd-creds.
- W ramach przygotowań do realizacji wymogów ustaw o integracji w OS API do weryfikacji wieku w DB userdb dodano pole birthDate z datą urodzenia użytkownika. Dodane pole będzie mogło być używane w portalu xdg-desktop-portal, rozwijanym dla dystrybucji oraz w serwisie AccountsService do udostępniania aplikacjom informacji o kategorii wiekowej użytkownika przez interfejs D-Bus org.freedesktop.AgeVerification1 lub org.freedesktop.ParentalControls. Do ustawiania wieku w narzędziu homectl dodano opcję —birth-date.
- W obsłudze PID1 dodano wsparcie dla podsystemu jądra Linux LUO (Live Update Orchestration) i KHO (Kexec Handover), umożliwiające pełne ponowne uruchomienie i aktualizację jądra bez zatrzymywania działania oraz bez utraty stanu systemu, urządzeń i procesów. KHO zapewnia możliwości uruchomienia nowego jądra ze starego bez utraty stanu systemu, a LUO realizuje zachowanie stanu urządzeń i pamięci RAM, a także zapewnia ciągłość operacji związanych z DMA i obsługą przerwań.
W systemd dla jednostek systemowych i użytkowników zrealizowano możliwość zachowania deskryptorów plików przed wywołaniem kexec i ich przywracania po ponownym uruchomieniu jądra przez kexec. W jednostkach można również tworzyć własne sesje. LUO, przechowywane i przywracane podczas wykonania kexec. Aby włączyć przechowywanie stanu magazynu deskryptorów plików, należy użyć ustawienia FileDescriptorStorePreserve=yes. - Zrealizowano podsystem systemd-imdsd, dostarczający API oparte na Varlink IPC do uzyskiwania dostępu lokalnych programów do usług IMDS (Instance Metadata Service) oferowanych przez różnych dostawców chmur. IMDS umożliwia maszynom wirtualnym uzyskiwanie informacji o środowisku chmurowym, na przykład można uzyskać dane o konfiguracji sieciowej, lokalizacji geograficznej węzła, typie CPU i rozmiarze magazynu. W systemd-imdsd udostępniane jest zarówno niskopoziomowe API do uzyskiwania dostępu do poszczególnych pól, jak i wysokopoziomowy interfejs do zapytań o typowe klucze, odpowiadające kluczom specyficznym dla poszczególnych platform chmurowych. Do interakcji z systemd-imdsd dodano narzędzie systemd-imds, które pozwala importować pola z IMDS do lokalnego systemu kont.
Aby rozpoznać platformy chmurowe na podstawie informacji z SMBIOS i określić dostępną na bieżącym węźle funkcjonalność IMDS, dodano nową bazę danych hwdb.d/40-imds.hwdb. Zrealizowano rozpoznawanie platform chmurowych Amazon EC2, Microsoft Azure, Google Compute Engine, Hetzner, Oracle Cloud, Scaleway, Tencent Cloud, Alibaba ECS i Vultr. Dostępny jest generator systemd-imds-generator do automatycznego wstawiania usługi do uzyskiwania danych przez IMDS w przypadku wykrycia działania na wspieranej platformie chmurowej. Istnieje możliwość tworzenia uniwersalnych obrazów, które wspierają użycie IMDS podczas uruchamiania w środowiskach chmurowych, ale mogą działać także bez IMDS. - W systemd-stub zrealizowano funkcjonalność boot secret, która umożliwia utworzenie klucza na podstawie zmiennej EFI, przechowywanej w obszarze niedostępnym dla systemu operacyjnego i inicjowanej losową wartością. W initrd klucz przekazywany jest przez plik \/.extra\/boot-secret. Ta funkcjonalność może być potrzebna do uzyskania specyficznego dla systemu losowego klucza do weryfikacji procesu rozruchu lub szyfrowania na systemach bez sprzętowego TPM (Trusted Platform Module).
- Dodano usługę systemd-tpm2-swtpm.service do uruchamiania emulatora chipów TPM swtpm (Emulator TPM oprogramowania), który można wykorzystać do automatycznego przełączania na programową realizację TPM w celu zabezpieczonego uruchamiania na systemach bez sprzętowego TPM. Programowy TPM działa w przestrzeni użytkownika i nie zapewnia takiego samego poziomu ochrony jak sprzętowy TPM, ale w niektórych sytuacjach jego zastosowanie jest uzasadnione w porównaniu do braku TPM. Na przykład, programowy TPM może uzyskać klucz szyfrowania partycji poprzez nową funkcjonalność „boot secret” i wykorzystać do przechowywania swojego stanu partycję ESP (EFI System Partition) na dysku. Aby automatycznie włączyć programowy TPM, zaproponowano parametr wiersza poleceń jądra systemd.tpm2_software_fallback.
- Ogłoszono wersję stabilną i umieszczono w /usr/bin/ komponent systemd-sysupdate, przeznaczony do automatycznego wykrywania, pobierania i instalowania aktualizacji przy użyciu atomowego mechanizmu zamiany partycji, plików lub katalogów (wykorzystywanych są dwie niezależne partycje/pliki/katalogi, z których jeden zawiera aktualnie działający zasób, a drugi instalowane jest kolejne uaktualnienie, po czym partycje/pliki/katalogi są zamieniane miejscami).
- W systemd-resolved wprowadzono możliwość nadpisania lub podania nowych rekordów DNS poprzez umieszczanie plików w formacie JSON w katalogach systemd/resolve/static.d/. W przeciwieństwie do /etc/hosts w nowych plikach można nie tylko przypisywać adresy IP do nazw hostów, ale także definiować zasoby rekordów DNS RR, inne niż „A” i „AAAA”. Ponadto w systemd-resolved dodano ustawienia rozmiaru pamięci podręcznej DNS: DNSCacheSize, MulticastDNSCacheSize i LLMNRCacheSize.
- Dodano narzędzie ‘storagectl’ do inspekcji urządzeń pamięci masowej oraz zarządzania połączeniem urządzeń blokowych i systemów plików.
- W ramach inicjatywy w celu zmniejszenia zależności w libsystemd wprowadzono dynamiczne ładowanie bibliotek libgnutls, libmicrohttpd, libcurl, libcrypto, libssl, libfdisk i libcryptsetup przy użyciu wywołania dlopen() w sytuacjach, gdy ich funkcje są naprawdę potrzebne.
- W systemd-tmpfiles dodano flagę —inline, umożliwiającą podawanie dyrektyw w wierszu poleceń bez tworzenia plików konfiguracyjnych w tmpfiles.d/ i bez przesyłania ustawień przez STDIN. Dodano nowy typ dyrektyw k/K do ustawienia zdolnościami. Dodano plik konfiguracyjny tmpfiles.d/root.conf, ustawiający uprawnienia 0555 (-r-xr-xr-x) do katalogu głównego (/) w celu ochrony przed ustawieniem nieprawidłowych uprawnień podczas dynamicznego tworzenia głównego systemu plików.
- W narzędziu bootctl zapewniono zachowanie kopii zapasowej bootloadera systemd-boot i zapisanie starszej wersji w UEFI jako zapasowej opcji rozruchu.
- W systemd-vmspawn dodano obsługę bezpośredniego rozruchu jądra bez użycia oprogramowania UEFI. Wprowadzono opcję —firmware-features do selektywnego włączania lub wyłączania poszczególnych funkcji oprogramowania. Dodano tryb —console=headless do uruchamiania maszyny wirtualnej bez konsoli i ekranu. Dodano opcję —image-disk-type do wyboru stosowanego w VM typu pamięci blokowej (virtio-blk, virtio-scsi, nvme, scsi-cd). Dodano opcję —coco (Confidential Computing) do włączenia trybu szyfrowania pamięci maszyn wirtualnych z użyciem technologii AMD SEV-SNP.
- W systemd-hostnamed i /etc/machine-info dodano wsparcie do przypisywania dowolnych tagów do bieżącego systemu za pomocą parametru Tags. Wyznaczone tagi mogą być następnie stosowane do selektywnego zastosowania ustawień z weryfikacją przez wyrażenie ConditionMachineTag.
- Dodano ustawienia EventLoopRateLimitIntervalSec i EventLoopRateLimitBurst, ograniczające intensywność cyklu przetwarzania zdarzeń w PID1 w celu zwolnienia zasobów CPU w przypadku pętli.
- W menedżerze usług wprowadzono ustawienie MinimumUptimeSec do określenia minimalnego czasu pracy systemu (domyślnie 15 sekund). Jeśli przed upływem tego czasu zainicjowane zostanie zakończenie pracy lub ponowne uruchomienie, do etapu zamykania dodawane jest odpowiednie opóźnienie.
- Dla jednostek wprowadzono nowe ustawienia CPUSetPartition do określenia typu partycji cpuset w cgroup (root, isolated, member), RestrictFileSystemAccess do zezwolenia na uruchamianie tylko plików wykonywalnych, które zostały zweryfikowane za pomocą podpisu cyfrowego przy użyciu dm-verity, oraz CPUPressureWatch/CPUPressureThresholdSec/IOPressureWatch/IOPressureThresholdSec do uzyskiwania powiadomień o dużym obciążeniu CPU i wejściu/wyjściu.
- Rozszerzono listę metryk, które mogą być wydawane przez narzędzie systemd-report. Na przykład dodano informacje o rozmiarze pamięci fizycznej i aktywnych rdzeniach CPU, dane o zawartości pól SMBIOS oraz /etc/machine-info, informacje o wsparciu dla trybu Confidential Computing oraz informacje o producencie chipów TPM2.
- W systemd-oomd wprowadzono możliwość definiowania zasad do odrzucania procesów przy braku pamięci w systemie. Zasady można definiować w katalogu /etc/systemd/oomd/rules.d/ lub w jednostkach usługowych przez dyrektywę OOMRule.
- W systemd-socket-proxy dodano obsługę protokołu PROXY, który odpowiada pierwszej wersji protokołu haproxy.
- W systemd-networkd Wprowadzono nowy backend sd-dhcp-relay dla przekaźników DHCP. Ustawienia w sekcji [DHCPServer] — BindToInterface, RelayTarget, RelayAgentCircuitId i RelayAgentRemoteId zostały uznane za przestarzałe, zamiast nich należy używać parametru DHCPRelay w sekcji [Network] oraz szeregu nowych ustawień w sekcji [DHCPRelay] i w pliku networkd.conf. Dodano polecenie networkctl dhcp-lease INTERFACE do zachowywania zrzutu z informacjami o powiązaniach adresów IP (DHCP lease).
- W narzędziu systemd-nspawn Dodano opcję —restrict-address-families, a w plikach .nspawn ustawienie RestrictAddressFamilies, aby ograniczyć używane w kontenerze rodziny adresów gniazd. W przyszłych wersjach domyślnie będą dozwolone tylko rodziny AF_INET, AF_INET6 i AF_UNIX.
- Zaprzestano wspierania starego formatu bazy danych udev (wersja 0.x). Aktualizacja w trybie online z wersji systemd do wydania 247 (opennet.pl) nie jest już wspierany.
- Podczas budowy z biblioteką C musl wymagane jest teraz co najmniej wydanie musl 1.2.6.
Dodatkowo można zaznaczyć wydanie projektu liberated-systemd 261, rozwijającego fork systemd, pozbawiony kodu, który może być użyty do inwigilacji użytkowników. W zaproponowanej wersji zmiany polegają na usunięciu kodu, który dodaje do userdb pole birthDate z datą urodzenia użytkownika, oraz do narzędzia homectl opcji —birth-date do ustawiania wieku.
Źródło: linux.org.ru
