forked from pool/systemd
.
OBS-URL: https://build.opensuse.org/package/show/Base:System/systemd?expand=0&rev=493
This commit is contained in:
parent
638009e9d9
commit
0c19b51602
329
0001-core-replace-OnFailureIsolate-setting-by-a-more-gene.patch
Normal file
329
0001-core-replace-OnFailureIsolate-setting-by-a-more-gene.patch
Normal file
@ -0,0 +1,329 @@
|
||||
From d420282b28f50720e233ccb1c02547c562195653 Mon Sep 17 00:00:00 2001
|
||||
From: Lennart Poettering <lennart@poettering.net>
|
||||
Date: Tue, 26 Nov 2013 01:39:53 +0100
|
||||
Subject: [PATCH] core: replace OnFailureIsolate= setting by a more generic
|
||||
OnFailureJobMode= setting and make use of it where applicable
|
||||
|
||||
---
|
||||
man/systemd.unit.xml | 40 +++++++++++++++++++++++++----------
|
||||
src/core/dbus-unit.c | 3 ++-
|
||||
src/core/job.h | 3 +--
|
||||
src/core/load-fragment-gperf.gperf.m4 | 3 ++-
|
||||
src/core/load-fragment.c | 31 +++++++++++++++++++++++++++
|
||||
src/core/load-fragment.h | 2 ++
|
||||
src/core/unit.c | 11 +++++-----
|
||||
src/core/unit.h | 4 ++--
|
||||
units/initrd-cleanup.service.in | 1 +
|
||||
units/initrd-fs.target | 2 +-
|
||||
units/initrd-parse-etc.service.in | 1 +
|
||||
units/initrd-root-fs.target | 2 +-
|
||||
units/initrd-switch-root.service.in | 1 +
|
||||
units/initrd.target | 2 +-
|
||||
units/local-fs.target | 2 +-
|
||||
15 files changed, 82 insertions(+), 26 deletions(-)
|
||||
|
||||
Index: systemd-208/man/systemd.unit.xml
|
||||
===================================================================
|
||||
--- systemd-208.orig/man/systemd.unit.xml
|
||||
+++ systemd-208/man/systemd.unit.xml
|
||||
@@ -669,19 +669,37 @@
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry>
|
||||
- <term><varname>OnFailureIsolate=</varname></term>
|
||||
+ <term><varname>OnFailureJobMode=</varname></term>
|
||||
|
||||
- <listitem><para>Takes a boolean
|
||||
- argument. If <option>true</option>, the
|
||||
- unit listed in
|
||||
+ <listitem><para>Takes a value of
|
||||
+ <literal>fail</literal>,
|
||||
+ <literal>replace</literal>,
|
||||
+ <literal>replace-irreversibly</literal>
|
||||
+ or
|
||||
+ <literal>isolate</literal>. Defaults
|
||||
+ to
|
||||
+ <literal>replace</literal>. Specifies
|
||||
+ how the units listed in
|
||||
<varname>OnFailure=</varname> will be
|
||||
- enqueued in isolation mode, i.e. all
|
||||
- units that are not its dependency will
|
||||
- be stopped. If this is set, only a
|
||||
+ enqueued. If set to
|
||||
+ <literal>fail</literal> and
|
||||
+ contradicting jobs are already queued,
|
||||
+ cause the activation to fail. If set
|
||||
+ to <literal>replace</literal> and
|
||||
+ contradicting jobs area already
|
||||
+ queued, replace
|
||||
+ those. <literal>replace-irreversibly</literal>
|
||||
+ is similar to
|
||||
+ <literal>replace</literal>, however,
|
||||
+ creates jobs that cannot be reversed
|
||||
+ unless they finished or are explicitly
|
||||
+ canceled. <literal>isolate</literal>
|
||||
+ may be used to terminate all other
|
||||
+ units but the specified one. If
|
||||
+ this is set to
|
||||
+ <literal>isolate</literal>, only a
|
||||
single unit may be listed in
|
||||
- <varname>OnFailure=</varname>. Defaults
|
||||
- to
|
||||
- <option>false</option>.</para></listitem>
|
||||
+ <varname>OnFailure=</varname>..</para></listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry>
|
||||
Index: systemd-208/src/core/dbus-unit.c
|
||||
===================================================================
|
||||
--- systemd-208.orig/src/core/dbus-unit.c
|
||||
+++ systemd-208/src/core/dbus-unit.c
|
||||
@@ -133,6 +133,7 @@ static int bus_unit_append_description(D
|
||||
}
|
||||
|
||||
static DEFINE_BUS_PROPERTY_APPEND_ENUM(bus_unit_append_load_state, unit_load_state, UnitLoadState);
|
||||
+static DEFINE_BUS_PROPERTY_APPEND_ENUM(bus_unit_append_job_mode, job_mode, JobMode);
|
||||
|
||||
static int bus_unit_append_active_state(DBusMessageIter *i, const char *property, void *data) {
|
||||
Unit *u = data;
|
||||
@@ -1079,7 +1080,7 @@ const BusProperty bus_unit_properties[]
|
||||
{ "RefuseManualStop", bus_property_append_bool, "b", offsetof(Unit, refuse_manual_stop) },
|
||||
{ "AllowIsolate", bus_property_append_bool, "b", offsetof(Unit, allow_isolate) },
|
||||
{ "DefaultDependencies", bus_property_append_bool, "b", offsetof(Unit, default_dependencies) },
|
||||
- { "OnFailureIsolate", bus_property_append_bool, "b", offsetof(Unit, on_failure_isolate) },
|
||||
+ { "OnFailureJobMode", bus_unit_append_job_mode, "s", offsetof(Unit, on_failure_job_mode) },
|
||||
{ "IgnoreOnIsolate", bus_property_append_bool, "b", offsetof(Unit, ignore_on_isolate) },
|
||||
{ "IgnoreOnSnapshot", bus_property_append_bool, "b", offsetof(Unit, ignore_on_snapshot) },
|
||||
{ "NeedDaemonReload", bus_unit_append_need_daemon_reload, "b", 0 },
|
||||
Index: systemd-208/src/core/job.h
|
||||
===================================================================
|
||||
--- systemd-208.orig/src/core/job.h
|
||||
+++ systemd-208/src/core/job.h
|
||||
@@ -83,7 +83,7 @@ enum JobState {
|
||||
enum JobMode {
|
||||
JOB_FAIL, /* Fail if a conflicting job is already queued */
|
||||
JOB_REPLACE, /* Replace an existing conflicting job */
|
||||
- JOB_REPLACE_IRREVERSIBLY, /* Like JOB_REPLACE + produce irreversible jobs */
|
||||
+ JOB_REPLACE_IRREVERSIBLY,/* Like JOB_REPLACE + produce irreversible jobs */
|
||||
JOB_ISOLATE, /* Start a unit, and stop all others */
|
||||
JOB_IGNORE_DEPENDENCIES, /* Ignore both requirement and ordering dependencies */
|
||||
JOB_IGNORE_REQUIREMENTS, /* Ignore requirement dependencies */
|
||||
Index: systemd-208/src/core/load-fragment-gperf.gperf.m4
|
||||
===================================================================
|
||||
--- systemd-208.orig/src/core/load-fragment-gperf.gperf.m4
|
||||
+++ systemd-208/src/core/load-fragment-gperf.gperf.m4
|
||||
@@ -122,7 +122,8 @@ Unit.RefuseManualStart, config_
|
||||
Unit.RefuseManualStop, config_parse_bool, 0, offsetof(Unit, refuse_manual_stop)
|
||||
Unit.AllowIsolate, config_parse_bool, 0, offsetof(Unit, allow_isolate)
|
||||
Unit.DefaultDependencies, config_parse_bool, 0, offsetof(Unit, default_dependencies)
|
||||
-Unit.OnFailureIsolate, config_parse_bool, 0, offsetof(Unit, on_failure_isolate)
|
||||
+Unit.OnFailureJobMode, config_parse_job_mode, 0, offsetof(Unit, on_failure_job_mode)
|
||||
+Unit.OnFailureIsolate, config_parse_job_mode_isolate, 0, offsetof(Unit, on_failure_job_mode)
|
||||
Unit.IgnoreOnIsolate, config_parse_bool, 0, offsetof(Unit, ignore_on_isolate)
|
||||
Unit.IgnoreOnSnapshot, config_parse_bool, 0, offsetof(Unit, ignore_on_snapshot)
|
||||
Unit.JobTimeoutSec, config_parse_sec, 0, offsetof(Unit, job_timeout)
|
||||
Index: systemd-208/src/core/load-fragment.c
|
||||
===================================================================
|
||||
--- systemd-208.orig/src/core/load-fragment.c
|
||||
+++ systemd-208/src/core/load-fragment.c
|
||||
@@ -2314,6 +2314,36 @@ int config_parse_blockio_bandwidth(
|
||||
return 0;
|
||||
}
|
||||
|
||||
+DEFINE_CONFIG_PARSE_ENUM(config_parse_job_mode, job_mode, JobMode, "Failed to parse job mode");
|
||||
+
|
||||
+int config_parse_job_mode_isolate(
|
||||
+ const char *unit,
|
||||
+ const char *filename,
|
||||
+ unsigned line,
|
||||
+ const char *section,
|
||||
+ const char *lvalue,
|
||||
+ int ltype,
|
||||
+ const char *rvalue,
|
||||
+ void *data,
|
||||
+ void *userdata) {
|
||||
+
|
||||
+ JobMode *m = data;
|
||||
+ int r;
|
||||
+
|
||||
+ assert(filename);
|
||||
+ assert(lvalue);
|
||||
+ assert(rvalue);
|
||||
+
|
||||
+ r = parse_boolean(rvalue);
|
||||
+ if (r < 0) {
|
||||
+ log_syntax(unit, LOG_ERR, filename, line, EINVAL, "Failed to parse boolean, ignoring: %s", rvalue);
|
||||
+ return 0;
|
||||
+ }
|
||||
+
|
||||
+ *m = r ? JOB_ISOLATE : JOB_REPLACE;
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
#define FOLLOW_MAX 8
|
||||
|
||||
static int open_follow(char **filename, FILE **_f, Set *names, char **_final) {
|
||||
Index: systemd-208/src/core/load-fragment.h
|
||||
===================================================================
|
||||
--- systemd-208.orig/src/core/load-fragment.h
|
||||
+++ systemd-208/src/core/load-fragment.h
|
||||
@@ -83,6 +83,8 @@ int config_parse_device_allow(const char
|
||||
int config_parse_blockio_weight(const char *unit, const char *filename, unsigned line, const char *section, const char *lvalue, int ltype, const char *rvalue, void *data, void *userdata);
|
||||
int config_parse_blockio_device_weight(const char *unit, const char *filename, unsigned line, const char *section, const char *lvalue, int ltype, const char *rvalue, void *data, void *userdata);
|
||||
int config_parse_blockio_bandwidth(const char *unit, const char *filename, unsigned line, const char *section, const char *lvalue, int ltype, const char *rvalue, void *data, void *userdata);
|
||||
+int config_parse_job_mode(const char *unit, const char *filename, unsigned line, const char *section, const char *lvalue, int ltype, const char *rvalue, void *data, void *userdata);
|
||||
+int config_parse_job_mode_isolate(const char *unit, const char *filename, unsigned line, const char *section, const char *lvalue, int ltype, const char *rvalue, void *data, void *userdata);
|
||||
|
||||
/* gperf prototypes */
|
||||
const struct ConfigPerfItem* load_fragment_gperf_lookup(const char *key, unsigned length);
|
||||
Index: systemd-208/src/core/unit.c
|
||||
===================================================================
|
||||
--- systemd-208.orig/src/core/unit.c
|
||||
+++ systemd-208/src/core/unit.c
|
||||
@@ -85,6 +85,7 @@ Unit *unit_new(Manager *m, size_t size)
|
||||
u->deserialized_job = _JOB_TYPE_INVALID;
|
||||
u->default_dependencies = true;
|
||||
u->unit_file_state = _UNIT_FILE_STATE_INVALID;
|
||||
+ u->on_failure_job_mode = JOB_REPLACE;
|
||||
|
||||
return u;
|
||||
}
|
||||
@@ -807,14 +808,14 @@ void unit_dump(Unit *u, FILE *f, const c
|
||||
"%s\tRefuseManualStart: %s\n"
|
||||
"%s\tRefuseManualStop: %s\n"
|
||||
"%s\tDefaultDependencies: %s\n"
|
||||
- "%s\tOnFailureIsolate: %s\n"
|
||||
+ "%s\tOnFailureJobMode: %s\n"
|
||||
"%s\tIgnoreOnIsolate: %s\n"
|
||||
"%s\tIgnoreOnSnapshot: %s\n",
|
||||
prefix, yes_no(u->stop_when_unneeded),
|
||||
prefix, yes_no(u->refuse_manual_start),
|
||||
prefix, yes_no(u->refuse_manual_stop),
|
||||
prefix, yes_no(u->default_dependencies),
|
||||
- prefix, yes_no(u->on_failure_isolate),
|
||||
+ prefix, job_mode_to_string(u->on_failure_job_mode),
|
||||
prefix, yes_no(u->ignore_on_isolate),
|
||||
prefix, yes_no(u->ignore_on_snapshot));
|
||||
|
||||
@@ -985,11 +986,11 @@ int unit_load(Unit *u) {
|
||||
if (r < 0)
|
||||
goto fail;
|
||||
|
||||
- if (u->on_failure_isolate &&
|
||||
+ if (u->on_failure_job_mode == JOB_ISOLATE &&
|
||||
set_size(u->dependencies[UNIT_ON_FAILURE]) > 1) {
|
||||
|
||||
log_error_unit(u->id,
|
||||
- "More than one OnFailure= dependencies specified for %s but OnFailureIsolate= enabled. Refusing.", u->id);
|
||||
+ "More than one OnFailure= dependencies specified for %s but OnFailureJobMode=isolate set. Refusing.", u->id);
|
||||
|
||||
r = -EINVAL;
|
||||
goto fail;
|
||||
@@ -1394,7 +1395,7 @@ void unit_start_on_failure(Unit *u) {
|
||||
SET_FOREACH(other, u->dependencies[UNIT_ON_FAILURE], i) {
|
||||
int r;
|
||||
|
||||
- r = manager_add_job(u->manager, JOB_START, other, u->on_failure_isolate ? JOB_ISOLATE : JOB_REPLACE, true, NULL, NULL);
|
||||
+ r = manager_add_job(u->manager, JOB_START, other, u->on_failure_job_mode, true, NULL, NULL);
|
||||
if (r < 0)
|
||||
log_error_unit(u->id, "Failed to enqueue OnFailure= job: %s", strerror(-r));
|
||||
}
|
||||
Index: systemd-208/src/core/unit.h
|
||||
===================================================================
|
||||
--- systemd-208.orig/src/core/unit.h
|
||||
+++ systemd-208/src/core/unit.h
|
||||
@@ -228,8 +228,8 @@ struct Unit {
|
||||
/* Allow isolation requests */
|
||||
bool allow_isolate;
|
||||
|
||||
- /* Isolate OnFailure unit */
|
||||
- bool on_failure_isolate;
|
||||
+ /* How to start OnFailure units */
|
||||
+ JobMode on_failure_job_mode;
|
||||
|
||||
/* Ignore this unit when isolating */
|
||||
bool ignore_on_isolate;
|
||||
Index: systemd-208/units/initrd-cleanup.service.in
|
||||
===================================================================
|
||||
--- systemd-208.orig/units/initrd-cleanup.service.in
|
||||
+++ systemd-208/units/initrd-cleanup.service.in
|
||||
@@ -10,6 +10,7 @@ Description=Cleaning Up and Shutting Dow
|
||||
DefaultDependencies=no
|
||||
ConditionPathExists=/etc/initrd-release
|
||||
OnFailure=emergency.target
|
||||
+OnFailureJobMode=replace-irreversibly
|
||||
After=initrd-root-fs.target initrd-fs.target initrd.target
|
||||
|
||||
[Service]
|
||||
Index: systemd-208/units/initrd-fs.target
|
||||
===================================================================
|
||||
--- systemd-208.orig/units/initrd-fs.target
|
||||
+++ systemd-208/units/initrd-fs.target
|
||||
@@ -9,7 +9,7 @@
|
||||
Description=Initrd File Systems
|
||||
Documentation=man:systemd.special(7)
|
||||
OnFailure=emergency.target
|
||||
-OnFailureIsolate=yes
|
||||
+OnFailureJobMode=replace-irreversibly
|
||||
ConditionPathExists=/etc/initrd-release
|
||||
After=initrd-parse-etc.service
|
||||
DefaultDependencies=no
|
||||
Index: systemd-208/units/initrd-parse-etc.service.in
|
||||
===================================================================
|
||||
--- systemd-208.orig/units/initrd-parse-etc.service.in
|
||||
+++ systemd-208/units/initrd-parse-etc.service.in
|
||||
@@ -11,6 +11,7 @@ DefaultDependencies=no
|
||||
Requires=initrd-root-fs.target
|
||||
After=initrd-root-fs.target
|
||||
OnFailure=emergency.target
|
||||
+OnFailureJobMode=replace-irreversibly
|
||||
ConditionPathExists=/etc/initrd-release
|
||||
|
||||
[Service]
|
||||
Index: systemd-208/units/initrd-root-fs.target
|
||||
===================================================================
|
||||
--- systemd-208.orig/units/initrd-root-fs.target
|
||||
+++ systemd-208/units/initrd-root-fs.target
|
||||
@@ -10,6 +10,6 @@ Description=Initrd Root File System
|
||||
Documentation=man:systemd.special(7)
|
||||
ConditionPathExists=/etc/initrd-release
|
||||
OnFailure=emergency.target
|
||||
-OnFailureIsolate=yes
|
||||
+OnFailureJobMode=replace-irreversibly
|
||||
DefaultDependencies=no
|
||||
Conflicts=shutdown.target
|
||||
Index: systemd-208/units/initrd-switch-root.service.in
|
||||
===================================================================
|
||||
--- systemd-208.orig/units/initrd-switch-root.service.in
|
||||
+++ systemd-208/units/initrd-switch-root.service.in
|
||||
@@ -10,6 +10,7 @@ Description=Switch Root
|
||||
DefaultDependencies=no
|
||||
ConditionPathExists=/etc/initrd-release
|
||||
OnFailure=emergency.target
|
||||
+OnFailureJobMode=replace-irreversibly
|
||||
AllowIsolate=yes
|
||||
|
||||
[Service]
|
||||
Index: systemd-208/units/initrd.target
|
||||
===================================================================
|
||||
--- systemd-208.orig/units/initrd.target
|
||||
+++ systemd-208/units/initrd.target
|
||||
@@ -9,7 +9,7 @@
|
||||
Description=Initrd Default Target
|
||||
Documentation=man:systemd.special(7)
|
||||
OnFailure=emergency.target
|
||||
-OnFailureIsolate=yes
|
||||
+OnFailureJobMode=replace-irreversibly
|
||||
ConditionPathExists=/etc/initrd-release
|
||||
Requires=basic.target
|
||||
Wants=initrd-root-fs.target initrd-fs.target initrd-parse-etc.service
|
||||
Index: systemd-208/units/local-fs.target
|
||||
===================================================================
|
||||
--- systemd-208.orig/units/local-fs.target
|
||||
+++ systemd-208/units/local-fs.target
|
||||
@@ -12,4 +12,4 @@ After=local-fs-pre.target
|
||||
DefaultDependencies=no
|
||||
Conflicts=shutdown.target
|
||||
OnFailure=emergency.target
|
||||
-OnFailureIsolate=no
|
||||
+OnFailureJobMode=replace-irreversibly
|
22
make-emergency.service-conflict-with-syslog.socket.patch
Normal file
22
make-emergency.service-conflict-with-syslog.socket.patch
Normal file
@ -0,0 +1,22 @@
|
||||
If after emergency service had been started there is incoming
|
||||
traffic on syslog.socket emergency.service gets killed due to
|
||||
implicit dependencies on basic.target => sysinit.target which in
|
||||
turn conflict with emergency.target.
|
||||
|
||||
As a workaround explicitly stop syslog.socket when entering
|
||||
emergency.service.
|
||||
|
||||
Reference: bnc#852232
|
||||
Index: systemd-208/units/emergency.service.in
|
||||
===================================================================
|
||||
--- systemd-208/units/emergency.service.in
|
||||
+++ systemd-208/units/emergency.service.in
|
||||
@@ -9,7 +9,7 @@
|
||||
Description=Emergency Shell
|
||||
Documentation=man:sulogin(8)
|
||||
DefaultDependencies=no
|
||||
-Conflicts=shutdown.target
|
||||
+Conflicts=shutdown.target syslog.socket
|
||||
Before=shutdown.target
|
||||
|
||||
[Service]
|
@ -114,6 +114,19 @@ Fri Dec 6 13:30:19 UTC 2013 - werner@suse.de
|
||||
the systemd-journald (bnc#838475)
|
||||
- Let us build require the package config for libpcre (bnc#853293)
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Sat Nov 30 08:16:02 UTC 2013 - arvidjaar@gmail.com
|
||||
|
||||
- Add patch
|
||||
0001-core-replace-OnFailureIsolate-setting-by-a-more-gene.patch
|
||||
Make sure emergency shell is not killed by attempt to start another unit
|
||||
(bnc#852021). Backported from d420282b28f50720e233ccb1c02547c562195653.
|
||||
- Add patch
|
||||
make-emergency.service-conflict-with-syslog.socket.patch
|
||||
Previous patch did not fix problem if syslog connection request came
|
||||
after emergency shell was already started. So forcibly stop syslog.socket
|
||||
when starting emergency.service. (bnc#852232)
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Thu Nov 28 10:25:58 UTC 2013 - lbsousajr@gmail.com
|
||||
|
||||
|
@ -252,6 +252,10 @@ Patch80: 0001-analyze-set-text-on-side-with-most-space.patch
|
||||
Patch81: 0001-logind-garbage-collect-stale-users.patch
|
||||
# PATCH-FIX-UPSTREAM analyze-fix-crash-in-command-line-parsing.patch fcrozat@suse.com bnc#859365 -- Fix crash in systemd-analyze
|
||||
Patch82: analyze-fix-crash-in-command-line-parsing.patch
|
||||
# PATCH-FIX-UPSTREAM 0001-core-replace-OnFailureIsolate-setting-by-a-more-gene.patch -- Prevent accidental kill of emergency shell (bnc#852021)
|
||||
Patch83: 0001-core-replace-OnFailureIsolate-setting-by-a-more-gene.patch
|
||||
# PATCH-FIX-OPENSUSE make-emergency.service-conflict-with-syslog.socket.patch (bnc#852232)
|
||||
Patch84: make-emergency.service-conflict-with-syslog.socket.patch
|
||||
|
||||
# udev patches
|
||||
# PATCH-FIX-OPENSUSE 1001-re-enable-by_path-links-for-ata-devices.patch
|
||||
@ -554,6 +558,8 @@ cp %{SOURCE7} m4/
|
||||
%patch80 -p1
|
||||
%patch81 -p1
|
||||
%patch82 -p1
|
||||
%patch83 -p1
|
||||
%patch84 -p1
|
||||
|
||||
# udev patches
|
||||
%patch1001 -p1
|
||||
|
Loading…
Reference in New Issue
Block a user