SHA256
1
0
forked from pool/systemd

Accepting request 101505 from Base:System

- Update to version 39:
  + New systemd-cgtop tool to show control groups by their resource
    usage.
  + Linking against libacl for ACLs is optional again.
  + If a group "adm" exists, journal files are automatically owned
    by them, thus allow members of this group full access to the
    system journal as well as all user journals.
  + The journal now stores the SELinux context of the logging
    client for all entries.
  + Add C++ inclusion guards to all public headers.
  + New output mode "cat" in the journal to print only text
    messages, without any meta data like date or time.
  + Include tiny X server wrapper as a temporary stop-gap to teach
    XOrg udev display enumeration (until XOrg supports udev
    hotplugging for display devices).
  + Add new systemd-cat tool for executing arbitrary programs with
    STDERR/STDOUT connected to the journal. Can also act as BSD
    logger replacement, and does so by default.
  + Optionally store all locally generated coredumps in the journal
    along with meta data.
  + systemd-tmpfiles learnt four new commands: n, L, c, b, for
    writing short strings to files (for usage for /sys), and for
    creating symlinks, character and block device nodes.
  + New unit file option ControlGroupPersistent= to make cgroups
    persistent.
  + Support multiple local RTCs in a sane way.
  + No longer monopolize IO when replaying readahead data on
    rotating disks.
  + Don't show kernel threads in systemd-cgls anymore, unless
    requested with new -k switch. (forwarded request 101496 from fcrozat)

OBS-URL: https://build.opensuse.org/request/show/101505
OBS-URL: https://build.opensuse.org/package/show/openSUSE:Factory/systemd?expand=0&rev=85
This commit is contained in:
Stephan Kulow 2012-01-26 15:00:42 +00:00 committed by Git OBS Bridge
parent fd27f5b8ab
commit 85f340d6af
24 changed files with 395 additions and 2380 deletions

View File

@ -1,4 +1,4 @@
From 5c894bc1e45f7c34bf7fc4ca0d20bf1c3b679bef Mon Sep 17 00:00:00 2001
m 5c894bc1e45f7c34bf7fc4ca0d20bf1c3b679bef Mon Sep 17 00:00:00 2001
From: Frederic Crozat <fcrozat@suse.com>
Date: Thu, 18 Aug 2011 18:28:01 +0200
Subject: [PATCH] handle disable_caplock and compose_table and kbd_rate
@ -9,8 +9,8 @@ Subject: [PATCH] handle disable_caplock and compose_table and kbd_rate
Index: systemd-37/src/vconsole-setup.c
===================================================================
--- systemd-37.orig/src/vconsole-setup.c
+++ systemd-37/src/vconsole-setup.c
--- systemd-37.orig/src/vconsole/vconsole-setup.c
+++ systemd-37/src/vconsole/vconsole-setup.c
@@ -40,6 +40,7 @@
#include "log.h"
#include "macro.h"
@ -19,7 +19,7 @@ Index: systemd-37/src/vconsole-setup.c
static bool is_vconsole(int fd) {
unsigned char data[1];
@@ -79,8 +80,8 @@ static int disable_utf8(int fd) {
@@ -79,8 +80,8 @@
return r;
}
@ -30,7 +30,7 @@ Index: systemd-37/src/vconsole-setup.c
int i = 0;
pid_t pid;
@@ -99,6 +100,8 @@ static int load_keymap(const char *vc, c
@@ -99,6 +100,8 @@
args[i++] = map;
if (map_toggle)
args[i++] = map_toggle;
@ -39,7 +39,7 @@ Index: systemd-37/src/vconsole-setup.c
args[i++] = NULL;
if ((pid = fork()) < 0) {
@@ -150,6 +153,101 @@ static int load_font(const char *vc, con
@@ -150,6 +153,101 @@
return 0;
}
@ -141,8 +141,8 @@ Index: systemd-37/src/vconsole-setup.c
int main(int argc, char **argv) {
const char *vc;
char *vc_keymap = NULL;
@@ -163,8 +261,16 @@ int main(int argc, char **argv) {
#ifdef TARGET_MANDRIVA
@@ -163,8 +261,16 @@
#if defined(TARGET_MANDRIVA) || defined(TARGET_MAGEIA)
char *vc_keytable = NULL;
#endif
+#ifdef TARGET_SUSE
@ -158,7 +158,7 @@ Index: systemd-37/src/vconsole-setup.c
int r = EXIT_FAILURE;
pid_t font_pid = 0, keymap_pid = 0;
@@ -265,6 +371,10 @@ int main(int argc, char **argv) {
@@ -265,6 +371,10 @@
#elif defined(TARGET_SUSE)
if ((r = parse_env_file("/etc/sysconfig/keyboard", NEWLINE,
"KEYTABLE", &vc_keymap,
@ -169,7 +169,7 @@ Index: systemd-37/src/vconsole-setup.c
NULL)) < 0) {
if (r != -ENOENT)
@@ -280,6 +390,7 @@ int main(int argc, char **argv) {
@@ -280,6 +390,7 @@
if (r != -ENOENT)
log_warning("Failed to read /etc/sysconfig/console: %s", strerror(-r));
}
@ -177,7 +177,7 @@ Index: systemd-37/src/vconsole-setup.c
#elif defined(TARGET_ARCH)
if ((r = parse_env_file("/etc/rc.conf", NEWLINE,
@@ -436,7 +547,11 @@ int main(int argc, char **argv) {
@@ -436,7 +547,11 @@
if (!utf8)
disable_utf8(fd);
@ -190,7 +190,7 @@ Index: systemd-37/src/vconsole-setup.c
load_font(vc, vc_font, vc_font_map, vc_font_unimap, &font_pid) >= 0)
r = EXIT_SUCCESS;
@@ -444,6 +559,14 @@ finish:
@@ -444,6 +559,14 @@
if (keymap_pid > 0)
wait_for_terminate_and_warn(KBD_LOADKEYS, keymap_pid);
@ -205,7 +205,7 @@ Index: systemd-37/src/vconsole-setup.c
if (font_pid > 0)
wait_for_terminate_and_warn(KBD_SETFONT, font_pid);
@@ -451,6 +574,12 @@ finish:
@@ -451,6 +574,12 @@
free(vc_font);
free(vc_font_map);
free(vc_font_unimap);
@ -218,3 +218,4 @@ Index: systemd-37/src/vconsole-setup.c
if (fd >= 0)
close_nointr_nofail(fd);
Only in new/src/vconsole: vconsole-setup.c.orig

View File

@ -7,11 +7,15 @@ Subject: [PATCH] service: Fix dependencies added when parsing insserv.conf
src/service.c | 16 +++++++++-------
1 files changed, 9 insertions(+), 7 deletions(-)
diff --git a/src/service.c b/src/service.c
index c2053ce..4abc7e7 100644
--- a/src/service.c
+++ b/src/service.c
@@ -3031,18 +3031,20 @@ static void sysv_facility_in_insserv_conf(Manager *mgr) {
Index: systemd-39/src/service.c
===================================================================
--- systemd-39.orig/src/service.c
+++ systemd-39/src/service.c
@@ -3111,22 +3111,22 @@ static void sysv_facility_in_insserv_con
if (sysv_translate_facility(parsed[0], NULL, &facility) < 0)
continue;
if ((u = manager_get_unit(mgr, facility)) && (u->type == UNIT_TARGET)) {
- UnitDependency e;
char *dep = NULL, *name, **j;
STRV_FOREACH (j, parsed+1) {
@ -28,7 +32,6 @@ index c2053ce..4abc7e7 100644
+ if (streq(name, "boot.localfs") ||
+ streq(name, "boot.crypto"))
+ continue;
+
if (sysv_translate_facility(name, NULL, &dep) < 0)
continue;
@ -39,6 +42,3 @@ index c2053ce..4abc7e7 100644
free(dep);
}
}
--
1.7.3.4

View File

@ -1,40 +1,109 @@
Devices with random keys (swap), should not be ordered before local-fs.target,
as this creates a cycle with systemd-load-random-seed.service (and also it
does not make sense, a swap device is not a local-fs).
Rather than ordering systemd-random-seed-load.service after local-fs.target,
start it by path-activation.
We need write access to the seed, so we order the path unit after
remount-rootfs.service (in case /var is on the root fs).
A better solution might be to introduce PathIsWritable=, but that is not
necessary in order to solve the problem, and I don't know of any other
usecases for it.
Cc: Frederic Crozat <fcrozat@suse.com>
Cc: Michal Schmidt <mschmidt@redhat.com>
---
src/cryptsetup-generator.c | 6 ++++--
1 files changed, 4 insertions(+), 2 deletions(-)
diff --git a/src/cryptsetup-generator.c b/src/cryptsetup-generator.c
index 6f3aa78..a48b7a4 100644
--- a/src/cryptsetup-generator.c
+++ b/src/cryptsetup-generator.c
@@ -112,8 +112,7 @@ static int create_disk(
"DefaultDependencies=no\n"
"BindTo=%s dev-mapper-%%i.device\n"
"After=systemd-readahead-collect.service systemd-readahead-replay.service %s\n"
- "Before=umount.target\n"
- "Before=local-fs.target\n",
+ "Before=umount.target\n",
d, d);
This is my second attempt at solving this problem. The first one had
some issues as pointed out by Frederic and Michael.
Makefile.am | 7 +++++--
TODO | 2 --
units/.gitignore | 1 +
units/systemd-random-seed-load.path.in | 18 ++++++++++++++++++
units/systemd-random-seed-load.service.in | 3 +--
5 files changed, 25 insertions(+), 6 deletions(-)
create mode 100644 units/systemd-random-seed-load.path.in
diff -urB systemd-38/Makefile.am new/Makefile.am
--- systemd-38/Makefile.am 2012-01-11 04:01:36.734404653 +0100
+++ new/Makefile.am 2012-01-18 09:53:12.763115731 +0100
@@ -1530,11 +1530,14 @@
if (!nofail)
@@ -125,6 +124,9 @@ static int create_disk(
streq(password, "/dev/hw_random")))
fprintf(f,
"After=systemd-random-seed-load.service\n");
+ else
+ fprintf(f,
+ "Before=local-fs.target\n");
nodist_systemunit_DATA += \
units/systemd-random-seed-save.service \
- units/systemd-random-seed-load.service
+ units/systemd-random-seed-load.service \
+ units/systemd-random-seed-load.path
+
fprintf(f,
"\n[Service]\n"
EXTRA_DIST += \
units/systemd-random-seed-save.service.in \
- units/systemd-random-seed-load.service.in
+ units/systemd-random-seed-load.service.in \
+ units/systemd-random-seed-load.path.in
systemd_random_seed_SOURCES = \
src/random-seed.c
@@ -1550,8 +1553,8 @@
rm -f systemd-random-seed-save.service && \
$(LN_S) ../systemd-random-seed-save.service systemd-random-seed-save.service )
( cd $(DESTDIR)$(systemunitdir)/sysinit.target.wants && \
- rm -f systemd-random-seed-load.service && \
- $(LN_S) ../systemd-random-seed-load.service systemd-random-seed-load.service )
+ rm -f systemd-random-seed-load.path && \
+ $(LN_S) ../systemd-random-seed-load.path systemd-random-seed-load.path )
INSTALL_DATA_HOOKS += \
randomseed-install-data-hook
@@ -2052,6 +2055,7 @@
-e 's,@exec_prefix\@,$(exec_prefix),g' \
-e 's,@libdir\@,$(libdir),g' \
-e 's,@includedir\@,$(includedir),g' \
+ -e 's,@localstatedir\@,$(localstatedir),g' \
< $< > $@ || rm $@
units/%: units/%.in Makefile
diff --git a/units/systemd-random-seed-load.path.in b/units/systemd-random-seed-load.path.in
new file mode 100644
index 0000000..614c1d4
--- /dev/null
+++ b/units/systemd-random-seed-load.path.in
@@ -0,0 +1,18 @@
+# This file is part of systemd.
+#
+# systemd is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+
+[Unit]
+Description=Random Seed
+DefaultDependencies=no
+Conflicts=shutdown.target
+Before=basic.target shutdown.target
+# in case the seed is on the rootfs, we must
+# wait for the rootfs to be remonuted rw
+After=remount-rootfs.service
+
+[Path]
+PathExists=@localstatedir@/lib/random-seed
diff --git a/units/systemd-random-seed-load.service.in b/units/systemd-random-seed-load.service.in
index a2b6a55..2bcf1aa 100644
--- a/units/systemd-random-seed-load.service.in
+++ b/units/systemd-random-seed-load.service.in
@@ -8,9 +8,8 @@
[Unit]
Description=Load Random Seed
DefaultDependencies=no
-Wants=local-fs.target
Conflicts=shutdown.target
-After=systemd-readahead-collect.service systemd-readahead-replay.service local-fs.target
+After=systemd-readahead-collect.service systemd-readahead-replay.service systemd-random-seed-load.path
Before=sysinit.target shutdown.target
[Service]
--
1.7.7
1.7.8
_______________________________________________
systemd-devel mailing list
systemd-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/systemd-devel

View File

@ -1,131 +0,0 @@
From 5831e9b726ab6e76b28a94861a014d3bc2aa3015 Mon Sep 17 00:00:00 2001
From: Michal Schmidt <mschmidt@redhat.com>
Date: Thu, 10 Nov 2011 12:53:39 +0100
Subject: [PATCH] job: colored status messages on boot
The lack or green/red status marks on boot has been described by some
users as "critical", "dramatic", "dealbreaker", "showstopper". Seriously.
---
src/job.c | 13 +++++++------
src/unit.c | 24 ++++++++++++++++++++----
src/unit.h | 2 +-
3 files changed, 28 insertions(+), 11 deletions(-)
diff --git a/src/job.c b/src/job.c
index 20971da..1520d81 100644
--- a/src/job.c
+++ b/src/job.c
@@ -484,19 +484,20 @@ static void job_print_status_message(Unit *u, JobType t, JobResult result) {
switch (result) {
case JOB_DONE:
- unit_status_printf(u, "Started %s.\n", unit_description(u));
+ unit_status_printf(u, ANSI_HIGHLIGHT_GREEN_ON " OK " ANSI_HIGHLIGHT_OFF, "Started %s", unit_description(u));
break;
case JOB_FAILED:
- unit_status_printf(u, "Starting %s " ANSI_HIGHLIGHT_ON "failed" ANSI_HIGHLIGHT_OFF ", see 'systemctl status %s' for details.\n", unit_description(u), u->meta.id);
+ unit_status_printf(u, ANSI_HIGHLIGHT_ON "FAILED" ANSI_HIGHLIGHT_OFF, "Failed to start %s", unit_description(u));
+ unit_status_printf(u, NULL, "See 'systemctl status %s' for details.", u->meta.id);
break;
case JOB_DEPENDENCY:
- unit_status_printf(u, "Starting %s " ANSI_HIGHLIGHT_ON "aborted" ANSI_HIGHLIGHT_OFF " because a dependency failed.\n", unit_description(u));
+ unit_status_printf(u, ANSI_HIGHLIGHT_ON " ABORT" ANSI_HIGHLIGHT_OFF, "Dependency failed. Aborted start of %s", unit_description(u));
break;
case JOB_TIMEOUT:
- unit_status_printf(u, "Starting %s " ANSI_HIGHLIGHT_ON "timed out" ANSI_HIGHLIGHT_OFF ".\n", unit_description(u), u->meta.id);
+ unit_status_printf(u, ANSI_HIGHLIGHT_ON " TIME " ANSI_HIGHLIGHT_OFF, "Timed out starting %s", unit_description(u));
break;
default:
@@ -508,12 +509,12 @@ static void job_print_status_message(Unit *u, JobType t, JobResult result) {
switch (result) {
case JOB_TIMEOUT:
- unit_status_printf(u, "Stopping %s " ANSI_HIGHLIGHT_ON "timed out" ANSI_HIGHLIGHT_OFF ".\n", unit_description(u), u->meta.id);
+ unit_status_printf(u, ANSI_HIGHLIGHT_ON " TIME " ANSI_HIGHLIGHT_OFF, "Timed out stopping %s", unit_description(u));
break;
case JOB_DONE:
case JOB_FAILED:
- unit_status_printf(u, "Stopped %s.\n", unit_description(u));
+ unit_status_printf(u, ANSI_HIGHLIGHT_GREEN_ON " OK " ANSI_HIGHLIGHT_OFF, "Stopped %s", unit_description(u));
break;
default:
diff --git a/src/unit.c b/src/unit.c
index 903a8e4..ad4063b 100644
--- a/src/unit.c
+++ b/src/unit.c
@@ -924,7 +924,7 @@ int unit_start(Unit *u) {
unit_add_to_dbus_queue(u);
- unit_status_printf(u, "Starting %s...\n", unit_description(u));
+ unit_status_printf(u, NULL, "Starting %s...", unit_description(u));
return UNIT_VTABLE(u)->start(u);
}
@@ -966,7 +966,7 @@ int unit_stop(Unit *u) {
unit_add_to_dbus_queue(u);
- unit_status_printf(u, "Stopping %s...\n", unit_description(u));
+ unit_status_printf(u, NULL, "Stopping %s...", unit_description(u));
return UNIT_VTABLE(u)->stop(u);
}
@@ -2426,8 +2426,11 @@ int unit_coldplug(Unit *u) {
return 0;
}
-void unit_status_printf(Unit *u, const char *format, ...) {
+void unit_status_printf(Unit *u, const char *status, const char *format, ...) {
va_list ap;
+ char *s, *e;
+ int err;
+ const unsigned emax = status ? 80 - (sizeof("[ OK ]")-1) : 80;
assert(u);
assert(format);
@@ -2442,8 +2445,21 @@ void unit_status_printf(Unit *u, const char *format, ...) {
return;
va_start(ap, format);
- status_vprintf(format, ap);
+ err = vasprintf(&s, format, ap);
va_end(ap);
+ if (err < 0)
+ return;
+
+ e = ellipsize(s, emax, 100);
+ free(s);
+ if (!e)
+ return;
+
+ if (status)
+ status_printf("%s%*s[%s]\n", e, emax - strlen(e), "", status);
+ else
+ status_printf("%s\n", e);
+ free(e);
}
bool unit_need_daemon_reload(Unit *u) {
diff --git a/src/unit.h b/src/unit.h
index 7da5723..b32c1a7 100644
--- a/src/unit.h
+++ b/src/unit.h
@@ -512,7 +512,7 @@ int unit_add_node_link(Unit *u, const char *what, bool wants);
int unit_coldplug(Unit *u);
-void unit_status_printf(Unit *u, const char *format, ...);
+void unit_status_printf(Unit *u, const char *status, const char *format, ...);
bool unit_need_daemon_reload(Unit *u);
--
1.7.7

View File

@ -1,117 +0,0 @@
From 563ba9ea6e60774086555998b957edf923e24b46 Mon Sep 17 00:00:00 2001
From: Michal Schmidt <mschmidt@redhat.com>
Date: Mon, 17 Oct 2011 11:12:12 +0200
Subject: [PATCH] manager: fix a crash in isolating
HASHMAP_FOREACH is safe against the removal of the current entry, but
not against the removal of other entries. job_finish_and_invalidate()
can recursively remove other entries.
It triggered an assertion failure:
Assertion 'j->installed' failed at src/manager.c:1218, function
transaction_apply(). Aborting.
Fix the crash by iterating from the beginning when there is a
possibility that the iterator could be invalid.
It is O(n^2) in the worst case, but that's better than a crash.
https://bugzilla.redhat.com/show_bug.cgi?id=717325
---
src/job.c | 19 ++++++++++++++-----
src/manager.c | 7 ++++++-
2 files changed, 20 insertions(+), 6 deletions(-)
diff --git a/src/job.c b/src/job.c
index 5c0913b..20971da 100644
--- a/src/job.c
+++ b/src/job.c
@@ -527,6 +527,7 @@ int job_finish_and_invalidate(Job *j, JobResult result) {
Unit *other;
JobType t;
Iterator i;
+ bool recursed = false;
assert(j);
assert(j->installed);
@@ -573,23 +574,29 @@ int job_finish_and_invalidate(Job *j, JobResult result) {
if (other->meta.job &&
(other->meta.job->type == JOB_START ||
other->meta.job->type == JOB_VERIFY_ACTIVE ||
- other->meta.job->type == JOB_RELOAD_OR_START))
+ other->meta.job->type == JOB_RELOAD_OR_START)) {
job_finish_and_invalidate(other->meta.job, JOB_DEPENDENCY);
+ recursed = true;
+ }
SET_FOREACH(other, u->meta.dependencies[UNIT_BOUND_BY], i)
if (other->meta.job &&
(other->meta.job->type == JOB_START ||
other->meta.job->type == JOB_VERIFY_ACTIVE ||
- other->meta.job->type == JOB_RELOAD_OR_START))
+ other->meta.job->type == JOB_RELOAD_OR_START)) {
job_finish_and_invalidate(other->meta.job, JOB_DEPENDENCY);
+ recursed = true;
+ }
SET_FOREACH(other, u->meta.dependencies[UNIT_REQUIRED_BY_OVERRIDABLE], i)
if (other->meta.job &&
!other->meta.job->override &&
(other->meta.job->type == JOB_START ||
other->meta.job->type == JOB_VERIFY_ACTIVE ||
- other->meta.job->type == JOB_RELOAD_OR_START))
+ other->meta.job->type == JOB_RELOAD_OR_START)) {
job_finish_and_invalidate(other->meta.job, JOB_DEPENDENCY);
+ recursed = true;
+ }
} else if (t == JOB_STOP) {
@@ -597,8 +604,10 @@ int job_finish_and_invalidate(Job *j, JobResult result) {
if (other->meta.job &&
(other->meta.job->type == JOB_START ||
other->meta.job->type == JOB_VERIFY_ACTIVE ||
- other->meta.job->type == JOB_RELOAD_OR_START))
+ other->meta.job->type == JOB_RELOAD_OR_START)) {
job_finish_and_invalidate(other->meta.job, JOB_DEPENDENCY);
+ recursed = true;
+ }
}
}
@@ -626,7 +635,7 @@ finish:
manager_check_finished(u->meta.manager);
- return 0;
+ return recursed;
}
int job_start_timer(Job *j) {
diff --git a/src/manager.c b/src/manager.c
index e626347..6d20258 100644
--- a/src/manager.c
+++ b/src/manager.c
@@ -1214,13 +1214,18 @@ static int transaction_apply(Manager *m, JobMode mode) {
/* When isolating first kill all installed jobs which
* aren't part of the new transaction */
+ rescan:
HASHMAP_FOREACH(j, m->jobs, i) {
assert(j->installed);
if (hashmap_get(m->transaction_jobs, j->unit))
continue;
- job_finish_and_invalidate(j, JOB_CANCELED);
+ /* 'j' itself is safe to remove, but if other jobs
+ are invalidated recursively, our iterator may become
+ invalid and we need to start over. */
+ if (job_finish_and_invalidate(j, JOB_CANCELED) > 0)
+ goto rescan;
}
}
--
1.7.3.4

View File

@ -1,81 +0,0 @@
From 1dc995370987660ff045ff4d7cf512da0390cf96 Mon Sep 17 00:00:00 2001
From: Michal Schmidt <mschmidt@redhat.com>
Date: Sat, 19 Nov 2011 01:14:11 +0100
Subject: [PATCH 1/2] pam-module: use the correct session type "unspecified"
logind does not understand "other".
---
src/pam-module.c | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)
diff --git a/src/pam-module.c b/src/pam-module.c
index dd05f93..e650886 100644
--- a/src/pam-module.c
+++ b/src/pam-module.c
@@ -472,7 +472,7 @@ _public_ PAM_EXTERN int pam_sm_open_session(
get_seat_from_display(display, &seat, &vtnr);
type = !isempty(display) ? "x11" :
- !isempty(tty) ? "tty" : "other";
+ !isempty(tty) ? "tty" : "unspecified";
remote = !isempty(remote_host) && !streq(remote_host, "localhost") && !streq(remote_host, "localhost.localdomain");
--
1.7.7
From 1a4459d63323cdfdb8751077e555ddbbf80564b1 Mon Sep 17 00:00:00 2001
From: Michal Schmidt <mschmidt@redhat.com>
Date: Sat, 19 Nov 2011 01:17:46 +0100
Subject: [PATCH 2/2] pam-module: treat "cron" in PAM_TTY as empty tty
cron sets PAM_TTY to "cron" and it has been doing it for a long time.
It cannot be changed because user configurations may depend on it.
https://bugzilla.redhat.com/show_bug.cgi?id=727315
---
src/logind-session.c | 4 ++--
src/pam-module.c | 4 ++++
2 files changed, 6 insertions(+), 2 deletions(-)
diff --git a/src/logind-session.c b/src/logind-session.c
index b0a09e3..63ee758 100644
--- a/src/logind-session.c
+++ b/src/logind-session.c
@@ -536,7 +536,7 @@ int session_start(Session *s) {
if (r < 0)
return r;
- log_full(s->display || s->tty ? LOG_INFO : LOG_DEBUG,
+ log_full(s->type == SESSION_TTY || s->type == SESSION_X11 ? LOG_INFO : LOG_DEBUG,
"New session %s of user %s.", s->id, s->user->name);
/* Create cgroup */
@@ -659,7 +659,7 @@ int session_stop(Session *s) {
assert(s);
if (s->started)
- log_full(s->display || s->tty ? LOG_INFO : LOG_DEBUG,
+ log_full(s->type == SESSION_TTY || s->type == SESSION_X11 ? LOG_INFO : LOG_DEBUG,
"Removed session %s.", s->id);
/* Kill cgroup */
diff --git a/src/pam-module.c b/src/pam-module.c
index e650886..46b7bec 100644
--- a/src/pam-module.c
+++ b/src/pam-module.c
@@ -463,6 +463,10 @@ _public_ PAM_EXTERN int pam_sm_open_session(
if (isempty(display))
display = tty;
tty = "";
+ } else if (streq(tty, "cron")) {
+ /* cron has been setting PAM_TTY to "cron" for a very long time
+ * and it cannot stop doing that for compatibility reasons. */
+ tty = "";
}
if (!isempty(cvtnr))
--
1.7.7

View File

@ -1,7 +1,7 @@
Index: systemd-37/src/cryptsetup-generator.c
Index: systemd-37/src/cryptsetup/cryptsetup-generator.c
===================================================================
--- systemd-37.orig/src/cryptsetup-generator.c
+++ systemd-37/src/cryptsetup-generator.c
--- systemd-37.orig/src/cryptsetup/cryptsetup-generator.c
+++ systemd-37/src/cryptsetup/cryptsetup-generator.c
@@ -138,7 +138,7 @@ static int create_disk(
const char *password,
const char *options) {

View File

@ -8,11 +8,11 @@ Subject: [PATCH] delay fsck / cryptsetup after md / dmraid / lvm are started
units/fsck@.service.in | 2 +-
2 files changed, 2 insertions(+), 1 deletions(-)
diff --git a/src/cryptsetup-generator.c b/src/cryptsetup-generator.c
index 14fcce8..e62f0e0 100644
--- a/src/cryptsetup-generator.c
+++ b/src/cryptsetup-generator.c
@@ -186,6 +186,7 @@ static int create_disk(
Index: systemd-37/src/cryptsetup/cryptsetup-generator.c
===================================================================
--- systemd-37.orig/src/cryptsetup/cryptsetup-generator.c
+++ systemd-37/src/cryptsetup/cryptsetup-generator.c
@@ -112,6 +112,7 @@ static int create_disk(
"DefaultDependencies=no\n"
"BindTo=%s dev-mapper-%%i.device\n"
"After=systemd-readahead-collect.service systemd-readahead-replay.service %s\n"
@ -20,10 +20,10 @@ index 14fcce8..e62f0e0 100644
"Before=umount.target\n",
d, d);
diff --git a/units/fsck@.service.in b/units/fsck@.service.in
index e1f7736..c1870ce 100644
--- a/units/fsck@.service.in
+++ b/units/fsck@.service.in
Index: systemd-37/units/fsck@.service.in
===================================================================
--- systemd-37.orig/units/fsck@.service.in
+++ systemd-37/units/fsck@.service.in
@@ -9,7 +9,7 @@
Description=File System Check on %f
DefaultDependencies=no
@ -33,6 +33,3 @@ index e1f7736..c1870ce 100644
Before=shutdown.target
[Service]
--
1.7.7

View File

@ -1,60 +0,0 @@
From c5419d4239ceb4c3bd0263a0a810cf24a072b3c0 Mon Sep 17 00:00:00 2001
From: Michal Schmidt <mschmidt@redhat.com>
Date: Thu, 10 Nov 2011 09:55:47 +0100
Subject: [PATCH] service: don't warn if the pidfile still exists after
SIGCHLD
A service that drops its privileges may not be able to remove it when it
exits. The stale pidfile is not a problem as long as the service
carefully recognizes it on its next start.
systemd would produce a warning after the service exits:
PID ... read from file ... does not exist. Your service or init
script might be broken.
Silence the warning in this case. Still warn if this error is detected
when loading the pidfile after service start.
Noticed by Miroslav Lichvar in
https://bugzilla.redhat.com/show_bug.cgi?id=752396
---
src/service.c | 9 +++++----
1 files changed, 5 insertions(+), 4 deletions(-)
diff --git a/src/service.c b/src/service.c
index eb475d9..6fc2484 100644
--- a/src/service.c
+++ b/src/service.c
@@ -1290,7 +1290,7 @@ static void service_dump(Unit *u, FILE *f, const char *prefix) {
free(p2);
}
-static int service_load_pid_file(Service *s, bool warn_if_missing) {
+static int service_load_pid_file(Service *s, bool may_warn) {
char *k;
int r;
pid_t pid;
@@ -1301,7 +1301,7 @@ static int service_load_pid_file(Service *s, bool warn_if_missing) {
return -ENOENT;
if ((r = read_one_line_file(s->pid_file, &k)) < 0) {
- if (warn_if_missing)
+ if (may_warn)
log_warning("Failed to read PID file %s after %s. The service might be broken.",
s->pid_file, service_state_to_string(s->state));
return r;
@@ -1314,8 +1314,9 @@ static int service_load_pid_file(Service *s, bool warn_if_missing) {
return r;
if (kill(pid, 0) < 0 && errno != EPERM) {
- log_warning("PID %lu read from file %s does not exist. Your service or init script might be broken.",
- (unsigned long) pid, s->pid_file);
+ if (may_warn)
+ log_warning("PID %lu read from file %s does not exist. Your service or init script might be broken.",
+ (unsigned long) pid, s->pid_file);
return -ESRCH;
}
--
1.7.7

View File

@ -1,29 +0,0 @@
From 9a46fc3b9014de1bf0ed1f3004a536b08a19ebb3 Mon Sep 17 00:00:00 2001
From: Michal Schmidt <mschmidt@redhat.com>
Date: Tue, 6 Dec 2011 00:47:28 +0100
Subject: [PATCH] unit: garbage collect units with load error
Units that failed to load were never cleaned up. It was possible to
reach the 128K limit of units by attempting to load a bunch of nonsense.
Bug observed by Reartes Guillermo in
https://bugzilla.redhat.com/show_bug.cgi?id=680122
---
src/unit.c | 1 +
1 files changed, 1 insertions(+), 0 deletions(-)
diff --git a/src/unit.c b/src/unit.c
index 2a549e2..018e986 100644
--- a/src/unit.c
+++ b/src/unit.c
@@ -858,6 +858,7 @@ fail:
u->meta.load_state = UNIT_ERROR;
u->meta.load_error = r;
unit_add_to_dbus_queue(u);
+ unit_add_to_gc_queue(u);
log_debug("Failed to load configuration for %s: %s", u->meta.id, strerror(-r));
--
1.7.7

File diff suppressed because it is too large Load Diff

1
listen.conf Normal file
View File

@ -0,0 +1 @@
$SystemLogSocketName /run/systemd/journal/syslog

View File

@ -1,586 +0,0 @@
From 4d8a7798e7f12c6400495cbc4d0ad57ed20ce90a Mon Sep 17 00:00:00 2001
From: Michal Schmidt <mschmidt@redhat.com>
Date: Wed, 16 Nov 2011 23:45:01 +0100
Subject: [PATCH 1/3] execute: avoid logging to closed fds
Several functions called from the "sd(EXEC)" process try to log messages
when all the file descriptors are already closed, including the logging
ones. The logging functions do not expect their fds to be closed and
they hit an assertion failure. The failure wants to be logged too,
so there is an infinite recursion, ended by a SIGSEGV.
When we close all fds, we must let log.c know about it.
---
src/execute.c | 1 +
src/log.c | 4 ++++
src/log.h | 1 +
3 files changed, 6 insertions(+), 0 deletions(-)
diff --git a/src/execute.c b/src/execute.c
index 250d53a..0651014 100644
--- a/src/execute.c
+++ b/src/execute.c
@@ -1016,6 +1016,7 @@ int exec_spawn(ExecCommand *command,
/* Close sockets very early to make sure we don't
* block init reexecution because it cannot bind its
* sockets */
+ log_forget_fds();
if (close_all_fds(socket_fd >= 0 ? &socket_fd : fds,
socket_fd >= 0 ? 1 : n_fds) < 0) {
r = EXIT_FDS;
diff --git a/src/log.c b/src/log.c
index b8ce122..5c5b734 100644
--- a/src/log.c
+++ b/src/log.c
@@ -237,6 +237,10 @@ void log_close(void) {
log_close_syslog();
}
+void log_forget_fds(void) {
+ console_fd = kmsg_fd = syslog_fd = -1;
+}
+
void log_set_max_level(int level) {
assert((level & LOG_PRIMASK) == level);
diff --git a/src/log.h b/src/log.h
index c402afb..9942e3e 100644
--- a/src/log.h
+++ b/src/log.h
@@ -57,6 +57,7 @@ int log_get_max_level(void);
int log_open(void);
void log_close(void);
+void log_forget_fds(void);
void log_close_syslog(void);
void log_close_kmsg(void);
--
1.7.7
From 9ba353983adc026b75a503c1381f6e5c8062f3e0 Mon Sep 17 00:00:00 2001
From: Michal Schmidt <mschmidt@redhat.com>
Date: Thu, 17 Nov 2011 00:16:22 +0100
Subject: [PATCH 2/3] execute: make setup_pam() return -errno when possible
The only caller currently checks if the result is non-zero,
so nothing changes there.
---
src/execute.c | 8 +++++++-
1 files changed, 7 insertions(+), 1 deletions(-)
diff --git a/src/execute.c b/src/execute.c
index 0651014..2039861 100644
--- a/src/execute.c
+++ b/src/execute.c
@@ -716,6 +716,7 @@ static int setup_pam(
pam_handle_t *handle = NULL;
sigset_t ss, old_ss;
int pam_code = PAM_SUCCESS;
+ int err;
char **e = NULL;
bool close_session = false;
pid_t pam_pid = 0, parent_pid;
@@ -835,6 +836,11 @@ static int setup_pam(
return 0;
fail:
+ if (pam_code != PAM_SUCCESS)
+ err = -EPERM; /* PAM errors do not map to errno */
+ else
+ err = -errno;
+
if (handle) {
if (close_session)
pam_code = pam_close_session(handle, PAM_DATA_SILENT);
@@ -851,7 +857,7 @@ fail:
kill(pam_pid, SIGCONT);
}
- return EXIT_PAM;
+ return err;
}
#endif
--
1.7.7
From 4c2630ebf23b6348174f0bdf1110e90efe45259c Mon Sep 17 00:00:00 2001
From: Michal Schmidt <mschmidt@redhat.com>
Date: Thu, 17 Nov 2011 00:21:16 +0100
Subject: [PATCH 3/3] execute: log errors from "sd(EXEC)"
To give the administrator more hints about failures occuring in spawning
of commands than just the exit code, log the strerror.
All fds are closed, so reopen the log.
Related-to: https://bugzilla.redhat.com/show_bug.cgi?id=752901
---
src/execute.c | 138 +++++++++++++++++++++++++++++++++++++++--------------
src/exit-status.c | 3 +
src/exit-status.h | 3 +-
3 files changed, 107 insertions(+), 37 deletions(-)
diff --git a/src/execute.c b/src/execute.c
index 2039861..481725d 100644
--- a/src/execute.c
+++ b/src/execute.c
@@ -989,7 +989,7 @@ int exec_spawn(ExecCommand *command,
}
if (pid == 0) {
- int i;
+ int i, err;
sigset_t ss;
const char *username = NULL, *home = NULL;
uid_t uid = (uid_t) -1;
@@ -1015,6 +1015,7 @@ int exec_spawn(ExecCommand *command,
if (sigemptyset(&ss) < 0 ||
sigprocmask(SIG_SETMASK, &ss, NULL) < 0) {
+ err = -errno;
r = EXIT_SIGNAL_MASK;
goto fail_child;
}
@@ -1023,14 +1024,16 @@ int exec_spawn(ExecCommand *command,
* block init reexecution because it cannot bind its
* sockets */
log_forget_fds();
- if (close_all_fds(socket_fd >= 0 ? &socket_fd : fds,
- socket_fd >= 0 ? 1 : n_fds) < 0) {
+ err = close_all_fds(socket_fd >= 0 ? &socket_fd : fds,
+ socket_fd >= 0 ? 1 : n_fds);
+ if (err < 0) {
r = EXIT_FDS;
goto fail_child;
}
if (!context->same_pgrp)
if (setsid() < 0) {
+ err = -errno;
r = EXIT_SETSID;
goto fail_child;
}
@@ -1038,12 +1041,14 @@ int exec_spawn(ExecCommand *command,
if (context->tcpwrap_name) {
if (socket_fd >= 0)
if (!socket_tcpwrap(socket_fd, context->tcpwrap_name)) {
+ err = -EACCES;
r = EXIT_TCPWRAP;
goto fail_child;
}
for (i = 0; i < (int) n_fds; i++) {
if (!socket_tcpwrap(fds[i], context->tcpwrap_name)) {
+ err = -EACCES;
r = EXIT_TCPWRAP;
goto fail_child;
}
@@ -1059,11 +1064,14 @@ int exec_spawn(ExecCommand *command,
/* Set up terminal for the question */
if ((r = setup_confirm_stdio(context,
- &saved_stdin, &saved_stdout)))
+ &saved_stdin, &saved_stdout))) {
+ err = -errno;
goto fail_child;
+ }
/* Now ask the question. */
if (!(line = exec_command_line(argv))) {
+ err = -ENOMEM;
r = EXIT_MEMORY;
goto fail_child;
}
@@ -1072,18 +1080,21 @@ int exec_spawn(ExecCommand *command,
free(line);
if (r < 0 || response == 'n') {
+ err = -ECANCELED;
r = EXIT_CONFIRM;
goto fail_child;
} else if (response == 's') {
- r = 0;
+ err = r = 0;
goto fail_child;
}
/* Release terminal for the question */
if ((r = restore_confirm_stdio(context,
&saved_stdin, &saved_stdout,
- &keep_stdin, &keep_stdout)))
+ &keep_stdin, &keep_stdout))) {
+ err = -errno;
goto fail_child;
+ }
}
/* If a socket is connected to STDIN/STDOUT/STDERR, we
@@ -1091,28 +1102,35 @@ int exec_spawn(ExecCommand *command,
if (socket_fd >= 0)
fd_nonblock(socket_fd, false);
- if (!keep_stdin)
- if (setup_input(context, socket_fd, apply_tty_stdin) < 0) {
+ if (!keep_stdin) {
+ err = setup_input(context, socket_fd, apply_tty_stdin);
+ if (err < 0) {
r = EXIT_STDIN;
goto fail_child;
}
+ }
- if (!keep_stdout)
- if (setup_output(context, socket_fd, file_name_from_path(command->path), apply_tty_stdin) < 0) {
+ if (!keep_stdout) {
+ err = setup_output(context, socket_fd, file_name_from_path(command->path), apply_tty_stdin);
+ if (err < 0) {
r = EXIT_STDOUT;
goto fail_child;
}
+ }
- if (setup_error(context, socket_fd, file_name_from_path(command->path), apply_tty_stdin) < 0) {
+ err = setup_error(context, socket_fd, file_name_from_path(command->path), apply_tty_stdin);
+ if (err < 0) {
r = EXIT_STDERR;
goto fail_child;
}
- if (cgroup_bondings)
- if (cgroup_bonding_install_list(cgroup_bondings, 0) < 0) {
+ if (cgroup_bondings) {
+ err = cgroup_bonding_install_list(cgroup_bondings, 0);
+ if (err < 0) {
r = EXIT_CGROUP;
goto fail_child;
}
+ }
if (context->oom_score_adjust_set) {
char t[16];
@@ -1133,6 +1151,7 @@ int exec_spawn(ExecCommand *command,
if (write_one_line_file("/proc/self/oom_adj", t) < 0
&& errno != EACCES) {
+ err = -errno;
r = EXIT_OOM_ADJUST;
goto fail_child;
}
@@ -1141,6 +1160,7 @@ int exec_spawn(ExecCommand *command,
if (context->nice_set)
if (setpriority(PRIO_PROCESS, 0, context->nice) < 0) {
+ err = -errno;
r = EXIT_NICE;
goto fail_child;
}
@@ -1153,6 +1173,7 @@ int exec_spawn(ExecCommand *command,
if (sched_setscheduler(0, context->cpu_sched_policy |
(context->cpu_sched_reset_on_fork ? SCHED_RESET_ON_FORK : 0), &param) < 0) {
+ err = -errno;
r = EXIT_SETSCHEDULER;
goto fail_child;
}
@@ -1160,18 +1181,21 @@ int exec_spawn(ExecCommand *command,
if (context->cpuset)
if (sched_setaffinity(0, CPU_ALLOC_SIZE(context->cpuset_ncpus), context->cpuset) < 0) {
+ err = -errno;
r = EXIT_CPUAFFINITY;
goto fail_child;
}
if (context->ioprio_set)
if (ioprio_set(IOPRIO_WHO_PROCESS, 0, context->ioprio) < 0) {
+ err = -errno;
r = EXIT_IOPRIO;
goto fail_child;
}
if (context->timer_slack_nsec_set)
if (prctl(PR_SET_TIMERSLACK, context->timer_slack_nsec) < 0) {
+ err = -errno;
r = EXIT_TIMERSLACK;
goto fail_child;
}
@@ -1181,36 +1205,45 @@ int exec_spawn(ExecCommand *command,
if (context->user) {
username = context->user;
- if (get_user_creds(&username, &uid, &gid, &home) < 0) {
+ err = get_user_creds(&username, &uid, &gid, &home);
+ if (err < 0) {
r = EXIT_USER;
goto fail_child;
}
- if (is_terminal_input(context->std_input))
- if (chown_terminal(STDIN_FILENO, uid) < 0) {
+ if (is_terminal_input(context->std_input)) {
+ err = chown_terminal(STDIN_FILENO, uid);
+ if (err < 0) {
r = EXIT_STDIN;
goto fail_child;
}
+ }
- if (cgroup_bondings && context->control_group_modify)
- if (cgroup_bonding_set_group_access_list(cgroup_bondings, 0755, uid, gid) < 0 ||
- cgroup_bonding_set_task_access_list(cgroup_bondings, 0644, uid, gid) < 0) {
+ if (cgroup_bondings && context->control_group_modify) {
+ err = cgroup_bonding_set_group_access_list(cgroup_bondings, 0755, uid, gid);
+ if (err >= 0)
+ err = cgroup_bonding_set_task_access_list(cgroup_bondings, 0644, uid, gid);
+ if (err < 0) {
r = EXIT_CGROUP;
goto fail_child;
}
+ }
}
- if (apply_permissions)
- if (enforce_groups(context, username, gid) < 0) {
+ if (apply_permissions) {
+ err = enforce_groups(context, username, gid);
+ if (err < 0) {
r = EXIT_GROUP;
goto fail_child;
}
+ }
umask(context->umask);
#ifdef HAVE_PAM
if (context->pam_name && username) {
- if (setup_pam(context->pam_name, username, context->tty_path, &pam_env, fds, n_fds) != 0) {
+ err = setup_pam(context->pam_name, username, context->tty_path, &pam_env, fds, n_fds);
+ if (err < 0) {
r = EXIT_PAM;
goto fail_child;
}
@@ -1218,6 +1251,7 @@ int exec_spawn(ExecCommand *command,
#endif
if (context->private_network) {
if (unshare(CLONE_NEWNET) < 0) {
+ err = -errno;
r = EXIT_NETWORK;
goto fail_child;
}
@@ -1229,23 +1263,28 @@ int exec_spawn(ExecCommand *command,
strv_length(context->read_only_dirs) > 0 ||
strv_length(context->inaccessible_dirs) > 0 ||
context->mount_flags != MS_SHARED ||
- context->private_tmp)
- if ((r = setup_namespace(
- context->read_write_dirs,
- context->read_only_dirs,
- context->inaccessible_dirs,
- context->private_tmp,
- context->mount_flags)) < 0)
+ context->private_tmp) {
+ err = setup_namespace(context->read_write_dirs,
+ context->read_only_dirs,
+ context->inaccessible_dirs,
+ context->private_tmp,
+ context->mount_flags);
+ if (err < 0) {
+ r = EXIT_NAMESPACE;
goto fail_child;
+ }
+ }
if (apply_chroot) {
if (context->root_directory)
if (chroot(context->root_directory) < 0) {
+ err = -errno;
r = EXIT_CHROOT;
goto fail_child;
}
if (chdir(context->working_directory ? context->working_directory : "/") < 0) {
+ err = -errno;
r = EXIT_CHDIR;
goto fail_child;
}
@@ -1256,11 +1295,13 @@ int exec_spawn(ExecCommand *command,
if (asprintf(&d, "%s/%s",
context->root_directory ? context->root_directory : "",
context->working_directory ? context->working_directory : "") < 0) {
+ err = -ENOMEM;
r = EXIT_MEMORY;
goto fail_child;
}
if (chdir(d) < 0) {
+ err = -errno;
free(d);
r = EXIT_CHDIR;
goto fail_child;
@@ -1271,9 +1312,12 @@ int exec_spawn(ExecCommand *command,
/* We repeat the fd closing here, to make sure that
* nothing is leaked from the PAM modules */
- if (close_all_fds(fds, n_fds) < 0 ||
- shift_fds(fds, n_fds) < 0 ||
- flags_fds(fds, n_fds, context->non_blocking) < 0) {
+ err = close_all_fds(fds, n_fds);
+ if (err >= 0)
+ err = shift_fds(fds, n_fds);
+ if (err >= 0)
+ err = flags_fds(fds, n_fds, context->non_blocking);
+ if (err < 0) {
r = EXIT_FDS;
goto fail_child;
}
@@ -1285,22 +1329,27 @@ int exec_spawn(ExecCommand *command,
continue;
if (setrlimit(i, context->rlimit[i]) < 0) {
+ err = -errno;
r = EXIT_LIMITS;
goto fail_child;
}
}
- if (context->capability_bounding_set_drop)
- if (do_capability_bounding_set_drop(context->capability_bounding_set_drop) < 0) {
+ if (context->capability_bounding_set_drop) {
+ err = do_capability_bounding_set_drop(context->capability_bounding_set_drop);
+ if (err < 0) {
r = EXIT_CAPABILITIES;
goto fail_child;
}
+ }
- if (context->user)
- if (enforce_user(context, uid) < 0) {
+ if (context->user) {
+ err = enforce_user(context, uid);
+ if (err < 0) {
r = EXIT_USER;
goto fail_child;
}
+ }
/* PR_GET_SECUREBITS is not privileged, while
* PR_SET_SECUREBITS is. So to suppress
@@ -1308,18 +1357,21 @@ int exec_spawn(ExecCommand *command,
* PR_SET_SECUREBITS unless necessary. */
if (prctl(PR_GET_SECUREBITS) != context->secure_bits)
if (prctl(PR_SET_SECUREBITS, context->secure_bits) < 0) {
+ err = -errno;
r = EXIT_SECUREBITS;
goto fail_child;
}
if (context->capabilities)
if (cap_set_proc(context->capabilities) < 0) {
+ err = -errno;
r = EXIT_CAPABILITIES;
goto fail_child;
}
}
if (!(our_env = new0(char*, 7))) {
+ err = -ENOMEM;
r = EXIT_MEMORY;
goto fail_child;
}
@@ -1327,12 +1379,14 @@ int exec_spawn(ExecCommand *command,
if (n_fds > 0)
if (asprintf(our_env + n_env++, "LISTEN_PID=%lu", (unsigned long) getpid()) < 0 ||
asprintf(our_env + n_env++, "LISTEN_FDS=%u", n_fds) < 0) {
+ err = -ENOMEM;
r = EXIT_MEMORY;
goto fail_child;
}
if (home)
if (asprintf(our_env + n_env++, "HOME=%s", home) < 0) {
+ err = -ENOMEM;
r = EXIT_MEMORY;
goto fail_child;
}
@@ -1340,6 +1394,7 @@ int exec_spawn(ExecCommand *command,
if (username)
if (asprintf(our_env + n_env++, "LOGNAME=%s", username) < 0 ||
asprintf(our_env + n_env++, "USER=%s", username) < 0) {
+ err = -ENOMEM;
r = EXIT_MEMORY;
goto fail_child;
}
@@ -1348,6 +1403,7 @@ int exec_spawn(ExecCommand *command,
context->std_output == EXEC_OUTPUT_TTY ||
context->std_error == EXEC_OUTPUT_TTY)
if (!(our_env[n_env++] = strdup(default_term_for_tty(tty_path(context))))) {
+ err = -ENOMEM;
r = EXIT_MEMORY;
goto fail_child;
}
@@ -1362,11 +1418,13 @@ int exec_spawn(ExecCommand *command,
files_env,
pam_env,
NULL))) {
+ err = -ENOMEM;
r = EXIT_MEMORY;
goto fail_child;
}
if (!(final_argv = replace_env_argv(argv, final_env))) {
+ err = -ENOMEM;
r = EXIT_MEMORY;
goto fail_child;
}
@@ -1374,9 +1432,17 @@ int exec_spawn(ExecCommand *command,
final_env = strv_env_clean(final_env);
execve(command->path, final_argv, final_env);
+ err = -errno;
r = EXIT_EXEC;
fail_child:
+ if (r != 0) {
+ log_open();
+ log_warning("Failed at step %s spawning %s: %s",
+ exit_status_to_string(r, EXIT_STATUS_SYSTEMD),
+ command->path, strerror(-err));
+ }
+
strv_free(our_env);
strv_free(final_env);
strv_free(pam_env);
diff --git a/src/exit-status.c b/src/exit-status.c
index 8ed1a0e..ab8907d 100644
--- a/src/exit-status.c
+++ b/src/exit-status.c
@@ -119,6 +119,9 @@ const char* exit_status_to_string(ExitStatus status, ExitStatusLevel level) {
case EXIT_NETWORK:
return "NETWORK";
+
+ case EXIT_NAMESPACE:
+ return "NAMESPACE";
}
}
diff --git a/src/exit-status.h b/src/exit-status.h
index 3e977b1..44ef879 100644
--- a/src/exit-status.h
+++ b/src/exit-status.h
@@ -65,7 +65,8 @@ typedef enum ExitStatus {
EXIT_STDERR,
EXIT_TCPWRAP,
EXIT_PAM,
- EXIT_NETWORK
+ EXIT_NETWORK,
+ EXIT_NAMESPACE
} ExitStatus;
--
1.7.7

View File

@ -1,54 +0,0 @@
From f6cebb3bd5a00d79c8131637c0f6796a75e6af99 Mon Sep 17 00:00:00 2001
From: Michal Schmidt <mschmidt@redhat.com>
Date: Sat, 19 Nov 2011 02:47:09 +0100
Subject: [PATCH] let mount and swap units log to the configured defaults
Related-to: https://bugzilla.redhat.com/show_bug.cgi?id=750032
---
src/mount.c | 6 ++++--
src/swap.c | 5 +++--
2 files changed, 7 insertions(+), 4 deletions(-)
diff --git a/src/mount.c b/src/mount.c
index f9cfe91..47422cc 100644
--- a/src/mount.c
+++ b/src/mount.c
@@ -68,8 +68,10 @@ static void mount_init(Unit *u) {
/* The stdio/kmsg bridge socket is on /, in order to avoid a
* dep loop, don't use kmsg logging for -.mount */
- if (!unit_has_name(u, "-.mount"))
- m->exec_context.std_output = EXEC_OUTPUT_KMSG;
+ if (!unit_has_name(u, "-.mount")) {
+ m->exec_context.std_output = u->meta.manager->default_std_output;
+ m->exec_context.std_error = u->meta.manager->default_std_error;
+ }
/* We need to make sure that /bin/mount is always called in
* the same process group as us, so that the autofs kernel
diff --git a/src/swap.c b/src/swap.c
index 54a8640..4fa30a3 100644
--- a/src/swap.c
+++ b/src/swap.c
@@ -74,7 +74,7 @@ static void swap_unset_proc_swaps(Swap *s) {
s->parameters_proc_swaps.what = NULL;
}
- static void swap_init(Unit *u) {
+static void swap_init(Unit *u) {
Swap *s = SWAP(u);
assert(s);
@@ -83,7 +83,8 @@ static void swap_unset_proc_swaps(Swap *s) {
s->timeout_usec = DEFAULT_TIMEOUT_USEC;
exec_context_init(&s->exec_context);
- s->exec_context.std_output = EXEC_OUTPUT_KMSG;
+ s->exec_context.std_output = u->meta.manager->default_std_output;
+ s->exec_context.std_error = u->meta.manager->default_std_error;
s->parameters_etc_fstab.priority = s->parameters_proc_swaps.priority = s->parameters_fragment.priority = -1;
--
1.7.7

View File

@ -8,18 +8,15 @@ Subject: [PATCH] mount: do not try to fsck tmpfs mountpoint with non-null
src/mount.c | 1 +
1 files changed, 1 insertions(+), 0 deletions(-)
diff --git a/src/mount.c b/src/mount.c
index ef953f0..5da4047 100644
--- a/src/mount.c
+++ b/src/mount.c
@@ -434,6 +434,7 @@ static int mount_add_device_links(Mount *m) {
Index: systemd-39/src/mount.c
===================================================================
--- systemd-39.orig/src/mount.c
+++ systemd-39/src/mount.c
@@ -428,6 +428,7 @@ static int mount_add_device_links(Mount
if (p->passno > 0 &&
!mount_is_bind(p) &&
+ !streq(p->fstype,"tmpfs") &&
UNIT(m)->meta.manager->running_as == MANAGER_SYSTEM &&
UNIT(m)->manager->running_as == MANAGER_SYSTEM &&
!path_equal(m->where, "/")) {
char *name;
--
1.7.7

View File

@ -7,11 +7,11 @@ Subject: [PATCH] force lvm restart after cryptsetup target is reached
src/cryptsetup-generator.c | 80 ++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 80 insertions(+), 0 deletions(-)
diff --git a/src/cryptsetup-generator.c b/src/cryptsetup-generator.c
index a48b7a4..14fcce8 100644
--- a/src/cryptsetup-generator.c
+++ b/src/cryptsetup-generator.c
@@ -22,12 +22,14 @@
Index: systemd-37/src/cryptsetup/cryptsetup-generator.c
===================================================================
--- systemd-37.orig/src/cryptsetup/cryptsetup-generator.c
+++ systemd-37/src/cryptsetup/cryptsetup-generator.c
@@ -22,6 +22,7 @@
#include <string.h>
#include <errno.h>
#include <unistd.h>
@ -19,14 +19,7 @@ index a48b7a4..14fcce8 100644
#include "log.h"
#include "util.h"
#include "unit-name.h"
const char *arg_dest = "/tmp";
+bool random_seed = false;
static bool has_option(const char *haystack, const char *needle) {
const char *f = haystack;
@@ -58,6 +60,78 @@ static bool has_option(const char *haystack, const char *needle) {
@@ -58,6 +59,71 @@ static bool has_option(const char *hayst
return false;
}
@ -53,10 +46,8 @@ index a48b7a4..14fcce8 100644
+ "DefaultDependencies=no\n"
+ "After=cryptsetup.target\n"
+ "Wants=cryptsetup.target\n"
+ "Before=local-fs.target\n"
+ "Before=shutdown.target\n");
+ if (!random_seed) {
+ fprintf(f, "After=local-fs.target\n");
+ }
+
+ fprintf(f,
+ "\n[Service]\n"
@ -86,13 +77,8 @@ index a48b7a4..14fcce8 100644
+ goto fail;
+ }
+
+ free(to);
+ to = NULL;
+
+ r = 0;
+ system ("TMPDIR=/run /usr/bin/sed -e 's/\\(After=.*\\) local-fs.target\\(.*\\)/\\1\\2/g' /lib/systemd/system/systemd-random-seed-load.service > /etc/systemd/system/systemd-random-seed-load.service ");
+ r=0;
+fail:
+
+ free(p);
+ free(to);
+
@ -105,19 +91,7 @@ index a48b7a4..14fcce8 100644
static int create_disk(
const char *name,
const char *device,
@@ -122,8 +196,11 @@ static int create_disk(
if (password && (streq(password, "/dev/urandom") ||
streq(password, "/dev/random") ||
streq(password, "/dev/hw_random")))
+ {
fprintf(f,
"After=systemd-random-seed-load.service\n");
+ random_seed = true;
+ }
else
fprintf(f,
"Before=local-fs.target\n");
@@ -293,6 +370,9 @@ int main(int argc, char *argv[]) {
@@ -291,6 +357,9 @@ int main(int argc, char *argv[]) {
free(options);
}
@ -127,6 +101,3 @@ index a48b7a4..14fcce8 100644
finish:
return r;
}
--
1.7.7

12
sysctl-modules.patch Normal file
View File

@ -0,0 +1,12 @@
Index: systemd-37/units/systemd-sysctl.service.in
===================================================================
--- systemd-37.orig/units/systemd-sysctl.service.in
+++ systemd-37/units/systemd-sysctl.service.in
@@ -10,6 +10,7 @@ Description=Apply Kernel Variables
DefaultDependencies=no
Conflicts=shutdown.target
After=systemd-readahead-collect.service systemd-readahead-replay.service
+After=systemd-modules-load.service
Before=sysinit.target shutdown.target
ConditionPathExists=|/etc/sysctl.conf
ConditionDirectoryNotEmpty=|/lib/sysctl.d

View File

@ -1,77 +0,0 @@
In the case of completion for the 'restart' verb, passing the invalid
unit name (the colums header) causes completion to cease functioning
entirely, with the error:
Failed to issue method call: Unit name UNIT is not valid.
This adds a small wrapper function for systemctl which can have common
options added to it.
---
src/systemctl-bash-completion.sh | 20 ++++++++++++--------
1 files changed, 12 insertions(+), 8 deletions(-)
diff --git a/src/systemctl-bash-completion.sh b/src/systemctl-bash-completion.sh
index 6369a6c..6ebb792 100644
--- a/src/systemctl-bash-completion.sh
+++ b/src/systemctl-bash-completion.sh
@@ -15,6 +15,10 @@
# You should have received a copy of the GNU General Public License
# along with systemd; If not, see <http://www.gnu.org/licenses/>.
+__systemctl() {
+ systemctl --no-legend "$@"
+}
+
__contains_word () {
local word=$1; shift
for w in $*; do [[ $w = $word ]] && return 0; done
@@ -24,7 +28,7 @@ __contains_word () {
__filter_units_by_property () {
local property=$1 value=$2 ; shift ; shift
local -a units=( $* )
- local -a props=( $(systemctl show --property "$property" -- ${units[*]} | grep -v ^$) )
+ local -a props=( $(__systemctl show --property "$property" -- ${units[*]} | grep -v ^$) )
for ((i=0; $i < ${#units[*]}; i++)); do
if [[ "${props[i]}" = "$property=$value" ]]; then
echo "${units[i]}"
@@ -32,10 +36,10 @@ __filter_units_by_property () {
done
}
-__get_all_units () { systemctl list-units --full --all | awk ' {print $1}' ; }
-__get_active_units () { systemctl list-units --full | awk ' {print $1}' ; }
-__get_inactive_units () { systemctl list-units --full --all | awk '$3 == "inactive" {print $1}' ; }
-__get_failed_units () { systemctl list-units --full | awk '$3 == "failed" {print $1}' ; }
+__get_all_units () { __systemctl list-units --full --all | awk ' {print $1}' ; }
+__get_active_units () { __systemctl list-units --full | awk ' {print $1}' ; }
+__get_inactive_units () { __systemctl list-units --full --all | awk '$3 == "inactive" {print $1}' ; }
+__get_failed_units () { __systemctl list-units --full | awk '$3 == "failed" {print $1}' ; }
_systemctl () {
local cur=${COMP_WORDS[COMP_CWORD]} prev=${COMP_WORDS[COMP_CWORD-1]}
@@ -134,13 +138,13 @@ _systemctl () {
comps=''
elif __contains_word "$verb" ${VERBS[JOBS]}; then
- comps=$( systemctl list-jobs | awk '{print $1}' )
+ comps=$( __systemctl list-jobs | awk '{print $1}' )
elif __contains_word "$verb" ${VERBS[SNAPSHOTS]}; then
- comps=$( systemctl list-units --type snapshot --full --all | awk '{print $1}' )
+ comps=$( __systemctl list-units --type snapshot --full --all | awk '{print $1}' )
elif __contains_word "$verb" ${VERBS[ENVS]}; then
- comps=$( systemctl show-environment | sed 's_\([^=]\+=\).*_\1_' )
+ comps=$( __systemctl show-environment | sed 's_\([^=]\+=\).*_\1_' )
compopt -o nospace
fi
--
1.7.7
_______________________________________________
systemd-devel mailing list
systemd-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/systemd-devel

View File

@ -1,3 +0,0 @@
version https://git-lfs.github.com/spec/v1
oid sha256:b38492bde73649cc3520953354ef446c268169c1d342614183655e9ee1a1bbc5
size 931101

3
systemd-39.tar.xz Normal file
View File

@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:cd053f97ab0ed4261ec44f247ec582566319339f523dbe79b79c68cfe5ad677f
size 890892

View File

@ -1,3 +1,74 @@
-------------------------------------------------------------------
Wed Jan 25 10:37:06 UTC 2012 - fcrozat@suse.com
- Update to version 39:
+ New systemd-cgtop tool to show control groups by their resource
usage.
+ Linking against libacl for ACLs is optional again.
+ If a group "adm" exists, journal files are automatically owned
by them, thus allow members of this group full access to the
system journal as well as all user journals.
+ The journal now stores the SELinux context of the logging
client for all entries.
+ Add C++ inclusion guards to all public headers.
+ New output mode "cat" in the journal to print only text
messages, without any meta data like date or time.
+ Include tiny X server wrapper as a temporary stop-gap to teach
XOrg udev display enumeration (until XOrg supports udev
hotplugging for display devices).
+ Add new systemd-cat tool for executing arbitrary programs with
STDERR/STDOUT connected to the journal. Can also act as BSD
logger replacement, and does so by default.
+ Optionally store all locally generated coredumps in the journal
along with meta data.
+ systemd-tmpfiles learnt four new commands: n, L, c, b, for
writing short strings to files (for usage for /sys), and for
creating symlinks, character and block device nodes.
+ New unit file option ControlGroupPersistent= to make cgroups
persistent.
+ Support multiple local RTCs in a sane way.
+ No longer monopolize IO when replaying readahead data on
rotating disks.
+ Don't show kernel threads in systemd-cgls anymore, unless
requested with new -k switch.
- Drop systemd-syslog_away_early_on_shutdown.patch: fixed upstream.
- Add fdupes to BuildRequires and use it at build time.
-------------------------------------------------------------------
Thu Jan 19 13:47:39 UTC 2012 - tittiatcoke@gmail.com
- Make the systemd journal persistent by creating the
/var/log/journal directory
-------------------------------------------------------------------
Wed Jan 18 09:03:51 UTC 2012 - tittiatcoke@gmail.com
- Update to version 38 :
- Bugfixes
- Implementation of a Journal Utility Library
- Implementation of a 128 Bit ID Utility Library
- 11 Patches integrated upstream
- Add systemd-syslog_away_early_on_shutdown.patch: make sure
syslog socket goes away early during shutdown.
- Add listen.conf for rsyslog. This will ensure that it will still
work fine with rsyslog and the new journal.
-------------------------------------------------------------------
Mon Jan 9 17:01:22 UTC 2012 - fcrozat@suse.com
- Add fix-is-enabled.patch: ensure systemctl is-enabled work
properly when systemd isn't running.
- Add logind-console.patch: do not bail logind if /dev/tty0 doesn't
exist (bnc#733022, bnc#735047).
- Add sysctl-modules.patch: ensure sysctl is started after modules
are loaded (bnc#725412).
- Fix warning in insserv patch.
- Update avoid-random-seed-cycle.patch with better upstream
approach.
- Update storage-after-cryptsetup.patch to restart lvm before
local-fs.target, not after it (bnc#740106).
- Increase pam-config dependency (bnc#713319).
-------------------------------------------------------------------
Wed Dec 7 15:15:07 UTC 2011 - fcrozat@suse.com

View File

@ -1,7 +1,7 @@
#
# spec file for package systemd-gtk
#
# Copyright (c) 2011 SUSE LINUX Products GmbH, Nuernberg, Germany.
# Copyright (c) 2012 SUSE LINUX Products GmbH, Nuernberg, Germany.
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
@ -15,33 +15,39 @@
# Please submit bugfixes or comments via http://bugs.opensuse.org/
#
# norootforbuild
Name: systemd-gtk
Url: http://www.freedesktop.org/wiki/Software/systemd
Version: 37
Release: 1
Version: 39
Release: 0
BuildRoot: %{_tmppath}/%{name}-%{version}-build
BuildRequires: audit-devel
BuildRequires: dbus-1-devel
BuildRequires: glib2-devel
BuildRequires: gperf
BuildRequires: gtk2-devel
BuildRequires: intltool
BuildRequires: libacl-devel
BuildRequires: libcap-devel
BuildRequires: libcryptsetup-devel
BuildRequires: libgee-devel
BuildRequires: libnotify-devel
BuildRequires: libselinux-devel
BuildRequires: libsepol-devel
BuildRequires: libtool
BuildRequires: libudev-devel
BuildRequires: pam-devel
BuildRequires: pkg-config
BuildRequires: tcpd-devel
BuildRequires: udev
BuildRequires: xz
BuildRequires: xz-devel
Summary: Graphical front-end for systemd
License: GPL-2.0+
Group: System/Base
BuildRoot: %{_tmppath}/%{name}-%{version}-build
BuildRequires: libudev-devel udev
BuildRequires: dbus-1-devel
BuildRequires: audit-devel
BuildRequires: gperf
BuildRequires: libcap-devel
BuildRequires: libacl-devel
BuildRequires: libtool
BuildRequires: tcpd-devel
BuildRequires: pam-devel
BuildRequires: libcryptsetup-devel
BuildRequires: pkg-config
BuildRequires: libselinux-devel libsepol-devel
BuildRequires: intltool
BuildRequires: gtk2-devel libnotify-devel
Summary: Graphical front-end for systemd
Requires: systemd = %{version}
Source0: http://www.freedesktop.org/software/systemd/systemd-%{version}.tar.bz2
Source0: http://www.freedesktop.org/software/systemd/systemd-%{version}.tar.xz
Source1: systemd-rpmlintrc
# Upstream First - Policy:
@ -64,7 +70,7 @@ export V=1
%configure \
--with-distro=suse \
--docdir=%{_docdir}/systemd \
--with-rootdir= \
--with-rootprefix= \
CFLAGS="%{optflags}"
make %{?_smp_mflags}

View File

@ -1,3 +1,74 @@
-------------------------------------------------------------------
Wed Jan 25 10:37:06 UTC 2012 - fcrozat@suse.com
- Update to version 39:
+ New systemd-cgtop tool to show control groups by their resource
usage.
+ Linking against libacl for ACLs is optional again.
+ If a group "adm" exists, journal files are automatically owned
by them, thus allow members of this group full access to the
system journal as well as all user journals.
+ The journal now stores the SELinux context of the logging
client for all entries.
+ Add C++ inclusion guards to all public headers.
+ New output mode "cat" in the journal to print only text
messages, without any meta data like date or time.
+ Include tiny X server wrapper as a temporary stop-gap to teach
XOrg udev display enumeration (until XOrg supports udev
hotplugging for display devices).
+ Add new systemd-cat tool for executing arbitrary programs with
STDERR/STDOUT connected to the journal. Can also act as BSD
logger replacement, and does so by default.
+ Optionally store all locally generated coredumps in the journal
along with meta data.
+ systemd-tmpfiles learnt four new commands: n, L, c, b, for
writing short strings to files (for usage for /sys), and for
creating symlinks, character and block device nodes.
+ New unit file option ControlGroupPersistent= to make cgroups
persistent.
+ Support multiple local RTCs in a sane way.
+ No longer monopolize IO when replaying readahead data on
rotating disks.
+ Don't show kernel threads in systemd-cgls anymore, unless
requested with new -k switch.
- Drop systemd-syslog_away_early_on_shutdown.patch: fixed upstream.
- Add fdupes to BuildRequires and use it at build time.
-------------------------------------------------------------------
Thu Jan 19 13:47:39 UTC 2012 - tittiatcoke@gmail.com
- Make the systemd journal persistent by creating the
/var/log/journal directory
-------------------------------------------------------------------
Wed Jan 18 09:03:51 UTC 2012 - tittiatcoke@gmail.com
- Update to version 38 :
- Bugfixes
- Implementation of a Journal Utility Library
- Implementation of a 128 Bit ID Utility Library
- 11 Patches integrated upstream
- Add systemd-syslog_away_early_on_shutdown.patch: make sure
syslog socket goes away early during shutdown.
- Add listen.conf for rsyslog. This will ensure that it will still
work fine with rsyslog and the new journal.
-------------------------------------------------------------------
Mon Jan 9 17:01:22 UTC 2012 - fcrozat@suse.com
- Add fix-is-enabled.patch: ensure systemctl is-enabled work
properly when systemd isn't running.
- Add logind-console.patch: do not bail logind if /dev/tty0 doesn't
exist (bnc#733022, bnc#735047).
- Add sysctl-modules.patch: ensure sysctl is started after modules
are loaded (bnc#725412).
- Fix warning in insserv patch.
- Update avoid-random-seed-cycle.patch with better upstream
approach.
- Update storage-after-cryptsetup.patch to restart lvm before
local-fs.target, not after it (bnc#740106).
- Increase pam-config dependency (bnc#713319).
-------------------------------------------------------------------
Wed Dec 7 15:15:07 UTC 2011 - fcrozat@suse.com

View File

@ -1,7 +1,7 @@
#
# spec file for package systemd
#
# Copyright (c) 2011 SUSE LINUX Products GmbH, Nuernberg, Germany.
# Copyright (c) 2012 SUSE LINUX Products GmbH, Nuernberg, Germany.
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
@ -15,7 +15,6 @@
# Please submit bugfixes or comments via http://bugs.opensuse.org/
#
# norootforbuild
%define build_plymouth 0
@ -23,35 +22,40 @@
Name: systemd
Url: http://www.freedesktop.org/wiki/Software/systemd
Version: 37
Release: 1
Version: 39
Release: 0
Summary: A System and Session Manager
License: GPL-2.0+
Group: System/Base
Summary: A System and Session Manager
BuildRoot: %{_tmppath}/%{name}-%{version}-build
BuildRequires: libudev-devel udev
BuildRequires: dbus-1-devel
BuildRequires: audit-devel
BuildRequires: dbus-1-devel
BuildRequires: fdupes
BuildRequires: gperf
BuildRequires: libcap-devel
BuildRequires: libacl-devel
BuildRequires: libtool
BuildRequires: tcpd-devel
BuildRequires: pam-devel
BuildRequires: libcryptsetup-devel
BuildRequires: pkg-config
BuildRequires: libselinux-devel libsepol-devel
BuildRequires: intltool
BuildRequires: libacl-devel
BuildRequires: libcap-devel
BuildRequires: libcryptsetup-devel
BuildRequires: libselinux-devel
BuildRequires: libsepol-devel
BuildRequires: libtool
BuildRequires: libudev-devel
BuildRequires: pam-devel
BuildRequires: pkg-config
BuildRequires: tcpd-devel
BuildRequires: udev
BuildRequires: xz
BuildRequires: xz-devel
Requires: udev >= 172
Requires: dbus-1 >= 1.4.0
Requires: kbd
Requires: util-linux >= 2.19
Requires: pam-config
Requires: pam-config >= 0.79-5
Requires: systemd-presets-branding
Recommends: dbus-1-python
Conflicts: filesystem < 11.5
Conflicts: mkinitrd < 2.7.0
Source0: http://www.freedesktop.org/software/systemd/%{name}-%{version}.tar.bz2
Source0: http://www.freedesktop.org/software/systemd/%{name}-%{version}.tar.xz
Source1: systemd-rpmlintrc
Source2: localfs.service
Source3: systemd-sysv-convert
@ -62,6 +66,8 @@ Source7: systemd-bootsplash
Source8: bootsplash-startup.service
Source9: bootsplash-quit.service
Source10: bootsplash-shutdown.service
# Stop-gap, just to ensure things work fine with rsyslog without having to change the package right-away
Source11: listen.conf
Patch1: 0001-Add-bootsplash-handling-for-password-dialogs.patch
# handle SUSE specific kbd settings
Patch6: 0001-handle-disable_caplock-and-compose_table-and-kbd_rat.patch
@ -71,27 +77,19 @@ Patch10: 0001-service-Fix-dependencies-added-when-parsing-insserv..patch
Patch13: 0001-service-flags-sysv-service-with-detected-pid-as-Rema.patch
Patch15: support-sysvinit.patch
Patch16: modules_on_boot.patch
Patch18: systemctl-completion-fix.patch
Patch19: avoid-random-seed-cycle.patch
Patch22: new-lsb-headers.patch
Patch23: storage-after-cryptsetup.patch
Patch24: delay-fsck-cryptsetup-after-md-lvm-dmraid.patch
Patch31: lock-opensuse.patch
Patch33: crypt-loop-file.patch
Patch36: sysctl-modules.patch
# Upstream First - Policy:
# Never add any patches to this package without the upstream commit id
# in the patch. Any patches added here without a very good reason to make
# an exception will be silently removed with the next version update.
Patch20: crash-isolating.patch
Patch21: no-tmpfs-fsck.patch
Patch25: cron-tty-pam.patch
Patch26: do_not_warn_pidfile.patch
Patch27: mount-swap-log.patch
Patch28: color-on-boot.patch
Patch29: log_on_close.patch
Patch30: handle-racy-daemon.patch
Patch32: garbage_collect_units.patch
%description
Systemd is a system and service manager, compatible with SysV and LSB
@ -104,8 +102,8 @@ transactional dependency-based service control logic. It can work as a
drop-in replacement for sysvinit.
%package devel
Group: Development/Libraries/C and C++
Summary: Development headers for systemd
Group: Development/Libraries/C and C++
Requires: %{name} = %{version}
Requires: pkg-config
@ -114,6 +112,7 @@ Development headers and auxiliary files for developing applications for systemd.
%package sysvinit
Summary: System V init tools
Group: System/Base
Requires: %{name} = %{version}
Provides: sbin_init
Conflicts: otherproviders(sbin_init)
@ -126,6 +125,7 @@ Drop-in replacement of System V init tools.
%package plymouth
Summary: Plymouth support for systemd
Group: System/Base
Requires: %{name} = %{version}
Requires: plymouth
@ -142,22 +142,14 @@ Plymouth integration for systemd
%patch13 -p1
%patch15 -p1
%patch16 -p1
%patch18 -p1
%patch19 -p1
%patch20 -p1
%patch21 -p1
%patch22 -p1
%patch23 -p1
%patch24 -p1
%patch25 -p1
%patch26 -p1
%patch27 -p1
%patch28 -p1
%patch29 -p1
%patch30 -p1
%patch31 -p1
%patch32 -p1
%patch33 -p1
%patch36 -p1
%build
autoreconf -fiv
@ -168,7 +160,8 @@ export V=1
%configure \
--with-distro=suse \
--docdir=%{_docdir}/systemd \
--with-rootdir= \
--with-rootprefix= \
--with-pamlibdir=/%{_lib}/security \
--disable-gtk \
CFLAGS="%{optflags}"
make %{?_smp_mflags}
@ -231,10 +224,20 @@ ln -s /dev/null %{buildroot}/lib/systemd/system/stoppreload.service
ln -s /dev/null %{buildroot}/lib/systemd/system/earlyxdm.service
ln -s systemd-sysctl.service %{buildroot}/lib/systemd/system/sysctl.service
ln -s systemd-random-seed-load.service %{buildroot}/lib/systemd/system/random.service
# Install rsyslog fragment
mkdir -p %{buildroot}%{_sysconfdir}/rsyslog.d/
install -m 0644 %{SOURCE11} %{buildroot}%{_sysconfdir}/rsyslog.d/
# Create the /var/log/journal directory to change the volatile journal to a persistent one
mkdir -p %{buildroot}/var/log/journal
%if %{build_plymouth}
(cd %{buildroot} && find . -name '*plymouth*') > files.plymouth
%endif
%fdupes $RPM_BUILD_ROOT
%post
/usr/sbin/pam-config -a --systemd >/dev/null 2>&1 || :
/sbin/ldconfig
@ -286,6 +289,7 @@ rm -rf %{buildroot}
/bin/systemd
/bin/systemctl
/bin/systemd-notify
/bin/systemd-journalctl
/bin/systemd-ask-password
/bin/systemd-loginctl
/bin/systemd-tty-ask-password-agent
@ -297,7 +301,11 @@ rm -rf %{buildroot}
%{_sbindir}/systemd-sysv-convert
%{_libdir}/libsystemd-daemon.so.*
%{_libdir}/libsystemd-login.so.*
%{_libdir}/libsystemd-id128.so.*
%{_libdir}/libsystemd-journal.so.*
%{_bindir}/systemd-cgls
%{_bindir}/systemd-cgtop
%{_bindir}/systemd-cat
/lib/systemd/systemd-*
%dir /lib/systemd/system-shutdown
%dir /lib/systemd/system.preset
@ -315,10 +323,13 @@ rm -rf %{buildroot}
%dir /usr/lib/binfmt.d
%dir %{_sysconfdir}/binfmt.d
%dir /usr/lib/sysctl.d
/usr/lib/sysctl.d/coredump.conf
%dir %{_sysconfdir}/sysctl.d
%dir %{_sysconfdir}/rsyslog.d
/usr/lib/tmpfiles.d/*.conf
%config(noreplace) %{_sysconfdir}/systemd/system.conf
%config(noreplace) %{_sysconfdir}/systemd/systemd-logind.conf
%config(noreplace) %{_sysconfdir}/systemd/systemd-journald.conf
%config(noreplace) %{_sysconfdir}/systemd/user.conf
%config(noreplace) %{_sysconfdir}/systemd/system.conf
%config(noreplace) %{_sysconfdir}/dbus-1/system.d/org.freedesktop.locale1.conf
@ -326,6 +337,7 @@ rm -rf %{buildroot}
%config(noreplace) %{_sysconfdir}/dbus-1/system.d/org.freedesktop.systemd1.conf
%config(noreplace) %{_sysconfdir}/dbus-1/system.d/org.freedesktop.hostname1.conf
%config(noreplace) %{_sysconfdir}/dbus-1/system.d/org.freedesktop.timedate1.conf
%config(noreplace) %{_sysconfdir}/rsyslog.d/listen.conf
%{_datadir}/dbus-1/interfaces/org.freedesktop.hostname1.xml
%{_datadir}/dbus-1/interfaces/org.freedesktop.locale1.xml
%{_datadir}/dbus-1/interfaces/org.freedesktop.systemd1.*.xml
@ -370,22 +382,30 @@ rm -rf %{buildroot}
/usr/lib/systemd/user
%dir %{_sysconfdir}/systemd
%dir %{_sysconfdir}/bash_completion.d
/etc/bash_completion.d/systemctl-bash-completion.sh
/etc/bash_completion.d/systemd-bash-completion.sh
/etc/rpm/macros.systemd
%dir /var/lib/systemd
%dir /var/lib/systemd/sysv-convert
%dir /var/lib/systemd/migrated
%dir /var/log/journal
%files devel
%defattr(-,root,root,-)
%{_libdir}/libsystemd-daemon.so
%{_libdir}/libsystemd-login.so
%{_libdir}/libsystemd-id128.so
%{_libdir}/libsystemd-journal.so
%dir %{_includedir}/systemd
%{_includedir}/systemd/sd-login.h
%{_includedir}/systemd/sd-daemon.h
%{_includedir}/systemd/sd-id128.h
%{_includedir}/systemd/sd-journal.h
%{_includedir}/systemd/sd-messages.h
%{_datadir}/pkgconfig/systemd.pc
%{_libdir}/pkgconfig/libsystemd-daemon.pc
%{_libdir}/pkgconfig/libsystemd-login.pc
%{_libdir}/pkgconfig/libsystemd-id128.pc
%{_libdir}/pkgconfig/libsystemd-journal.pc
%if %{build_plymouth}