The long awaited Systemd v220 has been released. Systemd v220 has a lot new features, improvements and bug fixes.
This release features its new (U)EFI boot manager, Btrfs support improvements and a lot more.
- The gudev library has been extracted into a separate repository
available at: https://git.gnome.org/browse/libgudev/
It is now managed as part of the Gnome project. Distributions
are recommended to pass –disable-gudev to systemd and use
gudev from the Gnome project instead. gudev is still included
in systemd, for now. It will be removed soon, though. Please
also see the announcement-thread on systemd-devel:
- systemd now exposes a CPUUsageNSec= property for each
service unit on the bus, that contains the overall consumed
CPU time of a service (the sum of what each process of the
service consumed). This value is only available if
CPUAccounting= is turned on for a service, and is then shown
in the “systemctl status” output.
- Support for configuring alternative mappings of the old SysV
runlevels to systemd targets has been removed. They are now
hardcoded in a way that runlevels 2, 3, 4 all map to
multi-user.target and 5 to graphical.target (which
previously was already the default behaviour).
- The auto-mounter logic gained support for mount point
expiry, using a new TimeoutIdleSec= setting in .automount
units. (Also available as x-systemd.idle-timeout= in /etc/fstab).
- The EFI System Partition (ESP) as mounted to /boot by
systemd-efi-boot-generator will now be unmounted
automatically after 2 minutes of not being used. This should
minimize the risk of ESP corruptions.
- New /etc/fstab options x-systemd.requires= and
x-systemd.requires-mounts-for= are now supported to express
additional dependencies for mounts. This is useful for
journalling file systems that support external journal
devices or overlay file systems that require underlying file
systems to be mounted.
- systemd does not support direct live-upgrades (via systemctl
daemon-reexec) from versions older than v44 anymore. As no
distribution we are aware of shipped such old versions in a
stable release this should not be problematic.
- When systemd forks off a new per-connection service instance
it will now set the $REMOTE_ADDR environment variable to the
remote IP address, and $REMOTE_PORT environment variable to
the remote IP port. This behaviour is similar to the
corresponding environment variables defined by CGI.
- systemd-networkd gained support for uplink failure
detection. The BindCarrier= option allows binding interface
configuration dynamically to the link sense of other
interfaces. This is useful to achieve behaviour like in
- systemd-networkd gained support for configuring the DHCP
client identifier to use when requesting leases.
- systemd-networkd now has a per-network UseNTP= option to
configure whether NTP server information acquired via DHCP
is passed on to services like systemd-timesyncd.
- systemd-networkd gained support for vti6 tunnels.
- Note that systemd-networkd manages the sysctl variable
/proc/sys/net/ipv/conf/*/forwarding for each interface
it is configured for since v219. The variable controls IP
forwarding, and is a per-interface alternative to the global
/proc/sys/net/ipv/ip_forward. This setting is
configurable in the IPForward= option, which defaults to
“no”. This means if networkd is used for an interface it is
no longer sufficient to set the global sysctl option to turn
on IP forwarding! Instead, the .network file option
IPForward= needs to be turned on! Note that the
implementation of this behaviour was broken in v219 and has
been fixed in v220.
- Many bonding and vxlan options are now configurable in
- systemd-nspawn gained a new –property= setting to set unit
properties for the container scope. This is useful for
setting resource parameters (e.g “CPUShares=500”) on
containers started from the command line.
- systemd-nspawn gained a new –private-users= switch to make
use of user namespacing available on recent Linux kernels.
- systemd-nspawn may now be called as part of a shell pipeline
in which case the pipes used for stdin and stdout are passed
directly to the process invoked in the container, without
indirection via a pseudo tty.
- systemd-nspawn gained a new switch to control the UNIX
signal to use when killing the init process of the container
when shutting down.
- systemd-nspawn gained a new –overlay= switch for mounting
overlay file systems into the container using the new kernel
- When a container image is imported via systemd-importd and
the host file system is not btrfs, a loopback block device
file is created in /var/lib/machines.raw with a btrfs file
system inside. It is then mounted to /var/lib/machines to
enable btrfs features for container management. The loopback
file and btrfs file system is grown as needed when container
images are imported via systemd-importd.
- systemd-machined/systemd-importd gained support for btrfs
quota, to enforce container disk space limits on disk. This
is exposed in “machinectl set-limit”.
- systemd-importd now can import containers from local .tar,
.raw and .qcow2 images, and export them to .tar and .raw. It
can also import dkr v2 images now from the network (on top
of v1 as before).
- systemd-importd gained support for verifying downloaded
images with gpg2 (previously only gpg1 was supported).
- systemd-machined, systemd-logind, systemd: most bus calls
are now accessible to unprivileged processes via
PolicyKit. Also, systemd-logind will now allow users to kill
their own sessions without further privileges or
- systemd-shutdownd has been removed. This service was
previously responsible for implementing scheduled shutdowns
as exposed in /usr/bin/shutdown’s time parameter. This
functionality has now been moved into systemd-logind and is
accessible via a bus interface.
- “systemctl reboot” gained a new switch –firmware-setup that
can be used to reboot into the EFI firmware setup, if that
is available. systemd-logind now exposes an API on the bus
to trigger such reboots, in case graphical desktop UIs want
to cover this functionality.
- “systemctl enable”, “systemctl disable” and “systemctl mask”
now support a new “–now” switch. If specified the units
that are enabled will also be started, and the ones
disabled/masked also stopped.
- The Gummiboot EFI boot loader tool has been merged into
systemd, and renamed to “systemd-boot”. The bootctl tool has been
updated to support systemd-boot.
- An EFI kernel stub has been added that may be used to create
kernel EFI binaries that contain not only the actual kernel,
but also an initrd, boot splash, command line and OS release
information. This combined binary can then be signed as a
single image, so that the firmware can verify it all in one
step. systemd-boot has special support for EFI binaries created
like this and can extract OS release information from them
and show them in the boot menu. This functionality is useful
to implement cryptographically verified boot schemes.
- Optional support has been added to systemd-fsck to pass
fsck’s progress report to an AF_UNIX socket in the file
- udev will no longer create device symlinks for all block
devices by default. A blacklist for excluding special block
devices from this logic has been turned into a whitelist
that requires picking block devices explicitly that require
- A new (currently still internal) API sd-device.h has been
added to libsystemd. This modernized API is supposed to
replace libudev eventually. In fact, already much of libudev
is now just a wrapper around sd-device.h.
- A new hwdb database for storing metadata about pointing
stick devices has been added.
- systemd-tmpfiles gained support for setting file attributes
similar to the “chattr” tool with new ‘h’ and ‘H’ lines.
- systemd-journald will no longer unconditionally set the
btrfs NOCOW flag on new journal files. This is instead done
with tmpfiles snippet using the new ‘h’ line type. This
allows easy disabling of this logic, by masking the
journal-nocow.conf tmpfiles file.
- systemd-journald will now translate audit message types to
human readable identifiers when writing them to the
journal. This should improve readability of audit messages.
- The LUKS logic gained support for the offset= and skip=
options in /etc/crypttab, as previously implemented by
- /usr/lib/os-release gained a new optional field VARIANT= for
distributions that support multiple variants (such as a
desktop edition, a server edition, …)
You can download systemd v220 here.