diff --git a/0001-NEWS-well-it-s-Options-now-not-Discard.patch b/0001-NEWS-well-it-s-Options-now-not-Discard.patch new file mode 100644 index 0000000..248e4ef --- /dev/null +++ b/0001-NEWS-well-it-s-Options-now-not-Discard.patch @@ -0,0 +1,23 @@ +From 0ec05200ca022ef7cf38b02e7a20e7dbff6689b7 Mon Sep 17 00:00:00 2001 +From: Lennart Poettering +Date: Tue, 28 Oct 2014 20:36:32 +0100 +Subject: [PATCH] NEWS: well, it's Options= now, not Discard= + +(cherry picked from commit c4ac990007cd0069bb7e76ec15dd731320f382fd) +--- + NEWS | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/NEWS b/NEWS +index 84a43fd5df..82a1948a38 100644 +--- a/NEWS ++++ b/NEWS +@@ -76,7 +76,7 @@ CHANGES WITH 217: + rotating media anymore, and nobody stepped up to actively + maintain this component of systemd it has now been removed. + +- * Swap units can use Discard= to specify discard options. ++ * Swap units can use Options= to specify discard options. + Discard options specified for swaps in /etc/fstab are now + respected. + diff --git a/0001-units-don-t-order-journal-flushing-afte-remote-fs.ta.patch b/0001-units-don-t-order-journal-flushing-afte-remote-fs.ta.patch deleted file mode 100644 index f43d4d5..0000000 --- a/0001-units-don-t-order-journal-flushing-afte-remote-fs.ta.patch +++ /dev/null @@ -1,35 +0,0 @@ -From 267edb57a744028055f0fc4f8dbd0d691e6324ed Mon Sep 17 00:00:00 2001 -From: Lennart Poettering -Date: Fri, 31 Oct 2014 16:22:36 +0100 -Subject: [PATCH] units: don't order journal flushing afte remote-fs.target - -Instead, only depend on the actual file systems we need. - -This should solve dep loops on setups where remote-fs.target is moved -into late boot. - -[ Picked from upstream commit 919699ec301ea507edce4a619141ed22e789ac0d. - The upstream commit contains unrelated changes in nspawn by mistake. - They've been stripped in this backport. -- mschmidt ] ---- - units/systemd-journal-flush.service.in | 3 ++- - 1 file changed, 2 insertions(+), 1 deletion(-) - -diff --git a/units/systemd-journal-flush.service.in b/units/systemd-journal-flush.service.in -index 699670b..2612220 100644 ---- a/units/systemd-journal-flush.service.in -+++ b/units/systemd-journal-flush.service.in -@@ -10,8 +10,9 @@ Description=Trigger Flushing of Journal to Persistent Storage - Documentation=man:systemd-journald.service(8) man:journald.conf(5) - DefaultDependencies=no - Requires=systemd-journald.service --After=systemd-journald.service local-fs.target remote-fs.target -+After=systemd-journald.service - Before=systemd-user-sessions.service systemd-tmpfiles-setup.service -+RequiresMountsFor=/var/log/journal - - [Service] - ExecStart=@rootbindir@/journalctl --flush --- -2.1.0 - diff --git a/0002-sd-bus-properly-handle-removals-of-non-existing-matc.patch b/0002-sd-bus-properly-handle-removals-of-non-existing-matc.patch new file mode 100644 index 0000000..0e712af --- /dev/null +++ b/0002-sd-bus-properly-handle-removals-of-non-existing-matc.patch @@ -0,0 +1,23 @@ +From 0eac08a5cfa2771ad740e6e432c32daaf28b0bdc Mon Sep 17 00:00:00 2001 +From: Lennart Poettering +Date: Wed, 29 Oct 2014 17:58:43 +0100 +Subject: [PATCH] sd-bus: properly handle removals of non-existing matches + +(cherry picked from commit ef7b6c0190fefaacf6d8f8e1a6dda4ba8b98091b) +--- + src/libsystemd/sd-bus/bus-match.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/libsystemd/sd-bus/bus-match.c b/src/libsystemd/sd-bus/bus-match.c +index 18afe0f12a..5658c61ba7 100644 +--- a/src/libsystemd/sd-bus/bus-match.c ++++ b/src/libsystemd/sd-bus/bus-match.c +@@ -537,7 +537,7 @@ static int bus_match_find_compare_value( + else if (BUS_MATCH_CAN_HASH(t)) + n = hashmap_get(c->compare.children, value_str); + else { +- for (n = c->child; !value_node_same(n, t, value_u8, value_str); n = n->next) ++ for (n = c->child; n && !value_node_same(n, t, value_u8, value_str); n = n->next) + ; + } + diff --git a/0002-units-make-systemd-journald.service-Type-notify.patch b/0002-units-make-systemd-journald.service-Type-notify.patch deleted file mode 100644 index 7fcbdab..0000000 --- a/0002-units-make-systemd-journald.service-Type-notify.patch +++ /dev/null @@ -1,34 +0,0 @@ -From ec2b7ebedde908aed11e6504b58a7712d052344b Mon Sep 17 00:00:00 2001 -From: Michal Schmidt -Date: Tue, 4 Nov 2014 20:28:08 +0100 -Subject: [PATCH] units: make systemd-journald.service Type=notify - -It already calls sd_notify(), so it looks like an oversight. - -Without it, its ordering to systemd-journal-flush.service is -non-deterministic and the SIGUSR1 from flushing may kill journald before -it has its signal handlers set up. - -https://bugs.freedesktop.org/show_bug.cgi?id=85871 -https://bugzilla.redhat.com/show_bug.cgi?id=1159641 - -(from upstream commit 87a38c20196a4aeb56b6ba71d688eefd0b21c30) ---- - units/systemd-journald.service.in | 1 + - 1 file changed, 1 insertion(+) - -diff --git a/units/systemd-journald.service.in b/units/systemd-journald.service.in -index 4de38fa..441d5b1 100644 ---- a/units/systemd-journald.service.in -+++ b/units/systemd-journald.service.in -@@ -14,6 +14,7 @@ After=systemd-journald.socket systemd-journald-dev-log.socket syslog.socket - Before=sysinit.target - - [Service] -+Type=notify - Sockets=systemd-journald.socket systemd-journald-dev-log.socket - ExecStart=@rootlibexecdir@/systemd-journald - Restart=always --- -2.1.0 - diff --git a/0003-nspawn-ignore-EEXIST-when-creating-mount-point.patch b/0003-nspawn-ignore-EEXIST-when-creating-mount-point.patch new file mode 100644 index 0000000..ef616ff --- /dev/null +++ b/0003-nspawn-ignore-EEXIST-when-creating-mount-point.patch @@ -0,0 +1,32 @@ +From 45c51a0b7f642419bf1f7cd396ab3653dcfd99a9 Mon Sep 17 00:00:00 2001 +From: Dave Reisner +Date: Wed, 29 Oct 2014 13:32:43 -0400 +Subject: [PATCH] nspawn: ignore EEXIST when creating mount point + +A combination of commits f3c80515c and 79d80fc14 cause nspawn to +silently fail with a commandline such as: + + # systemd-nspawn -D /build/extra-x86_64 --bind=/usr + +strace shows the culprit: + + [pid 27868] writev(2, [{"Failed to create mount point /build/extra-x86_64/usr: File exists", 82}, {"\n", 1}], 2) = 83 + +(cherry picked from commit 1ab19cb167b32967556eefd8f6d3df0e3de7d67d) +--- + src/nspawn/nspawn.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/nspawn/nspawn.c b/src/nspawn/nspawn.c +index b6d9bc631c..d88987a580 100644 +--- a/src/nspawn/nspawn.c ++++ b/src/nspawn/nspawn.c +@@ -758,7 +758,7 @@ static int mount_binds(const char *dest, char **l, bool ro) { + * and char devices. */ + if (S_ISDIR(source_st.st_mode)) { + r = mkdir_label(where, 0755); +- if (r < 0) { ++ if (r < 0 && errno != EEXIST) { + log_error("Failed to create mount point %s: %s", where, strerror(-r)); + + return r; diff --git a/0004-udev-path_id-update-comments.patch b/0004-udev-path_id-update-comments.patch new file mode 100644 index 0000000..3143526 --- /dev/null +++ b/0004-udev-path_id-update-comments.patch @@ -0,0 +1,40 @@ +From 4adcaf0458a128135a1b65777541a1d643044233 Mon Sep 17 00:00:00 2001 +From: Kay Sievers +Date: Thu, 30 Oct 2014 01:18:34 +0100 +Subject: [PATCH] udev: path_id - update comments + +(cherry picked from commit a42cdff19f2d34f12ceca0f40707421a8aaa2c2f) +--- + src/udev/udev-builtin-path_id.c | 12 ++++++------ + 1 file changed, 6 insertions(+), 6 deletions(-) + +diff --git a/src/udev/udev-builtin-path_id.c b/src/udev/udev-builtin-path_id.c +index 0d247f6b5a..df996cb17a 100644 +--- a/src/udev/udev-builtin-path_id.c ++++ b/src/udev/udev-builtin-path_id.c +@@ -548,9 +548,9 @@ static int builtin_path_id(struct udev_device *dev, int argc, char *argv[], bool + } + + /* +- * Do return devices with have an unknown type of parent device, they +- * might produce conflicting IDs below multiple independent parent +- * devices. ++ * Do not return devices with an unknown parent device type. They ++ * might produce conflicting IDs if the parent does not provide a ++ * unique and predictable name. + */ + if (!supported_parent) { + free(path); +@@ -558,9 +558,9 @@ static int builtin_path_id(struct udev_device *dev, int argc, char *argv[], bool + } + + /* +- * Do not return a have-only a single-parent block devices, some +- * have entire hidden buses behind it, and not create predictable +- * IDs that way. ++ * Do not return block devices without a well-known transport. Some ++ * devices do not expose their buses and do not provide a unique ++ * and predictable name that way. + */ + if (streq(udev_device_get_subsystem(dev), "block") && !supported_transport) { + free(path); diff --git a/0005-bash-completion-rework-startable-restartable-units-o.patch b/0005-bash-completion-rework-startable-restartable-units-o.patch new file mode 100644 index 0000000..e1c8bfd --- /dev/null +++ b/0005-bash-completion-rework-startable-restartable-units-o.patch @@ -0,0 +1,71 @@ +From 147a1201a526b3eac5ee6b0add543d5061db9943 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= +Date: Wed, 29 Oct 2014 22:25:33 -0400 +Subject: [PATCH] bash-completion: rework startable/restartable units once more + +I tried to use 'systemctl --all list-units' to filter unit files, but +this always filters out unit files which are not loaded. We want to complete +systemctl start with those units too, so this approach is not going to work. + +New version is rather slow, but hopefully correct. + +(cherry picked from commit 9ff8af5460d57dfab78a1137ec743b539715e82a) +--- + shell-completion/bash/systemctl.in | 27 ++++++++++++++------------- + 1 file changed, 14 insertions(+), 13 deletions(-) + +diff --git a/shell-completion/bash/systemctl.in b/shell-completion/bash/systemctl.in +index 1c44a8df01..9e538a9a5b 100644 +--- a/shell-completion/bash/systemctl.in ++++ b/shell-completion/bash/systemctl.in +@@ -52,20 +52,23 @@ __filter_units_by_property () { + } + + __get_all_units () { { __systemctl $1 list-unit-files; __systemctl $1 list-units --all; } \ +- | { while read -r a b; do echo " $a"; done; }; } ++ | { while read -r a b; do [[ $a =~ @\. ]] || echo " $a"; done; }; } + __get_template_names () { __systemctl $1 list-unit-files \ + | { while read -r a b; do [[ $a =~ @\. ]] && echo " ${a%%@.*}@"; done; }; } + + __get_active_units () { __systemctl $1 list-units \ + | { while read -r a b; do echo " $a"; done; }; } + __get_startable_units () { +- # find inactive or failed units, filter out masked and not-found +- __systemctl $1 list-units --state inactive,failed -- $( __get_all_units ) | \ +- { while read -r a b c d; do [[ $b == "loaded" ]] && echo " $a"; done; }; } ++ # find startable inactive units ++ __filter_units_by_property $mode LoadState loaded $( ++ __filter_units_by_property $mode ActiveState inactive $( ++ __filter_units_by_property $mode CanStart yes $( __get_all_units ))) ++} + __get_restartable_units () { +- # find !masked, filter out masked and not-found +- __systemctl $1 list-units --state active,inactive,failed -- $( __get_all_units ) | \ +- { while read -r a b c d; do [[ $b == "loaded" ]] && echo " $a"; done; }; } ++ # filter out masked and not-found ++ __filter_units_by_property $mode LoadState loaded $( ++ __filter_units_by_property $mode CanStart yes $( __get_all_units )) ++} + __get_failed_units () { __systemctl $1 list-units \ + | { while read -r a b c d; do [[ $c == "failed" ]] && echo " $a"; done; }; } + __get_enabled_units () { __systemctl $1 list-unit-files \ +@@ -186,15 +189,13 @@ _systemctl () { + compopt -o filenames + + elif __contains_word "$verb" ${VERBS[STARTABLE_UNITS]}; then +- comps=$( __filter_units_by_property $mode CanStart yes \ +- $( __get_startable_units $mode); +- __get_template_names $mode) ++ comps=$( __get_startable_units $mode; ++ __get_template_names $mode) + compopt -o filenames + + elif __contains_word "$verb" ${VERBS[RESTARTABLE_UNITS]}; then +- comps=$( __filter_units_by_property $mode CanStart yes \ +- $( __get_restartable_units $mode); \ +- __get_template_names $mode) ++ comps=$( __get_restartable_units $mode; ++ __get_template_names $mode) + compopt -o filenames + + elif __contains_word "$verb" ${VERBS[STOPPABLE_UNITS]}; then diff --git a/0006-systemctl-let-list-units-unit-files-honour-type.patch b/0006-systemctl-let-list-units-unit-files-honour-type.patch new file mode 100644 index 0000000..3374b11 --- /dev/null +++ b/0006-systemctl-let-list-units-unit-files-honour-type.patch @@ -0,0 +1,98 @@ +From 6ce0f84be6b567660fc4ad4e766ef14217392c05 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= +Date: Wed, 29 Oct 2014 22:46:30 -0400 +Subject: [PATCH] systemctl: let list-{units,unit-files } honour --type + +The docs don't clarify what is expected, but I don't see any reason +why --type should be ignored. + +Also restucture the compund conditions into separate clauses for +easier reading. + +(cherry picked from commit 6c71341aeecc3d092ed90f66e1b2c481b8e260ff) +--- + src/systemctl/systemctl.c | 48 ++++++++++++++++++++++++++++++++++++----------- + 1 file changed, 37 insertions(+), 11 deletions(-) + +diff --git a/src/systemctl/systemctl.c b/src/systemctl/systemctl.c +index 28eaa6a847..b71040be40 100644 +--- a/src/systemctl/systemctl.c ++++ b/src/systemctl/systemctl.c +@@ -301,21 +301,37 @@ static int compare_unit_info(const void *a, const void *b) { + } + + static bool output_show_unit(const UnitInfo *u, char **patterns) { +- const char *dot; +- + if (!strv_isempty(patterns)) { + char **pattern; + + STRV_FOREACH(pattern, patterns) + if (fnmatch(*pattern, u->id, FNM_NOESCAPE) == 0) +- return true; ++ goto next; + return false; + } + +- return (!arg_types || ((dot = strrchr(u->id, '.')) && +- strv_find(arg_types, dot+1))) && +- (arg_all || !(streq(u->active_state, "inactive") +- || u->following[0]) || u->job_id > 0); ++next: ++ if (arg_types) { ++ const char *dot; ++ ++ dot = strrchr(u->id, '.'); ++ if (!dot) ++ return false; ++ ++ if (!strv_find(arg_types, dot+1)) ++ return false; ++ } ++ ++ if (arg_all) ++ return true; ++ ++ if (u->job_id > 0) ++ return true; ++ ++ if (streq(u->active_state, "inactive") || u->following[0]) ++ return false; ++ ++ return true; + } + + static int output_units_list(const UnitInfo *unit_infos, unsigned c) { +@@ -1231,18 +1247,28 @@ static int compare_unit_file_list(const void *a, const void *b) { + } + + static bool output_show_unit_file(const UnitFileList *u, char **patterns) { +- const char *dot; +- + if (!strv_isempty(patterns)) { + char **pattern; + + STRV_FOREACH(pattern, patterns) + if (fnmatch(*pattern, basename(u->path), FNM_NOESCAPE) == 0) +- return true; ++ goto next; + return false; + } + +- return !arg_types || ((dot = strrchr(u->path, '.')) && strv_find(arg_types, dot+1)); ++next: ++ if (!strv_isempty(arg_types)) { ++ const char *dot; ++ ++ dot = strrchr(u->path, '.'); ++ if (!dot) ++ return false; ++ ++ if (!strv_find(arg_types, dot+1)) ++ return false; ++ } ++ ++ return true; + } + + static void output_unit_file_list(const UnitFileList *units, unsigned c) { diff --git a/0007-systemctl-obey-state-in-list-unit-files.patch b/0007-systemctl-obey-state-in-list-unit-files.patch new file mode 100644 index 0000000..16b0b88 --- /dev/null +++ b/0007-systemctl-obey-state-in-list-unit-files.patch @@ -0,0 +1,26 @@ +From 963449549e8f4225c90c13fec9ac845d7f9aed43 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= +Date: Wed, 29 Oct 2014 22:51:00 -0400 +Subject: [PATCH] systemctl: obey --state in list-unit-files + +(cherry picked from commit fec1530e6b5b8d6dc352c7338010357126e84621) +--- + src/systemctl/systemctl.c | 5 +++++ + 1 file changed, 5 insertions(+) + +diff --git a/src/systemctl/systemctl.c b/src/systemctl/systemctl.c +index b71040be40..8481a9b20c 100644 +--- a/src/systemctl/systemctl.c ++++ b/src/systemctl/systemctl.c +@@ -1268,6 +1268,11 @@ next: + return false; + } + ++ if (!strv_isempty(arg_states)) { ++ if (!strv_find(arg_states, unit_file_state_to_string(u->state))) ++ return false; ++ } ++ + return true; + } + diff --git a/0008-bash-completion-use-improved-filtering-to-make-thing.patch b/0008-bash-completion-use-improved-filtering-to-make-thing.patch new file mode 100644 index 0000000..7b201a4 --- /dev/null +++ b/0008-bash-completion-use-improved-filtering-to-make-thing.patch @@ -0,0 +1,40 @@ +From e44731b91ad77e04bf26de21d1605bbe342577c6 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= +Date: Wed, 29 Oct 2014 23:06:58 -0400 +Subject: [PATCH] bash-completion: use improved filtering to make things faster + +(cherry picked from commit 372b221166eb586c4f767969f442ed940e21f353) +--- + shell-completion/bash/systemctl.in | 16 +++++++++++----- + 1 file changed, 11 insertions(+), 5 deletions(-) + +diff --git a/shell-completion/bash/systemctl.in b/shell-completion/bash/systemctl.in +index 9e538a9a5b..9e98a1850e 100644 +--- a/shell-completion/bash/systemctl.in ++++ b/shell-completion/bash/systemctl.in +@@ -60,14 +60,20 @@ __get_active_units () { __systemctl $1 list-units \ + | { while read -r a b; do echo " $a"; done; }; } + __get_startable_units () { + # find startable inactive units +- __filter_units_by_property $mode LoadState loaded $( +- __filter_units_by_property $mode ActiveState inactive $( +- __filter_units_by_property $mode CanStart yes $( __get_all_units ))) ++ __filter_units_by_property $mode ActiveState inactive $( ++ __filter_units_by_property $mode CanStart yes $( ++ __systemctl $mode list-unit-files --state enabled,disabled,static | \ ++ { while read -r a b; do [[ $a =~ @\. ]] || echo " $a"; done; } ++ __systemctl $mode list-units --state inactive,failed | \ ++ { while read -r a b; do echo " $a"; done; } )) + } + __get_restartable_units () { + # filter out masked and not-found +- __filter_units_by_property $mode LoadState loaded $( +- __filter_units_by_property $mode CanStart yes $( __get_all_units )) ++ __filter_units_by_property $mode CanStart yes $( ++ __systemctl $mode list-unit-files --state enabled,disabled,static | \ ++ { while read -r a b; do [[ $a =~ @\. ]] || echo " $a"; done; } ++ __systemctl $mode list-units | \ ++ { while read -r a b; do echo " $a"; done; } ) + } + __get_failed_units () { __systemctl $1 list-units \ + | { while read -r a b c d; do [[ $c == "failed" ]] && echo " $a"; done; }; } diff --git a/0009-zsh-completion-update-start-restart-completions.patch b/0009-zsh-completion-update-start-restart-completions.patch new file mode 100644 index 0000000..3f311ff --- /dev/null +++ b/0009-zsh-completion-update-start-restart-completions.patch @@ -0,0 +1,69 @@ +From b06eb4603e2cdd45a78a2b74e19fafc2d784e906 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= +Date: Wed, 29 Oct 2014 23:47:55 -0400 +Subject: [PATCH] zsh-completion: update start/restart completions + +Now zsh should behave the same for those two subcommands as bash. + +(cherry picked from commit 81333ecf9d5497f8aa95f7fec23c67b869d5abf9) +--- + shell-completion/zsh/_systemctl.in | 28 +++++++++++++++++++++------- + 1 file changed, 21 insertions(+), 7 deletions(-) + +diff --git a/shell-completion/zsh/_systemctl.in b/shell-completion/zsh/_systemctl.in +index 44981fe85d..7eefe53aec 100644 +--- a/shell-completion/zsh/_systemctl.in ++++ b/shell-completion/zsh/_systemctl.in +@@ -141,13 +141,29 @@ _filter_units_by_property() { + done + } + +-_systemctl_all_units() { { __systemctl list-unit-files; __systemctl list-units --all; } | { while read -r a b; do echo -E - " $a"; done; } } ++_systemctl_all_units() { { __systemctl list-unit-files; __systemctl list-units --all; } | { while read -r a b; do [[ $a =~ @\. ]] || echo -E - " $a"; done; } } + _systemctl_get_template_names() { __systemctl list-unit-files | { while read -r a b; do [[ $a =~ @\. ]] && echo -E - " ${a%%@.*}@"; done; } } + + + _systemctl_active_units() {_sys_active_units=( $(__systemctl list-units | { while read -r a b; do echo -E - " $a"; done; }) )} +-_systemctl_startable_units(){_sys_startable_units=($(__systemctl list-units --state inactive,failed -- $(_systemctl_all_units) | { while read -r a b c d; do [[ $b == "loaded" ]] && echo -E - " $a"; done; }) )} +-_systemctl_restartable_units(){_sys_restartable_units=($(__systemctl list-units --state inactive,failed,active -- $(_systemctl_all_units) | { while read -r a b c d; do [[ $b == "loaded" ]] && echo -E - " $a"; done; }) )} ++ ++_systemctl_startable_units(){ ++ _sys_startable_units=(_filter_units_by_property ActiveState inactive $( ++ _filter_units_by_property CanStart yes $( ++ __systemctl $mode list-unit-files --state enabled,disabled,static | \ ++ { while read -r a b; do [[ $a =~ @\. ]] || echo -E - " $a"; done; } ++ __systemctl $mode list-units --state inactive,failed | \ ++ { while read -r a b; do echo -E - " $a"; done; } ))) ++} ++ ++_systemctl_restartable_units(){ ++ _sys_restartable_units=(_filter_units_by_property CanStart yes $( ++ __systemctl $mode list-unit-files --state enabled,disabled,static | \ ++ { while read -r a b; do [[ $a =~ @\. ]] || echo -E - " $a"; done; } ++ __systemctl $mode list-units | \ ++ { while read -r a b; do echo -E - " $a"; done; } )) ++} ++ + _systemctl_failed_units() {_sys_failed_units=( $(__systemctl list-units --failed | { while read -r a b; do echo -E - " $a"; done; }) )} + _systemctl_enabled_units() {_sys_enabled_units=( $(__systemctl list-unit-files | { while read -r a b; do [[ $b == "enabled" ]] && echo -E - " $a"; done; }) )} + _systemctl_disabled_units(){_sys_disabled_units=($(__systemctl list-unit-files | { while read -r a b; do [[ $b == "disabled" ]] && echo -E - " $a"; done; }) )} +@@ -194,8 +210,7 @@ done + (( $+functions[_systemctl_start] )) || _systemctl_start() + { + _systemctl_startable_units +- compadd "$@" - $( _filter_units_by_property CanStart yes \ +- ${_sys_startable_units[*]} ) ++ compadd "$@" - ${_sys_startable_units[*]} $(_systemctl_get_template_names) + } + + # Completion functions for STOPPABLE_UNITS +@@ -231,8 +246,7 @@ for fun in restart reload-or-restart ; do + (( $+functions[_systemctl_$fun] )) || _systemctl_$fun() + { + _systemctl_restartable_units +- compadd "$@" - $( _filter_units_by_property CanStart yes \ +- ${_sys_restartable_units[*]} ) ++ compadd "$@" - ${_sys_restartable_units[*]} $(_systemctl_get_template_names) + } + done + diff --git a/0010-keymap-Ignore-brightness-keys-on-Dell-Inspiron-1520-.patch b/0010-keymap-Ignore-brightness-keys-on-Dell-Inspiron-1520-.patch new file mode 100644 index 0000000..b32d269 --- /dev/null +++ b/0010-keymap-Ignore-brightness-keys-on-Dell-Inspiron-1520-.patch @@ -0,0 +1,39 @@ +From 71b0b96d1ced2ab5d0fe67963e112d50c15f38e7 Mon Sep 17 00:00:00 2001 +From: Hans de Goede +Date: Thu, 30 Oct 2014 10:15:54 +0100 +Subject: [PATCH] keymap: Ignore brightness keys on Dell Inspiron 1520 to avoid + double events + +On the Dell Inspiron 1520 both the atkbd and acpi-video input devices report +an event for pressing the brightness up / down key-combos, resulting in user +space seeing double events and increasing / decreasing the brightness 2 steps +for each keypress. + +This hwdb snippet suppresses the atkbd events, making the Inspiron 1520 work +like most modern laptops which emit brightness up / down events through +acpi-video only. + +Reported by Pavel Malyshev + +https://bugzilla.redhat.com/show_bug.cgi?id=1141525 +(cherry picked from commit aba248ee6b1eb10baf3d89eca2ad7569459af6ab) +--- + hwdb/60-keyboard.hwdb | 5 +++++ + 1 file changed, 5 insertions(+) + +diff --git a/hwdb/60-keyboard.hwdb b/hwdb/60-keyboard.hwdb +index 06caba9791..d2ca965c90 100644 +--- a/hwdb/60-keyboard.hwdb ++++ b/hwdb/60-keyboard.hwdb +@@ -230,6 +230,11 @@ keyboard:dmi:bvn*:bvr*:bd*:svnDell*:pnInspiron*1110:pvr* + keyboard:dmi:bvn*:bvr*:bd*:svnDell*:pnInspiron*1210:pvr* + KEYBOARD_KEY_84=wlan + ++# Dell Inspiron 1520 ++keyboard:dmi:bvn*:bvr*:bd*:svnDell*:pnInspiron*1520:pvr* ++ KEYBOARD_KEY_85=unknown # Brightness Down, also emitted by acpi-video, ignore ++ KEYBOARD_KEY_86=unknown # Brightness Up, also emitted by acpi-video, ignore ++ + # Latitude XT2 + keyboard:dmi:bvn*:bvr*:bd*:svnDell*:pnLatitude*XT2:pvr* + KEYBOARD_KEY_9b=up # tablet rocker up diff --git a/0011-sysusers-Preserve-ownership-and-mode-on-etc-passwd-a.patch b/0011-sysusers-Preserve-ownership-and-mode-on-etc-passwd-a.patch new file mode 100644 index 0000000..72b577b --- /dev/null +++ b/0011-sysusers-Preserve-ownership-and-mode-on-etc-passwd-a.patch @@ -0,0 +1,161 @@ +From 455c0ac1d254ceecb30625fa01e9fd3b47956693 Mon Sep 17 00:00:00 2001 +From: Colin Guthrie +Date: Wed, 29 Oct 2014 14:03:41 +0000 +Subject: [PATCH] sysusers: Preserve ownership and mode on /etc/passwd and + friends + +When running sysusers we would clobber file ownership and permissions +on the files /etc/passwd, /etc/group and /etc/[g]shadow. + +This simply preserves the ownership and mode if existing files are +found. + +(cherry picked from commit e3c72c21d62aadabf4df436c3e2c7219eeeccc1c) +--- + src/sysusers/sysusers.c | 61 +++++++++++++++++++++++++++++++++---------------- + 1 file changed, 41 insertions(+), 20 deletions(-) + +diff --git a/src/sysusers/sysusers.c b/src/sysusers/sysusers.c +index 9b9be96a0a..c133dc5f10 100644 +--- a/src/sysusers/sysusers.c ++++ b/src/sysusers/sysusers.c +@@ -358,6 +358,7 @@ static int write_files(void) { + _cleanup_fclose_ FILE *passwd = NULL, *group = NULL, *shadow = NULL, *gshadow = NULL; + _cleanup_free_ char *passwd_tmp = NULL, *group_tmp = NULL, *shadow_tmp = NULL, *gshadow_tmp = NULL; + const char *passwd_path = NULL, *group_path = NULL, *shadow_path = NULL, *gshadow_path = NULL; ++ struct stat st; + bool group_changed = false; + Iterator iterator; + Item *i; +@@ -372,15 +373,17 @@ static int write_files(void) { + if (r < 0) + goto finish; + +- if (fchmod(fileno(group), 0644) < 0) { +- r = -errno; +- goto finish; +- } +- + original = fopen(group_path, "re"); + if (original) { + struct group *gr; + ++ if (fstat(fileno(original), &st) < 0 || ++ fchmod(fileno(group), st.st_mode & 07777) < 0 || ++ fchown(fileno(group), st.st_uid, st.st_gid) < 0) { ++ r = -errno; ++ goto finish; ++ } ++ + errno = 0; + while ((gr = fgetgrent(original))) { + /* Safety checks against name and GID +@@ -418,6 +421,9 @@ static int write_files(void) { + } else if (errno != ENOENT) { + r = -errno; + goto finish; ++ } else if (fchmod(fileno(group), 0644) < 0) { ++ r = -errno; ++ goto finish; + } + + HASHMAP_FOREACH(i, todo_gids, iterator) { +@@ -449,15 +455,17 @@ static int write_files(void) { + if (r < 0) + goto finish; + +- if (fchmod(fileno(gshadow), 0000) < 0) { +- r = -errno; +- goto finish; +- } +- + original = fopen(gshadow_path, "re"); + if (original) { + struct sgrp *sg; + ++ if (fstat(fileno(original), &st) < 0 || ++ fchmod(fileno(gshadow), st.st_mode & 07777) < 0 || ++ fchown(fileno(gshadow), st.st_uid, st.st_gid) < 0) { ++ r = -errno; ++ goto finish; ++ } ++ + errno = 0; + while ((sg = fgetsgent(original))) { + +@@ -483,6 +491,9 @@ static int write_files(void) { + } else if (errno != ENOENT) { + r = -errno; + goto finish; ++ } else if (fchmod(fileno(gshadow), 0000) < 0) { ++ r = -errno; ++ goto finish; + } + + HASHMAP_FOREACH(i, todo_gids, iterator) { +@@ -513,15 +524,17 @@ static int write_files(void) { + if (r < 0) + goto finish; + +- if (fchmod(fileno(passwd), 0644) < 0) { +- r = -errno; +- goto finish; +- } +- + original = fopen(passwd_path, "re"); + if (original) { + struct passwd *pw; + ++ if (fstat(fileno(original), &st) < 0 || ++ fchmod(fileno(passwd), st.st_mode & 07777) < 0 || ++ fchown(fileno(passwd), st.st_uid, st.st_gid) < 0) { ++ r = -errno; ++ goto finish; ++ } ++ + errno = 0; + while ((pw = fgetpwent(original))) { + +@@ -552,6 +565,9 @@ static int write_files(void) { + } else if (errno != ENOENT) { + r = -errno; + goto finish; ++ } else if (fchmod(fileno(passwd), 0644) < 0) { ++ r = -errno; ++ goto finish; + } + + HASHMAP_FOREACH(i, todo_uids, iterator) { +@@ -596,15 +612,17 @@ static int write_files(void) { + if (r < 0) + goto finish; + +- if (fchmod(fileno(shadow), 0000) < 0) { +- r = -errno; +- goto finish; +- } +- + original = fopen(shadow_path, "re"); + if (original) { + struct spwd *sp; + ++ if (fstat(fileno(original), &st) < 0 || ++ fchmod(fileno(shadow), st.st_mode & 07777) < 0 || ++ fchown(fileno(shadow), st.st_uid, st.st_gid) < 0) { ++ r = -errno; ++ goto finish; ++ } ++ + errno = 0; + while ((sp = fgetspent(original))) { + +@@ -629,6 +647,9 @@ static int write_files(void) { + } else if (errno != ENOENT) { + r = -errno; + goto finish; ++ } else if (fchmod(fileno(shadow), 0000) < 0) { ++ r = -errno; ++ goto finish; + } + + lstchg = (long) (now(CLOCK_REALTIME) / USEC_PER_DAY); diff --git a/0012-snapshot-return-error-when-snapshot-exists.patch b/0012-snapshot-return-error-when-snapshot-exists.patch new file mode 100644 index 0000000..784f339 --- /dev/null +++ b/0012-snapshot-return-error-when-snapshot-exists.patch @@ -0,0 +1,23 @@ +From bf69d42ba609389fb858c872b1523df06b382c1b Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= +Date: Tue, 28 Oct 2014 12:36:17 -0400 +Subject: [PATCH] snapshot: return error when snapshot exists + +(cherry picked from commit 7cabba07745b388497e8c0fc19b61984167fd474) +--- + src/core/snapshot.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/core/snapshot.c b/src/core/snapshot.c +index 5eed615a15..c2678cbe6e 100644 +--- a/src/core/snapshot.c ++++ b/src/core/snapshot.c +@@ -208,7 +208,7 @@ int snapshot_create(Manager *m, const char *name, bool cleanup, sd_bus_error *e, + return sd_bus_error_setf(e, SD_BUS_ERROR_INVALID_ARGS, "Unit name %s lacks snapshot suffix.", name); + + if (manager_get_unit(m, name)) +- sd_bus_error_setf(e, BUS_ERROR_UNIT_EXISTS, "Snapshot %s exists already.", name); ++ return sd_bus_error_setf(e, BUS_ERROR_UNIT_EXISTS, "Snapshot %s exists already.", name); + + } else { + diff --git a/0013-sd-dhcp-client-clean-up-raw-socket-sd_event_source-w.patch b/0013-sd-dhcp-client-clean-up-raw-socket-sd_event_source-w.patch new file mode 100644 index 0000000..553eaf2 --- /dev/null +++ b/0013-sd-dhcp-client-clean-up-raw-socket-sd_event_source-w.patch @@ -0,0 +1,30 @@ +From 25c530dfadb25190da84efa435102a0b525b8487 Mon Sep 17 00:00:00 2001 +From: Dan Williams +Date: Thu, 30 Oct 2014 14:23:00 -0500 +Subject: [PATCH] sd-dhcp-client: clean up raw socket sd_event_source when + creating new UDP socket + +The raw socket sd_event_source used for DHCP server solicitations +was simply dropped on the floor when creating the new UDP socket +after a lease has been acquired. Clean it up properly so we're +not still listening and responding to events on it. + +(cherry picked from commit affaa94fc38a980a70534f70f6a6c58a4129b062) +--- + src/libsystemd-network/sd-dhcp-client.c | 3 +++ + 1 file changed, 3 insertions(+) + +diff --git a/src/libsystemd-network/sd-dhcp-client.c b/src/libsystemd-network/sd-dhcp-client.c +index 0eba4c379d..1f7f238ca0 100644 +--- a/src/libsystemd-network/sd-dhcp-client.c ++++ b/src/libsystemd-network/sd-dhcp-client.c +@@ -1269,6 +1269,9 @@ static int client_handle_message(sd_dhcp_client *client, DHCPMessage *message, + if (r >= 0) { + client->timeout_resend = + sd_event_source_unref(client->timeout_resend); ++ client->receive_message = ++ sd_event_source_unref(client->receive_message); ++ client->fd = asynchronous_close(client->fd); + + if (IN_SET(client->state, DHCP_STATE_REQUESTING, + DHCP_STATE_REBOOTING)) diff --git a/0014-remove-references-of-readahead.patch b/0014-remove-references-of-readahead.patch new file mode 100644 index 0000000..4598940 --- /dev/null +++ b/0014-remove-references-of-readahead.patch @@ -0,0 +1,54 @@ +From cac66621b23029e0dbab0cbcf8720e602e92eafd Mon Sep 17 00:00:00 2001 +From: Ronny Chevalier +Date: Thu, 25 Sep 2014 22:46:37 +0200 +Subject: [PATCH] remove references of readahead + +(cherry picked from commit cb607ecb84b3cb7299438ca6f7fab705b0a6de45) +--- + .gitignore | 1 - + README | 1 - + TODO | 7 ------- + 3 files changed, 9 deletions(-) + +diff --git a/.gitignore b/.gitignore +index 0b71f0973b..14f169135d 100644 +--- a/.gitignore ++++ b/.gitignore +@@ -101,7 +101,6 @@ + /systemd-quotacheck + /systemd-random-seed + /systemd-rc-local-generator +-/systemd-readahead + /systemd-remount-api-vfs + /systemd-remount-fs + /systemd-reply-password +diff --git a/README b/README +index 99b66a8396..144036717c 100644 +--- a/README ++++ b/README +@@ -30,7 +30,6 @@ AUTHOR: + + LICENSE: + LGPLv2.1+ for all code +- - except sd-readahead.[ch] which is MIT + - except src/shared/MurmurHash2.c which is Public Domain + - except src/shared/siphash24.c which is CC0 Public Domain + - except src/journal/lookup3.c which is Public Domain +diff --git a/TODO b/TODO +index b07d664715..abe89b78a0 100644 +--- a/TODO ++++ b/TODO +@@ -646,13 +646,6 @@ Features: + + * and a dbus call to generate target from current state + +-* readahead: +- - drop /.readahead on bigger upgrades with yum +- - move readahead files into /var (look for them with .path units?) +- - readahead: use BTRFS_IOC_DEFRAG_RANGE instead of BTRFS_IOC_DEFRAG ioctl, with START_IO +- - readahead: when bumping /sys readahead variable save mtime and compare later to detect changes +- - readahead: make use of EXT4_IOC_MOVE_EXT, as used by http://e4rat.sourceforge.net/ +- + * GC unreferenced jobs (such as .device jobs) + + * write blog stories about: diff --git a/0015-shared-add-missing-includes.patch b/0015-shared-add-missing-includes.patch new file mode 100644 index 0000000..436a52d --- /dev/null +++ b/0015-shared-add-missing-includes.patch @@ -0,0 +1,40 @@ +From cda53bb5a56c508e7ad4e8cc1cbb1f4be1fbb2bf Mon Sep 17 00:00:00 2001 +From: Ronny Chevalier +Date: Sun, 12 Oct 2014 17:59:03 +0200 +Subject: [PATCH] shared: add missing includes + +(cherry picked from commit 81a12ba6ec2f8514b7d35f0c39a96cc74bb14019) +--- + src/shared/copy.h | 3 +++ + src/shared/locale-util.h | 4 ++++ + 2 files changed, 7 insertions(+) + +diff --git a/src/shared/copy.h b/src/shared/copy.h +index 0bf2598f60..6b93107fab 100644 +--- a/src/shared/copy.h ++++ b/src/shared/copy.h +@@ -21,6 +21,9 @@ + along with systemd; If not, see . + ***/ + ++#include ++#include ++ + int copy_file(const char *from, const char *to, int flags, mode_t mode); + int copy_tree(const char *from, const char *to, bool merge); + int copy_bytes(int fdf, int fdt, off_t max_bytes); +diff --git a/src/shared/locale-util.h b/src/shared/locale-util.h +index d7a3e4fae6..e48aa3d9af 100644 +--- a/src/shared/locale-util.h ++++ b/src/shared/locale-util.h +@@ -21,6 +21,10 @@ + along with systemd; If not, see . + ***/ + ++#include ++ ++#include "macro.h" ++ + typedef enum LocaleVariable { + /* We don't list LC_ALL here on purpose. People should be + * using LANG instead. */ diff --git a/0016-shared-fix-typo.patch b/0016-shared-fix-typo.patch new file mode 100644 index 0000000..1c63b09 --- /dev/null +++ b/0016-shared-fix-typo.patch @@ -0,0 +1,32 @@ +From 0e0f3ce5c1c3d4d112e2a4534fc895aca463e460 Mon Sep 17 00:00:00 2001 +From: Ronny Chevalier +Date: Thu, 16 Oct 2014 23:22:06 +0200 +Subject: [PATCH] shared: fix typo + +(cherry picked from commit d3774a1b15ea86f6156269e7ed813830f0c4abb8) +--- + src/shared/capability.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/src/shared/capability.c b/src/shared/capability.c +index d2b901337f..0226542c6c 100644 +--- a/src/shared/capability.c ++++ b/src/shared/capability.c +@@ -228,7 +228,7 @@ int drop_privileges(uid_t uid, gid_t gid, uint64_t keep_capabilities) { + * which we want to avoid. */ + + if (setresgid(gid, gid, gid) < 0) { +- log_error("Failed change group ID: %m"); ++ log_error("Failed to change group ID: %m"); + return -errno; + } + +@@ -244,7 +244,7 @@ int drop_privileges(uid_t uid, gid_t gid, uint64_t keep_capabilities) { + + r = setresuid(uid, uid, uid); + if (r < 0) { +- log_error("Failed change user ID: %m"); ++ log_error("Failed to change user ID: %m"); + return -errno; + } + diff --git a/0017-shared-install-avoid-prematurely-rejecting-missing-u.patch b/0017-shared-install-avoid-prematurely-rejecting-missing-u.patch new file mode 100644 index 0000000..6660de1 --- /dev/null +++ b/0017-shared-install-avoid-prematurely-rejecting-missing-u.patch @@ -0,0 +1,37 @@ +From 471a21a8647c54a0a9c7334a7dde4e6dd1712248 Mon Sep 17 00:00:00 2001 +From: Dave Reisner +Date: Thu, 30 Oct 2014 20:12:05 -0400 +Subject: [PATCH] shared/install: avoid prematurely rejecting "missing" units + +f7101b7368df copied some logic to prevent enabling masked units, but +also added a check which causes attempts to enable templated units to +fail. Since we know the logic beyond this check will properly handle +units which truly do not exist, we can rely on the unit file state +comparison to suffice for expressing the intent of f7101b7368df. + +ref: https://bugs.archlinux.org/task/42616 +(cherry picked from commit 0ffce503cd6e5a5ff5ba5cd1cc23684cfb8bb9e3) +--- + src/shared/install.c | 8 +++----- + 1 file changed, 3 insertions(+), 5 deletions(-) + +diff --git a/src/shared/install.c b/src/shared/install.c +index 035b44cc52..cab93e8dc6 100644 +--- a/src/shared/install.c ++++ b/src/shared/install.c +@@ -1620,12 +1620,10 @@ int unit_file_enable( + STRV_FOREACH(i, files) { + UnitFileState state; + ++ /* We only want to know if this unit is masked, so we ignore ++ * errors from unit_file_get_state, deferring other checks. ++ * This allows templated units to be enabled on the fly. */ + state = unit_file_get_state(scope, root_dir, *i); +- if (state < 0) { +- log_error("Failed to get unit file state for %s: %s", *i, strerror(-state)); +- return state; +- } +- + if (state == UNIT_FILE_MASKED || state == UNIT_FILE_MASKED_RUNTIME) { + log_error("Failed to enable unit: Unit %s is masked", *i); + return -ENOTSUP; diff --git a/0018-nspawn-don-t-make-up-1-as-error-code.patch b/0018-nspawn-don-t-make-up-1-as-error-code.patch new file mode 100644 index 0000000..793894f --- /dev/null +++ b/0018-nspawn-don-t-make-up-1-as-error-code.patch @@ -0,0 +1,75 @@ +From 9706b7533be86dad6303cf91a886a8491d2995f7 Mon Sep 17 00:00:00 2001 +From: Lennart Poettering +Date: Thu, 30 Oct 2014 20:53:23 +0100 +Subject: [PATCH] nspawn: don't make up -1 as error code + +(cherry picked from commit fddbb89c46ea5d39e52e361b390ea34a06cbb67c) +--- + src/nspawn/nspawn.c | 27 +++++++++++---------------- + 1 file changed, 11 insertions(+), 16 deletions(-) + +diff --git a/src/nspawn/nspawn.c b/src/nspawn/nspawn.c +index d88987a580..7e96efd425 100644 +--- a/src/nspawn/nspawn.c ++++ b/src/nspawn/nspawn.c +@@ -2931,33 +2931,30 @@ static int wait_for_container(pid_t pid, ContainerStatus *container) { + } + + switch (status.si_code) { ++ + case CLD_EXITED: + r = status.si_status; + if (r == 0) { + if (!arg_quiet) +- log_debug("Container %s exited successfully.", +- arg_machine); ++ log_debug("Container %s exited successfully.", arg_machine); + + *container = CONTAINER_TERMINATED; +- } else { +- log_error("Container %s failed with error code %i.", +- arg_machine, status.si_status); +- } ++ } else ++ log_error("Container %s failed with error code %i.", arg_machine, status.si_status); ++ + break; + + case CLD_KILLED: + if (status.si_status == SIGINT) { + if (!arg_quiet) +- log_info("Container %s has been shut down.", +- arg_machine); ++ log_info("Container %s has been shut down.", arg_machine); + + *container = CONTAINER_TERMINATED; + r = 0; + break; + } else if (status.si_status == SIGHUP) { + if (!arg_quiet) +- log_info("Container %s is being rebooted.", +- arg_machine); ++ log_info("Container %s is being rebooted.", arg_machine); + + *container = CONTAINER_REBOOTED; + r = 0; +@@ -2966,15 +2963,13 @@ static int wait_for_container(pid_t pid, ContainerStatus *container) { + /* CLD_KILLED fallthrough */ + + case CLD_DUMPED: +- log_error("Container %s terminated by signal %s.", +- arg_machine, signal_to_string(status.si_status)); +- r = -1; ++ log_error("Container %s terminated by signal %s.", arg_machine, signal_to_string(status.si_status)); ++ r = -EIO; + break; + + default: +- log_error("Container %s failed due to unknown reason.", +- arg_machine); +- r = -1; ++ log_error("Container %s failed due to unknown reason.", arg_machine); ++ r = -EIO; + break; + } + diff --git a/0019-units-don-t-order-journal-flushing-afte-remote-fs.ta.patch b/0019-units-don-t-order-journal-flushing-afte-remote-fs.ta.patch new file mode 100644 index 0000000..9c887bf --- /dev/null +++ b/0019-units-don-t-order-journal-flushing-afte-remote-fs.ta.patch @@ -0,0 +1,114 @@ +From cae7f26accc90031b04c6cedae10b54a6c854c87 Mon Sep 17 00:00:00 2001 +From: Lennart Poettering +Date: Fri, 31 Oct 2014 16:22:36 +0100 +Subject: [PATCH] units: don't order journal flushing afte remote-fs.target + +Instead, only depend on the actual file systems we need. + +This should solve dep loops on setups where remote-fs.target is moved +into late boot. + +(cherry picked from commit 919699ec301ea507edce4a619141ed22e789ac0d) +--- + src/nspawn/nspawn.c | 38 ++++++++++++++-------------------- + units/systemd-journal-flush.service.in | 3 ++- + 2 files changed, 18 insertions(+), 23 deletions(-) + +diff --git a/src/nspawn/nspawn.c b/src/nspawn/nspawn.c +index 7e96efd425..f332ade03e 100644 +--- a/src/nspawn/nspawn.c ++++ b/src/nspawn/nspawn.c +@@ -2911,8 +2911,8 @@ static int change_uid_gid(char **_home) { + * container argument. + * > 0 : The program executed in the container terminated with an + * error. The exit code of the program executed in the +- * container is returned. No change is made to the container +- * argument. ++ * container is returned. The container argument has been set ++ * to CONTAINER_TERMINATED. + * 0 : The container is being rebooted, has been shut down or exited + * successfully. The container argument has been set to either + * CONTAINER_TERMINATED or CONTAINER_REBOOTED. +@@ -2921,8 +2921,8 @@ static int change_uid_gid(char **_home) { + * error is indicated by a non-zero value. + */ + static int wait_for_container(pid_t pid, ContainerStatus *container) { +- int r; + siginfo_t status; ++ int r; + + r = wait_for_terminate(pid, &status); + if (r < 0) { +@@ -2933,44 +2933,38 @@ static int wait_for_container(pid_t pid, ContainerStatus *container) { + switch (status.si_code) { + + case CLD_EXITED: +- r = status.si_status; +- if (r == 0) { +- if (!arg_quiet) +- log_debug("Container %s exited successfully.", arg_machine); ++ if (status.si_status == 0) { ++ log_full(arg_quiet ? LOG_DEBUG : LOG_INFO, "Container %s exited successfully.", arg_machine); + +- *container = CONTAINER_TERMINATED; + } else +- log_error("Container %s failed with error code %i.", arg_machine, status.si_status); ++ log_full(arg_quiet ? LOG_DEBUG : LOG_INFO, "Container %s failed with error code %i.", arg_machine, status.si_status); + +- break; ++ *container = CONTAINER_TERMINATED; ++ return status.si_status; + + case CLD_KILLED: + if (status.si_status == SIGINT) { +- if (!arg_quiet) +- log_info("Container %s has been shut down.", arg_machine); + ++ log_full(arg_quiet ? LOG_DEBUG : LOG_INFO, "Container %s has been shut down.", arg_machine); + *container = CONTAINER_TERMINATED; +- r = 0; +- break; ++ return 0; ++ + } else if (status.si_status == SIGHUP) { +- if (!arg_quiet) +- log_info("Container %s is being rebooted.", arg_machine); + ++ log_full(arg_quiet ? LOG_DEBUG : LOG_INFO, "Container %s is being rebooted.", arg_machine); + *container = CONTAINER_REBOOTED; +- r = 0; +- break; ++ return 0; + } ++ + /* CLD_KILLED fallthrough */ + + case CLD_DUMPED: + log_error("Container %s terminated by signal %s.", arg_machine, signal_to_string(status.si_status)); +- r = -EIO; +- break; ++ return -EIO; + + default: + log_error("Container %s failed due to unknown reason.", arg_machine); +- r = -EIO; +- break; ++ return -EIO; + } + + return r; +diff --git a/units/systemd-journal-flush.service.in b/units/systemd-journal-flush.service.in +index 699670bb4e..2612220e2e 100644 +--- a/units/systemd-journal-flush.service.in ++++ b/units/systemd-journal-flush.service.in +@@ -10,8 +10,9 @@ Description=Trigger Flushing of Journal to Persistent Storage + Documentation=man:systemd-journald.service(8) man:journald.conf(5) + DefaultDependencies=no + Requires=systemd-journald.service +-After=systemd-journald.service local-fs.target remote-fs.target ++After=systemd-journald.service + Before=systemd-user-sessions.service systemd-tmpfiles-setup.service ++RequiresMountsFor=/var/log/journal + + [Service] + ExecStart=@rootbindir@/journalctl --flush diff --git a/0020-hwdb-Update-database-of-Bluetooth-company-identifier.patch b/0020-hwdb-Update-database-of-Bluetooth-company-identifier.patch new file mode 100644 index 0000000..1bc7d56 --- /dev/null +++ b/0020-hwdb-Update-database-of-Bluetooth-company-identifier.patch @@ -0,0 +1,75 @@ +From bc1912751bdb942cb36ccbadc823c0ba1377ec46 Mon Sep 17 00:00:00 2001 +From: Marcel Holtmann +Date: Fri, 31 Oct 2014 20:37:59 +0100 +Subject: [PATCH] hwdb: Update database of Bluetooth company identifiers + +(cherry picked from commit 5d20fde4a5c4dff4d7c737b545fbd13582d544c1) +--- + hwdb/20-bluetooth-vendor-product.hwdb | 57 +++++++++++++++++++++++++++++++++++ + 1 file changed, 57 insertions(+) + +diff --git a/hwdb/20-bluetooth-vendor-product.hwdb b/hwdb/20-bluetooth-vendor-product.hwdb +index ee2efdff2e..58ca87d69d 100644 +--- a/hwdb/20-bluetooth-vendor-product.hwdb ++++ b/hwdb/20-bluetooth-vendor-product.hwdb +@@ -1166,3 +1166,60 @@ bluetooth:v0181* + + bluetooth:v0182* + ID_VENDOR_FROM_DATABASE=HOP Ubiquitous ++ ++bluetooth:v0183* ++ ID_VENDOR_FROM_DATABASE=To Be Assigned ++ ++bluetooth:v0184* ++ ID_VENDOR_FROM_DATABASE=Nectar ++ ++bluetooth:v0185* ++ ID_VENDOR_FROM_DATABASE=bel'apps LLC ++ ++bluetooth:v0186* ++ ID_VENDOR_FROM_DATABASE=CORE Lighting Ltd ++ ++bluetooth:v0187* ++ ID_VENDOR_FROM_DATABASE=Seraphim Sense Ltd ++ ++bluetooth:v0188* ++ ID_VENDOR_FROM_DATABASE=Unico RBC ++ ++bluetooth:v0189* ++ ID_VENDOR_FROM_DATABASE=Physical Enterprises Inc. ++ ++bluetooth:v018A* ++ ID_VENDOR_FROM_DATABASE=Able Trend Technology Limited ++ ++bluetooth:v018B* ++ ID_VENDOR_FROM_DATABASE=Konica Minolta, Inc. ++ ++bluetooth:v018C* ++ ID_VENDOR_FROM_DATABASE=Wilo SE ++ ++bluetooth:v018D* ++ ID_VENDOR_FROM_DATABASE=Extron Design Services ++ ++bluetooth:v018E* ++ ID_VENDOR_FROM_DATABASE=Fitbit, Inc. ++ ++bluetooth:v018F* ++ ID_VENDOR_FROM_DATABASE=Fireflies Systems ++ ++bluetooth:v0190* ++ ID_VENDOR_FROM_DATABASE=Intelletto Technologies Inc. ++ ++bluetooth:v0191* ++ ID_VENDOR_FROM_DATABASE=FDK CORPORATION ++ ++bluetooth:v0192* ++ ID_VENDOR_FROM_DATABASE=Cloudleaf, Inc ++ ++bluetooth:v0193* ++ ID_VENDOR_FROM_DATABASE=Maveric Automation LLC ++ ++bluetooth:v0194* ++ ID_VENDOR_FROM_DATABASE=Acoustic Stream Corporation ++ ++bluetooth:v0195* ++ ID_VENDOR_FROM_DATABASE=Zuli diff --git a/0021-libudev-modernization.patch b/0021-libudev-modernization.patch new file mode 100644 index 0000000..3185e45 --- /dev/null +++ b/0021-libudev-modernization.patch @@ -0,0 +1,60 @@ +From 84ba1738e89859f02e6d333337afb3b80cb44cdb Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= +Date: Sat, 1 Nov 2014 11:32:44 -0400 +Subject: [PATCH] libudev: modernization + +This brings udev logging style a bit closer to normal systemd convention. + +(cherry picked from commit fe756ed9ec2c0fa33c30b1d9a33d745dc1593aed) +--- + src/libudev/libudev.c | 9 ++++----- + 1 file changed, 4 insertions(+), 5 deletions(-) + +diff --git a/src/libudev/libudev.c b/src/libudev/libudev.c +index e2ab960d55..7803863b2e 100644 +--- a/src/libudev/libudev.c ++++ b/src/libudev/libudev.c +@@ -119,7 +119,7 @@ _public_ struct udev *udev_new(void) + { + struct udev *udev; + const char *env; +- FILE *f; ++ _cleanup_free_ FILE *f = NULL; + + udev = new0(struct udev, 1); + if (udev == NULL) +@@ -132,7 +132,7 @@ _public_ struct udev *udev_new(void) + f = fopen("/etc/udev/udev.conf", "re"); + if (f != NULL) { + char line[UTIL_LINE_SIZE]; +- int line_nr = 0; ++ unsigned line_nr = 0; + + while (fgets(line, sizeof(line), f)) { + size_t len; +@@ -153,7 +153,7 @@ _public_ struct udev *udev_new(void) + /* split key/value */ + val = strchr(key, '='); + if (val == NULL) { +- udev_err(udev, "missing = in /etc/udev/udev.conf[%i]; skip line\n", line_nr); ++ udev_err(udev, "/etc/udev/udev.conf:%u: missing assignment, skipping line.\n", line_nr); + continue; + } + val[0] = '\0'; +@@ -185,7 +185,7 @@ _public_ struct udev *udev_new(void) + /* unquote */ + if (val[0] == '"' || val[0] == '\'') { + if (val[len-1] != val[0]) { +- udev_err(udev, "inconsistent quoting in /etc/udev/udev.conf[%i]; skip line\n", line_nr); ++ udev_err(udev, "/etc/udev/udev.conf:%u: inconsistent quoting, skipping line.\n", line_nr); + continue; + } + val[len-1] = '\0'; +@@ -197,7 +197,6 @@ _public_ struct udev *udev_new(void) + continue; + } + } +- fclose(f); + } + + /* environment overrides config */ diff --git a/0022-libudev-do-not-accept-invalid-log-levels.patch b/0022-libudev-do-not-accept-invalid-log-levels.patch new file mode 100644 index 0000000..42df429 --- /dev/null +++ b/0022-libudev-do-not-accept-invalid-log-levels.patch @@ -0,0 +1,72 @@ +From bedfb81393f6718d07dc7857bd94ddf0c9e17d67 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= +Date: Sat, 1 Nov 2014 12:06:41 -0400 +Subject: [PATCH] libudev: do not accept invalid log levels + +Invalid log levels lead to a assert failure later on. + +https://bugs.freedesktop.org/show_bug.cgi?id=85657 +(cherry picked from commit ee7122c0ec6aa11f02e9e8d94254b353f12d2c14) +--- + src/libudev/libudev-util.c | 10 +++++++--- + src/libudev/libudev.c | 19 ++++++++++++++++--- + 2 files changed, 23 insertions(+), 6 deletions(-) + +diff --git a/src/libudev/libudev-util.c b/src/libudev/libudev-util.c +index f3fdf3b5aa..0bc10f3470 100644 +--- a/src/libudev/libudev-util.c ++++ b/src/libudev/libudev-util.c +@@ -159,9 +159,13 @@ int util_log_priority(const char *priority) + char *endptr; + int prio; + +- prio = strtol(priority, &endptr, 10); +- if (endptr[0] == '\0' || isspace(endptr[0])) +- return prio; ++ prio = strtoul(priority, &endptr, 10); ++ if (endptr[0] == '\0' || isspace(endptr[0])) { ++ if (prio >= 0 && prio <= 7) ++ return prio; ++ else ++ return -ERANGE; ++ } + + return log_level_from_string(priority); + } +diff --git a/src/libudev/libudev.c b/src/libudev/libudev.c +index 7803863b2e..8464427651 100644 +--- a/src/libudev/libudev.c ++++ b/src/libudev/libudev.c +@@ -193,7 +193,13 @@ _public_ struct udev *udev_new(void) + } + + if (streq(key, "udev_log")) { +- udev_set_log_priority(udev, util_log_priority(val)); ++ int prio; ++ ++ prio = util_log_priority(val); ++ if (prio < 0) ++ udev_err(udev, "/etc/udev/udev.conf:%u: invalid logging level '%s', ignoring.\n", line_nr, val); ++ else ++ udev_set_log_priority(udev, prio); + continue; + } + } +@@ -201,8 +207,15 @@ _public_ struct udev *udev_new(void) + + /* environment overrides config */ + env = secure_getenv("UDEV_LOG"); +- if (env != NULL) +- udev_set_log_priority(udev, util_log_priority(env)); ++ if (env != NULL) { ++ int prio; ++ ++ prio = util_log_priority(env); ++ if (prio < 0) ++ udev_err(udev, "$UDEV_LOG specifies invalid logging level '%s', ignoring.\n", env); ++ else ++ udev_set_log_priority(udev, prio); ++ } + + return udev; + } diff --git a/0023-man-describe-all-log-levels-in-udevadm-8.patch b/0023-man-describe-all-log-levels-in-udevadm-8.patch new file mode 100644 index 0000000..1a5e939 --- /dev/null +++ b/0023-man-describe-all-log-levels-in-udevadm-8.patch @@ -0,0 +1,33 @@ +From c2c2394e0c29458ce9ed3c990c8978fafdc1a97b Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= +Date: Sat, 1 Nov 2014 14:36:29 -0400 +Subject: [PATCH] man: describe all log levels in udevadm(8) + +https://bugs.freedesktop.org/show_bug.cgi?id=85657 +(cherry picked from commit e03234a16047dc635d13f7118fc9fcf243744b51) +--- + man/udevadm.xml | 11 ++++++++--- + 1 file changed, 8 insertions(+), 3 deletions(-) + +diff --git a/man/udevadm.xml b/man/udevadm.xml +index b85d9a9249..fd17f40be3 100644 +--- a/man/udevadm.xml ++++ b/man/udevadm.xml +@@ -368,9 +368,14 @@ + + + +- Set the internal log level of systemd-udevd. Valid values are the numerical +- syslog priorities or their textual representations: , +- and . ++ Set the internal log level of ++ systemd-udevd. Valid values are the ++ numerical syslog priorities or their textual ++ representations: , ++ , , ++ , , ++ , , and ++ . + + + diff --git a/0024-sd-dhcp6-client-fix-off-by-two-error-in-DUID-length.patch b/0024-sd-dhcp6-client-fix-off-by-two-error-in-DUID-length.patch new file mode 100644 index 0000000..d6aff2c --- /dev/null +++ b/0024-sd-dhcp6-client-fix-off-by-two-error-in-DUID-length.patch @@ -0,0 +1,50 @@ +From 87c237865b445906e3df7873b0fcd0a9f8483f13 Mon Sep 17 00:00:00 2001 +From: Dan Williams +Date: Fri, 31 Oct 2014 12:20:21 -0500 +Subject: [PATCH] sd-dhcp6-client: fix off-by-two error in DUID length + +The duid data passed by the caller does not include the DUID type, +but sd_dhcp6_client_set_duid() was treating it like it did. + +(cherry picked from commit 393b6f28ecec537f05567c4ec8af8c499d0ea226) +--- + src/libsystemd-network/sd-dhcp6-client.c | 10 +++++----- + 1 file changed, 5 insertions(+), 5 deletions(-) + +diff --git a/src/libsystemd-network/sd-dhcp6-client.c b/src/libsystemd-network/sd-dhcp6-client.c +index fa4f9b5dc2..dbec1a2a8b 100644 +--- a/src/libsystemd-network/sd-dhcp6-client.c ++++ b/src/libsystemd-network/sd-dhcp6-client.c +@@ -200,19 +200,19 @@ int sd_dhcp6_client_set_duid(sd_dhcp6_client *client, uint16_t type, uint8_t *du + + switch (type) { + case DHCP6_DUID_LLT: +- if (duid_len <= sizeof(client->duid.llt)) ++ if (duid_len <= sizeof(client->duid.llt) - 2) + return -EINVAL; + break; + case DHCP6_DUID_EN: +- if (duid_len != sizeof(client->duid.en)) ++ if (duid_len != sizeof(client->duid.en) - 2) + return -EINVAL; + break; + case DHCP6_DUID_LL: +- if (duid_len <= sizeof(client->duid.ll)) ++ if (duid_len <= sizeof(client->duid.ll) - 2) + return -EINVAL; + break; + case DHCP6_DUID_UUID: +- if (duid_len != sizeof(client->duid.uuid)) ++ if (duid_len != sizeof(client->duid.uuid) - 2) + return -EINVAL; + break; + default: +@@ -222,7 +222,7 @@ int sd_dhcp6_client_set_duid(sd_dhcp6_client *client, uint16_t type, uint8_t *du + + client->duid.raw.type = htobe16(type); + memcpy(&client->duid.raw.data, duid, duid_len); +- client->duid_len = duid_len; ++ client->duid_len = duid_len + 2; /* +2 for sizeof(type) */ + + return 0; + } diff --git a/0025-core-improve-error-message-when-machine-id-is-missin.patch b/0025-core-improve-error-message-when-machine-id-is-missin.patch new file mode 100644 index 0000000..b509f4b --- /dev/null +++ b/0025-core-improve-error-message-when-machine-id-is-missin.patch @@ -0,0 +1,47 @@ +From 7400d7681c4cb18c2d7f993165f60558e509275a Mon Sep 17 00:00:00 2001 +From: Jan Synacek +Date: Fri, 31 Oct 2014 10:16:45 +0100 +Subject: [PATCH] core: improve error message when machine id is missing + +(cherry picked from commit 86fb9ca7ae49790880d4b3ce523988b01b13d9ae) +--- + src/core/machine-id-setup.c | 17 ++++++++++++----- + 1 file changed, 12 insertions(+), 5 deletions(-) + +diff --git a/src/core/machine-id-setup.c b/src/core/machine-id-setup.c +index efb074fcbd..ce6d8e02d0 100644 +--- a/src/core/machine-id-setup.c ++++ b/src/core/machine-id-setup.c +@@ -162,7 +162,7 @@ static int generate(char id[34], const char *root) { + int machine_id_setup(const char *root) { + const char *etc_machine_id, *run_machine_id; + _cleanup_close_ int fd = -1; +- bool writable = false; ++ bool writable = true; + struct stat st; + char id[34]; /* 32 + \n + \0 */ + int r; +@@ -186,12 +186,19 @@ int machine_id_setup(const char *root) { + + mkdir_parents(etc_machine_id, 0755); + fd = open(etc_machine_id, O_RDWR|O_CREAT|O_CLOEXEC|O_NOCTTY, 0444); +- if (fd >= 0) +- writable = true; +- else { ++ if (fd < 0) { ++ int old_errno = errno; ++ + fd = open(etc_machine_id, O_RDONLY|O_CLOEXEC|O_NOCTTY); + if (fd < 0) { +- log_error("Cannot open %s: %m", etc_machine_id); ++ if (old_errno == EROFS && errno == ENOENT) ++ log_error("System cannot boot: Missing /etc/machine-id and /etc is mounted read-only.\n" ++ "Booting up is supported only when:\n" ++ "1) /etc/machine-id exists and is populated.\n" ++ "2) /etc/machine-id exists and is empty.\n" ++ "3) /etc/machine-id is missing and /etc is writable.\n"); ++ else ++ log_error("Cannot open %s: %m", etc_machine_id); + return -errno; + } + diff --git a/0026-man-explain-journalctl-flush-correctly.patch b/0026-man-explain-journalctl-flush-correctly.patch new file mode 100644 index 0000000..8b140a7 --- /dev/null +++ b/0026-man-explain-journalctl-flush-correctly.patch @@ -0,0 +1,42 @@ +From 0ad235ddb0640251e6be5a7250ee2b9236571521 Mon Sep 17 00:00:00 2001 +From: Umut Tezduyar Lindskog +Date: Wed, 29 Oct 2014 11:20:02 +0100 +Subject: [PATCH] man: explain journalctl --flush correctly + +(cherry picked from commit 2a97b03b3b087e724867e7501ae0c1535ee35031) +--- + NEWS | 4 ++++ + man/journalctl.xml | 4 ++-- + 2 files changed, 6 insertions(+), 2 deletions(-) + +diff --git a/NEWS b/NEWS +index 82a1948a38..d8770a0fcf 100644 +--- a/NEWS ++++ b/NEWS +@@ -7,6 +7,10 @@ CHANGES WITH 217: + show log timestamps in the UTC timezone. journalctl now also + accepts -n/--lines=all to disable line capping in a pager. + ++ * journalctl gained a new switch, --flush, that flushes ++ logs from /run/log/journal to /var/log/journal if ++ persistent storage is enabled. ++ + * Services can notify the manager before they start a reload + (by sending RELOADING=1) or shutdown (by sending + STOPPING=1). This allows the manager to track and show the +diff --git a/man/journalctl.xml b/man/journalctl.xml +index db2a1e142b..0ed3ca3bc8 100644 +--- a/man/journalctl.xml ++++ b/man/journalctl.xml +@@ -883,9 +883,9 @@ + + Asks the Journal + daemon to flush any log data stored in +- /run/systemd/log ++ /run/log/journal + into +- /var/systemd/log, ++ /var/log/journal, + if persistent storage is enabled. This + call does not return until the + operation is diff --git a/0027-systemd-journal-flush.service-remove-trigger-from-de.patch b/0027-systemd-journal-flush.service-remove-trigger-from-de.patch new file mode 100644 index 0000000..51be354 --- /dev/null +++ b/0027-systemd-journal-flush.service-remove-trigger-from-de.patch @@ -0,0 +1,45 @@ +From 48a8d6bbdb6132ee4086e380437fac74457738d7 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= +Date: Sat, 1 Nov 2014 13:52:14 -0400 +Subject: [PATCH] systemd-journal-flush.service: remove "trigger" from + description + +This service is now synchronous, so "trigger" is misleading. + +(cherry picked from commit a65b82457735df2ef58736a55846f400124a8dc0) +--- + NEWS | 7 ++++--- + units/systemd-journal-flush.service.in | 2 +- + 2 files changed, 5 insertions(+), 4 deletions(-) + +diff --git a/NEWS b/NEWS +index d8770a0fcf..0ed03daa21 100644 +--- a/NEWS ++++ b/NEWS +@@ -7,9 +7,10 @@ CHANGES WITH 217: + show log timestamps in the UTC timezone. journalctl now also + accepts -n/--lines=all to disable line capping in a pager. + +- * journalctl gained a new switch, --flush, that flushes +- logs from /run/log/journal to /var/log/journal if +- persistent storage is enabled. ++ * journalctl gained a new switch, --flush, that synchronously ++ flushes logs from /run/log/journal to /var/log/journal if ++ persistent storage is enabled. systemd-journal-flush.service ++ now waits until the operation is complete. + + * Services can notify the manager before they start a reload + (by sending RELOADING=1) or shutdown (by sending +diff --git a/units/systemd-journal-flush.service.in b/units/systemd-journal-flush.service.in +index 2612220e2e..fa290897d6 100644 +--- a/units/systemd-journal-flush.service.in ++++ b/units/systemd-journal-flush.service.in +@@ -6,7 +6,7 @@ + # (at your option) any later version. + + [Unit] +-Description=Trigger Flushing of Journal to Persistent Storage ++Description=Flush Journal to Persistent Storage + Documentation=man:systemd-journald.service(8) man:journald.conf(5) + DefaultDependencies=no + Requires=systemd-journald.service diff --git a/0028-kernel-install-90-loaderentry.install-fix-cmdline-pa.patch b/0028-kernel-install-90-loaderentry.install-fix-cmdline-pa.patch new file mode 100644 index 0000000..6e85cf3 --- /dev/null +++ b/0028-kernel-install-90-loaderentry.install-fix-cmdline-pa.patch @@ -0,0 +1,38 @@ +From c21b1d4f483825ccfae22f5ea384bb14eb86be49 Mon Sep 17 00:00:00 2001 +From: Michael Chapman +Date: Wed, 29 Oct 2014 11:54:07 +1100 +Subject: [PATCH] kernel-install/90-loaderentry.install: fix cmdline parsing + +A recent commit (2f3a215) changed the parsing of /proc/cmdline to use a +shell array. Unfortunately, this introduced a bug: "read -ar line" +populates the shell variable $r, not $line. This breaks installation of +new loader entries: + + # kernel-install add 3.17.1-304.fc21.x86_64 \ + /boot/vmlinuz-3.17.1-304.fc21.x86_64 + Could not determine the kernel command line parameters. + Please specify the kernel command line in /etc/kernel/cmdline! + +This commit alters the read command to correctly populate the $line +array instead. + +(cherry picked from commit c008f6ee8df9aa36782378d1a3767543b3635a54) + +https://bugzilla.redhat.com/show_bug.cgi?id=1158035 +--- + src/kernel-install/90-loaderentry.install | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/kernel-install/90-loaderentry.install b/src/kernel-install/90-loaderentry.install +index 6f032b5a4b..d433e00a5c 100644 +--- a/src/kernel-install/90-loaderentry.install ++++ b/src/kernel-install/90-loaderentry.install +@@ -47,7 +47,7 @@ if [[ -f /etc/kernel/cmdline ]]; then + fi + + if ! [[ ${BOOT_OPTIONS[*]} ]]; then +- read -ar line < /proc/cmdline ++ read -a line -r < /proc/cmdline + for i in "${line[@]}"; do + [[ "${i#initrd=*}" != "$i" ]] && continue + BOOT_OPTIONS[${#BOOT_OPTIONS[@]}]="$i" diff --git a/0029-scsi_id-fix-usage-spelling.patch b/0029-scsi_id-fix-usage-spelling.patch new file mode 100644 index 0000000..65a7d34 --- /dev/null +++ b/0029-scsi_id-fix-usage-spelling.patch @@ -0,0 +1,27 @@ +From 98ec0eb525d2091a88f5226ec96c23a7407d276e Mon Sep 17 00:00:00 2001 +From: Joe Lawrence +Date: Sat, 1 Nov 2014 12:18:08 -0400 +Subject: [PATCH] scsi_id: fix usage spelling + +s/threat/treat/g + +(cherry picked from commit 85f13fce322e6303e7e4e55cb43104f81827f36b) +--- + src/udev/scsi_id/scsi_id.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/src/udev/scsi_id/scsi_id.c b/src/udev/scsi_id/scsi_id.c +index 4d9378a5c0..48c6cf7dba 100644 +--- a/src/udev/scsi_id/scsi_id.c ++++ b/src/udev/scsi_id/scsi_id.c +@@ -317,8 +317,8 @@ static void help(void) { + " -f,--config= location of config file\n" + " -p,--page=0x80|0x83|pre-spc3-83 SCSI page (0x80, 0x83, pre-spc3-83)\n" + " -s,--sg-version=3|4 use SGv3 or SGv4\n" +- " -b,--blacklisted threat device as blacklisted\n" +- " -g,--whitelisted threat device as whitelisted\n" ++ " -b,--blacklisted treat device as blacklisted\n" ++ " -g,--whitelisted treat device as whitelisted\n" + " -u,--replace-whitespace replace all whitespace by underscores\n" + " -v,--verbose verbose logging\n" + " --version print version\n" diff --git a/0030-libudev-Use-correct-free-function.patch b/0030-libudev-Use-correct-free-function.patch new file mode 100644 index 0000000..973061e --- /dev/null +++ b/0030-libudev-Use-correct-free-function.patch @@ -0,0 +1,28 @@ +From 7410911917e8b2ffef4ee0c9644632c382bd1aef Mon Sep 17 00:00:00 2001 +From: Colin Walters +Date: Sat, 1 Nov 2014 15:49:53 -0400 +Subject: [PATCH] libudev: Use correct free function + +FILE * wants cleanup_fclose(). + +Spotted by udev hwdb segfaulting in gnome-continuous' buildroot +construction. + +(cherry picked from commit ea55caa60c6860e33fa4f1a216c003ff666e9c68) +--- + src/libudev/libudev.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/libudev/libudev.c b/src/libudev/libudev.c +index 8464427651..05f3b479fa 100644 +--- a/src/libudev/libudev.c ++++ b/src/libudev/libudev.c +@@ -119,7 +119,7 @@ _public_ struct udev *udev_new(void) + { + struct udev *udev; + const char *env; +- _cleanup_free_ FILE *f = NULL; ++ _cleanup_fclose_ FILE *f = NULL; + + udev = new0(struct udev, 1); + if (udev == NULL) diff --git a/0031-Raise-level-of-Found-dependency.-lines.patch b/0031-Raise-level-of-Found-dependency.-lines.patch new file mode 100644 index 0000000..1f00e75 --- /dev/null +++ b/0031-Raise-level-of-Found-dependency.-lines.patch @@ -0,0 +1,40 @@ +From bf50845d2c7ebba254ae91b280086701503cf7b9 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= +Date: Sun, 2 Nov 2014 12:10:42 -0500 +Subject: [PATCH] Raise level of 'Found dependency...' lines + +This way they always show up together with 'Found ordering cycle...'. +Ordering cycles are a serious error and a major pain to debug. If +quiet is enabled, only the first and the last line of output are +shown: + +systemd[1]: Found ordering cycle on basic.target/start +systemd[1]: Breaking ordering cycle by deleting job timers.target/start +systemd[1]: Job timers.target/start deleted to break ordering cycle starting with basic.target/start + +which isn't particularly enlightening. So just show the whole message +at the same level. + +https://bugzilla.redhat.com/show_bug.cgi?id=1158206 +(cherry picked from commit 14fe721b5f6d8457cc8737fa75f2ed79e7fa534b) +--- + src/core/transaction.c | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) + +diff --git a/src/core/transaction.c b/src/core/transaction.c +index dbb4133fe3..91f5ee18df 100644 +--- a/src/core/transaction.c ++++ b/src/core/transaction.c +@@ -377,9 +377,9 @@ static int transaction_verify_order_one(Transaction *tr, Job *j, Job *from, unsi + for (k = from; k; k = ((k->generation == generation && k->marker != k) ? k->marker : NULL)) { + + /* logging for j not k here here to provide consistent narrative */ +- log_info_unit(j->unit->id, +- "Found dependency on %s/%s", +- k->unit->id, job_type_to_string(k->type)); ++ log_warning_unit(j->unit->id, ++ "Found dependency on %s/%s", ++ k->unit->id, job_type_to_string(k->type)); + + if (!delete && hashmap_get(tr->jobs, k->unit) && + !unit_matters_to_anchor(k->unit, k)) { diff --git a/0032-manager-do-not-print-timing-when-running-in-test-mod.patch b/0032-manager-do-not-print-timing-when-running-in-test-mod.patch new file mode 100644 index 0000000..65986e0 --- /dev/null +++ b/0032-manager-do-not-print-timing-when-running-in-test-mod.patch @@ -0,0 +1,124 @@ +From 1034fff7872e864bc6a7e091724b85a44f34474f Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= +Date: Sun, 2 Nov 2014 12:19:38 -0500 +Subject: [PATCH] manager: do not print timing when running in test mode + +(cherry picked from commit 56dacdbc1ca95cef8bf8c97c0d7af761a71eaab3) +--- + src/core/manager.c | 84 ++++++++++++++++++++++++++++++------------------------ + 1 file changed, 46 insertions(+), 38 deletions(-) + +diff --git a/src/core/manager.c b/src/core/manager.c +index d427d88d4e..ff29ae1d9d 100644 +--- a/src/core/manager.c ++++ b/src/core/manager.c +@@ -2584,45 +2584,13 @@ bool manager_unit_inactive_or_pending(Manager *m, const char *name) { + return unit_inactive_or_pending(u); + } + +-void manager_check_finished(Manager *m) { ++static void manager_notify_finished(Manager *m) { + char userspace[FORMAT_TIMESPAN_MAX], initrd[FORMAT_TIMESPAN_MAX], kernel[FORMAT_TIMESPAN_MAX], sum[FORMAT_TIMESPAN_MAX]; + usec_t firmware_usec, loader_usec, kernel_usec, initrd_usec, userspace_usec, total_usec; +- Unit *u = NULL; +- Iterator i; + +- assert(m); +- +- if (m->n_running_jobs == 0) +- m->jobs_in_progress_event_source = sd_event_source_unref(m->jobs_in_progress_event_source); +- +- if (hashmap_size(m->jobs) > 0) { +- +- if (m->jobs_in_progress_event_source) +- sd_event_source_set_time(m->jobs_in_progress_event_source, now(CLOCK_MONOTONIC) + JOBS_IN_PROGRESS_WAIT_USEC); +- +- return; +- } +- +- manager_flip_auto_status(m, false); +- +- /* Notify Type=idle units that we are done now */ +- m->idle_pipe_event_source = sd_event_source_unref(m->idle_pipe_event_source); +- manager_close_idle_pipe(m); +- +- /* Turn off confirm spawn now */ +- m->confirm_spawn = false; +- +- /* No need to update ask password status when we're going non-interactive */ +- manager_close_ask_password(m); +- +- /* This is no longer the first boot */ +- manager_set_first_boot(m, false); +- +- if (dual_timestamp_is_set(&m->finish_timestamp)) ++ if (m->test_run) + return; + +- dual_timestamp_get(&m->finish_timestamp); +- + if (m->running_as == SYSTEMD_SYSTEM && detect_container(NULL) <= 0) { + + /* Note that m->kernel_usec.monotonic is always at 0, +@@ -2677,10 +2645,6 @@ void manager_check_finished(Manager *m) { + NULL); + } + +- SET_FOREACH(u, m->startup_units, i) +- if (u->cgroup_path) +- cgroup_context_apply(unit_get_cgroup_context(u), unit_get_cgroup_mask(u), u->cgroup_path, manager_state(m)); +- + bus_manager_send_finished(m, firmware_usec, loader_usec, kernel_usec, initrd_usec, userspace_usec, total_usec); + + sd_notifyf(false, +@@ -2689,6 +2653,50 @@ void manager_check_finished(Manager *m) { + format_timespan(sum, sizeof(sum), total_usec, USEC_PER_MSEC)); + } + ++void manager_check_finished(Manager *m) { ++ Unit *u = NULL; ++ Iterator i; ++ ++ assert(m); ++ ++ if (m->n_running_jobs == 0) ++ m->jobs_in_progress_event_source = sd_event_source_unref(m->jobs_in_progress_event_source); ++ ++ if (hashmap_size(m->jobs) > 0) { ++ ++ if (m->jobs_in_progress_event_source) ++ sd_event_source_set_time(m->jobs_in_progress_event_source, now(CLOCK_MONOTONIC) + JOBS_IN_PROGRESS_WAIT_USEC); ++ ++ return; ++ } ++ ++ manager_flip_auto_status(m, false); ++ ++ /* Notify Type=idle units that we are done now */ ++ m->idle_pipe_event_source = sd_event_source_unref(m->idle_pipe_event_source); ++ manager_close_idle_pipe(m); ++ ++ /* Turn off confirm spawn now */ ++ m->confirm_spawn = false; ++ ++ /* No need to update ask password status when we're going non-interactive */ ++ manager_close_ask_password(m); ++ ++ /* This is no longer the first boot */ ++ manager_set_first_boot(m, false); ++ ++ if (dual_timestamp_is_set(&m->finish_timestamp)) ++ return; ++ ++ dual_timestamp_get(&m->finish_timestamp); ++ ++ manager_notify_finished(m); ++ ++ SET_FOREACH(u, m->startup_units, i) ++ if (u->cgroup_path) ++ cgroup_context_apply(unit_get_cgroup_context(u), unit_get_cgroup_mask(u), u->cgroup_path, manager_state(m)); ++} ++ + static int create_generator_dir(Manager *m, char **generator, const char *name) { + char *p; + int r; diff --git a/0033-unit-do-not-order-timers.target-before-basic.target.patch b/0033-unit-do-not-order-timers.target-before-basic.target.patch new file mode 100644 index 0000000..76e33b0 --- /dev/null +++ b/0033-unit-do-not-order-timers.target-before-basic.target.patch @@ -0,0 +1,58 @@ +From 0b0aec3a3418f2562805416f1f8ced5cd245c894 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= +Date: Sun, 2 Nov 2014 11:39:17 -0500 +Subject: [PATCH] unit: do not order timers.target before basic.target + +Since commit 19f8d037833f2 'timer: order OnCalendar units after +timer-sync.target if DefaultDependencies=no' timers might get a +dependency on time-sync.target, which does not really belong in early +boot. If ntp is enabled, time-sync.target might be delayed until a +network connection is established. + +It turns out that majority of timer units found in the wild do not +need to be started in early boot. Out of the timer units available in +Fedora 21, only systemd-readahead-done.timer and mdadm-last-resort@.timer +should be started early, but they both have DefaultDependencies=no, +so are not part of timers.target anyway. All the rest look like they +will be fine with being started a bit later (and the majority even +much later, since they run daily or weekly). + +Let timers.target be pulled in by basic.target, but without the +temporal dependency. This means timer units are started on a "best +effort" schedule. + +https://bugzilla.redhat.com/show_bug.cgi?id=1158206 +(cherry picked from commit 3b0217036040a6013faeab4eb9da7469e3bbcfb3) +--- + units/basic.target | 5 ++++- + units/timers.target | 3 +++ + 2 files changed, 7 insertions(+), 1 deletion(-) + +diff --git a/units/basic.target b/units/basic.target +index 228f62c4b1..eee3e6b774 100644 +--- a/units/basic.target ++++ b/units/basic.target +@@ -8,8 +8,11 @@ + [Unit] + Description=Basic System + Documentation=man:systemd.special(7) ++ + Requires=sysinit.target ++After=sysinit.target + Wants=sockets.target timers.target paths.target slices.target +-After=sysinit.target sockets.target timers.target paths.target slices.target ++After=sockets.target paths.target slices.target ++ + JobTimeoutSec=15min + JobTimeoutAction=poweroff-force +diff --git a/units/timers.target b/units/timers.target +index 07fda3d9d0..251fa68065 100644 +--- a/units/timers.target ++++ b/units/timers.target +@@ -8,3 +8,6 @@ + [Unit] + Description=Timers + Documentation=man:systemd.special(7) ++ ++DefaultDependencies=no ++Conflicts=shutdown.target diff --git a/0034-units-order-sd-journal-flush-after-sd-remount-fs.patch b/0034-units-order-sd-journal-flush-after-sd-remount-fs.patch new file mode 100644 index 0000000..04292b7 --- /dev/null +++ b/0034-units-order-sd-journal-flush-after-sd-remount-fs.patch @@ -0,0 +1,28 @@ +From ce5c8ab64093246bd0cdd2037789e947d80551ca Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= +Date: Sun, 2 Nov 2014 21:45:42 -0500 +Subject: [PATCH] units: order sd-journal-flush after sd-remount-fs + +Otherwise we could attempt to flush the journal while /var/log/ was +still ro, and silently skip journal flushing. + +The way that errors in flushing are handled should still be changed to +be more transparent and robust. + +(cherry picked from commit 1f1926aa5e836caa3bd6df43704aecd606135103) +--- + units/systemd-journal-flush.service.in | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/units/systemd-journal-flush.service.in b/units/systemd-journal-flush.service.in +index fa290897d6..98c91b4bc5 100644 +--- a/units/systemd-journal-flush.service.in ++++ b/units/systemd-journal-flush.service.in +@@ -11,6 +11,7 @@ Documentation=man:systemd-journald.service(8) man:journald.conf(5) + DefaultDependencies=no + Requires=systemd-journald.service + After=systemd-journald.service ++After=systemd-remount-fs.service + Before=systemd-user-sessions.service systemd-tmpfiles-setup.service + RequiresMountsFor=/var/log/journal + diff --git a/0035-man-sd_event_add_post-fix-typo.patch b/0035-man-sd_event_add_post-fix-typo.patch new file mode 100644 index 0000000..241ec47 --- /dev/null +++ b/0035-man-sd_event_add_post-fix-typo.patch @@ -0,0 +1,23 @@ +From be463cec86a08f14b565f5c7324fc5b8696a0161 Mon Sep 17 00:00:00 2001 +From: Tom Gundersen +Date: Mon, 3 Nov 2014 15:58:30 +0100 +Subject: [PATCH] man: sd_event_add_post - fix typo + +(cherry picked from commit f49481d0ca170ea567b46fde6c1c089b1dbb49cb) +--- + man/sd_event_add_defer.xml | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/man/sd_event_add_defer.xml b/man/sd_event_add_defer.xml +index 442600a93e..dcc76cd48f 100644 +--- a/man/sd_event_add_defer.xml ++++ b/man/sd_event_add_defer.xml +@@ -104,7 +104,7 @@ along with systemd; If not, see . + default, the handler will be called once + (SD_EVENT_ONESHOT). + +- sd_event_add_defer() adds a new event ++ sd_event_add_post() adds a new event + source that will "fire" if any event handlers are invoked whenever + the event loop is run. By default, the source is enabled + permanently (SD_EVENT_ON). diff --git a/0036-journald-fix-minor-memory-leak.patch b/0036-journald-fix-minor-memory-leak.patch new file mode 100644 index 0000000..dc1ce9d --- /dev/null +++ b/0036-journald-fix-minor-memory-leak.patch @@ -0,0 +1,22 @@ +From db1bd7139d53e7417ce1ed992c08ba52b83dfb0a Mon Sep 17 00:00:00 2001 +From: Lennart Poettering +Date: Mon, 3 Nov 2014 21:11:16 +0100 +Subject: [PATCH] journald: fix minor memory leak + +(cherry picked from commit 99d0966e75a984bed4f117c888ecc93e16e7b7b6) +--- + src/journal/journald-server.c | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/src/journal/journald-server.c b/src/journal/journald-server.c +index 12735c4b81..08b143b630 100644 +--- a/src/journal/journald-server.c ++++ b/src/journal/journald-server.c +@@ -1655,6 +1655,7 @@ void server_done(Server *s) { + free(s->buffer); + free(s->tty_path); + free(s->cgroup_root); ++ free(s->hostname_field); + + if (s->mmap) + mmap_cache_unref(s->mmap); diff --git a/0037-journald-fix-memory-leak-on-error-path.patch b/0037-journald-fix-memory-leak-on-error-path.patch new file mode 100644 index 0000000..e8639a8 --- /dev/null +++ b/0037-journald-fix-memory-leak-on-error-path.patch @@ -0,0 +1,27 @@ +From a2e4c94df3d38cd2af73546ffd2623d9d1b20baa Mon Sep 17 00:00:00 2001 +From: Lennart Poettering +Date: Mon, 3 Nov 2014 23:10:34 +0100 +Subject: [PATCH] journald: fix memory leak on error path + +(cherry picked from commit 26d8ff04914a5208d029e899682cd314b7714bf0) +--- + src/journal/journal-vacuum.c | 6 +++++- + 1 file changed, 5 insertions(+), 1 deletion(-) + +diff --git a/src/journal/journal-vacuum.c b/src/journal/journal-vacuum.c +index 7699482a77..226af82da7 100644 +--- a/src/journal/journal-vacuum.c ++++ b/src/journal/journal-vacuum.c +@@ -275,7 +275,11 @@ int journal_directory_vacuum( + + patch_realtime(directory, p, &st, &realtime); + +- GREEDY_REALLOC(list, n_allocated, n_list + 1); ++ if (!GREEDY_REALLOC(list, n_allocated, n_list + 1)) { ++ free(p); ++ r = -ENOMEM; ++ goto finish; ++ } + + list[n_list].filename = p; + list[n_list].usage = 512UL * (uint64_t) st.st_blocks; diff --git a/0038-journal-when-dumping-log-data-with-missing-COMM-fiel.patch b/0038-journal-when-dumping-log-data-with-missing-COMM-fiel.patch new file mode 100644 index 0000000..9c53cb8 --- /dev/null +++ b/0038-journal-when-dumping-log-data-with-missing-COMM-fiel.patch @@ -0,0 +1,26 @@ +From f4dab44d63124d6753a9c168442f70ab6a745e2c Mon Sep 17 00:00:00 2001 +From: Lennart Poettering +Date: Tue, 4 Nov 2014 00:28:33 +0100 +Subject: [PATCH] journal: when dumping log data with missing COMM fields, show + "unknown" instead + +A small readability improvement... + +(cherry picked from commit 1248e84008028ae54326c565fcc65dcbce3556ad) +--- + src/shared/logs-show.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/shared/logs-show.c b/src/shared/logs-show.c +index 04e1165191..e33824be4a 100644 +--- a/src/shared/logs-show.c ++++ b/src/shared/logs-show.c +@@ -365,7 +365,7 @@ static int output_short( + fprintf(f, " %.*s", (int) comm_len, comm); + n += comm_len + 1; + } else +- fputc(' ', f); ++ fputs(" unknown", f); + + if (pid && shall_print(pid, pid_len, flags)) { + fprintf(f, "[%.*s]", (int) pid_len, pid); diff --git a/0039-localectl-fix-localectl-set-x11-keymap-syntax-descri.patch b/0039-localectl-fix-localectl-set-x11-keymap-syntax-descri.patch new file mode 100644 index 0000000..30a2ef0 --- /dev/null +++ b/0039-localectl-fix-localectl-set-x11-keymap-syntax-descri.patch @@ -0,0 +1,31 @@ +From 34f01b8f564d8b0b15bfaa50f4c89ac8cebcf291 Mon Sep 17 00:00:00 2001 +From: Jan Synacek +Date: Mon, 3 Nov 2014 14:01:04 +0100 +Subject: [PATCH] localectl: fix localectl set-x11-keymap syntax description + +This complements the fix in: + + commit cd4c6fb12598435fe24431f1dd616f9582f0e3bd + Author: Jan Synacek + Date: Mon Oct 20 12:43:39 2014 +0200 + + man: fix localectl set-x11-keymap syntax description + +(cherry picked from commit 31cf921abbeafc9dae2d5c777f3e2285e6f4c19d) +--- + src/locale/localectl.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/locale/localectl.c b/src/locale/localectl.c +index 3690f9fc89..d4a2d29aea 100644 +--- a/src/locale/localectl.c ++++ b/src/locale/localectl.c +@@ -505,7 +505,7 @@ static void help(void) { + " list-locales Show known locales\n" + " set-keymap MAP [MAP] Set virtual console keyboard mapping\n" + " list-keymaps Show known virtual console keyboard mappings\n" +- " set-x11-keymap LAYOUT [MODEL] [VARIANT] [OPTIONS]\n" ++ " set-x11-keymap LAYOUT [MODEL [VARIANT [OPTIONS]]]\n" + " Set X11 keyboard mapping\n" + " list-x11-keymap-models Show known X11 keyboard mapping models\n" + " list-x11-keymap-layouts Show known X11 keyboard mapping layouts\n" diff --git a/0040-man-tmpfiles.d-fix-typo.patch b/0040-man-tmpfiles.d-fix-typo.patch new file mode 100644 index 0000000..7ebe655 --- /dev/null +++ b/0040-man-tmpfiles.d-fix-typo.patch @@ -0,0 +1,25 @@ +From 328d74f857bcba139289654a88e66693cc24013f Mon Sep 17 00:00:00 2001 +From: Jan Synacek +Date: Tue, 4 Nov 2014 13:38:59 +0100 +Subject: [PATCH] man/tmpfiles.d: fix typo + +(cherry picked from commit ff8d1aba5378949c352147cf348aaeafd7221716) +--- + man/tmpfiles.d.xml | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/man/tmpfiles.d.xml b/man/tmpfiles.d.xml +index f2360ba9a4..1b14d69a91 100644 +--- a/man/tmpfiles.d.xml ++++ b/man/tmpfiles.d.xml +@@ -108,8 +108,8 @@ + filename in lexicographic order, regardless of which + of the directories they reside in. If multiple files + specify the same path, the entry in the file with the +- lexicographically earliest name will be applied, all +- all other conflicting entries will be logged as ++ lexicographically earliest name will be applied. ++ All other conflicting entries will be logged as + errors. When two lines are prefix and suffix of each + other, then the prefix is always processed first, the + suffix later. Otherwise, the files/directories are diff --git a/0041-units-make-systemd-journald.service-Type-notify.patch b/0041-units-make-systemd-journald.service-Type-notify.patch new file mode 100644 index 0000000..3ef9a0a --- /dev/null +++ b/0041-units-make-systemd-journald.service-Type-notify.patch @@ -0,0 +1,33 @@ +From 5793666dcea38a768af843c6dcd60029a8c43026 Mon Sep 17 00:00:00 2001 +From: Michal Schmidt +Date: Tue, 4 Nov 2014 20:28:08 +0100 +Subject: [PATCH] units: make systemd-journald.service Type=notify + +It already calls sd_notify(), so it looks like an oversight. + +Without it, its ordering to systemd-journal-flush.service is +non-deterministic and the SIGUSR1 from flushing may kill journald before +it has its signal handlers set up. + +https://bugs.freedesktop.org/show_bug.cgi?id=85871 +https://bugzilla.redhat.com/show_bug.cgi?id=1159641 +(cherry picked from commit a87a38c20196a4aeb56b6ba71d688eefd0b21c30) + +Conflicts: + units/systemd-journald.service.in +--- + units/systemd-journald.service.in | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/units/systemd-journald.service.in b/units/systemd-journald.service.in +index 4de38fad59..441d5b1f96 100644 +--- a/units/systemd-journald.service.in ++++ b/units/systemd-journald.service.in +@@ -14,6 +14,7 @@ After=systemd-journald.socket systemd-journald-dev-log.socket syslog.socket + Before=sysinit.target + + [Service] ++Type=notify + Sockets=systemd-journald.socket systemd-journald-dev-log.socket + ExecStart=@rootlibexecdir@/systemd-journald + Restart=always diff --git a/0042-buildsys-test-util-needs-lm-for-fabs.patch b/0042-buildsys-test-util-needs-lm-for-fabs.patch new file mode 100644 index 0000000..eaed087 --- /dev/null +++ b/0042-buildsys-test-util-needs-lm-for-fabs.patch @@ -0,0 +1,22 @@ +From 28ad915f797e29462533011ec886640db58884c8 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Cristian=20Rodr=C3=ADguez?= +Date: Tue, 4 Nov 2014 20:48:08 -0300 +Subject: [PATCH] buildsys: test-util needs -lm for fabs() + +(cherry picked from commit 01acf6c3b7390e8c47b7a5cd7cae4bcbd2846634) +--- + Makefile.am | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/Makefile.am b/Makefile.am +index c80d25df29..a94578a9a7 100644 +--- a/Makefile.am ++++ b/Makefile.am +@@ -1527,6 +1527,7 @@ test_util_SOURCES = \ + src/test/test-util.c + + test_util_LDADD = \ ++ -lm \ + libsystemd-core.la + + test_uid_range_SOURCES = \ diff --git a/0043-udev-Fix-parsing-of-udev.event-timeout-kernel-parame.patch b/0043-udev-Fix-parsing-of-udev.event-timeout-kernel-parame.patch new file mode 100644 index 0000000..495f300 --- /dev/null +++ b/0043-udev-Fix-parsing-of-udev.event-timeout-kernel-parame.patch @@ -0,0 +1,26 @@ +From 86e00bfef3a221d032d2dfdf4592cea152548b16 Mon Sep 17 00:00:00 2001 +From: "Richard W.M. Jones" +Date: Tue, 4 Nov 2014 23:45:15 +0000 +Subject: [PATCH] udev: Fix parsing of udev.event-timeout kernel parameter. + +(cherry picked from commit f671774f52838d35d78e62ddcb781b5b65b3373f) +--- + src/udev/udevd.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/src/udev/udevd.c b/src/udev/udevd.c +index 2e6c71352f..193702cd28 100644 +--- a/src/udev/udevd.c ++++ b/src/udev/udevd.c +@@ -994,9 +994,9 @@ static void kernel_cmdline_options(struct udev *udev) { + if (r < 0) + log_warning("Invalid udev.exec-delay ignored: %s", opt + 16); + } else if (startswith(opt, "udev.event-timeout=")) { +- r = safe_atou64(opt + 16, &arg_event_timeout_usec); ++ r = safe_atou64(opt + 19, &arg_event_timeout_usec); + if (r < 0) { +- log_warning("Invalid udev.event-timeout ignored: %s", opt + 16); ++ log_warning("Invalid udev.event-timeout ignored: %s", opt + 19); + break; + } + arg_event_timeout_usec *= USEC_PER_SEC; diff --git a/0044-udev-avoid-magic-constants-in-kernel-cmdline-parsers.patch b/0044-udev-avoid-magic-constants-in-kernel-cmdline-parsers.patch new file mode 100644 index 0000000..aefb3b8 --- /dev/null +++ b/0044-udev-avoid-magic-constants-in-kernel-cmdline-parsers.patch @@ -0,0 +1,62 @@ +From d135b3c6e1bcded6080f83d787254eb0ece25027 Mon Sep 17 00:00:00 2001 +From: David Herrmann +Date: Wed, 5 Nov 2014 12:56:49 +0100 +Subject: [PATCH] udev: avoid magic constants in kernel-cmdline parsers + +Lets recognize the fact that startswith() returns a pointer to the tail on +success. Use it instead of hard-coding string-lengths as magic constants. + +(cherry picked from commit cfe2061add5479710f6597899d632e64c54e62ef) +--- + src/udev/udevd.c | 24 ++++++++++++------------ + 1 file changed, 12 insertions(+), 12 deletions(-) + +diff --git a/src/udev/udevd.c b/src/udev/udevd.c +index 193702cd28..65d086e9ee 100644 +--- a/src/udev/udevd.c ++++ b/src/udev/udevd.c +@@ -967,7 +967,7 @@ static void kernel_cmdline_options(struct udev *udev) { + return; + + FOREACH_WORD_QUOTED(word, l, line, state) { +- char *s, *opt; ++ char *s, *opt, *value; + + s = strndup(word, l); + if (!s) +@@ -979,24 +979,24 @@ static void kernel_cmdline_options(struct udev *udev) { + else + opt = s; + +- if (startswith(opt, "udev.log-priority=")) { ++ if ((value = startswith(opt, "udev.log-priority="))) { + int prio; + +- prio = util_log_priority(opt + 18); ++ prio = util_log_priority(value); + log_set_max_level(prio); + udev_set_log_priority(udev, prio); +- } else if (startswith(opt, "udev.children-max=")) { +- r = safe_atoi(opt + 18, &arg_children_max); ++ } else if ((value = startswith(opt, "udev.children-max="))) { ++ r = safe_atoi(value, &arg_children_max); + if (r < 0) +- log_warning("Invalid udev.children-max ignored: %s", opt + 18); +- } else if (startswith(opt, "udev.exec-delay=")) { +- r = safe_atoi(opt + 16, &arg_exec_delay); ++ log_warning("Invalid udev.children-max ignored: %s", value); ++ } else if ((value = startswith(opt, "udev.exec-delay="))) { ++ r = safe_atoi(value, &arg_exec_delay); + if (r < 0) +- log_warning("Invalid udev.exec-delay ignored: %s", opt + 16); +- } else if (startswith(opt, "udev.event-timeout=")) { +- r = safe_atou64(opt + 19, &arg_event_timeout_usec); ++ log_warning("Invalid udev.exec-delay ignored: %s", value); ++ } else if ((value = startswith(opt, "udev.event-timeout="))) { ++ r = safe_atou64(value, &arg_event_timeout_usec); + if (r < 0) { +- log_warning("Invalid udev.event-timeout ignored: %s", opt + 19); ++ log_warning("Invalid udev.event-timeout ignored: %s", value); + break; + } + arg_event_timeout_usec *= USEC_PER_SEC; diff --git a/0045-manager-Ensure-user-s-systemd-runtime-directory-exis.patch b/0045-manager-Ensure-user-s-systemd-runtime-directory-exis.patch new file mode 100644 index 0000000..01930cb --- /dev/null +++ b/0045-manager-Ensure-user-s-systemd-runtime-directory-exis.patch @@ -0,0 +1,48 @@ +From de1a1440dd81857ae679672ae1d757bfbdd2e112 Mon Sep 17 00:00:00 2001 +From: Colin Guthrie +Date: Sun, 2 Nov 2014 13:33:16 +0000 +Subject: [PATCH] manager: Ensure user's systemd runtime directory exists. + +This mirrors code in dbus.c when creating the private socket and +avoids error messages like: + +systemd[1353]: bind(/run/user/603/systemd/notify) failed: No such file or directory +systemd[1353]: Failed to fully start up daemon: No such file or directory + +(cherry picked from commit 0c3f25e0c1f028d4da9cc5253abf0322230e6835) +--- + src/core/manager.c | 12 ++++++++---- + 1 file changed, 8 insertions(+), 4 deletions(-) + +diff --git a/src/core/manager.c b/src/core/manager.c +index ff29ae1d9d..47e23ba80e 100644 +--- a/src/core/manager.c ++++ b/src/core/manager.c +@@ -662,9 +662,11 @@ static int manager_setup_notify(Manager *m) { + return -errno; + } + +- if (m->running_as == SYSTEMD_SYSTEM) ++ if (m->running_as == SYSTEMD_SYSTEM) { + m->notify_socket = strdup("/run/systemd/notify"); +- else { ++ if (!m->notify_socket) ++ return log_oom(); ++ } else { + const char *e; + + e = getenv("XDG_RUNTIME_DIR"); +@@ -674,9 +676,11 @@ static int manager_setup_notify(Manager *m) { + } + + m->notify_socket = strappend(e, "/systemd/notify"); ++ if (!m->notify_socket) ++ return log_oom(); ++ ++ mkdir_parents_label(m->notify_socket, 0755); + } +- if (!m->notify_socket) +- return log_oom(); + + strncpy(sa.un.sun_path, m->notify_socket, sizeof(sa.un.sun_path)-1); + r = bind(fd, &sa.sa, offsetof(struct sockaddr_un, sun_path) + strlen(sa.un.sun_path)); diff --git a/0046-units-disable-job-timeouts.patch b/0046-units-disable-job-timeouts.patch new file mode 100644 index 0000000..d0bd670 --- /dev/null +++ b/0046-units-disable-job-timeouts.patch @@ -0,0 +1,62 @@ +From af49e1e5c7ff8e30035c1880ee42225f2d15bfd9 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= +Date: Wed, 5 Nov 2014 09:16:58 -0500 +Subject: [PATCH] units: disable job timeouts + +For boot, we might kill fsck in the middle, with likely catastrophic +consequences. + +On shutdown there might be other jobs, like downloading of updates for +installation, and other custom jobs. It seems better to schedule an +individual timeout on each one separately, when it is known what +timeout is useful. + +Disable the timeouts for now, until we have a clearer picture of how +we can deal with long-running jobs. + +(cherry picked from commit 038193efa6c00e852110f17383ef2786136f4f81) + +https://bugzilla.redhat.com/show_bug.cgi?id=1152220 +--- + units/basic.target | 3 --- + units/poweroff.target | 2 -- + units/reboot.target | 2 -- + 3 files changed, 7 deletions(-) + +diff --git a/units/basic.target b/units/basic.target +index eee3e6b774..abb63ec560 100644 +--- a/units/basic.target ++++ b/units/basic.target +@@ -13,6 +13,3 @@ Requires=sysinit.target + After=sysinit.target + Wants=sockets.target timers.target paths.target slices.target + After=sockets.target paths.target slices.target +- +-JobTimeoutSec=15min +-JobTimeoutAction=poweroff-force +diff --git a/units/poweroff.target b/units/poweroff.target +index dd92d816ca..71871033a5 100644 +--- a/units/poweroff.target ++++ b/units/poweroff.target +@@ -12,8 +12,6 @@ DefaultDependencies=no + Requires=systemd-poweroff.service + After=systemd-poweroff.service + AllowIsolate=yes +-JobTimeoutSec=30min +-JobTimeoutAction=poweroff-force + + [Install] + Alias=ctrl-alt-del.target +diff --git a/units/reboot.target b/units/reboot.target +index 668b98d9e4..dec8f56796 100644 +--- a/units/reboot.target ++++ b/units/reboot.target +@@ -12,8 +12,6 @@ DefaultDependencies=no + Requires=systemd-reboot.service + After=systemd-reboot.service + AllowIsolate=yes +-JobTimeoutSec=30min +-JobTimeoutAction=reboot-force + + [Install] + Alias=ctrl-alt-del.target diff --git a/0047-login-rerun-vconsole-setup-when-switching-from-vgaco.patch b/0047-login-rerun-vconsole-setup-when-switching-from-vgaco.patch new file mode 100644 index 0000000..52aef71 --- /dev/null +++ b/0047-login-rerun-vconsole-setup-when-switching-from-vgaco.patch @@ -0,0 +1,59 @@ +From 4d4eff2436b63f19811fa39ef26fa1e2ca31a54a Mon Sep 17 00:00:00 2001 +From: Ray Strode +Date: Wed, 5 Nov 2014 08:30:52 -0500 +Subject: [PATCH] login: rerun vconsole-setup when switching from vgacon to + fbcon + +The initialization performed by systemd-vconsole-setup is reset +when changing console drivers (say from vgacon to fbcon), so we +need to run it in that case. + +See +http://lists.freedesktop.org/archives/systemd-devel/2014-October/023919.html +http://lists.freedesktop.org/archives/systemd-devel/2014-October/024423.html +http://lists.freedesktop.org/archives/systemd-devel/2014-November/024881.html + +This commit adds a udev rule to make systemd-vconsole-setup get run when +the fbcon device becomes available. + +(david: moved into new file 90-vconsole.rules instead of 71-seats.rules; + build-failures are on me, not on Ray) + +(cherry picked from commit f6ba8671d83f9fce9a00045d8fa399a1c07ba7fc) +--- + Makefile.am | 3 +++ + src/vconsole/90-vconsole.rules | 11 +++++++++++ + 2 files changed, 14 insertions(+) + create mode 100644 src/vconsole/90-vconsole.rules + +diff --git a/Makefile.am b/Makefile.am +index a94578a9a7..22fd306c81 100644 +--- a/Makefile.am ++++ b/Makefile.am +@@ -4403,6 +4403,9 @@ rootlibexec_PROGRAMS += \ + nodist_systemunit_DATA += \ + units/systemd-vconsole-setup.service + ++dist_udevrules_DATA += \ ++ src/vconsole/90-vconsole.rules ++ + SYSINIT_TARGET_WANTS += \ + systemd-vconsole-setup.service + endif +diff --git a/src/vconsole/90-vconsole.rules b/src/vconsole/90-vconsole.rules +new file mode 100644 +index 0000000000..bf6a9efaa5 +--- /dev/null ++++ b/src/vconsole/90-vconsole.rules +@@ -0,0 +1,11 @@ ++# This file is part of systemd. ++# ++# systemd is free software; you can redistribute it and/or modify it ++# under the terms of the GNU Lesser General Public License as published by ++# the Free Software Foundation; either version 2.1 of the License, or ++# (at your option) any later version. ++ ++# Kernel resets vconsole state when changing console drivers so run ++# systemd-vconsole-setup when fbcon loads ++ ++ACTION=="add", SUBSYSTEM=="graphics", KERNEL=="fbcon", RUN+="/usr/lib/systemd/systemd-vconsole-setup" diff --git a/0048-hostnamed-introduce-new-embedded-chassis-type.patch b/0048-hostnamed-introduce-new-embedded-chassis-type.patch new file mode 100644 index 0000000..9ec4114 --- /dev/null +++ b/0048-hostnamed-introduce-new-embedded-chassis-type.patch @@ -0,0 +1,72 @@ +From 2203c07490c8b64286cf2d04dbb110f4173912a1 Mon Sep 17 00:00:00 2001 +From: Lennart Poettering +Date: Thu, 6 Nov 2014 14:37:12 +0100 +Subject: [PATCH] hostnamed: introduce new "embedded" chassis type + +We really don't want to get lost in adding fridge, car, plane, drone, or +whatever else, hence add a generic term "embedded" cover all the cases +where the computer is just part of something bigger, and not at the +focus of things. + +(cherry picked from commit 25fa306ed58b0b7fe30ca9be37c66a7b3b2de70e) +--- + man/hostnamectl.xml | 3 ++- + shell-completion/bash/hostnamectl | 2 +- + shell-completion/zsh/_hostnamectl | 2 +- + src/hostname/hostnamed.c | 3 ++- + 4 files changed, 6 insertions(+), 4 deletions(-) + +diff --git a/man/hostnamectl.xml b/man/hostnamectl.xml +index 128d92f576..ffae5e6b06 100644 +--- a/man/hostnamectl.xml ++++ b/man/hostnamectl.xml +@@ -217,7 +217,8 @@ + server, + tablet, + handset, +- watch, as well as ++ watch, ++ embedded as well as + the special chassis types + vm and + container for +diff --git a/shell-completion/bash/hostnamectl b/shell-completion/bash/hostnamectl +index a5e34600c8..7a0850dbe4 100644 +--- a/shell-completion/bash/hostnamectl ++++ b/shell-completion/bash/hostnamectl +@@ -52,7 +52,7 @@ _hostnamectl() { + if [[ -z $verb ]]; then + comps=${VERBS[*]} + elif __contains_word "$verb" ${VERBS[CHASSIS]}; then +- comps='desktop laptop server tablet handset watch vm container' ++ comps='desktop laptop server tablet handset watch embedded vm container' + elif __contains_word "$verb" ${VERBS[STANDALONE]} ${VERBS[ICONS]} ${VERBS[NAME]}; then + comps='' + fi +diff --git a/shell-completion/zsh/_hostnamectl b/shell-completion/zsh/_hostnamectl +index e02f6de30e..a7217a1999 100644 +--- a/shell-completion/zsh/_hostnamectl ++++ b/shell-completion/zsh/_hostnamectl +@@ -18,7 +18,7 @@ _hostnamectl_set-icon-name() { + + _hostnamectl_set-chassis() { + if (( CURRENT <= 3 )); then +- _chassis=( desktop laptop server tablet handset watch vm container ) ++ _chassis=( desktop laptop server tablet handset watch embedded vm container ) + _describe chassis _chassis + else + _message "no more options" +diff --git a/src/hostname/hostnamed.c b/src/hostname/hostnamed.c +index a449610bb8..0123922c4a 100644 +--- a/src/hostname/hostnamed.c ++++ b/src/hostname/hostnamed.c +@@ -138,7 +138,8 @@ static bool valid_chassis(const char *chassis) { + "server\0" + "tablet\0" + "handset\0" +- "watch\0", ++ "watch\0" ++ "embedded\0", + chassis); + } + diff --git a/0049-systemctl-when-invokes-as-reboot-f-sync.patch b/0049-systemctl-when-invokes-as-reboot-f-sync.patch new file mode 100644 index 0000000..70a9399 --- /dev/null +++ b/0049-systemctl-when-invokes-as-reboot-f-sync.patch @@ -0,0 +1,33 @@ +From fe357da5e638f97081099a28b477d59cc6991189 Mon Sep 17 00:00:00 2001 +From: Lennart Poettering +Date: Thu, 6 Nov 2014 15:20:29 +0100 +Subject: [PATCH] systemctl: when invokes as "reboot -f", sync() + +We do this in the clean shutdown path in shutdown.c, hence we should do +is for "reboot -f", too. + +(cherry picked from commit 4a3ad39957399c4a30fc472a804e72907ecaa4f9) +--- + src/systemctl/systemctl.c | 9 +++++++-- + 1 file changed, 7 insertions(+), 2 deletions(-) + +diff --git a/src/systemctl/systemctl.c b/src/systemctl/systemctl.c +index 8481a9b20c..207a5e78dc 100644 +--- a/src/systemctl/systemctl.c ++++ b/src/systemctl/systemctl.c +@@ -6948,8 +6948,13 @@ done: + + static int halt_now(enum action a) { + +-/* Make sure C-A-D is handled by the kernel from this +- * point on... */ ++ /* The kernel will automaticall flush ATA disks and suchlike ++ * on reboot(), but the file systems need to be synce'd ++ * explicitly in advance. */ ++ sync(); ++ ++ /* Make sure C-A-D is handled by the kernel from this point ++ * on... */ + reboot(RB_ENABLE_CAD); + + switch (a) { diff --git a/0050-switch_root-do-not-fail-if-base_filesystem_create-fa.patch b/0050-switch_root-do-not-fail-if-base_filesystem_create-fa.patch new file mode 100644 index 0000000..916fd94 --- /dev/null +++ b/0050-switch_root-do-not-fail-if-base_filesystem_create-fa.patch @@ -0,0 +1,41 @@ +From 70a3ef63810ef3c7970871c1b1e1e060110ecfa6 Mon Sep 17 00:00:00 2001 +From: Harald Hoyer +Date: Wed, 3 Sep 2014 13:31:25 +0200 +Subject: [PATCH] switch_root: do not fail, if base_filesystem_create() failed + +Not all switch roots are like base_filesystem_create() wants them +to look like. They might even boot, if they are RO and don't have the FS +layout. Just ignore the error and switch_root nevertheless. + +base_filesystem_create() should have logged, what went wrong. + +(cherry picked from commit 6d0f91bf551464c57bc12f99deccd515fb3f628d) +--- + src/shared/switch-root.c | 7 +------ + 1 file changed, 1 insertion(+), 6 deletions(-) + +diff --git a/src/shared/switch-root.c b/src/shared/switch-root.c +index bac0e5c349..1a558b897b 100644 +--- a/src/shared/switch-root.c ++++ b/src/shared/switch-root.c +@@ -47,7 +47,6 @@ int switch_root(const char *new_root, const char *oldroot, bool detach_oldroot, + struct stat new_root_stat; + bool old_root_remove; + const char *i, *temporary_old_root; +- int r; + + if (path_equal(new_root, "/")) + return 0; +@@ -103,11 +102,7 @@ int switch_root(const char *new_root, const char *oldroot, bool detach_oldroot, + } + } + +- r = base_filesystem_create(new_root); +- if (r < 0) { +- log_error("Failed to create the base filesystem: %s", strerror(-r)); +- return r; +- } ++ (void) base_filesystem_create(new_root); + + if (chdir(new_root) < 0) { + log_error("Failed to change directory to %s: %m", new_root); diff --git a/0051-shared-create-files-even-if-the-SELinux-policy-has-n.patch b/0051-shared-create-files-even-if-the-SELinux-policy-has-n.patch new file mode 100644 index 0000000..9a6aba7 --- /dev/null +++ b/0051-shared-create-files-even-if-the-SELinux-policy-has-n.patch @@ -0,0 +1,42 @@ +From f37f36832bafdb4c8566298c554e335f55d23152 Mon Sep 17 00:00:00 2001 +From: Michal Schmidt +Date: Thu, 6 Nov 2014 16:48:11 +0100 +Subject: [PATCH] shared: create files even if the SELinux policy has no + context for them + +The SELinux policy defines no context for some files. E.g.: + $ matchpathcon /run/lock/subsys /dev/mqueue + /run/lock/subsys <> + /dev/mqueue <> + +We still need to be able to create them. +In this case selabel_lookup_raw() returns ENOENT. We should then skip +setfscreatecon(), but still return success. +It was broken since c34255bdb2 ("label: unify code to make directories, +symlinks"). + +(cherry picked from commit 2d58aa4692e9fc47911bff5d064ba3e328c35369) +--- + src/shared/selinux-util.c | 8 ++++++-- + 1 file changed, 6 insertions(+), 2 deletions(-) + +diff --git a/src/shared/selinux-util.c b/src/shared/selinux-util.c +index 1eddd17d27..6bd3bf1c80 100644 +--- a/src/shared/selinux-util.c ++++ b/src/shared/selinux-util.c +@@ -332,9 +332,13 @@ int mac_selinux_create_file_prepare(const char *path, mode_t mode) { + r = selabel_lookup_raw(label_hnd, &filecon, newpath, mode); + } + +- if (r < 0 && errno != ENOENT) ++ /* No context specified by the policy? Proceed without setting it. */ ++ if (r < 0 && errno == ENOENT) ++ return 0; ++ ++ if (r < 0) + r = -errno; +- else if (r == 0) { ++ else { + r = setfscreatecon(filecon); + if (r < 0) { + log_enforcing("Failed to set SELinux security context %s for %s: %m", filecon, path); diff --git a/0052-switch-root-explain-why-we-don-t-care-about-base_fil.patch b/0052-switch-root-explain-why-we-don-t-care-about-base_fil.patch new file mode 100644 index 0000000..ee6ce08 --- /dev/null +++ b/0052-switch-root-explain-why-we-don-t-care-about-base_fil.patch @@ -0,0 +1,27 @@ +From 8051be0e4a82590a76e2d76662a57ca624ddc89c Mon Sep 17 00:00:00 2001 +From: Lennart Poettering +Date: Thu, 6 Nov 2014 20:00:01 +0100 +Subject: [PATCH] switch-root: explain why we don't care about + base_filesystem_create() failing + +(cherry picked from commit 64e18fd626838c3500e28b4dbf86ed62206fff47) +--- + src/shared/switch-root.c | 5 +++++ + 1 file changed, 5 insertions(+) + +diff --git a/src/shared/switch-root.c b/src/shared/switch-root.c +index 1a558b897b..3adb8463c5 100644 +--- a/src/shared/switch-root.c ++++ b/src/shared/switch-root.c +@@ -102,6 +102,11 @@ int switch_root(const char *new_root, const char *oldroot, bool detach_oldroot, + } + } + ++ /* Do not fail, if base_filesystem_create() fails. Not all ++ * switch roots are like base_filesystem_create() wants them ++ * to look like. They might even boot, if they are RO and ++ * don't have the FS layout. Just ignore the error and ++ * switch_root() nevertheless. */ + (void) base_filesystem_create(new_root); + + if (chdir(new_root) < 0) { diff --git a/0053-shutdown-fix-arguments-to-run-initramfs-shutdown.patch b/0053-shutdown-fix-arguments-to-run-initramfs-shutdown.patch new file mode 100644 index 0000000..45525a6 --- /dev/null +++ b/0053-shutdown-fix-arguments-to-run-initramfs-shutdown.patch @@ -0,0 +1,67 @@ +From e47a9f972749544d28cffede77de13e9d8af4d2b Mon Sep 17 00:00:00 2001 +From: Michal Schmidt +Date: Thu, 6 Nov 2014 22:24:13 +0100 +Subject: [PATCH] shutdown: fix arguments to /run/initramfs/shutdown + +Our initrd interface specifies that the verb is in argv[1]. +This is where systemd passes it to systemd-shutdown, but getopt +permutes argv[]. This confuses dracut's shutdown script: + Shutdown called with argument '--log-level'. Rebooting! + +getopt can be convinced to not permute argv[] by having '-' as the first +character of optstring. Let's use it. This requires changing the way +non-option arguments (in our case, the verb) are processed. + +This fixes a bug where the system would reboot instead of powering off. + +(cherry picked from commit 4b5d8d0f22ae61ceb45a25391354ba53b43ee992) +--- + src/core/shutdown.c | 17 +++++++++++------ + 1 file changed, 11 insertions(+), 6 deletions(-) + +diff --git a/src/core/shutdown.c b/src/core/shutdown.c +index 20cf526ba2..03cfddc543 100644 +--- a/src/core/shutdown.c ++++ b/src/core/shutdown.c +@@ -75,7 +75,9 @@ static int parse_argv(int argc, char *argv[]) { + assert(argc >= 1); + assert(argv); + +- while ((c = getopt_long(argc, argv, "", options, NULL)) >= 0) ++ /* "-" prevents getopt from permuting argv[] and moving the verb away ++ * from argv[1]. Our interface to initrd promises it'll be there. */ ++ while ((c = getopt_long(argc, argv, "-", options, NULL)) >= 0) + switch (c) { + + case ARG_LOG_LEVEL: +@@ -113,6 +115,13 @@ static int parse_argv(int argc, char *argv[]) { + + break; + ++ case '\001': ++ if (!arg_verb) ++ arg_verb = optarg; ++ else ++ log_error("Excess arguments, ignoring"); ++ break; ++ + case '?': + return -EINVAL; + +@@ -120,15 +129,11 @@ static int parse_argv(int argc, char *argv[]) { + assert_not_reached("Unhandled option code."); + } + +- if (optind >= argc) { ++ if (!arg_verb) { + log_error("Verb argument missing."); + return -EINVAL; + } + +- arg_verb = argv[optind]; +- +- if (optind + 1 < argc) +- log_error("Excess arguments, ignoring"); + return 0; + } + diff --git a/0054-timer-reenable-TIMER_ACTIVE-timers-when-restarted.patch b/0054-timer-reenable-TIMER_ACTIVE-timers-when-restarted.patch new file mode 100644 index 0000000..247377d --- /dev/null +++ b/0054-timer-reenable-TIMER_ACTIVE-timers-when-restarted.patch @@ -0,0 +1,41 @@ +From bfb4c47dddd3c7aeaa07eb733bb50b62eff2e082 Mon Sep 17 00:00:00 2001 +From: Michael Chapman +Date: Thu, 6 Nov 2014 19:47:02 +1100 +Subject: [PATCH] timer: reenable TIMER_ACTIVE timers when restarted + +A timer configured with OnActiveSec will start its associated unit again +if the timer is stopped, then started. However, if the timer unit is +restarted -- with "systemctl restart", say -- this does not occur. + +This commit ensures that TIMER_ACTIVE timers are re-enabled whenever the +timer is started, even if that's within a restart job. + +(cherry picked from commit 779042e772d2459f7649b34a164902dc456f1bab) +--- + src/core/timer.c | 6 ++++++ + 1 file changed, 6 insertions(+) + +diff --git a/src/core/timer.c b/src/core/timer.c +index a3713e2140..5c4e9f995a 100644 +--- a/src/core/timer.c ++++ b/src/core/timer.c +@@ -521,6 +521,7 @@ fail: + + static int timer_start(Unit *u) { + Timer *t = TIMER(u); ++ TimerValue *v; + + assert(t); + assert(t->state == TIMER_DEAD || t->state == TIMER_FAILED); +@@ -530,6 +531,11 @@ static int timer_start(Unit *u) { + + t->last_trigger = DUAL_TIMESTAMP_NULL; + ++ /* Reenable all timers that depend on unit activation time */ ++ LIST_FOREACH(value, v, t->values) ++ if (v->base == TIMER_ACTIVE) ++ v->disabled = false; ++ + if (t->stamp_path) { + struct stat st; + diff --git a/systemd.spec b/systemd.spec index a2db568..5fcc524 100644 --- a/systemd.spec +++ b/systemd.spec @@ -16,7 +16,7 @@ Name: systemd Url: http://www.freedesktop.org/wiki/Software/systemd Version: 217 -Release: 3%{?gitcommit:.git%{gitcommit}}%{?dist} +Release: 4%{?gitcommit:.git%{gitcommit}}%{?dist} # For a breakdown of the licensing, see README License: LGPLv2+ and MIT and GPLv2+ Summary: A System and Service Manager @@ -36,12 +36,63 @@ Source4: yum-protect-systemd.conf Source5: inittab Source6: sysctl.conf.README -# Patch series is available from http://cgit.freedesktop.org/systemd/systemd-stable/log/?h=v215-stable -# GIT_DIR=~/src/systemd/.git git format-patch-ab -M -N --no-signature v216..master +# Patch series is available from http://cgit.freedesktop.org/systemd/systemd-stable/log/?h=v217-stable +# GIT_DIR=~/src/systemd/.git git format-patch-ab -M -N --no-signature v217..v217-stable # i=1; for p in 0*patch;do printf "Patch%04d: %s\n" $i $p; ((i++));done - -Patch0001: 0001-units-don-t-order-journal-flushing-afte-remote-fs.ta.patch -Patch0002: 0002-units-make-systemd-journald.service-Type-notify.patch +Patch0001: 0001-NEWS-well-it-s-Options-now-not-Discard.patch +Patch0002: 0002-sd-bus-properly-handle-removals-of-non-existing-matc.patch +Patch0003: 0003-nspawn-ignore-EEXIST-when-creating-mount-point.patch +Patch0004: 0004-udev-path_id-update-comments.patch +Patch0005: 0005-bash-completion-rework-startable-restartable-units-o.patch +Patch0006: 0006-systemctl-let-list-units-unit-files-honour-type.patch +Patch0007: 0007-systemctl-obey-state-in-list-unit-files.patch +Patch0008: 0008-bash-completion-use-improved-filtering-to-make-thing.patch +Patch0009: 0009-zsh-completion-update-start-restart-completions.patch +Patch0010: 0010-keymap-Ignore-brightness-keys-on-Dell-Inspiron-1520-.patch +Patch0011: 0011-sysusers-Preserve-ownership-and-mode-on-etc-passwd-a.patch +Patch0012: 0012-snapshot-return-error-when-snapshot-exists.patch +Patch0013: 0013-sd-dhcp-client-clean-up-raw-socket-sd_event_source-w.patch +Patch0014: 0014-remove-references-of-readahead.patch +Patch0015: 0015-shared-add-missing-includes.patch +Patch0016: 0016-shared-fix-typo.patch +Patch0017: 0017-shared-install-avoid-prematurely-rejecting-missing-u.patch +Patch0018: 0018-nspawn-don-t-make-up-1-as-error-code.patch +Patch0019: 0019-units-don-t-order-journal-flushing-afte-remote-fs.ta.patch +Patch0020: 0020-hwdb-Update-database-of-Bluetooth-company-identifier.patch +Patch0021: 0021-libudev-modernization.patch +Patch0022: 0022-libudev-do-not-accept-invalid-log-levels.patch +Patch0023: 0023-man-describe-all-log-levels-in-udevadm-8.patch +Patch0024: 0024-sd-dhcp6-client-fix-off-by-two-error-in-DUID-length.patch +Patch0025: 0025-core-improve-error-message-when-machine-id-is-missin.patch +Patch0026: 0026-man-explain-journalctl-flush-correctly.patch +Patch0027: 0027-systemd-journal-flush.service-remove-trigger-from-de.patch +Patch0028: 0028-kernel-install-90-loaderentry.install-fix-cmdline-pa.patch +Patch0029: 0029-scsi_id-fix-usage-spelling.patch +Patch0030: 0030-libudev-Use-correct-free-function.patch +Patch0031: 0031-Raise-level-of-Found-dependency.-lines.patch +Patch0032: 0032-manager-do-not-print-timing-when-running-in-test-mod.patch +Patch0033: 0033-unit-do-not-order-timers.target-before-basic.target.patch +Patch0034: 0034-units-order-sd-journal-flush-after-sd-remount-fs.patch +Patch0035: 0035-man-sd_event_add_post-fix-typo.patch +Patch0036: 0036-journald-fix-minor-memory-leak.patch +Patch0037: 0037-journald-fix-memory-leak-on-error-path.patch +Patch0038: 0038-journal-when-dumping-log-data-with-missing-COMM-fiel.patch +Patch0039: 0039-localectl-fix-localectl-set-x11-keymap-syntax-descri.patch +Patch0040: 0040-man-tmpfiles.d-fix-typo.patch +Patch0041: 0041-units-make-systemd-journald.service-Type-notify.patch +Patch0042: 0042-buildsys-test-util-needs-lm-for-fabs.patch +Patch0043: 0043-udev-Fix-parsing-of-udev.event-timeout-kernel-parame.patch +Patch0044: 0044-udev-avoid-magic-constants-in-kernel-cmdline-parsers.patch +Patch0045: 0045-manager-Ensure-user-s-systemd-runtime-directory-exis.patch +Patch0046: 0046-units-disable-job-timeouts.patch +Patch0047: 0047-login-rerun-vconsole-setup-when-switching-from-vgaco.patch +Patch0048: 0048-hostnamed-introduce-new-embedded-chassis-type.patch +Patch0049: 0049-systemctl-when-invokes-as-reboot-f-sync.patch +Patch0050: 0050-switch_root-do-not-fail-if-base_filesystem_create-fa.patch +Patch0051: 0051-shared-create-files-even-if-the-SELinux-policy-has-n.patch +Patch0052: 0052-switch-root-explain-why-we-don-t-care-about-base_fil.patch +Patch0053: 0053-shutdown-fix-arguments-to-run-initramfs-shutdown.patch +Patch0054: 0054-timer-reenable-TIMER_ACTIVE-timers-when-restarted.patch Patch0998: fedora-disable-resolv.conf-symlink.patch Patch0999: fedora-add-bridge-sysctl-configuration.patch @@ -825,6 +876,19 @@ getent passwd systemd-journal-upload >/dev/null 2>&1 || useradd -r -l -g systemd %{_datadir}/systemd/gatewayd %changelog +* Thu Nov 06 2014 Zbigniew Jędrzejewski-Szmek - 217-4 +- Change libgudev1 to only require systemd-libs (#727499), there's + no need to require full systemd stack. +- Fixes for bugs #1159448, #1152220, #1158035. +- Bash completions updates to allow propose more units for start/restart, + and completions for set-default,get-default. +- Again allow systemctl enable of instances. +- Hardware database update and fixes. +- Udev crash on invalid options and kernel commandline timeout parsing are fixed. +- Add "embedded" chassis type. +- Sync before 'reboot -f'. +- Fix restarting of timer units. + * Wed Nov 05 2014 Michal Schmidt - 217-3 - Fix hanging journal flush (#1159641)