Nach zwei Monaten Entwicklung wird die Version 242 des systemd-Systemmanagers 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 zum Mounten von /boot, die Möglichkeit, mit einer root-Partition in overlayfs zu booten, sowie eine große Anzahl neuer Einstellungen für verschiedene Einheitstypen.
Hauptänderungen:
- In systemd-networkd wurde die Unterstützung von L2TP-Tunneln gewährleistet;
- In sd-boot und bootctl wurde die Unterstützung für XBOOTLDR-Partitionen (Extended Boot Loader) implementiert, die für das Mounten in /boot vorgesehen sind, zusätzlich zu den ESP-Partitionen, die in /efi oder /boot/efi gemountet werden. Kerne, Konfigurationen, initrd-Abbilder und EFI können jetzt sowohl aus ESP- als auch aus XBOOTLDR-Partitionen geladen werden. Diese Änderung ermöglicht den Einsatz des Bootloaders sd-boot in konservativeren Szenarien, in denen der Bootloader selbst in ESP platziert ist und die zu ladenden Kerne sowie die zugehörigen Metadaten in eine separate Partition ausgelagert sind;
- Es wurde die Möglichkeit hinzugefügt, mit der Option «systemd.volatile=overlay» Kernel-Optionen zu übergeben, was es ermöglicht, die root-Partition in overlayfs unterzubringen und den Zugriff auf ein nur-lesbares Abbild des Root-Verzeichnisses 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 eine ähnliche Funktionalität in Containern zu nutzen;
- In systemd-nspawn wurde die Option «—oci-bundle» hinzugefügt, die es ermöglicht, Runtime-Sets für den isolierten Start von Containern zu nutzen, die den Anforderungen der Spezifikation Open Container Initiative (OCI) entsprechen. Für die Verwendung in der Befehlszeile und nspawn-Einheiten wird die Unterstützung verschiedener Optionen vorgeschlagen, die in der OCI-Spezifikation beschrieben sind, zum Beispiel können die Einstellungen «—inaccessible» und «Inaccessible» verwendet werden, um Teile des Dateisystems auszuschließen, und die Optionen «—console» und «—pipe» wurden zur Konfiguration der Standardausgabeströme hinzugefügt;
- Es wurde die Möglichkeit hinzugefügt, das Verhalten von systemd-logind über Umgebungsvariablen zu steuern: $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 Neustartprozess 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;
- Standardmäßig werden die Einschränkungen „NoNewPrivileges“ und „RestrictSUIDSGID“ in Diensten mit aktivierter dynamischer Benutzerid-Generierung („DynamicUser“) angewendet;
- Die standardmäßige Einstellung MACAddressPolicy=persistent in .link-Dateien wurde geändert, um eine größere Anzahl von Geräten abzudecken. Netzwerkschnittstellen von Brücken, Tunneln (tun, tap) und aggregierten Links (bond) identifizieren sich nicht anders als durch den Namen der Netzwerkschnittstelle, weshalb dieser Name nun als Grundlage für die Bindung von MAC- und IPv4-Adressen verwendet wird. Darüber hinaus wurde die Einstellung „MACAddressPolicy=random“ hinzugefügt, die verwendet werden kann, um MAC- und IPv4-Adressen zufällig an Geräte zu binden;
- Die durch systemd-fstab-generator generierten .device-Einheiten enthalten jetzt nicht mehr die entsprechenden .mount-Einheiten als Abhängigkeiten im Abschnitt „Wants=“. Das einfache Anschließen eines Geräts führt nun nicht mehr zur automatischen Ausführung der Einheit zum Mounten, aber diese Einheiten können 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ängen;
- Den Befehlen „networkctl list/status/lldp“ wurde die Unterstützung für Masken („*“ usw.) hinzugefügt, um bestimmte Gruppen von Netzwerkschnittstellen nach ihrem Namen herauszufiltern;
- Die Umgebungsvariable $PIDFILE wird jetzt mit einem absoluten Pfad festgelegt, der in Diensten über den Parameter „PIDFile=“ konfiguriert wird;
- Die Liste der Backup-DNS-Server, die verwendet werden, wenn kein primärer DNS ausdrücklich definiert ist, wurde um die öffentlichen Server Cloudflare (1.1.1.1) erweitert. Um die Liste der Backup-DNS-Server zu überschreiben, kann die Option „-Ddns-servers=“ verwendet werden;
- Bei der Erkennung eines USB-Gerätesteuerers wird der neue Handler usb-gadget.target automatisch gestartet (wenn das System auf einem USB-Peripheriegerät läuft);
- Für die Unit-Dateien wurde die Einstellung „CPUQuotaPeriodSec=“ implementiert, die den Zeitraum definiert, auf den sich das über die Einstellung „CPUQuota=“ festgelegte Kontingent für die Prozessortime bezieht;
- Für Unit-Dateien wurde die Einstellung „ProtectHostname=“ implementiert, die es Diensten verbietet, Informationen über den Hostnamen zu ändern, selbst wenn die entsprechenden Berechtigungen vorhanden sind;
- Für Unit-Dateien wurde die Einstellung „NetworkNamespacePath=“ implementiert, die es ermöglicht, einen Namespace an Dienste oder Socket-Units zu binden, indem der Pfad zur Namespace-Datei im Pseudodateisystem /proc angegeben wird;
- Die Möglichkeit, die Ersetzung von Umgebungsvariablen für Prozesse zu deaktivieren, die über die Einstellung „ExecStart=“ gestartet werden, wurde hinzugefügt, indem ein Doppelpunkt „:“ vor dem Startbefehl hinzugefügt wird;
- Für Timer (Unit-Dateien .timer) wurden neue Flags „OnClockChange=“ und
„OnTimezoneChange=“ angeboten, mit Hilfe derer der Aufruf der Einheit bei Änderungen der Systemzeit oder der Zeitzone gesteuert werden kann; - Es wurden neue Einstellungen „ConditionMemory=“ und „ConditionCPUs=“ hinzugefügt, die Bedingungen für den Aufruf der Einheit in Abhängigkeit von der Speichermenge und der Anzahl der CPU-Kerne definieren (zum Beispiel kann ein ressourcenintensiver Dienst nur gestartet werden, wenn genügend RAM vorhanden ist);
- Es wurde eine neue Einheit time-set.target hinzugefügt, die die lokal eingestellte Systemzeit annimmt, ohne ein Abgleich mit externen Zeitservern über die Einheit time-sync.target zu verwenden. Diese neue Einheit kann von Diensten verwendet werden, denen die Genauigkeit nicht synchronisierter lokaler Uhren ausreicht;
- In „systemctl start“ und ähnlichen Befehlen wurde die Option „—show-transaction“ hinzugefügt, bei der eine Zusammenfassung aller Arbeiten angezeigt wird, die aufgrund der angeforderten Operation in die Warteschlange hinzugefügt wurden;
- In systemd-networkd wurde die Bestimmung eines neuen Status 'enslaved' implementiert, der anstelle von 'degraded' oder 'carrier' für Netzwerkinterfaces verwendet wird, die Teil aggregierter Links oder Netzwerkbrücken sind. Für primäre Interfaces wurde im Falle von Problemen mit einem der zusammengesetzten Links der Status 'degraded-carrier' hinzugefügt;
- In die Unit-Dateien .network wurde die Option „IgnoreCarrierLoss=“ hinzugefügt, um die Netzwerkeinstellungen im Falle eines Verbindungsabbruchs beizubehalten;
- Über die Einstellung „RequiredForOnline=“ in den Unit-Dateien .network kann nun der minimal zulässige Zustand des Links festgelegt werden, der erforderlich ist, um das Netzwerkinterface in den „online“-Zustand zu versetzen und den Handler systemd-networkd-wait-online auszulösen;
- In systemd-networkd-wait-online wurde die Option „—any“ hinzugefügt, um auf die Bereitschaft eines beliebigen der angegebenen Netzwerkinterfaces anstelle von allen zu warten, sowie die Option „—operational-state=“, um den Zustand des Links festzulegen, der auf die Bereitschaft hinweist;
- In .network wurden die Einstellungen „UseAutonomousPrefix=“ und „UseOnLinkPrefix=“ hinzugefügt, die verwendet werden können, um Präfixe beim Empfang von
IPv6-Routeranzeigen (RA, Router Advertisement) zu ignorieren; - In .network wurden die Einstellungen „MulticastFlood=“, „NeighborSuppression=“ und „Learning=“ hinzugefügt, um die Betriebsparameter des Netzwerkbrücke zu ändern, sowie die Einstellung „TripleSampling=“, um den TRIPLE-SAMPLING-Modus für virtuelle CAN-Schnittstellen zu ändern;
- In .netdev wurden die Einstellungen „PrivateKeyFile=“ und „PresharedKeyFile=“ hinzugefügt, mit denen Sie private und gemeinsame (PSK) Schlüssel für die WireGuard-Schnittstellen 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 bei der Migration zwischen CPU-Kernen für kryptografische Aufgaben steuern;
- In systemd-tmpfiles wurde die Verarbeitung der Sperrdatei vor der Ausführung von Vorgängen in Verzeichnissen mit temporären Dateien ermöglicht, was es erlaubt, während der Ausführung bestimmter Aktionen die Reinigung veralteter Dateien auszuschalten (zum Beispiel können beim Entpacken eines tar-Archivs in /tmp sehr alte Dateien enthüllt werden, die nicht gelöscht werden können, bis mit ihnen abgeschlossen ist);
- Im Befehl „systemd-analyze cat-config“ wurde die Möglichkeit der Analyse von Konfigurationen, die auf mehrere Dateien verteilt sind, wie z.B. Benutzer- und Systemvorgaben, Inhalte von tmpfiles.d und sysusers.d, udev-Regeln usw., integriert.
- In „journalctl“ wurde die Option „—cursor-file=“ hinzugefügt, um eine Datei zum Laden und Speichern des Positionszeigers festzulegen;
- In systemd-detect-virt wurde die Erkennung des Hypervisors ACRN und des WSL (Windows Subsystem for Linux) hinzugefügt, um nachfolgend mit dem bedingten Operator „ConditionVirtualization“ Abzweigungen vorzunehmen;
- Bei der Installation von systemd (bei Ausführung von „ninja install“) wurde die Erstellung von symbolischen Links zu den Dateien systemd-networkd.service, systemd-networkd.socket,
systemd-resolved.service, remote-cryptsetup.target, remote-fs.target,
systemd-networkd-wait-online.service und systemd-timesyncd.service im Verzeichnis /etc eingestellt. Um diese Dateien zu erstellen, muss nun der Befehl „systemctl preset-all“ ausgeführt werden.
Quelle: opennet.ru
