summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.SRCINFO38
-rw-r--r--0001-Use-Arch-Linux-device-access-groups.patch35
-rw-r--r--PKGBUILD28
-rw-r--r--loader.conf2
-rw-r--r--systemd-hook24
-rw-r--r--systemd-user.pam11
-rw-r--r--systemd.install30
7 files changed, 98 insertions, 70 deletions
diff --git a/.SRCINFO b/.SRCINFO
index c96152f..82fd48a 100644
--- a/.SRCINFO
+++ b/.SRCINFO
@@ -1,6 +1,6 @@
pkgbase = systemd-git
pkgdesc = systemd (git version)
- pkgver = 258.rc3.r83398.46a688c5598
+ pkgver = 259.devel.r83944.613f7f26aa7
pkgrel = 1
url = https://www.github.com/systemd/systemd
arch = x86_64
@@ -76,12 +76,12 @@ pkgbase = systemd-git
source = 30-systemd-udev-reload.hook
source = 30-systemd-update.hook
sha512sums = SKIP
- sha512sums = 1f7d48dea49c8adedf5a2be60861052b44c6ff7a4249218c2d7c779d357e1543e111c15d97beda5685e42805501f9e6c025152b942d8a5a8b882b3cdff2a11d6
+ sha512sums = beb15210d8afe69e1e47c99a81da5967428ccc64ece85b8a843333cb741eda061ae7a91a79cec8a1136a624e93e63140013986499589bf10edcc52d865729377
sha512sums = 61032d29241b74a0f28446f8cf1be0e8ec46d0847a61dadb2a4f096e8686d5f57fe5c72bcf386003f6520bc4b5856c32d63bf3efe7eb0bc0deefc9f68159e648
- sha512sums = c416e2121df83067376bcaacb58c05b01990f4614ad9de657d74b6da3efa441af251d13bf21e3f0f71ddcb4c9ea658b81da3d915667dc5c309c87ec32a1cb5a5
+ sha512sums = 3194d1f8bff31b88a79657df83632b9224b66ca2cf8fd806a3ef35cf7a43f46c09c57f3dfd02256a99b6514a8f789b7d3bcfd7e17e00e34aa55ff0c6cedb5f01
sha512sums = 5a1d78b5170da5abe3d18fdf9f2c3a4d78f15ba7d1ee9ec2708c4c9c2e28973469bc19386f70b3cf32ffafbe4fcc4303e5ebbd6d5187a1df3314ae0965b25e75
- sha512sums = b90c99d768dc2a4f020ba854edf45ccf1b86a09d2f66e475de21fe589ff7e32c33ef4aa0876d7f1864491488fd7edb2682fc0d68e83a6d4890a0778dc2d6fe19
- sha512sums = 3cb8f88c1bffc753d0c540be5d25a0fdb9224478cca64743b5663340f2f26b197775286e6e680228db54c614dcd11da1135e625674a622127681662bec4fa886
+ sha512sums = 32580b82e97573d3e499821e2ce415ff134c0ec52c9b44a3c0862c4007d347f55636d6afac3dfc6831a9b384c7448075bdf3a12f369b4d8b62b24dfdb9c8a76a
+ sha512sums = 05a3b19a2132c8c3048a66f2d06a9f8790e9c84c9ebdacc358456e38c5ebc8c02c542838f6aca3301f19ae83bc9fda66e701c682624dd5cf9fb119e452338a56
sha512sums = 299dcc7094ce53474521356647bdd2fb069731c08d14a872a425412fcd72da840727a23664b12d95465bf313e8e8297da31259508d1c62cc2dcea596160e21c5
sha512sums = 0d6bc3d928cfafe4e4e0bc04dbb95c5d2b078573e4f9e0576e7f53a8fab08a7077202f575d74a3960248c4904b5f7f0661bf17dbe163c524ab51dd30e3cb80f7
sha512sums = 2b50b25e8680878f7974fa9d519df7e141ca11c4bfe84a92a5d01bb193f034b1726ea05b3c0030bad1fbda8dbb78bf1dc7b73859053581b55ba813c39b27d9dc
@@ -101,7 +101,7 @@ pkgname = systemd-git
license = CC0-1.0
license = GPL-2.0-or-later
license = MIT-0
- depends = systemd-libs-git=258.rc3.r83398.46a688c5598
+ depends = systemd-libs-git=259.devel.r83944.613f7f26aa7
depends = acl
depends = libacl.so
depends = bash
@@ -137,7 +137,7 @@ pkgname = systemd-git
optdepends = apparmor: additional security features
optdepends = quota-tools: kernel-level quota management
optdepends = systemd-sysvcompat: symlink package to provide sysvinit binaries
- optdepends = systemd-ukify-git=258.rc3.r83398.46a688c5598: combine kernel and initrd into a signed Unified Kernel Image
+ optdepends = systemd-ukify-git=259.devel.r83944.613f7f26aa7: combine kernel and initrd into a signed Unified Kernel Image
optdepends = polkit: allow administration as unprivileged user
optdepends = curl: systemd-journal-upload, machinectl pull-tar and pull-raw
optdepends = gnutls: systemd-journal-gatewayd and systemd-journal-remote
@@ -150,9 +150,9 @@ pkgname = systemd-git
optdepends = libp11-kit: support PKCS#11
optdepends = tpm2-tss: unlocking LUKS2 volumes with TPM2
provides = nss-myhostname
- provides = systemd-tools=258.rc3.r83398.46a688c5598
- provides = udev=258.rc3.r83398.46a688c5598
- provides = systemd=258.rc3.r83398.46a688c5598
+ provides = systemd-tools=259.devel.r83944.613f7f26aa7
+ provides = udev=259.devel.r83944.613f7f26aa7
+ provides = systemd=259.devel.r83944.613f7f26aa7
conflicts = nss-myhostname
conflicts = systemd-tools
conflicts = udev
@@ -192,41 +192,41 @@ pkgname = systemd-libs-git
provides = libsystemd
provides = libsystemd.so
provides = libudev.so
- provides = systemd-libs=258.rc3.r83398.46a688c5598
+ provides = systemd-libs=259.devel.r83944.613f7f26aa7
conflicts = libsystemd
conflicts = systemd-libs
replaces = libsystemd
pkgname = systemd-resolvconf-git
pkgdesc = systemd resolvconf replacement (for use with systemd-resolved) (git version)
- depends = systemd-git=258.rc3.r83398.46a688c5598
+ depends = systemd-git=259.devel.r83944.613f7f26aa7
provides = openresolv
provides = resolvconf
- provides = systemd-resolvconf=258.rc3.r83398.46a688c5598
+ provides = systemd-resolvconf=259.devel.r83944.613f7f26aa7
conflicts = resolvconf
conflicts = systemd-resolvconf
pkgname = systemd-sysvcompat-git
pkgdesc = sysvinit compat for systemd (git version)
- depends = systemd-git=258.rc3.r83398.46a688c5598
- provides = systemd-sysvcompat=258.rc3.r83398.46a688c5598
+ depends = systemd-git=259.devel.r83944.613f7f26aa7
+ provides = systemd-sysvcompat=259.devel.r83944.613f7f26aa7
conflicts = sysvinit
conflicts = systemd-sysvcompat
pkgname = systemd-tests-git
pkgdesc = systemd tests (git version)
- depends = systemd=258.rc3.r83398.46a688c5598
- provides = systemd-tests=258.rc3.r83398.46a688c5598
+ depends = systemd=259.devel.r83944.613f7f26aa7
+ provides = systemd-tests=259.devel.r83944.613f7f26aa7
conflicts = systemd-tests
pkgname = systemd-ukify-git
pkgdesc = Combine kernel and initrd into a signed Unified Kernel Image (git version)
- depends = systemd-git=258.rc3.r83398.46a688c5598
+ depends = systemd-git=259.devel.r83944.613f7f26aa7
depends = binutils
depends = python-cryptography
depends = python-pefile
optdepends = python-pillow: Show the size of splash image
optdepends = sbsigntools: Sign the embedded kernel
provides = ukify
- provides = systemd-ukify=258.rc3.r83398.46a688c5598
+ provides = systemd-ukify=259.devel.r83944.613f7f26aa7
conflicts = systemd-ukify
diff --git a/0001-Use-Arch-Linux-device-access-groups.patch b/0001-Use-Arch-Linux-device-access-groups.patch
index a53e094..e328c0a 100644
--- a/0001-Use-Arch-Linux-device-access-groups.patch
+++ b/0001-Use-Arch-Linux-device-access-groups.patch
@@ -1,10 +1,7 @@
-From 0e8c18bc2639da328274d02d9222ee2c1f6bf696 Mon Sep 17 00:00:00 2001
+From 24112f5adb393febab43dbff3a8533146b25d7a3 Mon Sep 17 00:00:00 2001
From: "Jan Alexander Steffens (heftig)" <jan.steffens@gmail.com>
Date: Tue, 6 Mar 2018 23:39:47 +0100
Subject: [PATCH] Use Arch Linux' device access groups
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
cdrom → optical
dialout → uucp
@@ -17,10 +14,10 @@ Content-Transfer-Encoding: 8bit
4 files changed, 19 insertions(+), 19 deletions(-)
diff --git a/meson.build b/meson.build
-index 76ad51d3fb..5cf679b088 100644
+index e87c8ea2ec..8f56e87b68 100644
--- a/meson.build
+++ b/meson.build
-@@ -915,19 +915,19 @@ conf.set_quoted('NOBODY_GROUP_NAME', nobody_group)
+@@ -949,20 +949,20 @@ conf.set_quoted('NOBODY_GROUP_NAME', nobody_group)
static_ugids = []
foreach option : ['adm-gid',
'audio-gid',
@@ -45,7 +42,7 @@ index 76ad51d3fb..5cf679b088 100644
'wheel-gid',
'systemd-journal-gid',
diff --git a/meson_options.txt b/meson_options.txt
-index c616f23297..b35d37faf2 100644
+index c616f23297..3999595c2f 100644
--- a/meson_options.txt
+++ b/meson_options.txt
@@ -289,12 +289,8 @@ option('adm-gid', type : 'integer', value : 0,
@@ -65,7 +62,7 @@ index c616f23297..b35d37faf2 100644
description : 'soft-static allocation for the "kvm" group')
option('lp-gid', type : 'integer', value : 0,
description : 'soft-static allocation for the "lp" group')
-+option('optical-gid', type : 'integer', value : 0,
++option('optical-gid', type : 'integer', value : '0',
+ description : 'soft-static allocation for the "optical" group')
option('render-gid', type : 'integer', value : 0,
description : 'soft-static allocation for the "render" group')
@@ -73,7 +70,7 @@ index c616f23297..b35d37faf2 100644
description : 'soft-static allocation for the "sgx" group')
-option('tape-gid', type : 'integer', value : 0,
- description : 'soft-static allocation for the "tape" group')
-+option('storage-gid', type : 'integer', value : 0,
++option('storage-gid', type : 'integer', value : '0',
+ description : 'soft-static allocation for the "storage" group')
option('tty-gid', type : 'integer', value : 5,
description : 'the numeric GID of the "tty" group')
@@ -81,25 +78,25 @@ index c616f23297..b35d37faf2 100644
description : 'soft-static allocation for the "users" group')
option('utmp-gid', type : 'integer', value : 0,
description : 'soft-static allocation for the "utmp" group')
-+option('uucp-gid', type : 'integer', value : 0,
++option('uucp-gid', type : 'integer', value : '0',
+ description : 'soft-static allocation for the "uucp" group')
option('video-gid', type : 'integer', value : 0,
description : 'soft-static allocation for the "video" group')
option('wheel-gid', type : 'integer', value : 0,
diff --git a/rules.d/50-udev-default.rules.in b/rules.d/50-udev-default.rules.in
-index 843bdaf9ce..a192f091df 100644
+index 078a78ad1a..c54ef92943 100644
--- a/rules.d/50-udev-default.rules.in
+++ b/rules.d/50-udev-default.rules.in
-@@ -26,7 +26,7 @@ SUBSYSTEM=="tty", KERNEL=="sclp_line[0-9]*", GROUP="tty", MODE="0620"
- SUBSYSTEM=="tty", KERNEL=="ttysclp[0-9]*", GROUP="tty", MODE="0620"
- SUBSYSTEM=="tty", KERNEL=="3270/tty[0-9]*", GROUP="tty", MODE="0620"
+@@ -41,7 +41,7 @@ SUBSYSTEM=="tty", KERNEL=="ptmx", GROUP="tty", MODE="0666"
+ SUBSYSTEM=="tty", KERNEL=="tty", GROUP="tty", MODE="0666"
+ SUBSYSTEM=="tty", KERNEL=="tty[0-9]*|hvc[0-9]*|sclp_line[0-9]*|ttysclp[0-9]*|3270/tty[0-9]*", GROUP="tty", MODE="{{TTY_MODE}}"
SUBSYSTEM=="vc", KERNEL=="vcs*|vcsa*", GROUP="tty"
-KERNEL=="tty[A-Z]*[0-9]|ttymxc[0-9]*|pppox[0-9]*|ircomm[0-9]*|noz[0-9]*|rfcomm[0-9]*", GROUP="dialout"
+KERNEL=="tty[A-Z]*[0-9]|ttymxc[0-9]*|pppox[0-9]*|ircomm[0-9]*|noz[0-9]*|rfcomm[0-9]*", GROUP="uucp"
SUBSYSTEM=="mem", KERNEL=="mem|kmem|port", GROUP="kmem", MODE="0640"
-@@ -72,13 +72,13 @@ KERNEL=="irlpt[0-9]*", GROUP="lp"
+@@ -88,13 +88,13 @@ KERNEL=="irlpt[0-9]*", GROUP="lp"
SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", ENV{ID_USB_INTERFACES}=="*:0701??:*", GROUP="lp"
SUBSYSTEM=="block", GROUP="disk"
@@ -120,10 +117,10 @@ index 843bdaf9ce..a192f091df 100644
KERNEL=="qft[0-9]*|nqft[0-9]*|zqft[0-9]*|nzqft[0-9]*|rawqft[0-9]*|nrawqft[0-9]*", GROUP="disk"
KERNEL=="loop-control", GROUP="disk", OPTIONS+="static_node=loop-control"
diff --git a/sysusers.d/basic.conf.in b/sysusers.d/basic.conf.in
-index a602b872e4..8d38febb6a 100644
+index 503a4c4dac..0052690d97 100644
--- a/sysusers.d/basic.conf.in
+++ b/sysusers.d/basic.conf.in
-@@ -23,17 +23,17 @@ g utmp {{UTMP_GID }} - -
+@@ -24,18 +24,18 @@ g utmp {{UTMP_GID }} - -
# Physical and virtual hardware access groups
g audio {{AUDIO_GID }} - -
@@ -145,7 +142,3 @@ index a602b872e4..8d38febb6a 100644
g video {{VIDEO_GID }} - -
# Default group for normal users
-
-
---
-
diff --git a/PKGBUILD b/PKGBUILD
index 6d37e85..479fe59 100644
--- a/PKGBUILD
+++ b/PKGBUILD
@@ -10,7 +10,7 @@ pkgname=('systemd-git'
'systemd-tests-git'
'systemd-ukify-git')
pkgdesc='systemd (git version)'
-pkgver=258.rc3.r83398.46a688c5598
+pkgver=259.devel.r83944.613f7f26aa7
pkgrel=1
arch=('x86_64')
license=('LGPL-2.1-or-later')
@@ -47,12 +47,12 @@ source=("$pkgbase-stable::git+https://github.com/systemd/systemd"
'30-systemd-udev-reload.hook'
'30-systemd-update.hook')
sha512sums=('SKIP'
- '1f7d48dea49c8adedf5a2be60861052b44c6ff7a4249218c2d7c779d357e1543e111c15d97beda5685e42805501f9e6c025152b942d8a5a8b882b3cdff2a11d6'
+ 'beb15210d8afe69e1e47c99a81da5967428ccc64ece85b8a843333cb741eda061ae7a91a79cec8a1136a624e93e63140013986499589bf10edcc52d865729377'
'61032d29241b74a0f28446f8cf1be0e8ec46d0847a61dadb2a4f096e8686d5f57fe5c72bcf386003f6520bc4b5856c32d63bf3efe7eb0bc0deefc9f68159e648'
- 'c416e2121df83067376bcaacb58c05b01990f4614ad9de657d74b6da3efa441af251d13bf21e3f0f71ddcb4c9ea658b81da3d915667dc5c309c87ec32a1cb5a5'
+ '3194d1f8bff31b88a79657df83632b9224b66ca2cf8fd806a3ef35cf7a43f46c09c57f3dfd02256a99b6514a8f789b7d3bcfd7e17e00e34aa55ff0c6cedb5f01'
'5a1d78b5170da5abe3d18fdf9f2c3a4d78f15ba7d1ee9ec2708c4c9c2e28973469bc19386f70b3cf32ffafbe4fcc4303e5ebbd6d5187a1df3314ae0965b25e75'
- 'b90c99d768dc2a4f020ba854edf45ccf1b86a09d2f66e475de21fe589ff7e32c33ef4aa0876d7f1864491488fd7edb2682fc0d68e83a6d4890a0778dc2d6fe19'
- '3cb8f88c1bffc753d0c540be5d25a0fdb9224478cca64743b5663340f2f26b197775286e6e680228db54c614dcd11da1135e625674a622127681662bec4fa886'
+ '32580b82e97573d3e499821e2ce415ff134c0ec52c9b44a3c0862c4007d347f55636d6afac3dfc6831a9b384c7448075bdf3a12f369b4d8b62b24dfdb9c8a76a'
+ '05a3b19a2132c8c3048a66f2d06a9f8790e9c84c9ebdacc358456e38c5ebc8c02c542838f6aca3301f19ae83bc9fda66e701c682624dd5cf9fb119e452338a56'
'299dcc7094ce53474521356647bdd2fb069731c08d14a872a425412fcd72da840727a23664b12d95465bf313e8e8297da31259508d1c62cc2dcea596160e21c5'
'0d6bc3d928cfafe4e4e0bc04dbb95c5d2b078573e4f9e0576e7f53a8fab08a7077202f575d74a3960248c4904b5f7f0661bf17dbe163c524ab51dd30e3cb80f7'
'2b50b25e8680878f7974fa9d519df7e141ca11c4bfe84a92a5d01bb193f034b1726ea05b3c0030bad1fbda8dbb78bf1dc7b73859053581b55ba813c39b27d9dc'
@@ -85,15 +85,16 @@ build() {
local _timeservers=({0..3}.arch.pool.ntp.org)
local _nameservers=(
# We use these public name services, ordered by their privacy policy (hopefully):
- # * Cloudflare (https://1.1.1.1/)
- # * Quad9 (https://www.quad9.net/)
- # * Google (https://developers.google.com/speed/public-dns/)
- '1.1.1.1#cloudflare-dns.com'
+ # * Quad9 (https://quad9.net/privacy/policy/)
'9.9.9.9#dns.quad9.net'
- '8.8.8.8#dns.google'
- '2606:4700:4700::1111#cloudflare-dns.com'
'2620:fe::9#dns.quad9.net'
+ # * Cloudflare (https://developers.cloudflare.com/1.1.1.1/privacy/public-dns-resolver/)
+ '1.1.1.1#cloudflare-dns.com'
+ '2606:4700:4700::1111#cloudflare-dns.com'
+ # * Google (https://developers.google.com/speed/public-dns/privacy)
+ '8.8.8.8#dns.google'
'2001:4860:4860::8888#dns.google'
+ # You do not agree? Fine, change it in your local configuration.
)
local _meson_options=(
@@ -116,9 +117,6 @@ build() {
-Dvmlinux-h=provided
-Dvmlinux-h-path=/usr/src/linux/vmlinux.h
- # We disable DNSSEC by default, it still causes trouble:
- # https://github.com/systemd/systemd/issues/10579
-
-Ddbuspolicydir=/usr/share/dbus-1/system.d
-Ddefault-dnssec=no
-Ddefault-kill-user-processes=false
@@ -158,6 +156,8 @@ package_systemd-git() {
'GPL-2.0-or-later' # udev
'MIT-0' # documentation and config files
)
+ # Not all libs are linked, but opened via dlopen() pointed out by 6511918 at
+ # https://aur.archlinux.org/pkgbase/systemd-git#comment-1041291
depends=("systemd-libs-git=${pkgver}"
'acl' 'libacl.so' 'bash' 'cryptsetup' 'libcryptsetup.so' 'dbus'
'dbus-units' 'kbd' 'kmod' 'hwdata' 'libcap' 'libcap.so'
diff --git a/loader.conf b/loader.conf
index 1f7cd7e..7563949 100644
--- a/loader.conf
+++ b/loader.conf
@@ -1 +1 @@
-default arch
+default arch.conf
diff --git a/systemd-hook b/systemd-hook
index d64341f..0a13f20 100644
--- a/systemd-hook
+++ b/systemd-hook
@@ -1,6 +1,6 @@
#!/bin/sh -e
-is_chrooted() {
+skip_chrooted() {
if systemd-detect-virt --chroot; then
echo >&2 " Skipped: Running in chroot."
exit 0
@@ -8,15 +8,17 @@ is_chrooted() {
}
systemd_live() {
- is_chrooted
- if [ ! -d /run/systemd/system ]; then
+ skip_chrooted
+
+ if ! systemd-notify --booted; then
echo >&2 " Skipped: Current root is not booted."
exit 0
fi
}
udevd_live() {
- is_chrooted
+ systemd_live
+
if [ ! -S /run/udev/control ]; then
echo >&2 " Skipped: Device manager is not running."
exit 0
@@ -39,7 +41,7 @@ case "$op" in
;;
daemon-reload-user)
systemd_live
- /usr/bin/systemctl kill --kill-whom='main' --signal='SIGHUP' 'user@*.service'
+ /usr/bin/systemctl reload 'user@*.service'
;;
hwdb)
/usr/bin/systemd-hwdb --usr update
@@ -66,12 +68,24 @@ case "$op" in
fi
;;
+ # marked with 'systemctl set-property ... Markers=needs-restart'
+ restart-marked)
+ systemd_live
+ /usr/bin/systemctl reload-or-restart --marked
+ ;;
+
# For use by other packages
reload)
systemd_live
/usr/bin/systemctl try-reload-or-restart "$@"
;;
+ # For use by other packages
+ restart)
+ systemd_live
+ /usr/bin/systemctl try-restart "$@"
+ ;;
+
*)
echo >&2 " Invalid operation '$op'"
exit 1
diff --git a/systemd-user.pam b/systemd-user.pam
index 83f7626..8442643 100644
--- a/systemd-user.pam
+++ b/systemd-user.pam
@@ -1,5 +1,10 @@
# Used by systemd --user instances.
-account include system-login
-session required pam_loginuid.so
-session include system-login
+account include system-login
+
+session required pam_loginuid.so
+session optional pam_keyinit.so force revoke
+session include system-auth
+session optional pam_umask.so
+session optional pam_systemd.so
+session required pam_env.so
diff --git a/systemd.install b/systemd.install
index 9f01f18..33e9d0e 100644
--- a/systemd.install
+++ b/systemd.install
@@ -4,10 +4,11 @@ sd_booted() {
[[ -d run/systemd/system && ! -L run/systemd/system ]]
}
-add_journal_acls() {
- # ignore errors, since the filesystem might not support ACLs
- setfacl -Rnm g:wheel:rx,d:g:wheel:rx,g:adm:rx,d:g:adm:rx var/log/journal/ 2>/dev/null
- :
+services_needing_restart() {
+ systemctl list-units --state=running --plain --quiet 'systemd-*.service' \
+ | cut -d' ' -f1 \
+ | grep -Ev '^systemd-(logind|networkd)\.service$' \
+ | grep -Ev '^systemd-.*@.*\.service$'
}
post_common() {
@@ -24,8 +25,6 @@ post_install() {
post_common "$@"
- add_journal_acls
-
# enable some services by default, but don't track them
systemctl enable \
getty@tty1.service \
@@ -41,8 +40,25 @@ post_upgrade() {
post_common "$@"
if sd_booted; then
+ # reexec systemd system instance
systemctl --system daemon-reexec
- systemctl kill --kill-whom='main' --signal='SIGRTMIN+25' 'user@*.service'
+
+ # reexec systemd user instances
+ systemctl reload 'user@*.service'
+
+ # mark systemd services for later restart
+ for UNIT in $(services_needing_restart); do
+ systemctl set-property --runtime "${UNIT}" Markers=needs-restart
+ done
+ fi
+
+ # show for feature release: 255 -> 256 -> 257 -> ...
+ if [ $(vercmp "${1%%[!0-9]*}" "${2%%[!0-9]*}") -ne 0 ]; then
+ cat <<-EOM
+ :: This is a systemd feature update. You may want to have a look at
+ NEWS for what changed, or if you observe unexpected behavior:
+ /usr/share/doc/systemd/NEWS
+ EOM
fi
local v upgrades=(