Systemd Versions Save

The systemd System and Service Manager

v253

1 year ago

systemd System and Service Manager

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.

      [email protected], 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 [email protected] now
      includes a call to pam_namespace. This puts children of [email protected]
      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.
    * 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
      [email protected] 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.
    * 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
      [email protected] 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

v253-rc3

1 year ago

systemd System and Service Manager

CHANGES WITH 253 in spe:

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.

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.

      [email protected], 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 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 [email protected] now
      includes a call to pam_namespace. This puts children of [email protected]
      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 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.
    * 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
      [email protected] 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.
    * 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
      [email protected] 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, 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 Yuan, MkfsSion, msizanoen1, mvzlb, MVZ Ludwigsburg, Neil Moore,
    Nick Rosbrook, noodlejetski, Pasha Vorobyev, Peter Cai, p-fpv,
    Phaedrus Leeds, Philipp Jungkamp, Quentin Deslandes, 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-10

v253-rc2

1 year ago

systemd System and Service Manager

CHANGES WITH 253 in spe:

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.

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.

      [email protected], 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 no longer erase all files of the initrd unless it's
      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.

    * 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 manager will now parse a new "vmm.notify_socket"
      system credential, which may be supplied to a VM via SMBIOS. If
      found, it 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 [email protected] now
      includes a call to pam_namespace. This puts children of [email protected]
      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 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.
    * 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
      [email protected] 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.
    * 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
      [email protected] 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 Matrin 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,
    David Tardon, dependabot[bot], Dirk Su, Dmitry V. Levin, drosdeck,
    Edson Juliano Drosdeck, edupont, Eric DeVolder, Erik Moqvist,
    Evgeny Vereshchagin, Felix Riemann, Franck Bui, Frantisek Sumsal,
    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, 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 Yuan, MkfsSion, msizanoen1, mvzlb, MVZ Ludwigsburg, Neil Moore,
    Nick Rosbrook, noodlejetski, Pasha Vorobyev, Peter Cai, p-fpv,
    Phaedrus Leeds, Philipp Jungkamp, Quentin Deslandes, Ray Strode,
    reuben olinsky, Richard E. van der Luit, Richard Phibel,
    Ricky Tigg, Robin Humble, rogg, Rudi Heitbaum, Sam James,
    Samuel Thibault, Siddhesh Poyarekar, Space Meyer, Spindle Security,
    Steve Ramage, Thomas Haller, Tonći Galić, 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-02

v253-rc1

1 year ago

systemd System and Service Manager

CHANGES WITH 253 in spe:

Deprecations and incompatible changes

    * systemctl will now warn when invoked without /proc mounted (e.g. when
      invoked after chroot into an image 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 well-formed JSON, 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, measuring kernel command line into PCR 8 along with the
      -Defi-tpm-pcr-compat compile-time option.

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 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 unit type Type=notify-reload is defined. When such a unit is
      reloaded via a signal, the manager will wait until it receives a
      "READY=1" notification from the unit. Otherwise, this type is the
      same as Type=notify.

      [email protected], systemd-networkd.service, systemd-udevd.service, and
      systemd-logind have been updated to this type; their reloads are now
      synchronuous.

    * Initrd environments which are not on a temporary file system (for
      example an overlayfs combination) are now supported. Systemd will only
      skip removal of the files in the initrd if it doesn't detect a
      temporary file system.

    * New MemoryZSwapMax= option has been added to configure
      memory.zswap.max cgroup properties (the maximum amount of zswap used).

    * New LogFilterPatterns= option can be used to specify regexp
      accept/deny patterns for log entries generated by the unit. Based on
      the option value, the manager sets the
      user.journald_log_filter_patterns extended attribute on the unit
      cgroup. systemd-journald checks for this attribute when receiving
      messages, and will filter messages by matching the MESSAGE= part.
      Rejected messages are neither stored in the journal nor forwarded.
      This option can be used to filter noisy or uninteresting messages
      from units.

    * The manager has a new
      org.freedesktop.systemd1.Manager.GetUnitByPIDFD() 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, instead of failing, systemd will now
      reinitialize the device when the page size of the swap space does not
      match the page size of the running kernel.

    * Systemd now executes generators in a mount namespace "sandbox" with
      most of the file system read-only, but with write access 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 manager will load the vmm.notify_socket credential. If found,
      it 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 host over a VSOCK socket.

    * The sample PAM configuration file for [email protected] now
      includes a call to pam_namespace. This puts children of [email protected]
      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
      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 cgroup resource limits are
      now applied, while they were previously ignored.

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.

    * Block partitions 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 random seed 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 the
      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 not from the ESP, for example
      for direct kernel boot under QEMU or when embedded into the firmware.

    * systemd-boot now parses SMBIOS info 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-stub now processes random seeds in the same way as
      systemd-boot, in case a unified kernel image is being used from a
      different bootloader than systemd-boot.

    * 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, and 'kernel-inspect' provides information
      about the embedded command line and kernel version.

    * bootctl now honours $KERNEL_INSTALL_CONF_ROOT with the same meaning
      as for kernel-install.

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.
    * The [DHCPv4] section in .network file gained new SocketPriority=
      setting that assigns the Linux socket priority used by the DHCPv4
      raw socket. Can 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 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 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 fo the
      files and directories in the image.

    * systemd-dissect gained a new option --mtree, to generate output
      compatible with BSD mtree(5).

    * systemd-dissect gained a new option --with, to execute a command in
      the image temporarily mounted.

    * systemd-dissect gained a new option --discover, to search for
      Discoverable Disk Images (DDIs) in well-known directories. 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).

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
      taken into account 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 erofs (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).

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 normally disabled
      to stop collection of audit messages.

    * 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.
    components

    * systemd-cryptenroll now supports unlocking via FIDO2 tokens (option
      --unlock-fido2-device=).

    * systemd-cryptsetup now supports new options tpm2-measure-pcr= and
      tpm2-measure-bank= in crypttab(5). These allow specifying the
      PCR bank and number into which the volume key should be measured.

    * When measuring data into a PCR, an authenticated hash (HMAC) is used
      on the CPU, to further protect the data before it leaves the CPU.

    * systemd-gpt-auto-generator mounts the ESP and XBOOTLDR partions with
      "noexec,nosuid,nodev".

    * systemd-pcrphase gained new options --machine-id and --file-system=
      to measure the machine-id and mount point information into a PCR.

    * The machine-id is measured into PCR 15 during early boot.

    * For the root and /var/ volumes, the mount point information and
      options, and volume encryption keys in case encryption is used, will
      be measured into PCR 15.

    * 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
      can 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. timedatectl 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 disk timestamp, similarly to what it did when reaching
      synchronization via NTP.

      systemd-timesyncd will now also update the timestamp file on each
      boot, making it more likely that the system time increases in
      subsequent boots.

    * systemd-vconsole-setup gained support for 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-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 gained new --json=, --table, and --no-legend options
      that affect the output of 'plot'.

    * '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.

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
      id128_t parameter has an invalid format. They also accept NULL as
      output parameter in more places, which is useful when the caller only
      wants to check 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, in the "vsock:CID:port" format, for
      the notify_socket parameter/environment variable/credential.

    * 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 Matrin Hardened Security for Intel Processors" (HS SRE)
      virtualization is now detected.

Changes in the build system:

    * Standalone variant of systemd-repart is built (if -Dstandalone=true).

    * systemd-ac-power has been moved 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, asavah, Benjamin Fogle, Benjamin Tissoires,
    berenddeschouwer, BerndAdameit, Bernd Steinhauser, blutch112,
    Callum Farmer, Carlo Teubner, Charles Hardin, chris,
    Christian Brauner, Christian Göttsche, Cristian Rodríguez,
    Daan De Meyer, Dan Streetman, DaPigGuy, David Tardon,
    dependabot[bot], Dirk Su, Dmitry V. Levin, drosdeck,
    Edson Juliano Drosdeck, edupont, Eric DeVolder, Erik Moqvist,
    Evgeny Vereshchagin, Felix Riemann, Franck Bui, Frantisek Sumsal,
    Gerd Hoffmann, Gio, Hannoskaj, Hans de Goede, Hugo Carvalho,
    igo95862, Ivan Shapovalov, Jacek Migacz, Jade Lovelace,
    Jan Engelhardt, Jan Janssen, Jan Macku, January,
    Jason A. Donenfeld, jcg, 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 Yuan, MkfsSion, msizanoen1, mvzlb, MVZ Ludwigsburg, Neil Moore,
    Nick Rosbrook, noodlejetski, Pasha Vorobyev, Peter Cai, p-fpv,
    Phaedrus Leeds, Philipp Jungkamp, Quentin Deslandes, Ray Strode,
    reuben olinsky, Richard E. van der Luit, Richard Phibel,
    Ricky Tigg, rogg, Sam James, Samuel Thibault, Siddhesh Poyarekar,
    Space Meyer, Spindle Security, Steve Ramage, Thomas Haller,
    Tonći Galić, Torsten Hilbrich, uerdogan, Ulrich Ölmann,
    Valentin David, Vitaly Kuznetsov, Vito Caputo, Waltibaba,
    Will Fancher, William Roberts, Youfu Zhang, Yu Watanabe,
    Zbigniew Jędrzejewski-Szmek, Дамјан Георгиевски,
    наб

    — Warsaw, 2023-01-25

v252

1 year ago

systemd System and Service Manager

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 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.

Contributors:

    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 👻

v252-rc3

1 year ago

systemd System and Service Manager

CHANGES WITH 252 in spe:

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 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.

    * sd-boot will now try to detect and warn about overlapping PE sections
      in the UKI.

    * 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.

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.

    * 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.

    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, 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, 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, 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, Ted X. Toth,
    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, Yuri Chornoivan,
    Yu Watanabe, Zbigniew Jędrzejewski-Szmek, Zhaofeng Li, наб

    – Under the Sea, 2022-10-07

v252-rc2

1 year ago

CHANGES WITH 252 in spe:

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 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.

    * sd-boot will now try to detect and warn about overlapping PE sections
      in the UKI.

    * 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.

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.

    * 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.

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, Akihiko Odaki,
    Alban Bedel, Albert Mikaelyan, Aleksey Vasenev, Alexander Graf,
    Alexander Shopov, Alexander Wilson, Alper Nebi Yasak, 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, Chih-Hsuan Yen,
    Christian Brauner, Christian Göttsche, Christian Hesse, Clyde Byrd III,
    codefiles, Colin Walters, Cristian Rodríguez, Daan De Meyer,
    Daniel Braunwarth, Dan Streetman, Darsey Litzenberger, David Edmundson,
    David Jaša, David Rheinsberg, 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, 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 Luebbe, Jan Macku, Jason A. Donenfeld, Javkhlanbayar Khongorzul,
    Jeremy Soller, JeroenHD, jiangchuangang, João Loureiro,
    Joaquín Ignacio Aramendía, Johannes Schauer Marin Rodrigues,
    Jonas Kümmerlin, Jonas Witschel, Jonathan Lebon, Joost Heitbrink,
    Jörg Thalheim, josh-gordon-fb, Kai Lueke, lastkrick,
    Lennart Poettering, licunlong, Li kunyu, LockBlock-dev, Loïc Collignon,
    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, Oleg Solovyov,

    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, 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, 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 Luebbe, Jan Macku,
    Jason A. Donenfeld, Javkhlanbayar Khongorzul, Jeremy Soller, JeroenHD,
    jiangchuangang, João Loureiro, Joaquín Ignacio Aramendía,
    Johannes Schauer Marin Rodrigues, Jonas Kümmerlin, Jonas Witschel,
    Jonathan Lebon, Joost Heitbrink, Jörg Thalheim, josh-gordon-fb,
    Kai Lueke, lastkrick, Lennart Poettering, 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, Oleg Solovyov,
    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, Ted X. Toth, 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, Wenchao Hao, William Roberts,
    williamsumendap, wineway, Yu Watanabe, Zbigniew Jędrzejewski-Szmek,
    Zhaofeng Li, наб

    – Under the Sea, 2022-10-07

v252-rc1

1 year ago

CHANGES WITH 252 in spe:

Announcement of Future Feature Removal:

    * 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 precalculating and signing expected
      TPM2 PCR values seen once a given unified kernel image (UKI) with
      systemd-stub is booted. This is useful for implementing TPM2 policies
      for LUKS encrypted volumes and encrypted system/service credentials,
      that robustly bind to kernels carrying appropriate PCR signature
      information. The signed expected PCR information may be embedded
      inside UKI images for this purpose so that it is automatically
      available in userspace, once the UKI is booted.

      systemd-cryptsetup, systemd-cryptenroll and systemd-creds have been
      updated to make use of this information if available in the booted
      kernel.

      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 signature key pair. Example: if a
      hypothetical distro FooOS prepares its UKI kernels 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
      other 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.)

      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 image is updated, without any
      prepartion during the update scheme — as long as each UKI carries the
      necessary PCR signature information.

    * systemd-pcrphase is a new tool that is invoked at 4 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. (Think: 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.

    * 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.

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 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.

    * 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.

    * sd-boot will now try to detect and warn about overlapping PE sections
      in the UKI.

    * 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.

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 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 to set 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.

    * 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.

    * systemd-analyze gained a new verb 'compare-versions' that implements
      comparisons for versions strings (similarly to 'rpmdev-vercmp' and
      'dpkg --compare-versions').

    * 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.

    * OpenSSL is the default crypto backend for systemd-resolved. (gnutls
      is still supported.)

    * '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. The
      corresponding 0x2 flag is now accepted by the *WithExtensions() D-Bus
      methods of systemd-portabled. For now, this flag means that on
      attach/detach the checks whether the units are already present and
      running will be skipped. Callers must be sure to do those checks
      themselves.

    * 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-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

    * 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.

    * 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.

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.

    Contributions from: 김인수, Adam Williamson, adrian5, Akihiko Odaki,
    Alban Bedel, Albert Mikaelyan, Aleksey Vasenev, Alexander Graf,
    Alexander Shopov, Alexander Wilson, Alper Nebi Yasak, 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, Chih-Hsuan Yen,
    Christian Brauner, Christian Göttsche, Christian Hesse, Clyde Byrd III,
    codefiles, Colin Walters, Cristian Rodríguez, Daan De Meyer,
    Daniel Braunwarth, Dan Streetman, Darsey Litzenberger, David Edmundson,
    David Jaša, David Rheinsberg, 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, 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 Luebbe, Jan Macku, Jason A. Donenfeld, Javkhlanbayar Khongorzul,
    Jeremy Soller, JeroenHD, jiangchuangang, João Loureiro,
    Joaquín Ignacio Aramendía, Johannes Schauer Marin Rodrigues,
    Jonas Kümmerlin, Jonas Witschel, Jonathan Lebon, Joost Heitbrink,
    Jörg Thalheim, josh-gordon-fb, Kai Lueke, lastkrick,
    Lennart Poettering, licunlong, Li kunyu, LockBlock-dev, Loïc Collignon,
    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, Oleg Solovyov,
    Pablo Ceballos, Pavel Zhukov, Phaedrus Leeds, Philipp Gortan,
    Piotr Drąg, 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,
    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, Wenchao Hao,
    William Roberts, williamsumendap, wineway, Yu Watanabe,
    Zbigniew Jędrzejewski-Szmek, Zhaofeng Li, наб

    – Under the Sea, 2022-10-07

v251

1 year ago

systemd System and Service Manager

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 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 that
      are at least as high quality as RDRAND. 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 year's time.

    * busctl capture now writes output in the newer pcapng format instead
      of pcap.

    * An 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 that 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 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 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 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

v251-rc3

2 years ago
    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 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 that
      are at least as high quality as RDRAND. 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 year's time.

    * busctl capture now writes output in the newer pcapng format instead
      of pcap.

    * An 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 that 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.

    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 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 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 search for credentials to
      import in the /etc/credstore/, /run/credstore/, /usr/lib/credstore/
      directories if no or a relative source filename is passed. Similar
      LoadCredentialEncrypted= will search in these same directories, plus
      /etc/credstore.encrypted/, /run/credstore.encrypted/ and
      /usr/lib/credstore.encrypted/. The idea is that these directories are
      now the recommended system-wide location to place credentials for
      automatic pick-up by services in.

    * 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 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).

    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, 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,
    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 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, Nishal Kulkarni, Noel Kuntze, Peter Hutterer,
    Peter Morrow, Pigmy-penguin, 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,
    Tyson Whitehead, Vishal Chillara Srinivas, Vivien Didelot,
    w30023233, wangyuhang, Weblate, Xiaotian Wu, yangmingtai, YmrDtnJu,
    Yonathan Randolph, Yutsuten, Yu Watanabe,
    Zbigniew Jędrzejewski-Szmek, наб