added core/systemd

This commit is contained in:
Kevin Mihelich 2014-06-14 00:16:28 +00:00
parent 2a51cb1755
commit f0488cf526
11 changed files with 785 additions and 0 deletions

View file

@ -0,0 +1,58 @@
From c343be283b7152554bac0c02493a4e1759c163f7 Mon Sep 17 00:00:00 2001
From: Kay Sievers <kay@vrfy.org>
Date: Wed, 4 Jun 2014 11:14:48 +0200
Subject: [PATCH] fsck: disable "-l" option for now
https://bugs.freedesktop.org/show_bug.cgi?id=79576#c5
---
TODO | 4 +++-
src/fsck/fsck.c | 13 ++++++++++++-
2 files changed, 15 insertions(+), 2 deletions(-)
diff --git a/TODO b/TODO
index 8169a57..fb118f1 100644
--- a/TODO
+++ b/TODO
@@ -1,4 +1,7 @@
Bugfixes:
+* Re-enable "fsck -l" when it is ready:
+ https://bugs.freedesktop.org/show_bug.cgi?id=79576#c5
+
* Should systemctl status \* work on all unit types, not just .service?
* enabling an instance unit creates a pointless link, and
@@ -20,7 +23,6 @@ Bugfixes:
See the comment in sd_bus_unref() for more..
External:
-
* Fedora: when installing fedora with yum --installroot /var/run is a directory, not a symlink
https://bugzilla.redhat.com/show_bug.cgi?id=975864
diff --git a/src/fsck/fsck.c b/src/fsck/fsck.c
index 56cb52d..cb2f573 100644
--- a/src/fsck/fsck.c
+++ b/src/fsck/fsck.c
@@ -319,7 +319,18 @@ int main(int argc, char *argv[]) {
cmdline[i++] = "/sbin/fsck";
cmdline[i++] = arg_repair;
cmdline[i++] = "-T";
- cmdline[i++] = "-l";
+
+ /*
+ * Disable locking which conflict with udev's event
+ * ownershipi, until util-linux moves the flock
+ * synchronization file which prevents multiple fsck running
+ * on the same rotationg media, from the disk device
+ * node to a privately owned regular file.
+ *
+ * https://bugs.freedesktop.org/show_bug.cgi?id=79576#c5
+ *
+ * cmdline[i++] = "-l";
+ */
if (!root_directory)
cmdline[i++] = "-M";
--
2.0.0

View file

@ -0,0 +1,33 @@
From 2ae6cda520f5c925ba313b8e83ea8b58bc00112c Mon Sep 17 00:00:00 2001
From: Tom Gundersen <teg@jklm.no>
Date: Wed, 4 Jun 2014 21:29:08 +0200
Subject: [PATCH] networkd: link - intialize mac address
Otherwise .netwrok matching on MAC address will not work.
Based on patch by Dave Reisner, and bug originally reported by Max Pray.
Conflicts:
src/network/networkd-link.c
---
src/network/networkd-link.c | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/src/network/networkd-link.c b/src/network/networkd-link.c
index 6677b94..9afb871 100644
--- a/src/network/networkd-link.c
+++ b/src/network/networkd-link.c
@@ -75,6 +75,10 @@ static int link_new(Manager *manager, sd_rtnl_message *message, Link **ret) {
if (!link->ifname)
return -ENOMEM;
+ r = sd_rtnl_message_read_ether_addr(message, IFLA_ADDRESS, &link->mac);
+ if (r < 0)
+ return r;
+
r = asprintf(&link->state_file, "/run/systemd/network/links/%"PRIu64,
link->ifindex);
if (r < 0)
--
2.0.0

View file

@ -0,0 +1,48 @@
From 3d06f4183470d42361303086ed9dedd29c0ffc1b Mon Sep 17 00:00:00 2001
From: Kay Sievers <kay@vrfy.org>
Date: Tue, 3 Jun 2014 10:46:51 +0200
Subject: [PATCH] udev: always close lock file descriptor
https://bugs.freedesktop.org/show_bug.cgi?id=79576
---
src/udev/udevd.c | 10 ++++------
1 file changed, 4 insertions(+), 6 deletions(-)
diff --git a/src/udev/udevd.c b/src/udev/udevd.c
index 1c9488e..819ea3b 100644
--- a/src/udev/udevd.c
+++ b/src/udev/udevd.c
@@ -301,6 +301,7 @@ static void worker_new(struct event *event)
if (fd_lock >= 0 && flock(fd_lock, LOCK_SH|LOCK_NB) < 0) {
log_debug("Unable to flock(%s), skipping event handling: %m", udev_device_get_devnode(d));
err = -EWOULDBLOCK;
+ fd_lock = safe_close(fd_lock);
goto skip;
}
}
@@ -317,8 +318,7 @@ static void worker_new(struct event *event)
udev_device_update_db(dev);
}
- if (fd_lock >= 0)
- close(fd_lock);
+ safe_close(fd_lock);
/* send processed event back to libudev listeners */
udev_monitor_send_device(worker_monitor, NULL, dev);
@@ -377,10 +377,8 @@ skip:
}
out:
udev_device_unref(dev);
- if (fd_signal >= 0)
- close(fd_signal);
- if (fd_ep >= 0)
- close(fd_ep);
+ safe_close(fd_signal);
+ safe_close(fd_ep);
close(fd_inotify);
close(worker_watch[WRITE_END]);
udev_rules_unref(rules);
--
2.0.0

View file

@ -0,0 +1,38 @@
From e918a1b5a94f270186dca59156354acd2a596494 Mon Sep 17 00:00:00 2001
From: Kay Sievers <kay@vrfy.org>
Date: Tue, 3 Jun 2014 16:49:38 +0200
Subject: [PATCH] udev: exclude device-mapper from block device ownership event
locking
---
src/udev/udevd.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/src/udev/udevd.c b/src/udev/udevd.c
index 819ea3b..6c05104 100644
--- a/src/udev/udevd.c
+++ b/src/udev/udevd.c
@@ -290,7 +290,19 @@ static void worker_new(struct event *event)
* acquired the lock, the external process will block until
* udev has finished its event handling.
*/
- if (streq_ptr("block", udev_device_get_subsystem(dev))) {
+
+ /*
+ * <kabi_> since we make check - device seems unused - we try
+ * ioctl to deactivate - and device is found to be opened
+ * <kay> sure, you try to take a write lock
+ * <kay> if you get it udev is out
+ * <kay> if you can't get it, udev is busy
+ * <kabi_> we cannot deactivate openned device (as it is in-use)
+ * <kay> maybe we should just exclude dm from that thing entirely
+ * <kabi_> IMHO this sounds like a good plan for this moment
+ */
+ if (streq_ptr("block", udev_device_get_subsystem(dev)) &&
+ !startswith("dm-", udev_device_get_sysname(dev))) {
struct udev_device *d = dev;
if (streq_ptr("partition", udev_device_get_devtype(d)))
--
2.0.0

View file

@ -0,0 +1,33 @@
From 638ca89c53e2b897cfb3f627f4acbc7d09af2f4c Mon Sep 17 00:00:00 2001
From: Christian Hesse <mail@eworm.de>
Date: Tue, 10 Jun 2014 15:51:15 +0200
Subject: [PATCH] udev: really exclude device-mapper from block device
ownership event locking
Arguments were wrong order, no?
This fixes commits:
e918a1b5a94f270186dca59156354acd2a596494
3d06f4183470d42361303086ed9dedd29c0ffc1b
---
* dreisner: avoid second hunk of patch which doesn't apply to v213
src/udev/udevd.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/src/udev/udevd.c b/src/udev/udevd.c
index 0f3f3f0..160360e 100644
--- a/src/udev/udevd.c
+++ b/src/udev/udevd.c
@@ -304,7 +304,7 @@ static void worker_new(struct event *event)
* <kabi_> IMHO this sounds like a good plan for this moment
*/
if (streq_ptr("block", udev_device_get_subsystem(dev)) &&
- !startswith("dm-", udev_device_get_sysname(dev))) {
+ !startswith(udev_device_get_sysname(dev), "dm-")) {
struct udev_device *d = dev;
if (streq_ptr("partition", udev_device_get_devtype(d)))
--
2.0.0

View file

@ -0,0 +1,26 @@
From d8e40d62ab871a87fde421c4b246bb45bc3cbe2d Mon Sep 17 00:00:00 2001
From: Jonathan Liu <net147@gmail.com>
Date: Thu, 29 May 2014 01:17:25 +1000
Subject: [PATCH] units: use KillMode=mixed for systemd-nspawn@.service
This causes the container to shut down cleanly when the service is
stopped.
---
units/systemd-nspawn@.service.in | 1 +
1 file changed, 1 insertion(+)
diff --git a/units/systemd-nspawn@.service.in b/units/systemd-nspawn@.service.in
index ff36e90..e373628 100644
--- a/units/systemd-nspawn@.service.in
+++ b/units/systemd-nspawn@.service.in
@@ -11,6 +11,7 @@ Documentation=man:systemd-nspawn(1)
[Service]
ExecStart=@bindir@/systemd-nspawn --quiet --keep-unit --boot --link-journal=guest --directory=/var/lib/container/%i
+KillMode=mixed
Type=notify
[Install]
--
1.9.3

182
core/systemd/PKGBUILD Normal file
View file

@ -0,0 +1,182 @@
# Maintainer: Dave Reisner <dreisner@archlinux.org>
# Maintainer: Tom Gundersen <teg@jklm.no>
# ALARM: Kevin Mihelich <kevin@archlinuxarm.org>
# - --disable-xattr; ARM just has too many old, hacked up kernels
pkgbase=systemd
pkgname=('systemd' 'libsystemd' 'systemd-sysvcompat')
pkgver=213
pkgrel=9.1
arch=('i686' 'x86_64')
url="http://www.freedesktop.org/wiki/Software/systemd"
makedepends=('acl' 'cryptsetup' 'docbook-xsl' 'gobject-introspection' 'gperf'
'gtk-doc' 'intltool' 'kmod' 'libcap' 'libgcrypt' 'libmicrohttpd' 'libxslt'
'util-linux' 'linux-api-headers' 'pam' 'python' 'python-lxml' 'quota-tools'
'shadow' 'xz')
options=('strip' 'debug')
source=("http://www.freedesktop.org/software/$pkgname/$pkgname-$pkgver.tar.xz"
'initcpio-hook-udev'
'initcpio-install-systemd'
'initcpio-install-udev'
'0001-units-use-KillMode-mixed-for-systemd-nspawn-.service.patch'
'0001-fsck-disable-l-option-for-now.patch'
'0001-udev-exclude-device-mapper-from-block-device-ownersh.patch'
'0001-udev-always-close-lock-file-descriptor.patch'
'0001-networkd-link-intialize-mac-address.patch'
'0001-udev-really-exclude-device-mapper-from-block-device-.patch')
md5sums=('06496edcf86ddf6d8c12d72ba78e735d'
'29245f7a240bfba66e2b1783b63b6b40'
'66cca7318e13eaf37c5b7db2efa69846'
'bde43090d4ac0ef048e3eaee8202a407'
'5f8ad7126970855614c7fa34b317728d'
'888cf85a92dd28bcf80e18539fef3915'
'f26803dda8811196c0564f928bfe69d1'
'2a14fe9876fa48f01cca3c1d575e5771'
'3d53d3bcd85ca0b2ff9f4e79d012808d'
'ae060fc00eeced6554e70d9a9c0eb42f')
prepare() {
cd "$pkgname-$pkgver"
patch -Np1 <"$srcdir/0001-units-use-KillMode-mixed-for-systemd-nspawn-.service.patch"
patch -Np1 <"$srcdir/0001-networkd-link-intialize-mac-address.patch"
patch -Np1 <"$srcdir/0001-fsck-disable-l-option-for-now.patch"
patch -Np1 <"$srcdir/0001-udev-always-close-lock-file-descriptor.patch"
patch -Np1 <"$srcdir/0001-udev-exclude-device-mapper-from-block-device-ownersh.patch"
patch -Np1 <"$srcdir/0001-udev-really-exclude-device-mapper-from-block-device-.patch"
}
build() {
cd "$pkgname-$pkgver"
export NM=gcc-nm RANLIB=gcc-ranlib
./configure \
--libexecdir=/usr/lib \
--localstatedir=/var \
--sysconfdir=/etc \
--enable-introspection \
--enable-gtk-doc \
--enable-compat-libs \
--disable-audit \
--disable-ima \
--disable-kdbus \
--disable-xattr \
--with-sysvinit-path= \
--with-sysvrcnd-path= \
--with-firmware-path="/usr/lib/firmware/updates:/usr/lib/firmware"
make
}
package_systemd() {
pkgdesc="system and service manager"
license=('GPL2' 'LGPL2.1' 'MIT')
depends=('acl' 'bash' 'dbus' 'glib2' 'kbd' 'kmod' 'hwids' 'libcap' 'libgcrypt'
'libsystemd' 'pam' 'libseccomp' 'util-linux' 'xz')
provides=('nss-myhostname' "systemd-tools=$pkgver" "udev=$pkgver")
replaces=('nss-myhostname' 'systemd-tools' 'udev')
conflicts=('nss-myhostname' 'systemd-tools' 'udev')
optdepends=('python: systemd library bindings'
'cryptsetup: required for encrypted block devices'
'libmicrohttpd: remote journald capabilities'
'quota-tools: kernel-level quota management'
'systemd-sysvcompat: symlink package to provide sysvinit binaries')
backup=(etc/dbus-1/system.d/org.freedesktop.systemd1.conf
etc/dbus-1/system.d/org.freedesktop.hostname1.conf
etc/dbus-1/system.d/org.freedesktop.login1.conf
etc/dbus-1/system.d/org.freedesktop.locale1.conf
etc/dbus-1/system.d/org.freedesktop.machine1.conf
etc/dbus-1/system.d/org.freedesktop.timedate1.conf
etc/pam.d/systemd-user
etc/systemd/bootchart.conf
etc/systemd/journald.conf
etc/systemd/logind.conf
etc/systemd/system.conf
etc/systemd/timesyncd.conf
etc/systemd/resolved.conf
etc/systemd/user.conf
etc/udev/udev.conf)
install="systemd.install"
make -C "$pkgname-$pkgver" DESTDIR="$pkgdir" install
# don't write units to /etc by default. some of these will be re-enabled on
# post_install.
rm "$pkgdir/etc/systemd/system/getty.target.wants/getty@tty1.service" \
"$pkgdir/etc/systemd/system/multi-user.target.wants/systemd-networkd.service" \
"$pkgdir/etc/systemd/system/multi-user.target.wants/systemd-resolved.service" \
"$pkgdir/etc/systemd/system/network-online.target.wants/systemd-networkd-wait-online.service"
rmdir "$pkgdir/etc/systemd/system/getty.target.wants" \
"$pkgdir/etc/systemd/system/network-online.target.wants"
# get rid of RPM macros
rm -r "$pkgdir/usr/lib/rpm"
# add back tmpfiles.d/legacy.conf
install -m644 "systemd-$pkgver/tmpfiles.d/legacy.conf" "$pkgdir/usr/lib/tmpfiles.d"
# Replace dialout/tape/cdrom group in rules with uucp/storage/optical group
sed -i 's#GROUP="dialout"#GROUP="uucp"#g;
s#GROUP="tape"#GROUP="storage"#g;
s#GROUP="cdrom"#GROUP="optical"#g' "$pkgdir"/usr/lib/udev/rules.d/*.rules
# add mkinitcpio hooks
install -Dm644 "$srcdir/initcpio-install-systemd" "$pkgdir/usr/lib/initcpio/install/systemd"
install -Dm644 "$srcdir/initcpio-install-udev" "$pkgdir/usr/lib/initcpio/install/udev"
install -Dm644 "$srcdir/initcpio-hook-udev" "$pkgdir/usr/lib/initcpio/hooks/udev"
# ensure proper permissions for /var/log/journal
chown root:systemd-journal "$pkgdir/var/log/journal"
chmod 2755 "$pkgdir/var/log/journal"
# fix pam file
sed 's|system-auth|system-login|g' -i "$pkgdir/etc/pam.d/systemd-user"
### split out manpages for sysvcompat
rm -rf "$srcdir/_sysvcompat"
install -dm755 "$srcdir"/_sysvcompat/usr/share/man/man8/
mv "$pkgdir"/usr/share/man/man8/{telinit,halt,reboot,poweroff,runlevel,shutdown}.8 \
"$srcdir"/_sysvcompat/usr/share/man/man8
### split off runtime libraries
rm -rf "$srcdir/_libsystemd"
install -dm755 "$srcdir"/_libsystemd/usr/lib
cd "$srcdir"/_libsystemd
mv "$pkgdir"/usr/lib/lib{systemd,{g,}udev}*.so* usr/lib
# include MIT license, since it's technically custom
install -Dm644 "$srcdir/$pkgname-$pkgver/LICENSE.MIT" \
"$pkgdir/usr/share/licenses/systemd/LICENSE.MIT"
}
package_libsystemd() {
pkgdesc="systemd client libraries"
depends=('glib2' 'glibc' 'libgcrypt' 'xz')
license=('GPL2')
provides=('libgudev-1.0.so' 'libsystemd.so' 'libsystemd-daemon.so' 'libsystemd-id128.so'
'libsystemd-journal.so' 'libsystemd-login.so' 'libudev.so')
mv "$srcdir/_libsystemd"/* "$pkgdir"
}
package_systemd-sysvcompat() {
pkgdesc="sysvinit compat for systemd"
license=('GPL2')
groups=('base')
conflicts=('sysvinit')
depends=('systemd')
mv "$srcdir/_sysvcompat"/* "$pkgdir"
install -dm755 "$pkgdir/usr/bin"
for tool in runlevel reboot shutdown poweroff halt telinit; do
ln -s 'systemctl' "$pkgdir/usr/bin/$tool"
done
ln -s '../lib/systemd/systemd' "$pkgdir/usr/bin/init"
}
# vim: ft=sh syn=sh et

View file

@ -0,0 +1,22 @@
#!/usr/bin/ash
run_earlyhook() {
kmod static-nodes --format=tmpfiles --output=/run/tmpfiles.d/kmod.conf
systemd-tmpfiles --prefix=/dev --create
/usr/lib/systemd/systemd-udevd --daemon --resolve-names=never
udevd_running=1
}
run_hook() {
msg ":: Triggering uevents..."
udevadm trigger --action=add --type=subsystems
udevadm trigger --action=add --type=devices
udevadm settle
}
run_cleanuphook() {
udevadm control --exit
udevadm info --cleanup-db
}
# vim: set ft=sh ts=4 sw=4 et:

View file

@ -0,0 +1,160 @@
#!/bin/bash
strip_quotes() {
local len=${#1} quotes=$'[\'"]' str=${!1}
if [[ ${str:0:1} = ${str: -1} && ${str:0:1} = $quotes ]]; then
printf -v "$1" %s "${str:1:-1}"
fi
}
add_udev_rule() {
# Add an udev rules file to the initcpio image. Dependencies on binaries
# will be discovered and added.
# $1: path to rules file (or name of rules file)
local rules= rule= key= value= binary=
rules=$(PATH=/usr/lib/udev/rules.d:/lib/udev/rules.d type -P "$1")
if [[ -z $rules ]]; then
# complain about not found rules
return 1
fi
add_file "$rules"
while IFS=, read -ra rule; do
# skip empty lines, comments
[[ -z $rule || $rule = @(+([[:space:]])|#*) ]] && continue
for pair in "${rule[@]}"; do
IFS=' =' read -r key value <<< "$pair"
case $key in
RUN@({program}|+)|IMPORT{program}|ENV{REMOVE_CMD})
strip_quotes 'value'
# just take the first word as the binary name
binary=${value%% *}
if [[ ${binary:0:1} != '/' ]]; then
binary=$(PATH=/usr/lib/udev:/lib/udev type -P "$binary")
fi
add_binary "$binary"
;;
esac
done
done <"$rules"
}
add_systemd_unit() {
# Add a systemd unit file to the initcpio image. Hard dependencies on binaries
# and other unit files will be discovered and added.
# $1: path to rules file (or name of rules file)
local unit= rule= entry= key= value= binary= dep=
unit=$(PATH=/usr/lib/systemd/system:/lib/systemd/system type -P "$1")
if [[ -z $unit ]]; then
# complain about not found unit file
return 1
fi
add_file "$unit"
while IFS='=' read -r key values; do
read -ra values <<< "$values"
case $key in
Requires|OnFailure)
# only add hard dependencies (not Wants)
map add_systemd_unit "${values[@]}"
;;
Exec*)
# don't add binaries unless they are required
if [[ ${values[0]:0:1} != '-' ]]; then
add_binary "${values[0]}"
fi
;;
esac
done <"$unit"
# preserve reverse soft dependency
for dep in {/usr,}/lib/systemd/system/*.wants/${unit##*/}; do
if [[ -L $dep ]]; then
add_symlink "$dep"
fi
done
# add hard dependencies
if [[ -d $unit.requires ]]; then
for dep in "$unit".requires/*; do
add_systemd_unit ${dep##*/}
done
fi
}
build() {
local rules unit
# from base
add_binary /bin/mount
add_binary /usr/bin/kmod /usr/bin/modprobe
# systemd
add_binary /usr/lib/systemd/systemd /init
add_binary /usr/bin/systemd-tmpfiles
# generators
add_file "/usr/lib/systemd/system-generators/systemd-fstab-generator"
add_file "/usr/lib/systemd/system-generators/systemd-gpt-auto-generator"
# udev rules and systemd units
map add_udev_rule "$rules" \
50-udev-default.rules \
60-persistent-storage.rules \
64-btrfs.rules \
80-drivers.rules \
99-systemd.rules \
map add_systemd_unit \
ctrl-alt-del.target \
initrd-cleanup.service \
initrd-fs.target \
initrd-parse-etc.service \
initrd-root-fs.target \
initrd-switch-root.service \
initrd-switch-root.target \
initrd-udevadm-cleanup-db.service \
initrd.target \
kmod-static-nodes.service \
sockets.target \
systemd-fsck@.service \
systemd-journald.service \
systemd-tmpfiles-setup-dev.service \
systemd-udev-trigger.service \
systemd-udevd-control.socket \
systemd-udevd-kernel.socket \
systemd-udevd.service
add_symlink "/usr/lib/systemd/system/default.target" "initrd.target"
# libdbus needs the passwd info of the root user
# TODO: make sure this is no longer necessary when systemctl moves to sd-bus
add_file "/etc/nsswitch.conf"
add_file "/etc/passwd"
add_binary "$(readlink -f /usr/lib/libnss_files.so)"
# udev wants /etc/group since it doesn't launch with --resolve-names=never
add_file "/etc/group"
}
help() {
cat <<HELPEOF
This will install a basic systemd setup in your initramfs, and is meant to
replace the 'base', 'usr', 'udev' and 'timestamp' hooks. Other hooks with runtime
components will need to be ported, and will not work as intended. You also may
wish to still include the 'base' hook (before this hook) to ensure that a
rescue shell exists on your initramfs.
HELPEOF
}
# vim: set ft=sh ts=4 sw=4 et:

View file

@ -0,0 +1,29 @@
#!/bin/bash
build() {
local rules tool
add_file "/etc/udev/udev.conf"
add_binary /usr/lib/systemd/systemd-udevd
add_binary /usr/bin/udevadm
add_binary /usr/bin/systemd-tmpfiles
for rules in 50-udev-default.rules 60-persistent-storage.rules 64-btrfs.rules 80-drivers.rules; do
add_file "/usr/lib/udev/rules.d/$rules"
done
for tool in ata_id scsi_id; do
add_file "/usr/lib/udev/$tool"
done
add_runscript
}
help() {
cat <<HELPEOF
This hook will use udev to create your root device node and detect the needed
modules for your root device. It is also required for firmware loading in
initramfs. It is recommended to use this hook.
HELPEOF
}
# vim: set ft=sh ts=4 sw=4 et:

View file

@ -0,0 +1,156 @@
#!/bin/bash
sd_booted() {
[[ -d run/systemd/system ]]
}
add_privs() {
if ! setcap "$2" "$1" 2>/dev/null; then
echo "==> Warning: setcap failed, falling back to setuid root on /$1"
chmod u+s "$1"
fi
}
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
:
}
maybe_reexec() {
# don't reexec on 209-1 upgrade due to large infrastructural changes.
if [[ $(vercmp 209-1 "$2") -eq 1 ]]; then
echo ':: systemd has not been reexecuted. It is recommended that you'
echo ' reboot at your earliest convenience.'
return
fi
if sd_booted; then
systemctl --system daemon-reexec
fi
}
_dir_empty() {
set -- "$1"/*
[[ ! -e $1 && ! -L $1 ]]
}
post_common() {
systemd-machine-id-setup
# TODO: drop this for 214
# http://cgit.freedesktop.org/systemd/systemd/commit/?id=fdd2531170
add_privs usr/bin/systemd-detect-virt 'cap_dac_override,cap_sys_ptrace+ep'
udevadm hwdb --update
journalctl --update-catalog
}
_204_1_changes() {
printf '==> The /bin/systemd symlink has been removed. Any references in your\n'
printf ' bootloader (or elsewhere) must be updated to /usr/lib/systemd/systemd.\n'
}
_205_1_changes() {
printf '==> systemd 205 restructures the cgroup hierarchy and changes internal\n'
printf ' protocols. You should reboot at your earliest convenience.\n'
}
_206_1_changes() {
printf '==> The "timestamp" hook for mkinitcpio no longer exists. If you used\n'
printf ' this hook, you must remove it from /etc/mkinitcpio.conf. A "systemd"\n'
printf ' hook has been added which provides this functionality, and more.\n'
}
_208_1_changes() {
if [[ -e var/lib/backlight && ! -e var/lib/systemd/backlight ]]; then
mv -T var/lib/backlight var/lib/systemd/backlight
fi
if [[ -e var/lib/random-seed && ! -e var/lib/systemd/random-seed ]]; then
mv -T var/lib/random-seed var/lib/systemd/random-seed
fi
}
_208_8_changes() {
add_journal_acls
}
_209_1_changes() {
# attempt to preserve existing behavior
local old_rule=etc/udev/rules.d/80-net-name-slot.rules
local new_rule=etc/udev/rules.d/80-net-setup-link.rules
echo ":: Network device naming is now controlled by udev's net_setup_link"
echo " builtin. Refer to the systemd.link manpage for a full description."
# not clear what action we can take here, so don't do anything
[[ -e $new_rule ]] && return 0
# rename the old rule to the new one so that we preserve the user's
# existing option.
if [[ -e $old_rule ]]; then
printf ':: Renaming %s to %s in order\n' "${old_rule##*/}" "${new_rule##*/}"
printf ' to preserve existing network naming behavior.\n'
mv -v "$old_rule" "$new_rule"
else
echo ':: No changes have been made to your network naming configuration.'
echo ' Interfaces should continue to maintain the same names.'
fi
}
_210_1_changes() {
if sd_booted; then
# If /etc/systemd/network is non-empty, then this is a 209 user who used
# networkd. Re-enable it for them.
if ! _dir_empty etc/systemd/network; then
systemctl enable systemd-networkd
fi
fi
}
_213_4_changes() {
if sd_booted; then
# if /etc/resolv.conf is a symlink, just assume that it was being managed
# by systemd-networkd, and re-enable systemd-resolved.
if [[ -L etc/resolv.conf ]]; then
systemctl enable systemd-resolved
fi
fi
}
post_install() {
post_common "$@"
add_journal_acls
# enable getty@tty1 by default, but don't track the file
systemctl enable getty@tty1.service
echo ":: Append 'init=/usr/lib/systemd/systemd' to your kernel command line in your"
echo " bootloader to replace sysvinit with systemd, or install systemd-sysvcompat"
}
post_upgrade() {
post_common "$@"
maybe_reexec "$@"
local v upgrades=(204-1
205-1
206-1
208-1
208-8
209-1
210-1
213-4)
for v in "${upgrades[@]}"; do
if [[ $(vercmp "$v" "$2") -eq 1 ]]; then
"_${v//-/_}_changes"
fi
done
}
# vim:set ts=2 sw=2 et: