Date: Friday, May 25, 2012 @ 20:23:22 Author: dreisner Revision: 159651
upgpkg: systemd 183-1 - split off systemd-tools, udev as new packages Added: systemd/trunk/0001-Reinstate-TIMEOUT-handling.patch systemd/trunk/initcpio-hook-udev systemd/trunk/initcpio-install-udev systemd/trunk/udev.install Modified: systemd/trunk/PKGBUILD systemd/trunk/systemd.install Deleted: systemd/trunk/0001-check-for-proper-return-from-dirent_ensure_type.patch systemd/trunk/0001-logind-close-FIFO-before-ending-sessions-cleanly.patch systemd/trunk/0001-util-never-follow-symlinks-in-rm_rf_children.patch -------------------------------------------------------------+ 0001-Reinstate-TIMEOUT-handling.patch | 124 ++++++ 0001-check-for-proper-return-from-dirent_ensure_type.patch | 28 - 0001-logind-close-FIFO-before-ending-sessions-cleanly.patch | 156 -------- 0001-util-never-follow-symlinks-in-rm_rf_children.patch | 32 - PKGBUILD | 179 +++++++--- initcpio-hook-udev | 20 + initcpio-install-udev | 28 + systemd.install | 13 udev.install | 29 + 9 files changed, 341 insertions(+), 268 deletions(-) Added: 0001-Reinstate-TIMEOUT-handling.patch =================================================================== --- 0001-Reinstate-TIMEOUT-handling.patch (rev 0) +++ 0001-Reinstate-TIMEOUT-handling.patch 2012-05-26 00:23:22 UTC (rev 159651) @@ -0,0 +1,124 @@ +From 2127f99fb43d2ef950e95329ce40bdd5da8b015c Mon Sep 17 00:00:00 2001 +From: Dave Reisner <[email protected]> +Date: Fri, 25 May 2012 19:43:24 -0400 +Subject: [PATCH] Reinstate TIMEOUT= handling + +This is mostly to deal with ipw2?00 drivers which have yet to be fixed +in the kernel. +--- + src/libudev/libudev-device.c | 19 +++++++++++++++++++ + src/libudev/libudev-private.h | 1 + + src/udev/udevd.c | 13 ++++++++++--- + 3 files changed, 30 insertions(+), 3 deletions(-) + +diff --git a/src/libudev/libudev-device.c b/src/libudev/libudev-device.c +index a8277d1..5966189 100644 +--- a/src/libudev/libudev-device.c ++++ b/src/libudev/libudev-device.c +@@ -68,6 +68,7 @@ struct udev_device { + struct udev_list tags_list; + unsigned long long int seqnum; + unsigned long long int usec_initialized; ++ int timeout; + int devlink_priority; + int refcount; + dev_t devnum; +@@ -89,6 +90,21 @@ struct udev_device { + bool db_persist; + }; + ++int udev_device_get_timeout(struct udev_device *udev_device) ++{ ++ return udev_device->timeout; ++} ++ ++static int udev_device_set_timeout(struct udev_device *udev_device, int timeout) ++{ ++ char num[32]; ++ ++ udev_device->timeout = timeout; ++ snprintf(num, sizeof(num), "%u", timeout); ++ udev_device_add_property(udev_device, "TIMEOUT", num); ++ return 0; ++} ++ + /** + * udev_device_get_seqnum: + * @udev_device: udev device +@@ -362,6 +378,8 @@ void udev_device_add_property_from_string_parse(struct udev_device *udev_device, + + util_strscpyl(path, sizeof(path), TEST_PREFIX "/sys", &property[8], NULL); + udev_device_set_syspath(udev_device, path); ++ } else if (strncmp(property, "TIMEOUT=", 8) == 0) { ++ udev_device_set_timeout(udev_device, strtoull(&property[8], NULL, 10)); + } else if (startswith(property, "SUBSYSTEM=")) { + udev_device_set_subsystem(udev_device, &property[10]); + } else if (startswith(property, "DEVTYPE=")) { +@@ -605,6 +623,7 @@ struct udev_device *udev_device_new(struct udev *udev) + udev_list_init(udev, &udev_device->sysattr_value_list, true); + udev_list_init(udev, &udev_device->sysattr_list, false); + udev_list_init(udev, &udev_device->tags_list, true); ++ udev_device->timeout = -1; + udev_device->watch_handle = -1; + /* copy global properties */ + udev_list_entry_foreach(list_entry, udev_get_properties_list_entry(udev)) +diff --git a/src/libudev/libudev-private.h b/src/libudev/libudev-private.h +index 4eb4a59..99aefeb 100644 +--- a/src/libudev/libudev-private.h ++++ b/src/libudev/libudev-private.h +@@ -70,6 +70,7 @@ const char *udev_device_get_id_filename(struct udev_device *udev_device); + void udev_device_set_is_initialized(struct udev_device *udev_device); + int udev_device_add_tag(struct udev_device *udev_device, const char *tag); + void udev_device_cleanup_tags_list(struct udev_device *udev_device); ++int udev_device_get_timeout(struct udev_device *udev_device); + unsigned long long udev_device_get_usec_initialized(struct udev_device *udev_device); + void udev_device_set_usec_initialized(struct udev_device *udev_device, unsigned long long usec_initialized); + int udev_device_get_devlink_priority(struct udev_device *udev_device); +diff --git a/src/udev/udevd.c b/src/udev/udevd.c +index 0d85960..cd24462 100644 +--- a/src/udev/udevd.c ++++ b/src/udev/udevd.c +@@ -384,7 +384,7 @@ out: + } + } + +-static void event_run(struct event *event) ++static void event_run(struct event *event, bool force) + { + struct udev_list_node *loop; + +@@ -410,7 +410,7 @@ static void event_run(struct event *event) + return; + } + +- if (children >= children_max) { ++ if (!force && children >= children_max) { + if (children_max > 1) + log_debug("maximum number (%i) of children reached\n", children); + return; +@@ -444,6 +444,13 @@ static int event_queue_insert(struct udev_device *dev) + + event->state = EVENT_QUEUED; + udev_list_node_append(&event->node, &event_list); ++ ++ /* run all events with a timeout set immediately */ ++ if (udev_device_get_timeout(dev) > 0) { ++ event_run(event, true); ++ return 0; ++ } ++ + return 0; + } + +@@ -549,7 +556,7 @@ static void event_queue_start(struct udev *udev) + if (is_devpath_busy(event)) + continue; + +- event_run(event); ++ event_run(event, false); + } + } + +-- +1.7.10.2 + Deleted: 0001-check-for-proper-return-from-dirent_ensure_type.patch =================================================================== --- 0001-check-for-proper-return-from-dirent_ensure_type.patch 2012-05-26 00:23:19 UTC (rev 159650) +++ 0001-check-for-proper-return-from-dirent_ensure_type.patch 2012-05-26 00:23:22 UTC (rev 159651) @@ -1,28 +0,0 @@ -From 7e5d190ccce8dc064d5756225e306e65fa534ae9 Mon Sep 17 00:00:00 2001 -From: Dave Reisner <[email protected]> -Date: Mon, 2 Apr 2012 08:20:34 -0400 -Subject: [PATCH] check for proper return from dirent_ensure_type - -Fixes 'systemctl list-unit-files', which previously returned only: - - Failed to issue method call: No such file or directory ---- - src/install.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/src/install.c b/src/install.c -index 174d79b..9256116 100644 ---- a/src/install.c -+++ b/src/install.c -@@ -1853,7 +1853,7 @@ int unit_file_get_list( - - r = dirent_ensure_type(d, de); - if (r < 0) { -- if (errno == ENOENT) -+ if (r == -ENOENT) - continue; - - goto finish; --- -1.7.9.5 - Deleted: 0001-logind-close-FIFO-before-ending-sessions-cleanly.patch =================================================================== --- 0001-logind-close-FIFO-before-ending-sessions-cleanly.patch 2012-05-26 00:23:19 UTC (rev 159650) +++ 0001-logind-close-FIFO-before-ending-sessions-cleanly.patch 2012-05-26 00:23:22 UTC (rev 159651) @@ -1,156 +0,0 @@ -From 75c8e3cffd7da8eede614cf61384957af2c82a29 Mon Sep 17 00:00:00 2001 -From: Lennart Poettering <[email protected]> -Date: Thu, 22 Mar 2012 02:06:40 +0100 -Subject: [PATCH] logind: close FIFO before ending sessions cleanly - -For clean session endings ask logind explicitly to get rid of the FIFO -before closing it so that the FIFO logic doesn't result in su/sudo to be -terminated immediately. ---- - src/login/logind-dbus.c | 30 ++++++++++++++++++++ - src/login/pam-module.c | 71 +++++++++++++++++++++++++++++++++++++++++++++-- - 2 files changed, 98 insertions(+), 3 deletions(-) - -diff --git a/src/login/logind-dbus.c b/src/login/logind-dbus.c -index d8f4d89..ea6b89f 100644 ---- a/src/login/logind-dbus.c -+++ b/src/login/logind-dbus.c -@@ -80,6 +80,9 @@ - " <arg name=\"seat\" type=\"s\" direction=\"out\"/>\n" \ - " <arg name=\"vtnr\" type=\"u\" direction=\"out\"/>\n" \ - " </method>\n" \ -+ " <method name=\"ReleaseSession\">\n" \ -+ " <arg name=\"id\" type=\"s\" direction=\"in\"/>\n" \ -+ " </method>\n" \ - " <method name=\"ActivateSession\">\n" \ - " <arg name=\"id\" type=\"s\" direction=\"in\"/>\n" \ - " </method>\n" \ -@@ -1075,6 +1078,33 @@ static DBusHandlerResult manager_message_handler( - if (r < 0) - return bus_send_error_reply(connection, message, &error, r); - -+ } else if (dbus_message_is_method_call(message, "org.freedesktop.login1.Manager", "ReleaseSession")) { -+ const char *name; -+ Session *session; -+ -+ if (!dbus_message_get_args( -+ message, -+ &error, -+ DBUS_TYPE_STRING, &name, -+ DBUS_TYPE_INVALID)) -+ return bus_send_error_reply(connection, message, &error, -EINVAL); -+ -+ session = hashmap_get(m->sessions, name); -+ if (!session) -+ return bus_send_error_reply(connection, message, &error, -ENOENT); -+ -+ /* We use the FIFO to detect stray sessions where the -+ process invoking PAM dies abnormally. We need to make -+ sure that that process is not killed if at the clean -+ end of the session it closes the FIFO. Hence, with -+ this call explicitly turn off the FIFO logic, so that -+ the PAM code can finish clean up on its own */ -+ session_remove_fifo(session); -+ -+ reply = dbus_message_new_method_return(message); -+ if (!reply) -+ goto oom; -+ - } else if (dbus_message_is_method_call(message, "org.freedesktop.login1.Manager", "ActivateSession")) { - const char *name; - Session *session; -diff --git a/src/login/pam-module.c b/src/login/pam-module.c -index 8544413..4106d2b 100644 ---- a/src/login/pam-module.c -+++ b/src/login/pam-module.c -@@ -414,7 +414,6 @@ _public_ PAM_EXTERN int pam_sm_open_session( - "/org/freedesktop/login1", - "org.freedesktop.login1.Manager", - "CreateSession"); -- - if (!m) { - pam_syslog(handle, LOG_ERR, "Could not allocate create session message."); - r = PAM_BUF_ERR; -@@ -620,11 +619,77 @@ _public_ PAM_EXTERN int pam_sm_close_session( - int argc, const char **argv) { - - const void *p = NULL; -+ const char *id; -+ DBusConnection *bus = NULL; -+ DBusMessage *m = NULL, *reply = NULL; -+ DBusError error; -+ int r; - -- pam_get_data(handle, "systemd.session-fd", &p); -+ assert(handle); -+ -+ dbus_error_init(&error); -+ -+ id = pam_getenv(handle, "XDG_SESSION_ID"); -+ if (id) { -+ -+ /* Before we go and close the FIFO we need to tell -+ * logind that this is a clean session shutdown, so -+ * that it doesn't just go and slaughter us -+ * immediately after closing the fd */ -+ -+ bus = dbus_bus_get_private(DBUS_BUS_SYSTEM, &error); -+ if (!bus) { -+ pam_syslog(handle, LOG_ERR, "Failed to connect to system bus: %s", bus_error_message(&error)); -+ r = PAM_SESSION_ERR; -+ goto finish; -+ } -+ -+ m = dbus_message_new_method_call( -+ "org.freedesktop.login1", -+ "/org/freedesktop/login1", -+ "org.freedesktop.login1.Manager", -+ "ReleaseSession"); -+ if (!m) { -+ pam_syslog(handle, LOG_ERR, "Could not allocate release session message."); -+ r = PAM_BUF_ERR; -+ goto finish; -+ } -+ -+ if (!dbus_message_append_args(m, -+ DBUS_TYPE_STRING, &id, -+ DBUS_TYPE_INVALID)) { -+ pam_syslog(handle, LOG_ERR, "Could not attach parameters to message."); -+ r = PAM_BUF_ERR; -+ goto finish; -+ } - -+ reply = dbus_connection_send_with_reply_and_block(bus, m, -1, &error); -+ if (!reply) { -+ pam_syslog(handle, LOG_ERR, "Failed to release session: %s", bus_error_message(&error)); -+ r = PAM_SESSION_ERR; -+ goto finish; -+ } -+ } -+ -+ r = PAM_SUCCESS; -+ -+finish: -+ pam_get_data(handle, "systemd.session-fd", &p); - if (p) - close_nointr(PTR_TO_INT(p) - 1); - -- return PAM_SUCCESS; -+ dbus_error_free(&error); -+ -+ if (bus) { -+ dbus_connection_close(bus); -+ dbus_connection_unref(bus); -+ } -+ -+ if (m) -+ dbus_message_unref(m); -+ -+ if (reply) -+ dbus_message_unref(reply); -+ -+ return r; - } --- -1.7.9.5 - Deleted: 0001-util-never-follow-symlinks-in-rm_rf_children.patch =================================================================== --- 0001-util-never-follow-symlinks-in-rm_rf_children.patch 2012-05-26 00:23:19 UTC (rev 159650) +++ 0001-util-never-follow-symlinks-in-rm_rf_children.patch 2012-05-26 00:23:22 UTC (rev 159651) @@ -1,32 +0,0 @@ -From 5ebff5337594d690b322078c512eb222d34aaa82 Mon Sep 17 00:00:00 2001 -From: Michal Schmidt <[email protected]> -Date: Fri, 2 Mar 2012 10:39:10 +0100 -Subject: [PATCH] util: never follow symlinks in rm_rf_children() - -The function checks if the entry is a directory before recursing, but -there is a window between the check and the open, during which the -directory could be replaced with a symlink. - -CVE-2012-1174 -https://bugzilla.redhat.com/show_bug.cgi?id=803358 ---- - src/util.c | 3 ++- - 1 file changed, 2 insertions(+), 1 deletion(-) - -diff --git a/src/util.c b/src/util.c -index 20cbc2b..dfc1dc6 100644 ---- a/src/util.c -+++ b/src/util.c -@@ -3593,7 +3593,8 @@ static int rm_rf_children(int fd, bool only_dirs, bool honour_sticky) { - if (is_dir) { - int subdir_fd; - -- if ((subdir_fd = openat(fd, de->d_name, O_RDONLY|O_NONBLOCK|O_DIRECTORY|O_CLOEXEC)) < 0) { -+ subdir_fd = openat(fd, de->d_name, O_RDONLY|O_NONBLOCK|O_DIRECTORY|O_CLOEXEC|O_NOFOLLOW); -+ if (subdir_fd < 0) { - if (ret == 0 && errno != ENOENT) - ret = -errno; - continue; --- -1.7.9.4 - Modified: PKGBUILD =================================================================== --- PKGBUILD 2012-05-26 00:23:19 UTC (rev 159650) +++ PKGBUILD 2012-05-26 00:23:22 UTC (rev 159651) @@ -1,53 +1,53 @@ -# $Id$ # Maintainer: Dave Reisner <[email protected]> pkgbase=systemd -pkgname=('systemd' 'libsystemd') -pkgver=44 -pkgrel=7 +pkgname=('systemd' 'libsystemd' 'systemd-tools' 'udev') +pkgver=183 +pkgrel=1 arch=('i686' 'x86_64') url="http://www.freedesktop.org/wiki/Software/systemd" license=('GPL2' 'LGPL2.1' 'MIT') -makedepends=('acl' 'cryptsetup' 'dbus-core' 'docbook-xsl' 'gperf' 'intltool' - 'kmod' 'libcap' 'libxslt' 'linux-api-headers' 'pam' 'udev' 'xz') +makedepends=('acl' 'cryptsetup' 'dbus-core' 'docbook-xsl' 'gobject-introspection' 'gperf' + 'gtk-doc' 'intltool' 'kmod' 'libcap' 'libxslt' 'linux-api-headers' 'pam' 'xz') options=('!libtool') source=("http://www.freedesktop.org/software/$pkgname/$pkgname-$pkgver.tar.xz" - "os-release" - 0001-util-never-follow-symlinks-in-rm_rf_children.patch - 0001-logind-close-FIFO-before-ending-sessions-cleanly.patch - 0001-check-for-proper-return-from-dirent_ensure_type.patch) -md5sums=('11f44ff74c87850064e4351518bcff17' - '752636def0db3c03f121f8b4f44a63cd' - 'b5863d6d4b47e2b5bda8eb57bde0d327' - 'd37833358ef6c23fad622ea4a0941d1f' - '11f930fd0a3966abc794bf9127a7dde0') + 'initcpio-hook-udev' + 'initcpio-install-udev' + '0001-Reinstate-TIMEOUT-handling.patch' + 'os-release') +md5sums=('e1e5e0f376fa2a4cb4bc31a2161c09f2' + 'e99e9189aa2f6084ac28b8ddf605aeb8' + '59e91c4d7a69b7bf12c86a9982e37ced' + '5543be25f205f853a21fa5ee68e03f0d' + '752636def0db3c03f121f8b4f44a63cd') build() { cd "$pkgname-$pkgver" - # https://bugzilla.redhat.com/show_bug.cgi?id=803358 (upstream 5ebff53375) - patch -Np1 <"$srcdir/0001-util-never-follow-symlinks-in-rm_rf_children.patch" + patch -Np1 <"$srcdir/0001-Reinstate-TIMEOUT-handling.patch" - # https://bugs.archlinux.org/task/28386 (upstream 75c8e3cffd) - patch -Np1 <"$srcdir/0001-logind-close-FIFO-before-ending-sessions-cleanly.patch" + ./configure \ + --libexecdir=/usr/lib \ + --localstatedir=/var \ + --sysconfdir=/etc \ + --enable-split-usr \ + --enable-introspection \ + --enable-gtk-doc \ + --disable-audit \ + --disable-ima \ + --with-pamlibdir=/usr/lib/security \ + --with-distro=arch \ + --with-usb-ids-path=/usr/share/hwdata/usb.ids \ + --with-pci-ids-path=/usr/share/hwdata/pci.ids \ + --with-firmware-path=/usr/lib/firmware/updates:/lib/firmware/updates:/usr/lib/firmware:/lib/firmware - # Fix broken 'systemctl list-unit-files' (upstream fb5ef067c49) - patch -Np1 <"$srcdir/0001-check-for-proper-return-from-dirent_ensure_type.patch" - - ./configure --sysconfdir=/etc \ - --libexecdir=/usr/lib \ - --with-pamlibdir=/usr/lib/security \ - --localstatedir=/var \ - --with-distro=arch \ - --enable-split-usr \ - --disable-ima - make } package_systemd() { pkgdesc="system and service manager" - depends=('acl' 'dbus-core' 'libsystemd' 'kbd' 'kmod' 'libcap' 'pam' 'util-linux' 'udev' 'xz') + depends=('acl' 'dbus-core' "libsystemd=$pkgver" 'kbd' 'kmod' 'libcap' 'pam' "systemd-tools=$pkgver" + 'util-linux' "udev=$pkgver" 'xz') optdepends=('cryptsetup: required for encrypted block devices' 'dbus-python: systemd-analyze' 'initscripts: legacy support for hostname and vconsole setup' @@ -62,37 +62,38 @@ etc/dbus-1/system.d/org.freedesktop.timedate1.conf etc/systemd/system.conf etc/systemd/user.conf - etc/systemd/systemd-logind.conf - etc/systemd/systemd-journald.conf) - install="$pkgname.install" + etc/systemd/logind.conf + etc/systemd/journald.conf) + install="systemd.install" cd "$pkgname-$pkgver" make DESTDIR="$pkgdir" install install -Dm644 "$srcdir/os-release" "$pkgdir/etc/os-release" + printf "d /run/console 0755 root root\n" > "$pkgdir/usr/lib/tmpfiles.d/console.conf" - printf "d /run/console 755 root root\n" >"$pkgdir/usr/lib/tmpfiles.d/console.conf" - chmod 644 "$pkgdir/usr/lib/tmpfiles.d/console.conf" + # install external sd-{daemon,readahead} libraries + install -m644 -t "$pkgdir/usr/share/doc/systemd" \ + src/systemd/sd-daemon.[ch] \ + src/readahead/sd-readahead.[ch] - # symlink to /bin/systemd for compat and sanity install -dm755 "$pkgdir/bin" ln -s ../usr/lib/systemd/systemd "$pkgdir/bin/systemd" - # use python2 for systemd-analyze + # fix systemd-analyze for python2 sed -i '1s/python$/python2/' "$pkgdir/usr/bin/systemd-analyze" - # didn't build this... - rm -f "$pkgdir/usr/share/man/man1/systemadm.1" - # fix .so links in manpage stubs find "$pkgdir/usr/share/man" -type f -name '*.[[:digit:]]' \ -exec sed -i '1s|^\.so \(.*\)\.\([[:digit:]]\+\)|.so man\2/\1.\2|' {} + # rename man pages to avoid conflicts with sysvinit and initscripts + cd "$pkgdir/usr/share/man" + manpages=(man8/{telinit,halt,reboot,poweroff,runlevel,shutdown}.8 man5/{hostname,{vconsole,locale}.conf}.5) - cd "$pkgdir/usr/share/man" + for manpage in "${manpages[@]}"; do IFS='/' read section page <<< "$manpage" mv "$manpage" "$section/systemd.$page" @@ -105,24 +106,102 @@ ln -s systemctl "$pkgdir/usr/share/bash-completion/completions/loginctl" rm -rf "$pkgdir/etc/bash_completion.d" - # fix systemctl where - find "$pkgdir" -type f -name '*.service' -exec \ - sed -i 's@\([=-]\)/bin/systemctl@\1/usr/bin/systemctl@g' {} + + # don't write units to /etc by default -- we'll enable this on post_install + # as a sane default + rm "$pkgdir/etc/systemd/system/getty.target.wants/[email protected]" + rmdir "$pkgdir/etc/systemd/system/getty.target.wants" ### split off libsystemd (libs, includes, pkgconfig, man3) - install -dm755 "$srcdir"/libsystemd/usr/{include,lib/pkgconfig} - - cd "$srcdir"/libsystemd + rm -rf "$srcdir/_libsystemd" + install -dm755 "$srcdir"/_libsystemd/usr/{include,lib/pkgconfig} + cd "$srcdir"/_libsystemd mv "$pkgdir/usr/lib"/libsystemd-*.so* usr/lib mv "$pkgdir/usr/include/systemd" usr/include mv "$pkgdir/usr/lib/pkgconfig"/libsystemd-*.pc usr/lib/pkgconfig + + ### split out udev + rm -rf "$srcdir/_udev" + install -dm755 \ + "$srcdir"/_udev/etc/udev \ + "$srcdir"/_udev/usr/bin \ + "$srcdir"/_udev/usr/include \ + "$srcdir"/_udev/usr/lib/{systemd/system,udev} \ + "$srcdir"/_udev/usr/lib/systemd/system/{sysinit,sockets}.target.wants \ + "$srcdir"/_udev/usr/lib/girepository-1.0 \ + "$srcdir"/_udev/usr/{lib,share}/pkgconfig \ + "$srcdir"/_udev/usr/share/gir-1.0 \ + "$srcdir"/_udev/usr/share/gtk-doc/html/{g,lib}udev \ + "$srcdir"/_udev/usr/share/man/man{7,8} + + cd "$srcdir"/_udev + mv "$pkgdir"/etc/udev etc + mv "$pkgdir"/usr/bin/udevadm usr/bin + mv "$pkgdir"/usr/lib/pkgconfig/*udev*.pc usr/lib/pkgconfig + mv "$pkgdir"/usr/lib/systemd/systemd-udevd usr/lib/systemd + mv "$pkgdir"/usr/lib/systemd/system/systemd-udev* usr/lib/systemd/system + mv "$pkgdir"/usr/lib/systemd/system/sysinit.target.wants/systemd-udev* usr/lib/systemd/system/sysinit.target.wants + mv "$pkgdir"/usr/lib/systemd/system/sockets.target.wants/systemd-udev* usr/lib/systemd/system/sockets.target.wants + mv "$pkgdir"/usr/lib/lib{,g}udev* usr/lib + mv "$pkgdir"/usr/lib/udev usr/lib + mv "$pkgdir"/usr/include/{libudev.h,gudev-1.0} usr/include + mv "$pkgdir"/usr/lib/girepository-1.0 usr/lib + mv "$pkgdir"/usr/share/pkgconfig/udev.pc usr/share/pkgconfig + mv "$pkgdir"/usr/share/gir-1.0 usr/share + mv "$pkgdir"/usr/share/gtk-doc/html/{g,lib}udev usr/share/gtk-doc/html + mv "$pkgdir"/usr/share/man/man7/udev.7 usr/share/man/man7 + mv "$pkgdir"/usr/share/man/man8/{systemd-udevd,udevadm}.8 usr/share/man/man8 + + ### split out systemd-tools + rm -rf "$srcdir/_tools" + install -dm755 "$srcdir/_tools/usr/lib/systemd" "$srcdir/_tools/usr/bin" "$srcdir"/_tools/usr/share/man/man5 + cd "$srcdir/_tools" + mv "$pkgdir"/usr/bin/systemd-tmpfiles usr/bin + mv "$pkgdir"/usr/lib/systemd/systemd-{binfmt,modules-load,random-seed,sysctl,vconsole-setup} usr/lib/systemd + mv "$pkgdir"/usr/share/man/man5/{binfmt,modules-load,sysctl,tmpfiles}.d.5 usr/share/man/man5 + mv "$pkgdir"/usr/share/man/man5/systemd.vconsole.conf.5 usr/share/man/man5 } package_libsystemd() { pkgdesc="systemd client libraries" - depends=('libcap' 'xz') + depends=('xz') - mv "$srcdir/libsystemd"/* "$pkgdir" + mv "$srcdir/_libsystemd"/* "$pkgdir" } +package_systemd-tools() { + pkgdesc='standalone tools from systemd' + url='http://www.freedesktop.org/wiki/Software/systemd' + depends=('glibc' 'kmod') + + mv "$srcdir/_tools/"* "$pkgdir" +} + +package_udev() { + pkgdesc='userspace dev tools' + url='http://git.kernel.org/?p=linux/hotplug/udev.git;a=summary' + groups=('base') + depends=('acl' 'util-linux' 'glibc' 'glib2' 'kmod' 'hwids' 'bash') + backup=('etc/udev/udev.conf') + install='udev.install' + + mv "$srcdir/_udev"/* "$pkgdir" + + # the path to udevadm is hardcoded in some places + install -d "$pkgdir/sbin" + ln -s ../usr/bin/udevadm "$pkgdir/sbin/udevadm" + + # udevd is no longer udevd because systemd. why isn't udevadm now udevctl? + ln -s ../lib/systemd/systemd-udevd "$pkgdir/usr/bin/udevd" + ln -s ../systemd/systemd-udevd "$pkgdir/usr/lib/udev/udevd" + + # 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 for udev + install -Dm644 "$srcdir/initcpio-install-udev" "$pkgdir/usr/lib/initcpio/install/udev" + install -Dm644 "$srcdir/initcpio-hook-udev" "$pkgdir/usr/lib/initcpio/hooks/udev" +} + # vim: ft=sh syn=sh et Added: initcpio-hook-udev =================================================================== --- initcpio-hook-udev (rev 0) +++ initcpio-hook-udev 2012-05-26 00:23:22 UTC (rev 159651) @@ -0,0 +1,20 @@ +#!/usr/bin/ash + +run_earlyhook() { + 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: Added: initcpio-install-udev =================================================================== --- initcpio-install-udev (rev 0) +++ initcpio-install-udev 2012-05-26 00:23:22 UTC (rev 159651) @@ -0,0 +1,28 @@ +#!/bin/bash + +build() { + local rules tool + + add_file "/etc/udev/udev.conf" + add_binary /usr/lib/systemd/systemd-udevd /usr/bin/udevd + add_binary /usr/bin/udevadm + + for rules in 50-udev-default.rules 60-persistent-storage.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: Modified: systemd.install =================================================================== --- systemd.install 2012-05-26 00:23:19 UTC (rev 159650) +++ systemd.install 2012-05-26 00:23:22 UTC (rev 159651) @@ -17,8 +17,11 @@ systemd-machine-id-setup fi - echo "systemd has been installed to /bin/systemd. Please ensure you append" - echo "init=/bin/systemd to your kernel command line in your bootloader." + # enable getty@tty1 by default, but don't track the file + systemctl enable [email protected] + + echo ":: Append 'init=/bin/systemd' to your kernel command line in your" + echo " bootloader to replace sysvinit with systemd" } post_upgrade() { @@ -39,6 +42,12 @@ systemctl daemon-reexec fi fi + + # [email protected] is no longer enabled by default, but we don't want to break + # existing setups. + if [ "$(vercmp 183 "$2")" -eq 1 ]; then + systemctl -q enable [email protected] + fi } post_remove() { Added: udev.install =================================================================== --- udev.install (rev 0) +++ udev.install 2012-05-26 00:23:22 UTC (rev 159651) @@ -0,0 +1,29 @@ +# arg 1: the new package version +# arg 2: the old package version + +post_upgrade() { + if [ "$(vercmp $2 174)" -lt 0 ]; then + echo " * We now use upstream rules for assigning devices to the 'disk', 'optical'," + echo " 'scanner' and 'video' groups. Beware of any changes." + echo " * We no longer create symlinks from /dev/<dev> to /dev/<dev>0." + echo " * For security reasons, we no longer add devices to the 'storage' group. Use" + echo " udisks and friends, or add custom rules to /etc/udev.d/rules/, if you want" + echo " this functionality back." + echo " * We no longer create the static nodes on install needed for an initrd-less" + echo " boot where devtmpfs is not mounted by the kernel, this only affects fresh" + echo " installs." + fi + if [ "$(vercmp $2 175)" -lt 0 ]; then + echo " * devtmpfs support is now a hard requirement. Users of the official Arch" + echo " kernels have this enabled." + fi + if [ "$(vercmp $2 181)" -lt 0 ]; then + echo " * udev-compat has been removed, and should be uninstalled." + echo " * Framebuffers are no longer blacklisted by default." + echo " * binaries moved from /sbin to /usr/bin" + fi + if [ "$(vercmp $2 181-3)" -lt 0 ]; then + echo " * if your kernel does not provide /dev/loop-control, you need to manually" + echo " load the 'loop' module before using losetup" + fi +}
