From c21a4ca2f0247cff9b26eec10d07cbe4587b9ca220eaedb5ae43133154d01229 Mon Sep 17 00:00:00 2001 From: "Dr. Werner Fink" Date: Mon, 16 Feb 2015 11:36:25 +0000 Subject: [PATCH] Accepting request 286310 from home:jengelh:systemd - Reinstate and improve (remove huge indents from) tty-ask-password-agent-on-console.patch, 0014-journald-with-journaling-FS.patch, rootsymlink_generator. OBS-URL: https://build.opensuse.org/request/show/286310 OBS-URL: https://build.opensuse.org/package/show/Base:System/systemd?expand=0&rev=847 --- ...s390_con3270_disable_ANSI_colour_esc.patch | 60 +++-- 0014-journald-with-journaling-FS.patch | 100 +++++--- ...pletion-smart-to-be-able-to-redirect.patch | 86 +++---- ...fault-links-for-primary-cd_dvd-drive.patch | 14 +- ...lity-links-for-truncated-by-id-links.patch | 44 ++-- ...t-ssd-disk-to-use-deadline-scheduler.patch | 21 +- 1096-new-udev-root-symlink-generator.patch | 76 +++--- ...-suspend-hibernate-calls-to-pm-utils.patch | 18 +- insserv-generator.patch | 18 +- journald-advice-about-use-of-memory.patch | 148 +++++------ kbd-model-map.patch | 15 +- ...linker-find-libudev-for-libdevmapper.patch | 30 +-- parse-crypttab-for-noauto-option.patch | 21 +- ...-quit-and-wait-for-emergency-service.patch | 24 +- systemctl-set-default-target.patch | 16 +- systemd-218.g1050.tar.xz | 3 + systemd-218.tar.xz | 3 - systemd-add-user-keep.patch | 129 +++++----- systemd-dbus-system-bus-address.patch | 16 +- systemd-mini.changes | 12 +- systemd-mini.spec | 67 ++--- systemd-tmp-safe-defaults.patch | 16 +- systemd.changes | 12 +- systemd.spec | 67 ++--- tty-ask-password-agent-on-console.patch | 239 ++++++++++++++++++ ...r-sbin-sulogin-for-emergency-service.patch | 50 ---- 26 files changed, 736 insertions(+), 569 deletions(-) create mode 100644 systemd-218.g1050.tar.xz delete mode 100644 systemd-218.tar.xz create mode 100644 tty-ask-password-agent-on-console.patch delete mode 100644 use-usr-sbin-sulogin-for-emergency-service.patch diff --git a/0001-On_s390_con3270_disable_ANSI_colour_esc.patch b/0001-On_s390_con3270_disable_ANSI_colour_esc.patch index 2677ce9d..ef656b99 100644 --- a/0001-On_s390_con3270_disable_ANSI_colour_esc.patch +++ b/0001-On_s390_con3270_disable_ANSI_colour_esc.patch @@ -1,15 +1,15 @@ --- rules/99-systemd.rules.in | 2 - src/core/manager.c | 24 ++++++++-- - src/shared/util.c | 101 ++++++++++++++++++++++++++++++++++++++++++++-- + src/core/manager.c | 24 ++++++++--- + src/shared/util.c | 99 ++++++++++++++++++++++++++++++++++++++++++++-- src/shared/util.h | 1 - 4 files changed, 118 insertions(+), 10 deletions(-) + 4 files changed, 116 insertions(+), 10 deletions(-) -Index: systemd-218/rules/99-systemd.rules.in +Index: systemd/rules/99-systemd.rules.in =================================================================== ---- systemd-218.orig/rules/99-systemd.rules.in -+++ systemd-218/rules/99-systemd.rules.in +--- systemd.orig/rules/99-systemd.rules.in ++++ systemd/rules/99-systemd.rules.in @@ -7,7 +7,7 @@ ACTION=="remove", GOTO="systemd_end" @@ -19,11 +19,11 @@ Index: systemd-218/rules/99-systemd.rules.in KERNEL=="vport*", TAG+="systemd" -Index: systemd-218/src/core/manager.c +Index: systemd/src/core/manager.c =================================================================== ---- systemd-218.orig/src/core/manager.c -+++ systemd-218/src/core/manager.c -@@ -110,7 +110,7 @@ static int manager_watch_jobs_in_progres +--- systemd.orig/src/core/manager.c ++++ systemd/src/core/manager.c +@@ -113,7 +113,7 @@ static int manager_watch_jobs_in_progres #define CYLON_BUFFER_EXTRA (2*(sizeof(ANSI_RED_ON)-1) + sizeof(ANSI_HIGHLIGHT_RED_ON)-1 + 2*(sizeof(ANSI_HIGHLIGHT_OFF)-1)) @@ -32,7 +32,7 @@ Index: systemd-218/src/core/manager.c char *p = buffer; assert(buflen >= CYLON_BUFFER_EXTRA + width + 1); -@@ -119,12 +119,14 @@ static void draw_cylon(char buffer[], si +@@ -122,12 +122,14 @@ static void draw_cylon(char buffer[], si if (pos > 1) { if (pos > 2) p = mempset(p, ' ', pos-2); @@ -49,7 +49,7 @@ Index: systemd-218/src/core/manager.c *p++ = '*'; } -@@ -135,7 +137,8 @@ static void draw_cylon(char buffer[], si +@@ -138,7 +140,8 @@ static void draw_cylon(char buffer[], si *p++ = '*'; if (pos < width-1) p = mempset(p, ' ', width-1-pos); @@ -59,7 +59,7 @@ Index: systemd-218/src/core/manager.c } } -@@ -152,6 +155,7 @@ void manager_flip_auto_status(Manager *m +@@ -155,6 +158,7 @@ void manager_flip_auto_status(Manager *m } static void manager_print_jobs_in_progress(Manager *m) { @@ -67,7 +67,7 @@ Index: systemd-218/src/core/manager.c _cleanup_free_ char *job_of_n = NULL; Iterator i; Job *j; -@@ -176,10 +180,20 @@ static void manager_print_jobs_in_progre +@@ -180,10 +184,20 @@ static void manager_print_jobs_in_progre assert(counter == print_nr + 1); assert(j); @@ -89,11 +89,11 @@ Index: systemd-218/src/core/manager.c m->jobs_in_progress_iteration++; -Index: systemd-218/src/shared/util.c +Index: systemd/src/shared/util.c =================================================================== ---- systemd-218.orig/src/shared/util.c -+++ systemd-218/src/shared/util.c -@@ -3182,6 +3182,7 @@ int status_vprintf(const char *status, b +--- systemd.orig/src/shared/util.c ++++ systemd/src/shared/util.c +@@ -3212,6 +3212,7 @@ int status_vprintf(const char *status, b struct iovec iovec[6] = {}; int n = 0; static bool prev_ephemeral; @@ -101,7 +101,7 @@ Index: systemd-218/src/shared/util.c assert(format); -@@ -3195,6 +3196,41 @@ int status_vprintf(const char *status, b +@@ -3225,6 +3226,41 @@ int status_vprintf(const char *status, b if (fd < 0) return fd; @@ -143,7 +143,7 @@ Index: systemd-218/src/shared/util.c if (ellipse) { char *e; size_t emax, sl; -@@ -3217,8 +3253,12 @@ int status_vprintf(const char *status, b +@@ -3247,8 +3283,12 @@ int status_vprintf(const char *status, b } } @@ -158,7 +158,7 @@ Index: systemd-218/src/shared/util.c prev_ephemeral = ephemeral; if (status) { -@@ -3474,8 +3514,22 @@ void columns_lines_cache_reset(int signu +@@ -3504,8 +3544,22 @@ void columns_lines_cache_reset(int signu bool on_tty(void) { static int cached_on_tty = -1; @@ -182,7 +182,7 @@ Index: systemd-218/src/shared/util.c return cached_on_tty; } -@@ -3493,6 +3547,27 @@ int files_same(const char *filea, const +@@ -3523,6 +3577,27 @@ int files_same(const char *filea, const a.st_ino == b.st_ino; } @@ -210,11 +210,11 @@ Index: systemd-218/src/shared/util.c int running_in_chroot(void) { int ret; -@@ -3976,7 +4051,25 @@ bool tty_is_vc_resolve(const char *tty) +@@ -4006,7 +4081,23 @@ bool tty_is_vc_resolve(const char *tty) const char *default_term_for_tty(const char *tty) { assert(tty); -- return tty_is_vc_resolve(tty) ? "TERM=linux" : "TERM=vt102"; +- return tty_is_vc_resolve(tty) ? "TERM=linux" : "TERM=vt220"; + if (tty_is_vc_resolve(tty)) + return "TERM=linux"; + @@ -230,18 +230,16 @@ Index: systemd-218/src/shared/util.c + if (streq(mode, "3270")) + return "TERM=ibm327x"; + } -+ if (streq(tty, "ttyS1")) -+ return "TERM=vt220"; +#endif -+ return "TERM=vt102"; ++ return "TERM=vt220"; } bool dirent_is_file(const struct dirent *de) { -Index: systemd-218/src/shared/util.h +Index: systemd/src/shared/util.h =================================================================== ---- systemd-218.orig/src/shared/util.h -+++ systemd-218/src/shared/util.h -@@ -474,6 +474,7 @@ unsigned lines(void); +--- systemd.orig/src/shared/util.h ++++ systemd/src/shared/util.h +@@ -475,6 +475,7 @@ unsigned lines(void); void columns_lines_cache_reset(int _unused_ signum); bool on_tty(void); diff --git a/0014-journald-with-journaling-FS.patch b/0014-journald-with-journaling-FS.patch index ef18e474..c3ae1a23 100644 --- a/0014-journald-with-journaling-FS.patch +++ b/0014-journald-with-journaling-FS.patch @@ -1,11 +1,22 @@ ---- - src/journal/journald-server.c | 29 +++++++++++++++++++++++++++-- - 1 file changed, 27 insertions(+), 2 deletions(-) +From: werner@suse.de +Upstream: marked as openSUSE-specific fix originally, but may well + worth be to be sent upstream. -Index: systemd-218/src/journal/journald-server.c +Original description: + (none) + +Augmented description [jengelh@inai.de]: +Disable COW on journal files, as that is naturally leading to a lot +of unwanted fragmentation on btrfs. +No word on compression… +--- + src/journal/journald-server.c | 34 ++++++++++++++++++++++++++++++++++ + 1 file changed, 34 insertions(+) + +Index: systemd/src/journal/journald-server.c =================================================================== ---- systemd-218.orig/src/journal/journald-server.c -+++ systemd-218/src/journal/journald-server.c +--- systemd.orig/src/journal/journald-server.c ++++ systemd/src/journal/journald-server.c @@ -21,6 +21,7 @@ #include @@ -14,45 +25,50 @@ Index: systemd-218/src/journal/journald-server.c #include #include #include -@@ -921,7 +922,7 @@ finish: +@@ -917,6 +918,38 @@ finish: + dispatch_message_real(s, iovec, n, m, ucred, tv, label, label_len, unit_id, priority, object_pid); + } ++/* ++ * On journaling and/or compressing file systems, avoid doubling the efforts ++ * for the system, that is, set NOCOW and NOCOMP inode flags. Check for every ++ * single flag, as otherwise, some of the file systems may return EOPNOTSUPP on ++ * a single unkown flag (like BtrFS does). ++ * ++ * …but src/journal/journal-file.c already sets NOCOW too…⸘ ++ */ ++static void disable_cow(const char *dir, const Server *serv) ++{ ++ unsigned long flags; ++ int fd = open(dir, O_DIRECTORY); ++ ++ if (fd < 0) ++ return; ++ if (ioctl(fd, FS_IOC_GETFLAGS, &flags) == 0) { ++ unsigned long old = flags; ++ if (!(flags & FS_NOATIME_FL) && ++ ioctl(fd, FS_IOC_SETFLAGS, flags | FS_NOATIME_FL) == 0) ++ flags |= FS_NOATIME_FL; ++ if (!(flags & FS_NOCOW_FL) && ++ ioctl(fd, FS_IOC_SETFLAGS, flags | FS_NOCOW_FL) == 0) ++ flags |= FS_NOCOW_FL; ++ if (!(flags & FS_NOCOMP_FL) && serv->compress) { ++ flags &= ~FS_COMPR_FL; ++ flags |= FS_NOCOMP_FL; ++ } ++ if (old != flags) ++ ioctl(fd, FS_IOC_SETFLAGS, flags); ++ } ++ close(fd); ++} static int system_journal_open(Server *s, bool flush_requested) { -- int r; -+ int r, fd; - char *fn; - sd_id128_t machine; - char ids[33]; -@@ -947,7 +948,31 @@ static int system_journal_open(Server *s - (void) mkdir("/var/log/journal/", 0755); + int r; +@@ -946,6 +979,7 @@ static int system_journal_open(Server *s - fn = strappenda("/var/log/journal/", ids); -- (void) mkdir(fn, 0755); -+ (void)mkdir(fn, 0755); -+ -+ /* -+ * On journaling and/or compressing file systems avoid doubling the -+ * efforts for the system, that is set NOCOW and NOCOMP inode flags. -+ * Check for every single flag as otherwise some of the file systems -+ * may return EOPNOTSUPP on one unkown flag (like BtrFS does). -+ */ -+ if ((fd = open(fn, O_DIRECTORY)) >= 0) { -+ long flags; -+ if (ioctl(fd, FS_IOC_GETFLAGS, &flags) == 0) { -+ int old = flags; -+ if (!(flags&FS_NOATIME_FL) && ioctl(fd, FS_IOC_SETFLAGS, flags|FS_NOATIME_FL) == 0) -+ flags |= FS_NOATIME_FL; -+ if (!(flags&FS_NOCOW_FL) && ioctl(fd, FS_IOC_SETFLAGS, flags|FS_NOCOW_FL) == 0) -+ flags |= FS_NOCOW_FL; -+ if (!(flags&FS_NOCOMP_FL) && s->compress) { -+ flags &= ~FS_COMPR_FL; -+ flags |= FS_NOCOMP_FL; -+ } -+ if (old != flags) -+ ioctl(fd, FS_IOC_SETFLAGS, flags); -+ } -+ close(fd); -+ } + fn = strjoina("/var/log/journal/", ids); + (void) mkdir(fn, 0755); ++ disable_cow(fn, s); - fn = strappenda(fn, "/system.journal"); + fn = strjoina(fn, "/system.journal"); r = journal_file_open_reliably(fn, O_RDWR|O_CREAT, 0640, s->compress, s->seal, &s->system_metrics, s->mmap, NULL, &s->system_journal); diff --git a/0019-make-completion-smart-to-be-able-to-redirect.patch b/0019-make-completion-smart-to-be-able-to-redirect.patch index 2f0ec4e0..a545cf08 100644 --- a/0019-make-completion-smart-to-be-able-to-redirect.patch +++ b/0019-make-completion-smart-to-be-able-to-redirect.patch @@ -12,10 +12,10 @@ shell-completion/bash/udevadm | 6 +++++- 11 files changed, 70 insertions(+), 11 deletions(-) -Index: systemd-218/shell-completion/bash/coredumpctl +Index: systemd/shell-completion/bash/coredumpctl =================================================================== ---- systemd-218.orig/shell-completion/bash/coredumpctl -+++ systemd-218/shell-completion/bash/coredumpctl +--- systemd.orig/shell-completion/bash/coredumpctl ++++ systemd/shell-completion/bash/coredumpctl @@ -44,6 +44,10 @@ _coredumpctl() { [DUMP]='dump gdb' ) @@ -33,13 +33,13 @@ Index: systemd-218/shell-completion/bash/coredumpctl -complete -F _coredumpctl coredumpctl +complete -o default -o bashdefault -F _coredumpctl coredumpctl -Index: systemd-218/shell-completion/bash/hostnamectl +Index: systemd/shell-completion/bash/hostnamectl =================================================================== ---- systemd-218.orig/shell-completion/bash/hostnamectl -+++ systemd-218/shell-completion/bash/hostnamectl +--- systemd.orig/shell-completion/bash/hostnamectl ++++ systemd/shell-completion/bash/hostnamectl @@ -30,6 +30,10 @@ _hostnamectl() { local OPTS='-h --help --version --transient --static --pretty - --no-ask-password -H --host' + --no-ask-password -H --host --machine' + if __contains_word ">" ${COMP_WORDS[*]:0:COMP_CWORD}; then + return 0 @@ -54,12 +54,12 @@ Index: systemd-218/shell-completion/bash/hostnamectl -complete -F _hostnamectl hostnamectl +complete -o default -o bashdefault -F _hostnamectl hostnamectl -Index: systemd-218/shell-completion/bash/journalctl +Index: systemd/shell-completion/bash/journalctl =================================================================== ---- systemd-218.orig/shell-completion/bash/journalctl -+++ systemd-218/shell-completion/bash/journalctl -@@ -51,6 +51,10 @@ _journalctl() { - --verify-key' +--- systemd.orig/shell-completion/bash/journalctl ++++ systemd/shell-completion/bash/journalctl +@@ -55,6 +55,10 @@ _journalctl() { + --root --machine' ) + if __contains_word ">" ${COMP_WORDS[*]:0:COMP_CWORD}; then @@ -69,16 +69,16 @@ Index: systemd-218/shell-completion/bash/journalctl if __contains_word "$prev" ${OPTS[ARG]} ${OPTS[ARGUNKNOWN]}; then case $prev in --boot|--this-boot|-b) -@@ -116,4 +120,4 @@ _journalctl() { +@@ -120,4 +124,4 @@ _journalctl() { fi } -complete -F _journalctl journalctl +complete -o default -o bashdefault -F _journalctl journalctl -Index: systemd-218/shell-completion/bash/kernel-install +Index: systemd/shell-completion/bash/kernel-install =================================================================== ---- systemd-218.orig/shell-completion/bash/kernel-install -+++ systemd-218/shell-completion/bash/kernel-install +--- systemd.orig/shell-completion/bash/kernel-install ++++ systemd/shell-completion/bash/kernel-install @@ -18,11 +18,22 @@ # You should have received a copy of the GNU Lesser General Public License # along with systemd; If not, see . @@ -108,13 +108,13 @@ Index: systemd-218/shell-completion/bash/kernel-install -complete -F _kernel_install kernel-install +complete -o default -o bashdefault -F _kernel_install kernel-install -Index: systemd-218/shell-completion/bash/localectl +Index: systemd/shell-completion/bash/localectl =================================================================== ---- systemd-218.orig/shell-completion/bash/localectl -+++ systemd-218/shell-completion/bash/localectl +--- systemd.orig/shell-completion/bash/localectl ++++ systemd/shell-completion/bash/localectl @@ -36,6 +36,10 @@ _localectl() { local OPTS='-h --help --version --no-convert --no-pager --no-ask-password - -H --host' + -H --host --machine' + if __contains_word ">" ${COMP_WORDS[*]:0:COMP_CWORD}; then + return 0 @@ -129,13 +129,13 @@ Index: systemd-218/shell-completion/bash/localectl -complete -F _localectl localectl +complete -o default -o bashdefault -F _localectl localectl -Index: systemd-218/shell-completion/bash/loginctl +Index: systemd/shell-completion/bash/loginctl =================================================================== ---- systemd-218.orig/shell-completion/bash/loginctl -+++ systemd-218/shell-completion/bash/loginctl -@@ -37,6 +37,10 @@ _loginctl () { - [ARG]='--host -H --kill-who --property -p --signal -s' - ) +--- systemd.orig/shell-completion/bash/loginctl ++++ systemd/shell-completion/bash/loginctl +@@ -38,6 +38,10 @@ _loginctl () { + [ARG]='--host -H --kill-who --property -p --signal -s --machine' + ) + if __contains_word ">" ${COMP_WORDS[*]:0:COMP_CWORD}; then + return 0 @@ -144,16 +144,16 @@ Index: systemd-218/shell-completion/bash/loginctl if __contains_word "$prev" ${OPTS[ARG]}; then case $prev in --signal|-s) -@@ -106,4 +110,4 @@ _loginctl () { +@@ -107,4 +111,4 @@ _loginctl () { return 0 } -complete -F _loginctl loginctl +complete -o default -o bashdefault -F _loginctl loginctl -Index: systemd-218/shell-completion/bash/systemctl.in +Index: systemd/shell-completion/bash/systemctl.in =================================================================== ---- systemd-218.orig/shell-completion/bash/systemctl.in -+++ systemd-218/shell-completion/bash/systemctl.in +--- systemd.orig/shell-completion/bash/systemctl.in ++++ systemd/shell-completion/bash/systemctl.in @@ -96,6 +96,10 @@ _systemctl () { [ARG]='--host -H --kill-who --property -p --signal -s --type -t --state --root' ) @@ -171,10 +171,10 @@ Index: systemd-218/shell-completion/bash/systemctl.in -complete -F _systemctl systemctl +complete -o default -o bashdefault -F _systemctl systemctl -Index: systemd-218/shell-completion/bash/systemd-analyze +Index: systemd/shell-completion/bash/systemd-analyze =================================================================== ---- systemd-218.orig/shell-completion/bash/systemd-analyze -+++ systemd-218/shell-completion/bash/systemd-analyze +--- systemd.orig/shell-completion/bash/systemd-analyze ++++ systemd/shell-completion/bash/systemd-analyze @@ -47,6 +47,10 @@ _systemd_analyze() { [VERIFY]='verify' ) @@ -192,10 +192,10 @@ Index: systemd-218/shell-completion/bash/systemd-analyze -complete -F _systemd_analyze systemd-analyze +complete -o default -o bashdefault -F _systemd_analyze systemd-analyze -Index: systemd-218/shell-completion/bash/systemd-run +Index: systemd/shell-completion/bash/systemd-run =================================================================== ---- systemd-218.orig/shell-completion/bash/systemd-run -+++ systemd-218/shell-completion/bash/systemd-run +--- systemd.orig/shell-completion/bash/systemd-run ++++ systemd/shell-completion/bash/systemd-run @@ -17,6 +17,13 @@ # You should have received a copy of the GNU Lesser General Public License # along with systemd; If not, see . @@ -228,13 +228,13 @@ Index: systemd-218/shell-completion/bash/systemd-run -complete -F _systemd_run systemd-run +complete -o default -o bashdefault -F _systemd_run systemd-run -Index: systemd-218/shell-completion/bash/timedatectl +Index: systemd/shell-completion/bash/timedatectl =================================================================== ---- systemd-218.orig/shell-completion/bash/timedatectl -+++ systemd-218/shell-completion/bash/timedatectl +--- systemd.orig/shell-completion/bash/timedatectl ++++ systemd/shell-completion/bash/timedatectl @@ -30,6 +30,10 @@ _timedatectl() { local OPTS='-h --help --version --adjust-system-clock --no-pager - --no-ask-password -H --host' + --no-ask-password -H --host --machine' + if __contains_word ">" ${COMP_WORDS[*]:0:COMP_CWORD}; then + return 0 @@ -249,10 +249,10 @@ Index: systemd-218/shell-completion/bash/timedatectl -complete -F _timedatectl timedatectl +complete -o default -o bashdefault -F _timedatectl timedatectl -Index: systemd-218/shell-completion/bash/udevadm +Index: systemd/shell-completion/bash/udevadm =================================================================== ---- systemd-218.orig/shell-completion/bash/udevadm -+++ systemd-218/shell-completion/bash/udevadm +--- systemd.orig/shell-completion/bash/udevadm ++++ systemd/shell-completion/bash/udevadm @@ -36,6 +36,10 @@ _udevadm() { local verbs=(info trigger settle control monitor hwdb test-builtin test) diff --git a/1005-create-default-links-for-primary-cd_dvd-drive.patch b/1005-create-default-links-for-primary-cd_dvd-drive.patch index e70b5758..85abb1f7 100644 --- a/1005-create-default-links-for-primary-cd_dvd-drive.patch +++ b/1005-create-default-links-for-primary-cd_dvd-drive.patch @@ -4,14 +4,16 @@ Subject: create default links for primary cd_dvd drive cdrom_id: created links for the default cd/dvd drive (bnc#783054). --- - rules/60-cdrom_id.rules | 5 ++++- + rules/60-cdrom_id.rules | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) ---- systemd-206.orig/rules/60-cdrom_id.rules -+++ systemd-206/rules/60-cdrom_id.rules -@@ -15,6 +15,9 @@ ENV{DISK_EJECT_REQUEST}=="?*", RUN+="cdr - # enable the receiving of media eject button events - IMPORT{program}="cdrom_id --lock-media $devnode" +Index: systemd/rules/60-cdrom_id.rules +=================================================================== +--- systemd.orig/rules/60-cdrom_id.rules ++++ systemd/rules/60-cdrom_id.rules +@@ -20,6 +20,9 @@ IMPORT{program}="cdrom_id --lock-media $ + # stale mounts after ejecting + ENV{DISK_MEDIA_CHANGE}=="?*", ENV{ID_CDROM_MEDIA}!="?*", ENV{SYSTEMD_READY}="0" -KERNEL=="sr0", SYMLINK+="cdrom", OPTIONS+="link_priority=-100" +KERNEL=="sr0", ENV{ID_CDROM}=="1", SYMLINK+="cdrom", OPTIONS+="link_priority=-100" diff --git a/1066-udev-add-compatibility-links-for-truncated-by-id-links.patch b/1066-udev-add-compatibility-links-for-truncated-by-id-links.patch index cd20f086..e08ad9f8 100644 --- a/1066-udev-add-compatibility-links-for-truncated-by-id-links.patch +++ b/1066-udev-add-compatibility-links-for-truncated-by-id-links.patch @@ -18,10 +18,10 @@ Signed-off-by: Jeff Mahoney src/udev/scsi_id/scsi_serial.c | 19 +++++++++++++------ 4 files changed, 32 insertions(+), 7 deletions(-) -Index: systemd-218/rules/60-persistent-storage.rules +Index: systemd/rules/60-persistent-storage.rules =================================================================== ---- systemd-218.orig/rules/60-persistent-storage.rules -+++ systemd-218/rules/60-persistent-storage.rules +--- systemd.orig/rules/60-persistent-storage.rules ++++ systemd/rules/60-persistent-storage.rules @@ -46,6 +46,10 @@ KERNEL=="sd*|cciss*", ENV{DEVTYPE}=="par KERNEL=="sd*[!0-9]", ENV{ID_BUS}=="ata", PROGRAM="scsi_id --whitelisted --replace-whitespace -p0x80 -d $devnode", RESULT=="?*", ENV{ID_SCSI_COMPAT}="$result", SYMLINK+="disk/by-id/scsi-$env{ID_SCSI_COMPAT}" KERNEL=="sd*[0-9]", ENV{ID_SCSI_COMPAT}=="?*", SYMLINK+="disk/by-id/scsi-$env{ID_SCSI_COMPAT}-part%n" @@ -33,10 +33,10 @@ Index: systemd-218/rules/60-persistent-storage.rules # firewire KERNEL=="sd*[!0-9]|sr*", ATTRS{ieee1394_id}=="?*", SYMLINK+="disk/by-id/ieee1394-$attr{ieee1394_id}" KERNEL=="sd*[0-9]", ATTRS{ieee1394_id}=="?*", SYMLINK+="disk/by-id/ieee1394-$attr{ieee1394_id}-part%n" -Index: systemd-218/src/udev/scsi_id/scsi_id.c +Index: systemd/src/udev/scsi_id/scsi_id.c =================================================================== ---- systemd-218.orig/src/udev/scsi_id/scsi_id.c -+++ systemd-218/src/udev/scsi_id/scsi_id.c +--- systemd.orig/src/udev/scsi_id/scsi_id.c ++++ systemd/src/udev/scsi_id/scsi_id.c @@ -43,6 +43,7 @@ static const struct option options[] = { { "replace-whitespace", no_argument, NULL, 'u' }, { "sg-version", required_argument, NULL, 's' }, @@ -53,15 +53,15 @@ Index: systemd-218/src/udev/scsi_id/scsi_id.c static bool reformat_serial = false; static bool export = false; static char vendor_str[64]; -@@ -313,6 +315,7 @@ static void help(void) { - " -g,--whitelisted treat device as whitelisted\n" - " -u,--replace-whitespace replace all whitespace by underscores\n" - " -v,--verbose verbose logging\n" +@@ -316,6 +318,7 @@ static void help(void) { + " -g --whitelisted Treat device as whitelisted\n" + " -u --replace-whitespace Replace all whitespace by underscores\n" + " -v --verbose Verbose logging\n" + " --truncated-serial truncated serial for compatibility with systems configured with by-id links created by udev < 184\n" - " --version print version\n" - " -x,--export print values as environment keys\n" - " -h,--help print this help text\n\n"); -@@ -385,6 +388,10 @@ static int set_options(struct udev *udev + " -x --export Print values as environment keys\n" + , program_invocation_short_name); + +@@ -387,6 +390,10 @@ static int set_options(struct udev *udev log_open(); break; @@ -72,7 +72,7 @@ Index: systemd-218/src/udev/scsi_id/scsi_id.c case 'V': printf("%s\n", VERSION); exit(0); -@@ -526,6 +533,9 @@ static int scsi_id(struct udev *udev, ch +@@ -528,6 +535,9 @@ static int scsi_id(struct udev *udev, ch util_replace_whitespace(dev_scsi.serial, serial_str, sizeof(serial_str)); util_replace_chars(serial_str, NULL); printf("ID_SERIAL=%s\n", serial_str); @@ -82,7 +82,7 @@ Index: systemd-218/src/udev/scsi_id/scsi_id.c util_replace_whitespace(dev_scsi.serial_short, serial_str, sizeof(serial_str)); util_replace_chars(serial_str, NULL); printf("ID_SERIAL_SHORT=%s\n", serial_str); -@@ -556,7 +566,10 @@ static int scsi_id(struct udev *udev, ch +@@ -558,7 +568,10 @@ static int scsi_id(struct udev *udev, ch if (reformat_serial) { char serial_str[MAX_SERIAL_LEN]; @@ -94,10 +94,10 @@ Index: systemd-218/src/udev/scsi_id/scsi_id.c util_replace_chars(serial_str, NULL); printf("%s\n", serial_str); goto out; -Index: systemd-218/src/udev/scsi_id/scsi_id.h +Index: systemd/src/udev/scsi_id/scsi_id.h =================================================================== ---- systemd-218.orig/src/udev/scsi_id/scsi_id.h -+++ systemd-218/src/udev/scsi_id/scsi_id.h +--- systemd.orig/src/udev/scsi_id/scsi_id.h ++++ systemd/src/udev/scsi_id/scsi_id.h @@ -43,6 +43,7 @@ struct scsi_id_device { char kernel[64]; char serial[MAX_SERIAL_LEN]; @@ -106,10 +106,10 @@ Index: systemd-218/src/udev/scsi_id/scsi_id.h int use_sg; /* Always from page 0x80 e.g. 'B3G1P8500RWT' - may not be unique */ -Index: systemd-218/src/udev/scsi_id/scsi_serial.c +Index: systemd/src/udev/scsi_id/scsi_serial.c =================================================================== ---- systemd-218.orig/src/udev/scsi_id/scsi_serial.c -+++ systemd-218/src/udev/scsi_id/scsi_serial.c +--- systemd.orig/src/udev/scsi_id/scsi_serial.c ++++ systemd/src/udev/scsi_id/scsi_serial.c @@ -96,7 +96,8 @@ static const char hex_str[]="0123456789a static int do_scsi_page80_inquiry(struct udev *udev, diff --git a/1095-set-ssd-disk-to-use-deadline-scheduler.patch b/1095-set-ssd-disk-to-use-deadline-scheduler.patch index 39c4a74a..d9d128f2 100644 --- a/1095-set-ssd-disk-to-use-deadline-scheduler.patch +++ b/1095-set-ssd-disk-to-use-deadline-scheduler.patch @@ -1,19 +1,24 @@ -Index: systemd-210/Makefile.am +--- + Makefile.am | 1 + + rules/60-ssd-scheduler.rules | 11 +++++++++++ + 2 files changed, 12 insertions(+) + +Index: systemd/Makefile.am =================================================================== ---- systemd-210.orig/Makefile.am -+++ systemd-210/Makefile.am -@@ -2546,6 +2546,7 @@ dist_udevrules_DATA += \ +--- systemd.orig/Makefile.am ++++ systemd/Makefile.am +@@ -3576,6 +3576,7 @@ dist_udevrules_DATA += \ rules/60-persistent-input.rules \ rules/60-persistent-alsa.rules \ rules/60-persistent-storage.rules \ + rules/60-ssd-scheduler.rules \ rules/64-btrfs.rules \ - rules/75-net-description.rules \ - rules/75-tty-description.rules \ -Index: systemd-210/rules/60-ssd-scheduler.rules + rules/70-mouse.rules \ + rules/70-touchpad.rules \ +Index: systemd/rules/60-ssd-scheduler.rules =================================================================== --- /dev/null -+++ systemd-210/rules/60-ssd-scheduler.rules ++++ systemd/rules/60-ssd-scheduler.rules @@ -0,0 +1,11 @@ +# do not edit this file, it will be overwritten on update + diff --git a/1096-new-udev-root-symlink-generator.patch b/1096-new-udev-root-symlink-generator.patch index 2dd043f7..7f09f46e 100644 --- a/1096-new-udev-root-symlink-generator.patch +++ b/1096-new-udev-root-symlink-generator.patch @@ -1,16 +1,16 @@ --- - Makefile.am | 19 ++++ - src/udev/rootsymlink_generator/rootsymlink_generator.c | 65 +++++++++++++++++ + Makefile.am | 19 +++++ + src/udev/rootsymlink_generator/rootsymlink_generator.c | 57 +++++++++++++++++ units/systemd-udev-root-symlink.service | 10 ++ units/systemd-udev-root-symlink.service.in | 10 ++ - 4 files changed, 104 insertions(+) + 4 files changed, 96 insertions(+) -Index: systemd-218/Makefile.am +Index: systemd/Makefile.am =================================================================== ---- systemd-218.orig/Makefile.am -+++ systemd-218/Makefile.am -@@ -3660,6 +3660,25 @@ EXTRA_DIST += \ - test/rule-syntax-check.py +--- systemd.orig/Makefile.am ++++ systemd/Makefile.am +@@ -3862,6 +3862,25 @@ EXTRA_DIST += \ + # ------------------------------------------------------------------------------ +rootsymlink_generator_SOURCES = \ @@ -35,11 +35,11 @@ Index: systemd-218/Makefile.am ata_id_SOURCES = \ src/udev/ata_id/ata_id.c -Index: systemd-218/src/udev/rootsymlink_generator/rootsymlink_generator.c +Index: systemd/src/udev/rootsymlink_generator/rootsymlink_generator.c =================================================================== --- /dev/null -+++ systemd-218/src/udev/rootsymlink_generator/rootsymlink_generator.c -@@ -0,0 +1,65 @@ ++++ systemd/src/udev/rootsymlink_generator/rootsymlink_generator.c +@@ -0,0 +1,57 @@ +/* + * Copyright (C) 2014-2015 Robert Milasan + * @@ -73,42 +73,34 @@ Index: systemd-218/src/udev/rootsymlink_generator/rootsymlink_generator.c + +int main(void) +{ ++ char filename[BUFFER_SIZE], buf[BUFFER_SIZE]; + struct stat statbuf; ++ int fd; + -+ if (stat(_ROOTDEV_, &statbuf) != 0) ++ if (stat(_ROOTDEV_, &statbuf) < 0) + return 1; -+ -+ if (major(statbuf.st_dev) > 0) { -+ int fd = -1; -+ char filename[BUFFER_SIZE]; -+ -+ if (mkdir(_PATH_, 0755) != 0 && errno != EEXIST) -+ return errno; -+ -+ snprintf(filename, BUFFER_SIZE, "%s/%s", _PATH_, _FILE_); -+ -+ if ((fd = open(filename, O_CREAT|O_WRONLY|O_TRUNC, 0644)) == -1) -+ return errno; -+ else { -+ char buf[BUFFER_SIZE]; -+ -+ snprintf(buf, BUFFER_SIZE, "ACTION==\"add|change\", SUBSYSTEM==\"block\", ENV{MAJOR}==\"%d\", ENV{MINOR}==\"%d\", SYMLINK+=\"root\"\n", -+ major(statbuf.st_dev), minor(statbuf.st_dev)); -+ -+ if (write(fd, buf, strlen(buf)) == -1) -+ return errno; -+ -+ if (close(fd) == -1) -+ return errno; -+ } -+ } -+ ++ if (major(statbuf.st_dev) <= 0) ++ return 0; ++ if (mkdir(_PATH_, 0755) < 0 && errno != EEXIST) ++ return errno; ++ snprintf(filename, BUFFER_SIZE, "%s/%s", _PATH_, _FILE_); ++ fd = open(filename, O_CREAT | O_WRONLY | O_TRUNC, 0644); ++ if (fd < 0) ++ return errno; ++ snprintf(buf, BUFFER_SIZE, ++ "ACTION==\"add|change\", SUBSYSTEM==\"block\", " ++ "ENV{MAJOR}==\"%d\", ENV{MINOR}==\"%d\", SYMLINK+=\"root\"\n", ++ major(statbuf.st_dev), minor(statbuf.st_dev)); ++ if (write(fd, buf, strlen(buf)) < 0) ++ return errno; ++ if (close(fd) < 0) ++ return errno; + return 0; +} -Index: systemd-218/units/systemd-udev-root-symlink.service +Index: systemd/units/systemd-udev-root-symlink.service =================================================================== --- /dev/null -+++ systemd-218/units/systemd-udev-root-symlink.service ++++ systemd/units/systemd-udev-root-symlink.service @@ -0,0 +1,10 @@ +[Unit] +Description=Rule generator for /dev/root symlink @@ -120,10 +112,10 @@ Index: systemd-218/units/systemd-udev-root-symlink.service +Type=oneshot +RemainAfterExit=yes +ExecStart=/usr/lib/udev/rootsymlink-generator -Index: systemd-218/units/systemd-udev-root-symlink.service.in +Index: systemd/units/systemd-udev-root-symlink.service.in =================================================================== --- /dev/null -+++ systemd-218/units/systemd-udev-root-symlink.service.in ++++ systemd/units/systemd-udev-root-symlink.service.in @@ -0,0 +1,10 @@ +[Unit] +Description=Rule generator for /dev/root symlink diff --git a/Forward-suspend-hibernate-calls-to-pm-utils.patch b/Forward-suspend-hibernate-calls-to-pm-utils.patch index 642eb4da..96de1ed2 100644 --- a/Forward-suspend-hibernate-calls-to-pm-utils.patch +++ b/Forward-suspend-hibernate-calls-to-pm-utils.patch @@ -7,10 +7,10 @@ forward suspend/hibernation calls to pm-utils, if installed (bnc#790157) src/sleep/sleep.c | 27 ++++++++++++++++++++++----- 1 file changed, 22 insertions(+), 5 deletions(-) -Index: systemd-218/src/sleep/sleep.c +Index: systemd/src/sleep/sleep.c =================================================================== ---- systemd-218.orig/src/sleep/sleep.c -+++ systemd-218/src/sleep/sleep.c +--- systemd.orig/src/sleep/sleep.c ++++ systemd/src/sleep/sleep.c @@ -24,6 +24,7 @@ #include #include @@ -39,7 +39,7 @@ Index: systemd-218/src/sleep/sleep.c return r; } -@@ -96,6 +95,8 @@ static int execute(char **modes, char ** +@@ -97,6 +96,8 @@ static int execute(char **modes, char ** int r; _cleanup_fclose_ FILE *f = NULL; @@ -48,15 +48,15 @@ Index: systemd-218/src/sleep/sleep.c /* This file is opened first, so that if we hit an error, * we can abort before modifying any state. */ f = fopen("/sys/power/state", "we"); -@@ -106,6 +107,7 @@ static int execute(char **modes, char ** +@@ -107,6 +108,7 @@ static int execute(char **modes, char ** r = write_mode(modes); if (r < 0) return r; + } - execute_directory(SYSTEM_SLEEP_PATH, NULL, DEFAULT_TIMEOUT_USEC, arguments); + execute_directories(dirs, DEFAULT_TIMEOUT_USEC, arguments); -@@ -114,8 +116,10 @@ static int execute(char **modes, char ** +@@ -115,8 +117,10 @@ static int execute(char **modes, char ** LOG_MESSAGE("Suspending system..."), "SLEEP=%s", arg_verb, NULL); @@ -68,7 +68,7 @@ Index: systemd-218/src/sleep/sleep.c if (r < 0) return r; -@@ -155,6 +159,7 @@ static int parse_argv(int argc, char *ar +@@ -156,6 +160,7 @@ static int parse_argv(int argc, char *ar }; int c; @@ -76,7 +76,7 @@ Index: systemd-218/src/sleep/sleep.c assert(argc >= 0); assert(argv); -@@ -192,6 +197,18 @@ static int parse_argv(int argc, char *ar +@@ -193,6 +198,18 @@ static int parse_argv(int argc, char *ar return -EINVAL; } diff --git a/insserv-generator.patch b/insserv-generator.patch index d58a6987..11a86544 100644 --- a/insserv-generator.patch +++ b/insserv-generator.patch @@ -13,10 +13,10 @@ systemd unit drop-in files to add dependencies create mode 100644 src/insserv-generator/Makefile create mode 100644 src/insserv-generator/insserv-generator.c -Index: systemd-218/Makefile.am +Index: systemd/Makefile.am =================================================================== ---- systemd-218.orig/Makefile.am -+++ systemd-218/Makefile.am +--- systemd.orig/Makefile.am ++++ systemd/Makefile.am @@ -399,6 +399,7 @@ rootlibexec_PROGRAMS += \ endif @@ -25,7 +25,7 @@ Index: systemd-218/Makefile.am systemd-getty-generator \ systemd-fstab-generator \ systemd-system-update-generator \ -@@ -2286,6 +2287,14 @@ systemd_delta_LDADD = \ +@@ -2328,6 +2329,14 @@ systemd_delta_LDADD = \ libsystemd-shared.la # ------------------------------------------------------------------------------ @@ -40,10 +40,10 @@ Index: systemd-218/Makefile.am systemd_getty_generator_SOURCES = \ src/getty-generator/getty-generator.c -Index: systemd-218/src/insserv-generator/Makefile +Index: systemd/src/insserv-generator/Makefile =================================================================== --- /dev/null -+++ systemd-218/src/insserv-generator/Makefile ++++ systemd/src/insserv-generator/Makefile @@ -0,0 +1,28 @@ +# This file is part of systemd. +# @@ -73,10 +73,10 @@ Index: systemd-218/src/insserv-generator/Makefile + $(MAKE) -C .. clean + +.PHONY: all clean -Index: systemd-218/src/insserv-generator/insserv-generator.c +Index: systemd/src/insserv-generator/insserv-generator.c =================================================================== --- /dev/null -+++ systemd-218/src/insserv-generator/insserv-generator.c ++++ systemd/src/insserv-generator/insserv-generator.c @@ -0,0 +1,312 @@ +/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/ + @@ -354,7 +354,7 @@ Index: systemd-218/src/insserv-generator/insserv-generator.c + + while ((de = readdir(d))) { + char *path = NULL; -+ if (ignore_file(de->d_name)) ++ if (hidden_file(de->d_name)) + continue; + + path = strjoin("/etc/insserv.conf.d/", de->d_name, NULL); diff --git a/journald-advice-about-use-of-memory.patch b/journald-advice-about-use-of-memory.patch index 96a0ce63..4caf994f 100644 --- a/journald-advice-about-use-of-memory.patch +++ b/journald-advice-about-use-of-memory.patch @@ -1,143 +1,135 @@ ---- - src/journal/catalog.c | 18 +++++++++++++++++- - src/journal/journal-authenticate.c | 4 ++-- - src/journal/journal-file.c | 2 +- - src/journal/journald-kmsg.c | 2 +- - src/journal/mmap-cache.c | 22 +++++++++++++++++++++- - 5 files changed, 42 insertions(+), 6 deletions(-) +From: werner@suse.de +Upstream: marked as openSUSE-specific fix originally, but may well + worth be to be sent upstream. -Index: systemd-218/src/journal/catalog.c +Original description: + (none) + +Notes [jengelh@inai.de]: +MAP_NONBLOCK is documented (mmap(2) in man-pages-3.69+) to render +MAP_POPULATE ineffective. Why do we have it? +What is the rationale for MAP_STACK? +--- + src/journal/catalog.c | 12 +++++++++++- + src/journal/journal-authenticate.c | 7 +++++-- + src/journal/journald-kmsg.c | 3 ++- + src/journal/mmap-cache.c | 16 +++++++++++++++- + 4 files changed, 33 insertions(+), 5 deletions(-) + +Index: systemd/src/journal/catalog.c =================================================================== ---- systemd-218.orig/src/journal/catalog.c -+++ systemd-218/src/journal/catalog.c -@@ -471,9 +471,19 @@ finish: +--- systemd.orig/src/journal/catalog.c ++++ systemd/src/journal/catalog.c +@@ -470,6 +470,10 @@ finish: static int open_mmap(const char *database, int *_fd, struct stat *_st, void **_p) { const CatalogHeader *h; -+ static const struct { -+ const int index; -+ int advise; -+ } advises[] = { -+ {0,MADV_WILLNEED}, -+ {1,MADV_SEQUENTIAL}, -+ {2,MADV_DONTDUMP}, -+ {3,MADV_DONTFORK} -+ }; ++ static const unsigned int advice[] = ++ {MADV_WILLNEED, MADV_SEQUENTIAL, MADV_DONTDUMP, MADV_DONTFORK}; ++ unsigned int n; ++ size_t psize; int fd; void *p; struct stat st; -+ size_t psize; - - assert(_fd); - assert(_st); -@@ -493,11 +503,17 @@ static int open_mmap(const char *databas +@@ -492,12 +496,18 @@ static int open_mmap(const char *databas return -EINVAL; } - p = mmap(NULL, PAGE_ALIGN(st.st_size), PROT_READ, MAP_SHARED, fd, 0); + psize = PAGE_ALIGN(st.st_size); -+ p = mmap(NULL, psize, PROT_READ, MAP_SHARED|MAP_POPULATE|MAP_NONBLOCK, fd, 0); ++ p = mmap(NULL, psize, PROT_READ, MAP_SHARED | MAP_POPULATE | ++ MAP_NONBLOCK, fd, 0); if (p == MAP_FAILED) { safe_close(fd); return -errno; } -+ for (size_t n = 0; n < sizeof(advises) / sizeof(*advises); ++n) { -+ int r = madvise(p, psize, advises[n].advise); -+ if (r < 0) -+ log_warning("Failed to give advice about use of memory: %m"); -+ } ++ for (n = 0; n < sizeof(advice) / sizeof(*advice); ++n) ++ if (madvise(p, psize, advice[n]) < 0) ++ log_warning("Failed to give advice about use of memory: %m"); ++ h = p; if (memcmp(h->signature, CATALOG_SIGNATURE, sizeof(h->signature)) != 0 || -Index: systemd-218/src/journal/journal-authenticate.c + le64toh(h->header_size) < sizeof(CatalogHeader) || +Index: systemd/src/journal/journal-authenticate.c =================================================================== ---- systemd-218.orig/src/journal/journal-authenticate.c -+++ systemd-218/src/journal/journal-authenticate.c -@@ -355,7 +355,7 @@ int journal_file_fss_load(JournalFile *f +--- systemd.orig/src/journal/journal-authenticate.c ++++ systemd/src/journal/journal-authenticate.c +@@ -355,7 +355,8 @@ int journal_file_fss_load(JournalFile *f goto finish; } - m = mmap(NULL, PAGE_ALIGN(sizeof(FSSHeader)), PROT_READ, MAP_SHARED, fd, 0); -+ m = mmap(NULL, PAGE_ALIGN(sizeof(FSSHeader)), PROT_READ, MAP_SHARED|MAP_STACK, fd, 0); ++ m = mmap(NULL, PAGE_ALIGN(sizeof(FSSHeader)), PROT_READ, ++ MAP_SHARED | MAP_STACK, fd, 0); if (m == MAP_FAILED) { m = NULL; r = -errno; -@@ -399,7 +399,7 @@ int journal_file_fss_load(JournalFile *f +@@ -399,7 +400,9 @@ int journal_file_fss_load(JournalFile *f goto finish; } - f->fss_file = mmap(NULL, PAGE_ALIGN(f->fss_file_size), PROT_READ|PROT_WRITE, MAP_SHARED, fd, 0); -+ f->fss_file = mmap(NULL, PAGE_ALIGN(f->fss_file_size), PROT_READ|PROT_WRITE, MAP_SHARED|MAP_STACK, fd, 0); ++ f->fss_file = mmap(NULL, PAGE_ALIGN(f->fss_file_size), ++ PROT_READ | PROT_WRITE, MAP_SHARED | MAP_STACK, ++ fd, 0); if (f->fss_file == MAP_FAILED) { f->fss_file = NULL; r = -errno; -Index: systemd-218/src/journal/journal-file.c +Index: systemd/src/journal/journald-kmsg.c =================================================================== ---- systemd-218.orig/src/journal/journal-file.c -+++ systemd-218/src/journal/journal-file.c -@@ -2559,7 +2559,7 @@ int journal_file_open( - goto fail; - } - -- f->header = mmap(NULL, PAGE_ALIGN(sizeof(Header)), prot_from_flags(flags), MAP_SHARED, f->fd, 0); -+ f->header = mmap(NULL, PAGE_ALIGN(sizeof(Header)), prot_from_flags(flags), MAP_SHARED|MAP_STACK, f->fd, 0); - if (f->header == MAP_FAILED) { - f->header = NULL; - r = -errno; -Index: systemd-218/src/journal/journald-kmsg.c -=================================================================== ---- systemd-218.orig/src/journal/journald-kmsg.c -+++ systemd-218/src/journal/journald-kmsg.c -@@ -455,7 +455,7 @@ int server_open_kernel_seqnum(Server *s) +--- systemd.orig/src/journal/journald-kmsg.c ++++ systemd/src/journal/journald-kmsg.c +@@ -454,7 +454,8 @@ int server_open_kernel_seqnum(Server *s) return 0; } - p = mmap(NULL, sizeof(uint64_t), PROT_READ|PROT_WRITE, MAP_SHARED, fd, 0); -+ p = mmap(NULL, sizeof(uint64_t), PROT_READ|PROT_WRITE, MAP_SHARED|MAP_STACK, fd, 0); ++ p = mmap(NULL, sizeof(uint64_t), PROT_READ | PROT_WRITE, ++ MAP_SHARED | MAP_STACK, fd, 0); if (p == MAP_FAILED) { log_error_errno(errno, "Failed to map sequential number file, ignoring: %m"); return 0; -Index: systemd-218/src/journal/mmap-cache.c +Index: systemd/src/journal/mmap-cache.c =================================================================== ---- systemd-218.orig/src/journal/mmap-cache.c -+++ systemd-218/src/journal/mmap-cache.c -@@ -446,6 +446,15 @@ static int add_mmap( - void **ret, - void **release_cookie) { +--- systemd.orig/src/journal/mmap-cache.c ++++ systemd/src/journal/mmap-cache.c +@@ -467,11 +467,14 @@ static int add_mmap( + struct stat *st, + void **ret) { -+ static const struct { -+ const int index; -+ int vise; -+ } ad[] = { -+ {0, MADV_WILLNEED}, -+ {1, MADV_SEQUENTIAL}, -+ {2, MADV_DONTDUMP}, -+ {3, MADV_DONTFORK} -+ }; ++ static const unsigned int advice[] = ++ {MADV_WILLNEED, MADV_SEQUENTIAL, MADV_DONTDUMP, MADV_DONTFORK}; uint64_t woffset, wsize; Context *c; FileDescriptor *f; -@@ -488,7 +497,7 @@ static int add_mmap( + Window *w; + void *d; ++ unsigned int n; + int r; + + assert(m); +@@ -510,7 +513,8 @@ static int add_mmap( } for (;;) { - d = mmap(NULL, wsize, prot, MAP_SHARED, fd, woffset); -+ d = mmap(NULL, wsize, prot, MAP_SHARED|MAP_POPULATE|MAP_NONBLOCK, fd, woffset); ++ d = mmap(NULL, wsize, prot, MAP_SHARED | MAP_POPULATE | ++ MAP_NONBLOCK, fd, woffset); if (d != MAP_FAILED) break; if (errno != ENOMEM) -@@ -501,6 +510,17 @@ static int add_mmap( +@@ -523,6 +527,16 @@ static int add_mmap( return -ENOMEM; } -+ for (size_t n = 0; n < sizeof(ad) / sizeof(*ad); ++n) { -+ if (ad[n].vise == MADV_DONTFORK) { ++ for (n = 0; n < sizeof(advice) / sizeof(*advice); ++n) { ++ if (advice[n] == MADV_DONTFORK) { + int flags = fcntl(fd, F_GETFD); + if (flags < 0 || !(flags & FD_CLOEXEC)) + continue; + } -+ r = madvise(d, wsize, ad[n].vise); -+ if (r < 0) ++ if (madvise(d, wsize, advice[n]) < 0) + log_warning("Failed to give advice about use of memory: %m"); + } + diff --git a/kbd-model-map.patch b/kbd-model-map.patch index 743a67b2..b7327892 100644 --- a/kbd-model-map.patch +++ b/kbd-model-map.patch @@ -1,13 +1,18 @@ +From: werner@suse.de +Date: Tue Jan 20 11:33:59 UTC 2015 + --- src/locale/kbd-model-map | 13 +++++++++++++ 1 file changed, 13 insertions(+) ---- src/locale/kbd-model-map -+++ src/locale/kbd-model-map 2015-01-20 11:31:38.357518811 +0000 -@@ -63,3 +63,16 @@ by by,us pc105 - terminate:ctrl_alt_ - il il pc105 - terminate:ctrl_alt_bksp - kazakh kz,us pc105 - terminate:ctrl_alt_bksp,grp:shifts_toggle,grp_led:scroll +Index: systemd/src/locale/kbd-model-map +=================================================================== +--- systemd.orig/src/locale/kbd-model-map ++++ systemd/src/locale/kbd-model-map +@@ -66,3 +66,16 @@ lt.baltic lt pc105 - terminate:ctrl_a + lt.l4 lt pc105 - terminate:ctrl_alt_bksp lt lt pc105 - terminate:ctrl_alt_bksp + khmer kh,us pc105 - terminate:ctrl_alt_bksp +# Additional layouts offered by YaST +Pl02 pl pc105 - terminate:ctrl_alt_bksp +arabic ara,us pc105 - terminate:ctrl_alt_bksp,grp:shift_toggle diff --git a/let-linker-find-libudev-for-libdevmapper.patch b/let-linker-find-libudev-for-libdevmapper.patch index 5e908024..4879c708 100644 --- a/let-linker-find-libudev-for-libdevmapper.patch +++ b/let-linker-find-libudev-for-libdevmapper.patch @@ -1,14 +1,13 @@ --- Makefile.am | 4 ++++ - Makefile.in | 2 +- configure.ac | 4 ---- - 3 files changed, 5 insertions(+), 5 deletions(-) + 2 files changed, 4 insertions(+), 4 deletions(-) -Index: systemd-218/Makefile.am +Index: systemd/Makefile.am =================================================================== ---- systemd-218.orig/Makefile.am -+++ systemd-218/Makefile.am -@@ -4695,6 +4695,10 @@ systemd_cryptsetup_CFLAGS = \ +--- systemd.orig/Makefile.am ++++ systemd/Makefile.am +@@ -4789,6 +4789,10 @@ systemd_cryptsetup_CFLAGS = \ $(AM_CFLAGS) \ $(LIBCRYPTSETUP_CFLAGS) @@ -19,23 +18,10 @@ Index: systemd-218/Makefile.am systemd_cryptsetup_LDADD = \ libsystemd-label.la \ libudev-internal.la \ -Index: systemd-218/Makefile.in +Index: systemd/configure.ac =================================================================== ---- systemd-218.orig/Makefile.in -+++ systemd-218/Makefile.in -@@ -11109,7 +11109,7 @@ src/cryptsetup/systemd_cryptsetup-crypts - - systemd-cryptsetup$(EXEEXT): $(systemd_cryptsetup_OBJECTS) $(systemd_cryptsetup_DEPENDENCIES) $(EXTRA_systemd_cryptsetup_DEPENDENCIES) - @rm -f systemd-cryptsetup$(EXEEXT) -- $(AM_V_CCLD)$(systemd_cryptsetup_LINK) $(systemd_cryptsetup_OBJECTS) $(systemd_cryptsetup_LDADD) $(LIBS) -+ $(AM_V_CCLD)$(systemd_cryptsetup_LINK) $(systemd_cryptsetup_OBJECTS) $(systemd_cryptsetup_LDFLAGS) $(systemd_cryptsetup_LDADD) $(LIBS) - src/cryptsetup/cryptsetup-generator.$(OBJEXT): \ - src/cryptsetup/$(am__dirstamp) \ - src/cryptsetup/$(DEPDIR)/$(am__dirstamp) -Index: systemd-218/configure.ac -=================================================================== ---- systemd-218.orig/configure.ac -+++ systemd-218/configure.ac +--- systemd.orig/configure.ac ++++ systemd/configure.ac @@ -206,10 +206,6 @@ AS_CASE([$CC], [*clang*], -Wno-gnu-variable-sized-type-not-at-end \ ])]) diff --git a/parse-crypttab-for-noauto-option.patch b/parse-crypttab-for-noauto-option.patch index a0b85a83..4226b51c 100644 --- a/parse-crypttab-for-noauto-option.patch +++ b/parse-crypttab-for-noauto-option.patch @@ -1,12 +1,12 @@ --- - src/fstab-generator/fstab-generator.c | 46 +++++++++++++++++++++++++++++++++- - 1 file changed, 45 insertions(+), 1 deletion(-) + src/fstab-generator/fstab-generator.c | 45 +++++++++++++++++++++++++++++++++- + 1 file changed, 44 insertions(+), 1 deletion(-) -Index: systemd-218/src/fstab-generator/fstab-generator.c +Index: systemd/src/fstab-generator/fstab-generator.c =================================================================== ---- systemd-218.orig/src/fstab-generator/fstab-generator.c -+++ systemd-218/src/fstab-generator/fstab-generator.c -@@ -47,6 +47,50 @@ static char *arg_usr_what = NULL; +--- systemd.orig/src/fstab-generator/fstab-generator.c ++++ systemd/src/fstab-generator/fstab-generator.c +@@ -48,6 +48,49 @@ static char *arg_usr_what = NULL; static char *arg_usr_fstype = NULL; static char *arg_usr_options = NULL; @@ -53,11 +53,10 @@ Index: systemd-218/src/fstab-generator/fstab-generator.c + return 1; +} + -+ - static int mount_find_pri(struct mntent *me, int *ret) { - char *end, *opt; - unsigned long r; -@@ -141,7 +185,7 @@ static int add_swap( + static int add_swap( + const char *what, + struct mntent *me, +@@ -118,7 +161,7 @@ static int add_swap( if (r < 0) return r; diff --git a/plymouth-quit-and-wait-for-emergency-service.patch b/plymouth-quit-and-wait-for-emergency-service.patch index dcfc1769..242a05d1 100644 --- a/plymouth-quit-and-wait-for-emergency-service.patch +++ b/plymouth-quit-and-wait-for-emergency-service.patch @@ -4,23 +4,23 @@ units/rescue.service.in | 3 ++- 3 files changed, 6 insertions(+), 2 deletions(-) -Index: systemd-218/units/console-shell.service.m4.in +Index: systemd/units/console-shell.service.m4.in =================================================================== ---- systemd-218.orig/units/console-shell.service.m4.in -+++ systemd-218/units/console-shell.service.m4.in +--- systemd.orig/units/console-shell.service.m4.in ++++ systemd/units/console-shell.service.m4.in @@ -17,6 +17,8 @@ Before=getty.target [Service] Environment=HOME=/root WorkingDirectory=/root +ExecStartPre=-/usr/bin/plymouth quit +ExecStartPre=-/usr/bin/plymouth --wait - ExecStart=-/usr/sbin/sulogin + ExecStart=-@SULOGIN@ ExecStopPost=-@SYSTEMCTL@ poweroff Type=idle -Index: systemd-218/units/emergency.service.in +Index: systemd/units/emergency.service.in =================================================================== ---- systemd-218.orig/units/emergency.service.in -+++ systemd-218/units/emergency.service.in +--- systemd.orig/units/emergency.service.in ++++ systemd/units/emergency.service.in @@ -17,7 +17,8 @@ Before=shutdown.target [Service] Environment=HOME=/root @@ -29,12 +29,12 @@ Index: systemd-218/units/emergency.service.in +ExecStartPre=-/usr/bin/plymouth quit +ExecStartPre=-/usr/bin/plymouth --wait ExecStartPre=-/bin/echo -e 'Welcome to emergency mode! After logging in, type "journalctl -xb" to view\\nsystem logs, "systemctl reboot" to reboot, "systemctl default" or ^D to\\ntry again to boot into default mode.' - ExecStart=-/bin/sh -c "/usr/sbin/sulogin; @SYSTEMCTL@ --fail --no-block default" + ExecStart=-/bin/sh -c "@SULOGIN@; @SYSTEMCTL@ --fail --no-block default" Type=idle -Index: systemd-218/units/rescue.service.in +Index: systemd/units/rescue.service.in =================================================================== ---- systemd-218.orig/units/rescue.service.in -+++ systemd-218/units/rescue.service.in +--- systemd.orig/units/rescue.service.in ++++ systemd/units/rescue.service.in @@ -16,7 +16,8 @@ Before=shutdown.target [Service] Environment=HOME=/root @@ -43,5 +43,5 @@ Index: systemd-218/units/rescue.service.in +ExecStartPre=-/usr/bin/plymouth quit +ExecStartPre=-/usr/bin/plymouth --wait ExecStartPre=-/bin/echo -e 'Welcome to emergency mode! After logging in, type "journalctl -xb" to view\\nsystem logs, "systemctl reboot" to reboot, "systemctl default" or ^D to\\nboot into default mode.' - ExecStart=-/bin/sh -c "/usr/sbin/sulogin; @SYSTEMCTL@ --fail --no-block default" + ExecStart=-/bin/sh -c "@SULOGIN@; @SYSTEMCTL@ --fail --no-block default" Type=idle diff --git a/systemctl-set-default-target.patch b/systemctl-set-default-target.patch index 3ff87af3..86aec7e9 100644 --- a/systemctl-set-default-target.patch +++ b/systemctl-set-default-target.patch @@ -6,11 +6,11 @@ This solves the bug bnc#868439 man/systemctl.xml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) -Index: systemd-218/man/systemctl.xml +Index: systemd/man/systemctl.xml =================================================================== ---- systemd-218.orig/man/systemctl.xml -+++ systemd-218/man/systemctl.xml -@@ -446,7 +446,7 @@ along with systemd; If not, see @@ -19,10 +19,10 @@ Index: systemd-218/man/systemctl.xml any existing conflicting symlinks. When used with halt, -@@ -1187,6 +1187,8 @@ kobject-uevent 1 systemd-udevd-kernel.so - - Set the default target to boot into. Command links - default.target to the given unit. +@@ -1215,6 +1215,8 @@ kobject-uevent 1 systemd-udevd-kernel.so + Return the default target to boot into. This returns + the target unit name default.target + is aliased (symlinked) to. + If combined with , override + an already existing symlink for the default target. diff --git a/systemd-218.g1050.tar.xz b/systemd-218.g1050.tar.xz new file mode 100644 index 00000000..fc7d5aa4 --- /dev/null +++ b/systemd-218.g1050.tar.xz @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b1bccbdd9b6832dafaed409ad0c8c076a7aaaf706615ecbb905d9def291b1cb0 +size 3358908 diff --git a/systemd-218.tar.xz b/systemd-218.tar.xz deleted file mode 100644 index 77bce3ee..00000000 --- a/systemd-218.tar.xz +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:1b0768b53b6c6d813a93a4b8fe1f80cf53561b09075010a97c7aa08eee3fd59b -size 3782276 diff --git a/systemd-add-user-keep.patch b/systemd-add-user-keep.patch index e948e8d8..8eb7f440 100644 --- a/systemd-add-user-keep.patch +++ b/systemd-add-user-keep.patch @@ -1,29 +1,27 @@ --- - man/tmpfiles.d.xml | 5 +++++ - src/tmpfiles/tmpfiles.c | 42 ++++++++++++++++++++++++++++++++++++++---- - 2 files changed, 43 insertions(+), 4 deletions(-) + man/tmpfiles.d.xml | 3 +++ + src/tmpfiles/tmpfiles.c | 48 ++++++++++++++++++++++++++++++++++++++++-------- + 2 files changed, 43 insertions(+), 8 deletions(-) -Index: systemd-218/man/tmpfiles.d.xml +Index: systemd/man/tmpfiles.d.xml =================================================================== ---- systemd-218.orig/man/tmpfiles.d.xml -+++ systemd-218/man/tmpfiles.d.xml -@@ -545,6 +545,11 @@ r! /tmp/.X[0-9]*-lock - and w may be used to - specify a short string that is written to the - file, suffixed by a newline. For -+ x, X, -+ a comma separated list of usernames. If given, -+ only paths belonging to these users will be -+ excluded during directory cleanup. -+ Ignored for all other lines. For - C, specifies the source file - or directory. For t determines - extended attributes to be set. Ignored for all other lines. -Index: systemd-218/src/tmpfiles/tmpfiles.c +--- systemd.orig/man/tmpfiles.d.xml ++++ systemd/man/tmpfiles.d.xml +@@ -489,6 +489,9 @@ + f, F, and + w may be used to specify a short string that + is written to the file, suffixed by a newline. For ++ x, X, a comma separated list of ++ usernames. If given, only paths belonging to these users will be excluded ++ during directory cleanup. Ignored for all other lines. For + C, specifies the source file or + directory. For t determines extended + attributes to be set. For a determines +Index: systemd/src/tmpfiles/tmpfiles.c =================================================================== ---- systemd-218.orig/src/tmpfiles/tmpfiles.c -+++ systemd-218/src/tmpfiles/tmpfiles.c -@@ -278,6 +278,7 @@ static int dir_cleanup( +--- systemd.orig/src/tmpfiles/tmpfiles.c ++++ systemd/src/tmpfiles/tmpfiles.c +@@ -345,6 +345,7 @@ static int dir_cleanup( struct timespec times[2]; bool deleted = false; int r = 0; @@ -31,52 +29,57 @@ Index: systemd-218/src/tmpfiles/tmpfiles.c while ((dent = readdir(d))) { struct stat s; -@@ -322,11 +323,44 @@ static int dir_cleanup( +@@ -395,14 +396,45 @@ static int dir_cleanup( } /* Is there an item configured for this path? */ -- if (hashmap_get(items, sub_path)) +- if (hashmap_get(items, sub_path)) { +- log_debug("Ignoring \"%s\": a separate entry exists.", sub_path); - continue; +- } +- +- if (find_glob(globs, sub_path)) { +- log_debug("Ignoring \"%s\": a separate glob exists.", sub_path); +- continue; ++ bool found_glob = false; + found = hashmap_get(items, sub_path); - -- if (find_glob(globs, sub_path)) -- continue; -+ if (!found) -+ found = find_glob(globs, sub_path); -+ -+ if (found) { -+ /* evaluate username arguments in ignore statements */ -+ if (found->type == IGNORE_PATH || found->type == IGNORE_DIRECTORY_PATH) { -+ if (!found->argument) { -+ continue; -+ } else { -+ struct passwd *pw; -+ char *userfound = NULL, *args = strdup(found->argument); -+ bool match = false; -+ uid_t uid = -1; -+ -+ while ((userfound = strsep(&args, ","))) { -+ pw = getpwnam(userfound); -+ -+ if (!pw) -+ log_error("Unknown user '%s' in ignore statement.", userfound); -+ else { -+ uid = pw->pw_uid; -+ if (s.st_uid == uid) { -+ match = true; -+ break; -+ } -+ } -+ } -+ if (match) { -+ found = NULL; -+ continue; -+ } -+ } -+ } else { -+ continue; -+ } ++ if (!found) { ++ found_glob = true; ++ found = find_glob(globs, sub_path); + } ++ if (found) { ++ struct passwd *pw; ++ char *userfound = NULL, *args; ++ bool match = false; ++ uid_t uid = -1; ++ ++ /* evaluate username arguments in ignore statements */ ++ if ((found->type != IGNORE_PATH && found->type != IGNORE_DIRECTORY_PATH) || ++ !found->argument) { ++ if (found_glob) ++ log_debug("Ignoring \"%s\": a separate glob exists.", sub_path); ++ else ++ log_debug("Ignoring \"%s\": a separate entry exists.", sub_path); ++ continue; ++ } ++ args = strdup(found->argument); ++ assert_se(args != NULL); ++ while ((userfound = strsep(&args, ",")) != NULL) { ++ pw = getpwnam(userfound); ++ if (pw == NULL) { ++ log_error("Unknown user '%s' in ignore statement.", userfound); ++ continue; ++ } ++ uid = pw->pw_uid; ++ if (s.st_uid == uid) { ++ match = true; ++ break; ++ } ++ } ++ if (match) { ++ found = NULL; ++ continue; ++ } + } if (S_ISDIR(s.st_mode)) { - diff --git a/systemd-dbus-system-bus-address.patch b/systemd-dbus-system-bus-address.patch index 060c2e5c..89c83e42 100644 --- a/systemd-dbus-system-bus-address.patch +++ b/systemd-dbus-system-bus-address.patch @@ -3,12 +3,12 @@ src/shared/def.h | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) -Index: systemd-218/src/libsystemd/sd-bus/sd-bus.c +Index: systemd/src/libsystemd/sd-bus/sd-bus.c =================================================================== ---- systemd-218.orig/src/libsystemd/sd-bus/sd-bus.c -+++ systemd-218/src/libsystemd/sd-bus/sd-bus.c -@@ -791,8 +791,8 @@ static int parse_container_unix_address( - machine = NULL; +--- systemd.orig/src/libsystemd/sd-bus/sd-bus.c ++++ systemd/src/libsystemd/sd-bus/sd-bus.c +@@ -809,8 +809,8 @@ static int parse_container_unix_address( + b->nspid = 0; b->sockaddr.un.sun_family = AF_UNIX; - strncpy(b->sockaddr.un.sun_path, "/var/run/dbus/system_bus_socket", sizeof(b->sockaddr.un.sun_path)); @@ -18,10 +18,10 @@ Index: systemd-218/src/libsystemd/sd-bus/sd-bus.c return 0; } -Index: systemd-218/src/shared/def.h +Index: systemd/src/shared/def.h =================================================================== ---- systemd-218.orig/src/shared/def.h -+++ systemd-218/src/shared/def.h +--- systemd.orig/src/shared/def.h ++++ systemd/src/shared/def.h @@ -61,7 +61,7 @@ "/usr/lib/kbd/keymaps/\0" #endif diff --git a/systemd-mini.changes b/systemd-mini.changes index 52870bc4..9bd56623 100644 --- a/systemd-mini.changes +++ b/systemd-mini.changes @@ -1,3 +1,13 @@ +------------------------------------------------------------------- +Mon Feb 16 10:18:18 UTC 2015 - jengelh@inai.de + +- Update to systemd v218-1050-g38ab096 +- Remove patches + use-usr-sbin-sulogin-for-emergency-service.patch (upstream fixed it) +- Reinstate and improve (remove huge indents from) + tty-ask-password-agent-on-console.patch, + 0014-journald-with-journaling-FS.patch, rootsymlink_generator. + ------------------------------------------------------------------- Mon Feb 16 09:42:48 UTC 2015 - meissner@suse.com @@ -27,8 +37,6 @@ Fri Jan 9 18:48:28 UTC 2015 - jengelh@inai.de N=no longer applies to source nor is it deemed needed; K=killed: no longer applicable and too complex to resolve: ---- - G 0002-rfkill-rework-how-we-generate-file-names-from-rfkill.patch - G avoid-assertion-if-invalid-address-familily-is-passed-to-g.patch K service-flags-sysv-service-with-detected-pid-as-RemainAfte.patch K remain_after_exit-initscript-heuristic-and-add-new-LSB-hea.patch K handle-SYSTEMCTL_OPTIONS-environment-variable.patch diff --git a/systemd-mini.spec b/systemd-mini.spec index 3a618870..fe638ed6 100644 --- a/systemd-mini.spec +++ b/systemd-mini.spec @@ -1,7 +1,7 @@ # # spec file for package systemd-mini # -# Copyright (c) 2015 SUSE LINUX GmbH, Nuernberg, Germany. +# Copyright (c) 2015 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 @@ -44,7 +44,7 @@ Name: systemd-mini Url: http://www.freedesktop.org/wiki/Software/systemd -Version: 218 +Version: 218.g1050 Release: 0 Summary: A System and Session Manager License: LGPL-2.1+ @@ -55,14 +55,18 @@ Provides: %{real} = %{version}-%{release} BuildRequires: acl BuildRequires: audit-devel +BuildRequires: autoconf +BuildRequires: automake BuildRequires: fdupes BuildRequires: gperf +BuildRequires: gtk-doc BuildRequires: intltool BuildRequires: libacl-devel BuildRequires: libcap-devel BuildRequires: libkmod-devel BuildRequires: libsepol-devel BuildRequires: libtool +BuildRequires: libtool BuildRequires: pam-devel BuildRequires: config(suse-module-tools) %if 0%{?suse_version} > 1310 @@ -139,7 +143,10 @@ Conflicts: filesystem < 11.5 Conflicts: mkinitrd < 2.7.0 Obsoletes: systemd-analyze < 201 Provides: systemd-analyze = %{version} -Source0: http://www.freedesktop.org/software/systemd/systemd-%{version}.tar.xz + +#Git-Clone: git://anongit.freedesktop.org/systemd/systemd +#Snapshot: v218-1050-g38ab096 +Source0: systemd-%{version}.tar.xz %if ! 0%{?bootstrap} Source1: systemd-rpmlintrc %else @@ -196,8 +203,6 @@ Patch24: handle-etc-HOSTNAME.patch Patch25: Forward-suspend-hibernate-calls-to-pm-utils.patch # PATCH-FIX-UPSTREAM rules-add-lid-switch-of-ARM-based-Chromebook-as-a-power-sw.patch rjschwei@suse.com -- add lid switch of ARM based Chromebook as a power switch to logind Patch38: rules-add-lid-switch-of-ARM-based-Chromebook-as-a-power-sw.patch -# PATCH-FIX-OPENSUSE use-usr-sbin-sulogin-for-emergency-service.patch arvidjaar@gmail.com -- fix path to sulogin -Patch46: use-usr-sbin-sulogin-for-emergency-service.patch # PATCH-FIX-OPENSUSE make-emergency.service-conflict-with-syslog.socket.patch (bnc#852232) Patch84: make-emergency.service-conflict-with-syslog.socket.patch # PATCH-FIX-SUSE 0001-add-hdflush-for-reboot-or-hddown-for-poweroff.patch @@ -252,6 +257,7 @@ Patch338: vhangup-on-all-consoles.patch Patch345: shut-up-rpmlint-on-var-log-journal.patch # PATCH-FIX-SUSE Patch352: set-and-use-default-logconsole.patch +Patch362: tty-ask-password-agent-on-console.patch # PATCH-FIX-SUSE Provide the /var/lock/subsys at start (bnc#889357) Patch366: tomcat6-var-lock-subsys-legacy.patch # PATCH-FIX-SUSE Remove error messages for tab completion for systemctl isolate (bnc#892162) @@ -260,7 +266,6 @@ Patch368: 0001-let-systemctl-completion-ignore-at-names.patch Patch386: use-rndaddentropy-ioctl-to-load-random-seed.patch # PATCH-FIX-SUSE AUDIT-0: Power button press at gdm login should not prompt for credentials (bnc#888612) Patch430: 0001-bnc888612-logind-polkit-acpi.patch -# PATCH-FIX-SUSE added at 2014/10/24 Patch475: journald-advice-about-use-of-memory.patch # PATCH-FIX-SUSE added at 2014/11/05 Patch490: watch_resolv.conf_for_become_changed.patch @@ -569,7 +574,7 @@ Requires(postun): systemd systemd-journal-gatewayd serves journal events over the network using HTTP. %prep -%setup -q -n systemd-%{version} +%setup -q -n systemd echo "Checking whether upstream rpm macros changed..." diff -au "%{S:10}" src/core/macros.systemd.in @@ -599,7 +604,6 @@ cp %{SOURCE7} m4/ %patch40 -p1 %patch41 -p1 %patch42 -p1 -%patch46 -p1 %patch84 -p1 %patch86 -p1 %patch90 -p1 @@ -627,17 +631,18 @@ cp %{SOURCE7} m4/ %patch338 -p1 %patch345 -p1 %patch352 -p1 +%patch362 -p1 %patch366 -p1 %patch368 -p1 %patch386 -p1 %patch430 -p1 +%patch475 -p1 %ifarch %arm %patch38 -p1 %endif -%patch475 -p1 %patch490 -p1 %patch520 -p1 -%patch521 -p0 +%patch521 -p1 # udev patches %patch1001 -p1 @@ -744,7 +749,7 @@ cflags () esac set +o noclobber } -autoreconf -fiv +./autogen.sh # prevent pre-generated and distributed files from re-building find . -name "*.[1-8]" -exec touch '{}' '+'; export V=e @@ -810,19 +815,9 @@ make %{?_smp_mflags} update-man-list man %endif %install -# Use refreshed manual pages -for man in man/*.[0-9] -do - section=${man##*.} - test -d man/man${section} || continue - new=man/man${section}/${man##*/} - if test -s $new -a $new -nt $man - then - cp -p $new $man - else - sed -ri 's@"(systemd) 209"@"\1 %{version}"@' $man - fi -done +%if !0%{?bootstrap} +cp man/man[0-9]/*.[0-9] man/ +%endif make install DESTDIR="%buildroot" # move to %{_lib} @@ -963,15 +958,6 @@ EOF install -m 644 %{S:11} %{buildroot}/%{_prefix}/lib/systemd/system/ ln -s ../after-local.service %{buildroot}/%{_prefix}/lib/systemd/system/multi-user.target.wants/ -%if ! 0%{?bootstrap} -%if %{without python} -for man in systemd.directives.7 systemd.index.7 -do - install -m 0644 man/$man %{buildroot}%{_mandir}/man7/ -done -%endif -%endif - mkdir -p %{buildroot}%{_localstatedir}/lib/systemd/backlight mkdir -p %{buildroot}%{_localstatedir}/lib/systemd/random-seed @@ -1295,6 +1281,7 @@ exit 0 %{_bindir}/systemd-path %{_bindir}/systemd-sysusers %{_bindir}/systemd-notify +%{_bindir}/systemd-hwdb %{_bindir}/systemd-run %{_bindir}/systemd-journalctl %{_bindir}/journalctl @@ -1388,7 +1375,6 @@ exit 0 %{_prefix}/lib/sysusers.d/ /%{_lib}/security/pam_systemd.so %config /etc/pam.d/systemd-user -%_libdir/libnss_resolve.so.2 %dir %{_libexecdir}/modules-load.d %dir %{_sysconfdir}/modules-load.d @@ -1419,7 +1405,6 @@ exit 0 %if !0%{?bootstrap} %config(noreplace) %{_sysconfdir}/systemd/journal-remote.conf %endif -%config(noreplace) %{_sysconfdir}/systemd/resolved.conf %config(noreplace) %{_sysconfdir}/systemd/timesyncd.conf %config(noreplace) %{_sysconfdir}/systemd/system.conf %config(noreplace) %{_sysconfdir}/systemd/logind.conf @@ -1428,7 +1413,7 @@ exit 0 %config(noreplace) %{_sysconfdir}/dbus-1/system.d/org.freedesktop.locale1.conf %config(noreplace) %{_sysconfdir}/dbus-1/system.d/org.freedesktop.login1.conf %config(noreplace) %{_sysconfdir}/dbus-1/system.d/org.freedesktop.machine1.conf -%config(noreplace) %{_sysconfdir}/dbus-1/system.d/org.freedesktop.resolve1.conf +%config(noreplace) %{_sysconfdir}/dbus-1/system.d/org.freedesktop.network1.conf %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 @@ -1447,7 +1432,7 @@ exit 0 %{_datadir}/factory/ %{_datadir}/dbus-1/services/org.freedesktop.systemd1.service -%{_datadir}/dbus-1/system-services/org.freedesktop.resolve1.service +%{_datadir}/dbus-1/system-services/org.freedesktop.network1.service %{_datadir}/dbus-1/system-services/org.freedesktop.systemd1.service %{_datadir}/dbus-1/system-services/org.freedesktop.locale1.service %{_datadir}/dbus-1/system-services/org.freedesktop.login1.service @@ -1456,6 +1441,7 @@ exit 0 %{_datadir}/dbus-1/system-services/org.freedesktop.timedate1.service %dir %{_datadir}/polkit-1 %dir %{_datadir}/polkit-1/actions +%{_datadir}/polkit-1/actions/org.freedesktop.machine1.policy %{_datadir}/polkit-1/actions/org.freedesktop.systemd1.policy %{_datadir}/polkit-1/actions/org.freedesktop.hostname1.policy %{_datadir}/polkit-1/actions/org.freedesktop.locale1.policy @@ -1505,9 +1491,6 @@ exit 0 %{_datadir}/zsh/site-functions/* %ghost %{_localstatedir}/lib/systemd/backlight %ghost %{_localstatedir}/lib/systemd/random-seed -%if 0%{?suse_version} > 1310 -%{_datadir}/pkgconfig/systemd.pc -%endif %if ! 0%{?bootstrap} %files bash-completion -f files.completion @@ -1531,9 +1514,7 @@ exit 0 %{_includedir}/systemd/sd-journal.h %{_includedir}/systemd/sd-messages.h %{_includedir}/systemd/_sd-common.h -%if 0%{?suse_version} <= 1310 -%{_datadir}/pkgconfig/systemd.pc -%endif +%{_libdir}/pkgconfig/systemd.pc %{_libdir}/pkgconfig/libsystemd.pc %{_libdir}/pkgconfig/libsystemd-daemon.pc %{_libdir}/pkgconfig/libsystemd-login.pc diff --git a/systemd-tmp-safe-defaults.patch b/systemd-tmp-safe-defaults.patch index 61d05349..dd7c0d80 100644 --- a/systemd-tmp-safe-defaults.patch +++ b/systemd-tmp-safe-defaults.patch @@ -5,20 +5,22 @@ Subject: systemd tmp safe defaults Fix regression in the default for tmp auto-deletion (FATE#314974). SUSE policy is to not clean /tmp by default. --- - tmpfiles.d/tmp.conf | 5 +++-- + tmpfiles.d/tmp.conf | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) ---- systemd-206.orig/tmpfiles.d/tmp.conf -+++ systemd-206/tmpfiles.d/tmp.conf +Index: systemd/tmpfiles.d/tmp.conf +=================================================================== +--- systemd.orig/tmpfiles.d/tmp.conf ++++ systemd/tmpfiles.d/tmp.conf @@ -8,8 +8,9 @@ # See tmpfiles.d(5) for details # Clear tmp directories separately, to make them easier to override --d /tmp 1777 root root 10d --d /var/tmp 1777 root root 30d +-v /tmp 1777 root root 10d +-v /var/tmp 1777 root root 30d +# SUSE policy: we don't clean those directories -+d /tmp 1777 root root - -+d /var/tmp 1777 root root - ++v /tmp 1777 root root - ++v /var/tmp 1777 root root - # Exclude namespace mountpoints created with PrivateTmp=yes x /tmp/systemd-private-%b-* diff --git a/systemd.changes b/systemd.changes index 52870bc4..9bd56623 100644 --- a/systemd.changes +++ b/systemd.changes @@ -1,3 +1,13 @@ +------------------------------------------------------------------- +Mon Feb 16 10:18:18 UTC 2015 - jengelh@inai.de + +- Update to systemd v218-1050-g38ab096 +- Remove patches + use-usr-sbin-sulogin-for-emergency-service.patch (upstream fixed it) +- Reinstate and improve (remove huge indents from) + tty-ask-password-agent-on-console.patch, + 0014-journald-with-journaling-FS.patch, rootsymlink_generator. + ------------------------------------------------------------------- Mon Feb 16 09:42:48 UTC 2015 - meissner@suse.com @@ -27,8 +37,6 @@ Fri Jan 9 18:48:28 UTC 2015 - jengelh@inai.de N=no longer applies to source nor is it deemed needed; K=killed: no longer applicable and too complex to resolve: ---- - G 0002-rfkill-rework-how-we-generate-file-names-from-rfkill.patch - G avoid-assertion-if-invalid-address-familily-is-passed-to-g.patch K service-flags-sysv-service-with-detected-pid-as-RemainAfte.patch K remain_after_exit-initscript-heuristic-and-add-new-LSB-hea.patch K handle-SYSTEMCTL_OPTIONS-environment-variable.patch diff --git a/systemd.spec b/systemd.spec index cc60f141..979d048c 100644 --- a/systemd.spec +++ b/systemd.spec @@ -1,7 +1,7 @@ # # spec file for package systemd # -# Copyright (c) 2015 SUSE LINUX GmbH, Nuernberg, Germany. +# Copyright (c) 2015 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 @@ -42,7 +42,7 @@ Name: systemd Url: http://www.freedesktop.org/wiki/Software/systemd -Version: 218 +Version: 218.g1050 Release: 0 Summary: A System and Session Manager License: LGPL-2.1+ @@ -50,14 +50,18 @@ Group: System/Base BuildRoot: %{_tmppath}/%{name}-%{version}-build BuildRequires: acl BuildRequires: audit-devel +BuildRequires: autoconf +BuildRequires: automake BuildRequires: fdupes BuildRequires: gperf +BuildRequires: gtk-doc BuildRequires: intltool BuildRequires: libacl-devel BuildRequires: libcap-devel BuildRequires: libkmod-devel BuildRequires: libsepol-devel BuildRequires: libtool +BuildRequires: libtool BuildRequires: pam-devel BuildRequires: config(suse-module-tools) %if 0%{?suse_version} > 1310 @@ -134,7 +138,10 @@ Conflicts: filesystem < 11.5 Conflicts: mkinitrd < 2.7.0 Obsoletes: systemd-analyze < 201 Provides: systemd-analyze = %{version} -Source0: http://www.freedesktop.org/software/systemd/systemd-%{version}.tar.xz + +#Git-Clone: git://anongit.freedesktop.org/systemd/systemd +#Snapshot: v218-1050-g38ab096 +Source0: systemd-%{version}.tar.xz %if ! 0%{?bootstrap} Source1: systemd-rpmlintrc %else @@ -191,8 +198,6 @@ Patch24: handle-etc-HOSTNAME.patch Patch25: Forward-suspend-hibernate-calls-to-pm-utils.patch # PATCH-FIX-UPSTREAM rules-add-lid-switch-of-ARM-based-Chromebook-as-a-power-sw.patch rjschwei@suse.com -- add lid switch of ARM based Chromebook as a power switch to logind Patch38: rules-add-lid-switch-of-ARM-based-Chromebook-as-a-power-sw.patch -# PATCH-FIX-OPENSUSE use-usr-sbin-sulogin-for-emergency-service.patch arvidjaar@gmail.com -- fix path to sulogin -Patch46: use-usr-sbin-sulogin-for-emergency-service.patch # PATCH-FIX-OPENSUSE make-emergency.service-conflict-with-syslog.socket.patch (bnc#852232) Patch84: make-emergency.service-conflict-with-syslog.socket.patch # PATCH-FIX-SUSE 0001-add-hdflush-for-reboot-or-hddown-for-poweroff.patch @@ -247,6 +252,7 @@ Patch338: vhangup-on-all-consoles.patch Patch345: shut-up-rpmlint-on-var-log-journal.patch # PATCH-FIX-SUSE Patch352: set-and-use-default-logconsole.patch +Patch362: tty-ask-password-agent-on-console.patch # PATCH-FIX-SUSE Provide the /var/lock/subsys at start (bnc#889357) Patch366: tomcat6-var-lock-subsys-legacy.patch # PATCH-FIX-SUSE Remove error messages for tab completion for systemctl isolate (bnc#892162) @@ -255,7 +261,6 @@ Patch368: 0001-let-systemctl-completion-ignore-at-names.patch Patch386: use-rndaddentropy-ioctl-to-load-random-seed.patch # PATCH-FIX-SUSE AUDIT-0: Power button press at gdm login should not prompt for credentials (bnc#888612) Patch430: 0001-bnc888612-logind-polkit-acpi.patch -# PATCH-FIX-SUSE added at 2014/10/24 Patch475: journald-advice-about-use-of-memory.patch # PATCH-FIX-SUSE added at 2014/11/05 Patch490: watch_resolv.conf_for_become_changed.patch @@ -564,7 +569,7 @@ Requires(postun): systemd systemd-journal-gatewayd serves journal events over the network using HTTP. %prep -%setup -q -n systemd-%{version} +%setup -q -n systemd echo "Checking whether upstream rpm macros changed..." diff -au "%{S:10}" src/core/macros.systemd.in @@ -594,7 +599,6 @@ cp %{SOURCE7} m4/ %patch40 -p1 %patch41 -p1 %patch42 -p1 -%patch46 -p1 %patch84 -p1 %patch86 -p1 %patch90 -p1 @@ -622,17 +626,18 @@ cp %{SOURCE7} m4/ %patch338 -p1 %patch345 -p1 %patch352 -p1 +%patch362 -p1 %patch366 -p1 %patch368 -p1 %patch386 -p1 %patch430 -p1 +%patch475 -p1 %ifarch %arm %patch38 -p1 %endif -%patch475 -p1 %patch490 -p1 %patch520 -p1 -%patch521 -p0 +%patch521 -p1 # udev patches %patch1001 -p1 @@ -739,7 +744,7 @@ cflags () esac set +o noclobber } -autoreconf -fiv +./autogen.sh # prevent pre-generated and distributed files from re-building find . -name "*.[1-8]" -exec touch '{}' '+'; export V=e @@ -805,19 +810,9 @@ make %{?_smp_mflags} update-man-list man %endif %install -# Use refreshed manual pages -for man in man/*.[0-9] -do - section=${man##*.} - test -d man/man${section} || continue - new=man/man${section}/${man##*/} - if test -s $new -a $new -nt $man - then - cp -p $new $man - else - sed -ri 's@"(systemd) 209"@"\1 %{version}"@' $man - fi -done +%if !0%{?bootstrap} +cp man/man[0-9]/*.[0-9] man/ +%endif make install DESTDIR="%buildroot" # move to %{_lib} @@ -958,15 +953,6 @@ EOF install -m 644 %{S:11} %{buildroot}/%{_prefix}/lib/systemd/system/ ln -s ../after-local.service %{buildroot}/%{_prefix}/lib/systemd/system/multi-user.target.wants/ -%if ! 0%{?bootstrap} -%if %{without python} -for man in systemd.directives.7 systemd.index.7 -do - install -m 0644 man/$man %{buildroot}%{_mandir}/man7/ -done -%endif -%endif - mkdir -p %{buildroot}%{_localstatedir}/lib/systemd/backlight mkdir -p %{buildroot}%{_localstatedir}/lib/systemd/random-seed @@ -1290,6 +1276,7 @@ exit 0 %{_bindir}/systemd-path %{_bindir}/systemd-sysusers %{_bindir}/systemd-notify +%{_bindir}/systemd-hwdb %{_bindir}/systemd-run %{_bindir}/systemd-journalctl %{_bindir}/journalctl @@ -1383,7 +1370,6 @@ exit 0 %{_prefix}/lib/sysusers.d/ /%{_lib}/security/pam_systemd.so %config /etc/pam.d/systemd-user -%_libdir/libnss_resolve.so.2 %dir %{_libexecdir}/modules-load.d %dir %{_sysconfdir}/modules-load.d @@ -1414,7 +1400,6 @@ exit 0 %if !0%{?bootstrap} %config(noreplace) %{_sysconfdir}/systemd/journal-remote.conf %endif -%config(noreplace) %{_sysconfdir}/systemd/resolved.conf %config(noreplace) %{_sysconfdir}/systemd/timesyncd.conf %config(noreplace) %{_sysconfdir}/systemd/system.conf %config(noreplace) %{_sysconfdir}/systemd/logind.conf @@ -1423,7 +1408,7 @@ exit 0 %config(noreplace) %{_sysconfdir}/dbus-1/system.d/org.freedesktop.locale1.conf %config(noreplace) %{_sysconfdir}/dbus-1/system.d/org.freedesktop.login1.conf %config(noreplace) %{_sysconfdir}/dbus-1/system.d/org.freedesktop.machine1.conf -%config(noreplace) %{_sysconfdir}/dbus-1/system.d/org.freedesktop.resolve1.conf +%config(noreplace) %{_sysconfdir}/dbus-1/system.d/org.freedesktop.network1.conf %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 @@ -1442,7 +1427,7 @@ exit 0 %{_datadir}/factory/ %{_datadir}/dbus-1/services/org.freedesktop.systemd1.service -%{_datadir}/dbus-1/system-services/org.freedesktop.resolve1.service +%{_datadir}/dbus-1/system-services/org.freedesktop.network1.service %{_datadir}/dbus-1/system-services/org.freedesktop.systemd1.service %{_datadir}/dbus-1/system-services/org.freedesktop.locale1.service %{_datadir}/dbus-1/system-services/org.freedesktop.login1.service @@ -1451,6 +1436,7 @@ exit 0 %{_datadir}/dbus-1/system-services/org.freedesktop.timedate1.service %dir %{_datadir}/polkit-1 %dir %{_datadir}/polkit-1/actions +%{_datadir}/polkit-1/actions/org.freedesktop.machine1.policy %{_datadir}/polkit-1/actions/org.freedesktop.systemd1.policy %{_datadir}/polkit-1/actions/org.freedesktop.hostname1.policy %{_datadir}/polkit-1/actions/org.freedesktop.locale1.policy @@ -1500,9 +1486,6 @@ exit 0 %{_datadir}/zsh/site-functions/* %ghost %{_localstatedir}/lib/systemd/backlight %ghost %{_localstatedir}/lib/systemd/random-seed -%if 0%{?suse_version} > 1310 -%{_datadir}/pkgconfig/systemd.pc -%endif %if ! 0%{?bootstrap} %files bash-completion -f files.completion @@ -1526,9 +1509,7 @@ exit 0 %{_includedir}/systemd/sd-journal.h %{_includedir}/systemd/sd-messages.h %{_includedir}/systemd/_sd-common.h -%if 0%{?suse_version} <= 1310 -%{_datadir}/pkgconfig/systemd.pc -%endif +%{_libdir}/pkgconfig/systemd.pc %{_libdir}/pkgconfig/libsystemd.pc %{_libdir}/pkgconfig/libsystemd-daemon.pc %{_libdir}/pkgconfig/libsystemd-login.pc diff --git a/tty-ask-password-agent-on-console.patch b/tty-ask-password-agent-on-console.patch new file mode 100644 index 00000000..ee7e73d8 --- /dev/null +++ b/tty-ask-password-agent-on-console.patch @@ -0,0 +1,239 @@ +--- + src/tty-ask-password-agent/tty-ask-password-agent.c | 171 +++++++++++++++++++- + 1 file changed, 166 insertions(+), 5 deletions(-) + +Index: systemd/src/tty-ask-password-agent/tty-ask-password-agent.c +=================================================================== +--- systemd.orig/src/tty-ask-password-agent/tty-ask-password-agent.c ++++ systemd/src/tty-ask-password-agent/tty-ask-password-agent.c +@@ -31,6 +31,10 @@ + #include + #include + #include ++#include ++#include ++#include ++#include + + #include "util.h" + #include "mkdir.h" +@@ -42,6 +46,9 @@ + #include "strv.h" + #include "build.h" + #include "def.h" ++#include "fileio.h" ++#include "macro.h" ++#include "list.h" + + static enum { + ACTION_LIST, +@@ -50,6 +57,22 @@ static enum { + ACTION_WALL + } arg_action = ACTION_QUERY; + ++struct console { ++ LIST_FIELDS(struct console, handle); ++ const char *tty; ++ pid_t pid; ++ int id; ++ char dev[]; ++}; ++ ++static volatile unsigned long *usemask; ++static volatile sig_atomic_t sigchild; ++static void chld_handler(int sig) ++{ ++ (void)sig; ++ ++sigchild; ++} ++ + static bool arg_plymouth = false; + static bool arg_console = false; + +@@ -208,6 +231,58 @@ static int ask_password_plymouth( + return 0; + } + ++static const char *current_dev = "/dev/console"; ++static LIST_HEAD(struct console, consoles); ++static int collect_consoles(void) { ++ _cleanup_free_ char *active = NULL; ++ const char *word, *state; ++ struct console *con; ++ size_t len; ++ int ret, id = 0; ++ ++ ret = read_one_line_file("/sys/class/tty/console/active", &active); ++ if (ret < 0) ++ return ret; ++ FOREACH_WORD(word, len, active, state) { ++ _cleanup_free_ char *tty = NULL; ++ ++ if (strneq(word, "tty0", len) && ++ read_one_line_file("/sys/class/tty/tty0/active", &tty) >= 0) { ++ word = tty; ++ len = strlen(tty); ++ } ++ con = malloc0(sizeof(*con) + strlen("/dev/") + len + 1); ++ if (con == NULL) { ++ log_oom(); ++ continue; ++ } ++ sprintf(con->dev, "/dev/%.*s", (int)len, word); ++ con->tty = con->dev; ++ con->id = id++; ++ LIST_PREPEND(handle, consoles, con); ++ } ++ if (consoles == NULL) { ++ con = malloc0(sizeof(*con)); ++ if (con == NULL) { ++ log_oom(); ++ return -ENOMEM; ++ } ++ con->tty = current_dev; ++ con->id = id++; ++ LIST_PREPEND(handle, consoles, con); ++ } ++ return 0; ++} ++ ++static void free_consoles(void) { ++ struct console *c; ++ LIST_FOREACH(handle, c, consoles) { ++ LIST_REMOVE(handle, consoles, c); ++ free(c); ++ } ++ LIST_HEAD_INIT(consoles); ++} ++ + static int parse_password(const char *filename, char **wall) { + _cleanup_free_ char *socket_name = NULL, *message = NULL, *packet = NULL; + uint64_t not_after = 0; +@@ -308,7 +383,7 @@ static int parse_password(const char *fi + _cleanup_free_ char *password = NULL; + + if (arg_console) { +- tty_fd = acquire_terminal("/dev/console", false, false, false, USEC_INFINITY); ++ tty_fd = acquire_terminal(current_dev, false, false, false, USEC_INFINITY); + if (tty_fd < 0) + return tty_fd; + } +@@ -612,9 +687,85 @@ static int parse_argv(int argc, char *ar + return 1; + } + ++static int zzz(void) ++{ ++ struct console *con; ++ struct sigaction sig = { ++ .sa_handler = chld_handler, ++ .sa_flags = SA_NOCLDSTOP | SA_RESTART, ++ }; ++ struct sigaction oldsig; ++ sigset_t set, oldset; ++ int status = 0, ret; ++ pid_t job; ++ ++ collect_consoles(); ++ if (!consoles->handle_next) { ++ consoles->pid = 0; ++ con = consoles; ++ goto nofork; ++ } ++ ++ assert_se(sigemptyset(&set) == 0); ++ assert_se(sigaddset(&set, SIGHUP) == 0); ++ assert_se(sigaddset(&set, SIGCHLD) == 0); ++ assert_se(sigemptyset(&sig.sa_mask) == 0); ++ assert_se(sigprocmask(SIG_UNBLOCK, &set, &oldset) == 0); ++ assert_se(sigaction(SIGCHLD, &sig, &oldsig) == 0); ++ sig.sa_handler = SIG_DFL; ++ assert_se(sigaction(SIGHUP, &sig, NULL) == 0); ++ ++ LIST_FOREACH(handle, con, consoles) { ++ switch ((con->pid = fork())) { ++ case 0: ++ if (prctl(PR_SET_PDEATHSIG, SIGHUP) < 0) ++ _exit(EXIT_FAILURE); ++ zero(sig); ++ assert_se(sigprocmask(SIG_UNBLOCK, &oldset, NULL) == 0); ++ assert_se(sigaction(SIGCHLD, &oldsig, NULL) == 0); ++ nofork: ++ setsid(); ++ release_terminal(); ++ *usemask |= 1 << con->id; ++ current_dev = con->tty; ++ return con->id; /* child */ ++ case -1: ++ log_error("Failed to query password: %s", strerror(errno)); ++ exit(EXIT_FAILURE); ++ default: ++ break; ++ } ++ } ++ ++ ret = 0; ++ while ((job = wait(&status)) != 0) { ++ if (job < 0) { ++ if (errno != EINTR) ++ break; ++ continue; ++ } ++ LIST_FOREACH(handle, con, consoles) { ++ if (con->pid == job || kill(con->pid, 0) < 0) { ++ *usemask &= ~(1 << con->id); ++ continue; ++ } ++ if (*usemask & (1 << con->id)) ++ continue; ++ kill(con->pid, SIGHUP); ++ usleep(50000); ++ kill(con->pid, SIGKILL); ++ } ++ if (WIFEXITED(status) && ret == 0) ++ ret = WEXITSTATUS(status); ++ } ++ free_consoles(); ++ exit(ret != 0 ? EXIT_FAILURE : EXIT_SUCCESS); /* parent */ ++} ++ + int main(int argc, char *argv[]) { +- int r; ++ int r, id = 0; + ++ LIST_HEAD_INIT(consoles); + log_set_target(LOG_TARGET_AUTO); + log_parse_environment(); + log_open(); +@@ -625,11 +776,19 @@ int main(int argc, char *argv[]) { + if (r <= 0) + goto finish; + ++ usemask = mmap(NULL, sizeof(*usemask), PROT_READ | PROT_WRITE, ++ MAP_ANONYMOUS | MAP_SHARED, -1, 0); ++ assert_se(usemask != NULL); ++ + if (arg_console) { +- setsid(); +- release_terminal(); ++ if (!arg_plymouth && arg_action != ACTION_WALL && ++ arg_action != ACTION_LIST) { ++ id = zzz(); ++ } else { ++ setsid(); ++ release_terminal(); ++ } + } +- + if (IN_SET(arg_action, ACTION_WATCH, ACTION_WALL)) + r = watch_passwords(); + else +@@ -638,6 +797,8 @@ int main(int argc, char *argv[]) { + if (r < 0) + log_error_errno(r, "Error: %m"); + ++ free_consoles(); ++ *usemask &= ~(1 << id); + finish: + return r < 0 ? EXIT_FAILURE : EXIT_SUCCESS; + } diff --git a/use-usr-sbin-sulogin-for-emergency-service.patch b/use-usr-sbin-sulogin-for-emergency-service.patch deleted file mode 100644 index b375bd61..00000000 --- a/use-usr-sbin-sulogin-for-emergency-service.patch +++ /dev/null @@ -1,50 +0,0 @@ -From: Andrey Borzenkov -Subject: use /usr/sbin/sulogin in emergency service - -In current Factory sulogin is in /usr/sbin which makes it impossible -to enter emergency service. ---- - units/console-shell.service.m4.in | 2 +- - units/emergency.service.in | 2 +- - units/rescue.service.in | 2 +- - 3 files changed, 3 insertions(+), 3 deletions(-) - -Index: systemd-218/units/console-shell.service.m4.in -=================================================================== ---- systemd-218.orig/units/console-shell.service.m4.in -+++ systemd-218/units/console-shell.service.m4.in -@@ -17,7 +17,7 @@ Before=getty.target - [Service] - Environment=HOME=/root - WorkingDirectory=/root --ExecStart=-/sbin/sulogin -+ExecStart=-/usr/sbin/sulogin - ExecStopPost=-@SYSTEMCTL@ poweroff - Type=idle - StandardInput=tty-force -Index: systemd-218/units/emergency.service.in -=================================================================== ---- systemd-218.orig/units/emergency.service.in -+++ systemd-218/units/emergency.service.in -@@ -18,7 +18,7 @@ Environment=HOME=/root - WorkingDirectory=/root - ExecStartPre=-/bin/plymouth quit - ExecStartPre=-/bin/echo -e 'Welcome to emergency mode! After logging in, type "journalctl -xb" to view\\nsystem logs, "systemctl reboot" to reboot, "systemctl default" or ^D to\\ntry again to boot into default mode.' --ExecStart=-/bin/sh -c "/sbin/sulogin; @SYSTEMCTL@ --fail --no-block default" -+ExecStart=-/bin/sh -c "/usr/sbin/sulogin; @SYSTEMCTL@ --fail --no-block default" - Type=idle - StandardInput=tty-force - StandardOutput=inherit -Index: systemd-218/units/rescue.service.in -=================================================================== ---- systemd-218.orig/units/rescue.service.in -+++ systemd-218/units/rescue.service.in -@@ -18,7 +18,7 @@ Environment=HOME=/root - WorkingDirectory=/root - ExecStartPre=-/bin/plymouth quit - ExecStartPre=-/bin/echo -e 'Welcome to emergency mode! After logging in, type "journalctl -xb" to view\\nsystem logs, "systemctl reboot" to reboot, "systemctl default" or ^D to\\nboot into default mode.' --ExecStart=-/bin/sh -c "/sbin/sulogin; @SYSTEMCTL@ --fail --no-block default" -+ExecStart=-/bin/sh -c "/usr/sbin/sulogin; @SYSTEMCTL@ --fail --no-block default" - Type=idle - StandardInput=tty-force - StandardOutput=inherit