Po sześciu miesiącach prac zaprezentowano wersję menedżera systemu systemd 257. Kluczowe zmiany: nowe narzędzia systemd-sbsign i systemd-keyutil, wsparcie dla MPTCP przy aktywacji przez gniazdo, wstępne wsparcie dla budowy z biblioteką C Musl, narzędzie updatectl do zarządzania instalacją aktualizacji przez systemd-sysupdate, możliwość uruchamiania usług w oddzielnej przestrzeni PID, ochrona przed przypadkowym usunięciem plików przy użyciu „systemd-tmpfiles —purge”.
Wśród zmian w nowej wersji:
- Dodano nowe narzędzie systemd-sbsign do podpisywania plików wykonywalnych w formacie PE (Portable Executable) przeznaczonych do użycia podczas rozruchu w trybie EFI Secure Boot. Do tworzenia podpisu mogą być używane silniki i dostawcy udostępniani przez bibliotekę OpenSSL. Systemd-sbsign może być stosowane jako alternatywa dla aplikacji sbsigntool i pesign w narzędziu ukify przy tworzeniu uniwersalnych obrazów jądra UKI (Unified Kernel Image), które łączą w jednym pliku ładowarkę dla UEFI (UEFI boot stub), obraz jądra Linux i załadowane do pamięci środowisko systemowe initrd.
- Dodano nowe narzędzie systemd-keyutil, realizujące różne operacje na kluczach prywatnych i certyfikatach X.509. Na przykład, systemd-keyutil może być używane do sprawdzania możliwości ładowania kluczy prywatnych i certyfikatów, a także do wydobywania z nich kluczy publicznych w formacie PEM.
- W unitach „.socket”, używanych do zapewnienia działania mechanizmu aktywacji przez gniazdo (uruchamianie procesów przy próbie nawiązania połączenia sieciowego), zrealizowano wsparcie dla MPTCP (Multipath TCP), rozszerzenia protokołu TCP do organizacji pracy połączenia TCP z dostarczaniem pakietów jednocześnie przez wiele tras przez różne interfejsy sieciowe, przypisane do różnych adresów IP.
- Do zestawu dodano zmiany niezbędne do budowy z użyciem standardowej biblioteki C Musl.
- W różnych komponentach systemd, wyświetlających wskaźniki postępu operacji (np. systemd-repart, systemd-sysupdate/updatectl i importctl), dodano możliwość używania sekwencji ANSI do animowania wyświetlania postępu. Takie sekwencje są obecnie wspierane tylko w Windows Terminal (zakłada się, że w przyszłości ta funkcjonalność zostanie przeniesiona również do emulatorów terminali dla Linuksa).
- Rozszerzone możliwości komponentu systemd-sysupdate, używanego do automatycznego wykrywania, pobierania i instalowania aktualizacji z wykorzystaniem atomowego mechanizmu wymiany partycji, plików lub katalogów (używane są dwie niezależne partycje/pliki/katalogi, z których jedna zawiera aktualnie działający zasób, a druga jest wykorzystywana do instalacji kolejnej aktualizacji, po czym partycje/pliki/katalogi są zamieniane miejscami). W praktyce, systemd-sysupdate jest już stosowany w GNOME OS.
W dodatku do procesu systemd-sysupdate dodano serwis o tej samej nazwie, umożliwiający korzystanie z D-Bus do zarządzania aktualizacją systemu przez użytkownika nieuprzywilejowanego. Aby zarządzać serwisem, w zestawie dodano również nowe narzędzie updatectl. W systemd-sysupdate dodano flagę „—offline”, aby zakazać pobierania metadanych przez sieć i korzystać wyłącznie z wersji już pobranych na lokalny system. Do wszystkich poleceń dodano wsparcie dla wyjścia w formacie JSON.
- Dla serwisów wprowadzono nową właściwość „PrivatePIDs”, dzięki której można zorganizować uruchamianie procesów z PID 1 (proces init) w oddzielnej przestrzeni identyfikatorów procesów (PID namespace). W stworzonym dla uruchamianego procesu środowisku widoczne będą tylko procesy z utworzonej dla niego przestrzeni nazw.
- Do reguł udev dodano wsparcie dla dopasowań bez uwzględniania wielkości liter (np. ‘ATTR{foo}==”abcd”‘). Poprzez udev zrealizowano udostępnienie nieuprzywilejowanym lokalnym użytkownikom dostępu („uaccess”) do urządzenia /dev/udmabuf, które jest niezbędne do pracy z kamerami IPMI poprzez libcamera. W udev zapewniono rozpoznawanie różnych sprzętowych portfeli kryptograficznych z interfejsem USB i przypisanie im właściwości ID_HARDWARE_WALLET, co umożliwia zastosowanie trybu „uaccess” dla dostępu nieuprzywilejowanych użytkowników.
- Do pliku /etc/os-release dodano nowe pola RELEASE_TYPE, EXPERIMENT i EXPERIMENT_URL. „RELEASE_TYPE” może przyjmować wartości „experimental”, „development”, „stable” i „lts”, aby oddzielić stabilne wersje od wersji w fazie rozwoju i eksperymentalnych kompilacji. Parametry EXPERIMENT i EXPERIMENT_URL służą do wyjaśnienia charakterystyki eksperymentalnej kompilacji.
- Do narzędzia run0, rozwijanego jako zamiennik programu sudo, dodano opcję „—shell-prompt-prefix”, która określa ciąg prefiksu zaproszenia powłoki. Domyślnie jako prefiks wyświetlany jest emoji „🦸” dla wyróżnienia sesji z podniesionymi uprawnieniami.
- W systemd-tmpfiles, aby uniknąć przypadkowego usunięcia niewłaściwych plików, opcja „—purge” jest obecnie stosowana tylko do ustawień w tmpfiles.d/, dla których wyraźnie ustawiono znacznik „$”. Aby przeprowadzić operację „—purge”, należy również wskazać co najmniej jeden plik z katalogu tmpfiles.d/. Do wierszy z typem 'L' dodano znacznik '?', przy wskazaniu którego link symboliczny będzie tworzony tylko w przypadku istnienia docelowego pliku.
- W menedżerze usług i powiązanych narzędziach kontynuowano przekształcanie kodu śledzenia procesów na użycie PIDFD zamiast PID. Identyfikator PIDFD jest powiązany z konkretnym procesem i nie zmienia się, podczas gdy PID może być przypisany do innego procesu po zakończeniu bieżącego procesu związanego z tym PID.
- Dla usług wprowadzono możliwość określenia w parametrze „RestartMode” wartości „debug”, przy której ponowne uruchomienie awaryjnej usługi zostanie wykonane z włączonym trybem debugowania (ustanowiona zmienna środowiskowa DEBUG_INVOCATION=1), a wartość LogLevelMax zostanie tymczasowo podniesiona do poziomu debugowania.
- W obsłudze PID 1 dodano możliwość ładowania reguł dla modułu LSM IPE (Integrity Policy Enforcement), które definiują politykę zapewnienia integralności dla całego systemu (jakie operacje są dozwolone i w jaki sposób należy weryfikować autentyczność komponentów).
- Do plików jednostek „.timer” dodano opcję „DeferReactivation”, która pozwala pominąć kolejną aktywację według timera, jeśli usługa nie zakończyła jeszcze swojego działania od czasu ostatniej aktywacji.
- W parametrze plików jednostek PrivateUsers wprowadzono możliwość ustawienia wartości „identity” w celu włączenia mapowania identyfikatorów użytkowników podczas tworzenia przestrzeni nazw (user namespace).
- W parametrze plików jednostek PrivateTmp dodano wsparcie dla wartości „disconnected”, przy której dla katalogów /tmp/ i /var/tmp/ będą wykorzystywane oddzielne instancje tmpfs.
- W parametrze unit plików ProtectControlGroups dodano wsparcie dla nowych trybów „private” i „strict”, przy ustawieniu których dla usługi tworzona jest nowa przestrzeń nazw cgroup (cgroup namespace) oraz montowane jest cgroupfs. Przy ustawieniu opcji „strict” montowanie cgroupfs odbywa się w trybie tylko do odczytu.
- W parametrach StateDirectory, RuntimeDirectory, CacheDirectory, LogsDirectory i ConfigurationDirectory dodano możliwość używania flagi ‘:ro’ w celu ograniczenia dostępu do odpowiednich katalogów w trybie tylko do odczytu.
- Do parametru wiersza poleceń jądra „systemd.machine_id” dodano wsparcie dla wartości „firmware”, w której identyfikator systemu (machine ID) będzie obliczany na podstawie UUID z SMBIOS/DeviceTree.
- Dodano wsparcie dla wywołań systemowych mseal(), listmount() i statmount(), które pojawiły się w ostatnich wydaniach jądra Linux.
- Do narzędzi resolvectl, timedatectl i systemd-inhibit dodano wsparcie dla interaktywnej autoryzacji przy użyciu Polkit.
- Do narzędzia systemctl dodano możliwość używania flagi „—now” w komendzie „reenable”.
- Do narzędzia systemd-mount dodano opcję „—json” do wyjścia w formacie JSON (na przykład, przy użyciu razem z „—list-devices” w formacie JSON zostanie wyświetlona lista urządzeń).
- Do narzędzia „localectl” dodano opcje „-l” i „—full” w celu wyłączenia obcinania długich linii podczas wyjścia.
- W sleep.conf dodano opcję HibernateOnACPower, która pozwala opóźnić przełączenie w tryb uśpienia do momentu odłączenia urządzenia od stacjonarnego źródła zasilania.
- W systemd-sysusers w wierszu „u” dodano wsparcie dla modyfikatora „!”, dzięki któremu można tworzyć całkowicie zablokowane konta użytkowników (wcześniej do blokowania użytkownika używano ustawienia niepoprawnego hasła, co na przykład nie prowadziło do zablokowania podczas uwierzytelniania przy użyciu kluczy w SSH).
- W systemd-coredump dodano opcję „EnterNamespace”, która zapewnia dostęp do przestrzeni punktów montowania wszelkich procesów, które zakończyły się awarią, w celu uzyskania ich symboli debugowania. W praktyce opcja ta może być przydatna do organizacji odwrotnego śledzenia (backtrace) plików core z aplikacji uruchamianych w izolowanych kontenerach.
- W systemd-logind włączono przetwarzanie kombinacji Ctrl-Alt-Shift-Esc, aby wysłać komponentom środowiska użytkownika sygnał org.freedesktop.login1.SecureAttentionKey z prośbą o wyświetlenie okna bezpiecznego logowania. Zrealizowano ustawienie „DesignatedMaintenanceTime” do automatycznego planowania wyłączenia w wyznaczonym czasie. Na wzór wsparcia dla urządzeń DRM i evdev dodano wsparcie dla konfiguracji dostępu nieuprzywilejowanych użytkowników do urządzeń hidraw (kontrolery gier i joysticki).
- W systemd-machined dodano wsparcie dla rejestracji przez klientów nieuprawnionych maszyn wirtualnych i kontenerów. Umożliwiono dostęp do funkcjonalności systemd-machined poprzez API Varlink, oprócz D-Bus.
- Do pliku konfiguracyjnego networkd.conf dodano nową sekcję „[IPv6AddressLabel]” do konfigurowania etykiet i prefiksów dla adresów IPv6.
- Do polecenia 'networkctl edit' dodano opcję „—stdin” do pobierania zawartości pliku z standardowego strumienia. W poleceniach 'networkctl edit' oraz 'networkctl cat' dodano wsparcie dla edytowania i wyświetlania plików .netdev poprzez wskazanie interfejsu sieciowego. Dodano opcję „—no-ask-password” do wyłączenia interaktywnej autoryzacji.
- W narzędziach ukify, bootctl, systemd-keyutil, systemd-measure, systemd-repart oraz systemd-sbsign dodano opcję „—certificate-source” do ładowania certyfikatu X.509 za pośrednictwem dostawcy OpenSSL zamiast bezpośredniego ładowania z pliku.
- W systemd-boot dodano możliwość używania przycisków głośności do poruszania się w górę i w dół po menu rozruchowym, co może być przydatne na takich urządzeniach jak smartfony. W narzędziu bootctl dodano wsparcie dla ustawiania bazy danych UEFI Secure Boot w formacie ESL(db/dbx/…) dla systemd-boot.
- W journalctl dodano opcję „—list-invocation” do wyświetlania listy wywołań jednostek oraz opcję „—invocation” („-I”) do wyświetlania logów związanych tylko z określonym wywołaniem.
- W systemd-nspawn dodano wsparcie dla nieuprzywilejowanego użycia FUSE (Filesystem in Userspace) w kontenerach. Przy użyciu opcji „—bind-user” zapewniono przekazywanie do kontenera kluczy SSH użytkownika, niezbędnych do dostępu przez SSH.
- W libsystemd dodano nowy interfejs programowania „sd-json”, wykorzystujący format JSON, oraz interfejs „sd-varlink”, wykorzystujący IPC Varlink.
- Zalecana wersja podstawowa jądra została podniesiona do wydania 5.4, stworzonego w 2019 roku. W przyszłym roku planuje się zakończenie wsparcia dla starszych jąder i uznanie wydania 5.4 za minimalnie wspieraną wersję podstawową.
- Wsparcie dla cgroups v1 zostało uznane za przestarzałe i domyślnie wyłączone (aby włączyć je w linii poleceń jądra, należy podać SYSTEMD_CGROUP_ENABLE_LEGACY_FORCE=1 oprócz aktywacji w ustawieniach systemd). W kolejnej wersji systemd 258 planowane jest całkowite usunięcie kodu związanego z cgroups v1. W wersji systemd 258 planowane jest również usunięcie wsparcia dla skryptów usług System V.
Źródło: opennet.ru
