mirror of
https://github.com/archlinuxarm/PKGBUILDs.git
synced 2024-11-08 22:45:43 +00:00
added core/systemd
This commit is contained in:
parent
2a51cb1755
commit
f0488cf526
11 changed files with 785 additions and 0 deletions
58
core/systemd/0001-fsck-disable-l-option-for-now.patch
Normal file
58
core/systemd/0001-fsck-disable-l-option-for-now.patch
Normal 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
|
||||
|
33
core/systemd/0001-networkd-link-intialize-mac-address.patch
Normal file
33
core/systemd/0001-networkd-link-intialize-mac-address.patch
Normal 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
|
||||
|
|
@ -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
|
||||
|
|
@ -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
|
||||
|
|
@ -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
|
||||
|
|
@ -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
182
core/systemd/PKGBUILD
Normal 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
|
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:
|
156
core/systemd/systemd.install
Normal file
156
core/systemd/systemd.install
Normal 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:
|
Loading…
Reference in a new issue