diff --git a/0001-Don-t-snprintf-a-potentially-NULL-pointer.patch b/0001-Don-t-snprintf-a-potentially-NULL-pointer.patch new file mode 100644 index 00000000..7f0f7b9c --- /dev/null +++ b/0001-Don-t-snprintf-a-potentially-NULL-pointer.patch @@ -0,0 +1,25 @@ +From 5effdfa831d75306fc0ff9b47d39997e4ae87f16 Mon Sep 17 00:00:00 2001 +From: Michael Meeks +Date: Tue, 11 Feb 2014 14:42:26 +0000 +Subject: [PATCH] Don't snprintf a potentially NULL pointer. + +--- + src/shared/log.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/shared/log.c b/src/shared/log.c +index 2a075ff..d6b138f 100644 +--- a/src/shared/log.c ++++ b/src/shared/log.c +@@ -479,7 +479,7 @@ static int log_do_header(char *header, size_t size, + func ? "CODE_FUNCTION=" : "", + func ? LINE_MAX : 0, func, + func ? "\n" : "", +- object ? object_name : "", ++ object_name ? object_name : "", + object ? LINE_MAX : 0, object, /* %.0s means no output */ + object ? "\n" : "", + program_invocation_short_name); +-- +1.8.4.5 + diff --git a/0018-core-do-not-add-what-to-RequiresMountsFor-for-networ.patch b/0018-core-do-not-add-what-to-RequiresMountsFor-for-networ.patch new file mode 100644 index 00000000..e6981e63 --- /dev/null +++ b/0018-core-do-not-add-what-to-RequiresMountsFor-for-networ.patch @@ -0,0 +1,181 @@ +From fc676b00a7545743429e0c9b12a0f0707b1059aa Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= +Date: Sat, 5 Oct 2013 13:09:43 -0400 +Subject: [PATCH] core: do not add "what" to RequiresMountsFor for network + mounts + +For cifs mount like //server/share, we would get +RequiresMountsFor=/server/share, which probably isn't +harmful, but quite confusing. + +Unfortunately a bunch of static functions had to be moved +up, but patch is really one line. +--- + src/core/mount.c | 137 ++++++++++++++++++++++++++++-------------------------- + 1 file changed, 70 insertions(+), 67 deletions(-) + +diff --git src/core/mount.c src/core/mount.c +index db055f0..70cd372 100644 +--- src/core/mount.c ++++ src/core/mount.c +@@ -59,6 +59,72 @@ static const UnitActiveState state_translation_table[_MOUNT_STATE_MAX] = { + [MOUNT_FAILED] = UNIT_FAILED + }; + ++static char* mount_test_option(const char *haystack, const char *needle) { ++ struct mntent me = { .mnt_opts = (char*) haystack }; ++ ++ assert(needle); ++ ++ /* Like glibc's hasmntopt(), but works on a string, not a ++ * struct mntent */ ++ ++ if (!haystack) ++ return NULL; ++ ++ return hasmntopt(&me, needle); ++} ++ ++static bool mount_is_network(MountParameters *p) { ++ assert(p); ++ ++ if (mount_test_option(p->options, "_netdev")) ++ return true; ++ ++ if (p->fstype && fstype_is_network(p->fstype)) ++ return true; ++ ++ return false; ++} ++ ++static bool mount_is_bind(MountParameters *p) { ++ assert(p); ++ ++ if (mount_test_option(p->options, "bind")) ++ return true; ++ ++ if (p->fstype && streq(p->fstype, "bind")) ++ return true; ++ ++ if (mount_test_option(p->options, "rbind")) ++ return true; ++ ++ if (p->fstype && streq(p->fstype, "rbind")) ++ return true; ++ ++ return false; ++} ++ ++static bool mount_is_auto(MountParameters *p) { ++ assert(p); ++ ++ return !mount_test_option(p->options, "noauto"); ++} ++ ++static bool needs_quota(MountParameters *p) { ++ assert(p); ++ ++ if (mount_is_network(p)) ++ return false; ++ ++ if (mount_is_bind(p)) ++ return false; ++ ++ return mount_test_option(p->options, "usrquota") || ++ mount_test_option(p->options, "grpquota") || ++ mount_test_option(p->options, "quota") || ++ mount_test_option(p->options, "usrjquota") || ++ mount_test_option(p->options, "grpjquota"); ++} ++ + static void mount_init(Unit *u) { + Mount *m = MOUNT(u); + +@@ -182,7 +248,10 @@ static int mount_add_mount_links(Mount *m) { + * for the source path (if this is a bind mount) to be + * available. */ + pm = get_mount_parameters_fragment(m); +- if (pm && pm->what && path_is_absolute(pm->what)) { ++ if (pm && pm->what && ++ path_is_absolute(pm->what) && ++ !mount_is_network(pm)) { ++ + r = unit_require_mounts_for(UNIT(m), pm->what); + if (r < 0) + return r; +@@ -214,72 +283,6 @@ static int mount_add_mount_links(Mount *m) { + return 0; + } + +-static char* mount_test_option(const char *haystack, const char *needle) { +- struct mntent me = { .mnt_opts = (char*) haystack }; +- +- assert(needle); +- +- /* Like glibc's hasmntopt(), but works on a string, not a +- * struct mntent */ +- +- if (!haystack) +- return NULL; +- +- return hasmntopt(&me, needle); +-} +- +-static bool mount_is_network(MountParameters *p) { +- assert(p); +- +- if (mount_test_option(p->options, "_netdev")) +- return true; +- +- if (p->fstype && fstype_is_network(p->fstype)) +- return true; +- +- return false; +-} +- +-static bool mount_is_bind(MountParameters *p) { +- assert(p); +- +- if (mount_test_option(p->options, "bind")) +- return true; +- +- if (p->fstype && streq(p->fstype, "bind")) +- return true; +- +- if (mount_test_option(p->options, "rbind")) +- return true; +- +- if (p->fstype && streq(p->fstype, "rbind")) +- return true; +- +- return false; +-} +- +-static bool mount_is_auto(MountParameters *p) { +- assert(p); +- +- return !mount_test_option(p->options, "noauto"); +-} +- +-static bool needs_quota(MountParameters *p) { +- assert(p); +- +- if (mount_is_network(p)) +- return false; +- +- if (mount_is_bind(p)) +- return false; +- +- return mount_test_option(p->options, "usrquota") || +- mount_test_option(p->options, "grpquota") || +- mount_test_option(p->options, "quota") || +- mount_test_option(p->options, "usrjquota") || +- mount_test_option(p->options, "grpjquota"); +-} +- + static int mount_add_device_links(Mount *m) { + MountParameters *p; + bool device_wants_mount = false; +-- +1.7.9.2 + diff --git a/0026-udevadm.xml-document-resolve-names-option-for-test.patch b/0026-udevadm.xml-document-resolve-names-option-for-test.patch new file mode 100644 index 00000000..04d30323 --- /dev/null +++ b/0026-udevadm.xml-document-resolve-names-option-for-test.patch @@ -0,0 +1,34 @@ +From 14a9283eb38a93ec384c322ccbe06352c86a25f8 Mon Sep 17 00:00:00 2001 +From: Dave Reisner +Date: Sun, 13 Oct 2013 17:42:51 -0400 +Subject: [PATCH] udevadm.xml: document --resolve-names option for test + +And remove documentation of the --subsystem flag which doesn't actually +exist. +--- + man/udevadm.xml | 8 ++++++-- + 1 file changed, 6 insertions(+), 2 deletions(-) + +diff --git man/udevadm.xml man/udevadm.xml +index d0b257d..b959216 100644 +--- man/udevadm.xml ++++ man/udevadm.xml +@@ -462,9 +462,13 @@ + + + +- ++ + +- The subsystem string. ++ Specify when udevadm should resolve names of users and groups. ++ When set to early (the default) names will be resolved when the ++ rules are parsed. When set to late names will be resolved for ++ every event. When set to never names will never be resolved and ++ all devices will be owned by root. + + + +-- +1.7.9.2 + diff --git a/0030-Fix-for-SIGSEGV-in-systemd-bootchart-on-short-living.patch b/0030-Fix-for-SIGSEGV-in-systemd-bootchart-on-short-living.patch new file mode 100644 index 00000000..bd8c2b31 --- /dev/null +++ b/0030-Fix-for-SIGSEGV-in-systemd-bootchart-on-short-living.patch @@ -0,0 +1,34 @@ +From 306e6650221d88b29831bcdcef94447afb65df5c Mon Sep 17 00:00:00 2001 +From: Igor Zhbanov +Date: Tue, 15 Oct 2013 14:35:13 +0400 +Subject: [PATCH] Fix for SIGSEGV in systemd-bootchart on short-living + processes + +The function svg_ps_bars() dereferencess NULL pointer in the line + endtime = ps->last->sampledata->sampletime; +because of partially initialized ps_struct (ps->last == NULL). + +If some process terminates between scaning /proc directory in the log_sample() +function and reading additional information from /proc/PID/... files, +the files couldn't be read, the loop will be continued and partially +initialized structure returned. +--- + src/bootchart/store.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git src/bootchart/store.c src/bootchart/store.c +index f8c97c2..7f86cfe 100644 +--- src/bootchart/store.c ++++ src/bootchart/store.c +@@ -275,7 +275,7 @@ schedstat_next: + pscount++; + + /* mark our first sample */ +- ps->first = ps->sample; ++ ps->first = ps->last = ps->sample; + ps->sample->runtime = atoll(rt); + ps->sample->waittime = atoll(wt); + +-- +1.7.9.2 + diff --git a/0031-man-document-the-b-special-boot-option.patch b/0031-man-document-the-b-special-boot-option.patch new file mode 100644 index 00000000..9d45f618 --- /dev/null +++ b/0031-man-document-the-b-special-boot-option.patch @@ -0,0 +1,37 @@ +From 775657712d0f6d14b70a0fe947a95a9ecc212440 Mon Sep 17 00:00:00 2001 +From: Jan Engelhardt +Date: Tue, 15 Oct 2013 08:58:50 +0200 +Subject: [PATCH] man: document the -b special boot option + +--- + man/kernel-command-line.xml | 1 + + man/systemd.xml | 1 + + 2 files changed, 2 insertions(+) + +diff --git man/kernel-command-line.xml man/kernel-command-line.xml +index cc267a3..abe68e5 100644 +--- man/kernel-command-line.xml ++++ man/kernel-command-line.xml +@@ -123,6 +123,7 @@ + + + ++ -b + emergency + single + s +diff --git man/systemd.xml man/systemd.xml +index fe6e331..85c06d3 100644 +--- man/systemd.xml ++++ man/systemd.xml +@@ -1149,6 +1149,7 @@ + + + ++ -b + emergency + + Boot into emergency +-- +1.7.9.2 + diff --git a/0032-rules-don-t-limit-some-of-the-rules-to-the-add-actio.patch b/0032-rules-don-t-limit-some-of-the-rules-to-the-add-actio.patch new file mode 100644 index 00000000..ff651c17 --- /dev/null +++ b/0032-rules-don-t-limit-some-of-the-rules-to-the-add-actio.patch @@ -0,0 +1,81 @@ +Patch based on + + From e0d856dd48d640f3d95efe7b769edec02373cc74 Mon Sep 17 00:00:00 2001 + From: Lennart Poettering + Date: Wed, 16 Oct 2013 02:51:24 +0200 + Subject: [PATCH] rules: don't limit some of the rules to the "add" action + + Devices should show up in systemd regardless whether the user invoked + "udevadm trigger" or not. Before this change some devices might have + suddenly disappeared due issuing that command. + +and also on + + From 1a0464230c08506c3fd715ff7cc56660df3a85ca Mon Sep 17 00:00:00 2001 + From: Bastien Nocera + Date: Fri, 11 Oct 2013 07:45:32 +0000 + Subject: Add support for saving/restoring keyboard backlights + + Piggy-backing on the display backlight code, this saves and restores + keyboard backlights on supported devices. + + The detection code matches that of UPower: + http://cgit.freedesktop.org/upower/tree/src/up-kbd-backlight.c#n173 + + https://bugs.freedesktop.org/show_bug.cgi?id=70367 + + [tomegun: also work for devices named "{smc,samsung,asus}::kbd_backlight"] + +--- + rules/99-systemd.rules.in | 10 ++++++---- + src/backlight/backlight.c | 7 +++++-- + 2 files changed, 11 insertions(+), 6 deletions(-) + +--- rules/99-systemd.rules.in ++++ rules/99-systemd.rules.in 2014-02-14 14:46:48.358235397 +0000 +@@ -51,14 +51,16 @@ SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_dev + + ACTION=="add", SUBSYSTEM=="net", KERNEL!="lo", RUN+="@rootlibexecdir@/systemd-sysctl --prefix=/proc/sys/net/ipv4/conf/$name --prefix=/proc/sys/net/ipv4/neigh/$name --prefix=/proc/sys/net/ipv6/conf/$name --prefix=/proc/sys/net/ipv6/neigh/$name" + +-# Pull in backlight save/restore for all firmware backlight devices ++# Pull in backlight save/restore for all backlight devices and ++# keyboard backlights + +-ACTION=="add", SUBSYSTEM=="backlight", ATTR{type}=="firmware", TAG+="systemd", ENV{SYSTEMD_WANTS}+="systemd-backlight@$name.service" ++SUBSYSTEM=="backlight", TAG+="systemd", IMPORT{builtin}="path_id", ENV{SYSTEMD_WANTS}+="systemd-backlight@backlight:$name.service" ++SUBSYSTEM=="leds", KERNEL=="*kbd_backlight", TAG+="systemd", IMPORT{builtin}="path_id", ENV{SYSTEMD_WANTS}+="systemd-backlight@leds:$name.service" + + # Asynchronously mount file systems implemented by these modules as + # soon as they are loaded. + +-SUBSYSTEM=="module", KERNEL=="fuse", ACTION=="add", TAG+="systemd", ENV{SYSTEMD_WANTS}+="sys-fs-fuse-connections.mount" +-SUBSYSTEM=="module", KERNEL=="configfs", ACTION=="add", TAG+="systemd", ENV{SYSTEMD_WANTS}+="sys-kernel-config.mount" ++SUBSYSTEM=="module", KERNEL=="fuse", TAG+="systemd", ENV{SYSTEMD_WANTS}+="sys-fs-fuse-connections.mount" ++SUBSYSTEM=="module", KERNEL=="configfs", TAG+="systemd", ENV{SYSTEMD_WANTS}+="sys-kernel-config.mount" + + LABEL="systemd_end" +--- src/backlight/backlight.c ++++ src/backlight/backlight.c 2014-02-14 15:20:47.534298128 +0000 +@@ -56,9 +56,11 @@ int main(int argc, char *argv[]) { + + errno = 0; + device = udev_device_new_from_subsystem_sysname(udev, "backlight", argv[2]); ++ if (!device) ++ device = udev_device_new_from_subsystem_sysname(udev, "leds", argv[2]); + if (!device) { + if (errno != 0) { +- log_error("Failed to get backlight device: %m"); ++ log_error("Failed to get backlight device '%s': %m", argv[2]); + r = -errno; + } else + r = log_oom(); +@@ -66,7 +68,8 @@ int main(int argc, char *argv[]) { + goto finish; + } + +- if (!streq_ptr(udev_device_get_subsystem(device), "backlight")) { ++ if (!streq_ptr(udev_device_get_subsystem(device), "backlight") && ++ !streq_ptr(udev_device_get_subsystem(device), "leds")) { + log_error("Not a backlight device: %s", argv[2]); + r = -ENODEV; + goto finish; diff --git a/0033-tmpfiles-log-unaccessible-FUSE-mount-points-only-as-.patch b/0033-tmpfiles-log-unaccessible-FUSE-mount-points-only-as-.patch new file mode 100644 index 00000000..c14d8d70 --- /dev/null +++ b/0033-tmpfiles-log-unaccessible-FUSE-mount-points-only-as-.patch @@ -0,0 +1,37 @@ +From ca2f4176fee7dd5f5664429988e7059163fddb2d Mon Sep 17 00:00:00 2001 +From: Kay Sievers +Date: Thu, 17 Oct 2013 03:20:46 +0200 +Subject: [PATCH] tmpfiles: log unaccessible FUSE mount points only as debug + message + +--- + src/tmpfiles/tmpfiles.c | 11 +++++++---- + 1 file changed, 7 insertions(+), 4 deletions(-) + +diff --git src/tmpfiles/tmpfiles.c src/tmpfiles/tmpfiles.c +index 3cc831a..e23847b 100644 +--- src/tmpfiles/tmpfiles.c ++++ src/tmpfiles/tmpfiles.c +@@ -275,12 +275,15 @@ static int dir_cleanup( + continue; + + if (fstatat(dirfd(d), dent->d_name, &s, AT_SYMLINK_NOFOLLOW) < 0) { ++ if (errno == ENOENT) ++ continue; + +- if (errno != ENOENT) { ++ /* FUSE, NFS mounts, SELinux might return EACCES */ ++ if (errno == EACCES) ++ log_debug("stat(%s/%s) failed: %m", p, dent->d_name); ++ else + log_error("stat(%s/%s) failed: %m", p, dent->d_name); +- r = -errno; +- } +- ++ r = -errno; + continue; + } + +-- +1.7.9.2 + diff --git a/0034-systemd-python-fix-booted-and-add-two-functions-to-d.patch b/0034-systemd-python-fix-booted-and-add-two-functions-to-d.patch new file mode 100644 index 00000000..07bfe49a --- /dev/null +++ b/0034-systemd-python-fix-booted-and-add-two-functions-to-d.patch @@ -0,0 +1,26 @@ +From a23873387a6e722b711092c89a08ab3f3d19361c Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= +Date: Mon, 11 Nov 2013 19:53:59 -0500 +Subject: [PATCH] systemd-python: fix booted() and add two functions to docs + +For some reason sphinx doesn't want to show inherited C functions. +--- + src/python-systemd/_daemon.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git src/python-systemd/_daemon.c src/python-systemd/_daemon.c +index 6b84fb8..f0ab16f 100644 +--- src/python-systemd/_daemon.c ++++ src/python-systemd/_daemon.c +@@ -51,7 +51,7 @@ static PyObject* booted(PyObject *self, PyObject *args) { + assert(args == NULL); + + r = sd_booted(); +- if (set_error(r, NULL, NULL)) ++ if (set_error(r, NULL, NULL) < 0) + return NULL; + + return PyBool_FromLong(r); +-- +1.7.9.2 + diff --git a/0035-activate-mention-E-in-the-help-text.patch b/0035-activate-mention-E-in-the-help-text.patch new file mode 100644 index 00000000..92ae2ded --- /dev/null +++ b/0035-activate-mention-E-in-the-help-text.patch @@ -0,0 +1,25 @@ +From df49ccafc0d57c731a3da3014ad55d5bb9ed3e1b Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Mantas=20Mikul=C4=97nas?= +Date: Wed, 13 Nov 2013 13:36:17 +0200 +Subject: [PATCH] activate: mention -E in the help text + +--- + src/activate/activate.c | 2 ++ + 1 file changed, 2 insertions(+) + +diff --git src/activate/activate.c src/activate/activate.c +index 07e46b9..537626d 100644 +--- src/activate/activate.c ++++ src/activate/activate.c +@@ -289,6 +289,8 @@ static int help(void) { + " -l --listen=ADDR Listen for raw connections at ADDR\n" + " -a --accept Spawn separate child for each connection\n" + " -h --help Show this help and exit\n" ++ " -E --environment=NAME[=VALUE]\n" ++ " Pass an environment variable to children\n" + " --version Print version string and exit\n" + "\n" + "Note: file descriptors from sd_listen_fds() will be passed through.\n" +-- +1.7.9.2 + diff --git a/0036-activate-fix-crash-when-s-is-passed.patch b/0036-activate-fix-crash-when-s-is-passed.patch new file mode 100644 index 00000000..e1a0b2b1 --- /dev/null +++ b/0036-activate-fix-crash-when-s-is-passed.patch @@ -0,0 +1,26 @@ +From ed6556920c1a6cdfe0bb04e806bc1f54ea191545 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Mantas=20Mikul=C4=97nas?= +Date: Wed, 13 Nov 2013 13:36:16 +0200 +Subject: [PATCH] activate: fix crash when -s is passed + +getopt_long() was told to accept -s which was never implemented. +--- + src/activate/activate.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git src/activate/activate.c src/activate/activate.c +index 537626d..2639d1c 100644 +--- src/activate/activate.c ++++ src/activate/activate.c +@@ -344,7 +344,7 @@ static int parse_argv(int argc, char *argv[]) { + assert(argc >= 0); + assert(argv); + +- while ((c = getopt_long(argc, argv, "+hl:saE:", options, NULL)) >= 0) ++ while ((c = getopt_long(argc, argv, "+hl:aE:", options, NULL)) >= 0) + switch(c) { + case 'h': + help(); +-- +1.7.9.2 + diff --git a/0037-tmpfiles-adjust-excludes-for-the-new-per-service-pri.patch b/0037-tmpfiles-adjust-excludes-for-the-new-per-service-pri.patch new file mode 100644 index 00000000..2ced4b3d --- /dev/null +++ b/0037-tmpfiles-adjust-excludes-for-the-new-per-service-pri.patch @@ -0,0 +1,43 @@ +From 87267de89ddce9b1b812b720e1fc9a6cb554236e Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= +Date: Sat, 16 Nov 2013 17:29:28 -0500 +Subject: [PATCH] tmpfiles: adjust excludes for the new per-service private + dirs + +In d8c9d3a (systemd: use unit name in PrivateTmp directories) +I forgot to update the tmpfiles config. +--- + tmpfiles.d/tmp.conf | 17 +++++++++++++++++ + 1 file changed, 17 insertions(+) + +diff --git tmpfiles.d/tmp.conf tmpfiles.d/tmp.conf +index 3b534a1..f0312ef 100644 +--- tmpfiles.d/tmp.conf ++++ tmpfiles.d/tmp.conf +@@ -12,6 +12,23 @@ d /tmp 1777 root root 10d + d /var/tmp 1777 root root - + + # Exclude namespace mountpoints created with PrivateTmp=yes ++x /tmp/systemd-*.service-* ++x /var/tmp/systemd-*.service-* ++X /tmp/systemd-*.service-*/tmp ++X /var/tmp/systemd-*.service-*/tmp ++x /tmp/systemd-*.socket-* ++x /var/tmp/systemd-*.socket-* ++X /tmp/systemd-*.socket-*/tmp ++X /var/tmp/systemd-*.socket-*/tmp ++x /tmp/systemd-*.mount-* ++x /var/tmp/systemd-*.mount-* ++X /tmp/systemd-*.mount-*/tmp ++X /var/tmp/systemd-*.mount-*/tmp ++x /tmp/systemd-*.swap-* ++x /var/tmp/systemd-*.swap-* ++X /tmp/systemd-*.swap-*/tmp ++X /var/tmp/systemd-*.swap-*/tmp ++# keep those for compatibility during upgrades + x /tmp/systemd-private-* + x /var/tmp/systemd-private-* + X /tmp/systemd-private-*/tmp +-- +1.7.9.2 + diff --git a/0038-core-socket-fix-SO_REUSEPORT.patch b/0038-core-socket-fix-SO_REUSEPORT.patch new file mode 100644 index 00000000..c613c97a --- /dev/null +++ b/0038-core-socket-fix-SO_REUSEPORT.patch @@ -0,0 +1,38 @@ +From f0511bd7e3d591383485a36ddcb764abe74b1939 Mon Sep 17 00:00:00 2001 +From: Shawn Landden +Date: Sat, 16 Nov 2013 13:18:13 -0800 +Subject: [PATCH] core/socket: fix SO_REUSEPORT + +--- + src/core/load-fragment-gperf.gperf.m4 | 1 + + src/core/socket.c | 2 +- + 2 files changed, 2 insertions(+), 1 deletion(-) + +diff --git src/core/load-fragment-gperf.gperf.m4 src/core/load-fragment-gperf.gperf.m4 +index e3025d2..b64fdc9 100644 +--- src/core/load-fragment-gperf.gperf.m4 ++++ src/core/load-fragment-gperf.gperf.m4 +@@ -210,6 +210,7 @@ Socket.Broadcast, config_parse_bool, 0, + Socket.PassCredentials, config_parse_bool, 0, offsetof(Socket, pass_cred) + Socket.PassSecurity, config_parse_bool, 0, offsetof(Socket, pass_sec) + Socket.TCPCongestion, config_parse_string, 0, offsetof(Socket, tcp_congestion) ++Socket.ReusePort, config_parse_bool, 0, offsetof(Socket, reuseport) + Socket.MessageQueueMaxMessages, config_parse_long, 0, offsetof(Socket, mq_maxmsg) + Socket.MessageQueueMessageSize, config_parse_long, 0, offsetof(Socket, mq_msgsize) + Socket.Service, config_parse_socket_service, 0, 0 +diff --git src/core/socket.c src/core/socket.c +index f505e4f..751f20b 100644 +--- src/core/socket.c ++++ src/core/socket.c +@@ -771,7 +771,7 @@ static void socket_apply_socket_options(Socket *s, int fd) { + + if (s->reuseport) { + int b = s->reuseport; +- if (setsockopt(fd, SOL_SOCKET, SO_REUSEPORT, &b, sizeof(b))) ++ if (setsockopt(fd, SOL_SOCKET, SO_REUSEPORT, &b, sizeof(b)) < 0) + log_warning_unit(UNIT(s)->id, "SO_REUSEPORT failed: %m"); + } + +-- +1.7.9.2 + diff --git a/0039-journal-when-appending-to-journal-file-allocate-larg.patch b/0039-journal-when-appending-to-journal-file-allocate-larg.patch new file mode 100644 index 00000000..9e93024e --- /dev/null +++ b/0039-journal-when-appending-to-journal-file-allocate-larg.patch @@ -0,0 +1,80 @@ +From a676e66535e12458ea6d366a653f8dd60f982504 Mon Sep 17 00:00:00 2001 +From: Lennart Poettering +Date: Tue, 26 Nov 2013 18:39:42 +0100 +Subject: [PATCH] journal: when appending to journal file, allocate larger + blocks at once + +--- + src/journal/journal-file.c | 26 +++++++++++++++++--------- + 1 file changed, 17 insertions(+), 9 deletions(-) + +diff --git src/journal/journal-file.c src/journal/journal-file.c +index bc72fca..d606ada 100644 +--- src/journal/journal-file.c ++++ src/journal/journal-file.c +@@ -68,6 +68,9 @@ + /* How many entries to keep in the entry array chain cache at max */ + #define CHAIN_CACHE_MAX 20 + ++/* How much to increase the journal file size at once each time we allocate something new. */ ++#define FILE_SIZE_INCREASE (8ULL*1024ULL*1024ULL) /* 8MB */ ++ + int journal_file_set_online(JournalFile *f) { + assert(f); + +@@ -218,8 +221,7 @@ static int journal_file_refresh_header(JournalFile *f) { + journal_file_set_online(f); + + /* Sync the online state to disk */ +- msync(f->header, PAGE_ALIGN(sizeof(Header)), MS_SYNC); +- fdatasync(f->fd); ++ fsync(f->fd); + + return 0; + } +@@ -313,7 +315,7 @@ static int journal_file_verify_header(JournalFile *f) { + } + + static int journal_file_allocate(JournalFile *f, uint64_t offset, uint64_t size) { +- uint64_t old_size, new_size; ++ uint64_t old_size, new_size, file_size; + int r; + + assert(f); +@@ -333,12 +335,10 @@ static int journal_file_allocate(JournalFile *f, uint64_t offset, uint64_t size) + if (new_size <= old_size) + return 0; + +- if (f->metrics.max_size > 0 && +- new_size > f->metrics.max_size) ++ if (f->metrics.max_size > 0 && new_size > f->metrics.max_size) + return -E2BIG; + +- if (new_size > f->metrics.min_size && +- f->metrics.keep_free > 0) { ++ if (new_size > f->metrics.min_size && f->metrics.keep_free > 0) { + struct statvfs svfs; + + if (fstatvfs(f->fd, &svfs) >= 0) { +@@ -363,8 +363,16 @@ static int journal_file_allocate(JournalFile *f, uint64_t offset, uint64_t size) + if (r != 0) + return -r; + +- if (fstat(f->fd, &f->last_stat) < 0) +- return -errno; ++ /* Increase the file size a bit further than this, so that we ++ * we can create larger memory maps to cache */ ++ file_size = ((new_size+FILE_SIZE_INCREASE-1) / FILE_SIZE_INCREASE) * FILE_SIZE_INCREASE; ++ if (file_size > (uint64_t) f->last_stat.st_size) { ++ if (file_size > new_size) ++ ftruncate(f->fd, file_size); ++ ++ if (fstat(f->fd, &f->last_stat) < 0) ++ return -errno; ++ } + + f->header->arena_size = htole64(new_size - le64toh(f->header->header_size)); + +-- +1.7.9.2 + diff --git a/0040-journal-optimize-bisection-logic-a-bit-by-caching-th.patch b/0040-journal-optimize-bisection-logic-a-bit-by-caching-th.patch new file mode 100644 index 00000000..74368958 --- /dev/null +++ b/0040-journal-optimize-bisection-logic-a-bit-by-caching-th.patch @@ -0,0 +1,247 @@ +From f268980d2cee694fa4118a71402a47c316af0425 Mon Sep 17 00:00:00 2001 +From: Lennart Poettering +Date: Tue, 26 Nov 2013 20:37:53 +0100 +Subject: [PATCH] journal: optimize bisection logic a bit by caching the last + position + +This way we can do a quick restart limiting a bit how wildly we need to +jump around during the bisection process. +--- + src/journal/journal-file.c | 134 ++++++++++++++++++++++++++++++++------------ + 1 file changed, 99 insertions(+), 35 deletions(-) + +diff --git src/journal/journal-file.c src/journal/journal-file.c +index 481c242..27cd16f 100644 +--- src/journal/journal-file.c ++++ src/journal/journal-file.c +@@ -1366,6 +1366,7 @@ typedef struct ChainCacheItem { + uint64_t array; /* the cached array */ + uint64_t begin; /* the first item in the cached array */ + uint64_t total; /* the total number of items in all arrays before this one in the chain */ ++ uint64_t last_index; /* the last index we looked at, to optimize locality when bisecting */ + } ChainCacheItem; + + static void chain_cache_put( +@@ -1374,7 +1375,8 @@ static void chain_cache_put( + uint64_t first, + uint64_t array, + uint64_t begin, +- uint64_t total) { ++ uint64_t total, ++ uint64_t last_index) { + + if (!ci) { + /* If the chain item to cache for this chain is the +@@ -1402,12 +1404,14 @@ static void chain_cache_put( + ci->array = array; + ci->begin = begin; + ci->total = total; ++ ci->last_index = last_index; + } + +-static int generic_array_get(JournalFile *f, +- uint64_t first, +- uint64_t i, +- Object **ret, uint64_t *offset) { ++static int generic_array_get( ++ JournalFile *f, ++ uint64_t first, ++ uint64_t i, ++ Object **ret, uint64_t *offset) { + + Object *o; + uint64_t p = 0, a, t = 0; +@@ -1448,7 +1452,7 @@ static int generic_array_get(JournalFile *f, + + found: + /* Let's cache this item for the next invocation */ +- chain_cache_put(f->chain_cache, ci, first, a, o->entry_array.items[0], t); ++ chain_cache_put(f->chain_cache, ci, first, a, o->entry_array.items[0], t, i); + + r = journal_file_move_to_object(f, OBJECT_ENTRY, p, &o); + if (r < 0) +@@ -1463,11 +1467,12 @@ found: + return 1; + } + +-static int generic_array_get_plus_one(JournalFile *f, +- uint64_t extra, +- uint64_t first, +- uint64_t i, +- Object **ret, uint64_t *offset) { ++static int generic_array_get_plus_one( ++ JournalFile *f, ++ uint64_t extra, ++ uint64_t first, ++ uint64_t i, ++ Object **ret, uint64_t *offset) { + + Object *o; + +@@ -1498,17 +1503,18 @@ enum { + TEST_RIGHT + }; + +-static int generic_array_bisect(JournalFile *f, +- uint64_t first, +- uint64_t n, +- uint64_t needle, +- int (*test_object)(JournalFile *f, uint64_t p, uint64_t needle), +- direction_t direction, +- Object **ret, +- uint64_t *offset, +- uint64_t *idx) { +- +- uint64_t a, p, t = 0, i = 0, last_p = 0; ++static int generic_array_bisect( ++ JournalFile *f, ++ uint64_t first, ++ uint64_t n, ++ uint64_t needle, ++ int (*test_object)(JournalFile *f, uint64_t p, uint64_t needle), ++ direction_t direction, ++ Object **ret, ++ uint64_t *offset, ++ uint64_t *idx) { ++ ++ uint64_t a, p, t = 0, i = 0, last_p = 0, last_index = (uint64_t) -1; + bool subtract_one = false; + Object *o, *array = NULL; + int r; +@@ -1533,7 +1539,7 @@ static int generic_array_bisect(JournalFile *f, + return r; + + if (r == TEST_LEFT) { +- /* OK, what we are looking for is right of th ++ /* OK, what we are looking for is right of the + * begin of this EntryArray, so let's jump + * straight to previously cached array in the + * chain */ +@@ -1541,6 +1547,7 @@ static int generic_array_bisect(JournalFile *f, + a = ci->array; + n -= ci->total; + t = ci->total; ++ last_index = ci->last_index; + } + } + +@@ -1571,6 +1578,60 @@ static int generic_array_bisect(JournalFile *f, + if (r == TEST_RIGHT) { + left = 0; + right -= 1; ++ ++ if (last_index != (uint64_t) -1) { ++ assert(last_index <= right); ++ ++ /* If we cached the last index we ++ * looked at, let's try to not to jump ++ * too wildly around and see if we can ++ * limit the range to look at early to ++ * the immediate neighbors of the last ++ * index we looked at. */ ++ ++ if (last_index > 0) { ++ uint64_t x = last_index - 1; ++ ++ p = le64toh(array->entry_array.items[x]); ++ if (p <= 0) ++ return -EBADMSG; ++ ++ r = test_object(f, p, needle); ++ if (r < 0) ++ return r; ++ ++ if (r == TEST_FOUND) ++ r = direction == DIRECTION_DOWN ? TEST_RIGHT : TEST_LEFT; ++ ++ if (r == TEST_RIGHT) ++ right = x; ++ else ++ left = x + 1; ++ } ++ ++ if (last_index < right) { ++ uint64_t y = last_index + 1; ++ ++ p = le64toh(array->entry_array.items[y]); ++ if (p <= 0) ++ return -EBADMSG; ++ ++ r = test_object(f, p, needle); ++ if (r < 0) ++ return r; ++ ++ if (r == TEST_FOUND) ++ r = direction == DIRECTION_DOWN ? TEST_RIGHT : TEST_LEFT; ++ ++ if (r == TEST_RIGHT) ++ right = y; ++ else ++ left = y + 1; ++ } ++ ++ last_index = (uint64_t) -1; ++ } ++ + for (;;) { + if (left == right) { + if (direction == DIRECTION_UP) +@@ -1581,8 +1642,8 @@ static int generic_array_bisect(JournalFile *f, + } + + assert(left < right); +- + i = (left + right) / 2; ++ + p = le64toh(array->entry_array.items[i]); + if (p <= 0) + return -EBADMSG; +@@ -1615,6 +1676,7 @@ static int generic_array_bisect(JournalFile *f, + + n -= k; + t += k; ++ last_index = (uint64_t) -1; + a = le64toh(array->entry_array.next_entry_array_offset); + } + +@@ -1625,7 +1687,7 @@ found: + return 0; + + /* Let's cache this item for the next invocation */ +- chain_cache_put(f->chain_cache, ci, first, a, array->entry_array.items[0], t); ++ chain_cache_put(f->chain_cache, ci, first, a, array->entry_array.items[0], t, i + (subtract_one ? -1 : 0)); + + if (subtract_one && i == 0) + p = last_p; +@@ -1650,16 +1712,18 @@ found: + return 1; + } + +-static int generic_array_bisect_plus_one(JournalFile *f, +- uint64_t extra, +- uint64_t first, +- uint64_t n, +- uint64_t needle, +- int (*test_object)(JournalFile *f, uint64_t p, uint64_t needle), +- direction_t direction, +- Object **ret, +- uint64_t *offset, +- uint64_t *idx) { ++ ++static int generic_array_bisect_plus_one( ++ JournalFile *f, ++ uint64_t extra, ++ uint64_t first, ++ uint64_t n, ++ uint64_t needle, ++ int (*test_object)(JournalFile *f, uint64_t p, uint64_t needle), ++ direction_t direction, ++ Object **ret, ++ uint64_t *offset, ++ uint64_t *idx) { + + int r; + bool step_back = false; +-- +1.7.9.2 + diff --git a/0041-journal-fix-iteration-when-we-go-backwards-from-the-.patch b/0041-journal-fix-iteration-when-we-go-backwards-from-the-.patch new file mode 100644 index 00000000..24c02269 --- /dev/null +++ b/0041-journal-fix-iteration-when-we-go-backwards-from-the-.patch @@ -0,0 +1,26 @@ +From e5462cd80e5328a769137c261c93931ea0c27bab Mon Sep 17 00:00:00 2001 +From: Lennart Poettering +Date: Wed, 27 Nov 2013 00:58:39 +0100 +Subject: [PATCH] journal: fix iteration when we go backwards from the + beginning of an array chain element + +--- + src/journal/journal-file.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git src/journal/journal-file.c src/journal/journal-file.c +index 27cd16f..409be76 100644 +--- src/journal/journal-file.c ++++ src/journal/journal-file.c +@@ -1687,7 +1687,7 @@ found: + return 0; + + /* Let's cache this item for the next invocation */ +- chain_cache_put(f->chain_cache, ci, first, a, array->entry_array.items[0], t, i + (subtract_one ? -1 : 0)); ++ chain_cache_put(f->chain_cache, ci, first, a, array->entry_array.items[0], t, subtract_one ? (i > 0 ? i-1 : (uint64_t) -1) : i); + + if (subtract_one && i == 0) + p = last_p; +-- +1.7.9.2 + diff --git a/0042-journal-allow-journal_file_copy_entry-to-work-on-non.patch b/0042-journal-allow-journal_file_copy_entry-to-work-on-non.patch new file mode 100644 index 00000000..78946e79 --- /dev/null +++ b/0042-journal-allow-journal_file_copy_entry-to-work-on-non.patch @@ -0,0 +1,28 @@ +From 248c78c79c5cca9b981800d816a77591e504066a Mon Sep 17 00:00:00 2001 +From: Lennart Poettering +Date: Wed, 27 Nov 2013 00:59:07 +0100 +Subject: [PATCH] journal: allow journal_file_copy_entry() to work on + non-local files + +--- + src/journal/journal-file.c | 4 ---- + 1 file changed, 4 deletions(-) + +diff --git src/journal/journal-file.c src/journal/journal-file.c +index 409be76..14eae8f 100644 +--- src/journal/journal-file.c ++++ src/journal/journal-file.c +@@ -2732,10 +2732,6 @@ int journal_file_copy_entry(JournalFile *from, JournalFile *to, Object *o, uint6 + ts.monotonic = le64toh(o->entry.monotonic); + ts.realtime = le64toh(o->entry.realtime); + +- if (to->tail_entry_monotonic_valid && +- ts.monotonic < le64toh(to->header->tail_entry_monotonic)) +- return -EINVAL; +- + n = journal_file_entry_n_items(o); + items = alloca(sizeof(EntryItem) * n); + +-- +1.7.9.2 + diff --git a/0043-journal-simplify-pre-allocation-logic.patch b/0043-journal-simplify-pre-allocation-logic.patch new file mode 100644 index 00000000..16511ec0 --- /dev/null +++ b/0043-journal-simplify-pre-allocation-logic.patch @@ -0,0 +1,61 @@ +From eda4b58b50509dc8ad0428a46e20f6c5cf516d58 Mon Sep 17 00:00:00 2001 +From: Lennart Poettering +Date: Wed, 27 Nov 2013 01:44:52 +0100 +Subject: [PATCH] journal: simplify pre-allocation logic + +let's just do a single fallocate() as far as possible, and don't +distuingish between allocated space and file size. + +This way we can save a syscall for each append, which makes quite some +benefits. +--- + src/journal/journal-file.c | 19 ++++++++----------- + 1 file changed, 8 insertions(+), 11 deletions(-) + +diff --git src/journal/journal-file.c src/journal/journal-file.c +index 14eae8f..4009b29 100644 +--- src/journal/journal-file.c ++++ src/journal/journal-file.c +@@ -315,7 +315,7 @@ static int journal_file_verify_header(JournalFile *f) { + } + + static int journal_file_allocate(JournalFile *f, uint64_t offset, uint64_t size) { +- uint64_t old_size, new_size, file_size; ++ uint64_t old_size, new_size; + int r; + + assert(f); +@@ -356,6 +356,11 @@ static int journal_file_allocate(JournalFile *f, uint64_t offset, uint64_t size) + } + } + ++ /* Increase by larger blocks at once */ ++ new_size = ((new_size+FILE_SIZE_INCREASE-1) / FILE_SIZE_INCREASE) * FILE_SIZE_INCREASE; ++ if (f->metrics.max_size > 0 && new_size > f->metrics.max_size) ++ new_size = f->metrics.max_size; ++ + /* Note that the glibc fallocate() fallback is very + inefficient, hence we try to minimize the allocation area + as we can. */ +@@ -363,16 +368,8 @@ static int journal_file_allocate(JournalFile *f, uint64_t offset, uint64_t size) + if (r != 0) + return -r; + +- /* Increase the file size a bit further than this, so that we +- * we can create larger memory maps to cache */ +- file_size = ((new_size+FILE_SIZE_INCREASE-1) / FILE_SIZE_INCREASE) * FILE_SIZE_INCREASE; +- if (file_size > (uint64_t) f->last_stat.st_size) { +- if (file_size > new_size) +- ftruncate(f->fd, file_size); +- +- if (fstat(f->fd, &f->last_stat) < 0) +- return -errno; +- } ++ if (fstat(f->fd, &f->last_stat) < 0) ++ return -errno; + + f->header->arena_size = htole64(new_size - le64toh(f->header->header_size)); + +-- +1.7.9.2 + diff --git a/0044-journald-mention-how-long-we-needed-to-flush-to-var-.patch b/0044-journald-mention-how-long-we-needed-to-flush-to-var-.patch new file mode 100644 index 00000000..90e71fb6 --- /dev/null +++ b/0044-journald-mention-how-long-we-needed-to-flush-to-var-.patch @@ -0,0 +1,58 @@ +From fbb634117d0b0ebd5b105e65b141e75ae9af7f8f Mon Sep 17 00:00:00 2001 +From: Lennart Poettering +Date: Wed, 27 Nov 2013 01:54:25 +0100 +Subject: [PATCH] journald: mention how long we needed to flush to /var in the + logs + +--- + src/journal/journald-server.c | 11 ++++++++++- + 1 file changed, 10 insertions(+), 1 deletion(-) + +diff --git src/journal/journald-server.c src/journal/journald-server.c +index ce419d4..01e75b6 100644 +--- src/journal/journald-server.c ++++ src/journal/journald-server.c +@@ -970,9 +970,12 @@ static int system_journal_open(Server *s) { + } + + int server_flush_to_var(Server *s) { +- int r; + sd_id128_t machine; + sd_journal *j = NULL; ++ char ts[FORMAT_TIMESPAN_MAX]; ++ usec_t start; ++ unsigned n = 0; ++ int r; + + assert(s); + +@@ -990,6 +993,8 @@ int server_flush_to_var(Server *s) { + + log_debug("Flushing to /var..."); + ++ start = now(CLOCK_MONOTONIC); ++ + r = sd_id128_get_machine(&machine); + if (r < 0) + return r; +@@ -1009,6 +1014,8 @@ int server_flush_to_var(Server *s) { + f = j->current_file; + assert(f && f->current_offset > 0); + ++ n++; ++ + r = journal_file_move_to_object(f, OBJECT_ENTRY, f->current_offset, &o); + if (r < 0) { + log_error("Can't read entry: %s", strerror(-r)); +@@ -1052,6 +1059,8 @@ finish: + + sd_journal_close(j); + ++ server_driver_message(s, SD_ID128_NULL, "Time spent on flushing to /var is %s for %u entries.", format_timespan(ts, sizeof(ts), now(CLOCK_MONOTONIC) - start, 0), n); ++ + return r; + } + +-- +1.7.9.2 + diff --git a/0046-util.c-check-if-return-value-from-ttyname_r-is-0-ins.patch b/0046-util.c-check-if-return-value-from-ttyname_r-is-0-ins.patch new file mode 100644 index 00000000..1a423207 --- /dev/null +++ b/0046-util.c-check-if-return-value-from-ttyname_r-is-0-ins.patch @@ -0,0 +1,31 @@ +From 27373e442747010dfc195296c0705f67e905a611 Mon Sep 17 00:00:00 2001 +From: Thomas Hindoe Paaboel Andersen +Date: Sat, 30 Nov 2013 23:45:31 +0100 +Subject: [PATCH] util.c: check if return value from ttyname_r is > 0 instead + of != 0 + +We must return a negative error code from getttyname_malloc but +that would not be the case if ttyname_r returned a negative value. + +ttyname_r should only return EBADF, ENOTTY, or ERANGE so it should +be safe to change. +--- + src/shared/util.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git src/shared/util.c src/shared/util.c +index 38134ae..206fc80 100644 +--- src/shared/util.c ++++ src/shared/util.c +@@ -2501,7 +2501,7 @@ int getttyname_malloc(int fd, char **r) { + assert(r); + + k = ttyname_r(fd, path, sizeof(path)); +- if (k != 0) ++ if (k > 0) + return -k; + + char_array_0(path); +-- +1.7.9.2 + diff --git a/0047-docs-remove-unneeded-the-s-in-gudev-docs.patch b/0047-docs-remove-unneeded-the-s-in-gudev-docs.patch new file mode 100644 index 00000000..e94380d5 --- /dev/null +++ b/0047-docs-remove-unneeded-the-s-in-gudev-docs.patch @@ -0,0 +1,41 @@ +From 572ce4f7832ffa7a91a582c4098f18cec5662666 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= +Date: Sat, 30 Nov 2013 20:27:54 -0500 +Subject: [PATCH] docs: remove unneeded the's in gudev docs + +https://bugs.freedesktop.org/show_bug.cgi?id=72164 +--- + src/libudev/libudev-device.c | 10 ++++------ + 1 file changed, 4 insertions(+), 6 deletions(-) + +diff --git src/libudev/libudev-device.c src/libudev/libudev-device.c +index 059a590..9558ac3 100644 +--- src/libudev/libudev-device.c ++++ src/libudev/libudev-device.c +@@ -982,9 +982,8 @@ static struct udev_device *device_new_from_parent(struct udev_device *udev_devic + * Find the next parent device, and fill in information from the sys + * device and the udev database entry. + * +- * The returned the device is not referenced. It is attached to the +- * child device, and will be cleaned up when the child device +- * is cleaned up. ++ * Returned device is not referenced. It is attached to the child ++ * device, and will be cleaned up when the child device is cleaned up. + * + * It is not necessarily just the upper level directory, empty or not + * recognized sys directories are ignored. +@@ -1018,9 +1017,8 @@ _public_ struct udev_device *udev_device_get_parent(struct udev_device *udev_dev + * If devtype is #NULL, only subsystem is checked, and any devtype will + * match. + * +- * The returned the device is not referenced. It is attached to the +- * child device, and will be cleaned up when the child device +- * is cleaned up. ++ * Returned device is not referenced. It is attached to the child ++ * device, and will be cleaned up when the child device is cleaned up. + * + * It can be called as many times as needed, without caring about + * references. +-- +1.7.9.2 + diff --git a/0048-man-explicitly-say-when-multiple-units-can-be-specif.patch b/0048-man-explicitly-say-when-multiple-units-can-be-specif.patch new file mode 100644 index 00000000..ec388b86 --- /dev/null +++ b/0048-man-explicitly-say-when-multiple-units-can-be-specif.patch @@ -0,0 +1,238 @@ +From 6a44e50f4c0938b0ba355fff21add6c067cd9837 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= +Date: Sat, 30 Nov 2013 21:23:01 -0500 +Subject: [PATCH] man: explicitly say when multiple units can be specified + +itistoday> how do you specify multiple dependencies in a unit file? i've been + googling and can't find this basic thing :-\ +itistoday> do you use a comma, or use multiple After= statements? +--- + man/systemd.unit.xml | 128 +++++++++++++++++++++++++++----------------------- + 1 file changed, 70 insertions(+), 58 deletions(-) + +diff --git man/systemd.unit.xml man/systemd.unit.xml +index 4dc427c..35dd4c7 100644 +--- man/systemd.unit.xml ++++ man/systemd.unit.xml +@@ -410,10 +410,12 @@ + of the other units gets deactivated or + its activation fails, this unit will + be deactivated. This option may be +- specified more than once, in which +- case requirement dependencies for all +- listed names are created. Note that +- requirement dependencies do not ++ specified more than once or multiple ++ space-separated units may be specified ++ in one option in which case ++ requirement dependencies for all ++ listed names will be created. Note ++ that requirement dependencies do not + influence the order in which services + are started or stopped. This has to be + configured independently with the +@@ -476,22 +478,23 @@ + RequisiteOverridable= + + Similar to +- Requires= +- and RequiresOverridable=, respectively. However, +- if a unit listed here is not started +- already it will not be started and the +- transaction fails +- immediately. ++ Requires= and ++ RequiresOverridable=, ++ respectively. However, if the units ++ listed here are not started already ++ they will not be started and the ++ transaction will fail immediately. ++ + + + + Wants= + + A weaker version of +- Requires=. A unit ++ Requires=. Units + listed in this option will be started + if the configuring unit is. However, +- if the listed unit fails to start up ++ if the listed units fail to start + or cannot be added to the transaction + this has no impact on the validity of + the transaction as a whole. This is +@@ -501,8 +504,8 @@ + + Note that dependencies of this + type may also be configured outside of +- the unit configuration file by +- adding a symlink to a ++ the unit configuration file by adding ++ symlinks to a + .wants/ directory + accompanying the unit file. For + details see above. +@@ -534,7 +537,7 @@ + of units. When systemd stops or restarts + the units listed here, the action is + propagated to this unit. +- Note that this is a one way dependency - ++ Note that this is a one way dependency — + changes to this unit do not affect the + listed units. + +@@ -543,12 +546,12 @@ + + Conflicts= + +- Configures negative ++ A space-separated list ++ of unit names. Configures negative + requirement dependencies. If a unit +- has a +- Conflicts= setting +- on another unit, starting the former +- will stop the latter and vice ++ has a Conflicts= ++ setting on another unit, starting the ++ former will stop the latter and vice + versa. Note that this setting is + independent of and orthogonal to the + After= and +@@ -575,7 +578,8 @@ + Before= + After= + +- Configures ordering ++ A space-separated list ++ of unit names. Configures ordering + dependencies between units. If a unit + foo.service + contains a setting +@@ -624,18 +628,18 @@ + type After= or + Before=. If two + units have no ordering dependencies +- between them, they are shut down +- or started up simultaneously, and +- no ordering takes ++ between them, they are shut down or ++ started up simultaneously, and no ++ ordering takes + place. + + + + OnFailure= + +- Lists one or more +- units that are activated when this +- unit enters the ++ A space-separated list ++ of one or more units that are ++ activated when this unit enters the + failed + state. + +@@ -644,16 +648,17 @@ + PropagatesReloadTo= + ReloadPropagatedFrom= + +- Lists one or more +- units where reload requests on the +- unit will be propagated to/on the +- other unit will be propagated +- from. Issuing a reload request on a +- unit will automatically also enqueue a +- reload request on all units that the +- reload request shall be propagated to +- via these two +- settings. ++ A space-separated list ++ of one or more units where reload ++ requests on this unit will be ++ propagated to, or reload requests on ++ the other unit will be propagated to ++ this unit, respectively. Issuing a ++ reload request on a unit will ++ automatically also enqueue a reload ++ request on all units that the reload ++ request shall be propagated to via ++ these two settings. + + + +@@ -1130,32 +1135,34 @@ + + Alias= + +- Additional names this +- unit shall be installed under. The +- names listed here must have the same +- suffix (i.e. type) as the unit file +- name. This option may be specified +- more than once, in which case all +- listed names are used. At installation +- time, +- systemctl enable +- will create symlinks from these names +- to the unit filename. ++ A space-seperated list ++ of additional names this unit shall be ++ installed under. The names listed here ++ must have the same suffix (i.e. type) ++ as the unit file name. This option may ++ be specified more than once, in which ++ case all listed names are used. At ++ installation time, systemctl ++ enable will create symlinks ++ from these names to the unit ++ filename. + + + + WantedBy= + RequiredBy= + +- A symbolic link is +- created in the +- .wants/ or +- .requires/ directory +- of the listed unit when this unit is +- activated by systemctl +- enable. This has the effect +- that a dependency of type +- Wants= or ++ This option may be ++ used more than once, or a ++ space-separated list of unit names may ++ be given. A symbolic link is created ++ in the .wants/ or ++ .requires/ ++ directory of each of the listed units ++ when this unit is installed by ++ systemctl enable. ++ This has the effect that a dependency ++ of type Wants= or + Requires= is added + from the listed unit to the current + unit. The primary result is that the +@@ -1201,7 +1208,12 @@ + and systemctl + disable will automatically + install/uninstall units listed in this option as +- well. ++ well. ++ ++ This option may be used more ++ than once, or a space-separated list ++ of unit names may be ++ given. + + + +-- +1.7.9.2 + diff --git a/0049-systemd-treat-reload-failure-as-failure.patch b/0049-systemd-treat-reload-failure-as-failure.patch new file mode 100644 index 00000000..9dde25b5 --- /dev/null +++ b/0049-systemd-treat-reload-failure-as-failure.patch @@ -0,0 +1,93 @@ +From 6a371e23ee0e47827fb4e3aa469ed84da2599304 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= +Date: Mon, 2 Dec 2013 21:52:51 -0500 +Subject: [PATCH] systemd: treat reload failure as failure + +systemctl reload "suceeded" on stopped units, but it is documented +to fail in this case. + +https://bugzilla.redhat.com/show_bug.cgi?id=1036845 +--- + src/core/job.c | 11 +++++++---- + src/core/job.h | 3 ++- + src/core/unit.c | 5 ++++- + 3 files changed, 13 insertions(+), 6 deletions(-) + +diff --git src/core/job.c src/core/job.c +index 557917a..ce97263 100644 +--- src/core/job.c ++++ src/core/job.c +@@ -508,7 +508,7 @@ int job_run_and_invalidate(Job *j) { + else if (t == UNIT_ACTIVATING) + r = -EAGAIN; + else +- r = -ENOEXEC; ++ r = -EBADR; + break; + } + +@@ -537,8 +537,10 @@ int job_run_and_invalidate(Job *j) { + if (j) { + if (r == -EALREADY) + r = job_finish_and_invalidate(j, JOB_DONE, true); +- else if (r == -ENOEXEC) ++ else if (r == -EBADR) + r = job_finish_and_invalidate(j, JOB_SKIPPED, true); ++ else if (r == -ENOEXEC) ++ r = job_finish_and_invalidate(j, JOB_INVALID, true); + else if (r == -EAGAIN) { + j->state = JOB_WAITING; + m->n_running_jobs--; +@@ -764,7 +766,7 @@ int job_finish_and_invalidate(Job *j, JobResult result, bool recursive) { + goto finish; + } + +- if (result == JOB_FAILED) ++ if (result == JOB_FAILED || result == JOB_INVALID) + j->manager->n_failed_jobs ++; + + job_uninstall(j); +@@ -1119,7 +1121,8 @@ static const char* const job_result_table[_JOB_RESULT_MAX] = { + [JOB_TIMEOUT] = "timeout", + [JOB_FAILED] = "failed", + [JOB_DEPENDENCY] = "dependency", +- [JOB_SKIPPED] = "skipped" ++ [JOB_SKIPPED] = "skipped", ++ [JOB_INVALID] = "invalid", + }; + + DEFINE_STRING_TABLE_LOOKUP(job_result, JobResult); +diff --git src/core/job.h src/core/job.h +index c23a380..0500e12 100644 +--- src/core/job.h ++++ src/core/job.h +@@ -97,7 +97,8 @@ enum JobResult { + JOB_TIMEOUT, /* JobTimeout elapsed */ + JOB_FAILED, /* Job failed */ + JOB_DEPENDENCY, /* A required dependency job did not result in JOB_DONE */ +- JOB_SKIPPED, /* JOB_RELOAD of inactive unit; negative result of JOB_VERIFY_ACTIVE */ ++ JOB_SKIPPED, /* Negative result of JOB_VERIFY_ACTIVE */ ++ JOB_INVALID, /* JOB_RELOAD of inactive unit */ + _JOB_RESULT_MAX, + _JOB_RESULT_INVALID = -1 + }; +diff --git src/core/unit.c src/core/unit.c +index 50db86c..81d2162 100644 +--- src/core/unit.c ++++ src/core/unit.c +@@ -1239,8 +1239,11 @@ int unit_reload(Unit *u) { + if (state == UNIT_RELOADING) + return -EALREADY; + +- if (state != UNIT_ACTIVE) ++ if (state != UNIT_ACTIVE) { ++ log_warning_unit(u->id, "Unit %s cannot be reloaded because it is inactive.", ++ u->id); + return -ENOEXEC; ++ } + + if ((following = unit_following(u))) { + log_debug_unit(u->id, "Redirecting reload request from %s to %s.", +-- +1.7.9.2 + diff --git a/0145-logind-use-correct-who-enum-values-with-KillUnit.patch b/0145-logind-use-correct-who-enum-values-with-KillUnit.patch new file mode 100644 index 00000000..f8fff2d2 --- /dev/null +++ b/0145-logind-use-correct-who-enum-values-with-KillUnit.patch @@ -0,0 +1,31 @@ +From 524147c1ef991edf4432aac51c880b363b4402df Mon Sep 17 00:00:00 2001 +From: Marius Vollmer +Date: Thu, 31 Oct 2013 15:55:07 +0200 +Subject: [PATCH] logind: use correct "who" enum values with KillUnit. + +--- + src/login/logind-dbus.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/src/login/logind-dbus.c b/src/login/logind-dbus.c +index bb85c7d..583d62e 100644 +--- a/src/login/logind-dbus.c ++++ b/src/login/logind-dbus.c +@@ -2799,7 +2799,7 @@ int manager_kill_unit(Manager *manager, const char *unit, KillWho who, int signo + assert(manager); + assert(unit); + +- w = who == KILL_LEADER ? "process" : "cgroup"; ++ w = who == KILL_LEADER ? "control" : "all"; + assert_cc(sizeof(signo) == sizeof(int32_t)); + + r = bus_method_call_with_reply( +@@ -2815,7 +2815,7 @@ int manager_kill_unit(Manager *manager, const char *unit, KillWho who, int signo + DBUS_TYPE_INT32, &signo, + DBUS_TYPE_INVALID); + if (r < 0) { +- log_error("Failed to stop unit %s: %s", unit, bus_error(error, r)); ++ log_error("Failed to kill unit %s: %s", unit, bus_error(error, r)); + return r; + } + diff --git a/macros.systemd b/macros.systemd deleted file mode 100644 index 1a003957..00000000 --- a/macros.systemd +++ /dev/null @@ -1,129 +0,0 @@ -# -*- Mode: makefile; indent-tabs-mode: t -*- */ -# RPM macros for packages installing systemd unit files -# -### -# -# When a package install systemd unit files, it should use the following macros: -# -# add %systemd_requires in the specfile -# -# %pre -# %service_add_pre demo.service demo1.service -# -# %post -# %service_add_post demo.service demo1.service -# -# %preun -# %service_del_preun demo.service -# -# %postun -# %service_del_postun demo.service -# -### - -# This is for systemctl -%systemd_requires \ -Requires(pre): systemd \ -Requires(post): systemd \ -Requires(preun): systemd \ -Requires(postun): systemd \ - -%_unitdir /usr/lib/systemd/system -%_presetdir /usr/lib/systemd/system-preset -%_udevhwdbdir /usr/lib/udev/hwdb.d -%_udevrulesdir /usr/lib/udev/rules.d -%_journalcatalogdir /usr/lib/systemd/catalog -%_tmpfilesdir /usr/lib/tmpfiles.d -%_sysctldir /usr/lib/sysctl.d - -%service_add_pre() \ -test -n "$FIRST_ARG" || FIRST_ARG=$1 \ -# disable migration if initial install under systemd \ -[ -d /var/lib/systemd/migrated ] || mkdir -p /var/lib/systemd/migrated || : \ -if [ $FIRST_ARG -eq 1 ]; then \ - for service in %{?*} ; do \ - sysv_service=${service%.*} \ - touch "/var/lib/systemd/migrated/$sysv_service" || : \ - done \ -else \ - if [ $FIRST_ARG -gt 1 ]; then \ - for service in %{?*} ; do \ - if [ ! -e "/usr/lib/systemd/system/$service" ]; then \ - touch "/run/rpm-%{name}-update-$service-new-in-upgrade" \ - fi \ - done \ - fi \ - for service in %{?*} ; do \ - sysv_service=${service%.*} \ - if [ ! -e "/var/lib/systemd/migrated/$sysv_service" ]; then \ - services_to_migrate="$services_to_migrate $sysv_service" \ - fi \ - done \ - if [ -n "$services_to_migrate" ]; then \ - /usr/sbin/systemd-sysv-convert --save $services_to_migrate >/dev/null 2>&1 || : \ - fi \ -fi \ -%{nil} - -# On install, tell systemd to reload its unit files -%service_add_post() \ -test -n "$FIRST_ARG" || FIRST_ARG=$1 \ -[ -d /var/lib/systemd/migrated ] || mkdir -p /var/lib/systemd/migrated || : \ -for service in %{?*} ; do \ - sysv_service=${service%.*} \ - if [ ! -e "/var/lib/systemd/migrated/$sysv_service" ]; then \ - services_to_migrate="$services_to_migrate $sysv_service" \ - touch "/var/lib/systemd/migrated/$sysv_service" || : \ - fi \ -done \ -/usr/bin/systemctl daemon-reload >/dev/null 2>&1 || : \ -if [ -n "$services_to_migrate" ]; then \ - /usr/sbin/systemd-sysv-convert --apply $services_to_migrate >/dev/null 2>&1 || : \ -elif [ $FIRST_ARG -eq 1 ]; then \ - /usr/bin/systemctl preset %{?*} >/dev/null 2>&1 || : \ -elif [ $FIRST_ARG -gt 1 ]; then \ - for service in %{?*} ; do \ - if [ -e "/run/rpm-%{name}-update-$service-new-in-upgrade" ]; then \ - rm -f "/run/rpm-%{name}-update-$service-new-in-upgrade" \ - /usr/bin/systemctl preset "$service" >/dev/null 2>&1 || : \ - fi \ - done \ -fi \ -%{nil} - -# On uninstall, disable and stop services -%service_del_preun() \ -test -n "$FIRST_ARG" || FIRST_ARG=$1 \ -if [ $FIRST_ARG -eq 0 ]; then \ -# Package removal, not upgrade \ - /usr/bin/systemctl --no-reload disable %{?*} > /dev/null 2>&1 || : \ - /usr/bin/systemctl stop %{?*} > /dev/null 2>&1 || : \ -fi \ -%{nil} - -# On uninstall, tell systemd to reload its unit files -%service_del_postun() \ -test -n "$FIRST_ARG" || FIRST_ARG=$1 \ -if [ $FIRST_ARG -ge 1 ]; then \ -# Package upgrade, not uninstall \ - /usr/bin/systemctl try-restart %{?*} >/dev/null 2>&1 || : \ -else # package uninstall \ - for service in %{?*} ; do \ - sysv_service=${service%.*} \ - rm -f "/var/lib/systemd/migrated/$sysv_service" 2> /dev/null || : \ - done \ - /usr/bin/systemctl daemon-reload >/dev/null 2>&1 || : \ -fi \ -%{nil} - -%udev_hwdb_update() \ -/usr/bin/udevadm hwdb --update >/dev/null 2>&1 || : \ -%{nil} - -%udev_rules_update() \ -/usr/bin/udevadm control --reload >/dev/null 2>&1 || : \ -%{nil} - -%journal_catalog_update() \ -/usr/bin/journalctl --update-catalog >/dev/null 2>&1 || : \ -%{nil} diff --git a/systemd-mini.changes b/systemd-mini.changes index 30031a9b..d9e7abdd 100644 --- a/systemd-mini.changes +++ b/systemd-mini.changes @@ -1,3 +1,79 @@ +------------------------------------------------------------------- +Fri Feb 14 16:03:16 UTC 2014 - werner@suse.de + +- Add several upstream bugfix patches which are missed: + * 0018-core-do-not-add-what-to-RequiresMountsFor-for-networ.patch + * 0026-udevadm.xml-document-resolve-names-option-for-test.patch + * 0030-Fix-for-SIGSEGV-in-systemd-bootchart-on-short-living.patch + * 0032-rules-don-t-limit-some-of-the-rules-to-the-add-actio.patch + * 0031-man-document-the-b-special-boot-option.patch + * 0033-tmpfiles-log-unaccessible-FUSE-mount-points-only-as-.patch + * 0034-systemd-python-fix-booted-and-add-two-functions-to-d.patch + * 0035-activate-mention-E-in-the-help-text.patch + * 0036-activate-fix-crash-when-s-is-passed.patch + * 0037-tmpfiles-adjust-excludes-for-the-new-per-service-pri.patch + * 0038-core-socket-fix-SO_REUSEPORT.patch + * 0039-journal-when-appending-to-journal-file-allocate-larg.patch + * 0040-journal-optimize-bisection-logic-a-bit-by-caching-th.patch + * 0041-journal-fix-iteration-when-we-go-backwards-from-the-.patch + * 0042-journal-allow-journal_file_copy_entry-to-work-on-non.patch + * 0043-journal-simplify-pre-allocation-logic.patch + * 0044-journald-mention-how-long-we-needed-to-flush-to-var-.patch + * 0046-util.c-check-if-return-value-from-ttyname_r-is-0-ins.patch + * 0047-docs-remove-unneeded-the-s-in-gudev-docs.patch + * 0048-man-explicitly-say-when-multiple-units-can-be-specif.patch + * 0049-systemd-treat-reload-failure-as-failure.patch +- Add patch 0001-Don-t-snprintf-a-potentially-NULL-pointer.patch + to avoid potential NULL pointer +- Reorder patches to reflect udev/systemd usage + +------------------------------------------------------------------- +Tue Feb 11 10:53:48 UTC 2014 - coolo@suse.com + +- don't build bash-completions for bootstrap package + +------------------------------------------------------------------- +Tue Feb 11 10:25:26 UTC 2014 - coolo@suse.com + +- add more requires to this-is-only-for-build-envs to avoid + problems in kiwi configs + +------------------------------------------------------------------- +Mon Feb 10 15:15:35 UTC 2014 - werner@suse.de + +- Add patch 0145-logind-use-correct-who-enum-values-with-KillUnit.patch + to be able to kill sessions (bnc#860574) + +------------------------------------------------------------------- +Mon Feb 10 11:19:31 UTC 2014 - werner@suse.de + +- Do not return from main shell script but simply exit (bnc#862789) + +------------------------------------------------------------------- +Sun Feb 9 18:43:38 UTC 2014 - werner@suse.de + +- ... as only the systemd-analyze completion depends on + bash-completion I prefere a without which has to be defined + for SLES 12 + +------------------------------------------------------------------- +Sun Feb 9 11:21:07 UTC 2014 - coolo@suse.com + +- avoid bootstrap cycle with libusb and systemd-mini + +------------------------------------------------------------------- +Sat Feb 8 06:12:55 UTC 2014 - coolo@suse.com + +- split bash-completion support into its own package, + no need for sles_version + +------------------------------------------------------------------- +Fri Feb 7 13:02:28 UTC 2014 - werner@suse.de + +- Split off systemd-rpm-macros as a separate package to avoid + a rebuild of all packages due new systemd package +- Define a sles_version 12 for suse_version 1315 + ------------------------------------------------------------------- Wed Feb 5 11:19:28 UTC 2014 - werner@suse.de diff --git a/systemd-mini.spec b/systemd-mini.spec index fbeba0d4..808ed2ae 100644 --- a/systemd-mini.spec +++ b/systemd-mini.spec @@ -22,11 +22,7 @@ ##### WARNING: please do not edit this auto generated spec file. Use the systemd.spec! ##### %define udevpkgname udev-mini %define udev_major 1 - -%if 0%{?sles_version} == 0 -%global with_bash_completion 1 -%endif -%bcond_with bash_completion +%bcond_without bash_completion Name: systemd-mini Url: http://www.freedesktop.org/wiki/Software/systemd @@ -58,11 +54,14 @@ BuildRequires: libattr-devel BuildRequires: libcap-devel BuildRequires: libsepol-devel BuildRequires: libtool -BuildRequires: libusb-devel %if ! 0%{?bootstrap} +BuildRequires: libusb-devel BuildRequires: libxslt-tools %endif BuildRequires: pam-devel +%if 0%{?suse_version} > 1310 +BuildRequires: systemd-rpm-macros +%endif BuildRequires: tcpd-devel BuildRequires: xz BuildRequires: pkgconfig(blkid) >= 2.20 @@ -81,10 +80,10 @@ BuildRequires: pkgconfig(libpci) >= 3 BuildRequires: pkgconfig(libpcre) %if ! 0%{?bootstrap} BuildRequires: pkgconfig(libqrencode) +BuildRequires: pkgconfig(usbutils) >= 0.82 %endif BuildRequires: pkgconfig(libselinux) >= 2.1.9 BuildRequires: pkgconfig(libsepol) -BuildRequires: pkgconfig(usbutils) >= 0.82 %if 0%{?bootstrap} #!BuildIgnore: dbus-1 Requires: this-is-only-for-build-envs @@ -94,9 +93,7 @@ Conflicts: kiwi # the buildignore is important for bootstrapping #!BuildIgnore: udev Requires: %{udevpkgname} >= 172 -%if %{with bash_completion} -Recommends: bash-completion -%endif +Recommends: %{name}-bash-completion Requires: dbus-1 >= 1.4.0 Requires: kbd Requires: kmod >= 14 @@ -118,7 +115,6 @@ Source0: http://www.freedesktop.org/software/systemd/systemd-%{version}.t Source1: systemd-rpmlintrc Source2: localfs.service Source3: systemd-sysv-convert -Source4: macros.systemd Source6: baselibs.conf Source7: libgcrypt.m4 Source8: systemd-journald.init @@ -275,22 +271,10 @@ Patch89: 0003-core-make-sure-to-always-go-through-both-SIGTERM-and.patch Patch90: 0001-On_s390_con3270_disable_ANSI_colour_esc.patch # PATCH-FIX-SUSE plymouth-quit-and-wait-for-emergency-service.patch -- Make sure that no plymouthd is locking the tty Patch91: plymouth-quit-and-wait-for-emergency-service.patch - -# udev patches -# PATCH-FIX-OPENSUSE 1001-re-enable-by_path-links-for-ata-devices.patch -Patch1001: 1001-re-enable-by_path-links-for-ata-devices.patch -# PATCH-FIX-OPENSUSE 1002-rules-create-by-id-scsi-links-for-ATA-devices.patch -Patch1002: 1002-rules-create-by-id-scsi-links-for-ATA-devices.patch -# PATCH-FIX-OPENSUSE 1003-udev-netlink-null-rules.patch -Patch1003: 1003-udev-netlink-null-rules.patch -# PATCH-FIX-OPENSUSE 1005-create-default-links-for-primary-cd_dvd-drive.patch -Patch1005: 1005-create-default-links-for-primary-cd_dvd-drive.patch -# PATCH-FIX-OPENSUSE 1006-udev-always-rename-network.patch -Patch1006: 1006-udev-always-rename-network.patch -# PATCH-FIX-OPENSUSE 1007-physical-hotplug-cpu-and-memory.patch -Patch1007: 1007-physical-hotplug-cpu-and-memory.patch -# PATCH-FIX-OPENSUSE 1008-add-msft-compability-rules.patch -Patch1008: 1008-add-msft-compability-rules.patch +# PATCH-FIX-SUSE 0145-logind-use-correct-who-enum-values-with-KillUnit.patch -- Be able to kill sessions (bnc#860574) +Patch92: 0145-logind-use-correct-who-enum-values-with-KillUnit.patch +# PATCH-FIX-SUSE 0001-Don-t-snprintf-a-potentially-NULL-pointer.patch -- Avoid systemd crash on resume (bnc#861488) +Patch93: 0001-Don-t-snprintf-a-potentially-NULL-pointer.patch # PATCH-FIX-OPENSUSE 1009-make-xsltproc-use-correct-ROFF-links.patch -- Make ROFF links working again in manual pages (bnc#842844) Patch1009: 1009-make-xsltproc-use-correct-ROFF-links.patch # PATCH-FIX-OPENSUSE 1010-do-not-install-sulogin-unit-with-poweroff.patch -- Avoid installing console-shell.service (bnc#849071) @@ -313,6 +297,64 @@ Patch1017: 1017-skip-native-unit-handling-if-sysv-already-handled.patch Patch1018: 1018-Make-LSB-Skripts-know-about-Required-and-Should.patch # PATCH-FIX-SUSE 1019-make-completion-smart-to-be-able-to-redirect.patch Patch1019: 1019-make-completion-smart-to-be-able-to-redirect.patch +# PATCH-FIX-UPSTREAM 0018-core-do-not-add-what-to-RequiresMountsFor-for-networ.patch werner@suse.com +Patch94: 0018-core-do-not-add-what-to-RequiresMountsFor-for-networ.patch +# PATCH-FIX-UPSTREAM 0030-Fix-for-SIGSEGV-in-systemd-bootchart-on-short-living.patch werner@suse.com +Patch96: 0030-Fix-for-SIGSEGV-in-systemd-bootchart-on-short-living.patch +# PATCH-FIX-UPSTREAM 0031-man-document-the-b-special-boot-option.patch werner@suse.com +Patch97: 0031-man-document-the-b-special-boot-option.patch +# PATCH-FIX-UPSTREAM 0033-tmpfiles-log-unaccessible-FUSE-mount-points-only-as-.patch werner@suse.com +Patch99: 0033-tmpfiles-log-unaccessible-FUSE-mount-points-only-as-.patch +# PATCH-FIX-UPSTREAM 0034-systemd-python-fix-booted-and-add-two-functions-to-d.patch werner@suse.com +Patch100: 0034-systemd-python-fix-booted-and-add-two-functions-to-d.patch +# PATCH-FIX-UPSTREAM 0035-activate-mention-E-in-the-help-text.patch werner@suse.com +Patch101: 0035-activate-mention-E-in-the-help-text.patch +# PATCH-FIX-UPSTREAM 0036-activate-fix-crash-when-s-is-passed.patch werner@suse.com +Patch102: 0036-activate-fix-crash-when-s-is-passed.patch +# PATCH-FIX-UPSTREAM 0037-tmpfiles-adjust-excludes-for-the-new-per-service-pri.patch werner@suse.com +Patch103: 0037-tmpfiles-adjust-excludes-for-the-new-per-service-pri.patch +# PATCH-FIX-UPSTREAM 0038-core-socket-fix-SO_REUSEPORT.patch werner@suse.com +Patch104: 0038-core-socket-fix-SO_REUSEPORT.patch +# PATCH-FIX-UPSTREAM 0039-journal-when-appending-to-journal-file-allocate-larg.patch werner@suse.com +Patch105: 0039-journal-when-appending-to-journal-file-allocate-larg.patch +# PATCH-FIX-UPSTREAM 0040-journal-optimize-bisection-logic-a-bit-by-caching-th.patch werner@suse.com +Patch106: 0040-journal-optimize-bisection-logic-a-bit-by-caching-th.patch +# PATCH-FIX-UPSTREAM 0041-journal-fix-iteration-when-we-go-backwards-from-the-.patch werner@suse.com +Patch107: 0041-journal-fix-iteration-when-we-go-backwards-from-the-.patch +# PATCH-FIX-UPSTREAM 0042-journal-allow-journal_file_copy_entry-to-work-on-non.patch werner@suse.com +Patch108: 0042-journal-allow-journal_file_copy_entry-to-work-on-non.patch +# PATCH-FIX-UPSTREAM 0043-journal-simplify-pre-allocation-logic.patch werner@suse.com +Patch109: 0043-journal-simplify-pre-allocation-logic.patch +# PATCH-FIX-UPSTREAM 0044-journald-mention-how-long-we-needed-to-flush-to-var-.patch werner@suse.com +Patch110: 0044-journald-mention-how-long-we-needed-to-flush-to-var-.patch +# PATCH-FIX-UPSTREAM 0046-util.c-check-if-return-value-from-ttyname_r-is-0-ins.patch werner@suse.com +Patch111: 0046-util.c-check-if-return-value-from-ttyname_r-is-0-ins.patch +# PATCH-FIX-UPSTREAM 0047-docs-remove-unneeded-the-s-in-gudev-docs.patch werner@suse.com +Patch112: 0047-docs-remove-unneeded-the-s-in-gudev-docs.patch +# PATCH-FIX-UPSTREAM 0048-man-explicitly-say-when-multiple-units-can-be-specif.patch werner@suse.com +Patch113: 0048-man-explicitly-say-when-multiple-units-can-be-specif.patch +# PATCH-FIX-UPSTREAM 0049-systemd-treat-reload-failure-as-failure.patch werner@suse.com +Patch114: 0049-systemd-treat-reload-failure-as-failure.patch + +# udev patches +# PATCH-FIX-OPENSUSE 1001-re-enable-by_path-links-for-ata-devices.patch +Patch1001: 1001-re-enable-by_path-links-for-ata-devices.patch +# PATCH-FIX-OPENSUSE 1002-rules-create-by-id-scsi-links-for-ATA-devices.patch +Patch1002: 1002-rules-create-by-id-scsi-links-for-ATA-devices.patch +# PATCH-FIX-OPENSUSE 1003-udev-netlink-null-rules.patch +Patch1003: 1003-udev-netlink-null-rules.patch +# PATCH-FIX-OPENSUSE 1005-create-default-links-for-primary-cd_dvd-drive.patch +Patch1005: 1005-create-default-links-for-primary-cd_dvd-drive.patch +# PATCH-FIX-OPENSUSE 1006-udev-always-rename-network.patch +Patch1006: 1006-udev-always-rename-network.patch +# PATCH-FIX-OPENSUSE 1007-physical-hotplug-cpu-and-memory.patch +Patch1007: 1007-physical-hotplug-cpu-and-memory.patch +# PATCH-FIX-OPENSUSE 1008-add-msft-compability-rules.patch +Patch1008: 1008-add-msft-compability-rules.patch +# PATCH-FIX-UPSTREAM 0026-udevadm.xml-document-resolve-names-option-for-test.patch werner@suse.com +Patch95: 0026-udevadm.xml-document-resolve-names-option-for-test.patch +# PATCH-FIX-UPSTREAM 0032-rules-don-t-limit-some-of-the-rules-to-the-add-actio.patch werner@suse.com +Patch98: 0032-rules-don-t-limit-some-of-the-rules-to-the-add-actio.patch %description Systemd is a system and service manager, compatible with SysV and LSB @@ -325,6 +367,17 @@ transactional dependency-based service control logic. It can work as a drop-in replacement for sysvinit. +%package bash-completion +Summary: Bash completion support for systemd +License: LGPL-2.1+ +Group: System/Base +Requires: bash +%if %{with bash_completion} +Requires: bash-completion +%endif + +%description bash-completion +Some systemd commands offer bash completion, but it's an optional dependency. %package devel Summary: Development headers for systemd @@ -369,6 +422,8 @@ Requires: filesystem Provides: udev = %{version} Conflicts: libudev%{udev_major} Conflicts: udev +# avoid kiwi picking it for bootstrap +Requires: this-is-only-for-build-envs %endif %description -n %{udevpkgname} @@ -388,6 +443,8 @@ Requires: %{udevpkgname} >= %{version}-%{release} %if 0%{?bootstrap} Conflicts: libudev%{udev_major} Conflicts: kiwi +# avoid kiwi picking it for bootstrap +Requires: this-is-only-for-build-envs %endif %description -n lib%{udevpkgname}%{udev_major} @@ -586,6 +643,38 @@ cp %{SOURCE7} m4/ %patch89 -p1 %patch90 -p1 %patch91 -p1 +%patch92 -p1 +%patch93 -p1 +%patch1009 -p1 +%patch1010 -p1 +%patch1011 -p1 +%patch1012 -p1 +%patch1013 -p1 +%patch1014 -p1 +%patch1015 -p1 +%patch1016 -p1 +%patch1017 -p1 +%patch1018 -p1 +%patch1019 -p1 +%patch94 -p0 +%patch96 -p0 +%patch97 -p0 +%patch99 -p0 +%patch100 -p0 +%patch101 -p0 +%patch102 -p0 +%patch103 -p0 +%patch104 -p0 +%patch105 -p0 +%patch106 -p0 +%patch107 -p0 +%patch108 -p0 +%patch109 -p0 +%patch110 -p0 +%patch111 -p0 +%patch112 -p0 +%patch113 -p0 +%patch114 -p0 # udev patches %patch1001 -p1 @@ -598,17 +687,8 @@ cp %{SOURCE7} m4/ %patch1007 -p1 %patch1008 -p1 %endif -%patch1009 -p1 -%patch1010 -p1 -%patch1011 -p1 -%patch1012 -p1 -%patch1013 -p1 -%patch1014 -p1 -%patch1015 -p1 -%patch1016 -p1 -%patch1017 -p1 -%patch1018 -p1 -%patch1019 -p1 +%patch95 -p0 +%patch98 -p0 # ensure generate files are removed rm -f units/emergency.service @@ -742,6 +822,7 @@ rm -f %{buildroot}%{_prefix}/lib/sysctl.d/50-default.conf rm -f %{buildroot}/etc/init.d/README %if 0%{?bootstrap} rm -f %{buildroot}/var/log/README +rm -rf %{buildroot}%{_datadir}/bash-completion %endif # legacy links @@ -793,20 +874,12 @@ install -m 644 units/powerfail.service %{buildroot}/%{_prefix}/lib/systemd/syste install -m 644 man/systemd-powerfail.service.8 %{buildroot}/%{_mandir}/man8/ %endif -# clean out some completions which requires bash-completion package -%if %{without bash_completion} -for c in %{buildroot}/%{_datadir}/bash-completion/completions/* -do - test -e "$c" || continue - grep -q _init_completion "$c" || continue - rm -vf "$c" -done -%endif - %fdupes -s %{buildroot}%{_mandir} +%if 0%{suse_version} >= 1310 # packaged in systemd-rpm-macros rm -f %{buildroot}/%{_prefix}/lib/rpm/macros.d/macros.systemd +%endif %pre getent group systemd-journal >/dev/null || groupadd -r systemd-journal || : @@ -1161,10 +1234,7 @@ exit 0 %if ! 0%{?bootstrap} %{_prefix}/lib/udev/numlock-on %endif -%dir %{_datadir}/bash-completion -%dir %{_datadir}/bash-completion/completions %ghost /var/lib/systemd/catalog/database -%{_datadir}/bash-completion/completions/* %if 0%{suse_version} < 1310 %{_sysconfdir}/rpm/macros.systemd %endif @@ -1180,6 +1250,17 @@ exit 0 %ghost /var/lib/systemd/backlight %ghost /var/lib/systemd/random-seed +%if ! 0%{?bootstrap} +%files bash-completion +%defattr(-,root,root,-) +%dir %{_datadir}/bash-completion +%dir %{_datadir}/bash-completion/completions +%if %{without bash_completion} +%exclude %{_datadir}/bash-completion/completions/systemd-analyze +%endif +%{_datadir}/bash-completion/completions/* +%endif + %files devel %defattr(-,root,root,-) %{_libdir}/libsystemd-daemon.so diff --git a/systemd-rpm-macros.changes b/systemd-rpm-macros.changes deleted file mode 100644 index 165b84c9..00000000 --- a/systemd-rpm-macros.changes +++ /dev/null @@ -1,11 +0,0 @@ -------------------------------------------------------------------- -Thu Jul 4 13:59:43 CEST 2013 - fcrozat@suse.com - -- Resync with systemd v205 macros - -------------------------------------------------------------------- -Mon Jun 17 10:49:50 UTC 2013 - mhrusecky@suse.com - -- New package with systemd rpm macros to avoid unnecessary build time - dependencies - diff --git a/systemd.changes b/systemd.changes index 30031a9b..d9e7abdd 100644 --- a/systemd.changes +++ b/systemd.changes @@ -1,3 +1,79 @@ +------------------------------------------------------------------- +Fri Feb 14 16:03:16 UTC 2014 - werner@suse.de + +- Add several upstream bugfix patches which are missed: + * 0018-core-do-not-add-what-to-RequiresMountsFor-for-networ.patch + * 0026-udevadm.xml-document-resolve-names-option-for-test.patch + * 0030-Fix-for-SIGSEGV-in-systemd-bootchart-on-short-living.patch + * 0032-rules-don-t-limit-some-of-the-rules-to-the-add-actio.patch + * 0031-man-document-the-b-special-boot-option.patch + * 0033-tmpfiles-log-unaccessible-FUSE-mount-points-only-as-.patch + * 0034-systemd-python-fix-booted-and-add-two-functions-to-d.patch + * 0035-activate-mention-E-in-the-help-text.patch + * 0036-activate-fix-crash-when-s-is-passed.patch + * 0037-tmpfiles-adjust-excludes-for-the-new-per-service-pri.patch + * 0038-core-socket-fix-SO_REUSEPORT.patch + * 0039-journal-when-appending-to-journal-file-allocate-larg.patch + * 0040-journal-optimize-bisection-logic-a-bit-by-caching-th.patch + * 0041-journal-fix-iteration-when-we-go-backwards-from-the-.patch + * 0042-journal-allow-journal_file_copy_entry-to-work-on-non.patch + * 0043-journal-simplify-pre-allocation-logic.patch + * 0044-journald-mention-how-long-we-needed-to-flush-to-var-.patch + * 0046-util.c-check-if-return-value-from-ttyname_r-is-0-ins.patch + * 0047-docs-remove-unneeded-the-s-in-gudev-docs.patch + * 0048-man-explicitly-say-when-multiple-units-can-be-specif.patch + * 0049-systemd-treat-reload-failure-as-failure.patch +- Add patch 0001-Don-t-snprintf-a-potentially-NULL-pointer.patch + to avoid potential NULL pointer +- Reorder patches to reflect udev/systemd usage + +------------------------------------------------------------------- +Tue Feb 11 10:53:48 UTC 2014 - coolo@suse.com + +- don't build bash-completions for bootstrap package + +------------------------------------------------------------------- +Tue Feb 11 10:25:26 UTC 2014 - coolo@suse.com + +- add more requires to this-is-only-for-build-envs to avoid + problems in kiwi configs + +------------------------------------------------------------------- +Mon Feb 10 15:15:35 UTC 2014 - werner@suse.de + +- Add patch 0145-logind-use-correct-who-enum-values-with-KillUnit.patch + to be able to kill sessions (bnc#860574) + +------------------------------------------------------------------- +Mon Feb 10 11:19:31 UTC 2014 - werner@suse.de + +- Do not return from main shell script but simply exit (bnc#862789) + +------------------------------------------------------------------- +Sun Feb 9 18:43:38 UTC 2014 - werner@suse.de + +- ... as only the systemd-analyze completion depends on + bash-completion I prefere a without which has to be defined + for SLES 12 + +------------------------------------------------------------------- +Sun Feb 9 11:21:07 UTC 2014 - coolo@suse.com + +- avoid bootstrap cycle with libusb and systemd-mini + +------------------------------------------------------------------- +Sat Feb 8 06:12:55 UTC 2014 - coolo@suse.com + +- split bash-completion support into its own package, + no need for sles_version + +------------------------------------------------------------------- +Fri Feb 7 13:02:28 UTC 2014 - werner@suse.de + +- Split off systemd-rpm-macros as a separate package to avoid + a rebuild of all packages due new systemd package +- Define a sles_version 12 for suse_version 1315 + ------------------------------------------------------------------- Wed Feb 5 11:19:28 UTC 2014 - werner@suse.de diff --git a/systemd.spec b/systemd.spec index 4dfc1227..c305b86b 100644 --- a/systemd.spec +++ b/systemd.spec @@ -20,11 +20,7 @@ %define real systemd %define udevpkgname udev %define udev_major 1 - -%if 0%{?sles_version} == 0 -%global with_bash_completion 1 -%endif -%bcond_with bash_completion +%bcond_without bash_completion Name: systemd Url: http://www.freedesktop.org/wiki/Software/systemd @@ -53,11 +49,14 @@ BuildRequires: libattr-devel BuildRequires: libcap-devel BuildRequires: libsepol-devel BuildRequires: libtool -BuildRequires: libusb-devel %if ! 0%{?bootstrap} +BuildRequires: libusb-devel BuildRequires: libxslt-tools %endif BuildRequires: pam-devel +%if 0%{?suse_version} > 1310 +BuildRequires: systemd-rpm-macros +%endif BuildRequires: tcpd-devel BuildRequires: xz BuildRequires: pkgconfig(blkid) >= 2.20 @@ -76,10 +75,10 @@ BuildRequires: pkgconfig(libpci) >= 3 BuildRequires: pkgconfig(libpcre) %if ! 0%{?bootstrap} BuildRequires: pkgconfig(libqrencode) +BuildRequires: pkgconfig(usbutils) >= 0.82 %endif BuildRequires: pkgconfig(libselinux) >= 2.1.9 BuildRequires: pkgconfig(libsepol) -BuildRequires: pkgconfig(usbutils) >= 0.82 %if 0%{?bootstrap} #!BuildIgnore: dbus-1 Requires: this-is-only-for-build-envs @@ -89,9 +88,7 @@ Conflicts: kiwi # the buildignore is important for bootstrapping #!BuildIgnore: udev Requires: %{udevpkgname} >= 172 -%if %{with bash_completion} -Recommends: bash-completion -%endif +Recommends: %{name}-bash-completion Requires: dbus-1 >= 1.4.0 Requires: kbd Requires: kmod >= 14 @@ -113,7 +110,6 @@ Source0: http://www.freedesktop.org/software/systemd/systemd-%{version}.t Source1: systemd-rpmlintrc Source2: localfs.service Source3: systemd-sysv-convert -Source4: macros.systemd Source6: baselibs.conf Source7: libgcrypt.m4 Source8: systemd-journald.init @@ -270,22 +266,10 @@ Patch89: 0003-core-make-sure-to-always-go-through-both-SIGTERM-and.patch Patch90: 0001-On_s390_con3270_disable_ANSI_colour_esc.patch # PATCH-FIX-SUSE plymouth-quit-and-wait-for-emergency-service.patch -- Make sure that no plymouthd is locking the tty Patch91: plymouth-quit-and-wait-for-emergency-service.patch - -# udev patches -# PATCH-FIX-OPENSUSE 1001-re-enable-by_path-links-for-ata-devices.patch -Patch1001: 1001-re-enable-by_path-links-for-ata-devices.patch -# PATCH-FIX-OPENSUSE 1002-rules-create-by-id-scsi-links-for-ATA-devices.patch -Patch1002: 1002-rules-create-by-id-scsi-links-for-ATA-devices.patch -# PATCH-FIX-OPENSUSE 1003-udev-netlink-null-rules.patch -Patch1003: 1003-udev-netlink-null-rules.patch -# PATCH-FIX-OPENSUSE 1005-create-default-links-for-primary-cd_dvd-drive.patch -Patch1005: 1005-create-default-links-for-primary-cd_dvd-drive.patch -# PATCH-FIX-OPENSUSE 1006-udev-always-rename-network.patch -Patch1006: 1006-udev-always-rename-network.patch -# PATCH-FIX-OPENSUSE 1007-physical-hotplug-cpu-and-memory.patch -Patch1007: 1007-physical-hotplug-cpu-and-memory.patch -# PATCH-FIX-OPENSUSE 1008-add-msft-compability-rules.patch -Patch1008: 1008-add-msft-compability-rules.patch +# PATCH-FIX-SUSE 0145-logind-use-correct-who-enum-values-with-KillUnit.patch -- Be able to kill sessions (bnc#860574) +Patch92: 0145-logind-use-correct-who-enum-values-with-KillUnit.patch +# PATCH-FIX-SUSE 0001-Don-t-snprintf-a-potentially-NULL-pointer.patch -- Avoid systemd crash on resume (bnc#861488) +Patch93: 0001-Don-t-snprintf-a-potentially-NULL-pointer.patch # PATCH-FIX-OPENSUSE 1009-make-xsltproc-use-correct-ROFF-links.patch -- Make ROFF links working again in manual pages (bnc#842844) Patch1009: 1009-make-xsltproc-use-correct-ROFF-links.patch # PATCH-FIX-OPENSUSE 1010-do-not-install-sulogin-unit-with-poweroff.patch -- Avoid installing console-shell.service (bnc#849071) @@ -308,6 +292,64 @@ Patch1017: 1017-skip-native-unit-handling-if-sysv-already-handled.patch Patch1018: 1018-Make-LSB-Skripts-know-about-Required-and-Should.patch # PATCH-FIX-SUSE 1019-make-completion-smart-to-be-able-to-redirect.patch Patch1019: 1019-make-completion-smart-to-be-able-to-redirect.patch +# PATCH-FIX-UPSTREAM 0018-core-do-not-add-what-to-RequiresMountsFor-for-networ.patch werner@suse.com +Patch94: 0018-core-do-not-add-what-to-RequiresMountsFor-for-networ.patch +# PATCH-FIX-UPSTREAM 0030-Fix-for-SIGSEGV-in-systemd-bootchart-on-short-living.patch werner@suse.com +Patch96: 0030-Fix-for-SIGSEGV-in-systemd-bootchart-on-short-living.patch +# PATCH-FIX-UPSTREAM 0031-man-document-the-b-special-boot-option.patch werner@suse.com +Patch97: 0031-man-document-the-b-special-boot-option.patch +# PATCH-FIX-UPSTREAM 0033-tmpfiles-log-unaccessible-FUSE-mount-points-only-as-.patch werner@suse.com +Patch99: 0033-tmpfiles-log-unaccessible-FUSE-mount-points-only-as-.patch +# PATCH-FIX-UPSTREAM 0034-systemd-python-fix-booted-and-add-two-functions-to-d.patch werner@suse.com +Patch100: 0034-systemd-python-fix-booted-and-add-two-functions-to-d.patch +# PATCH-FIX-UPSTREAM 0035-activate-mention-E-in-the-help-text.patch werner@suse.com +Patch101: 0035-activate-mention-E-in-the-help-text.patch +# PATCH-FIX-UPSTREAM 0036-activate-fix-crash-when-s-is-passed.patch werner@suse.com +Patch102: 0036-activate-fix-crash-when-s-is-passed.patch +# PATCH-FIX-UPSTREAM 0037-tmpfiles-adjust-excludes-for-the-new-per-service-pri.patch werner@suse.com +Patch103: 0037-tmpfiles-adjust-excludes-for-the-new-per-service-pri.patch +# PATCH-FIX-UPSTREAM 0038-core-socket-fix-SO_REUSEPORT.patch werner@suse.com +Patch104: 0038-core-socket-fix-SO_REUSEPORT.patch +# PATCH-FIX-UPSTREAM 0039-journal-when-appending-to-journal-file-allocate-larg.patch werner@suse.com +Patch105: 0039-journal-when-appending-to-journal-file-allocate-larg.patch +# PATCH-FIX-UPSTREAM 0040-journal-optimize-bisection-logic-a-bit-by-caching-th.patch werner@suse.com +Patch106: 0040-journal-optimize-bisection-logic-a-bit-by-caching-th.patch +# PATCH-FIX-UPSTREAM 0041-journal-fix-iteration-when-we-go-backwards-from-the-.patch werner@suse.com +Patch107: 0041-journal-fix-iteration-when-we-go-backwards-from-the-.patch +# PATCH-FIX-UPSTREAM 0042-journal-allow-journal_file_copy_entry-to-work-on-non.patch werner@suse.com +Patch108: 0042-journal-allow-journal_file_copy_entry-to-work-on-non.patch +# PATCH-FIX-UPSTREAM 0043-journal-simplify-pre-allocation-logic.patch werner@suse.com +Patch109: 0043-journal-simplify-pre-allocation-logic.patch +# PATCH-FIX-UPSTREAM 0044-journald-mention-how-long-we-needed-to-flush-to-var-.patch werner@suse.com +Patch110: 0044-journald-mention-how-long-we-needed-to-flush-to-var-.patch +# PATCH-FIX-UPSTREAM 0046-util.c-check-if-return-value-from-ttyname_r-is-0-ins.patch werner@suse.com +Patch111: 0046-util.c-check-if-return-value-from-ttyname_r-is-0-ins.patch +# PATCH-FIX-UPSTREAM 0047-docs-remove-unneeded-the-s-in-gudev-docs.patch werner@suse.com +Patch112: 0047-docs-remove-unneeded-the-s-in-gudev-docs.patch +# PATCH-FIX-UPSTREAM 0048-man-explicitly-say-when-multiple-units-can-be-specif.patch werner@suse.com +Patch113: 0048-man-explicitly-say-when-multiple-units-can-be-specif.patch +# PATCH-FIX-UPSTREAM 0049-systemd-treat-reload-failure-as-failure.patch werner@suse.com +Patch114: 0049-systemd-treat-reload-failure-as-failure.patch + +# udev patches +# PATCH-FIX-OPENSUSE 1001-re-enable-by_path-links-for-ata-devices.patch +Patch1001: 1001-re-enable-by_path-links-for-ata-devices.patch +# PATCH-FIX-OPENSUSE 1002-rules-create-by-id-scsi-links-for-ATA-devices.patch +Patch1002: 1002-rules-create-by-id-scsi-links-for-ATA-devices.patch +# PATCH-FIX-OPENSUSE 1003-udev-netlink-null-rules.patch +Patch1003: 1003-udev-netlink-null-rules.patch +# PATCH-FIX-OPENSUSE 1005-create-default-links-for-primary-cd_dvd-drive.patch +Patch1005: 1005-create-default-links-for-primary-cd_dvd-drive.patch +# PATCH-FIX-OPENSUSE 1006-udev-always-rename-network.patch +Patch1006: 1006-udev-always-rename-network.patch +# PATCH-FIX-OPENSUSE 1007-physical-hotplug-cpu-and-memory.patch +Patch1007: 1007-physical-hotplug-cpu-and-memory.patch +# PATCH-FIX-OPENSUSE 1008-add-msft-compability-rules.patch +Patch1008: 1008-add-msft-compability-rules.patch +# PATCH-FIX-UPSTREAM 0026-udevadm.xml-document-resolve-names-option-for-test.patch werner@suse.com +Patch95: 0026-udevadm.xml-document-resolve-names-option-for-test.patch +# PATCH-FIX-UPSTREAM 0032-rules-don-t-limit-some-of-the-rules-to-the-add-actio.patch werner@suse.com +Patch98: 0032-rules-don-t-limit-some-of-the-rules-to-the-add-actio.patch %description Systemd is a system and service manager, compatible with SysV and LSB @@ -320,6 +362,17 @@ transactional dependency-based service control logic. It can work as a drop-in replacement for sysvinit. +%package bash-completion +Summary: Bash completion support for systemd +License: LGPL-2.1+ +Group: System/Base +Requires: bash +%if %{with bash_completion} +Requires: bash-completion +%endif + +%description bash-completion +Some systemd commands offer bash completion, but it's an optional dependency. %package devel Summary: Development headers for systemd @@ -364,6 +417,8 @@ Requires: filesystem Provides: udev = %{version} Conflicts: libudev%{udev_major} Conflicts: udev +# avoid kiwi picking it for bootstrap +Requires: this-is-only-for-build-envs %endif %description -n %{udevpkgname} @@ -383,6 +438,8 @@ Requires: %{udevpkgname} >= %{version}-%{release} %if 0%{?bootstrap} Conflicts: libudev%{udev_major} Conflicts: kiwi +# avoid kiwi picking it for bootstrap +Requires: this-is-only-for-build-envs %endif %description -n lib%{udevpkgname}%{udev_major} @@ -581,6 +638,38 @@ cp %{SOURCE7} m4/ %patch89 -p1 %patch90 -p1 %patch91 -p1 +%patch92 -p1 +%patch93 -p1 +%patch1009 -p1 +%patch1010 -p1 +%patch1011 -p1 +%patch1012 -p1 +%patch1013 -p1 +%patch1014 -p1 +%patch1015 -p1 +%patch1016 -p1 +%patch1017 -p1 +%patch1018 -p1 +%patch1019 -p1 +%patch94 -p0 +%patch96 -p0 +%patch97 -p0 +%patch99 -p0 +%patch100 -p0 +%patch101 -p0 +%patch102 -p0 +%patch103 -p0 +%patch104 -p0 +%patch105 -p0 +%patch106 -p0 +%patch107 -p0 +%patch108 -p0 +%patch109 -p0 +%patch110 -p0 +%patch111 -p0 +%patch112 -p0 +%patch113 -p0 +%patch114 -p0 # udev patches %patch1001 -p1 @@ -593,17 +682,8 @@ cp %{SOURCE7} m4/ %patch1007 -p1 %patch1008 -p1 %endif -%patch1009 -p1 -%patch1010 -p1 -%patch1011 -p1 -%patch1012 -p1 -%patch1013 -p1 -%patch1014 -p1 -%patch1015 -p1 -%patch1016 -p1 -%patch1017 -p1 -%patch1018 -p1 -%patch1019 -p1 +%patch95 -p0 +%patch98 -p0 # ensure generate files are removed rm -f units/emergency.service @@ -737,6 +817,7 @@ rm -f %{buildroot}%{_prefix}/lib/sysctl.d/50-default.conf rm -f %{buildroot}/etc/init.d/README %if 0%{?bootstrap} rm -f %{buildroot}/var/log/README +rm -rf %{buildroot}%{_datadir}/bash-completion %endif # legacy links @@ -788,20 +869,12 @@ install -m 644 units/powerfail.service %{buildroot}/%{_prefix}/lib/systemd/syste install -m 644 man/systemd-powerfail.service.8 %{buildroot}/%{_mandir}/man8/ %endif -# clean out some completions which requires bash-completion package -%if %{without bash_completion} -for c in %{buildroot}/%{_datadir}/bash-completion/completions/* -do - test -e "$c" || continue - grep -q _init_completion "$c" || continue - rm -vf "$c" -done -%endif - %fdupes -s %{buildroot}%{_mandir} +%if 0%{suse_version} >= 1310 # packaged in systemd-rpm-macros rm -f %{buildroot}/%{_prefix}/lib/rpm/macros.d/macros.systemd +%endif %pre getent group systemd-journal >/dev/null || groupadd -r systemd-journal || : @@ -1156,10 +1229,7 @@ exit 0 %if ! 0%{?bootstrap} %{_prefix}/lib/udev/numlock-on %endif -%dir %{_datadir}/bash-completion -%dir %{_datadir}/bash-completion/completions %ghost /var/lib/systemd/catalog/database -%{_datadir}/bash-completion/completions/* %if 0%{suse_version} < 1310 %{_sysconfdir}/rpm/macros.systemd %endif @@ -1175,6 +1245,17 @@ exit 0 %ghost /var/lib/systemd/backlight %ghost /var/lib/systemd/random-seed +%if ! 0%{?bootstrap} +%files bash-completion +%defattr(-,root,root,-) +%dir %{_datadir}/bash-completion +%dir %{_datadir}/bash-completion/completions +%if %{without bash_completion} +%exclude %{_datadir}/bash-completion/completions/systemd-analyze +%endif +%{_datadir}/bash-completion/completions/* +%endif + %files devel %defattr(-,root,root,-) %{_libdir}/libsystemd-daemon.so diff --git a/write_dev_root_rule b/write_dev_root_rule index 5011aa3f..dcb7d5b4 100644 --- a/write_dev_root_rule +++ b/write_dev_root_rule @@ -2,7 +2,7 @@ eval $(@@PREFIX@@/udevadm info --export --export-prefix=ROOT_ --device-id-of-file=/) -[ "$ROOT_MAJOR" -gt 0 ] || return +[ "$ROOT_MAJOR" -gt 0 ] || exit 0 mkdir -m 0755 -p /run/udev/rules.d >/dev/null 2>&1 ln -sf /run/udev /dev/.udev 2>/dev/null || :