mirror of
https://github.com/archlinuxarm/PKGBUILDs.git
synced 2024-11-18 22:54:00 +00:00
added core/systemd
This commit is contained in:
parent
d742e66c11
commit
a2923a82b2
6 changed files with 665 additions and 0 deletions
|
@ -0,0 +1,104 @@
|
|||
From 4958aee4977f325be19f0e1e4b424922c3cada5f Mon Sep 17 00:00:00 2001
|
||||
From: Tom Gundersen <teg@jklm.no>
|
||||
Date: Thu, 3 Jul 2014 22:47:51 +0200
|
||||
Subject: [PATCH] networkd: properly track addresses when first added
|
||||
|
||||
When doing a NEWADDR, the reply we get back is the NEWADDR itself, rather
|
||||
than just an empty ack (unlike how NEWLINK works). For this reason, the
|
||||
process that did the NEWADDR does not get the broadcast message.
|
||||
|
||||
We were only listening for broadcast messages, and hence not tracking the
|
||||
addresses we added ourselves. This went unnoticed as the kernel will usually
|
||||
send NEWADDR messages from time to time anyway, so things would mostly work,
|
||||
but in the worst case we would not notice that a routable address was available
|
||||
and consider ourselves offline.
|
||||
---
|
||||
src/network/networkd-link.c | 54 +++++++++++++++++++++++++--------------------
|
||||
1 file changed, 30 insertions(+), 24 deletions(-)
|
||||
|
||||
diff --git a/src/network/networkd-link.c b/src/network/networkd-link.c
|
||||
index 961c1ab..6257372 100644
|
||||
--- a/src/network/networkd-link.c
|
||||
+++ b/src/network/networkd-link.c
|
||||
@@ -599,10 +599,35 @@ static int route_drop_handler(sd_rtnl *rtnl, sd_rtnl_message *m, void *userdata)
|
||||
return 0;
|
||||
}
|
||||
|
||||
+static int link_get_address_handler(sd_rtnl *rtnl, sd_rtnl_message *m, void *userdata) {
|
||||
+ _cleanup_link_unref_ Link *link = userdata;
|
||||
+ int r;
|
||||
+
|
||||
+ assert(rtnl);
|
||||
+ assert(m);
|
||||
+ assert(link);
|
||||
+ assert(link->manager);
|
||||
+
|
||||
+ for (; m; m = sd_rtnl_message_next(m)) {
|
||||
+ r = sd_rtnl_message_get_errno(m);
|
||||
+ if (r < 0) {
|
||||
+ log_debug_link(link, "getting address failed: %s", strerror(-r));
|
||||
+ continue;
|
||||
+ }
|
||||
+
|
||||
+ r = link_rtnl_process_address(rtnl, m, link->manager);
|
||||
+ if (r < 0)
|
||||
+ log_warning_link(link, "could not process address: %s", strerror(-r));
|
||||
+ }
|
||||
+
|
||||
+ return 1;
|
||||
+}
|
||||
+
|
||||
static int address_handler(sd_rtnl *rtnl, sd_rtnl_message *m, void *userdata) {
|
||||
_cleanup_link_unref_ Link *link = userdata;
|
||||
int r;
|
||||
|
||||
+ assert(rtnl);
|
||||
assert(m);
|
||||
assert(link);
|
||||
assert(link->ifname);
|
||||
@@ -623,6 +648,11 @@ static int address_handler(sd_rtnl *rtnl, sd_rtnl_message *m, void *userdata) {
|
||||
link->ifname, strerror(-r),
|
||||
"ERRNO=%d", -r,
|
||||
NULL);
|
||||
+ if (r >= 0) {
|
||||
+ /* calling handler directly so take a ref */
|
||||
+ link_ref(link);
|
||||
+ link_get_address_handler(rtnl, m, link);
|
||||
+ }
|
||||
|
||||
if (link->addr_messages == 0) {
|
||||
log_debug_link(link, "addresses set");
|
||||
@@ -2233,30 +2263,6 @@ int link_rtnl_process_address(sd_rtnl *rtnl, sd_rtnl_message *message, void *use
|
||||
return 1;
|
||||
}
|
||||
|
||||
-static int link_get_address_handler(sd_rtnl *rtnl, sd_rtnl_message *m, void *userdata) {
|
||||
- _cleanup_link_unref_ Link *link = userdata;
|
||||
- int r;
|
||||
-
|
||||
- assert(rtnl);
|
||||
- assert(m);
|
||||
- assert(link);
|
||||
- assert(link->manager);
|
||||
-
|
||||
- for (; m; m = sd_rtnl_message_next(m)) {
|
||||
- r = sd_rtnl_message_get_errno(m);
|
||||
- if (r < 0) {
|
||||
- log_debug_link(link, "getting address failed: %s", strerror(-r));
|
||||
- continue;
|
||||
- }
|
||||
-
|
||||
- r = link_rtnl_process_address(rtnl, m, link->manager);
|
||||
- if (r < 0)
|
||||
- log_warning_link(link, "could not process address: %s", strerror(-r));
|
||||
- }
|
||||
-
|
||||
- return 1;
|
||||
-}
|
||||
-
|
||||
int link_add(Manager *m, sd_rtnl_message *message, Link **ret) {
|
||||
Link *link;
|
||||
_cleanup_rtnl_message_unref_ sd_rtnl_message *req = NULL;
|
||||
--
|
||||
2.0.1
|
||||
|
170
core/systemd/PKGBUILD
Normal file
170
core/systemd/PKGBUILD
Normal file
|
@ -0,0 +1,170 @@
|
|||
# Maintainer: Dave Reisner <dreisner@archlinux.org>
|
||||
# Maintainer: Tom Gundersen <teg@jklm.no>
|
||||
|
||||
# ALARM: Kevin Mihelich <kevin@archlinuxarm.org>
|
||||
# - !distcc
|
||||
|
||||
pkgbase=systemd
|
||||
pkgname=('systemd' 'libsystemd' 'systemd-sysvcompat')
|
||||
pkgver=215
|
||||
pkgrel=4.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' '!distcc')
|
||||
source=("http://www.freedesktop.org/software/$pkgname/$pkgname-$pkgver.tar.xz"
|
||||
'initcpio-hook-udev'
|
||||
'initcpio-install-systemd'
|
||||
'initcpio-install-udev'
|
||||
'0001-networkd-properly-track-addresses-when-first-added.patch')
|
||||
md5sums=('d2603e9fffd8b18d242543e36f2e7d31'
|
||||
'29245f7a240bfba66e2b1783b63b6b40'
|
||||
'66cca7318e13eaf37c5b7db2efa69846'
|
||||
'bde43090d4ac0ef048e3eaee8202a407'
|
||||
'2d237a277a12b3801c88d159d64a7413')
|
||||
|
||||
prepare() {
|
||||
cd "$pkgname-$pkgver"
|
||||
|
||||
patch -Np1 <"$srcdir"/0001-networkd-properly-track-addresses-when-first-added.patch
|
||||
}
|
||||
|
||||
build() {
|
||||
cd "$pkgname-$pkgver"
|
||||
|
||||
./configure \
|
||||
--libexecdir=/usr/lib \
|
||||
--localstatedir=/var \
|
||||
--sysconfdir=/etc \
|
||||
--enable-introspection \
|
||||
--enable-gtk-doc \
|
||||
--enable-compat-libs \
|
||||
--disable-audit \
|
||||
--disable-ima \
|
||||
--disable-kdbus \
|
||||
--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/multi-user.target.wants/systemd-timesyncd.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"
|
||||
|
||||
# remove the coredump rule until minidumps are a thing.
|
||||
rm "$pkgdir/usr/lib/sysctl.d/50-coredump.conf"
|
||||
|
||||
# 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
|
||||
sed -i 's/dialout/uucp/g;
|
||||
s/tape/storage/g;
|
||||
s/cdrom/optical/g' "$pkgdir"/usr/lib/sysusers.d/basic.conf
|
||||
|
||||
# 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
|
22
core/systemd/initcpio-hook-udev
Normal file
22
core/systemd/initcpio-hook-udev
Normal 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:
|
160
core/systemd/initcpio-install-systemd
Normal file
160
core/systemd/initcpio-install-systemd
Normal 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:
|
29
core/systemd/initcpio-install-udev
Normal file
29
core/systemd/initcpio-install-udev
Normal 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:
|
180
core/systemd/systemd.install
Normal file
180
core/systemd/systemd.install
Normal file
|
@ -0,0 +1,180 @@
|
|||
#!/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
|
||||
|
||||
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
|
||||
}
|
||||
|
||||
_214_2_changes() {
|
||||
# /run/systemd/network/resolv.conf -> /run/systemd/resolve/resolv.conf
|
||||
if [[ etc/resolv.conf -ef run/systemd/network/resolv.conf ]]; then
|
||||
ln -sf /run/systemd/resolve/resolv.conf /etc/resolv.conf
|
||||
|
||||
if sd_booted; then
|
||||
if [[ ! -d run/systemd/resolve ]]; then
|
||||
mkdir run/systemd/resolve
|
||||
fi
|
||||
|
||||
if [[ -f run/systemd/network/resolv.conf ]]; then
|
||||
mv run/systemd/{network,resolve}/resolv.conf
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
||||
echo ':: coredumps are no longer sent to the journal by default. To re-enable:'
|
||||
echo ' echo >/etc/sysctl.d/50-coredump.conf \'
|
||||
echo ' "kernel.core_pattern=|/usr/lib/systemd/systemd-coredump %p %u %g %s %t %e"'
|
||||
}
|
||||
|
||||
_215_2_changes() {
|
||||
# create at least the symlink from /etc/os-release to /usr/lib/os-release
|
||||
systemd-tmpfiles --create etc.conf
|
||||
}
|
||||
|
||||
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
|
||||
214-2
|
||||
215-2)
|
||||
|
||||
for v in "${upgrades[@]}"; do
|
||||
if [[ $(vercmp "$v" "$2") -eq 1 ]]; then
|
||||
"_${v//-/_}_changes"
|
||||
fi
|
||||
done
|
||||
}
|
||||
|
||||
# vim:set ts=2 sw=2 et:
|
Loading…
Reference in a new issue