Nach zwei Monaten Entwicklung wird die Version 242 des Systemmanagers systemd veröffentlicht. Zu den Neuerungen gehören die Unterstützung von L2TP-Tunneln, die Möglichkeit, das Verhalten von systemd-logind beim Neustart über Umgebungsvariablen zu steuern, die Unterstützung erweiterter Boot-Partitionen XBOOTLDR für die Einbindung von /boot, die Möglichkeit, von der Root-Partition in overlayfs zu booten, sowie eine große Anzahl neuer Einstellungen für verschiedene Einheitstypen.
Wesentliche Änderungen:
- In systemd-networkd wird die Unterstützung von L2TP-Tunneln gewährleistet;
- In sd-boot und bootctl wurde die Unterstützung für XBOOTLDR-Partitionen (Extended Boot Loader) umgesetzt, die für die Einbindung in /boot vorgesehen sind, zusätzlich zu den ESP-Partitionen, die in /efi oder /boot/efi gemountet werden. Kernel, Einstellungen, initrd-Images und EFI können jetzt sowohl aus ESP- als auch aus XBOOTLDR-Partitionen geladen werden. Diese Änderung ermöglicht es, den Bootloader sd-boot in konservativeren Szenarien zu verwenden, in denen der Bootloader selbst in ESP gespeichert ist und die zu ladenden Kernel und die zugehörigen Metadaten in eine separate Partition ausgelagert sind;
- Die Möglichkeit wurde hinzugefügt, mit der Option „systemd.volatile=overlay“ zu booten, was es ermöglicht, die Root-Partition in overlayfs zu platzieren und den Zugriff auf ein schreibgeschütztes Root-Image zu organisieren, wobei Änderungen in ein separates Verzeichnis in tmpfs geschrieben werden (Änderungen in dieser Konfiguration gehen nach einem Neustart verloren). Analog dazu wurde in systemd-nspawn die Option „—volatile=overlay“ hinzugefügt, um ähnliche Funktionen in Containern zu nutzen;
- In systemd-nspawn wurde die Option „—oci-bundle“ hinzugefügt, die es ermöglicht, Runtime-Pakete zu verwenden, um isolierte Container zu starten, die den Anforderungen der Spezifikation der Open Container Initiative (OCI) entsprechen. Für die Verwendung in der Kommandozeile und nspawn-Units wurde die Unterstützung für verschiedene Optionen vorgeschlagen, die in der OCI-Spezifikation beschrieben sind; beispielsweise können „—inaccessible“ und „Inaccessible“ verwendet werden, um Teile des Dateisystems auszuschließen, während für die Konfiguration der Standardausgabeoptionen „—console“ und „—pipe“ hinzugefügt wurden;
- Die Möglichkeit zur Steuerung des Verhaltens von systemd-logind über Umgebungsvariablen wurde hinzugefügt: $SYSTEMD_REBOOT_TO_FIRMWARE_SETUP,
$SYSTEMD_REBOOT_TO_BOOT_LOADER_MENU und
$SYSTEMD_REBOOT_TO_BOOT_LOADER_ENTRY. Mit diesen Variablen können eigene Handlers für den Neustartsprozess angeschlossen werden (/run/systemd/reboot-to-firmware-setup, /run/systemd/reboot-to-boot-loader-menu und
/run/systemd/reboot-to-boot-loader-entry) или вообще отключить их (при выставлении значения в false); - Zu dem Befehl „systemctl reboot“ wurden die Optionen „—boot-load-menu=“ und
„—boot-loader-entry=“ hinzugefügt, die es ermöglichen, nach einem Neustart einen bestimmten Punkt im Boot-Menü oder einen Boot-Modus auszuwählen; - Ein neuer Sandbox-Isolationsbefehl „RestrictSUIDSGID=“ wurde hinzugefügt, der seccomp verwendet, um die Erstellung von Dateien mit SUID/SGID-Flags zu verbieten;
- Standardeinschränkungen „NoNewPrivileges“ und „RestrictSUIDSGID“ in Diensten, die im Modus zur dynamischen Generierung von Benutzerkennungen („DynamicUser“) aktiviert sind, werden nun angewendet;
- Die standardmäßig in .link-Dateien verwendete Einstellung MACAddressPolicy=persistent wurde geändert, um eine größere Anzahl an Geräten abzudecken. Netzwerkschnittstellen von Brücken, Tunneln (tun, tap) und Aggregatverbindungen (bond) identifizieren sich nicht anders als über den Namen der Netzwerkschnittstelle; daher wird dieser Name jetzt als Basis für die Bindung von MAC- und IPv4-Adressen verwendet. Zudem wurde die Einstellung „MACAddressPolicy=random“ hinzugefügt, die verwendet werden kann, um MAC- und IPv4-Adressen zufällig den Geräten zuzuweisen;
- Die durch den systemd-fstab-generator generierten '.device'-Einheiten enthalten jetzt keine zugehörigen '.mount'-Einheiten mehr als Abhängigkeiten im Abschnitt 'Wants='. Das einfache Anschließen eines Geräts führt nun nicht mehr automatisch zum Start der Mount-Einheit, dennoch können solche Einheiten weiterhin aus anderen Gründen gestartet werden, beispielsweise als Teil von local-fs.target oder als Abhängigkeit von anderen Einheiten, die von local-fs.target abhängig sind.
- Die Befehle 'networkctl list/status/lldp' haben Unterstützung für Masken ('*' usw.) hinzugefügt, um bestimmte Gruppen von Netzwerkinterfaces anhand ihres Namens herauszufiltern.
- Die Umgebungsvariable $PIDFILE wird jetzt mit dem absoluten Pfad gesetzt, der in den Diensten über den Parameter 'PIDFile=' konfiguriert ist.
- Zu den Backup-DNS-Servern, die verwendet werden, wenn kein primärer DNS explizit festgelegt ist, gehören öffentliche Server Cloudflare (1.1.1.1). Um die Liste der Backup-DNS-Server zu überschreiben, kann die Option '-Ddns-servers=' verwendet werden.
- Bei der Erkennung eines USB-Gerätesteuerungsgeräts wird automatisch der neue Handler usb-gadget.target gestartet (wenn das System auf einem USB-Gerät läuft).
- Для unit-файлов реализована настройка «CPUQuotaPeriodSec=», определяющая период времени, относительно которого измеряется квота на процессорное время, задаваемая через настройку «CPUQuota=»;
- Для unit-файлов реализована настройка «ProtectHostname=», запрещающая сервисам изменять информацию об имени хоста, даже при наличии соответствующих полномочий;
- Для unit-файлов реализована настройка «NetworkNamespacePath=», позволяющая привязать пространство имён к сервисам или socket-юнитам через указание пути к файлу пространства имён в псевдо-ФС /proc;
- Добавлена возможность отключения подстановки переменных окружения процессам, запускаемым при помощи настройки «ExecStart=», через добавление символа «:» перед командой запуска;
- Для таймеров (юниты .timer) предложены новые флаги «OnClockChange=» и
«OnTimezoneChange=», при помощи которых можно управлять вызовом юнита при изменении системного времени или часового пояса; - Добавлены новые настройки «ConditionMemory=» и «ConditionCPUs=», определяющие условия вызова юнита в зависимости от размера памяти и числа ядер CPU (например, ресурсоёмкий сервис можно запускать только если имеется необходимый объем ОЗУ);
- Eine neue Einheit time-set.target wurde hinzugefügt, die die lokal eingestellte Systemzeit akzeptiert, ohne die Synchronisation mit externen Zeitservern über die Einheit time-sync.target. Diese neue Einheit kann von Diensten verwendet werden, die mit der Genauigkeit nicht synchronisierter lokaler Uhren auskommen.
- Bei ‚systemctl start‘ und ähnlichen Befehlen wurde die Option ‚—show-transaction‘ hinzugefügt, die eine Zusammenfassung aller Arbeiten ausgibt, die aufgrund der angeforderten Operation in die Warteschlange aufgenommen wurden.
- In systemd-networkd wurde ein neuer Status ‚enslaved‘ implementiert, der anstelle von ‚degraded‘ oder ‚carrier‘ für Netzwerkschnittstellen verwendet wird, die Teil von aggregierten Links oder Netzbrücken sind. Für primäre Schnittstellen wurde im Falle von Problemen mit einem der zusammengestellten Links der Status ‚degraded-carrier‘ hinzugefügt.
- In die .network-Einheiten wurde die Option ‚IgnoreCarrierLoss=‘ eingefügt, um die Netzwerkeinstellungen im Falle eines Verbindungsabbruchs zu erhalten.
- Durch die Einstellung ‚RequiredForOnline=‘ in den .network-Einheiten kann jetzt der minimal zulässige Status des Links festgelegt werden, der erforderlich ist, um die Netzwerkschnittstelle auf ‚online‘ zu setzen und den Handler systemd-networkd-wait-online auszulösen.
- In systemd-networkd-wait-online wurde die Option „—any“ hinzugefügt, um auf die Verfügbarkeit eines der angegebenen Netzwerkinterfaces anstelle aller zu warten, sowie die Option „—operational-state=“, um den Zustand des Links zu bestimmen, der die Bereitschaft anzeigt;
- In den .network-Einheiten wurden die Einstellungen „UseAutonomousPrefix=“ und „UseOnLinkPrefix=“ hinzugefügt, die dazu verwendet werden können, Präfixe beim Empfang zu ignorieren
von IPv6-Router-Ankündigungen (RA, Router Advertisement); - In den .network-Einheiten wurden die Einstellungen „MulticastFlood=“, „NeighborSuppression=“ und „Learning=“ hinzugefügt, um die Parameter des Netzwerkbrückenbetriebes zu ändern, sowie die Einstellung „TripleSampling=“, um den TRIPLE-SAMPLING-Modus virtueller CAN-Interfaces zu ändern;
- In den .netdev-Einheiten wurden die Einstellungen „PrivateKeyFile=“ und „PresharedKeyFile=“ hinzugefügt, mit denen Sie private und geteilte (PSK) Schlüssel für WireGuard-Interfaces angeben können. VPN;
- In /etc/crypttab wurden die Optionen same-cpu-crypt und submit-from-crypt-cpus hinzugefügt, die das Verhalten des Planers steuern, wenn zwischen CPU-Kernen bei Arbeiten, die mit der Verschlüsselung verbunden sind, migriert wird;
- In systemd-tmpfiles wird die Bearbeitung der Sperrdatei vor der Ausführung von Operationen in Verzeichnissen mit temporären Dateien gewährleistet, was es ermöglicht, während bestimmter Aktionen die Reinigung veralteter Dateien auszuschalten (zum Beispiel können beim Entpacken eines tar-Archivs in /tmp sehr alte Dateien aufgedeckt werden, die bis zum Abschluss der Aktion nicht gelöscht werden können);
- Im Befehl „systemd-analyze cat-config“ wurde die Möglichkeit hinzugefügt, die in mehreren Dateien verteilte Konfiguration zu analysieren, z. B. Benutzer- und Systemvorgaben, Inhalte von tmpfiles.d und sysusers.d, udev-Regeln usw.
- In „journalctl“ wurde die Option „—cursor-file=“ hinzugefügt, um eine Datei zum Laden und Speichern des Positionierungszeigers festzulegen;
- In systemd-detect-virt wurde die Erkennung des Hypervisors ACRN und des Windows Subsystem for Linux (WSL) hinzugefügt, um anschließendes Verzweigen durch den bedingten Operator „ConditionVirtualization“ zu ermöglichen;
- Während der Installation von systemd (bei der Ausführung von „ninja install“) wurde die Erstellung von symbolischen Links im Verzeichnis /etc zu den Dateien systemd-networkd.service, systemd-networkd.socket eingestellt,
systemd-resolved.service, remote-cryptsetup.target, remote-fs.target,
Für die Erstellung dieser Dateien ist es nun erforderlich, den Befehl „systemctl preset-all“ auszuführen.
Quelle: opennet.ru
