Permalink
Name already in use
A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
systemd/NEWS
Go to fileThis commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
15633 lines (12709 sloc)
829 KB
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
systemd System and Service Manager | |
CHANGES WITH 254 in spe: | |
Security relevant changes: | |
* pam_systemd will now by default pass the CAP_WAKE_ALARM ambient | |
process capability to invoked session processes of regular users on | |
local seats (as well as to systemd --user), unless configured | |
otherwise via data from JSON user records, or via the PAM module's | |
parameter list. This is useful in order allow desktop tools such as | |
GNOME's Alarm Clock application to set a timer for | |
CLOCK_REALTIME_ALARM that wakes up the system when it elapses. A | |
per-user service unit file may thus use AmbientCapability= to pass | |
the capability to invoked processes. Note that this capability is | |
relatively narrow in focus (in particular compared to other process | |
capabilities such as CAP_SYS_ADMIN) and we already — by default — | |
permit more impactful operations such as system suspend to local | |
users. | |
CHANGES WITH 253: | |
Announcements of Future Feature Removals and Incompatible Changes: | |
* We intend to remove cgroup v1 support from systemd release after the | |
end of 2023. If you run services that make explicit use of cgroup v1 | |
features (i.e. the "legacy hierarchy" with separate hierarchies for | |
each controller), please implement compatibility with cgroup v2 (i.e. | |
the "unified hierarchy") sooner rather than later. Most of Linux | |
userspace has been ported over already. | |
* We intend to remove support for split-usr (/usr mounted separately | |
during boot) and unmerged-usr (parallel directories /bin and | |
/usr/bin, /lib and /usr/lib, etc). This will happen in the second | |
half of 2023, in the first release that falls into that time window. | |
For more details, see: | |
https://lists.freedesktop.org/archives/systemd-devel/2022-September/048352.html | |
* We intend to change behaviour w.r.t. units of the per-user service | |
manager and sandboxing options, so that they work without having to | |
manually enable PrivateUsers= as well, which is not required for | |
system units. To make this work, we will implicitly enable user | |
namespaces (PrivateUsers=yes) when a sandboxing option is enabled in a | |
user unit. The drawback is that system users will no longer be visible | |
(and appear as 'nobody') to the user unit when a sandboxing option is | |
enabled. By definition a sandboxed user unit should run with reduced | |
privileges, so impact should be small. This will remove a great source | |
of confusion that has been reported by users over the years, due to | |
how these options require an extra setting to be manually enabled when | |
used in the per-user service manager, as opposed as to the system | |
service manager. We plan to enable this change in the next release | |
later this year. For more details, see: | |
https://lists.freedesktop.org/archives/systemd-devel/2022-December/048682.html | |
Deprecations and incompatible changes: | |
* systemctl will now warn when invoked without /proc/ mounted | |
(e.g. when invoked after chroot() into an directory tree without the | |
API mount points like /proc/ being set up.) Operation in such an | |
environment is not fully supported. | |
* The return value of 'systemctl is-active|is-enabled|is-failed' for | |
unknown units is changed: previously 1 or 3 were returned, but now 4 | |
(EXIT_PROGRAM_OR_SERVICES_STATUS_UNKNOWN) is used as documented. | |
* 'udevadm hwdb' subcommand is deprecated and will emit a warning. | |
systemd-hwdb (added in 2014) should be used instead. | |
* 'bootctl --json' now outputs a single JSON array, instead of a stream | |
of newline-separated JSON objects. | |
* Udev rules in 60-evdev.rules have been changed to load hwdb | |
properties for all modalias patterns. Previously only the first | |
matching pattern was used. This could change what properties are | |
assigned if the user has more and less specific patterns that could | |
match the same device, but it is expected that the change will have | |
no effect for most users. | |
* systemd-networkd-wait-online exits successfully when all interfaces | |
are ready or unmanaged. Previously, if neither '--any' nor | |
'--interface=' options were used, at least one interface had to be in | |
configured state. This change allows the case where systemd-networkd | |
is enabled, but no interfaces are configured, to be handled | |
gracefully. It may occur in particular when a different network | |
manager is also enabled and used. | |
* Some compatibility helpers were dropped: EmergencyAction= in the user | |
manager, as well as measuring kernel command line into PCR 8 in | |
systemd-stub, along with the -Defi-tpm-pcr-compat compile-time | |
option. | |
* The '-Dupdate-helper-user-timeout=' build-time option has been | |
renamed to '-Dupdate-helper-user-timeout-sec=', and now takes an | |
integer as parameter instead of a string. | |
* The DDI image dissection logic (which backs RootImage= in service | |
unit files, the --image= switch in various tools such as | |
systemd-nspawn, as well as systemd-dissect) will now only mount file | |
systems of types btrfs, ext4, xfs, erofs, squashfs, vfat. This list | |
can be overridden via the $SYSTEMD_DISSECT_FILE_SYSTEMS environment | |
variable. These file systems are fairly well supported and maintained | |
in current kernels, while others are usually more niche, exotic or | |
legacy and thus typically do not receive the same level of security | |
support and fixes. | |
* The default per-link multicast DNS mode is changed to "yes" | |
(that was previously "no"). As the default global multicast DNS mode | |
has been "yes" (but can be changed by the build option), now the | |
multicast DNS is enabled on all links by default. You can disable the | |
multicast DNS on all links by setting MulticastDNS= in resolved.conf, | |
or on an interface by calling "resolvectl mdns INTERFACE no". | |
New components: | |
* A tool 'ukify' tool to build, measure, and sign Unified Kernel Images | |
(UKIs) has been added. This replaces functionality provided by | |
'dracut --uefi' and extends it with automatic calculation of PE file | |
offsets, insertion of signed PCR policies generated by | |
systemd-measure, support for initrd concatenation, signing of the | |
embedded Linux image and the combined image with sbsign, and | |
heuristics to autodetect the kernel uname and verify the splash | |
image. | |
Changes in systemd and units: | |
* A new service type Type=notify-reload is defined. When such a unit is | |
reloaded a UNIX process signal (typically SIGHUP) is sent to the main | |
service process. The manager will then wait until it receives a | |
"RELOADING=1" followed by a "READY=1" notification from the unit as | |
response (via sd_notify()). Otherwise, this type is the same as | |
Type=notify. A new setting ReloadSignal= may be used to change the | |
signal to send from the default of SIGHUP. | |
user@.service, systemd-networkd.service, systemd-udevd.service, and | |
systemd-logind have been updated to this type. | |
* Initrd environments which are not on a pure memory file system (e.g. | |
overlayfs combination as opposed to tmpfs) are now supported. With | |
this change, during the initrd → host transition ("switch root") | |
systemd will erase all files of the initrd only when the initrd is | |
backed by a memory file system such as tmpfs. | |
* New per-unit MemoryZSwapMax= option has been added to configure | |
memory.zswap.max cgroup properties (the maximum amount of zswap | |
used). | |
* A new LogFilterPatterns= option has been added for units. It may be | |
used to specify accept/deny regular expressions for log messages | |
generated by the unit, that shall be enforced by systemd-journald. | |
Rejected messages are neither stored in the journal nor forwarded. | |
This option may be used to suppress noisy or uninteresting messages | |
from units. | |
* The manager has a new | |
org.freedesktop.systemd1.Manager.GetUnitByPIDFD() D-Bus method to | |
query process ownership via a PIDFD, which is more resilient against | |
PID recycling issues. | |
* Scope units now support OOMPolicy=. Login session scopes default to | |
OOMPolicy=continue, allowing login scopes to survive the OOM killer | |
terminating some processes in the scope. | |
* systemd-fstab-generator now supports x-systemd.makefs option for | |
/sysroot/ (in the initrd). | |
* The maximum rate at which daemon reloads are executed can now be | |
limited with the new ReloadLimitIntervalSec=/ReloadLimitBurst= | |
options. (Or the equivalent on the kernel command line: | |
systemd.reload_limit_interval_sec=/systemd.reload_limit_burst=). In | |
addition, systemd now logs the originating unit and PID when a reload | |
request is received over D-Bus. | |
* When enabling a swap device systemd will now reinitialize the device | |
when the page size of the swap space does not match the page size of | |
the running kernel. Note that this requires the 'swapon' utility to | |
provide the '--fixpgsz' option, as implemented by util-linux, and it | |
is not supported by busybox at the time of writing. | |
* systemd now executes generator programs in a mount namespace | |
"sandbox" with most of the file system read-only and write access | |
restricted to the output directories, and with a temporary /tmp/ | |
mount provided. This provides a safeguard against programming errors | |
in the generators, but also fixes here-docs in shells, which | |
previously didn't work in early boot when /tmp/ wasn't available | |
yet. (This feature has no security implications, because the code is | |
still privileged and can trivially exit the sandbox.) | |
* The system manager will now parse a new "vmm.notify_socket" | |
system credential, which may be supplied to a VM via SMBIOS. If | |
found, the manager will send a "READY=1" notification on the | |
specified socket after boot is complete. This allows readiness | |
notification to be sent from a VM guest to the VM host over a VSOCK | |
socket. | |
* The sample PAM configuration file for systemd-user@.service now | |
includes a call to pam_namespace. This puts children of user@.service | |
in the expected namespace. (Many distributions replace their file | |
with something custom, so this change has limited effect.) | |
* A new environment variable $SYSTEMD_DEFAULT_MOUNT_RATE_LIMIT_BURST | |
can be used to override the mount units burst late limit for | |
parsing '/proc/self/mountinfo', which was introduced in v249. | |
Defaults to 5. | |
* Drop-ins for init.scope changing control group resource limits are | |
now applied, while they were previously ignored. | |
* New build-time configuration options '-Ddefault-timeout-sec=' and | |
'-Ddefault-user-timeout-sec=' have been added, to let distributions | |
choose the default timeout for starting/stopping/aborting system and | |
user units respectively. | |
* Service units gained a new setting OpenFile= which may be used to | |
open arbitrary files in the file system (or connect to arbitrary | |
AF_UNIX sockets in the file system), and pass the open file | |
descriptor to the invoked process via the usual file descriptor | |
passing protocol. This is useful to give unprivileged services access | |
to select files which have restrictive access modes that would | |
normally not allow this. It's also useful in case RootDirectory= or | |
RootImage= is used to allow access to files from the host environment | |
(which is after all not visible from the service if these two options | |
are used.) | |
Changes in udev: | |
* The new net naming scheme "v253" has been introduced. In the new | |
scheme, ID_NET_NAME_PATH is also set for USB devices not connected via | |
a PCI bus. This extends the coverage of predictable interface names | |
in some embedded systems. | |
The "amba" bus path is now included in ID_NET_NAME_PATH, resulting in | |
a more informative path on some embedded systems. | |
* Partition block devices will now also get symlinks in | |
/dev/disk/by-diskseq/<seq>-part<n>, which may be used to reference | |
block device nodes via the kernel's "diskseq" value. Previously those | |
symlinks were only created for the main block device. | |
* A new operator '-=' is supported for SYMLINK variables. This allows | |
symlinks to be unconfigured even if an earlier rule added them. | |
* 'udevadm --trigger --settle' now also works for network devices | |
that are being renamed. | |
Changes in sd-boot, bootctl, and the Boot Loader Specification: | |
* systemd-boot now passes its random seed directly to the kernel's RNG | |
via the LINUX_EFI_RANDOM_SEED_TABLE_GUID configuration table, which | |
means the RNG gets seeded very early in boot before userspace has | |
started. | |
* systemd-boot will pass a disk-backed random seed – even when secure | |
boot is enabled – if it can additionally get a random seed from EFI | |
itself (via EFI's RNG protocol), or a prior seed in | |
LINUX_EFI_RANDOM_SEED_TABLE_GUID from a preceding bootloader. | |
* systemd-boot-system-token.service was renamed to | |
systemd-boot-random-seed.service and extended to always save a random | |
seed to ESP on every boot when a compatible boot loader is used. This | |
allows a refreshed random seed to be used in the boot loader. | |
* systemd-boot handles various seed inputs using a domain- and | |
field-separated hashing scheme. | |
* systemd-boot's 'random-seed-mode' option has been removed. A system | |
token is now always required to be present for random seeds to be | |
used. | |
* systemd-boot now supports being loaded from other locations than the | |
ESP, for example for direct kernel boot under QEMU or when embedded | |
into the firmware. | |
* systemd-boot now parses SMBIOS information to detect | |
virtualization. This information is used to skip some warnings which | |
are not useful in a VM and to conditionalize other aspects of | |
behaviour. | |
* systemd-boot now supports a new 'if-safe' mode that will perform UEFI | |
Secure Boot automated certificate enrollment from the ESP only if it | |
is considered 'safe' to do so. At the moment 'safe' means running in | |
a virtual machine. | |
* systemd-stub now processes random seeds in the same way as | |
systemd-boot already does, in case a unified kernel image is being | |
used from a different bootloader than systemd-boot, or without any | |
boot load at all. | |
* bootctl will now generate a system token on all EFI systems, even | |
virtualized ones, and is activated in the case that the system token | |
is missing from either sd-boot and sd-stub booted systems. | |
* bootctl now implements two new verbs: 'kernel-identify' prints the | |
type of a kernel image file, and 'kernel-inspect' provides | |
information about the embedded command line and kernel version of | |
UKIs. | |
* bootctl now honours $KERNEL_INSTALL_CONF_ROOT with the same meaning | |
as for kernel-install. | |
* The JSON output of "bootctl list" will now contain two more fields: | |
isDefault and isSelected are boolean fields set to true on the | |
default and currently booted boot menu entries. | |
* bootctl gained a new verb "unlink" for removing a boot loader entry | |
type #1 file from disk in a safe and robust way. | |
* bootctl also gained a new verb "cleanup" that automatically removes | |
all files from the ESP's and XBOOTLDR's "entry-token" directory, that | |
is not referenced anymore by any installed Type #1 boot loader | |
specification entry. This is particularly useful in environments where | |
a large number of entries reference the same or partly the same | |
resources (for example, for snapshot-based setups). | |
Changes in kernel-install: | |
* A new "installation layout" can be configured as layout=uki. With | |
this setting, a Boot Loader Specification Type#1 entry will not be | |
created. Instead, a new kernel-install plugin 90-uki-copy.install | |
will copy any .efi files from the staging area into the boot | |
partition. A plugin to generate the UKI .efi file must be provided | |
separately. | |
Changes in systemctl: | |
* 'systemctl reboot' has dropped support for accepting a positional | |
argument as the argument to the reboot(2) syscall. Please use the | |
--reboot-argument= option instead. | |
* 'systemctl disable' will now warn when called on units without | |
install information. A new --no-warn option has been added that | |
silences this warning. | |
* New option '--drop-in=' can be used to tell 'systemctl edit' the name | |
of the drop-in to edit. (Previously, 'override.conf' was always | |
used.) | |
* 'systemctl list-dependencies' now respects --type= and --state=. | |
* 'systemctl kexec' now supports XEN VMM environments. | |
* 'systemctl edit' will now tell the invoked editor to jump into the | |
first line with actual unit file data, skipping over synthesized | |
comments. | |
Changes in systemd-networkd and related tools: | |
* The [DHCPv4] section in .network file gained new SocketPriority= | |
setting that assigns the Linux socket priority used by the DHCPv4 raw | |
socket. This may be used in conjunction with the | |
EgressQOSMaps=setting in [VLAN] section of .netdev file to send the | |
desired ethernet 802.1Q frame priority for DHCPv4 initial | |
packets. This cannot be achieved with netfilter mangle tables because | |
of the raw socket bypass. | |
* The [DHCPv4] and [IPv6AcceptRA] sections in .network file gained a | |
new QuickAck= boolean setting that enables the TCP quick ACK mode for | |
the routes configured by the acquired DHCPv4 lease or received router | |
advertisements (RAs). | |
* The RouteMetric= option (for DHCPv4, DHCPv6, and IPv6 advertised | |
routes) now accepts three values, for high, medium, and low preference | |
of the router (which can be set with the RouterPreference=) setting. | |
* systemd-networkd-wait-online now supports matching via alternative | |
interface names. | |
* The [DHCPv6] section in .network file gained new SendRelease= | |
setting which enables the DHCPv6 client to send release when | |
it stops. This is the analog of the [DHCPv4] SendRelease= setting. | |
It is enabled by default. | |
* If the Address= setting in [Network] or [Address] sections in .network | |
specified without its prefix length, then now systemd-networkd assumes | |
/32 for IPv4 or /128 for IPv6 addresses. | |
* networkctl shows network and link file dropins in status output. | |
Changes in systemd-dissect: | |
* systemd-dissect gained a new option --list, to print the paths of | |
all files and directories in a DDI. | |
* systemd-dissect gained a new option --mtree, to generate a file | |
manifest compatible with BSD mtree(5) of a DDI | |
* systemd-dissect gained a new option --with, to execute a command with | |
the specified DDI temporarily mounted and used as working | |
directory. This is for example useful to convert a DDI to "tar" | |
simply by running it within a "systemd-dissect --with" invocation. | |
* systemd-dissect gained a new option --discover, to search for | |
Discoverable Disk Images (DDIs) in well-known directories of the | |
system. This will list machine, portable service and system extension | |
disk images. | |
* systemd-dissect now understands 2nd stage initrd images stored as a | |
Discoverable Disk Image (DDI). | |
* systemd-dissect will now display the main UUID of GPT DDIs (i.e. the | |
disk UUID stored in the GPT header) among the other data it can show. | |
* systemd-dissect gained a new --in-memory switch to operate on an | |
in-memory copy of the specified DDI file. This is useful to access a | |
DDI with write access without persisting any changes. It's also | |
useful for accessing a DDI without keeping the originating file | |
system busy. | |
* The DDI dissection logic will now automatically detect the intended | |
sector size of disk images stored in files, based on the GPT | |
partition table arrangement. Loopback block devices for such DDIs | |
will then be configured automatically for the right sector size. This | |
is useful to make dealing with modern 4K sector size DDIs fully | |
automatic. The systemd-dissect tool will now show the detected sector | |
size among the other DDI information in its output. | |
Changes in systemd-repart: | |
* systemd-repart gained new options --include-partitions= and | |
--exclude-partitions= to filter operation on partitions by type UUID. | |
This allows systemd-repart to be used to build images in which the | |
type of one partition is set based on the contents of another | |
partition (for example when the boot partition shall include a verity | |
hash of the root partition). | |
* systemd-repart also gained a --defer-partitions= option that is | |
similar to --exclude-partitions=, but the size of the partition is | |
still taken into account when sizing partitions, but without | |
populating it. | |
* systemd-repart gained a new --sector-size= option to specify what | |
sector size should be used when an image is created. | |
* systemd-repart now supports generating erofs file systems via | |
CopyFiles= (a read-only file system similar to squashfs). | |
* The Minimize= option was extended to accept "best" (which means the | |
most minimal image possible, but may require multiple attempts) and | |
"guess" (which means a reasonably small image). | |
* The systemd-growfs binary now comes with a regular unit file template | |
systemd-growfs@.service which can be instantiated directly for any | |
desired file system. (Previously, the unit was generated dynamically | |
by various generators, but no regular unit file template was | |
available.) | |
Changes in journal tools: | |
* Various systemd tools will append extra fields to log messages when | |
in debug mode, or when SYSTEMD_ENABLE_LOG_CONTEXT=1 is set. Currently | |
this includes information about D-Bus messages when sd-bus is used, | |
e.g. DBUS_SENDER=, DBUS_DESTINATION=, and DBUS_PATH=, and information | |
about devices when sd-device is used, e.g. DEVNAME= and DRIVER=. | |
Details of what is logged and when are subject to change. | |
* The systemd-journald-audit.socket can now be disabled via the usual | |
"systemctl disable" mechanism to stop collection of audit | |
messages. Please note that it is not enabled statically anymore and | |
must be handled by the preset/enablement logic in package | |
installation scripts. | |
* New options MaxUse=, KeepFree=, MaxFileSize=, and MaxFiles= can | |
be used to curtail disk use by systemd-journal-remote. This is | |
similar to the options supported by systemd-journald. | |
Changes in systemd-cryptenroll, systemd-cryptsetup, and related | |
components: | |
* When enrolling new keys systemd-cryptenroll now supports unlocking | |
via FIDO2 tokens (option --unlock-fido2-device=). Previously, a | |
password was strictly required to be specified. | |
* systemd-cryptsetup now supports pre-flight requests for FIDO2 tokens | |
(except for tokens with user verification, UV) to identify tokens | |
before authentication. Multiple FIDO2 tokens can now be enrolled at | |
the same time, and systemd-cryptsetup will automatically select one | |
that corresponds to one of the available LUKS key slots. | |
* systemd-cryptsetup now supports new options tpm2-measure-bank= and | |
tpm2-measure-pcr= in crypttab(5). These allow specifying the TPM2 PCR | |
bank and number into which the volume key should be measured. This is | |
automatically enabled for the encrypted root volume discovered and | |
activated by systemd-gpt-auto-generator. | |
* systemd-gpt-auto-generator mounts the ESP and XBOOTLDR partitions with | |
"noexec,nosuid,nodev". | |
* systemd-gpt-auto-generator will now honour the rootfstype= and | |
rootflags= kernel command line switches for root file systems it | |
discovers, to match behaviour in case an explicit root fs is | |
specified via root=. | |
* systemd-pcrphase gained new options --machine-id and --file-system= | |
to measure the machine-id and mount point information into PCR 15. New | |
service unit files systemd-pcrmachine.service and | |
systemd-pcrfs@.service have been added that invoke the tool with | |
these switches during early boot. | |
* systemd-pcrphase gained a --graceful switch will make it exit cleanly | |
with a success exit code even if no TPM device is detected. | |
* systemd-cryptenroll now stores the user-supplied PIN with a salt, | |
making it harder to brute-force. | |
Changes in other tools: | |
* systemd-homed gained support for luksPbkdfForceIterations (the | |
intended number of iterations for the PBKDF operation on LUKS). | |
* Environment variables $SYSTEMD_HOME_MKFS_OPTIONS_BTRFS, | |
$SYSTEMD_HOME_MKFS_OPTIONS_EXT4, and $SYSTEMD_HOME_MKFS_OPTIONS_XFS | |
may now be used to specify additional arguments for mkfs when | |
systemd-homed formats a file system. | |
* systemd-hostnamed now exports the contents of | |
/sys/class/dmi/id/bios_vendor and /sys/class/dmi/id/bios_date via two | |
new D-Bus properties: FirmwareVendor and FirmwareDate. This allows | |
unprivileged code to access those values. | |
systemd-hostnamed also exports the SUPPORT_END= field from | |
os-release(5) as OperatingSystemSupportEnd. hostnamectl make uses of | |
this to show the status of the installed system. | |
* systemd-measure gained an --append= option to sign multiple phase | |
paths with different signing keys. This allows secrets to be | |
accessible only in certain parts of the boot sequence. Note that | |
'ukify' provides similar functionality in a more accessible form. | |
* systemd-timesyncd will now write a structured log message with | |
MESSAGE_ID set to SD_MESSAGE_TIME_BUMP when it bumps the clock based | |
on a on-disk timestamp, similarly to what it did when reaching | |
synchronization via NTP. | |
* systemd-timesyncd will now update the on-disk timestamp file on each | |
boot at least once, making it more likely that the system time | |
increases in subsequent boots. | |
* systemd-vconsole-setup gained support for system/service credentials: | |
vconsole.keymap/vconsole.keymap_toggle and | |
vconsole.font/vconsole.font_map/vconsole.font_unimap are analogous | |
the similarly-named options in vconsole.conf. | |
* systemd-localed will now save the XKB keyboard configuration to | |
/etc/vconsole.conf, and also read it from there with a higher | |
preference than the /etc/X11/xorg.conf.d/00-keyboard.conf config | |
file. Previously, this information was stored in the former file in | |
converted form, and only in latter file in the original form. Tools | |
which want to access keyboard configuration can now do so from a | |
standard location. | |
* systemd-resolved gained support for configuring the nameservers and | |
search domains via kernel command line (nameserver=, domain=) and | |
credentials (network.dns, network.search_domains). | |
* systemd-resolved will now synthesize host names for the DNS stub | |
addresses it supports. Specifically when "_localdnsstub" is resolved, | |
127.0.0.53 is returned, and if "_localdnsproxy" is resolved | |
127.0.0.54 is returned. | |
* systemd-notify will now send a "RELOADING=1" notification when called | |
with --reloading, and "STOPPING=1" when called with --stopping. This | |
can be used to implement notifications from units where it's easier | |
to call a program than to use the sd-daemon library. | |
* systemd-analyze's 'plot' command can now output its information in | |
JSON, controlled via the --json= switch. Also, new --table, and | |
--no-legend options have been added. | |
* 'machinectl enable' will now automatically enable machines.target | |
unit in addition to adding the machine unit to the target. | |
Similarly, 'machinectl start|stop' gained a --now option to enable or | |
disable the machine unit when starting or stopping it. | |
* systemd-sysusers will now create /etc/ if it is missing. | |
* systemd-sleep 'HibernateDelaySec=' setting is changed back to | |
pre-v252's behaviour, and a new 'SuspendEstimationSec=' setting is | |
added to provide the new initial value for the new automated battery | |
estimation functionality. If 'HibernateDelaySec=' is set to any value, | |
the automated estimate (and thus the automated hibernation on low | |
battery to avoid data loss) functionality will be disabled. | |
* Default tmpfiles.d/ configuration will now automatically create | |
credentials storage directory '/etc/credstore/' with the appropriate, | |
secure permissions. If '/run/credstore/' exists, its permissions will | |
be fixed too in case they are not correct. | |
Changes in libsystemd and shared code: | |
* sd-bus gained new convenience functions sd_bus_emit_signal_to(), | |
sd_bus_emit_signal_tov(), and sd_bus_message_new_signal_to(). | |
* sd-id128 functions now return -EUCLEAN (instead of -EIO) when the | |
128bit ID in files such as /etc/machine-id has an invalid | |
format. They also accept NULL as output parameter in more places, | |
which is useful when the caller only wants to validate the inputs and | |
does not need the output value. | |
* sd-login gained new functions sd_pidfd_get_session(), | |
sd_pidfd_get_owner_uid(), sd_pidfd_get_unit(), | |
sd_pidfd_get_user_unit(), sd_pidfd_get_slice(), | |
sd_pidfd_get_user_slice(), sd_pidfd_get_machine_name(), and | |
sd_pidfd_get_cgroup(), that are analogous to sd_pid_get_*(), | |
but accept a PIDFD instead of a PID. | |
* sd-path (and systemd-path) now export four new paths: | |
SD_PATH_SYSTEMD_SYSTEM_ENVIRONMENT_GENERATOR, | |
SD_PATH_SYSTEMD_USER_ENVIRONMENT_GENERATOR, | |
SD_PATH_SYSTEMD_SEARCH_SYSTEM_ENVIRONMENT_GENERATOR, and | |
SD_PATH_SYSTEMD_SEARCH_USER_ENVIRONMENT_GENERATOR, | |
* sd_notify() now supports AF_VSOCK as transport for notification | |
messages (in addition to the existing AF_UNIX support). This is | |
enabled if $NOTIFY_SOCKET is set in a "vsock:CID:port" format. | |
* Detection of chroot() environments now works if /proc/ is not | |
mounted. This affects systemd-detect-virt --chroot, but also means | |
that systemd tools will silently skip various operations in such an | |
environment. | |
* "Lockheed Martin Hardened Security for Intel Processors" (HS SRE) | |
virtualization is now detected. | |
Changes in the build system: | |
* Standalone variants of systemd-repart and systemd-shutdown may now be | |
built (if -Dstandalone=true). | |
* systemd-ac-power has been moved from /usr/lib/ to /usr/bin/, to, for | |
example, allow scripts to conditionalize execution on AC power | |
supply. | |
* The libp11kit library is now loaded through dlopen(3). | |
Changes in the documentation: | |
* Specifications that are not closely tied to systemd have moved to | |
https://uapi-group.org/specifications/: the Boot Loader Specification | |
and the Discoverable Partitions Specification. | |
Contributions from: 김인수, 13r0ck, Aidan Dang, Alberto Planas, | |
Alvin Šipraga, Andika Triwidada, AndyChi, angus-p, Anita Zhang, | |
Antonio Alvarez Feijoo, Arsen Arsenović, asavah, Benjamin Fogle, | |
Benjamin Tissoires, berenddeschouwer, BerndAdameit, | |
Bernd Steinhauser, blutch112, cake03, Callum Farmer, Carlo Teubner, | |
Charles Hardin, chris, Christian Brauner, Christian Göttsche, | |
Cristian Rodríguez, Daan De Meyer, Dan Streetman, DaPigGuy, | |
Darrell Kavanagh, David Tardon, dependabot[bot], Dirk Su, | |
Dmitry V. Levin, drosdeck, Edson Juliano Drosdeck, edupont, | |
Eric DeVolder, Erik Moqvist, Evgeny Vereshchagin, Fabian Gurtner, | |
Felix Riemann, Franck Bui, Frantisek Sumsal, Geert Lorang, | |
Gerd Hoffmann, Gio, Hannoskaj, Hans de Goede, Hugo Carvalho, | |
igo95862, Ilya Leoshkevich, Ivan Shapovalov, Jacek Migacz, | |
Jade Lovelace, Jan Engelhardt, Jan Janssen, Jan Macku, January, | |
Jason A. Donenfeld, jcg, Jean-Tiare Le Bigot, Jelle van der Waa, | |
Jeremy Linton, Jian Zhang, Jiayi Chen, Jia Zhang, Joerg Behrmann, | |
Jörg Thalheim, Joshua Goins, joshuazivkovic, Joshua Zivkovic, | |
Kai-Chuan Hsieh, Khem Raj, Koba Ko, Lennart Poettering, lichao, | |
Li kunyu, Luca Boccassi, Luca BRUNO, Ludwig Nussel, | |
Łukasz Stelmach, Lycowolf, marcel151, Marcus Schäfer, Marek Vasut, | |
Mark Laws, Michael Biebl, Michał Kotyla, Michal Koutný, | |
Michal Sekletár, Mike Gilbert, Mike Yuan, MkfsSion, ml, | |
msizanoen1, mvzlb, MVZ Ludwigsburg, Neil Moore, Nick Rosbrook, | |
noodlejetski, Pasha Vorobyev, Peter Cai, p-fpv, Phaedrus Leeds, | |
Philipp Jungkamp, Quentin Deslandes, Raul Tambre, Ray Strode, | |
reuben olinsky, Richard E. van der Luit, Richard Phibel, | |
Ricky Tigg, Robin Humble, rogg, Rudi Heitbaum, Sam James, | |
Samuel Cabrero, Samuel Thibault, Siddhesh Poyarekar, Simon Brand, | |
Space Meyer, Spindle Security, Steve Ramage, Takashi Sakamoto, | |
Thomas Haller, Tonći Galić, Topi Miettinen, Torsten Hilbrich, | |
Tuetuopay, uerdogan, Ulrich Ölmann, Valentin David, | |
Vitaly Kuznetsov, Vito Caputo, Waltibaba, Will Fancher, | |
William Roberts, wouter bolsterlee, Youfu Zhang, Yu Watanabe, | |
Zbigniew Jędrzejewski-Szmek, Дамјан Георгиевски, | |
наб | |
— Warsaw, 2023-02-15 | |
CHANGES WITH 252 🎃: | |
Announcements of Future Feature Removals: | |
* We intend to remove cgroup v1 support from systemd release after the | |
end of 2023. If you run services that make explicit use of cgroup v1 | |
features (i.e. the "legacy hierarchy" with separate hierarchies for | |
each controller), please implement compatibility with cgroup v2 (i.e. | |
the "unified hierarchy") sooner rather than later. Most of Linux | |
userspace has been ported over already. | |
* We intend to remove support for split-usr (/usr mounted separately | |
during boot) and unmerged-usr (parallel directories /bin and | |
/usr/bin, /lib and /usr/lib, etc). This will happen in the second | |
half of 2023, in the first release that falls into that time window. | |
For more details, see: | |
https://lists.freedesktop.org/archives/systemd-devel/2022-September/048352.html | |
Compatibility Breaks: | |
* ConditionKernelVersion= checks that use the '=' or '!=' operators | |
will now do simple string comparisons (instead of version comparisons | |
à la stverscmp()). Version comparisons are still done for the | |
ordering operators '<', '>', '<=', '>='. Moreover, if no operator is | |
specified, a shell-style glob match is now done. This creates a minor | |
incompatibility compared to older systemd versions when the '*', '?', | |
'[', ']' characters are used, as these will now match as shell globs | |
instead of literally. Given that kernel version strings typically do | |
not include these characters we expect little breakage through this | |
change. | |
* The service manager will now read the SELinux label used for SELinux | |
access checks from the unit file at the time it loads the file. | |
Previously, the label would be read at the moment of the access | |
check, which was problematic since at that time the unit file might | |
already have been updated or removed. | |
New Features: | |
* systemd-measure is a new tool for calculating and signing expected | |
TPM2 PCR values for a given unified kernel image (UKI) booted via | |
sd-stub. The public key used for the signature and the signed | |
expected PCR information can be embedded inside the UKI. This | |
information can be extracted from the UKI by external tools and code | |
in the image itself and is made available to userspace in the booted | |
kernel. | |
systemd-cryptsetup, systemd-cryptenroll, and systemd-creds have been | |
updated to make use of this information if available in the booted | |
kernel: when locking an encrypted volume/credential to the TPM | |
systemd-cryptenroll/systemd-creds will use the public key to bind the | |
volume/credential to any kernel that carries PCR information signed | |
by the same key pair. When unlocking such volumes/credentials | |
systemd-cryptsetup/systemd-creds will use the signature embedded in | |
the booted UKI to gain access. | |
Binding TPM-based disk encryption to public keys/signatures of PCR | |
values — instead of literal PCR values — addresses the inherent | |
"brittleness" of traditional PCR-bound TPM disk encryption schemes: | |
disks remain accessible even if the UKI is updated, without any TPM | |
specific preparation during the OS update — as long as each UKI | |
carries the necessary PCR signature information. | |
Net effect: if you boot a properly prepared kernel, TPM-bound disk | |
encryption now defaults to be locked to kernels which carry PCR | |
signatures from the same key pair. Example: if a hypothetical distro | |
FooOS prepares its UKIs like this, TPM-based disk encryption is now – | |
by default – bound to only FooOS kernels, and encrypted volumes bound | |
to the TPM cannot be unlocked on kernels from other sources. (But do | |
note this behaviour requires preparation/enabling in the UKI, and of | |
course users can always enroll non-TPM ways to unlock the volume.) | |
* systemd-pcrphase is a new tool that is invoked at six places during | |
system runtime, and measures additional words into TPM2 PCR 11, to | |
mark milestones of the boot process. This allows binding access to | |
specific TPM2-encrypted secrets to specific phases of the boot | |
process. (Example: LUKS2 disk encryption key only accessible in the | |
initrd, but not later.) | |
Changes in systemd itself, i.e. the manager and units | |
* The cpu controller is delegated to user manager units by default, and | |
CPUWeight= settings are applied to the top-level user slice units | |
(app.slice, background.slice, session.slice). This provides a degree | |
of resource isolation between different user services competing for | |
the CPU. | |
* Systemd can optionally do a full preset in the "first boot" condition | |
(instead of just enable-only). This behaviour is controlled by the | |
compile-time option -Dfirst-boot-full-preset. Right now it defaults | |
to 'false', but the plan is to switch it to 'true' for the subsequent | |
release. | |
* Drop-ins are now allowed for transient units too. | |
* Systemd will set the taint flag 'support-ended' if it detects that | |
the OS image is past its end-of-support date. This date is declared | |
in a new /etc/os-release field SUPPORT_END= described below. | |
* Two new settings ConditionCredential= and AssertCredential= can be | |
used to skip or fail units if a certain system credential is not | |
provided. | |
* ConditionMemory= accepts size suffixes (K, M, G, T, …). | |
* DefaultSmackProcessLabel= can be used in system.conf and user.conf to | |
specify the SMACK security label to use when not specified in a unit | |
file. | |
* DefaultDeviceTimeoutSec= can be used in system.conf and user.conf to | |
specify the default timeout when waiting for device units to | |
activate. | |
* C.UTF-8 is used as the default locale if nothing else has been | |
configured. | |
* [Condition|Assert]Firmware= have been extended to support certain | |
SMBIOS fields. For example | |
ConditionFirmware=smbios-field(board_name = "Custom Board") | |
conditionalizes the unit to run only when | |
/sys/class/dmi/id/board_name contains "Custom Board" (without the | |
quotes). | |
* ConditionFirstBoot= now correctly evaluates as true only during the | |
boot phase of the first boot. A unit executed later, after booting | |
has completed, will no longer evaluate this condition as true. | |
* Socket units will now create sockets in the SELinuxContext= of the | |
associated service unit, if any. | |
* Boot phase transitions (start initrd → exit initrd → boot complete → | |
shutdown) will be measured into TPM2 PCR 11, so that secrets can be | |
bound to a specific runtime phase. E.g.: a LUKS encryption key can be | |
unsealed only in the initrd. | |
* Service credentials (i.e. SetCredential=/LoadCredential=/…) will now | |
also be provided to ExecStartPre= processes. | |
* Various units are now correctly ordered against | |
initrd-switch-root.target where previously a conflict without | |
ordering was configured. A stop job for those units would be queued, | |
but without the ordering it could be executed only after | |
initrd-switch-root.service, leading to units not being restarted in | |
the host system as expected. | |
* In order to fully support the IPMI watchdog driver, which has not yet | |
been ported to the new common watchdog device interface, | |
/dev/watchdog0 will be tried first and systemd will silently fallback | |
to /dev/watchdog if it is not found. | |
* New watchdog-related D-Bus properties are now published by systemd: | |
WatchdogDevice, WatchdogLastPingTimestamp, | |
WatchdogLastPingTimestampMonotonic. | |
* At shutdown, API virtual files systems (proc, sys, etc.) will be | |
unmounted lazily. | |
* At shutdown, systemd will now log about processes blocking unmounting | |
of file systems. | |
* A new meson build option 'clock-valid-range-usec-max' was added to | |
allow disabling system time correction if RTC returns a timestamp far | |
in the future. | |
* Propagated restart jobs will no longer be discarded while a unit is | |
activating. | |
* PID 1 will now import system credentials from SMBIOS Type 11 fields | |
("OEM vendor strings"), in addition to qemu_fwcfg. This provides a | |
simple, fast and generic path for supplying credentials to a VM, | |
without involving external tools such as cloud-init/ignition. | |
* The CPUWeight= setting of unit files now accepts a new special value | |
"idle", which configures "idle" level scheduling for the unit. | |
* Service processes that are activated due to a .timer or .path unit | |
triggering will now receive information about this via environment | |
variables. Note that this is information is lossy, as activation | |
might be coalesced and only one of the activating triggers will be | |
reported. This is hence more suited for debugging or tracing rather | |
than for behaviour decisions. | |
* The riscv_flush_icache(2) system call has been added to the list of | |
system calls allowed by default when SystemCallFilter= is used. | |
* The selinux context derived from the target executable, instead of | |
'init_t' used for the manager itself, is now used when creating | |
listening sockets for units that specify SELinuxContextFromNet=yes. | |
Changes in sd-boot, bootctl, and the Boot Loader Specification: | |
* The Boot Loader Specification has been cleaned up and clarified. | |
Various corner cases in version string comparisons have been fixed | |
(e.g. comparisons for empty strings). Boot counting is now part of | |
the main specification. | |
* New PCRs measurements are performed during boot: PCR 11 for the | |
kernel+initrd combo, PCR 13 for any sysext images. If a measurement | |
took place this is now reported to userspace via the new | |
StubPcrKernelImage and StubPcrInitRDSysExts EFI variables. | |
* As before, systemd-stub will measure kernel parameters and system | |
credentials into PCR 12. It will now report this fact via the | |
StubPcrKernelParameters EFI variable to userspace. | |
* The UEFI monotonic boot counter is now included in the updated random | |
seed file maintained by sd-boot, providing some additional entropy. | |
* sd-stub will use LoadImage/StartImage to execute the kernel, instead | |
of arranging the image manually and jumping to the kernel entry | |
point. sd-stub also installs a temporary UEFI SecurityOverride to | |
allow the (unsigned) nested image to be booted. This is safe because | |
the outer (signed) stub+kernel binary must have been verified before | |
the stub was executed. | |
* Booting in EFI mixed mode (a 64-bit kernel over 32-bit UEFI firmware) | |
is now supported by sd-boot. | |
* bootctl gained a bunch of new options: --all-architectures to install | |
binaries for all supported EFI architectures, --root= and --image= | |
options to operate on a directory or disk image, and | |
--install-source= to specify the source for binaries to install, | |
--efi-boot-option-description= to control the name of the boot entry. | |
* The sd-boot stub exports a StubFeatures flag, which is used by | |
bootctl to show features supported by the stub that was used to boot. | |
* The PE section offsets that are used by tools that assemble unified | |
kernel images have historically been hard-coded. This may lead to | |
overlapping PE sections which may break on boot. The UKI will now try | |
to detect and warn about this. | |
Any tools that assemble UKIs must update to calculate these offsets | |
dynamically. Future sd-stub versions may use offsets that will not | |
work with the currently used set of hard-coded offsets! | |
* sd-stub now accepts (and passes to the initrd and then to the full | |
OS) new PE sections '.pcrsig' and '.pcrkey' that can be used to embed | |
signatures of expected PCR values, to allow sealing secrets via the | |
TPM2 against pre-calculated PCR measurements. | |
Changes in the hardware database: | |
* 'systemd-hwdb query' now supports the --root= option. | |
Changes in systemctl: | |
* systemctl now supports --state= and --type= options for the 'show' | |
and 'status' verbs. | |
* systemctl gained a new verb 'list-automounts' to list automount | |
points. | |
* systemctl gained support for a new --image= switch to be able to | |
operate on the specified disk image (similar to the existing --root= | |
which operates relative to some directory). | |
Changes in systemd-networkd: | |
* networkd can set Linux NetLabel labels for integration with the | |
network control in security modules via a new NetLabel= option. | |
* The RapidCommit= is (re-)introduced to enable faster configuration | |
via DHCPv6 (RFC 3315). | |
* networkd gained a new option TCPCongestionControlAlgorithm= that | |
allows setting a per-route TCP algorithm. | |
* networkd gained a new option KeepFileDescriptor= to allow keeping a | |
reference (file descriptor) open on TUN/TAP interfaces, which is | |
useful to avoid link flaps while the underlying service providing the | |
interface is being serviced. | |
* RouteTable= now also accepts route table names. | |
Changes in systemd-nspawn: | |
* The --bind= and --overlay= options now support relative paths. | |
* The --bind= option now supports a 'rootidmap' value, which will | |
use id-mapped mounts to map the root user inside the container to the | |
owner of the mounted directory on the host. | |
Changes in systemd-resolved: | |
* systemd-resolved now persists DNSOverTLS in its state file too. This | |
fixes a problem when used in combination with NetworkManager, which | |
sends the setting only once, causing it to be lost if resolved was | |
restarted at any point. | |
* systemd-resolved now exposes a varlink socket at | |
/run/systemd/resolve/io.systemd.Resolve.Monitor, accessible only for | |
root. Processed DNS requests in a JSON format will be published to | |
any clients connected to this socket. | |
resolvectl gained a 'monitor' verb to make use of this. | |
* systemd-resolved now treats unsupported DNSSEC algorithms as INSECURE | |
instead of returning SERVFAIL, as per RFC: | |
https://datatracker.ietf.org/doc/html/rfc6840#section-5.2 | |
* OpenSSL is the default crypto backend for systemd-resolved. (gnutls | |
is still supported.) | |
Changes in libsystemd and other libraries: | |
* libsystemd now exports sd_bus_error_setfv() (a convenience function | |
for setting bus errors), sd_id128_string_equal (a convenience | |
function for 128bit ID string comparisons), and | |
sd_bus_message_read_strv_extend() (a function to incrementally read | |
string arrays). | |
* libsystemd now exports sd_device_get_child_first()/_next() as a | |
high-level interface for enumerating child devices. It also supports | |
sd_device_new_child() for opening a child device given a device | |
object. | |
* libsystemd now exports sd_device_monitor_set()/get_description() | |
which allow setting a custom description that will be used in log | |
messages by sd_device_monitor*. | |
* Private shared libraries (libsystemd-shared-nnn.so, | |
libsystemd-core-nnn.so) are now installed into arch-specific | |
directories to allow multi-arch installs. | |
* A new sd-gpt.h header is now published, listing GUIDs from the | |
Discoverable Partitions specification. For more details see: | |
https://systemd.io/DISCOVERABLE_PARTITIONS/ | |
* A new function sd_hwdb_new_from_path() has been added to open a hwdb | |
database given an explicit path to the file. | |
* The signal number argument to sd_event_add_signal() now can now be | |
ORed with the SD_EVENT_SIGNAL_PROCMASK flag, causing sigprocmask() to | |
be automatically invoked to block the specified signal. This is | |
useful to simplify invocations as the caller doesn't have to do this | |
manually. | |
* A new convenience call sd_event_set_signal_exit() has been added to | |
sd-event to set up signal handling so that the event loop | |
automatically terminates cleanly on SIGTERM/SIGINT. | |
Changes in other components: | |
* systemd-sysusers, systemd-tmpfiles, and systemd-sysctl configuration | |
can now be provided via the credential mechanism. | |
* systemd-analyze gained a new verb 'compare-versions' that implements | |
comparisons for versions strings (similarly to 'rpmdev-vercmp' and | |
'dpkg --compare-versions'). | |
* 'systemd-analyze dump' is extended to accept glob patterns for unit | |
names to limit the output to matching units. | |
* tmpfiles.d/ lines can read file contents to write from a credential. | |
The new modifier char '^' is used to specify that the argument is a | |
credential name. This mechanism is used to automatically populate | |
/etc/motd, /etc/issue, and /etc/hosts from credentials. | |
* tmpfiles.d/ may now be configured to avoid changing uid/gid/mode of | |
an inode if the specification is prefixed with ':' and the inode | |
already exists. | |
* Default tmpfiles.d/ configuration now carries a line to automatically | |
use an 'ssh.authorized_keys.root' credential if provided to set up | |
the SSH authorized_keys file for the root user. | |
* systemd-tmpfiles will now gracefully handle absent source of "C" copy | |
lines. | |
* tmpfiles.d/ F/w lines now optionally permit encoding of the payload | |
in base64. This is useful to write arbitrary binary data into files. | |
* The pkgconfig and rpm macros files now export the directory for user | |
units as 'user_tmpfiles_dir' and '%_user_tmpfilesdir'. | |
* Detection of Apple Virtualization and detection of Parallels and | |
KubeVirt virtualization on non-x86 archs have been added. | |
* os-release gained a new field SUPPORT_END=YYYY-MM-DD to inform the | |
user when their system will become unsupported. | |
* When performing suspend-then-hibernate, the system will estimate the | |
discharge rate and use that to set the delay until hibernation and | |
hibernate immediately instead of suspending when running from a | |
battery and the capacity is below 5%. | |
* systemd-sysctl gained a --strict option to fail when a sysctl | |
setting is unknown to the kernel. | |
* machinectl supports --force for the 'copy-to' and 'copy-from' | |
verbs. | |
* coredumpctl gained the --root and --image options to look for journal | |
files under the specified root directory, image, or block device. | |
* 'journalctl -o' and similar commands now implement a new output mode | |
"short-delta". It is similar to "short-monotonic", but also shows the | |
time delta between subsequent messages. | |
* journalctl now respects the --quiet flag when verifying consistency | |
of journal files. | |
* Journal log messages gained a new implicit field _RUNTIME_SCOPE= that | |
will indicate whether a message was logged in the 'initrd' phase or | |
in the 'system' phase of the boot process. | |
* Journal files gained a new compatibility flag | |
'HEADER_INCOMPATIBLE_COMPACT'. Files with this flag implement changes | |
to the storage format that allow reducing size on disk. As with other | |
compatibility flags, older journalctl versions will not be able to | |
read journal files using this new format. The environment variable | |
'SYSTEMD_JOURNAL_COMPACT=0' can be passed to systemd-journald to | |
disable this functionality. It is enabled by default. | |
* systemd-run's --working-directory= switch now works when used in | |
combination with --scope. | |
* portablectl gained a --force flag to skip certain sanity checks. This | |
is implemented using new flags accepted by systemd-portabled for the | |
*WithExtensions() D-Bus methods: SD_SYSTEMD_PORTABLE_FORCE_ATTACH | |
flag now means that the attach/detach checks whether the units are | |
already present and running will be skipped. Similarly, | |
SD_SYSTEMD_PORTABLE_FORCE_SYSEXT flag means that the check whether | |
image name matches the name declared inside of the image will be | |
skipped. Callers must be sure to do those checks themselves if | |
appropriate. | |
* systemd-portabled will now use the original filename to check | |
extension-release.NAME for correctness, in case it is passed a | |
symlink. | |
* systemd-portabled now uses PrivateTmp=yes in the 'trusted' profile | |
too. | |
* sysext's extension-release files now support '_any' as a special | |
value for the ID= field, to allow distribution-independent extensions | |
(e.g.: fully statically compiled binaries, scripts). It also gained | |
support for a new ARCHITECTURE= field that may be used to explicitly | |
restrict an image to hosts of a specific architecture. | |
* systemd-repart now supports creating squashfs partitions. This | |
requires mksquashfs from squashfs-tools. | |
* systemd-repart gained a --split flag to also generate split | |
artifacts, i.e. a separate file for each partition. This is useful in | |
conjunction with systemd-sysupdate or other tools, or to generate | |
split dm-verity artifacts. | |
* systemd-repart is now able to generate dm-verity partitions, including | |
signatures. | |
* systemd-repart can now set a partition UUID to zero, allowing it to | |
be filled in later, such as when using verity partitions. | |
* systemd-repart now supports drop-ins for its configuration files. | |
* Package metadata logged by systemd-coredump in the system journal is | |
now more compact. | |
* xdg-autostart-service now expands 'tilde' characters in Exec lines. | |
* systemd-oomd now automatically links against libatomic, if available. | |
* systemd-oomd now sends out a 'Killed' D-Bus signal when a cgroup is | |
killed. | |
* scope units now also provide oom-kill status. | |
* systemd-pstore will now try to load only the efi_pstore kernel module | |
before running, ensuring that pstore can be used. | |
* systemd-logind gained a new StopIdleSessionSec= option to stop an idle | |
session after a preconfigure timeout. | |
* systemd-homed will now wait up to 30 seconds for workers to terminate, | |
rather than indefinitely. | |
* homectl gained a new '--luks-sector-size=' flag that allows users to | |
select the preferred LUKS sector size. Must be a power of 2 between 512 | |
and 4096. systemd-userdbd records gained a corresponding field. | |
* systemd-sysusers will now respect the 'SOURCE_DATE_EPOCH' environment | |
variable when generating the 'sp_lstchg' field, to ensure an image | |
build can be reproducible. | |
* 'udevadm wait' will now listen to kernel uevents too when called with | |
--initialized=no. | |
* When naming network devices udev will now consult the Devicetree | |
"alias" fields for the device. | |
* systemd-udev will now create infiniband/by-path and | |
infiniband/by-ibdev links for Infiniband verbs devices. | |
* systemd-udev-trigger.service will now also prioritize input devices. | |
* ConditionACPower= and systemd-ac-power will now assume the system is | |
running on AC power if no battery can be found. | |
* All features and tools using the TPM2 will now communicate with it | |
using a bind key. Beforehand, the tpm2 support used encrypted sessions | |
by creating a primary key that was used to encrypt traffic. This | |
creates a problem as the key created for encrypting the traffic could | |
be faked by an active interposer on the bus. In cases when a pin is | |
used, a bind key will be used. The pin is used as the auth value for | |
the seal key, aka the disk encryption key, and that auth value will be | |
used in the session establishment. An attacker would need the pin | |
value to create the secure session and thus an active interposer | |
without the pin cannot interpose on TPM2 traffic. | |
* systemd-growfs no longer requires udev to run. | |
* systemd-backlight now will better support systems with multiple | |
graphic cards. | |
* systemd-cryptsetup's keyfile-timeout= option now also works when a | |
device is used as a keyfile. | |
* systemd-cryptenroll gained a new --unlock-key-file= option to get the | |
unlocking key from a key file (instead of prompting the user). Note | |
that this is the key for unlocking the volume in order to be able to | |
enroll a new key, but it is not the key that is enrolled. | |
* systemd-dissect gained a new --umount switch that will safely and | |
synchronously unmount all partitions of an image previously mounted | |
with 'systemd-dissect --mount'. | |
* When using gcrypt, all systemd tools and services will now configure | |
it to prefer the OS random number generator if present. | |
* All example code shipped with documentation has been relicensed from CC0 | |
to MIT-0. | |
* Unit tests will no longer fail when running on a system without | |
/etc/machine-id. | |
Experimental features: | |
* BPF programs can now be compiled with bpf-gcc (requires libbpf >= 1.0 | |
and bpftool >= 7.0). | |
* sd-boot can automatically enroll SecureBoot keys from files found on | |
the ESP. This enrollment can be either automatic ('force' mode) or | |
controlled by the user ('manual' mode). It is sufficient to place the | |
SecureBoot keys in the right place in the ESP and they will be picked | |
up by sd-boot and shown in the boot menu. | |
* The mkosi config in systemd gained support for automatically | |
compiling a kernel with the configuration appropriate for testing | |
systemd. This may be useful when developing or testing systemd in | |
tandem with the kernel. | |
Contributions from: 김인수, Adam Williamson, adrian5, Aidan Dang, | |
Akihiko Odaki, Alban Bedel, Albert Mikaelyan, Aleksey Vasenev, | |
Alexander Graf, Alexander Shopov, Alexander Wilson, | |
Alper Nebi Yasak, anarcat, Anders Jonsson, Andre Kalb, | |
Andrew Stone, Andrey Albershteyn, Anita Zhang, Ansgar Burchardt, | |
Antonio Alvarez Feijoo, Arnaud Ferraris, Aryan singh, asavah, | |
Avamander, Avram Lubkin, Balázs Meskó, Bastien Nocera, | |
Benjamin Franzke, BerndAdameit, bin456789, Celeste Liu, | |
Chih-Hsuan Yen, Christian Brauner, Christian Göttsche, | |
Christian Hesse, Clyde Byrd III, codefiles, Colin Walters, | |
Cristian Rodríguez, Daan De Meyer, Daniel Braunwarth, | |
Daniel Rusek, Dan Streetman, Darsey Litzenberger, David Edmundson, | |
David Jaša, David Rheinsberg, David Seifert, David Tardon, | |
dependabot[bot], Devendra Tewari, Dominique Martinet, drosdeck, | |
Edson Juliano Drosdeck, Eduard Tolosa, eggfly, Einsler Lee, | |
Elias Probst, Eli Schwartz, Evgeny Vereshchagin, exploide, Fei Li, | |
Foster Snowhill, Franck Bui, Frank Dana, Frantisek Sumsal, | |
Gerd Hoffmann, Gio, Goffredo Baroncelli, gtwang01, | |
Guillaume W. Bres, H A, Hans de Goede, Heinrich Schuchardt, | |
Hugo Carvalho, i-do-cpp, igo95862, j00512545, Jacek Migacz, | |
Jade Bilkey, James Hilliard, Jan B, Janis Goldschmidt, | |
Jan Janssen, Jan Kuparinen, Jan Luebbe, Jan Macku, | |
Jason A. Donenfeld, Javkhlanbayar Khongorzul, Jeremy Soller, | |
JeroenHD, jiangchuangang, João Loureiro, | |
Joaquín Ignacio Aramendía, Jochen Sprickerhof, | |
Johannes Schauer Marin Rodrigues, Jonas Kümmerlin, | |
Jonas Witschel, Jonathan Kang, Jonathan Lebon, Joost Heitbrink, | |
Jörg Thalheim, josh-gordon-fb, Joyce, Kai Lueke, lastkrick, | |
Lennart Poettering, Leon M. George, licunlong, Li kunyu, | |
LockBlock-dev, Loïc Collignon, Lubomir Rintel, Luca Boccassi, | |
Luca BRUNO, Ludwig Nussel, Łukasz Stelmach, Maccraft123, | |
Marc Kleine-Budde, Marius Vollmer, Martin Wilck, matoro, | |
Matthias Lisin, Max Gautier, Maxim Mikityanskiy, Michael Biebl, | |
Michal Koutný, Michal Sekletár, Michal Stanke, Mike Gilbert, | |
Mitchell Freiderich, msizanoen1, Nick Rosbrook, nl6720, Oğuz Ersen, | |
Oleg Solovyov, Olga Smirnova, Pablo Ceballos, Pavel Zhukov, | |
Phaedrus Leeds, Philipp Gortan, Piotr Drąg, Pyfisch, | |
Quentin Deslandes, Rahil Bhimjiani, Rene Hollander, Richard Huang, | |
Richard Phibel, Rudi Heitbaum, Sam James, Sarah Brofeldt, | |
Sean Anderson, Sebastian Scheibner, Shreenidhi Shedi, | |
Sonali Srivastava, Steve Ramage, Suraj Krishnan, Swapnil Devesh, | |
Takashi Sakamoto, Ted X. Toth, Temuri Doghonadze, Thomas Blume, | |
Thomas Haller, Thomas Hebb, Tomáš Hnyk, Tomasz Paweł Gajc, | |
Topi Miettinen, Ulrich Ölmann, undef, Uriel Corfa, | |
Victor Westerhuis, Vincent Dagonneau, Vishal Chillara Srinivas, | |
Vito Caputo, Weblate, Wenchao Hao, William Roberts, williamsumendap, | |
wineway, xiaoyang, Yuri Chornoivan, Yu Watanabe, | |
Zbigniew Jędrzejewski-Szmek, Zhaofeng Li, наб | |
– The Great Beyond, 2022-10-31 👻 | |
CHANGES WITH 251: | |
Backwards-incompatible changes: | |
* The minimum kernel version required has been bumped from 3.13 to 4.15, | |
and CLOCK_BOOTTIME is now assumed to always exist. | |
* C11 with GNU extensions (aka "gnu11") is now used to build our | |
components. Public API headers are still restricted to ISO C89. | |
* In v250, a systemd-networkd feature that automatically configures | |
routes to addresses specified in AllowedIPs= was added and enabled by | |
default. However, this causes network connectivity issues in many | |
existing setups. Hence, it has been disabled by default since | |
systemd-stable 250.3. The feature can still be used by explicitly | |
configuring RouteTable= setting in .netdev files. | |
* Jobs started via StartUnitWithFlags() will no longer return 'skipped' | |
when a Condition*= check does not succeed, restoring the JobRemoved | |
signal to the behaviour it had before v250. | |
* The org.freedesktop.portable1 methods GetMetadataWithExtensions() and | |
GetImageMetadataWithExtensions() have been fixed to provide an extra | |
return parameter, containing the actual extension release metadata. | |
The current implementation was judged to be broken and unusable, and | |
thus the usual procedure of adding a new set of methods was skipped, | |
and backward compatibility broken instead on the assumption that | |
nobody can be affected given the current state of this interface. | |
* All kernels supported by systemd mix bytes returned by RDRAND (or | |
similar) into the entropy pool at early boot. This means that on | |
those systems, even if /dev/urandom is not yet initialized, it still | |
returns bytes that are of at least RDRAND quality. For that reason, | |
we no longer have reason to invoke RDRAND from systemd itself, which | |
has historically been a source of bugs. Furthermore, kernels ≥5.6 | |
provide the getrandom(GRND_INSECURE) interface for returning random | |
bytes before the entropy pool is initialized without warning into | |
kmsg, which is what we attempt to use if available. systemd's direct | |
usage of RDRAND has been removed. x86 systems ≥Broadwell that are | |
running an older kernel may experience kmsg warnings that were not | |
seen with 250. For newer kernels, non-x86 systems, or older x86 | |
systems, there should be no visible changes. | |
* sd-boot will now measure the kernel command line into TPM PCR 12 | |
rather than PCR 8. This improves usefulness of the measurements on | |
systems where sd-boot is chainloaded from Grub. Grub measures all | |
commands its executes into PCR 8, which makes it very hard to use | |
reasonably, hence separate ourselves from that and use PCR 12 | |
instead, which is what certain Ubuntu editions already do. To retain | |
compatibility with systems running older systemd systems a new meson | |
option 'efi-tpm-pcr-compat' has been added (which defaults to false). | |
If enabled, the measurement is done twice: into the new-style PCR 12 | |
*and* the old-style PCR 8. It's strongly advised to migrate all users | |
to PCR 12 for this purpose in the long run, as we intend to remove | |
this compatibility feature in two years' time. | |
* busctl capture now writes output in the newer pcapng format instead | |
of pcap. | |
* A udev rule that imported hwdb matches for USB devices with lowercase | |
hexadecimal vendor/product ID digits was added in systemd 250. This | |
has been reverted, since uppercase hexadecimal digits are supposed to | |
be used, and we already had a rule with the appropriate match. | |
Users might need to adjust their local hwdb entries. | |
* arch_prctl(2) has been moved to the @default set in the syscall filters | |
(as exposed via the SystemCallFilter= setting in service unit files). | |
It is apparently used by the linker now. | |
* The tmpfiles entries that create the /run/systemd/netif directory and | |
its subdirectories were moved from tmpfiles.d/systemd.conf to | |
tmpfiles.d/systemd-network.conf. | |
Users might need to adjust their files that override tmpfiles.d/systemd.conf | |
to account for this change. | |
* The requirement for Portable Services images to contain a well-formed | |
os-release file (i.e.: contain at least an ID field) is now enforced. | |
This applies to base images and extensions, and also to systemd-sysext. | |
Changes in the Boot Loader Specification, kernel-install and sd-boot: | |
* kernel-install's and bootctl's Boot Loader Specification Type #1 | |
entry generation logic has been reworked. The user may now pick | |
explicitly by which "token" string to name the installation's boot | |
entries, via the new /etc/kernel/entry-token file or the new | |
--entry-token= switch to bootctl. By default — as before — the | |
entries are named after the local machine ID. However, in "golden | |
image" environments, where the machine ID shall be initialized on | |
first boot (as opposed to at installation time before first boot) the | |
machine ID will not be available at build time. In this case the | |
--entry-token= switch to bootctl (or the /etc/kernel/entry-token | |
file) may be used to override the "token" for the entries, for | |
example the IMAGE_ID= or ID= fields from /etc/os-release. This will | |
make the OS images independent of any machine ID, and ensure that the | |
images will not carry any identifiable information before first boot, | |
but on the other hand means that multiple parallel installations of | |
the very same image on the same disk cannot be supported. | |
Summary: if you are building golden images that shall acquire | |
identity information exclusively on first boot, make sure to both | |
remove /etc/machine-id *and* to write /etc/kernel/entry-token to the | |
value of the IMAGE_ID= or ID= field of /etc/os-release or another | |
suitable identifier before deploying the image. | |
* The Boot Loader Specification has been extended with | |
/loader/entries.srel file located in the EFI System Partition (ESP) | |
that disambiguates the format of the entries in the /loader/entries/ | |
directory (in order to discern them from incompatible uses of this | |
directory by other projects). For entries that follow the | |
Specification, the string "type1" is stored in this file. | |
bootctl will now write this file automatically when installing the | |
systemd-boot boot loader. | |
* kernel-install supports a new initrd_generator= setting in | |
/etc/kernel/install.conf, that is exported as | |
$KERNEL_INSTALL_INITRD_GENERATOR to kernel-install plugins. This | |
allows choosing different initrd generators. | |
* kernel-install will now create a "staging area" (an initially-empty | |
directory to gather files for a Boot Loader Specification Type #1 | |
entry). The path to this directory is exported as | |
$KERNEL_INSTALL_STAGING_AREA to kernel-install plugins, which should | |
drop files there instead of writing them directly to the final | |
location. kernel-install will move them when all files have been | |
prepared successfully. | |
* New option sort-key= has been added to the Boot Loader Specification | |
to override the sorting order of the entries in the boot menu. It is | |
read by sd-boot and bootctl, and will be written by kernel-install, | |
with the default value of IMAGE_ID= or ID= fields from | |
os-release. Together, this means that on multiboot installations, | |
entries should be grouped and sorted in a predictable way. | |
* The sort order of boot entries has been updated: entries which have | |
the new field sort-key= are sorted by it first, and all entries | |
without it are ordered later. After that, entries are sorted by | |
version so that newest entries are towards the beginning of the list. | |
* The kernel-install tool gained a new 'inspect' verb which shows the | |
paths and other settings used. | |
* sd-boot can now optionally beep when the menu is shown and menu | |
entries are selected, which can be useful on machines without a | |
working display. (Controllable via a loader.conf setting.) | |
* The --make-machine-id-directory= switch to bootctl has been replaced | |
by --make-entry-directory=, given that the entry directory is not | |
necessarily named after the machine ID, but after some other suitable | |
ID as selected via --entry-token= described above. The old name of | |
the option is still understood to maximize compatibility. | |
* 'bootctl list' gained support for a new --json= switch to output boot | |
menu entries in JSON format. | |
* 'bootctl is-installed' now supports the --graceful, and various verbs | |
omit output with the new option --quiet. | |
Changes in systemd-homed: | |
* Starting with v250 systemd-homed uses UID/GID mapping on the mounts | |
of activated home directories it manages (if the kernel and selected | |
file systems support it). So far it mapped three UID ranges: the | |
range from 0…60000, the user's own UID, and the range 60514…65534, | |
leaving everything else unmapped (in other words, the 16bit UID range | |
is mapped almost fully, with the exception of the UID subrange used | |
for systemd-homed users, with one exception: the user's own UID). | |
Unmapped UIDs may not be used for file ownership in the home | |
directory — any chown() attempts with them will fail. With this | |
release a fourth range is added to these mappings: | |
524288…1879048191. This range is the UID range intended for container | |
uses, see: | |
https://systemd.io/UIDS-GIDS | |
This range may be used for container managers that place container OS | |
trees in the home directory (which is a questionable approach, for | |
quota, permission, SUID handling and network file system | |
compatibility reasons, but nonetheless apparently commonplace). Note | |
that this mapping is mapped 1:1 in a pass-through fashion, i.e. the | |
UID assignments from the range are not managed or mapped by | |
`systemd-homed`, and must be managed with other mechanisms, in the | |
context of the local system. | |
Typically, a better approach to user namespacing in relevant | |
container managers would be to leave container OS trees on disk at | |
UID offset 0, but then map them to a dynamically allocated runtime | |
UID range via another UID mount map at container invocation | |
time. That way user namespace UID ranges become strictly a runtime | |
concept, and do not leak into persistent file systems, persistent | |
user databases or persistent configuration, thus greatly simplifying | |
handling, and improving compatibility with home directories intended | |
to be portable like the ones managed by systemd-homed. | |
Changes in shared libraries: | |
* A new libsystemd-core-<version>.so private shared library is | |
installed under /usr/lib/systemd/system, mirroring the existing | |
libsystemd-shared-<version>.so library. This allows the total | |
installation size to be reduced by binary code reuse. | |
* The <version> tag used in the name of libsystemd-shared.so and | |
libsystemd-core.so can be configured via the meson option | |
'shared-lib-tag'. Distributions may build subsequent versions of the | |
systemd package with unique tags (e.g. the full package version), | |
thus allowing multiple installations of those shared libraries to be | |
available at the same time. This is intended to fix an issue where | |
programs that link to those libraries would fail to execute because | |
they were installed earlier or later than the appropriate version of | |
the library. | |
* The sd-id128 API gained a new call sd_id128_to_uuid_string() that is | |
similar to sd_id128_to_string() but formats the ID in RFC 4122 UUID | |
format instead of as a simple series of hex characters. | |
* The sd-device API gained two new calls sd_device_new_from_devname() | |
and sd_device_new_from_path() which permit allocating an sd_device | |
object from a device node name or file system path. | |
* sd-device also gained a new call sd_device_open() which will open the | |
device node associated with a device for which an sd_device object | |
has been allocated. The call is supposed to address races around | |
device nodes being removed/recycled due to hotplug events, or media | |
change events: the call checks internally whether the major/minor of | |
the device node and the "diskseq" (in case of block devices) match | |
with the metadata loaded in the sd_device object, thus ensuring that | |
the device once opened really matches the provided sd_device object. | |
Changes in PID1, systemctl, and systemd-oomd: | |
* A new set of service monitor environment variables will be passed to | |
OnFailure=/OnSuccess= handlers, but only if exactly one unit lists the | |
handler unit as OnFailure=/OnSuccess=. The variables are: | |
$MONITOR_SERVICE_RESULT, $MONITOR_EXIT_CODE, $MONITOR_EXIT_STATUS, | |
$MONITOR_INVOCATION_ID and $MONITOR_UNIT. For cases when a single | |
handler needs to watch multiple units, use a templated handler. | |
* A new ExtensionDirectories= setting in service unit files allows | |
system extensions to be loaded from a directory. (It is similar to | |
ExtensionImages=, but takes paths to directories, instead of | |
disk image files.) | |
'portablectl attach --extension=' now also accepts directory paths. | |
* The user.delegate and user.invocation_id extended attributes on | |
cgroups are used in addition to trusted.delegate and | |
trusted.invocation_id. The latter pair requires privileges to set, | |
but the former doesn't and can be also set by the unprivileged user | |
manager. | |
(Only supported on kernels ≥5.6.) | |
* Units that were killed by systemd-oomd will now have a service result | |
of 'oom-kill'. The number of times a service was killed is tallied | |
in the 'user.oomd_ooms' extended attribute. | |
The OOMPolicy= unit file setting is now also honoured by | |
systemd-oomd. | |
* In unit files the new %y/%Y specifiers can be used to refer to | |
normalized unit file path, which is particularly useful for symlinked | |
unit files. | |
The new %q specifier resolves to the pretty hostname | |
(i.e. PRETTY_HOSTNAME= from /etc/machine-info). | |
The new %d specifier resolves to the credentials directory of a | |
service (same as $CREDENTIALS_DIRECTORY). | |
* The RootDirectory=, MountAPIVFS=, ExtensionDirectories=, | |
*Capabilities*=, ProtectHome=, *Directory=, TemporaryFileSystem=, | |
PrivateTmp=, PrivateDevices=, PrivateNetwork=, NetworkNamespacePath=, | |
PrivateIPC=, IPCNamespacePath=, PrivateUsers=, ProtectClock=, | |
ProtectKernelTunables=, ProtectKernelModules=, ProtectKernelLogs=, | |
MountFlags= service settings now also work in unprivileged user | |
services, i.e. those run by the user's --user service manager, as long | |
as user namespaces are enabled on the system. | |
* Services with Restart=always and a failing ExecCondition= will no | |
longer be restarted, to bring ExecCondition= behaviour in line with | |
Condition*= settings. | |
* LoadCredential= now accepts a directory as the argument; all files | |
from the directory will be loaded as credentials. | |
* A new D-Bus property ControlGroupId is now exposed on service units, | |
that encapsulates the service's numeric cgroup ID that newer kernels | |
assign to each cgroup. | |
* PID 1 gained support for configuring the "pre-timeout" of watchdog | |
devices and the associated governor, via the new | |
RuntimeWatchdogPreSec= and RuntimeWatchdogPreGovernor= configuration | |
options in /etc/systemd/system.conf. | |
* systemctl's --timestamp= option gained a new choice "unix", to show | |
timestamp as unix times, i.e. seconds since 1970, Jan 1st. | |
* A new "taint" flag named "old-kernel" is introduced which is set when | |
the kernel systemd runs on is older then the current baseline version | |
(see above). The flag is shown in "systemctl status" output. | |
* Two additional taint flags "short-uid-range" and "short-gid-range" | |
have been added as well, which are set when systemd notices it is run | |
within a userns namespace that does not define the full 0…65535 UID | |
range | |
* A new "unmerged-usr" taint flag has been added that is set whenever | |
running on systems where /bin/ + /sbin/ are *not* symlinks to their | |
counterparts in /usr/, i.e. on systems where the /usr/-merge has not | |
been completed. | |
* Generators invoked by PID 1 will now have a couple of useful | |
environment variables set describing the execution context a | |
bit. $SYSTEMD_SCOPE encodes whether the generator is called from the | |
system service manager, or from the per-user service | |
manager. $SYSTEMD_IN_INITRD encodes whether the generator is invoked | |
in initrd context or on the host. $SYSTEMD_FIRST_BOOT encodes whether | |
systemd considers the current boot to be a "first" | |
boot. $SYSTEMD_VIRTUALIZATION encode whether virtualization is | |
detected and which type of hypervisor/container | |
manager. $SYSTEMD_ARCHITECTURE indicates which architecture the | |
kernel is built for. | |
* PID 1 will now automatically pick up system credentials from qemu's | |
fw_cfg interface, thus allowing passing arbitrary data into VM | |
systems similar to how this is already supported for passing them | |
into `systemd-nspawn` containers. Credentials may now also be passed | |
in via the new kernel command line option `systemd.set_credential=` | |
(note that kernel command line options are world-readable during | |
runtime, and only useful for credentials that require no | |
confidentiality). The credentials that can be passed to unified | |
kernels that use the `systemd-stub` UEFI stub are now similarly | |
picked up automatically. Automatic importing of system credentials | |
this way can be turned off via the new | |
`systemd.import_credentials=no` kernel command line option. | |
* LoadCredential= will now automatically look for credentials in the | |
/etc/credstore/, /run/credstore/, /usr/lib/credstore/ directories if | |
the argument is not an absolute path. Similarly, | |
LoadCredentialEncrypted= will check the same directories plus | |
/etc/credstore.encrypted/, /run/credstore.encrypted/ and | |
/usr/lib/credstore.encrypted/. The idea is to use those directories | |
as the system-wide location for credentials that services should pick | |
up automatically. | |
* System and service credentials are described in great detail in a new | |
document: | |
https://systemd.io/CREDENTIALS | |
Changes in systemd-journald: | |
* The journal JSON export format has been added to listed of stable | |
interfaces (https://systemd.io/PORTABILITY_AND_STABILITY/). | |
* journalctl --list-boots now supports JSON output and the --reverse option. | |
* Under docs/: JOURNAL_EXPORT_FORMATS was imported from the wiki and | |
updated, BUILDING_IMAGES is new: | |
https://systemd.io/JOURNAL_EXPORT_FORMATS | |
https://systemd.io/BUILDING_IMAGES | |
Changes in udev: | |
* Two new hwdb files have been added. One lists "handhelds" (PDAs, | |
calculators, etc.), the other AV production devices (DJ tables, | |
keypads, etc.) that should accessible to the seat owner user by | |
default. | |
* udevadm trigger gained a new --prioritized-subsystem= option to | |
process certain subsystems (and all their parent devices) earlier. | |
systemd-udev-trigger.service now uses this new option to trigger | |
block and TPM devices first, hopefully making the boot a bit faster. | |
* udevadm trigger now implements --type=all, --initialized-match, | |
--initialized-nomatch to trigger both subsystems and devices, only | |
already-initialized devices, and only devices which haven't been | |
initialized yet, respectively. | |
* udevadm gained a new "wait" command for safely waiting for a specific | |
device to show up in the udev device database. This is useful in | |
scripts that asynchronously allocate a block device (e.g. through | |
repartitioning, or allocating a loopback device or similar) and need | |
to synchronize on the creation to complete. | |
* udevadm gained a new "lock" command for locking one or more block | |
devices while formatting it or writing a partition table to it. It is | |
an implementation of https://systemd.io/BLOCK_DEVICE_LOCKING and | |
usable in scripts dealing with block devices. | |
* udevadm info will show a couple of additional device fields in its | |
output, and will not apply a limited set of coloring to line types. | |
* udevadm info --tree will now show a tree of objects (i.e. devices and | |
suchlike) in the /sys/ hierarchy. | |
* Block devices will now get a new set of device symlinks in | |
/dev/disk/by-diskseq/<nr>, which may be used to reference block | |
device nodes via the kernel's "diskseq" value. Note that this does | |
not guarantee that opening a device by a symlink like this will | |
guarantee that the opened device actually matches the specified | |
diskseq value. To be safe against races, the actual diskseq value of | |
the opened device (BLKGETDISKSEQ ioctl()) must still be compred with | |
the one in the symlink path. | |
* .link files gained support for setting MDI/MID-X on a link. | |
* .link files gained support for [Match] Firmware= setting to match on | |
the device firmware description string. By mistake, it was previously | |
only supported in .network files. | |
* .link files gained support for [Link] SR-IOVVirtualFunctions= setting | |
and [SR-IOV] section to configure SR-IOV virtual functions. | |
Changes in systemd-networkd: | |
* The default scope for unicast routes configured through [Route] | |
section is changed to "link", to make the behavior consistent with | |
"ip route" command. The manual configuration of [Route] Scope= is | |
still honored. | |
* A new unit systemd-networkd-wait-online@<interface>.service has been | |
added that can be used to wait for a specific network interface to be | |
up. | |
* systemd-networkd gained a new [Bridge] Isolated=true|false setting | |
that configures the eponymous kernel attribute on the bridge. | |
* .netdev files now can be used to create virtual WLAN devices, and | |
configure various settings on them, via the [WLAN] section. | |
* .link/.network files gained support for [Match] Kind= setting to match | |
on device kind ("bond", "bridge", "gre", "tun", "veth", etc.) | |
This value is also shown by 'networkctl status'. | |
* The Local= setting in .netdev files for various virtual network | |
devices gained support for specifying, in addition to the network | |
address, the name of a local interface which must have the specified | |
address. | |
* systemd-networkd gained a new [Tunnel] External= setting in .netdev | |
files, to configure tunnels in external mode (a.k.a. collect metadata | |
mode). | |
* [Network] L2TP= setting was removed. Please use interface specifier in | |
Local= setting in .netdev files of corresponding L2TP interface. | |
* New [DHCPServer] BootServerName=, BootServerAddress=, and | |
BootFilename= settings can be used to configure the server address, | |
server name, and file name sent in the DHCP packet (e.g. to configure | |
PXE boot). | |
Changes in systemd-resolved: | |
* systemd-resolved is started earlier (in sysinit.target), so it | |
available earlier and will also be started in the initrd if installed | |
there. | |
Changes in disk encryption: | |
* systemd-cryptenroll can now control whether to require the user to | |
enter a PIN when using TPM-based unlocking of a volume via the new | |
--tpm2-with-pin= option. | |
Option tpm2-pin= can be used in /etc/crypttab. | |
* When unlocking devices via TPM, TPM2 parameter encryption is now | |
used, to ensure that communication between CPU and discrete TPM chips | |
cannot be eavesdropped to acquire disk encryption keys. | |
* A new switch --fido2-credential-algorithm= has been added to | |
systemd-cryptenroll allowing selection of the credential algorithm to | |
use when binding encryption to FIDO2 tokens. | |
Changes in systemd-hostnamed: | |
* HARDWARE_VENDOR= and HARDWARE_MODEL= can be set in /etc/machine-info | |
to override the values gleaned from the hwdb. | |
* A ID_CHASSIS property can be set in the hwdb (for the DMI device | |
/sys/class/dmi/id) to override the chassis that is reported by | |
hostnamed. | |
* hostnamed's D-Bus interface gained a new method GetHardwareSerial() | |
for reading the hardware serial number, as reportd by DMI. It also | |
exposes a new method D-Bus property FirmwareVersion that encode the | |
firmware version of the system. | |
Changes in other components: | |
* /etc/locale.conf is now populated through tmpfiles.d factory /etc/ | |
handling with the values that were configured during systemd build | |
(if /etc/locale.conf has not been created through some other | |
mechanism). This means that /etc/locale.conf should always have | |
reasonable contents and we avoid a potential mismatch in defaults. | |
* The userdbctl tool will now show UID range information as part of the | |
list of known users. | |
* A new build-time configuration setting default-user-shell= can be | |
used to set the default shell for user records and nspawn shell | |
invocations (instead of the default /bin/bash). | |
* systemd-timesyncd now provides a D-Bus API for receiving NTP server | |
information dynamically at runtime via IPC. | |
* The systemd-creds tool gained a new "has-tpm2" verb, which reports | |
whether a functioning TPM2 infrastructure is available, i.e. if | |
firmware, kernel driver and systemd all have TPM2 support enabled and | |
a device found. | |
* The systemd-creds tool gained support for generating encrypted | |
credentials that are using an empty encryption key. While this | |
provides no integrity nor confidentiality it's useful to implement | |
codeflows that work the same on TPM-ful and TPM2-less systems. The | |
service manager will only accept credentials "encrypted" that way if | |
a TPM2 device cannot be detected, to ensure that credentials | |
"encrypted" like that cannot be used to trick TPM2 systems. | |
* When deciding whether to colorize output, all systemd programs now | |
also check $COLORTERM (in addition to $NO_COLOR, $SYSTEMD_COLORS, and | |
$TERM). | |
* Meson's new install_tag feature is now in use for several components, | |
allowing to build and install select binaries only: pam, nss, devel | |
(pkg-config files), systemd-boot, libsystemd, libudev. Example: | |
$ meson build systemd-boot | |
$ meson install --tags systemd-boot --no-rebuild | |
https://mesonbuild.com/Installing.html#installation-tags | |
* A new build configuration option has been added, to allow selecting the | |
default compression algorithm used by systemd-journald and systemd-coredump. | |
This allows to build-in support for decompressing all supported formats, | |
but choose a specific one for compression. E.g.: | |
$ meson -Ddefault-compression=xz | |
Experimental features: | |
* sd-boot gained a new *experimental* setting "reboot-for-bitlocker" in | |
loader.conf that implements booting Microsoft Windows from the | |
sd-boot in a way that first reboots the system, to reset the TPM | |
PCRs. This improves compatibility with BitLocker's TPM use, as the | |
PCRs will only record the Windows boot process, and not sd-boot | |
itself, thus retaining the PCR measurements not involving sd-boot. | |
Note that this feature is experimental for now, and is likely going | |
to be generalized and renamed in a future release, without retaining | |
compatibility with the current implementation. | |
* A new systemd-sysupdate component has been added that automatically | |
discovers, downloads, and installs A/B-style updates for the host | |
installation itself, or container images, portable service images, | |
and other assets. See the new systemd-sysupdate man page for updates. | |
Contributions from: 4piu, Adam Williamson, adrian5, Albert Brox, | |
AlexCatze, Alex Henrie, Alfonso Sánchez-Beato, Alice S, | |
Alvin Šipraga, amarjargal, Amarjargal, Andrea Pappacoda, | |
Andreas Rammhold, Andy Chi, Anita Zhang, Antonio Alvarez Feijoo, | |
Arfrever Frehtes Taifersar Arahesis, ash, Bastien Nocera, Be, | |
bearhoney, Ben Efros, Benjamin Berg, Benjamin Franzke, | |
Brett Holman, Christian Brauner, Clyde Byrd III, Curtis Klein, | |
Daan De Meyer, Daniele Medri, Daniel Mack, Danilo Krummrich, | |
David, David Bond, Davide Cavalca, David Tardon, davijosw, | |
dependabot[bot], Donald Chan, Dorian Clay, Eduard Tolosa, | |
Elias Probst, Eli Schwartz, Erik Sjölund, Evgeny Vereshchagin, | |
Federico Ceratto, Franck Bui, Frantisek Sumsal, Gaël PORTAY, | |
Georges Basile Stavracas Neto, Gibeom Gwon, Goffredo Baroncelli, | |
Grigori Goronzy, Hans de Goede, Heiko Becker, Hugo Carvalho, | |
Jakob Lell, James Hilliard, Jan Janssen, Jason A. Donenfeld, | |
Joan Bruguera, Joerie de Gram, Josh Triplett, Julia Kartseva, | |
Kazuo Moriwaka, Khem Raj, ksa678491784, Lance, Lan Tian, | |
Laura Barcziova, Lennart Poettering, Leviticoh, licunlong, | |
Lidong Zhong, lincoln auster, Lubomir Rintel, Luca Boccassi, | |
Luca BRUNO, lucagoc, Ludwig Nussel, Marcel Hellwig, march1993, | |
Marco Scardovi, Mario Limonciello, Mariusz Tkaczyk, | |
Markus Weippert, Martin, Martin Liska, Martin Wilck, Matija Skala, | |
Matthew Blythe, Matthias Lisin, Matthijs van Duin, Matt Walton, | |
Max Gautier, Michael Biebl, Michael Olbrich, Michal Koutný, | |
Michal Sekletár, Mike Gilbert, MkfsSion, Morten Linderud, | |
Nick Rosbrook, Nikolai Grigoriev, Nikolai Kostrigin, | |
Nishal Kulkarni, Noel Kuntze, Pablo Ceballos, Peter Hutterer, | |
Peter Morrow, Pigmy-penguin, Piotr Drąg, prumian, Richard Neill, | |
Rike-Benjamin Schuppner, rodin-ia, Romain Naour, Ruben Kerkhof, | |
Ryan Hendrickson, Santa Wiryaman, Sebastian Pucilowski, Seth Falco, | |
Simon Ellmann, Sonali Srivastava, Stefan Seering, | |
Stephen Hemminger, tawefogo, techtino, Temuri Doghonadze, | |
Thomas Batten, Thomas Haller, Thomas Weißschuh, Tobias Stoeckmann, | |
Tomasz Pala, Tyson Whitehead, Vishal Chillara Srinivas, | |
Vivien Didelot, w30023233, wangyuhang, Weblate, Xiaotian Wu, | |
yangmingtai, YmrDtnJu, Yonathan Randolph, Yutsuten, Yu Watanabe, | |
Zbigniew Jędrzejewski-Szmek, наб | |
— Edinburgh, 2022-05-21 | |
CHANGES WITH 250: | |
* Support for encrypted and authenticated credentials has been added. | |
This extends the credential logic introduced with v247 to support | |
non-interactive symmetric encryption and authentication, based on a | |
key that is stored on the /var/ file system or in the TPM2 chip (if | |
available), or the combination of both (by default if a TPM2 chip | |
exists the combination is used, otherwise the /var/ key only). The | |
credentials are automatically decrypted at the moment a service is | |
started, and are made accessible to the service itself in unencrypted | |
form. A new tool 'systemd-creds' encrypts credentials for this | |
purpose, and two new service file settings LoadCredentialEncrypted= | |
and SetCredentialEncrypted= configure such credentials. | |
This feature is useful to store sensitive material such as SSL | |
certificates, passwords and similar securely at rest and only decrypt | |
them when needed, and in a way that is tied to the local OS | |
installation or hardware. | |
* systemd-gpt-auto-generator can now automatically set up discoverable | |
LUKS2 encrypted swap partitions. | |
* The GPT Discoverable Partitions Specification has been substantially | |
extended with support for root and /usr/ partitions for the majority | |
of architectures systemd supports. This includes platforms that do | |
not natively support UEFI, because even though GPT is specified under | |
UEFI umbrella, it is useful on other systems too. Specifically, | |
systemd-nspawn, systemd-sysext, systemd-gpt-auto-generator and | |
Portable Services use the concept without requiring UEFI. | |
* The GPT Discoverable Partitions Specifications has been extended with | |
a new set of partitions that may carry PKCS#7 signatures for Verity | |
partitions, encoded in a simple JSON format. This implements a simple | |
mechanism for building disk images that are fully authenticated and | |
can be tested against a set of cryptographic certificates. This is | |
now implemented for the various systemd tools that can operate with | |
disk images, such as systemd-nspawn, systemd-sysext, systemd-dissect, | |
Portable services/RootImage=, systemd-tmpfiles, and systemd-sysusers. | |
The PKCS#7 signatures are passed to the kernel (where they are | |
checked against certificates from the kernel keyring), or can be | |
verified against certificates provided in userspace (via a simple | |
drop-in file mechanism). | |
* systemd-dissect's inspection logic will now report for which uses a | |
disk image is intended. Specifically, it will display whether an | |
image is suitable for booting on UEFI or in a container (using | |
systemd-nspawn's --image= switch), whether it can be used as portable | |
service, or attached as system extension. | |
* The system-extension.d/ drop-in files now support a new field | |
SYSEXT_SCOPE= that may encode which purpose a system extension image | |
is for: one of "initrd", "system" or "portable". This is useful to | |
make images more self-descriptive, and to ensure system extensions | |
cannot be attached in the wrong contexts. | |
* The os-release file learnt a new PORTABLE_PREFIXES= field which may | |
be used in portable service images to indicate which unit prefixes | |
are supported. | |
* The GPT image dissection logic in systemd-nspawn/systemd-dissect/… | |
now is able to decode images for non-native architectures as well. | |
This allows systemd-nspawn to boot images of non-native architectures | |
if the corresponding user mode emulator is installed and | |
systemd-binfmtd is running. | |
* systemd-logind gained new settings HandlePowerKeyLongPress=, | |
HandleRebootKeyLongPress=, HandleSuspendKeyLongPress= and | |
HandleHibernateKeyLongPress= which may be used to configure actions | |
when the relevant keys are pressed for more than 5s. This is useful | |
on devices that only have hardware for a subset of these keys. By | |
default, if the reboot key is pressed long the poweroff operation is | |
now triggered, and when the suspend key is pressed long the hibernate | |
operation is triggered. Long pressing the other two keys currently | |
does not trigger any operation by default. | |
* When showing unit status updates on the console during boot and | |
shutdown, and a service is slow to start so that the cylon animation | |
is shown, the most recent sd_notify() STATUS= text is now shown as | |
well. Services may use this to make the boot/shutdown output easier | |
to understand, and to indicate what precisely a service that is slow | |
to start or stop is waiting for. In particular, the per-user service | |
manager instance now reports what it is doing and which service it is | |
waiting for this way to the system service manager. | |
* The service manager will now re-execute on reception of the | |
SIGRTMIN+25 signal. It previously already did that on SIGTERM — but | |
only when running as PID 1. There was no signal to request this when | |
running as per-user service manager, i.e. as any other PID than 1. | |
SIGRTMIN+25 works for both system and user managers. | |
* The hardware watchdog logic in PID 1 gained support for operating | |
with the default timeout configured in the hardware, instead of | |
insisting on re-configuring it. Set RuntimeWatchdogSec=default to | |
request this behavior. | |
* A new kernel command line option systemd.watchdog_sec= is now | |
understood which may be used to override the hardware watchdog | |
time-out for the boot. | |
* A new setting DefaultOOMScoreAdjust= is now supported in | |
/etc/systemd/system.conf and /etc/systemd/user.conf. It may be used | |
to set the default process OOM score adjustment value for processes | |
started by the service manager. For per-user service managers this | |
now defaults to 100, but for per-system service managers is left as | |
is. This means that by default now services forked off the user | |
service manager are more likely to be killed by the OOM killer than | |
system services or the managers themselves. | |
* A new per-service setting RestrictFileSystems= as been added that | |
restricts the file systems a service has access to by their type. | |
This is based on the new BPF LSM of the Linux kernel. It provides an | |
effective way to make certain API file systems unavailable to | |
services (and thus minimizing attack surface). A new command | |
"systemd-analyze filesystems" has been added that lists all known | |
file system types (and how they are grouped together under useful | |
group handles). | |
* Services now support a new setting RestrictNetworkInterfaces= for | |
restricting access to specific network interfaces. | |
* Service unit files gained new settings StartupAllowedCPUs= and | |
StartupAllowedMemoryNodes=. These are similar to their counterparts | |
without the "Startup" prefix and apply during the boot process | |
only. This is useful to improve boot-time behavior of the system and | |
assign resources differently during boot than during regular | |
runtime. This is similar to the preexisting StartupCPUWeight= | |
vs. CPUWeight. | |
* Related to this: the various StartupXYZ= settings | |
(i.e. StartupCPUWeight=, StartupAllowedCPUs=, …) are now also applied | |
during shutdown. The settings not prefixed with "Startup" hence apply | |
during regular runtime, and those that are prefixed like that apply | |
during boot and shutdown. | |
* A new per-unit set of conditions/asserts | |
[Condition|Assert][Memory|CPU|IO]Pressure= have been added to make a | |
unit skip/fail activation if the system's (or a slice's) memory/cpu/io | |
pressure is above the configured threshold, using the kernel PSI | |
feature. For more details see systemd.unit(5) and | |
https://docs.kernel.org/accounting/psi.html | |
* The combination of ProcSubset=pid and ProtectKernelTunables=yes and/or | |
ProtectKernelLogs=yes can now be used. | |
* The default maximum numbers of inodes have been raised from 64k to 1M | |
for /dev/, and from 400k to 1M for /tmp/. | |
* The per-user service manager learnt support for communicating with | |
systemd-oomd to acquire OOM kill information. | |
* A new service setting ExecSearchPath= has been added that allows | |
changing the search path for executables for services. It affects | |
where we look for the binaries specified in ExecStart= and similar, | |
and the specified directories are also added the $PATH environment | |
variable passed to invoked processes. | |
* A new setting RuntimeRandomizedExtraSec= has been added for service | |
and scope units that allows extending the runtime time-out as | |
configured by RuntimeMaxSec= with a randomized amount. | |
* The syntax of the service unit settings RuntimeDirectory=, | |
StateDirectory=, CacheDirectory=, LogsDirectory= has been extended: | |
if the specified value is now suffixed with a colon, followed by | |
another filename, the latter will be created as symbolic link to the | |
specified directory. This allows creating these service directories | |
together with alias symlinks to make them available under multiple | |
names. | |
* Service unit files gained two new settings TTYRows=/TTYColumns= for | |
configuring rows/columns of the TTY device passed to | |
stdin/stdout/stderr of the service. This is useful to propagate TTY | |
dimensions to a virtual machine. | |
* A new service unit file setting ExitType= has been added that | |
specifies when to assume a service has exited. By default systemd | |
only watches the main process of a service. By setting | |
ExitType=cgroup it can be told to wait for the last process in a | |
cgroup instead. | |
* Automount unit files gained a new setting ExtraOptions= that can be | |
used to configure additional mount options to pass to the kernel when | |
mounting the autofs instance. | |
* "Urlification" (generation of ESC sequences that generate clickable | |
hyperlinks in modern terminals) may now be turned off altogether | |
during build-time. | |
* Path units gained new TriggerLimitBurst= and TriggerLimitIntervalSec= | |
settings that default to 200 and 2 s respectively. The ratelimit | |
ensures that a path unit cannot cause PID1 to busy-loop when it is | |
trying to trigger a service that is skipped because of a Condition*= | |
not being satisfied. This matches the configuration and behaviour of | |
socket units. | |
* The TPM2/FIDO2/PKCS11 support in systemd-cryptsetup is now also built | |
as a plug-in for cryptsetup. This means the plain cryptsetup command | |
may now be used to unlock volumes set up this way. | |
* The TPM2 logic in cryptsetup will now automatically detect systems | |
where the TPM2 chip advertises SHA256 PCR banks but the firmware only | |
updates the SHA1 banks. In such a case PCR policies will be | |
automatically bound to the latter, not the former. This makes the PCR | |
policies reliable, but of course do not provide the same level of | |
trust as SHA256 banks. | |
* The TPM2 logic in systemd-cryptsetup/systemd-cryptsetup now supports | |
RSA primary keys in addition to ECC, improving compatibility with | |
TPM2 chips that do not support ECC. RSA keys are much slower to use | |
than ECC, and hence are only used if ECC is not available. | |
* /etc/crypttab gained support for a new token-timeout= setting for | |
encrypted volumes that allows configuration of the maximum time to | |
wait for PKCS#11/FIDO2 tokens to be plugged in. If the time elapses | |
the logic will query the user for a regular passphrase/recovery key | |
instead. | |
* Support for activating dm-integrity volumes at boot via a new file | |
/etc/integritytab and the tool systemd-integritysetup have been | |
added. This is similar to /etc/crypttab and /etc/veritytab, but deals | |
with dm-integrity instead of dm-crypt/dm-verity. | |
* The systemd-veritysetup-generator now understands a new usrhash= | |
kernel command line option for specifying the Verity root hash for | |
the partition backing the /usr/ file system. A matching set of | |
systemd.verity_usr_* kernel command line options has been added as | |
well. These all work similar to the corresponding options for the | |
root partition. | |
* The sd-device API gained a new API call sd_device_get_diskseq() to | |
return the DISKSEQ property of a device structure. The "disk | |
sequence" concept is a new feature recently introduced to the Linux | |
kernel that allows detecting reuse cycles of block devices, i.e. can | |
be used to recognize when loopback block devices are reused for a | |
different purpose or CD-ROM drives get their media changed. | |
* A new unit systemd-boot-update.service has been added. If enabled | |
(the default) and the sd-boot loader is detected to be installed, it | |
is automatically updated to the newest version when out of date. This | |
is useful to ensure the boot loader remains up-to-date, and updates | |
automatically propagate from the OS tree in /usr/. | |
* sd-boot will now build with SBAT by default in order to facilitate | |
working with recent versions of Shim that require it to be present. | |
* sd-boot can now parse Microsoft Windows' Boot Configuration Data. | |
This is used to robustly generate boot entry titles for Windows. | |
* A new generic target unit factory-reset.target has been added. It is | |
hooked into systemd-logind similar in fashion to | |
reboot/poweroff/suspend/hibernate, and is supposed to be used to | |
initiate a factory reset operation. What precisely this operation | |
entails is up for the implementer to decide, the primary goal of the | |
new unit is provide a framework where to plug in the implementation | |
and how to trigger it. | |
* A new meson build-time option 'clock-valid-range-usec-max' has been | |
added which takes a time in µs and defaults to 15 years. If the RTC | |
time is noticed to be more than the specified time ahead of the | |
built-in epoch of systemd (which by default is the release timestamp | |
of systemd) it is assumed that the RTC is not working correctly, and | |
the RTC is reset to the epoch. (It already is reset to the epoch when | |
noticed to be before it.) This should increase the chance that time | |
doesn't accidentally jump too far ahead due to faulty hardware or | |
batteries. | |
* A new setting SaveIntervalSec= has been added to systemd-timesyncd, | |
which may be used to automatically save the current system time to | |
disk in regular intervals. This is useful to maintain a roughly | |
monotonic clock even without RTC hardware and with some robustness | |
against abnormal system shutdown. | |
* systemd-analyze verify gained support for a pair of new --image= + | |
--root= switches for verifying units below a specific root | |
directory/image instead of on the host. | |
* systemd-analyze verify gained support for verifying unit files under | |
an explicitly specified unit name, independently of what the filename | |
actually is. | |
* systemd-analyze verify gained a new switch --recursive-errors= which | |
controls whether to only fail on errors found in the specified units | |
or recursively any dependent units. | |
* systemd-analyze security now supports a new --offline mode for | |
analyzing unit files stored on disk instead of loaded units. It may | |
be combined with --root=/--image to analyze unit files under a root | |
directory or disk image. It also learnt a new --threshold= parameter | |
for specifying an exposure level threshold: if the exposure level | |
exceeds the specified value the call will fail. It also gained a new | |
--security-policy= switch for configuring security policies to | |
enforce on the units. A policy is a JSON file that lists which tests | |
shall be weighted how much to determine the overall exposure | |
level. Altogether these new features are useful for fully automatic | |
analysis and enforcement of security policies on unit files. | |
* systemd-analyze security gain a new --json= switch for JSON output. | |
* systemd-analyze learnt a new --quiet switch for reducing | |
non-essential output. It's honored by the "dot", "syscall-filter", | |
"filesystems" commands. | |
* systemd-analyze security gained a --profile= option that can be used | |
to take into account a portable profile when analyzing portable | |
services, since a lot of the security-related settings are enabled | |
through them. | |
* systemd-analyze learnt a new inspect-elf verb that parses ELF core | |
files, binaries and executables and prints metadata information, | |
including the build-id and other info described on: | |
https://systemd.io/COREDUMP_PACKAGE_METADATA/ | |
* .network files gained a new UplinkInterface= in the [IPv6SendRA] | |
section, for automatically propagating DNS settings from other | |
interfaces. | |
* The static lease DHCP server logic in systemd-networkd may now serve | |
IP addresses outside of the configured IP pool range for the server. | |
* CAN support in systemd-networkd gained four new settings Loopback=, | |
OneShot=, PresumeAck=, ClassicDataLengthCode= for tweaking CAN | |
control modes. It gained a number of further settings for tweaking | |
CAN timing quanta. | |
* The [CAN] section in .network file gained new TimeQuantaNSec=, | |
PropagationSegment=, PhaseBufferSegment1=, PhaseBufferSegment2=, | |
SyncJumpWidth=, DataTimeQuantaNSec=, DataPropagationSegment=, | |
DataPhaseBufferSegment1=, DataPhaseBufferSegment2=, and | |
DataSyncJumpWidth= settings to control bit-timing processed by the | |
CAN interface. | |
* DHCPv4 client support in systemd-networkd learnt a new Label= option | |
for configuring the address label to apply to configure IPv4 | |
addresses. | |
* The [IPv6AcceptRA] section of .network files gained support for a new | |
UseMTU= setting that may be used to control whether to apply the | |
announced MTU settings to the local interface. | |
* The [DHCPv4] section in .network file gained a new Use6RD= boolean | |
setting to control whether the DHCPv4 client request and process the | |
DHCP 6RD option. | |
* The [DHCPv6PrefixDelegation] section in .network file is renamed to | |
[DHCPPrefixDelegation], as now the prefix delegation is also supported | |
with DHCPv4 protocol by enabling the Use6RD= setting. | |
* The [DHCPPrefixDelegation] section in .network file gained a new | |
setting UplinkInterface= to specify the upstream interface. | |
* The [DHCPv6] section in .network file gained a new setting | |
UseDelegatedPrefix= to control whether the delegated prefixes will be | |
propagated to the downstream interfaces. | |
* The [IPv6AcceptRA] section of .network files now understands two new | |
settings UseGateway=/UseRoutePrefix= for explicitly configuring | |
whether to use the relevant fields from the IPv6 Router Advertisement | |
records. | |
* The ForceDHCPv6PDOtherInformation= setting in the [DHCPv6] section | |
has been removed. Please use the WithoutRA= and UseDelegatedPrefix= | |
settings in the [DHCPv6] section and the DHCPv6Client= setting in the | |
[IPv6AcceptRA] section to control when the DHCPv6 client is started | |
and how the delegated prefixes are handled by the DHCPv6 client. | |
* The IPv6Token= section in the [Network] section is deprecated, and | |
the [IPv6AcceptRA] section gained the Token= setting for its | |
replacement. The [IPv6Prefix] section also gained the Token= setting. | |
The Token= setting gained 'eui64' mode to explicitly configure an | |
address with the EUI64 algorithm based on the interface MAC address. | |
The 'prefixstable' mode can now optionally take a secret key. The | |
Token= setting in the [DHCPPrefixDelegation] section now supports all | |
algorithms supported by the same settings in the other sections. | |
* The [RoutingPolicyRule] section of .network file gained a new | |
SuppressInterfaceGroup= setting. | |
* The IgnoreCarrierLoss= setting in the [Network] section of .network | |
files now allows a duration to be specified, controlling how long to | |
wait before reacting to carrier loss. | |
* The [DHCPServer] section of .network file gained a new Router= | |
setting to specify the router address. | |
* The [CAKE] section of .network files gained various new settings | |
AutoRateIngress=, CompensationMode=, FlowIsolationMode=, NAT=, | |
MPUBytes=, PriorityQueueingPreset=, FirewallMark=, Wash=, SplitGSO=, | |
and UseRawPacketSize= for configuring CAKE. | |
* systemd-networkd now ships with new default .network files: | |
80-container-vb.network which matches host-side network bridge device | |
created by systemd-nspawn's --network-bridge or --network-zone | |
switch, and 80-6rd-tunnel.network which matches automatically created | |
sit tunnel with 6rd prefix when the DHCP 6RD option is received. | |
* systemd-networkd's handling of Endpoint= resolution for WireGuard | |
interfaces has been improved. | |
* systemd-networkd will now automatically configure routes to addresses | |
specified in AllowedIPs=. This feature can be controlled via | |
RouteTable= and RouteMetric= settings in [WireGuard] or | |
[WireGuardPeer] sections. | |
* systemd-networkd will now once again automatically generate persistent | |
MAC addresses for batadv and bridge interfaces. Users can disable this | |
by using MACAddress=none in .netdev files. | |
* systemd-networkd and systemd-udevd now support IP over InfiniBand | |
interfaces. The Kind= setting in .netdev file accepts "ipoib". And | |
systemd.netdev files gained the [IPoIB] section. | |
* systemd-networkd and systemd-udevd now support net.ifname-policy= | |
option on the kernel command-line. This is implemented through the | |
systemd-network-generator service that automatically generates | |
appropriate .link, .network, and .netdev files. | |
* The various systemd-udevd "ethtool" buffer settings now understand | |
the special value "max" to configure the buffers to the maximum the | |
hardware supports. | |
* systemd-udevd's .link files may now configure a large variety of | |
NIC coalescing settings, plus more hardware offload settings. | |
* .link files gained a new WakeOnLanPassword= setting in the [Link] | |
section that allows to specify a WoL "SecureOn" password on hardware | |
that supports this. | |
* systemd-nspawn's --setenv= switch now supports an additional syntax: | |
if only a variable name is specified (i.e. without being suffixed by | |
a '=' character and a value) the current value of the environment | |
variable is propagated to the container. e.g. --setenv=FOO will | |
lookup the current value of $FOO in the environment, and pass it down | |
to the container. Similar behavior has been added to homectl's, | |
machinectl's and systemd-run's --setenv= switch. | |
* systemd-nspawn gained a new switch --suppress-sync= which may be used | |
to optionally suppress the effect of the sync()/fsync()/fdatasync() | |
system calls for the container payload. This is useful for build | |
system environments where safety against abnormal system shutdown is | |
not essential as all build artifacts can be regenerated any time, but | |
the performance win is beneficial. | |
* systemd-nspawn will now raise the RLIMIT_NOFILE hard limit to the | |
same value that PID 1 uses for most forked off processes. | |
* systemd-nspawn's --bind=/--bind-ro= switches now optionally take | |
uidmap/nouidmap options as last parameter. If "uidmap" is used the | |
bind mounts are created with UID mapping taking place that ensures | |
the host's file ownerships are mapped 1:1 to container file | |
ownerships, even if user namespacing is used. This way | |
files/directories bound into containers will no longer show up as | |
owned by the nobody user as they typically did if no special care was | |
taken to shift them manually. | |
* When discovering Windows installations sd-boot will now attempt to | |
show the Windows version. | |
* The color scheme to use in sd-boot may now be configured at | |
build-time. | |
* sd-boot gained the ability to change screen resolution during | |
boot-time, by hitting the "r" key. This will cycle through available | |
resolutions and save the last selection. | |
* sd-boot learnt a new hotkey "f". When pressed the system will enter | |
firmware setup. This is useful in environments where it is difficult | |
to hit the right keys early enough to enter the firmware, and works | |
on any firmware regardless which key it natively uses. | |
* sd-boot gained support for automatically booting into the menu item | |
selected on the last boot (using the "@saved" identifier for menu | |
items). | |
* sd-boot gained support for automatically loading all EFI drivers | |
placed in the /EFI/systemd/drivers/ subdirectory of the EFI System | |
Partition (ESP). These drivers are loaded before the menu entries are | |
loaded. This is useful e.g. to load additional file system drivers | |
for the XBOOTLDR partition. | |
* systemd-boot will now paint the input cursor on its own instead of | |
relying on the firmware to do so, increasing compatibility with broken | |
firmware that doesn't make the cursor reasonably visible. | |
* sd-boot now embeds a .osrel PE section like we expect from Boot | |
Loader Specification Type #2 Unified Kernels. This means sd-boot | |
itself may be used in place of a Type #2 Unified Kernel. This is | |
useful for debugging purposes as it allows chain-loading one a | |
(development) sd-boot instance from another. | |
* sd-boot now supports a new "devicetree" field in Boot Loader | |
Specification Type #1 entries: if configured the specified device | |
tree file is installed before the kernel is invoked. This is useful | |
for installing/applying new devicetree files without updating the | |
kernel image. | |
* Similarly, sd-stub now can read devicetree data from a PE section | |
".dtb" and apply it before invoking the kernel. | |
* sd-stub (the EFI stub that can be glued in front of a Linux kernel) | |
gained the ability to pick up credentials and sysext files, wrap them | |
in a cpio archive, and pass as an additional initrd to the invoked | |
Linux kernel, in effect placing those files in the /.extra/ directory | |
of the initrd environment. This is useful to implement trusted initrd | |
environments which are fully authenticated but still can be extended | |
(via sysexts) and parameterized (via encrypted/authenticated | |
credentials, see above). | |
Credentials can be located next to the kernel image file (credentials | |
specific to a single boot entry), or in one of the shared directories | |
(credentials applicable to multiple boot entries). | |
* sd-stub now comes with a full man page, that explains its feature set | |
and how to combine a kernel image, an initrd and the stub to build a | |
complete EFI unified kernel image, implementing Boot Loader | |
Specification Type #2. | |
* sd-stub may now provide the initrd to the executed kernel via the | |
LINUX_EFI_INITRD_MEDIA_GUID EFI protocol, adding compatibility for | |
non-x86 architectures. | |
* bootctl learnt new set-timeout and set-timeout-oneshot commands that | |
may be used to set the boot menu time-out of the boot loader (for all | |
or just the subsequent boot). | |
* bootctl and kernel-install will now read variables | |
KERNEL_INSTALL_LAYOUT= from /etc/machine-info and layout= from | |
/etc/kernel/install.conf. When set, it specifies the layout to use | |
for installation directories on the boot partition, so that tools | |
don't need to guess it based on the already-existing directories. The | |
only value that is defined natively is "bls", corresponding to the | |
layout specified in | |
https://systemd.io/BOOT_LOADER_SPECIFICATION/. Plugins for | |
kernel-install that implement a different layout can declare other | |
values for this variable. | |
'bootctl install' will now write KERNEL_INSTALL_LAYOUT=bls, on the | |
assumption that if the user installed sd-boot to the ESP, they intend | |
to use the entry layout understood by sd-boot. It'll also write | |
KERNEL_INSTALL_MACHINE_ID= if it creates any directories using the ID | |
(and it wasn't specified in the config file yet). Similarly, | |
kernel-install will now write KERNEL_INSTALL_MACHINE_ID= (if it | |
wasn't specified in the config file yet). Effectively, those changes | |
mean that the machine-id used for boot loader entry installation is | |
"frozen" upon first use and becomes independent of the actual | |
machine-id. | |
Configuring KERNEL_INSTALL_MACHINE_ID fixes the following problem: | |
images created for distribution ("golden images") are built with no | |
machine-id, so that a unique machine-id can be created on the first | |
boot. But those images may contain boot loader entries with the | |
machine-id used during build included in paths. Using a "frozen" | |
value allows unambiguously identifying entries that match the | |
specific installation, while still permitting parallel installations | |
without conflict. | |
Configuring KERNEL_INSTALL_LAYOUT obviates the need for | |
kernel-install to guess the installation layout. This fixes the | |
problem where a (possibly empty) directory in the boot partition is | |
created from a different layout causing kernel-install plugins to | |
assume the wrong layout. A particular example of how this may happen | |
is the grub2 package in Fedora which includes directories under /boot | |
directly in its file list. Various other packages pull in grub2 as a | |
dependency, so it may be installed even if unused, breaking | |
installations that use the bls layout. | |
* bootctl and systemd-bless-boot can now be linked statically. | |
* systemd-sysext now optionally doesn't insist on extension-release.d/ | |
files being placed in the image under the image's file name. If the | |
file system xattr user.extension-release.strict is set on the | |
extension release file, it is accepted regardless of its name. This | |
relaxes security restrictions a bit, as system extension may be | |
attached under a wrong name this way. | |
* udevadm's test-builtin command learnt a new --action= switch for | |
testing the built-in with the specified action (in place of the | |
default 'add'). | |
* udevadm info gained new switches --property=/--value for showing only | |
specific udev properties/values instead of all. | |
* A new hwdb database has been added that contains matches for various | |
types of signal analyzers (protocol analyzers, logic analyzers, | |
oscilloscopes, multimeters, bench power supplies, etc.) that should | |
be accessible to regular users. | |
* A new hwdb database entry has been added that carries information | |
about types of cameras (regular or infrared), and in which direction | |
they point (front or back). | |
* A new rule to allow console users access to rfkill by default has been | |
added to hwdb. | |
* Device nodes for the Software Guard eXtension enclaves (sgx_vepc) are | |
now also owned by the system group "sgx". | |
* A new build-time meson option "extra-net-naming-schemes=" has been | |
added to define additional naming schemes for udev's network | |
interface naming logic. This is useful for enterprise distributions | |
and similar which want to pin the schemes of certain distribution | |
releases under a specific name and previously had to patch the | |
sources to introduce new named schemes. | |
* The predictable naming logic for network interfaces has been extended | |
to generate stable names from Xen netfront device information. | |
* hostnamed's chassis property can now be sourced from chassis-type | |
field encoded in devicetree (in addition to the existing DMI | |
support). | |
* systemd-cgls now optionally displays cgroup IDs and extended | |
attributes for each cgroup. (Controllable via the new --xattr= + | |
--cgroup-id= switches.) | |
* coredumpctl gained a new --all switch for operating on all | |
Journal files instead of just the local ones. | |
* systemd-coredump will now use libdw/libelf via dlopen() rather than | |
directly linking, allowing users to easily opt-out of backtrace/metadata | |
analysis of core files, and reduce image sizes when this is not needed. | |
* systemd-coredump will now analyze core files with libdw/libelf in a | |
forked, sandboxed process. | |
* systemd-homed will now try to unmount an activate home area in | |
regular intervals once the user logged out fully. Previously this was | |
attempted exactly once but if the home directory was busy for some | |
reason it was not tried again. | |
* systemd-homed's LUKS2 home area backend will now create a BSD file | |
system lock on the image file while the home area is active | |
(i.e. mounted). If a home area is found to be locked, logins are | |
politely refused. This should improve behavior when using home areas | |
images that are accessible via the network from multiple clients, and | |
reduce the chance of accidental file system corruption in that case. | |
* Optionally, systemd-homed will now drop the kernel buffer cache once | |
a user has fully logged out, configurable via the new --drop-caches= | |
homectl switch. | |
* systemd-homed now makes use of UID mapped mounts for the home areas. | |
If the kernel and used file system support it, files are now | |
internally owned by the "nobody" user (i.e. the user typically used | |
for indicating "this ownership is not mapped"), and dynamically | |
mapped to the UID used locally on the system via the UID mapping | |
mount logic of recent kernels. This makes migrating home areas | |
between different systems cheaper because recursively chown()ing file | |
system trees is no longer necessary. | |
* systemd-homed's CIFS backend now optionally supports CIFS service | |
names with a directory suffix, in order to place home directories in | |
a subdirectory of a CIFS share, instead of the top-level directory. | |
* systemd-homed's CIFS backend gained support for specifying additional | |
mount options in the JSON user record (cifsExtraMountOptions field, | |
and --cifs-extra-mount-options= homectl switch). This is for example | |
useful for configuring mount options such as "noserverino" that some | |
SMB3 services require (use that to run a homed home directory from a | |
FritzBox SMB3 share this way). | |
* systemd-homed will now default to btrfs' zstd compression for home | |
areas. This is inspired by Fedora's recent decision to switch to zstd | |
by default. | |
* Additional mount options to use when mounting the file system of | |
LUKS2 volumes in systemd-homed has been added. Via the | |
$SYSTEMD_HOME_MOUNT_OPTIONS_BTRFS, $SYSTEMD_HOME_MOUNT_OPTIONS_EXT4, | |
$SYSTEMD_HOME_MOUNT_OPTIONS_XFS environment variables to | |
systemd-homed or via the luksExtraMountOptions user record JSON | |
property. (Exposed via homectl --luks-extra-mount-options) | |
* homectl's resize command now takes the special size specifications | |
"min" and "max" to shrink/grow the home area to the minimum/maximum | |
size possible, taking disk usage/space constraints and file system | |
limitations into account. Resizing is now generally graceful: the | |
logic will try to get as close to the specified size as possible, but | |
not consider it a failure if the request couldn't be fulfilled | |
precisely. | |
* systemd-homed gained the ability to automatically shrink home areas | |
on logout to their minimal size and grow them again on next | |
login. This ensures that while inactive, a home area only takes up | |
the minimal space necessary, but once activated, it provides | |
sufficient space for the user's needs. This behavior is only | |
supported if btrfs is used as file system inside the home area | |
(because only for btrfs online growing/shrinking is implemented in | |
the kernel). This behavior is now enabled by default, but may be | |
controlled via the new --auto-resize-mode= setting of homectl. | |
* systemd-homed gained support for automatically re-balancing free disk | |
space among active home areas, in case the LUKS2 backends are used, | |
and no explicit disk size was requested. This way disk space is | |
automatically managed and home areas resized in regular intervals and | |
manual resizing when disk space becomes scarce should not be | |
necessary anymore. This behavior is only supported if btrfs is used | |
within the home areas (as only then online shrinking and growing is | |
supported), and may be configured via the new rebalanceWeight JSON | |
user record field (as exposed via the new --rebalance-weight= homectl | |
setting). Re-balancing is mostly automatic, but can also be requested | |
explicitly via "homectl rebalance", which is synchronous, and thus | |
may be used to wait until the rebalance run is complete. | |
* userdbctl gained a --json= switch for configured the JSON formatting | |
to use when outputting user or group records. | |
* userdbctl gained a new --multiplexer= switch for explicitly | |
configuring whether to use the systemd-userdbd server side user | |
record resolution logic. | |
* userdbctl's ssh-authorized-keys command learnt a new --chain switch, | |
for chaining up another command to execute after completing the | |
look-up. Since the OpenSSH's AuthorizedKeysCommand only allows | |
configuration of a single command to invoke, this maybe used to | |
invoke multiple: first userdbctl's own implementation, and then any | |
other also configured in the command line. | |
* The sd-event API gained a new function sd_event_add_inotify_fd() that | |
is similar to sd_event_add_inotify() but accepts a file descriptor | |
instead of a path in the file system for referencing the inode to | |
watch. | |
* The sd-event API gained a new function | |
sd_event_source_set_ratelimit_expire_callback() that may be used to | |
define a callback function that is called whenever an event source | |
leaves the rate limiting phase. | |
* New documentation has been added explaining which steps are necessary | |
to port systemd to a new architecture: | |
https://systemd.io/PORTING_TO_NEW_ARCHITECTURES | |
* The x-systemd.makefs option in /etc/fstab now explicitly supports | |
ext2, ext3, and f2fs file systems. | |
* Mount units and units generated from /etc/fstab entries with 'noauto' | |
are now ordered the same as other units. Effectively, they will be | |
started earlier (if something actually pulled them in) and stopped | |
later, similarly to normal mount units that are part of | |
fs-local.target. This change should be invisible to users, but | |
should prevent those units from being stopped too early during | |
shutdown. | |
* The systemd-getty-generator now honors a new kernel command line | |
argument systemd.getty_auto= and a new environment variable | |
$SYSTEMD_GETTY_AUTO that allows turning it off at boot. This is for | |
example useful to turn off gettys inside of containers or similar | |
environments. | |
* systemd-resolved now listens on a second DNS stub address: 127.0.0.54 | |
(in addition to 127.0.0.53, as before). If DNS requests are sent to | |
this address they are propagated in "bypass" mode only, i.e. are | |
almost not processed locally, but mostly forwarded as-is to the | |
current upstream DNS servers. This provides a stable DNS server | |
address that proxies all requests dynamically to the right upstream | |
DNS servers even if these dynamically change. This stub does not do | |
mDNS/LLMNR resolution. However, it will translate look-ups to | |
DNS-over-TLS if necessary. This new stub is particularly useful in | |
container/VM environments, or for tethering setups: use DNAT to | |
redirect traffic to any IP address to this stub. | |
* systemd-importd now honors new environment variables | |
$SYSTEMD_IMPORT_BTRFS_SUBVOL, $SYSTEMD_IMPORT_BTRFS_QUOTA, | |
$SYSTEMD_IMPORT_SYNC, which may be used disable btrfs subvolume | |
generation, btrfs quota setup and disk synchronization. | |
* systemd-importd and systemd-resolved can now be optionally built with | |
OpenSSL instead of libgcrypt. | |
* systemd-repart no longer requires OpenSSL. | |
* systemd-sysusers will no longer create the redundant 'nobody' group | |
by default, as the 'nobody' user is already created with an | |
appropriate primary group. | |
* If a unit uses RuntimeMaxSec, systemctl show will now display it. | |
* systemctl show-environment gained support for --output=json. | |
* pam_systemd will now first try to use the X11 abstract socket, and | |
fallback to the socket file in /tmp/.X11-unix/ only if that does not | |
work. | |
* systemd-journald will no longer go back to volatile storage | |
regardless of configuration when its unit is restarted. | |
* Initial support for the LoongArch architecture has been added (system | |
call lists, GPT partition table UUIDs, etc). | |
* systemd-journald's own logging messages are now also logged to the | |
journal itself when systemd-journald logs to /dev/kmsg. | |
* systemd-journald now re-enables COW for archived journal files on | |
filesystems that support COW. One benefit of this change is that | |
archived journal files will now get compressed on btrfs filesystems | |
that have compression enabled. | |
* systemd-journald now deduplicates fields in a single log message | |
before adding it to the journal. In archived journal files, it will | |
also punch holes for unused parts and truncate the file as | |
appropriate, leading to reductions in disk usage. | |
* journalctl --verify was extended with more informative error | |
messages. | |
* More of sd-journal's functions are now resistant against journal file | |
corruption. | |
* The shutdown command learnt a new option --show, to display the | |
scheduled shutdown. | |
* A LICENSES/ directory is now included in the git tree. It contains a | |
README.md file that explains the licenses used by source files in | |
this repository. It also contains the text of all applicable | |
licenses as they appear on spdx.org. | |
Contributions from: Aakash Singh, acsfer, Adolfo Jayme Barrientos, | |
Adrian Vovk, Albert Brox, Alberto Mardegan, Alexander Kanavin, | |
alexlzhu, Alfonso Sánchez-Beato, Alvin Šipraga, Alyssa Ross, | |
Amir Omidi, Anatol Pomozov, Andika Triwidada, Andreas Rammhold, | |
Andreas Valder, Andrej Lajovic, Andrew Soutar, Andrew Stone, Andy Chi, | |
Anita Zhang, Anssi Hannula, Antonio Alvarez Feijoo, | |
Antony Deepak Thomas, Arnaud Ferraris, Arvid E. Picciani, | |
Bastien Nocera, Benjamin Berg, Benjamin Herrenschmidt, Ben Stockett, | |
Bogdan Seniuc, Boqun Feng, Carl Lei, chlorophyll-zz, Chris Packham, | |
Christian Brauner, Christian Göttsche, Christian Wehrli, | |
Christoph Anton Mitterer, Cristian Rodríguez, Daan De Meyer, | |
Daniel Maixner, Dann Frazier, Dan Streetman, Davide Cavalca, | |
David Seifert, David Tardon, dependabot[bot], Dimitri John Ledkov, | |
Dimitri Papadopoulos, Dimitry Ishenko, Dmitry Khlebnikov, | |
Dominique Martinet, duament, Egor, Egor Ignatov, Emil Renner Berthing, | |
Emily Gonyer, Ettore Atalan, Evgeny Vereshchagin, Florian Klink, | |
Franck Bui, Frantisek Sumsal, Geass-LL, Gibeom Gwon, GnunuX, | |
Gogo Gogsi, gregzuro, Greg Zuro, Gustavo Costa, Hans de Goede, | |
Hela Basa, Henri Chain, hikigaya58, Hugo Carvalho, | |
Hugo Osvaldo Barrera, Iago Lopez Galeiras, Iago López Galeiras, | |
I-dont-need-name, igo95862, Jack Dähn, James Hilliard, Jan Janssen, | |
Jan Kuparinen, Jan Macku, Jan Palus, Jarkko Sakkinen, Jayce Fayne, | |
jiangchuangang, jlempen, John Lindgren, Jonas Dreßler, Jonas Jelten, | |
Jonas Witschel, Joris Hartog, José Expósito, Julia Kartseva, | |
Kai-Heng Feng, Kai Wohlfahrt, Kay Siver Bø, KennthStailey, | |
Kevin Kuehler, Kevin Orr, Khem Raj, Kristian Klausen, Kyle Laker, | |
lainahai, LaserEyess, Lennart Poettering, Lia Lenckowski, longpanda, | |
Luca Boccassi, Luca BRUNO, Ludwig Nussel, Lukas Senionis, | |
Maanya Goenka, Maciek Borzecki, Marcel Menzel, Marco Scardovi, | |
Marcus Harrison, Mark Boudreau, Matthijs van Duin, Mauricio Vásquez, | |
Maxime de Roucy, Max Resch, MertsA, Michael Biebl, Michael Catanzaro, | |
Michal Koutný, Michal Sekletár, Miika Karanki, Mike Gilbert, | |
Milo Turner, ml, monosans, Nacho Barrientos, nassir90, Nishal Kulkarni, | |
nl6720, Ondrej Kozina, Paulo Neves, Pavel Březina, pedro martelletto, | |
Peter Hutterer, Peter Morrow, Piotr Drąg, Rasmus Villemoes, ratijas, | |
Raul Tambre, rene, Riccardo Schirone, Robert-L-Turner, Robert Scheck, | |
Ross Jennings, saikat0511, Scott Lamb, Scott Worley, | |
Sergei Trofimovich, Sho Iizuka, Slava Bacherikov, Slimane Selyan Amiri, | |
StefanBruens, Steven Siloti, svonohr, Taiki Sugawara, Takashi Sakamoto, | |
Takuro Onoue, Thomas Blume, Thomas Haller, Thomas Mühlbacher, | |
Tianlu Shao, Toke Høiland-Jørgensen, Tom Yan, Tony Asleson, | |
Topi Miettinen, Ulrich Ölmann, Urs Ritzmann, Vincent Bernat, | |
Vito Caputo, Vladimir Panteleev, WANG Xuerui, Wind/owZ, Wu Xiaotian, | |
xdavidwu, Xiaotian Wu, xujing, yangmingtai, Yao Wei, Yao Wei (魏銘廷), | |
Yegor Alexeyev, Yu Watanabe, Zbigniew Jędrzejewski-Szmek, | |
Дамјан Георгиевски, наб | |
— Warsaw, 2021-12-23 | |
CHANGES WITH 249: | |
* When operating on disk images via the --image= switch of various | |
tools (such as systemd-nspawn or systemd-dissect), or when udev finds | |
no 'root=' parameter on the kernel command line, and multiple | |
suitable root or /usr/ partitions exist in the image, then a simple | |
comparison inspired by strverscmp() is done on the GPT partition | |
label, and the newest partition is picked. This permits a simple and | |
generic whole-file-system A/B update logic where new operating system | |
versions are dropped into partitions whose label is then updated with | |
a matching version identifier. | |
* systemd-sysusers now supports querying the passwords to set for the | |
users it creates via the "credentials" logic introduced in v247: the | |
passwd.hashed-password.<user> and passwd.plaintext-password.<user> | |
credentials are consulted for the password to use (either in UNIX | |
hashed form, or literally). By default these credentials are inherited | |
down from PID1 (which in turn imports it from a container manager if | |
there is one). This permits easy configuration of user passwords | |
during first boot. Example: | |
# systemd-nspawn -i foo.raw --volatile=yes --set-credential=passwd.plaintext-password.root:foo | |
Note that systemd-sysusers operates in purely additive mode: it | |
executes no operation if the declared users already exist, and hence | |
doesn't set any passwords as effect of the command line above if the | |
specified root user exists already in the image. (Note that | |
--volatile=yes ensures it doesn't, though.) | |
* systemd-firstboot now also supports querying various system | |
parameters via the credential subsystems. Thus, as above this may be | |
used to initialize important system parameters on first boot of | |
previously unprovisioned images (i.e. images with a mostly empty | |
/etc/). | |
* PID 1 may now show both the unit name and the unit description | |
strings in its status output during boot. This may be configured with | |
StatusUnitFormat=combined in system.conf or | |
systemd.status-unit-format=combined on the kernel command line. | |
* The systemd-machine-id-setup tool now supports a --image= switch for | |
provisioning a machine ID file into an OS disk image, similar to how | |
--root= operates on an OS file tree. This matches the existing switch | |
of the same name for systemd-tmpfiles, systemd-firstboot, and | |
systemd-sysusers tools. | |
* Similarly, systemd-repart gained support for the --image= switch too. | |
In combination with the existing --size= option, this makes the tool | |
particularly useful for easily growing disk images in a single | |
invocation, following the declarative rules included in the image | |
itself. | |
* systemd-repart's partition configuration files gained support for a | |
new switch MakeDirectories= which may be used to create arbitrary | |
directories inside file systems that are created, before registering | |
them in the partition table. This is useful in particular for root | |
partitions to create mount point directories for other partitions | |
included in the image. For example, a disk image that contains a | |
root, /home/, and /var/ partitions, may set MakeDirectories=yes to | |
create /home/ and /var/ as empty directories in the root file system | |
on its creation, so that the resulting image can be mounted | |
immediately, even in read-only mode. | |
* systemd-repart's CopyBlocks= setting gained support for the special | |
value "auto". If used, a suitable matching partition on the booted OS | |
is found as source to copy blocks from. This is useful when | |
implementing replicating installers, that are booted from one medium | |
and then stream their own root partition onto the target medium. | |
* systemd-repart's partition configuration files gained support for a | |
Flags=, a ReadOnly= and a NoAuto= setting, allowing control of these | |
GPT partition flags for the created partitions: this is useful for | |
marking newly created partitions as read-only, or as not being | |
subject for automatic mounting from creation on. | |
* The /etc/os-release file has been extended with two new (optional) | |
variables IMAGE_VERSION= and IMAGE_ID=, carrying identity and version | |
information for OS images that are updated comprehensively and | |
atomically as one image. Two new specifiers %M, %A now resolve to | |
these two fields in the various configuration options that resolve | |
specifiers. | |
* portablectl gained a new switch --extension= for enabling portable | |
service images with extensions that follow the extension image | |
concept introduced with v248, and thus allows layering multiple | |
images when setting up the root filesystem of the service. | |
* systemd-coredump will now extract ELF build-id information from | |
processes dumping core and include it in the coredump report. | |
Moreover, it will look for ELF .note.package sections with | |
distribution packaging meta-information about the crashing process. | |
This is useful to directly embed the rpm or deb (or any other) | |
package name and version in ELF files, making it easy to match | |
coredump reports with the specific package for which the software was | |
compiled. This is particularly useful on environments with ELF files | |
from multiple vendors, different distributions and versions, as is | |
common today in our containerized and sand-boxed world. For further | |
information, see: | |
https://systemd.io/COREDUMP_PACKAGE_METADATA | |
* A new udev hardware database has been added for FireWire devices | |
(IEEE 1394). | |
* The "net_id" built-in of udev has been updated with three | |
backwards-incompatible changes: | |
- PCI hotplug slot names on s390 systems are now parsed as | |
hexadecimal numbers. They were incorrectly parsed as decimal | |
previously, or ignored if the name was not a valid decimal | |
number. | |
- PCI onboard indices up to 65535 are allowed. Previously, numbers | |
above 16383 were rejected. This primarily impacts s390 systems, | |
where values up to 65535 are used. | |
- Invalid characters in interface names are replaced with "_". | |
The new version of the net naming scheme is "v249". The previous | |
scheme can be selected via the "net.naming-scheme=v247" kernel | |
command line parameter. | |
* sd-bus' sd_bus_is_ready() and sd_bus_is_open() calls now accept a | |
NULL bus object, for which they will return false. Or in other words, | |
an unallocated bus connection is neither ready nor open. | |
* The sd-device API acquired a new API function | |
sd_device_get_usec_initialized() that returns the monotonic time when | |
the udev device first appeared in the database. | |
* sd-device gained a new APIs sd_device_trigger_with_uuid() and | |
sd_device_get_trigger_uuid(). The former is similar to | |
sd_device_trigger() but returns a randomly generated UUID that is | |
associated with the synthetic uevent generated by the call. This UUID | |
may be read from the sd_device object a monitor eventually receives, | |
via the sd_device_get_trigger_uuid(). This interface requires kernel | |
4.13 or above to work, and allows tracking a synthetic uevent through | |
the entire device management stack. The "udevadm trigger --settle" | |
logic has been updated to make use of this concept if available to | |
wait precisely for the uevents it generates. "udevadm trigger" also | |
gained a new parameter --uuid that prints the UUID for each generated | |
uevent. | |
* sd-device also gained new APIs sd_device_new_from_ifname() and | |
sd_device_new_from_ifindex() for allocating an sd-device object for | |
the specified network interface. The former accepts an interface name | |
(either a primary or an alternative name), the latter an interface | |
index. | |
* The native Journal protocol has been documented. Clients may talk | |
this as alternative to the classic BSD syslog protocol for locally | |
delivering log records to the Journal. The protocol has been stable | |
for a long time and in fact been implemented already in a variety | |
of alternative client libraries. This documentation makes the support | |
for that official: | |
https://systemd.io/JOURNAL_NATIVE_PROTOCOL | |
* A new BPFProgram= setting has been added to service files. It may be | |
set to a path to a loaded kernel BPF program, i.e. a path to a bpffs | |
file, or a bind mount or symlink to one. This may be used to upload | |
and manage BPF programs externally and then hook arbitrary systemd | |
services into them. | |
* The "home.arpa" domain that has been officially declared as the | |
choice for domain for local home networks per RFC 8375 has been added | |
to the default NTA list of resolved, since DNSSEC is generally not | |
available on private domains. | |
* The CPUAffinity= setting of unit files now resolves "%" specifiers. | |
* A new ManageForeignRoutingPolicyRules= setting has been added to | |
.network files which may be used to exclude foreign-created routing | |
policy rules from systemd-networkd management. | |
* systemd-network-wait-online gained two new switches -4 and -6 that | |
may be used to tweak whether to wait for only IPv4 or only IPv6 | |
connectivity. | |
* .network files gained a new RequiredFamilyForOnline= setting to | |
fine-tune whether to require an IPv4 or IPv6 address in order to | |
consider an interface "online". | |
* networkctl will now show an over-all "online" state in the per-link | |
information. | |
* In .network files a new OutgoingInterface= setting has been added to | |
specify the output interface in bridge FDB setups. | |
* In .network files the Multipath group ID may now be configured for | |
[NextHop] entries, via the new Group= setting. | |
* The DHCP server logic configured in .network files gained a new | |
setting RelayTarget= that turns the server into a DHCP server relay. | |
The RelayAgentCircuitId= and RelayAgentRemoteId= settings may be used | |
to further tweak the DHCP relay behaviour. | |
* The DHCP server logic also gained a new ServerAddress= setting in | |
.network files that explicitly specifies the server IP address to | |
use. If not specified, the address is determined automatically, as | |
before. | |
* The DHCP server logic in systemd-networkd gained support for static | |
DHCP leases, configurable via the [DHCPServerStaticLease] | |
section. This allows explicitly mapping specific MAC addresses to | |
fixed IP addresses and vice versa. | |
* The RestrictAddressFamilies= setting in service files now supports a | |
new special value "none". If specified sockets of all address | |
families will be made unavailable to services configured that way. | |
* systemd-fstab-generator and systemd-repart have been updated to | |
support booting from disks that carry only a /usr/ partition but no | |
root partition yet, and where systemd-repart can add it in on the | |
first boot. This is useful for implementing systems that ship with a | |
single /usr/ file system, and whose root file system shall be set up | |
and formatted on a LUKS-encrypted volume whose key is generated | |
locally (and possibly enrolled in the TPM) during the first boot. | |
* The [Address] section of .network files now accepts a new | |
RouteMetric= setting that configures the routing metric to use for | |
the prefix route created as effect of the address configuration. | |
Similarly, the [DHCPv6PrefixDelegation] and [IPv6Prefix] sections | |
gained matching settings for their prefix routes. (The option of the | |
same name in the [DHCPv6] section is moved to [IPv6AcceptRA], since | |
it conceptually belongs there; the old option is still understood for | |
compatibility.) | |
* The DHCPv6 IAID and DUID are now explicitly configurable in .network | |
files. | |
* A new udev property ID_NET_DHCP_BROADCAST on network interface | |
devices is now honoured by systemd-networkd, controlling whether to | |
issue DHCP offers via broadcasting. This is used to ensure that s390 | |
layer 3 network interfaces work out-of-the-box with systemd-networkd. | |
* nss-myhostname and systemd-resolved will now synthesize address | |
records for a new special hostname "_outbound". The name will always | |
resolve to the local IP addresses most likely used for outbound | |
connections towards the default routes. On multi-homed hosts this is | |
useful to have a stable handle referring to "the" local IP address | |
that matters most, to the point where this is defined. | |
* The Discoverable Partition Specification has been updated with a new | |
GPT partition flag "grow-file-system" defined for its partition | |
types. Whenever partitions with this flag set are automatically | |
mounted (i.e. via systemd-gpt-auto-generator or the --image= switch | |
of systemd-nspawn or other tools; and as opposed to explicit mounting | |
via /etc/fstab), the file system within the partition is | |
automatically grown to the full size of the partition. If the file | |
system size already matches the partition size this flag has no | |
effect. Previously, this functionality has been available via the | |
explicit x-systemd.growfs mount option, and this new flag extends | |
this to automatically discovered mounts. A new GrowFileSystem= | |
setting has been added to systemd-repart drop-in files that allows | |
configuring this partition flag. This new flag defaults to on for | |
partitions automatically created by systemd-repart, except if they | |
are marked read-only. See the specification for further details: | |
https://systemd.io/DISCOVERABLE_PARTITIONS | |
* .network files gained a new setting RoutesToNTP= in the [DHCPv4] | |
section. If enabled (which is the default), and an NTP server address | |
is acquired through a DHCP lease on this interface an explicit route | |
to this address is created on this interface to ensure that NTP | |
traffic to the NTP server acquired on an interface is also routed | |
through that interface. The pre-existing RoutesToDNS= setting that | |
implements the same for DNS servers is now enabled by default. | |
* A pair of service settings SocketBindAllow= + SocketBindDeny= have | |
been added that may be used to restrict the network interfaces | |
sockets created by the service may be bound to. This is implemented | |
via BPF. | |
* A new ConditionFirmware= setting has been added to unit files to | |
conditionalize on certain firmware features. At the moment it may | |
check whether running on an UEFI system, a device.tree system, or if | |
the system is compatible with some specified device-tree feature. | |
* A new ConditionOSRelease= setting has been added to unit files to | |
check os-release(5) fields. The "=", "!=", "<", "<=", ">=", ">" | |
operators may be used to check if some field has some specific value | |
or do an alphanumerical comparison. Equality comparisons are useful | |
for fields like ID, but relative comparisons for fields like | |
VERSION_ID or IMAGE_VERSION. | |
* hostnamed gained a new Describe() D-Bus method that returns a JSON | |
serialization of the host data it exposes. This is exposed via | |
"hostnamectl --json=" to acquire a host identity description in JSON. | |
It's our intention to add a similar features to most services and | |
objects systemd manages, in order to simplify integration with | |
program code that can consume JSON. | |
* Similarly, networkd gained a Describe() method on its Manager and | |
Link bus objects. This is exposed via "networkctl --json=". | |
* hostnamectl's various "get-xyz"/"set-xyz" verb pairs | |
(e.g. "hostnamectl get-hostname", "hostnamectl "set-hostname") have | |
been replaced by a single "xyz" verb (e.g. "hostnamectl hostname") | |
that is used both to get the value (when no argument is given), and | |
to set the value (when an argument is specified). The old names | |
continue to be supported for compatibility. | |
* systemd-detect-virt and ConditionVirtualization= are now able to | |
correctly identify Amazon EC2 environments. | |
* The LogLevelMax= setting of unit files now applies not only to log | |
messages generated *by* the service, but also to log messages | |
generated *about* the service by PID 1. To suppress logs concerning a | |
specific service comprehensively, set this option to a high log | |
level. | |
* bootctl gained support for a new --make-machine-id-directory= switch | |
that allows precise control on whether to create the top-level | |
per-machine directory in the boot partition that typically contains | |
Type 1 boot loader entries. | |
* During build SBAT data to include in the systemd-boot EFI PE binaries | |
may be specified now. | |
* /etc/crypttab learnt a new option "headless". If specified any | |
requests to query the user interactively for passwords or PINs will | |
be skipped. This is useful on systems that are headless, i.e. where | |
an interactive user is generally not present. | |
* /etc/crypttab also learnt a new option "password-echo=" that allows | |
configuring whether the encryption password prompt shall echo the | |
typed password and if so, do so literally or via asterisks. (The | |
default is the same behaviour as before: provide echo feedback via | |
asterisks.) | |
* FIDO2 support in systemd-cryptenroll/systemd-cryptsetup and | |
systemd-homed has been updated to allow explicit configuration of the | |
"user presence" and "user verification" checks, as well as whether a | |
PIN is required for authentication, via the new switches | |
--fido2-with-user-presence=, --fido2-with-user-verification=, | |
--fido2-with-client-pin= to systemd-cryptenroll and homectl. Which | |
features are available, and may be enabled or disabled depends on the | |
used FIDO2 token. | |
* systemd-nspawn's --private-user= switch now accepts the special value | |
"identity" which configures a user namespacing environment with an | |
identity mapping of 65535 UIDs. This means the container UID 0 is | |
mapped to the host UID 0, and the UID 1 to host UID 1. On first look | |
this doesn't appear to be useful, however it does reduce the attack | |
surface a bit, since the resulting container will possess process | |
capabilities only within its namespace and not on the host. | |
* systemd-nspawn's --private-user-chown switch has been replaced by a | |
more generic --private-user-ownership= switch that accepts one of | |
three values: "chown" is equivalent to the old --private-user-chown, | |
and "off" is equivalent to the absence of the old switch. The value | |
"map" uses the new UID mapping mounts of Linux 5.12 to map ownership | |
of files and directories of the underlying image to the chosen UID | |
range for the container. "auto" is equivalent to "map" if UID mapping | |
mount are supported, otherwise it is equivalent to "chown". The short | |
-U switch systemd-nspawn now implies --private-user-ownership=auto | |
instead of the old --private-user-chown. Effectively this means: if | |
the backing file system supports UID mapping mounts the feature is | |
now used by default if -U is used. Generally, it's a good idea to use | |
UID mapping mounts instead of recursive chown()ing, since it allows | |
running containers off immutable images (since no modifications of | |
the images need to take place), and share images between multiple | |
instances. Moreover, the recursive chown()ing operation is slow and | |
can be avoided. Conceptually it's also a good thing if transient UID | |
range uses do not leak into persistent file ownership anymore. TLDR: | |
finally, the last major drawback of user namespacing has been | |
removed, and -U should always be used (unless you use btrfs, where | |
UID mapped mounts do not exist; or your container actually needs | |
privileges on the host). | |
* nss-systemd now synthesizes user and group shadow records in addition | |
to the main user and group records. Thus, hashed passwords managed by | |
systemd-homed are now accessible via the shadow database. | |
* The userdb logic (and thus nss-systemd, and so on) now read | |
additional user/group definitions in JSON format from the drop-in | |
directories /etc/userdb/, /run/userdb/, /run/host/userdb/ and | |
/usr/lib/userdb/. This is a simple and powerful mechanism for making | |
additional users available to the system, with full integration into | |
NSS including the shadow databases. Since the full JSON user/group | |
record format is supported this may also be used to define users with | |
resource management settings and other runtime settings that | |
pam_systemd and systemd-logind enforce at login. | |
* The userdbctl tool gained two new switches --with-dropin= and | |
--with-varlink= which can be used to fine-tune the sources used for | |
user database lookups. | |
* systemd-nspawn gained a new switch --bind-user= for binding a host | |
user account into the container. This does three things: the user's | |
home directory is bind mounted from the host into the container, | |
below the /run/userdb/home/ hierarchy. A free UID is picked in the | |
container, and a user namespacing UID mapping to the host user's UID | |
installed. And finally, a minimal JSON user and group record (along | |
with its hashed password) is dropped into /run/host/userdb/. These | |
records are picked up automatically by the userdb drop-in logic | |
describe above, and allow the user to login with the same password as | |
on the host. Effectively this means: if host and container run new | |
enough systemd versions making a host user available to the container | |
is trivially simple. | |
* systemd-journal-gatewayd now supports the switches --user, --system, | |
--merge, --file= that are equivalent to the same switches of | |
journalctl, and permit exposing only the specified subset of the | |
Journal records. | |
* The OnFailure= dependency between units is now augmented with a | |
implicit reverse dependency OnFailureOf= (this new dependency cannot | |
be configured directly it's only created as effect of an OnFailure= | |
dependency in the reverse order — it's visible in "systemctl show" | |
however). Similar, Slice= now has an reverse dependency SliceOf=, | |
that is also not configurable directly, but useful to determine all | |
units that are members of a slice. | |
* A pair of new dependency types between units PropagatesStopTo= + | |
StopPropagatedFrom= has been added, that allows propagation of unit | |
stop events between two units. It operates similar to the existing | |
PropagatesReloadTo= + ReloadPropagatedFrom= dependencies. | |
* A new dependency type OnSuccess= has been added (plus the reverse | |
dependency OnSuccessOf=, which cannot be configured directly, but | |
exists only as effect of the reverse OnSuccess=). It is similar to | |
OnFailure=, but triggers in the opposite case: when a service exits | |
cleanly. This allows "chaining up" of services where one or more | |
services are started once another service has successfully completed. | |
* A new dependency type Upholds= has been added (plus the reverse | |
dependency UpheldBy=, which cannot be configured directly, but exists | |
only as effect of Upholds=). This dependency type is a stronger form | |
of Wants=: if a unit has an UpHolds= dependency on some other unit | |
and the former is active then the latter is started whenever it is | |
found inactive (and no job is queued for it). This is an alternative | |
to Restart= inside service units, but less configurable, and the | |
request to uphold a unit is not encoded in the unit itself but in | |
another unit that intends to uphold it. | |
* The systemd-ask-password tool now also supports reading passwords | |
from the credentials subsystem, via the new --credential= switch. | |
* The systemd-ask-password tool learnt a new switch --emoji= which may | |
be used to explicit control whether the lock and key emoji (🔐) is | |
shown in the password prompt on suitable TTYs. | |
* The --echo switch of systemd-ask-password now optionally takes a | |
parameter that controls character echo. It may either show asterisks | |
(default, as before), turn echo off entirely, or echo the typed | |
characters literally. | |
* The systemd-ask-password tool also gained a new -n switch for | |
suppressing output of a trailing newline character when writing the | |
acquired password to standard output, similar to /bin/echo's -n | |
switch. | |
* New documentation has been added that describes the organization of |