#4745: systemd-247
--------------------+-----------------------
 Reporter:  renodr  |       Owner:  renodr
     Type:  task    |      Status:  assigned
 Priority:  normal  |   Milestone:  10.1
Component:  Book    |     Version:  SVN
 Severity:  normal  |  Resolution:
 Keywords:          |
--------------------+-----------------------

Comment (by renodr):

 {{{
 CHANGES WITH 247:

         * KERNEL API INCOMPATIBILITY: Linux 4.14 introduced two new
 uevents
           "bind" and "unbind" to the Linux device model. When this kernel
           change was made, systemd-udevd was only minimally updated to
 handle
           and propagate these new event types. The introduction of these
 new
           uevents (which are typically generated for USB devices and
 devices
           needing a firmware upload before being functional) resulted in a
           number of issues which we so far didn't address. We hoped the
 kernel
           maintainers would themselves address these issues in some form,
 but
           that did not happen. To handle them properly, many (if not most)
 udev
           rules files shipped in various packages need updating, and so do
 many
           programs that monitor or enumerate devices with libudev or sd-
 device,
           or otherwise process uevents. Please note that this
 incompatibility
           is not fault of systemd or udev, but caused by an incompatible
 kernel
           change that happened back in Linux 4.14, but is becoming more
 and
           more visible as the new uevents are generated by more kernel
 drivers.

           To minimize issues resulting from this kernel change (but not
 avoid
           them entirely) starting with systemd-udevd 247 the udev "tags"
           concept (which is a concept for marking and filtering devices
 during
           enumeration and monitoring) has been reworked: udev tags are now
           "sticky", meaning that once a tag is assigned to a device it
 will not
           be removed from the device again until the device itself is
 removed
           (i.e. unplugged). This makes sure that any application
 monitoring
           devices that match a specific tag is guaranteed to both see
 uevents
           where the device starts being relevant, and those where it stops
           being relevant (the latter now regularly happening due to the
 new
           "unbind" uevent type). The udev tags concept is hence now a
 concept
           tied to a *device* instead of a device *event* — unlike for
 example
           udev properties whose lifecycle (as before) is generally tied to
 a
           device event, meaning that the previously determined properties
 are
           forgotten whenever a new uevent is processed.

           With the newly redefined udev tags concept, sometimes it's
 necessary
           to determine which tags are the ones applied by the most recent
           uevent/database update, in order to discern them from those
           originating from earlier uevents/database updates of the same
           device. To accommodate for this a new automatic property
 CURRENT_TAGS
           has been added that works similar to the existing TAGS property
 but
           only lists tags set by the most recent uevent/database
           update. Similarly, the libudev/sd-device API has been updated
 with
           new functions to enumerate these 'current' tags, in addition to
 the
           existing APIs that now enumerate the 'sticky' ones.

           To properly handle "bind"/"unbind" on Linux 4.14 and newer it is
           essential that all udev rules files and applications are updated
 to
           handle the new events. Specifically:

           • All rule files that currently use a header guard similar to
             ACTION!="add|change",GOTO="xyz_end" should be updated to use
             ACTION=="remove",GOTO="xyz_end" instead, so that the
             properties/tags they add are also applied whenever "bind" (or
             "unbind") is seen. (This is most important for all physical
 device
             types — those for which "bind" and "unbind" are currently
             generated, for all other device types this change is still
             recommended but not as important — but certainly prepares for
             future kernel uevent type additions).

           • Similarly, all code monitoring devices that contains an 'if'
 branch
             discerning the "add" + "change" uevent actions from all other
             uevents actions (i.e. considering devices only relevant after
 "add"
             or "change", and irrelevant on all other events) should be
 reworked
             to instead negatively check for "remove" only (i.e.
 considering
             devices relevant after all event types, except for "remove",
 which
             invalidates the device). Note that this also means that
 devices
             should be considered relevant on "unbind", even though
 conceptually
             this — in some form — invalidates the device. Since the
 precise
             effect of "unbind" is not generically defined, devices should
 be
             considered relevant even after "unbind", however I/O errors
             accessing the device should then be handled gracefully.

           • Any code that uses device tags for deciding whether a device
 is
             relevant or not most likely needs to be updated to use the new
             udev_device_has_current_tag() API (or
 sd_device_has_current_tag()
             in case sd-device is used), to check whether the tag is set at
 the
             moment an uevent is seen (as opposed to the existing
             udev_device_has_tag() API which checks if the tag ever existed
 on
             the device, following the API concept redefinition explained
             above).

           We are very sorry for this breakage and the requirement to
 update
           packages using these interfaces. We'd again like to underline
 that
           this is not caused by systemd/udev changes, but result of a
 kernel
           behaviour change.

         * UPCOMING INCOMPATIBILITY: So far most downstream distribution
           packages have not retriggered devices once the udev package (or
 any
           auxiliary package installing additional udev rules) is updated.
 We
           intend to work with major distributions to change this, so that
           "udevadm trigger -a change" is issued on such upgrades, ensuring
 that
           the updated ruleset is applied to the devices already
 discovered, so
           that (asynchronously) after the upgrade completed the udev
 database
           is consistent with the updated rule set. This means udev rules
 must
           be ready to be retriggered with a "change" action any time, and
           result in correct and complete udev database entries. While the
           majority of udev rule files known to us currently get this
 right,
           some don't. Specifically, there are udev rules files included in
           various packages that only set udev properties on the "add"
 action,
           but do not handle the "change" action. If a device matching
 those
           rules is retriggered with the "change" action (as is intended
 here)
           it would suddenly lose the relevant properties. This always has
 been
           problematic, but as soon as all udev devices are triggered on
 relevant
           package upgrades this will become particularly so. It is
 strongly
           recommended to fix offending rules so that they can handle a
 "change"
           action at any time, and acquire all necessary udev properties
 even
           then. Or in other words: the header guard mentioned above
           (ACTION=="remove",GOTO="xyz_end") is the correct approach to
 handle
           this, as it makes sure rules are rerun on "change" correctly,
 and
           accumulate the correct and complete set of udev properties. udev
 rule
           definitions that cannot handle "change" events being triggered
 at
           arbitrary times should be considered buggy.

         * The MountAPIVFS= service file setting now defaults to on if
           RootImage= and RootDirectory= are used, which means that with
 those
           two settings /proc/, /sys/ and /dev/ are automatically properly
 set
           up for services. Previous behaviour may be restored by
 explicitly
           setting MountAPIVFS=off.

         * Since PAM 1.2.0 (2015) configuration snippets may be placed in
           /usr/lib/pam.d/ in addition to /etc/pam.d/. If a file exists in
 the
           latter it takes precedence over the former, similar to how most
 of
           systemd's own configuration is handled. Given that PAM stack
           definitions are primarily put together by OS
 vendors/distributions
           (though possibly overridden by users), this systemd release
 moves its
           own PAM stack configuration for the "systemd-user" PAM service
 (i.e.
           for the PAM session invoked by the per-user [email protected]
 instance)
           from /etc/pam.d/ to /usr/lib/pam.d/. We recommend moving all
           packages' vendor versions of their PAM stack definitions from
           /etc/pam.d/ to /usr/lib/pam.d/, but if such OS-wide migration is
 not
           desired the location to which systemd installs its PAM stack
           configuration may be changed via the -Dpamconfdir Meson option.

         * The runtime dependencies on libqrencode, libpcre2,
 libidn/libidn2,
           libpwquality and libcryptsetup have been changed to be based on
           dlopen(): instead of regular dynamic library dependencies
 declared in
           the binary ELF headers, these libraries are now loaded on demand
           only, if they are available. If the libraries cannot be found
 the
           relevant operations will fail gracefully, or a suitable fallback
           logic is chosen. This is supposed to be useful for general
 purpose
           distributions, as it allows minimizing the list of dependencies
 the
           systemd packages pull in, permitting building of more minimal OS
           images, while still making use of these "weak" dependencies
 should
           they be installed. Since many package managers automatically
           synthesize package dependencies from ELF shared library
 dependencies,
           some additional manual packaging work has to be done now to
 replace
           those (slightly downgraded from "required" to "recommended" or
           whatever is conceptually suitable for the package manager). Note
 that
           this change does not alter build-time behaviour: as before the
           build-time dependencies have to be installed during build, even
 if
           they now are optional during runtime.

         * sd-event.h gained a new call sd_event_add_time_relative() for
           installing timers relative to the current time. This is mostly a
           convenience wrapper around the pre-existing sd_event_add_time()
 call
           which installs absolute timers.

         * sd-event event sources may now be placed in a new "exit-on-
 failure"
           mode, which may be controlled via the new
           sd_event_source_get_exit_on_failure() and
           sd_event_source_set_exit_on_failure() functions. If enabled, any
           failure returned by the event source handler functions will
 result in
           exiting the event loop (unlike the default behaviour of just
           disabling the event source but continuing with the event loop).
 This
           feature is useful to set for all event sources that define
 "primary"
           program behaviour (where failure should be fatal) in contrast to
           "auxiliary" behaviour (where failure should remain local).

         * Most event source types sd-event supports now accept a NULL
 handler
           function, in which case the event loop is exited once the event
           source is to be dispatched, using the userdata pointer —
 converted to
           a signed integer — as exit code of the event loop. Previously
 this
           was supported for IO and signal event sources already. Exit
 event
           sources still do not support this (simply because it makes
 little
           sense there, as the event loop is already exiting when they are
           dispatched).

         * A new per-unit setting RootImageOptions= has been added which
 allows
           tweaking the mount options for any file system mounted as effect
 of
           the RootImage= setting.

         * Another new per-unit setting MountImages= has been added, that
 allows
           mounting additional disk images into the file system tree
 accessible
           to the service.

         * Timer units gained a new FixedRandomDelay= boolean setting. If
           enabled, the random delay configured with RandomizedDelaySec= is
           selected in a way that is stable on a given system (though still
           different for different units).

         * Socket units gained a new setting Timestamping= that takes "us",
 "ns"
           or "off". This controls the SO_TIMESTAMP/SO_TIMESTAMPNS socket
           options.

         * systemd-repart now generates JSON output when requested with the
 new
           --json= switch.

         * systemd-machined's OpenMachineShell() bus call will now pass
           additional policy metadata data fields to the PolicyKit
           authentication request.

         * systemd-tmpfiles gained a new -E switch, which is equivalent to
           --exclude-prefix=/dev --exclude-prefix=/proc --exclude=/run
           --exclude=/sys. It's particularly useful in combination with
 --root=,
           when operating on OS trees that do not have any of these four
 runtime
           directories mounted, as this means no files below these subtrees
 are
           created or modified, since those mount points should probably
 remain
           empty.

         * systemd-tmpfiles gained a new --image= switch which is like
 --root=,
           but takes a disk image instead of a directory as argument. The
           specified disk image is mounted inside a temporary mount
 namespace
           and the tmpfiles.d/ drop-ins stored in the image are executed
 and
           applied to the image. systemd-sysusers similarly gained a new
           --image= switch, that allows the sysusers.d/ drop-ins stored in
 the
           image to be applied onto the image.

         * Similarly, the journalctl command also gained an --image=
 switch,
           which is a quick one-step solution to look at the log data
 included
           in OS disk images.

         * journalctl's --output=cat option (which outputs the log content
           without any metadata, just the pure text messages) will now make
 use
           of terminal colors when run on a suitable terminal, similarly to
 the
           other output modes.

         * JSON group records now support a "description" string that may
 be
           used to add a human-readable textual description to such groups.
 This
           is supposed to match the user's GECOS field which traditionally
           didn't have a counterpart for group records.

         * The "systemd-dissect" tool that may be used to inspect OS disk
 images
           and that was previously installed to /usr/lib/systemd/ has now
 been
           moved to /usr/bin/, reflecting its updated status of an
 officially
           supported tool with a stable interface. It gained support for a
 new
           --mkdir switch which when combined with --mount has the effect
 of
           creating the directory to mount the image to if it is missing
           first. It also gained two new commands --copy-from and --copy-to
 for
           copying files and directories in and out of an OS image without
 the
           need to manually mount it. It also acquired support for a new
 option
           --json= to generate JSON output when inspecting an OS image.

         * The cgroup2 file system is now mounted with the
           "memory_recursiveprot" mount option, supported since kernel 5.7.
 This
           means that the MemoryLow= and MemoryMin= unit file settings now
 apply
           recursively to whole subtrees.

         * systemd-homed now defaults to using the btrfs file system — if
           available — when creating home directories in LUKS volumes. This
 may
           be changed with the DefaultFileSystemType= setting in
 homed.conf.
           It's now the default file system in various major distributions
 and
           has the major benefit for homed that it can be grown and shrunk
 while
           mounted, unlike the other contenders ext4 and xfs, which can
 both be
           grown online, but not shrunk (in fact xfs is the technically
 most
           limited option here, as it cannot be shrunk at all).

         * JSON user records managed by systemd-homed gained support for
           "recovery keys". These are basically secondary passphrases that
 can
           unlock user accounts/home directories. They are computer-
 generated
           rather than user-chosen, and typically have greater entropy.
           homectl's --recovery-key= option may be used to add a recovery
 key to
           a user account. The generated recovery key is displayed as a QR
 code,
           so that it can be scanned to be kept in a safe place. This
 feature is
           particularly useful in combination with systemd-homed's support
 for
           FIDO2 or PKCS#11 authentication, as a secure fallback in case
 the
           security tokens are lost. Recovery keys may be entered wherever
 the
           system asks for a password.

         * systemd-homed now maintains a "dirty" flag for each LUKS
 encrypted
           home directory which indicates that a home directory has not
 been
           deactivated cleanly when offline. This flag is useful to
 identify
           home directories for which the offline discard logic did not run
 when
           offlining, and where it would be a good idea to log in again to
 catch
           up.

         * systemctl gained a new parameter --timestamp= which may be used
 to
           change the style in which timestamps are output, i.e. whether to
 show
           them in local timezone or UTC, or whether to show µs
 granularity.

         * Alibaba's "pouch" container manager is now detected by
           systemd-detect-virt, ConditionVirtualization= and similar
           constructs. Similar, they now also recognize IBM PowerVM machine
           virtualization.

         * systemd-nspawn has been reworked to use the /run/host/incoming/
 as
           place to use for propagating external mounts into the
           container. Similarly /run/host/notify is now used as the socket
 path
           for container payloads to communicate with the container manager
           using sd_notify(). The container manager now uses the
           /run/host/inaccessible/ directory to place "inaccessible" file
 nodes
           of all relevant types which may be used by the container payload
 as
           bind mount source to over-mount inodes to make them
 inaccessible.
           /run/host/container-manager will now be initialized with the
 same
           string as the $container environment variable passed to the
           container's PID 1. /run/host/container-uuid will be initialized
 with
           the same string as $container_uuid. This means the /run/host/
           hierarchy is now the primary way to make host resources
 available to
           the container. The Container Interface documents these new files
 and
           directories:

           https://systemd.io/CONTAINER_INTERFACE

         * Support for the "ConditionNull=" unit file condition has been
           deprecated and undocumented for 6 years. systemd started to warn
           about its use 1.5 years ago. It has now been removed entirely.

         * sd-bus.h gained a new API call sd_bus_error_has_names(), which
 takes
           a sd_bus_error struct and a list of error names, and checks if
 the
           error matches one of these names. It's a convenience wrapper
 that is
           useful in cases where multiple errors shall be handled the same
 way.

         * A new system call filter list "@known" has been added, that
 contains
           all system calls known at the time systemd was built.

         * Behaviour of system call filter allow lists has changed
 slightly:
           system calls that are contained in @known will result in a EPERM
 by
           default, while those not contained in it result in ENOSYS. This
           should improve compatibility because known system calls will
 thus be
           communicated as prohibited, while unknown (and thus newer ones)
 will
           be communicated as not implemented, which hopefully has the
 greatest
           chance of triggering the right fallback code paths in client
           applications.

         * "systemd-analyze syscall-filter" will now show two separate
 sections
           at the bottom of the output: system calls known during systemd
 build
           time but not included in any of the filter groups shown above,
 and
           system calls defined on the local kernel but known during
 systemd
           build time.

         * If the $SYSTEMD_LOG_SECCOMP=1 environment variable is set for
           systemd-nspawn all system call filter violations will be logged
 by
           the kernel (audit). This is useful for tracking down system
 calls
           invoked by container payloads that are prohibited by the
 container's
           system call filter policy.

         * If the $SYSTEMD_SECCOMP=0 environment variable is set for
           systemd-nspawn (and other programs that use seccomp) all seccomp
           filtering is turned off.

         * Two new unit file settings ProtectProc= and ProcSubset= have
 been
           added that expose the hidepid= and subset= mount options of
 procfs.
           All processes of the unit will only see processes in /proc that
 are
           are owned by the unit's user. This is an important new
 sandboxing
           option that is recommended to be set on all system services. All
           long-running system services that are included in systemd itself
 set
           this option now. This option is only supported on kernel 5.8 and
           above, since the hidepid= option supported on older kernels was
 not a
           per-mount option but actually applied to the whole PID
 namespace.

         * Socket units gained a new boolean setting FlushPending=. If
 enabled
           all pending socket data/connections are flushed whenever the
 socket
           unit enters the "listening" state, i.e. after the associated
 service
           exited.

         * The unit file setting NUMAMask= gained a new "all" value: when
 used,
           all existing NUMA nodes are added to the NUMA mask.

         * A new "credentials" logic has been added to system services.
 This is
           a simple mechanism to pass privileged data to services in a safe
 and
           secure way. It's supposed to be used to pass per-service secret
 data
           such as passwords or cryptographic keys but also associated less
           private information such as user names, certificates, and
 similar to
           system services. Each credential is identified by a short user-
 chosen
           name and may contain arbitrary binary data. Two new unit file
           settings have been added: SetCredential= and LoadCredential=.
 The
           former allows setting a credential to a literal string, the
 latter
           sets a credential to the contents of a file (or data read from a
           user-chosen AF_UNIX stream socket). Credentials are passed to
 the
           service via a special credentials directory, one file for each
           credential. The path to the credentials directory is passed in a
 new
           $CREDENTIALS_DIRECTORY environment variable. Since the
 credentials
           are passed in the file system they may be easily referenced in
           ExecStart= command lines too, thus no explicit support for the
           credentials logic in daemons is required (though ideally daemons
           would look for the bits they need in $CREDENTIALS_DIRECTORY
           themselves automatically, if set). The $CREDENTIALS_DIRECTORY is
           backed by unswappable memory if privileges allow it, immutable
 if
           privileges allow it, is accessible only to the service's UID,
 and is
           automatically destroyed when the service stops.

         * systemd-nspawn supports the same credentials logic. It can both
           consume credentials passed to it via the aforementioned
           $CREDENTIALS_DIRECTORY protocol as well as pass these
 credentials on
           to its payload. The service manager/PID 1 has been updated to
 match
           this: it can also accept credentials from the container manager
 that
           invokes it (in fact: any process that invokes it), and passes
 them on
           to its services. Thus, credentials can be propagated recursively
 down
           the tree: from a system's service manager to a systemd-nspawn
           service, to the service manager that runs as container payload
 and to
           the service it runs below. Credentials may also be added on the
           systemd-nspawn command line, using new --set-credential= and
           --load-credential= command line switches that match the
           aforementioned service settings.

         * systemd-repart gained new settings Format=, Encrypt=, CopyFiles=
 in
           the partition drop-ins which may be used to format/LUKS
           encrypt/populate any created partitions. The partitions are
           encrypted/formatted/populated before they are registered in the
           partition table, so that they appear atomically: either the
           partitions do not exist yet or they exist fully encrypted,
 formatted,
           and populated — there is no time window where they are
           "half-initialized". Thus the system is robust to abrupt
 shutdown: if
           the tool is terminated half-way during its operations on next
 boot it
           will start from the beginning.

         * systemd-repart's --size= operation gained a new "auto" value. If
           specified, and operating on a loopback file it is automatically
 sized
           to the minimal size the size constraints permit. This is useful
 to
           use "systemd-repart" as an image builder for minimally sized
 images.

         * systemd-resolved now gained a third IPC interface for requesting
 name
           resolution: besides D-Bus and local DNS to 127.0.0.53 a Varlink
           interface is now supported. The nss-resolve NSS module has been
           modified to use this new interface instead of D-Bus. Using
 Varlink
           has a major benefit over D-Bus: it works without a broker
 service,
           and thus already during earliest boot, before the dbus daemon
 has
           been started. This means name resolution via systemd-resolved
 now
           works at the same time systemd-networkd operates: from earliest
 boot
           on, including in the initrd.

         * systemd-resolved gained support for a new DNSStubListenerExtra=
           configuration file setting which may be used to specify
 additional IP
           addresses the built-in DNS stub shall listen on, in addition to
 the
           main one on 127.0.0.53:53.

         * Name lookups issued via systemd-resolved's D-Bus and Varlink
           interfaces (and thus also via glibc NSS if nss-resolve is used)
 will
           now honour a trailing dot in the hostname: if specified the
 search
           path logic is turned off. Thus "resolvectl query foo." is now
           equivalent to "resolvectl query --search=off foo.".

         * systemd-resolved gained a new D-Bus property "ResolvConfMode"
 that
           exposes how /etc/resolv.conf is currently managed: by resolved
 (and
           in which mode if so) or another subsystem. "resolvctl" will
 display
           this property in its status output.

         * The resolv.conf snippets systemd-resolved provides will now set
 "."
           as the search domain if no other search domain is known. This
 turns
           off the derivation of an implicit search domain by nss-dns for
 the
           hostname, when the hostname is set to an FQDN. This change is
 done to
           make nss-dns using resolv.conf provided by systemd-resolved
 behave
           more similarly to nss-resolve.

         * systemd-tmpfiles' file "aging" logic (i.e. the automatic clean-
 up of
           /tmp/ and /var/tmp/ based on file timestamps) now looks at the
           "birth" time (btime) of a file in addition to the atime, mtime,
 and
           ctime.

         * systemd-analyze gained a new verb "capability" that lists all
 known
           capabilities by the systemd build and by the kernel.

         * If a file /usr/lib/clock-epoch exists, PID 1 will read its mtime
 and
           advance the system clock to it at boot if it is noticed to be
 before
           that time. Previously, PID 1 would only advance the time to an
 epoch
           time that is set during build-time. With this new file OS
 builders
           can change this epoch timestamp on individual OS images without
           having to rebuild systemd.

         * systemd-logind will now listen to the KEY_RESTART key from the
 Linux
           input layer and reboot the system if it is pressed, similarly to
 how
           it already handles KEY_POWER, KEY_SUSPEND or KEY_SLEEP.
 KEY_RESTART
           was originally defined in the Multimedia context (to restart
 playback
           of a song or film), but is now primarily used in various
 embedded
           devices for "Reboot" buttons. Accordingly, systemd-logind will
 now
           honour it as such. This may configured in more detail via the
 new
           HandleRebootKey= and RebootKeyIgnoreInhibited=.

         * systemd-nspawn/systemd-machined will now reconstruct hardlinks
 when
           copying OS trees, for example in "systemd-nspawn --ephemeral",
           "systemd-nspawn --template=", "machinectl clone" and similar.
 This is
           useful when operating with OSTree images, which use hardlinks
 heavily
           throughout, and where such copies previously resulting in
 "exploding"
           hardlinks.

         * systemd-nspawn's --console= setting gained support for a new
           "autopipe" value, which is identical to "interactive" when
 invoked on
           a TTY, and "pipe" otherwise.

         * systemd-networkd's .network files gained support for explicitly
           configuring the multicast membership entries of bridge devices
 in the
           [BridgeMDB] section. It also gained support for the PIE queuing
           discipline in the [FlowQueuePIE] sections.

         * systemd-networkd's .netdev files may now be used to create
 "BareUDP"
           tunnels, configured in the new [BareUDP] setting.

         * systemd-networkd's Gateway= setting in .network files now
 accepts the
           special values "_dhcp4" and "_ipv6ra" to configure additional,
           locally defined, explicit routes to the gateway acquired via
 DHCP or
           IPv6 Router Advertisements. The old setting "_dhcp" is
 deprecated,
           but still accepted for backwards compatibility.

         * systemd-networkd's [IPv6PrefixDelegation] section and
           IPv6PrefixDelegation= options have been renamed as [IPv6SendRA]
 and
           IPv6SendRA= (the old names are still accepted for backwards
           compatibility).

         * systemd-networkd's .network files gained the
 DHCPv6PrefixDelegation=
           boolean setting in [Network] section. If enabled, the delegated
 prefix
           gained by another link will be configured, and an address within
 the
           prefix will be assigned.

         * systemd-networkd's .network files gained the Announce= boolean
 setting
           in [DHCPv6PrefixDelegation] section. When enabled, the delegated
           prefix will be announced through IPv6 router advertisement (IPv6
 RA).
           The setting is enabled by default.

         * VXLAN tunnels may now be marked as independent of any underlying
           network interface via the new Independent= boolean setting.

         * systemctl gained support for two new verbs: "service-log-level"
 and
           "service-log-target" may be used on services that implement the
           generic org.freedesktop.LogControl1 D-Bus interface to
 dynamically
           adjust the log level and target. All of systemd's long-running
           services support this now, but ideally all system services would
           implement this interface to make the system more uniformly
           debuggable.

         * The SystemCallErrorNumber= unit file setting now accepts the new
           "kill" and "log" actions, in addition to arbitrary error number
           specifications as before. If "kill" the processes are killed on
 the
           event, if "log" the offending system call is audit logged.

         * A new SystemCallLog= unit file setting has been added that
 accepts a
           list of system calls that shall be logged about (audit).

         * The OS image dissection logic (as used by RootImage= in unit
 files or
           systemd-nspawn's --image= switch) has gained support for
 identifying
           and mounting explicit /usr/ partitions, which are now defined in
 the
           discoverable partition specification. This should be useful for
           environments where the root file system is
           generated/formatted/populated dynamically on first boot and
 combined
           with an immutable /usr/ tree that is supplied by the vendor.

         * In the final phase of shutdown, within the systemd-shutdown
 binary
           we'll now try to detach MD devices (i.e software RAID) in
 addition to
           loopback block devices and DM devices as before. This is
 supposed to
           be a safety net only, in order to increase robustness if things
 go
           wrong. Storage subsystems are expected to properly detach their
           storage volumes during regular shutdown already (or in case of
           storage backing the root file system: in the initrd hook we
 return to
           later).

         * If the SYSTEMD_LOG_TID environment variable is set all systemd
 tools
           will now log the thread ID in their log output. This is useful
 when
           working with heavily threaded programs.

         * If the SYSTEMD_RDRAND environment variable is set to "0",
 systemd will
           not use the RDRAND CPU instruction. This is useful in
 environments
           such as replay debuggers where non-deterministic behaviour is
 not
           desirable.

         * The autopaging logic in systemd's various tools (such as
 systemctl)
           has been updated to turn on "secure" mode in "less"
           (i.e. $LESSECURE=1) if execution in a "sudo" environment is
           detected. This disables invoking external programs from the
 pager,
           via the pipe logic. This behaviour may be overridden via the new
           $SYSTEMD_PAGERSECURE environment variable.

         * Units which have resource limits (.service, .mount, .swap,
 .slice,
           .socket, and .slice) gained new configuration settings
           ManagedOOMSwap=, ManagedOOMMemoryPressure=, and
           ManagedOOMMemoryPressureLimitPercent= that specify resource
 pressure
           limits and optional action taken by systemd-oomd.

         * A new service systemd-oomd has been added. It monitors resource
           contention for selected parts of the unit hierarchy using the
 PSI
           information reported by the kernel, and kills processes when
 memory
           or swap pressure is above configured limits. This service is
 only
           enabled by default in developer mode (see below) and should be
           considered a preview in this release. Behaviour details and
 option
           names are subject to change without the usual backwards-
 compatibility
           promises.

         * A new helper oomctl has been added to introspect systemd-oomd
 state.
           It is only enabled by default in developer mode and should be
           considered a preview without the usual backwards-compatibility
           promises.

         * New meson option -Dcompat-mutable-uid-boundaries= has been
 added. If
           enabled, systemd reads the system UID boundaries from
 /etc/login.defs
           at runtime, instead of using the built-in values selected during
           build. This is an option to improve compatibility for upgrades
 from
           old systems. It's strongly recommended not to make use of this
           functionality on new systems (or even enable it during build),
 as it
           makes something runtime-configurable that is mostly an
 implementation
           detail of the OS, and permits avoidable differences in
 deployments
           that create all kinds of problems in the long run.

         * New meson option '-Dmode=developer|release' has been added. When
           'developer', additional checks and features are enabled that are
           relevant during upstream development, e.g. verification that
           semi-automatically-generated documentation has been properly
 updated
           following API changes. Those checks are considered hints for
           developers and are not actionable in downstream builds. In
 addition,
           extra features that are not ready for general consumption may be
           enabled in developer mode. It is thus recommended to set
           '-Dmode=release' in end-user and distro builds.

         * systemd-cryptsetup gained support for processing detached LUKS
           headers specified on the kernel command line via the header=
           parameter of the luks.options= kernel command line option. The
 same
           device/path syntax as for key files is supported for header
 files
           like this.

         * The "net_id" built-in of udev has been updated to ignore ACPI
 _SUN
           slot index data for devices that are connected through a PCI
 bridge
           where the _SUN index is associated with the bridge instead of
 the
           network device itself. Previously this would create ambiguous
 device
           naming if multiple network interfaces were connected to the same
 PCI
           bridge. Since this is a naming scheme incompatibility on systems
 that
           possess hardware like this it has been introduced as new naming
           scheme "v247". The previous scheme can be selected via the
           "net.naming-scheme=v245" kernel command line parameter.

         * ConditionFirstBoot= semantics have been modified to be safe
 towards
           abnormal system power-off during first boot. Specifically, the
           "systemd-machine-id-commit.service" service now acts as boot
           milestone indicating when the first boot process is sufficiently
           complete in order to not consider the next following boot also a
           first boot. If the system is reset before this unit is reached
 the
           first time, the next boot will still be considered a first boot;
 once
           it has been reached, no further boots will be considered a first
           boot. The "first-boot-complete.target" unit now acts as official
 hook
           point to order against this. If a service shall be run on every
 boot
           until the first boot fully succeeds it may thus be ordered
 before
           this target unit (and pull it in) and carry ConditionFirstBoot=
           appropriately.

         * bootctl's set-default and set-oneshot commands now accept the
 three
           special strings "@default", "@oneshot", "@current" in place of a
 boot
           entry id. These strings are resolved to the current default and
           oneshot boot loader entry, as well as the currently booted one.
 Thus
           a command "bootctl set-default @current" may be used to make the
           currently boot menu item the new default for all subsequent
 boots.

         * "systemctl edit" has been updated to show the original effective
 unit
           contents in commented form in the text editor.

         * Units in user mode are now segregated into three new slices:
           session.slice (units that form the core of graphical session),
           app.slice ("normal" user applications), and background.slice
           (low-priority tasks). Unless otherwise configured, user units
 are
           placed in app.slice. The plan is to add resource limits and
           protections for the different slices in the future.

         * New GPT partition types for RISCV32/64 for the root and /usr
           partitions, and their associated Verity partitions have been
 defined,
           and are now understood by systemd-gpt-auto-generator, and the OS
           image dissection logic.

         Contributions from: Adolfo Jayme Barrientos, afg, Alec Moskvin,
 Alyssa
         Ross, Amitanand Chikorde, Andrew Hangsleben, Anita Zhang, Ansgar
         Burchardt, Arian van Putten, Aurelien Jarno, Axel Rasmussen,
 bauen1,
         Beniamino Galvani, Benjamin Berg, Bjørn Mork, brainrom,
 Chandradeep
         Dey, Charles Lee, Chris Down, Christian Göttsche, Christof
 Efkemann,
         Christoph Ruegge, Clemens Gruber, Daan De Meyer, Daniele Medri,
 Daniel
         Mack, Daniel Rusek, Dan Streetman, David Tardon, Dimitri John
 Ledkov,
         Dmitry Borodaenko, Elias Probst, Elisei Roca, ErrantSpore, Etienne
         Doms, Fabrice Fontaine, fangxiuning, Felix Riemann, Florian Klink,
         Franck Bui, Frantisek Sumsal, fwSmit, George Rawlinson, germanztz,
         Gibeom Gwon, Glen Whitney, Gogo Gogsi, Göran Uddeborg, Grant
 Mathews,
         Hans de Goede, Hans Ulrich Niedermann, Haochen Tong, Harald
 Seiler,
         huangyong, Hubert Kario, igo95862, Ikey Doherty, Insun Pyo, Jan
 Chren,
         Jan Schlüter, Jérémy Nouhaud, Jian-Hong Pan, Joerg Behrmann,
 Jonathan
         Lebon, Jörg Thalheim, Josh Brobst, Juergen Hoetzel, Julien
 Humbert,
         Kai-Chuan Hsieh, Kairui Song, Kamil Dudka, Kir Kolyshkin,
 Kristijan
         Gjoshev, Kyle Huey, Kyle Russell, Lee Whalen, Lennart Poettering,
         lichangze, Luca Boccassi, Lucas Werkmeister, Luca Weiss, Marc
         Kleine-Budde, Marco Wang, Martin Wilck, Marti Raudsepp,
 masmullin2000,
         Máté Pozsgay, Matt Fenwick, Michael Biebl, Michael Scherer, Michal
         Koutný, Michal Sekletár, Michal Suchanek, Mikael Szreder, Milo
         Casagrande, mirabilos, Mitsuha_QuQ, mog422, Muhammet Kara, Nazar
         Vinnichuk, Nicholas Narsing, Nicolas Fella, Njibhu, nl6720, Oğuz
 Ersen,
         Olivier Le Moal, Ondrej Kozina, onlybugreports, Pass Automated
 Testing
         Suite, Pat Coulthard, Pavel Sapezhko, Pedro Ruiz, perry_yuan,
 Peter
         Hutterer, Phaedrus Leeds, PhoenixDiscord, Piotr Drąg, Plan C,
         Purushottam choudhary, Rasmus Villemoes, Renaud Métrich, Robert
 Marko,
         Roman Beranek, Ronan Pigott, Roy Chen (陳彥廷),
 RussianNeuroMancer,
         Samanta Navarro, Samuel BF, scootergrisen, Sorin Ionescu, Steve
 Dodd,
         Susant Sahani, Timo Rothenpieler, Tobias Hunger, Tobias Kaufmann,
 Topi
         Miettinen, vanou, Vito Caputo, Weblate, Wen Yang, Whired Planck,
         williamvds, Yu, Li-Yu, Yuri Chornoivan, Yu Watanabe, Zbigniew
         Jędrzejewski-Szmek, Zmicer Turok, Дамјан Георгиевски

         – Warsaw, 2020-11-26
 }}}

--
Ticket URL: <http://wiki.linuxfromscratch.org/lfs/ticket/4745#comment:9>
LFS Trac <http://wiki.linuxfromscratch.org/lfs/>
Linux From Scratch: Your Distro, Your Rules.
-- 
http://lists.linuxfromscratch.org/listinfo/lfs-book
FAQ: http://www.linuxfromscratch.org/blfs/faq.html
Unsubscribe: See the above information page

Reply via email to