Accepting request 437403 from home:fbui:systemd:Factory
- Own a couple of directories even if they don't belong to systemd otherwise the build system will complain. Some directories (owned by others packages) are simply used by systemd to ship some scripts or config files to customize others *optional* components. Since thos components are not build required by systemd those directories are not owned by any packages and the BS complains... - Import commit 15ea716 journal-remote: change owner of /var/log/journal/remote and create /var/lib/systemd/journal-upload (bsc#1006372) - %sysusers_create and %tmpfiles_create must be called in %post Calling %pre is broken since the respective conf files are not yet installed. - %{_libexecdir}/{tmpfiles.d,sysusers.d}/systemd-remote.conf are part of systemd-journal-remote package (only). - systemd-journal-{gatewayd,remote,upload} units are only part of "systemd-journal-remote" package. So exclude them from the main package. - Import commit a1c145e6ad6588555dca64402f9103fb1e02b1a0 7f34037 man: explain that *KeyIgnoreInhibited only apply to a subset of locks df5798b Revert "logind: really handle *KeyIgnoreInhibited options in logind.conf" (bsc#1001790 bsc#1005404) f79fee7 Revert "kbd-model-map: add more mappings offered by Yast" 3760c10 manager: tighten incoming notification message checks d6efd71 core: only warn on short reads on signal fd 6eebd91 manager: be stricter with incomining notifications, warn properly about too large ones OBS-URL: https://build.opensuse.org/request/show/437403 OBS-URL: https://build.opensuse.org/package/show/Base:System/systemd?expand=0&rev=959
This commit is contained in:
parent
c385bc66e2
commit
12f7177ed6
@ -1,32 +0,0 @@
|
||||
From ddcd0b726adfd78260ec3d6a446800d85980069e Mon Sep 17 00:00:00 2001
|
||||
From: Jorge Niedbalski <jorge.niedbalski@canonical.com>
|
||||
Date: Wed, 28 Sep 2016 18:25:50 -0300
|
||||
Subject: [PATCH 1/1] If the notification message length is 0, ignore the
|
||||
message (#4237)
|
||||
|
||||
Fixes #4234.
|
||||
|
||||
Signed-off-by: Jorge Niedbalski <jnr@metaklass.org>
|
||||
(cherry picked from commit 531ac2b2349da02acc9c382849758e07eb92b020)
|
||||
---
|
||||
src/core/manager.c | 4 ++++
|
||||
1 file changed, 4 insertions(+)
|
||||
|
||||
diff --git a/src/core/manager.c b/src/core/manager.c
|
||||
index 229cb31..56ca9cf 100644
|
||||
--- a/src/core/manager.c
|
||||
+++ b/src/core/manager.c
|
||||
@@ -1565,6 +1565,10 @@ static int manager_dispatch_notify_fd(sd_event_source *source, int fd, uint32_t
|
||||
|
||||
return -errno;
|
||||
}
|
||||
+ if (n == 0) {
|
||||
+ log_debug("Got zero-length notification message. Ignoring.");
|
||||
+ return 0;
|
||||
+ }
|
||||
|
||||
CMSG_FOREACH(cmsg, &msghdr) {
|
||||
if (cmsg->cmsg_level == SOL_SOCKET && cmsg->cmsg_type == SCM_RIGHTS) {
|
||||
--
|
||||
2.10.0
|
||||
|
@ -1,180 +0,0 @@
|
||||
---
|
||||
rules/99-systemd.rules.in | 2 -
|
||||
src/basic/terminal-util.c | 55 ++++++++++++++++++++++++++++++++++++++++++++--
|
||||
src/basic/terminal-util.h | 1
|
||||
src/core/manager.c | 24 +++++++++++++++-----
|
||||
4 files changed, 74 insertions(+), 8 deletions(-)
|
||||
|
||||
|
||||
Index: systemd-228/rules/99-systemd.rules.in
|
||||
===================================================================
|
||||
--- systemd-228.orig/rules/99-systemd.rules.in
|
||||
+++ systemd-228/rules/99-systemd.rules.in
|
||||
@@ -7,7 +7,7 @@
|
||||
|
||||
ACTION=="remove", GOTO="systemd_end"
|
||||
|
||||
-SUBSYSTEM=="tty", KERNEL=="tty[a-zA-Z]*|hvc*|xvc*|hvsi*|ttysclp*|sclp_line*|3270/tty[0-9]*", TAG+="systemd"
|
||||
+SUBSYSTEM=="tty", KERNEL=="tty[a-zA-Z]*|hvc*|xvc*|hvsi*|ttysclp*|sclp_line*|3270/tty*", TAG+="systemd"
|
||||
KERNEL=="vport*", TAG+="systemd"
|
||||
|
||||
SUBSYSTEM=="block", TAG+="systemd"
|
||||
Index: systemd-228/src/basic/terminal-util.c
|
||||
===================================================================
|
||||
--- systemd-228.orig/src/basic/terminal-util.c
|
||||
+++ systemd-228/src/basic/terminal-util.c
|
||||
@@ -717,10 +717,47 @@ bool tty_is_vc_resolve(const char *tty)
|
||||
return tty_is_vc(tty);
|
||||
}
|
||||
|
||||
+bool ansi_console(int fd) {
|
||||
+ static int cached_ansi_console = -1;
|
||||
+
|
||||
+ if (_likely_(cached_ansi_console >= 0))
|
||||
+ return cached_ansi_console;
|
||||
+
|
||||
+ cached_ansi_console = isatty(fd) > 0;
|
||||
+#if defined(__s390__) || defined(__s390x__)
|
||||
+ if (cached_ansi_console) {
|
||||
+ const char *e = getenv("TERM");
|
||||
+ if (e != NULL && (streq(e, "dumb") || strneq(e, "ibm3", 4))) {
|
||||
+ _cleanup_free_ char *mode = NULL;
|
||||
+ int r = parse_env_file("/proc/cmdline", WHITESPACE,
|
||||
+ "conmode", &mode, NULL);
|
||||
+ if (r < 0 || mode == NULL || !streq(mode, "3270"))
|
||||
+ cached_ansi_console = 0;
|
||||
+ }
|
||||
+ }
|
||||
+#endif
|
||||
+ return cached_ansi_console;
|
||||
+}
|
||||
+
|
||||
const char *default_term_for_tty(const char *tty) {
|
||||
assert(tty);
|
||||
|
||||
- return tty_is_vc_resolve(tty) ? "TERM=linux" : "TERM=vt220";
|
||||
+ if (tty_is_vc_resolve(tty))
|
||||
+ return "TERM=linux";
|
||||
+ if (startswith(tty, "/dev/"))
|
||||
+ tty += 5;
|
||||
+#if defined (__s390__) || defined (__s390x__)
|
||||
+ if (streq(tty, "ttyS0")) {
|
||||
+ _cleanup_free_ char *mode = NULL;
|
||||
+ int r = parse_env_file("/proc/cmdline", WHITESPACE, "conmode",
|
||||
+ &mode, NULL);
|
||||
+ if (r < 0 || mode == NULL || !streq(mode, "3270"))
|
||||
+ return "TERM=dumb";
|
||||
+ if (streq(mode, "3270"))
|
||||
+ return "TERM=ibm327x";
|
||||
+ }
|
||||
+#endif
|
||||
+ return "TERM=vt220";
|
||||
}
|
||||
|
||||
int fd_columns(int fd) {
|
||||
@@ -800,8 +837,22 @@ void columns_lines_cache_reset(int signu
|
||||
bool on_tty(void) {
|
||||
static int cached_on_tty = -1;
|
||||
|
||||
- if (_unlikely_(cached_on_tty < 0))
|
||||
+ if (_unlikely_(cached_on_tty < 0)) {
|
||||
cached_on_tty = isatty(STDOUT_FILENO) > 0;
|
||||
+#if defined (__s390__) || defined (__s390x__)
|
||||
+ if (cached_on_tty) {
|
||||
+ const char *e = getenv("TERM");
|
||||
+ if (!e)
|
||||
+ return cached_on_tty;
|
||||
+ if (streq(e, "dumb") || strneq(e, "ibm3", 4)) {
|
||||
+ char *mode = NULL;
|
||||
+ int r = parse_env_file("/proc/cmdline", WHITESPACE, "conmode", &mode, NULL);
|
||||
+ if (r < 0 || !mode || !streq(mode, "3270"))
|
||||
+ cached_on_tty = 0;
|
||||
+ }
|
||||
+ }
|
||||
+#endif
|
||||
+ }
|
||||
|
||||
return cached_on_tty;
|
||||
}
|
||||
Index: systemd-228/src/basic/terminal-util.h
|
||||
===================================================================
|
||||
--- systemd-228.orig/src/basic/terminal-util.h
|
||||
+++ systemd-228/src/basic/terminal-util.h
|
||||
@@ -78,6 +78,7 @@ unsigned lines(void);
|
||||
void columns_lines_cache_reset(int _unused_ signum);
|
||||
|
||||
bool on_tty(void);
|
||||
+bool ansi_console(int fd);
|
||||
|
||||
static inline const char *ansi_underline(void) {
|
||||
return on_tty() ? ANSI_UNDERLINE : "";
|
||||
Index: systemd-228/src/core/manager.c
|
||||
===================================================================
|
||||
--- systemd-228.orig/src/core/manager.c
|
||||
+++ systemd-228/src/core/manager.c
|
||||
@@ -126,7 +126,7 @@ static void manager_watch_jobs_in_progre
|
||||
|
||||
#define CYLON_BUFFER_EXTRA (2*(sizeof(ANSI_RED)-1) + sizeof(ANSI_HIGHLIGHT_RED)-1 + 2*(sizeof(ANSI_NORMAL)-1))
|
||||
|
||||
-static void draw_cylon(char buffer[], size_t buflen, unsigned width, unsigned pos) {
|
||||
+static void draw_cylon(char buffer[], size_t buflen, unsigned width, unsigned pos, bool ansi_console) {
|
||||
char *p = buffer;
|
||||
|
||||
assert(buflen >= CYLON_BUFFER_EXTRA + width + 1);
|
||||
@@ -135,12 +135,14 @@ static void draw_cylon(char buffer[], si
|
||||
if (pos > 1) {
|
||||
if (pos > 2)
|
||||
p = mempset(p, ' ', pos-2);
|
||||
- p = stpcpy(p, ANSI_RED);
|
||||
+ if (ansi_console)
|
||||
+ p = stpcpy(p, ANSI_RED);
|
||||
*p++ = '*';
|
||||
}
|
||||
|
||||
if (pos > 0 && pos <= width) {
|
||||
- p = stpcpy(p, ANSI_HIGHLIGHT_RED);
|
||||
+ if (ansi_console)
|
||||
+ p = stpcpy(p, ANSI_HIGHLIGHT_RED);
|
||||
*p++ = '*';
|
||||
}
|
||||
|
||||
@@ -151,7 +153,8 @@ static void draw_cylon(char buffer[], si
|
||||
*p++ = '*';
|
||||
if (pos < width-1)
|
||||
p = mempset(p, ' ', width-1-pos);
|
||||
- strcpy(p, ANSI_NORMAL);
|
||||
+ if (ansi_console)
|
||||
+ strcpy(p, ANSI_NORMAL);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -168,6 +171,7 @@ void manager_flip_auto_status(Manager *m
|
||||
}
|
||||
|
||||
static void manager_print_jobs_in_progress(Manager *m) {
|
||||
+ static int is_ansi_console = -1;
|
||||
_cleanup_free_ char *job_of_n = NULL;
|
||||
Iterator i;
|
||||
Job *j;
|
||||
@@ -193,10 +197,20 @@ static void manager_print_jobs_in_progre
|
||||
assert(counter == print_nr + 1);
|
||||
assert(j);
|
||||
|
||||
+ if (_unlikely_(is_ansi_console < 0)) {
|
||||
+ int fd = open_terminal("/dev/console", O_RDONLY|O_NOCTTY|O_CLOEXEC);
|
||||
+ if (fd < 0)
|
||||
+ is_ansi_console = 0;
|
||||
+ else {
|
||||
+ is_ansi_console = (int)ansi_console(fd);
|
||||
+ close(fd);
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
cylon_pos = m->jobs_in_progress_iteration % 14;
|
||||
if (cylon_pos >= 8)
|
||||
cylon_pos = 14 - cylon_pos;
|
||||
- draw_cylon(cylon, sizeof(cylon), 6, cylon_pos);
|
||||
+ draw_cylon(cylon, sizeof(cylon), 6, cylon_pos, (bool)is_ansi_console);
|
||||
|
||||
m->jobs_in_progress_iteration++;
|
||||
|
@ -1,84 +0,0 @@
|
||||
---
|
||||
src/core/shutdown.c | 4 ++++
|
||||
src/systemctl/systemctl.c | 18 ++++++++++++------
|
||||
2 files changed, 16 insertions(+), 6 deletions(-)
|
||||
|
||||
Index: systemd-227/src/core/shutdown.c
|
||||
===================================================================
|
||||
--- systemd-227.orig/src/core/shutdown.c
|
||||
+++ systemd-227/src/core/shutdown.c
|
||||
@@ -418,6 +418,10 @@ int main(int argc, char *argv[]) {
|
||||
}
|
||||
|
||||
reboot(cmd);
|
||||
+
|
||||
+ if (cmd == (int)RB_POWER_OFF)
|
||||
+ reboot(RB_HALT_SYSTEM);
|
||||
+
|
||||
if (errno == EPERM && in_container) {
|
||||
/* If we are in a container, and we lacked
|
||||
* CAP_SYS_BOOT just exit, this will kill our
|
||||
Index: systemd-227/src/systemctl/systemctl.c
|
||||
===================================================================
|
||||
--- systemd-227.orig/src/systemctl/systemctl.c
|
||||
+++ systemd-227/src/systemctl/systemctl.c
|
||||
@@ -94,6 +94,7 @@ static bool arg_no_pager = false;
|
||||
static bool arg_no_wtmp = false;
|
||||
static bool arg_no_wall = false;
|
||||
static bool arg_no_reload = false;
|
||||
+static bool arg_no_sync = false;
|
||||
static bool arg_show_types = false;
|
||||
static bool arg_ignore_inhibitors = false;
|
||||
static bool arg_dry = false;
|
||||
@@ -6938,6 +6939,7 @@ static int halt_parse_argv(int argc, cha
|
||||
{ "reboot", no_argument, NULL, ARG_REBOOT },
|
||||
{ "force", no_argument, NULL, 'f' },
|
||||
{ "wtmp-only", no_argument, NULL, 'w' },
|
||||
+ { "no-sync", no_argument, NULL, 'n' },
|
||||
{ "no-wtmp", no_argument, NULL, 'd' },
|
||||
{ "no-wall", no_argument, NULL, ARG_NO_WALL },
|
||||
{}
|
||||
@@ -6990,10 +6992,13 @@ static int halt_parse_argv(int argc, cha
|
||||
|
||||
case 'i':
|
||||
case 'h':
|
||||
- case 'n':
|
||||
/* Compatibility nops */
|
||||
break;
|
||||
|
||||
+ case 'n':
|
||||
+ arg_no_sync = true;
|
||||
+ break;
|
||||
+
|
||||
case '?':
|
||||
return -EINVAL;
|
||||
|
||||
@@ -7506,7 +7511,8 @@ static int halt_now(enum action a) {
|
||||
/* The kernel will automaticall flush ATA disks and suchlike
|
||||
* on reboot(), but the file systems need to be synce'd
|
||||
* explicitly in advance. */
|
||||
- (void) sync();
|
||||
+ if (!arg_no_sync)
|
||||
+ (void) sync();
|
||||
|
||||
/* Make sure C-A-D is handled by the kernel from this point
|
||||
* on... */
|
||||
@@ -7514,14 +7520,13 @@ static int halt_now(enum action a) {
|
||||
|
||||
switch (a) {
|
||||
|
||||
- case ACTION_HALT:
|
||||
- log_info("Halting.");
|
||||
- (void) reboot(RB_HALT_SYSTEM);
|
||||
- return -errno;
|
||||
-
|
||||
case ACTION_POWEROFF:
|
||||
log_info("Powering off.");
|
||||
(void) reboot(RB_POWER_OFF);
|
||||
+ /* fall-through */
|
||||
+ case ACTION_HALT:
|
||||
+ log_info("Halting.");
|
||||
+ (void) reboot(RB_HALT_SYSTEM);
|
||||
return -errno;
|
||||
|
||||
case ACTION_KEXEC:
|
@ -1,315 +0,0 @@
|
||||
Avoid possible race on NFS shares in which may that the network devices disappears
|
||||
before the associated NFS share becomes unmounted (bug #861489).
|
||||
To do this make sure that sys-subsystem-net-devices-<iface>.device used for the
|
||||
NFS share is added as "After=" dependency to the <nfs-share-mount-point>.mount.
|
||||
|
||||
---
|
||||
Makefile.am | 2
|
||||
src/core/mount-iface.c | 173 +++++++++++++++++++++++++++++++++++++++++++++++++
|
||||
src/core/mount-iface.h | 25 +++++++
|
||||
src/core/mount.c | 35 +++++++++
|
||||
4 files changed, 233 insertions(+), 2 deletions(-)
|
||||
|
||||
Index: systemd-228/Makefile.am
|
||||
===================================================================
|
||||
--- systemd-228.orig/Makefile.am
|
||||
+++ systemd-228/Makefile.am
|
||||
@@ -1223,6 +1223,8 @@ libcore_la_SOURCES = \
|
||||
src/core/machine-id-setup.h \
|
||||
src/core/mount-setup.c \
|
||||
src/core/mount-setup.h \
|
||||
+ src/core/mount-iface.c \
|
||||
+ src/core/mount-iface.h \
|
||||
src/core/kmod-setup.c \
|
||||
src/core/kmod-setup.h \
|
||||
src/core/loopback-setup.h \
|
||||
Index: systemd-228/src/core/mount-iface.c
|
||||
===================================================================
|
||||
--- /dev/null
|
||||
+++ systemd-228/src/core/mount-iface.c
|
||||
@@ -0,0 +1,173 @@
|
||||
+/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/
|
||||
+
|
||||
+/***
|
||||
+ This file is part of systemd.
|
||||
+
|
||||
+ Copyright 2014 Werner Fink
|
||||
+
|
||||
+ systemd is free software; you can redistribute it and/or modify it
|
||||
+ under the terms of the GNU Lesser General Public License as published by
|
||||
+ the Free Software Foundation; either version 2.1 of the License, or
|
||||
+ (at your option) any later version.
|
||||
+
|
||||
+ systemd is distributed in the hope that it will be useful, but
|
||||
+ WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
+ Lesser General Public License for more details.
|
||||
+
|
||||
+ You should have received a copy of the GNU Lesser General Public License
|
||||
+ along with systemd; If not, see <http://www.gnu.org/licenses/>.
|
||||
+***/
|
||||
+
|
||||
+/*
|
||||
+ * Find the name of the network interface to which a IP address belongs to.
|
||||
+ */
|
||||
+
|
||||
+#include <stdio.h>
|
||||
+#include <stdlib.h>
|
||||
+#include <string.h>
|
||||
+#include <arpa/inet.h>
|
||||
+#include <ifaddrs.h>
|
||||
+#include <net/if.h>
|
||||
+#include <assert.h>
|
||||
+
|
||||
+#include "log.h"
|
||||
+#include "def.h"
|
||||
+#include "mount-iface.h"
|
||||
+
|
||||
+static struct ifaddrs *ifa_list;
|
||||
+
|
||||
+_pure_ static unsigned int mask2prefix(const void* ipv6)
|
||||
+{
|
||||
+ unsigned int nippels = 0;
|
||||
+ unsigned int i;
|
||||
+
|
||||
+ assert(ipv6);
|
||||
+
|
||||
+ for (i = 0; i < sizeof(struct in6_addr); i++) {
|
||||
+ uint8_t byte = ((const uint8_t*)ipv6)[i];
|
||||
+ if (byte == 0xFF) {
|
||||
+ nippels += sizeof(uint8_t);
|
||||
+ continue;
|
||||
+ }
|
||||
+ while (byte & 0x80) {
|
||||
+ nippels++;
|
||||
+ byte <<= 1;
|
||||
+ }
|
||||
+ break;
|
||||
+ }
|
||||
+
|
||||
+ return nippels;
|
||||
+}
|
||||
+
|
||||
+static void netmask(unsigned int prefix, const void* in6, void* out6)
|
||||
+{
|
||||
+ unsigned int nippels;
|
||||
+ unsigned int i;
|
||||
+
|
||||
+ assert(in6);
|
||||
+ assert(out6);
|
||||
+
|
||||
+ for (i = 0; i < sizeof(struct in6_addr); i++) {
|
||||
+ nippels = (prefix < sizeof(uint8_t)) ? prefix : sizeof(uint8_t);
|
||||
+ ((uint8_t*)out6)[i] = ((const uint8_t*)in6)[i] & (0xFF00>>nippels);
|
||||
+ prefix -= nippels;
|
||||
+ }
|
||||
+}
|
||||
+
|
||||
+char *host2iface(const char *ip)
|
||||
+{
|
||||
+ const struct ifaddrs *ifa;
|
||||
+ uint32_t ip4 = 0;
|
||||
+ char *ret = NULL;
|
||||
+ struct search {
|
||||
+ union {
|
||||
+ struct in_addr addr;
|
||||
+ struct in6_addr addr6;
|
||||
+ };
|
||||
+ int family;
|
||||
+ } host;
|
||||
+ int r;
|
||||
+
|
||||
+ if (!ifa_list && (getifaddrs(&ifa_list) < 0)) {
|
||||
+ log_oom();
|
||||
+ goto err;
|
||||
+ }
|
||||
+
|
||||
+ if (strchr(ip, ':')) {
|
||||
+ r = inet_pton(AF_INET6, ip, &host.addr6);
|
||||
+ host.family = AF_INET6;
|
||||
+ } else {
|
||||
+ r = inet_pton(AF_INET, ip, &host.addr);
|
||||
+ host.family = AF_INET;
|
||||
+ }
|
||||
+
|
||||
+ if (r < 0) {
|
||||
+ log_error("Failed to convert IP address %s from text to binary: %m", ip);
|
||||
+ goto err;
|
||||
+ }
|
||||
+
|
||||
+ for (ifa = ifa_list; ifa != NULL; ifa = ifa->ifa_next) {
|
||||
+
|
||||
+ if (!ifa->ifa_addr)
|
||||
+ continue;
|
||||
+ if (ifa->ifa_flags & IFF_POINTOPOINT)
|
||||
+ continue;
|
||||
+ if (!ifa->ifa_addr)
|
||||
+ continue;
|
||||
+ if (!ifa->ifa_netmask)
|
||||
+ continue;
|
||||
+
|
||||
+ if (ifa->ifa_addr->sa_family == AF_INET) {
|
||||
+ uint32_t addr, dest, mask;
|
||||
+
|
||||
+ if (host.family != AF_INET)
|
||||
+ continue;
|
||||
+ if (!ifa->ifa_broadaddr)
|
||||
+ continue;
|
||||
+
|
||||
+ if (!ip4)
|
||||
+ ip4 = (uint32_t)ntohl(host.addr.s_addr);
|
||||
+
|
||||
+ addr = (uint32_t)ntohl(((struct sockaddr_in*)ifa->ifa_addr)->sin_addr.s_addr);
|
||||
+ if ((addr & 0xFF000000) == 0x7F000000) /* IPV4 loopback */
|
||||
+ continue;
|
||||
+
|
||||
+ mask = (uint32_t)ntohl(((struct sockaddr_in*)ifa->ifa_netmask)->sin_addr.s_addr);
|
||||
+ dest = (uint32_t)ntohl(((struct sockaddr_in*)ifa->ifa_broadaddr)->sin_addr.s_addr);
|
||||
+ if ((ip4 & mask) != (dest & mask))
|
||||
+ continue;
|
||||
+
|
||||
+ ret = ifa->ifa_name;
|
||||
+ break;
|
||||
+ } else if (ifa->ifa_addr->sa_family == AF_INET6) {
|
||||
+ struct in6_addr *addr, *mask, dest, ip6;
|
||||
+ unsigned int prefix;
|
||||
+
|
||||
+ if (host.family != AF_INET6)
|
||||
+ continue;
|
||||
+
|
||||
+ addr = &((struct sockaddr_in6*)ifa->ifa_addr)->sin6_addr;
|
||||
+ mask = &((struct sockaddr_in6*)ifa->ifa_netmask)->sin6_addr;
|
||||
+ prefix = mask2prefix(mask);
|
||||
+
|
||||
+ netmask(prefix, addr, &dest);
|
||||
+ netmask(prefix, &host.addr6, &ip6);
|
||||
+
|
||||
+ if (memcmp(&dest, &ip6, sizeof(struct in6_addr)) != 0)
|
||||
+ continue;
|
||||
+
|
||||
+ ret = ifa->ifa_name;
|
||||
+ break;
|
||||
+ }
|
||||
+ }
|
||||
+err:
|
||||
+ return ret;
|
||||
+}
|
||||
+
|
||||
+void freeroutes(void)
|
||||
+{
|
||||
+ if (ifa_list)
|
||||
+ freeifaddrs(ifa_list);
|
||||
+ ifa_list = NULL;
|
||||
+}
|
||||
Index: systemd-228/src/core/mount-iface.h
|
||||
===================================================================
|
||||
--- /dev/null
|
||||
+++ systemd-228/src/core/mount-iface.h
|
||||
@@ -0,0 +1,25 @@
|
||||
+/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/
|
||||
+
|
||||
+#pragma once
|
||||
+
|
||||
+/***
|
||||
+ This file is part of systemd.
|
||||
+
|
||||
+ Copyright 2014 Werner Fink
|
||||
+
|
||||
+ systemd is free software; you can redistribute it and/or modify it
|
||||
+ under the terms of the GNU Lesser General Public License as published by
|
||||
+ the Free Software Foundation; either version 2.1 of the License, or
|
||||
+ (at your option) any later version.
|
||||
+
|
||||
+ systemd is distributed in the hope that it will be useful, but
|
||||
+ WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
+ Lesser General Public License for more details.
|
||||
+
|
||||
+ You should have received a copy of the GNU Lesser General Public License
|
||||
+ along with systemd; If not, see <http://www.gnu.org/licenses/>.
|
||||
+***/
|
||||
+
|
||||
+char *host2iface(const char *ip);
|
||||
+void freeroutes(void);
|
||||
Index: systemd-228/src/core/mount.c
|
||||
===================================================================
|
||||
--- systemd-228.orig/src/core/mount.c
|
||||
+++ systemd-228/src/core/mount.c
|
||||
@@ -36,6 +36,7 @@
|
||||
#include "manager.h"
|
||||
#include "mkdir.h"
|
||||
#include "mount-setup.h"
|
||||
+#include "mount-iface.h"
|
||||
#include "mount-util.h"
|
||||
#include "mount.h"
|
||||
#include "parse-util.h"
|
||||
@@ -1344,8 +1345,9 @@ static int mount_setup_unit(
|
||||
_cleanup_free_ char *e = NULL, *w = NULL, *o = NULL, *f = NULL;
|
||||
bool load_extras = false;
|
||||
MountParameters *p;
|
||||
- bool delete, changed = false;
|
||||
+ bool delete, changed = false, isnetwork;
|
||||
Unit *u;
|
||||
+ char *c;
|
||||
int r;
|
||||
|
||||
assert(m);
|
||||
@@ -1370,6 +1372,8 @@ static int mount_setup_unit(
|
||||
if (r < 0)
|
||||
return r;
|
||||
|
||||
+ isnetwork = fstype_is_network(fstype);
|
||||
+
|
||||
u = manager_get_unit(m, e);
|
||||
if (!u) {
|
||||
delete = true;
|
||||
@@ -1397,7 +1401,7 @@ static int mount_setup_unit(
|
||||
if (m->running_as == MANAGER_SYSTEM) {
|
||||
const char* target;
|
||||
|
||||
- target = mount_needs_network(options, fstype) ? SPECIAL_REMOTE_FS_TARGET : SPECIAL_LOCAL_FS_TARGET;
|
||||
+ target = isnetwork ? SPECIAL_REMOTE_FS_TARGET : SPECIAL_LOCAL_FS_TARGET;
|
||||
r = unit_add_dependency_by_name(u, UNIT_BEFORE, target, NULL, true);
|
||||
if (r < 0)
|
||||
goto fail;
|
||||
@@ -1483,6 +1487,32 @@ static int mount_setup_unit(
|
||||
goto fail;
|
||||
}
|
||||
|
||||
+ if (isnetwork && (c = strrchr(p->what, ':')) && *(c+1) == '/') {
|
||||
+ _cleanup_free_ char *opt = strdup(p->options);
|
||||
+ char *addr;
|
||||
+
|
||||
+ if (opt && (addr = strstr(opt, ",addr="))) {
|
||||
+ char *colon, *iface;
|
||||
+
|
||||
+ addr += 6;
|
||||
+ if ((colon = strchr(addr, ',')))
|
||||
+ *colon = '\0';
|
||||
+
|
||||
+ iface = host2iface(addr);
|
||||
+ if (iface) {
|
||||
+ _cleanup_free_ char* target = NULL;
|
||||
+ if (asprintf(&target, "sys-subsystem-net-devices-%s.device", iface) < 0)
|
||||
+ log_oom();
|
||||
+ else {
|
||||
+ r = unit_add_dependency_by_name(u, UNIT_AFTER, target, NULL, true);
|
||||
+ if (r < 0)
|
||||
+ log_unit_error(u, "Failed to add dependency on %s, ignoring: %s",
|
||||
+ target, strerror(-r));
|
||||
+ }
|
||||
+ }
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
if (changed)
|
||||
unit_add_to_dbus_queue(u);
|
||||
|
||||
@@ -1549,6 +1579,7 @@ static int mount_load_proc_self_mountinf
|
||||
if (r == 0 && k < 0)
|
||||
r = k;
|
||||
}
|
||||
+ freeroutes(); /* Just in case of using the routing table with host2iface() */
|
||||
|
||||
return r;
|
||||
}
|
@ -1,21 +0,0 @@
|
||||
---
|
||||
src/login/logind-session.c | 6 ++++++
|
||||
1 file changed, 6 insertions(+)
|
||||
|
||||
Index: systemd-221/src/login/logind-session.c
|
||||
===================================================================
|
||||
--- systemd-221.orig/src/login/logind-session.c
|
||||
+++ systemd-221/src/login/logind-session.c
|
||||
@@ -548,6 +548,12 @@ int session_start(Session *s) {
|
||||
if (r < 0)
|
||||
return r;
|
||||
|
||||
+ if (!s->user->slice) {
|
||||
+ if (errno)
|
||||
+ return -errno;
|
||||
+ return -ESTALE;
|
||||
+ }
|
||||
+
|
||||
/* Create cgroup */
|
||||
r = session_start_scope(s);
|
||||
if (r < 0)
|
@ -1,101 +0,0 @@
|
||||
---
|
||||
src/login/logind-action.c | 5 +++++
|
||||
src/login/logind-dbus.c | 31 +++++++++++++++++++++++--------
|
||||
2 files changed, 28 insertions(+), 8 deletions(-)
|
||||
|
||||
Index: systemd-227/src/login/logind-action.c
|
||||
===================================================================
|
||||
--- systemd-227.orig/src/login/logind-action.c
|
||||
+++ systemd-227/src/login/logind-action.c
|
||||
@@ -85,6 +85,11 @@ int manager_handle_action(
|
||||
|
||||
/* If the key handling is inhibited, don't do anything */
|
||||
if (inhibit_key > 0) {
|
||||
+ if (inhibit_key == INHIBIT_HANDLE_POWER_KEY) {
|
||||
+ int fd;
|
||||
+ fd = open("/run/systemd/acpi-shutdown", O_CREAT|O_WRONLY|O_TRUNC, S_IRUSR);
|
||||
+ close(fd);
|
||||
+ }
|
||||
if (manager_is_inhibited(m, inhibit_key, INHIBIT_BLOCK, NULL, true, false, 0, NULL)) {
|
||||
log_debug("Refusing operation, %s is inhibited.", inhibit_what_to_string(inhibit_key));
|
||||
return 0;
|
||||
Index: systemd-227/src/login/logind-dbus.c
|
||||
===================================================================
|
||||
--- systemd-227.orig/src/login/logind-dbus.c
|
||||
+++ systemd-227/src/login/logind-dbus.c
|
||||
@@ -1646,12 +1646,13 @@ static int verify_shutdown_creds(
|
||||
const char *action,
|
||||
const char *action_multiple_sessions,
|
||||
const char *action_ignore_inhibit,
|
||||
- sd_bus_error *error) {
|
||||
+ sd_bus_error *error, const char *sleep_verb) {
|
||||
|
||||
_cleanup_bus_creds_unref_ sd_bus_creds *creds = NULL;
|
||||
- bool multiple_sessions, blocked;
|
||||
+ bool multiple_sessions, blocked, shutdown_through_acpi;
|
||||
uid_t uid;
|
||||
- int r;
|
||||
+ int r, fd;
|
||||
+ struct stat buf;
|
||||
|
||||
assert(m);
|
||||
assert(message);
|
||||
@@ -1673,7 +1674,19 @@ static int verify_shutdown_creds(
|
||||
multiple_sessions = r > 0;
|
||||
blocked = manager_is_inhibited(m, w, INHIBIT_BLOCK, NULL, false, true, uid, NULL);
|
||||
|
||||
- if (multiple_sessions && action_multiple_sessions) {
|
||||
+ fd = open ("/run/systemd/acpi-shutdown", O_NOFOLLOW|O_PATH|O_CLOEXEC);
|
||||
+ if (fd >= 0) {
|
||||
+ shutdown_through_acpi = fstat(fd, &buf) == 0 &&
|
||||
+ time(NULL) - buf.st_mtime <= 65 &&
|
||||
+ sleep_verb == NULL;
|
||||
+ close(fd);
|
||||
+ unlink ("/run/systemd/acpi-shutdown");
|
||||
+ }
|
||||
+ else
|
||||
+ shutdown_through_acpi = false;
|
||||
+
|
||||
+ if (multiple_sessions && action_multiple_sessions &&
|
||||
+ !shutdown_through_acpi) {
|
||||
r = bus_verify_polkit_async(message, CAP_SYS_BOOT, action_multiple_sessions, NULL, interactive, UID_INVALID, &m->polkit_registry, error);
|
||||
if (r < 0)
|
||||
return r;
|
||||
@@ -1681,7 +1694,7 @@ static int verify_shutdown_creds(
|
||||
return 1; /* No authorization for now, but the async polkit stuff will call us again when it has it */
|
||||
}
|
||||
|
||||
- if (blocked && action_ignore_inhibit) {
|
||||
+ if (blocked && action_ignore_inhibit && !shutdown_through_acpi) {
|
||||
r = bus_verify_polkit_async(message, CAP_SYS_BOOT, action_ignore_inhibit, NULL, interactive, UID_INVALID, &m->polkit_registry, error);
|
||||
if (r < 0)
|
||||
return r;
|
||||
@@ -1689,7 +1702,8 @@ static int verify_shutdown_creds(
|
||||
return 1; /* No authorization for now, but the async polkit stuff will call us again when it has it */
|
||||
}
|
||||
|
||||
- if (!multiple_sessions && !blocked && action) {
|
||||
+ if (!multiple_sessions && !blocked && action &&
|
||||
+ !shutdown_through_acpi) {
|
||||
r = bus_verify_polkit_async(message, CAP_SYS_BOOT, action, NULL, interactive, UID_INVALID, &m->polkit_registry, error);
|
||||
if (r < 0)
|
||||
return r;
|
||||
@@ -1737,7 +1751,7 @@ static int method_do_shutdown_or_sleep(
|
||||
}
|
||||
|
||||
r = verify_shutdown_creds(m, message, w, interactive, action, action_multiple_sessions,
|
||||
- action_ignore_inhibit, error);
|
||||
+ action_ignore_inhibit, error, sleep_verb);
|
||||
if (r != 0)
|
||||
return r;
|
||||
|
||||
@@ -1931,7 +1945,8 @@ static int method_schedule_shutdown(sd_b
|
||||
return sd_bus_error_setf(error, SD_BUS_ERROR_INVALID_ARGS, "Unsupported shutdown type");
|
||||
|
||||
r = verify_shutdown_creds(m, message, INHIBIT_SHUTDOWN, false,
|
||||
- action, action_multiple_sessions, action_ignore_inhibit, error);
|
||||
+ action, action_multiple_sessions,
|
||||
+ action_ignore_inhibit, error, "UNUSED");
|
||||
if (r != 0)
|
||||
return r;
|
||||
|
@ -1,54 +0,0 @@
|
||||
From 1b4cd0cf11feb7d41f2eff17f86fa55b31bb6841 Mon Sep 17 00:00:00 2001
|
||||
From: Lennart Poettering <lennart@poettering.net>
|
||||
Date: Thu, 18 Feb 2016 22:51:23 +0100
|
||||
Subject: [PATCH] core: exclude .slice units from "systemctl isolate"
|
||||
|
||||
Fixes: #1969
|
||||
---
|
||||
src/core/scope.c | 3 +--
|
||||
src/core/slice.c | 8 ++++++++
|
||||
2 files changed, 9 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git src/core/scope.c src/core/scope.c
|
||||
index c5d0ece..361695c 100644
|
||||
--- a/src/core/scope.c
|
||||
+++ b/src/core/scope.c
|
||||
@@ -50,8 +50,7 @@ static void scope_init(Unit *u) {
|
||||
assert(u->load_state == UNIT_STUB);
|
||||
|
||||
s->timeout_stop_usec = u->manager->default_timeout_stop_usec;
|
||||
-
|
||||
- UNIT(s)->ignore_on_isolate = true;
|
||||
+ u->ignore_on_isolate = true;
|
||||
}
|
||||
|
||||
static void scope_done(Unit *u) {
|
||||
diff --git src/core/slice.c src/core/slice.c
|
||||
index d65364c..667f61b 100644
|
||||
--- a/src/core/slice.c
|
||||
+++ b/src/core/slice.c
|
||||
@@ -34,6 +34,13 @@ static const UnitActiveState state_translation_table[_SLICE_STATE_MAX] = {
|
||||
[SLICE_ACTIVE] = UNIT_ACTIVE
|
||||
};
|
||||
|
||||
+static void slice_init(Unit *u) {
|
||||
+ assert(u);
|
||||
+ assert(u->load_state == UNIT_STUB);
|
||||
+
|
||||
+ u->ignore_on_isolate = true;
|
||||
+}
|
||||
+
|
||||
static void slice_set_state(Slice *t, SliceState state) {
|
||||
SliceState old_state;
|
||||
assert(t);
|
||||
@@ -305,6 +312,7 @@ const UnitVTable slice_vtable = {
|
||||
.no_instances = true,
|
||||
.can_transient = true,
|
||||
|
||||
+ .init = slice_init,
|
||||
.load = slice_load,
|
||||
|
||||
.coldplug = slice_coldplug,
|
||||
--
|
||||
2.6.2
|
||||
|
@ -1,193 +0,0 @@
|
||||
From d8ccf5fdc91c46ab5d0ae86e38c206bc508d4188 Mon Sep 17 00:00:00 2001 [> v228]
|
||||
From: Daniel Mack <daniel@zonque.org>
|
||||
Date: Fri, 18 Dec 2015 17:28:15 +0100
|
||||
Subject: [PATCH] core: fix bus name synchronization after daemon-reload
|
||||
|
||||
During daemon-reload, PID1 temporarly loses its DBus connection, so there's
|
||||
a small window in which all signals sent by dbus-daemon are lost.
|
||||
|
||||
This is a problem, since we rely on the NameOwnerChanged signals in order to
|
||||
consider a service with Type=dbus fully started or terminated, respectively.
|
||||
|
||||
In order to fix this, a rewrite of bus_list_names() is necessary. We used
|
||||
to walk the current list of names on the bus, and blindly triggered the
|
||||
bus_name_owner_change() callback on each service, providing the actual name
|
||||
as current owner. This implementation has a number of problems:
|
||||
|
||||
* We cannot detect if the the name was moved from one owner to the other
|
||||
while we were reloading
|
||||
|
||||
* We don't notify services which missed the name loss signal
|
||||
|
||||
* Providing the actual name as current owner is a hack, as the comment also
|
||||
admits.
|
||||
|
||||
To fix this, this patch carries the following changes:
|
||||
|
||||
* Track the name of the current bus name owner, and (de-)serialize it
|
||||
during reload. This way, we can detect changes.
|
||||
|
||||
* In bus_list_names(), walk the list of bus names we're interested in
|
||||
first, and then see if the name is active on the bus. If it is,
|
||||
check it it's still the same as it used to be, and synthesize
|
||||
NameOwnerChanged signals for the name add and/or loss.
|
||||
|
||||
This should fully synchronize the current name list with the internal
|
||||
state of all services.
|
||||
---
|
||||
src/core/dbus.c | 64 +++++++++++++++++++++++++++++++++++++++++++++---------
|
||||
src/core/service.c | 14 ++++++++++++
|
||||
src/core/service.h | 1 +
|
||||
3 files changed, 69 insertions(+), 10 deletions(-)
|
||||
|
||||
diff --git a/src/core/dbus.c b/src/core/dbus.c
|
||||
index e7ee216..58069f5 100644
|
||||
--- a/src/core/dbus.c
|
||||
+++ b/src/core/dbus.c
|
||||
@@ -736,7 +736,9 @@ static int bus_on_connection(sd_event_source *s, int fd, uint32_t revents, void
|
||||
|
||||
static int bus_list_names(Manager *m, sd_bus *bus) {
|
||||
_cleanup_strv_free_ char **names = NULL;
|
||||
- char **i;
|
||||
+ const char *name;
|
||||
+ Iterator i;
|
||||
+ Unit *u;
|
||||
int r;
|
||||
|
||||
assert(m);
|
||||
@@ -746,15 +748,55 @@ static int bus_list_names(Manager *m, sd_bus *bus) {
|
||||
if (r < 0)
|
||||
return log_error_errno(r, "Failed to get initial list of names: %m");
|
||||
|
||||
- /* This is a bit hacky, we say the owner of the name is the
|
||||
- * name itself, because we don't want the extra traffic to
|
||||
- * figure out the real owner. */
|
||||
- STRV_FOREACH(i, names) {
|
||||
- Unit *u;
|
||||
+ /* We have to synchronize the current bus names with the
|
||||
+ * list of active services. To do this, walk the list of
|
||||
+ * all units with bus names. */
|
||||
+ HASHMAP_FOREACH_KEY(u, name, m->watch_bus, i) {
|
||||
+ Service *s = SERVICE(u);
|
||||
+
|
||||
+ assert(s);
|
||||
|
||||
- u = hashmap_get(m->watch_bus, *i);
|
||||
- if (u)
|
||||
- UNIT_VTABLE(u)->bus_name_owner_change(u, *i, NULL, *i);
|
||||
+ if (!streq_ptr(s->bus_name, name)) {
|
||||
+ log_unit_warning(u, "Bus name has changed from %s → %s, ignoring.", s->bus_name, name);
|
||||
+ continue;
|
||||
+ }
|
||||
+
|
||||
+ /* Check if a service's bus name is in the list of currently
|
||||
+ * active names */
|
||||
+ if (strv_contains(names, name)) {
|
||||
+ _cleanup_(sd_bus_creds_unrefp) sd_bus_creds *creds = NULL;
|
||||
+ const char *unique;
|
||||
+
|
||||
+ /* If it is, determine its current owner */
|
||||
+ r = sd_bus_get_name_creds(bus, name, SD_BUS_CREDS_UNIQUE_NAME, &creds);
|
||||
+ if (r < 0) {
|
||||
+ log_error_errno(r, "Failed to get bus name owner %s: %m", name);
|
||||
+ continue;
|
||||
+ }
|
||||
+
|
||||
+ r = sd_bus_creds_get_unique_name(creds, &unique);
|
||||
+ if (r < 0) {
|
||||
+ log_error_errno(r, "Failed to get unique name for %s: %m", name);
|
||||
+ continue;
|
||||
+ }
|
||||
+
|
||||
+ /* Now, let's compare that to the previous bus owner, and
|
||||
+ * if it's still the same, all is fine, so just don't
|
||||
+ * bother the service. Otherwise, the name has apparently
|
||||
+ * changed, so synthesize a name owner changed signal. */
|
||||
+
|
||||
+ if (!streq_ptr(unique, s->bus_name_owner))
|
||||
+ UNIT_VTABLE(u)->bus_name_owner_change(u, name, s->bus_name_owner, unique);
|
||||
+ } else {
|
||||
+ /* So, the name we're watching is not on the bus.
|
||||
+ * This either means it simply hasn't appeared yet,
|
||||
+ * or it was lost during the daemon reload.
|
||||
+ * Check if the service has a stored name owner,
|
||||
+ * and synthesize a name loss signal in this case. */
|
||||
+
|
||||
+ if (s->bus_name_owner)
|
||||
+ UNIT_VTABLE(u)->bus_name_owner_change(u, name, s->bus_name_owner, NULL);
|
||||
+ }
|
||||
}
|
||||
|
||||
return 0;
|
||||
@@ -808,7 +850,9 @@ static int bus_setup_api(Manager *m, sd_bus *bus) {
|
||||
if (r < 0)
|
||||
return log_error_errno(r, "Failed to register name: %m");
|
||||
|
||||
- bus_list_names(m, bus);
|
||||
+ r = bus_list_names(m, bus);
|
||||
+ if (r < 0)
|
||||
+ return r;
|
||||
|
||||
log_debug("Successfully connected to API bus.");
|
||||
return 0;
|
||||
diff --git a/src/core/service.c b/src/core/service.c
|
||||
index 41a729c..c5b689a 100644
|
||||
--- a/src/core/service.c
|
||||
+++ b/src/core/service.c
|
||||
@@ -323,6 +323,8 @@ static void service_done(Unit *u) {
|
||||
s->bus_name = mfree(s->bus_name);
|
||||
}
|
||||
|
||||
+ s->bus_name_owner = mfree(s->bus_name_owner);
|
||||
+
|
||||
s->bus_endpoint_fd = safe_close(s->bus_endpoint_fd);
|
||||
service_close_socket_fd(s);
|
||||
service_connection_unref(s);
|
||||
@@ -2122,6 +2124,7 @@ static int service_serialize(Unit *u, FILE *f, FDSet *fds) {
|
||||
|
||||
unit_serialize_item(u, f, "main-pid-known", yes_no(s->main_pid_known));
|
||||
unit_serialize_item(u, f, "bus-name-good", yes_no(s->bus_name_good));
|
||||
+ unit_serialize_item(u, f, "bus-name-owner", s->bus_name_owner);
|
||||
|
||||
r = unit_serialize_item_escaped(u, f, "status-text", s->status_text);
|
||||
if (r < 0)
|
||||
@@ -2249,6 +2252,10 @@ static int service_deserialize_item(Unit *u, const char *key, const char *value,
|
||||
log_unit_debug(u, "Failed to parse bus-name-good value: %s", value);
|
||||
else
|
||||
s->bus_name_good = b;
|
||||
+ } else if (streq(key, "bus-name-owner")) {
|
||||
+ r = free_and_strdup(&s->bus_name_owner, value);
|
||||
+ if (r < 0)
|
||||
+ log_unit_error_errno(u, r, "Unable to deserialize current bus owner %s: %m", value);
|
||||
} else if (streq(key, "status-text")) {
|
||||
char *t;
|
||||
|
||||
@@ -3134,6 +3141,13 @@ static void service_bus_name_owner_change(
|
||||
|
||||
s->bus_name_good = !!new_owner;
|
||||
|
||||
+ /* Track the current owner, so we can reconstruct changes after a daemon reload */
|
||||
+ r = free_and_strdup(&s->bus_name_owner, new_owner);
|
||||
+ if (r < 0) {
|
||||
+ log_unit_error_errno(u, r, "Unable to set new bus name owner %s: %m", new_owner);
|
||||
+ return;
|
||||
+ }
|
||||
+
|
||||
if (s->type == SERVICE_DBUS) {
|
||||
|
||||
/* service_enter_running() will figure out what to
|
||||
diff --git a/src/core/service.h b/src/core/service.h
|
||||
index d0faad8..19efbcc 100644
|
||||
--- a/src/core/service.h
|
||||
+++ b/src/core/service.h
|
||||
@@ -172,6 +172,7 @@ struct Service {
|
||||
bool reset_cpu_usage:1;
|
||||
|
||||
char *bus_name;
|
||||
+ char *bus_name_owner; /* unique name of the current owner */
|
||||
|
||||
char *status_text;
|
||||
int status_errno;
|
||||
--
|
||||
2.6.2
|
||||
|
@ -1,74 +0,0 @@
|
||||
From 8936a5e34dbfa9274348f3fef99f7c9f9327ddf9 Mon Sep 17 00:00:00 2001 [> v228]
|
||||
From: Daniel Mack <daniel@zonque.org>
|
||||
Date: Tue, 22 Dec 2015 11:37:09 +0100
|
||||
Subject: [PATCH] core: re-sync bus name list after deserializing during
|
||||
daemon-reload
|
||||
|
||||
When the daemon reloads, it doesn not actually give up its DBus connection,
|
||||
as wrongly stated in an earlier commit. However, even though the bus
|
||||
connection stays open, the daemon flushes out all its internal state.
|
||||
|
||||
Hence, if there is a NameOwnerChanged signal after the flush and before the
|
||||
deserialization, it cannot be matched against any pending unit.
|
||||
|
||||
To fix this, rename bus_list_names() to manager_sync_bus_names() and call
|
||||
it explicitly at the end of the daemon reload operation.
|
||||
---
|
||||
src/core/dbus.c | 4 ++--
|
||||
src/core/dbus.h | 2 ++
|
||||
src/core/manager.c | 4 ++++
|
||||
3 files changed, 8 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/src/core/dbus.c b/src/core/dbus.c
|
||||
index 58069f5..1d89b9e 100644
|
||||
--- a/src/core/dbus.c
|
||||
+++ b/src/core/dbus.c
|
||||
@@ -734,7 +734,7 @@ static int bus_on_connection(sd_event_source *s, int fd, uint32_t revents, void
|
||||
return 0;
|
||||
}
|
||||
|
||||
-static int bus_list_names(Manager *m, sd_bus *bus) {
|
||||
+int manager_sync_bus_names(Manager *m, sd_bus *bus) {
|
||||
_cleanup_strv_free_ char **names = NULL;
|
||||
const char *name;
|
||||
Iterator i;
|
||||
@@ -850,7 +850,7 @@ static int bus_setup_api(Manager *m, sd_bus *bus) {
|
||||
if (r < 0)
|
||||
return log_error_errno(r, "Failed to register name: %m");
|
||||
|
||||
- r = bus_list_names(m, bus);
|
||||
+ r = manager_sync_bus_names(m, bus);
|
||||
if (r < 0)
|
||||
return r;
|
||||
|
||||
diff --git a/src/core/dbus.h b/src/core/dbus.h
|
||||
index 4f06ad1..ff76166 100644
|
||||
--- a/src/core/dbus.h
|
||||
+++ b/src/core/dbus.h
|
||||
@@ -34,6 +34,8 @@ void bus_track_serialize(sd_bus_track *t, FILE *f);
|
||||
int bus_track_deserialize_item(char ***l, const char *line);
|
||||
int bus_track_coldplug(Manager *m, sd_bus_track **t, char ***l);
|
||||
|
||||
+int manager_sync_bus_names(Manager *m, sd_bus *bus);
|
||||
+
|
||||
int bus_foreach_bus(Manager *m, sd_bus_track *subscribed2, int (*send_message)(sd_bus *bus, void *userdata), void *userdata);
|
||||
|
||||
int bus_verify_manage_units_async(Manager *m, sd_bus_message *call, sd_bus_error *error);
|
||||
diff --git a/src/core/manager.c b/src/core/manager.c
|
||||
index e65616a..ffe27be 100644
|
||||
--- a/src/core/manager.c
|
||||
+++ b/src/core/manager.c
|
||||
@@ -2574,6 +2574,10 @@ int manager_reload(Manager *m) {
|
||||
/* Third, fire things up! */
|
||||
manager_coldplug(m);
|
||||
|
||||
+ /* Sync current state of bus names with our set of listening units */
|
||||
+ if (m->api_bus)
|
||||
+ manager_sync_bus_names(m, m->api_bus);
|
||||
+
|
||||
assert(m->n_reloading > 0);
|
||||
m->n_reloading--;
|
||||
|
||||
--
|
||||
2.6.2
|
||||
|
@ -1,54 +0,0 @@
|
||||
From 6dac79e09ec1b45f05b3e9a5f1f445859b6eefd2 Mon Sep 17 00:00:00 2001
|
||||
From: Franck Bui <fbui@suse.com>
|
||||
Date: Fri, 23 Sep 2016 13:33:01 +0200
|
||||
Subject: [PATCH 1/1] journal: fix HMAC calculation when appending a data
|
||||
object
|
||||
|
||||
Since commit 5996c7c295e073ce21d41305169132c8aa993ad0 (v190 !), the
|
||||
calculation of the HMAC is broken because the hash for a data object
|
||||
including a field is done in the wrong order: the field object is
|
||||
hashed before the data object is.
|
||||
|
||||
However during verification, the hash is done in the opposite order as
|
||||
objects are scanned sequentially.
|
||||
|
||||
(cherry picked from commit 33685a5a3a98c6ded64d0cc25e37d0180ceb0a6a)
|
||||
|
||||
[fbui: fixes bsc#1000435]
|
||||
---
|
||||
src/journal/journal-file.c | 12 ++++++------
|
||||
1 file changed, 6 insertions(+), 6 deletions(-)
|
||||
|
||||
diff --git a/src/journal/journal-file.c b/src/journal/journal-file.c
|
||||
index a9882cf..a24d97d 100644
|
||||
--- a/src/journal/journal-file.c
|
||||
+++ b/src/journal/journal-file.c
|
||||
@@ -1111,6 +1111,12 @@ static int journal_file_append_data(
|
||||
if (r < 0)
|
||||
return r;
|
||||
|
||||
+#ifdef HAVE_GCRYPT
|
||||
+ r = journal_file_hmac_put_object(f, OBJECT_DATA, o, p);
|
||||
+ if (r < 0)
|
||||
+ return r;
|
||||
+#endif
|
||||
+
|
||||
/* The linking might have altered the window, so let's
|
||||
* refresh our pointer */
|
||||
r = journal_file_move_to_object(f, OBJECT_DATA, p, &o);
|
||||
@@ -1135,12 +1141,6 @@ static int journal_file_append_data(
|
||||
fo->field.head_data_offset = le64toh(p);
|
||||
}
|
||||
|
||||
-#ifdef HAVE_GCRYPT
|
||||
- r = journal_file_hmac_put_object(f, OBJECT_DATA, o, p);
|
||||
- if (r < 0)
|
||||
- return r;
|
||||
-#endif
|
||||
-
|
||||
if (ret)
|
||||
*ret = o;
|
||||
|
||||
--
|
||||
2.10.0
|
||||
|
@ -1,93 +0,0 @@
|
||||
From 0d0bad044f8f19c472acb69d10861a66d3d267b6 Mon Sep 17 00:00:00 2001
|
||||
From: Vito Caputo <vcaputo@gnugeneration.com>
|
||||
Date: Tue, 26 Apr 2016 23:29:43 -0700
|
||||
Subject: [PATCH 1/1] journal: set STATE_ARCHIVED as part of offlining (#2740)
|
||||
|
||||
The only code path which makes a journal durable is via
|
||||
journal_file_set_offline().
|
||||
|
||||
When we perform a rotate the journal's header->state is being set to
|
||||
STATE_ARCHIVED prior to journal_file_set_offline() being called.
|
||||
|
||||
In journal_file_set_offline(), we short-circuit the entire offline when
|
||||
f->header->state != STATE_ONLINE.
|
||||
|
||||
This all results in none of the journal_file_set_offline() fsync() calls
|
||||
being reached when rotate archives a journal, so archived journals are
|
||||
never explicitly made durable.
|
||||
|
||||
What we do now is instead of setting the f->header->state to
|
||||
STATE_ARCHIVED directly in journal_file_rotate() prior to
|
||||
journal_file_close(), we set an archive flag in f->archive for the
|
||||
journal_file_set_offline() machinery to honor by committing
|
||||
STATE_ARCHIVED instead of STATE_OFFLINE when set.
|
||||
|
||||
Prior to this, rotated journals were never getting fsync() explicitly
|
||||
performed on them, since journal_file_set_offline() short-circuited.
|
||||
Obviously this is undesirable, and depends entirely on the underlying
|
||||
filesystem as to how much durability was achieved when simply closing
|
||||
the file.
|
||||
|
||||
Note that this problem existed prior to the recent asynchronous fsync
|
||||
changes, but those changes do facilitate our performing this durable
|
||||
offline on rotate without blocking, regardless of the underlying
|
||||
filesystem sync-on-close semantics.
|
||||
|
||||
(cherry picked from commit 8eb851711fd166024297c425e9261200c36f489d)
|
||||
|
||||
[fbui: context adjustment: the asynchronous journal_file_set_offline()
|
||||
thingie doesn't exist in v228]
|
||||
|
||||
[fbui: this also fixes the case when we wanted to append a tag (for
|
||||
FSS verification) when closing the journal. Before this patch,
|
||||
journal_file_append_tag() failed (silently) because re-opening
|
||||
the journal to write the tag was not possible since it was
|
||||
already in "archived" mode.]
|
||||
---
|
||||
src/journal/journal-file.c | 10 ++++++++--
|
||||
src/journal/journal-file.h | 1 +
|
||||
2 files changed, 9 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/src/journal/journal-file.c b/src/journal/journal-file.c
|
||||
index f9ff954..e7eecad 100644
|
||||
--- a/src/journal/journal-file.c
|
||||
+++ b/src/journal/journal-file.c
|
||||
@@ -130,7 +130,7 @@ int journal_file_set_offline(JournalFile *f) {
|
||||
if (mmap_cache_got_sigbus(f->mmap, f->fd))
|
||||
return -EIO;
|
||||
|
||||
- f->header->state = STATE_OFFLINE;
|
||||
+ f->header->state = f->archive ? STATE_ARCHIVED : STATE_OFFLINE;
|
||||
|
||||
if (mmap_cache_got_sigbus(f->mmap, f->fd))
|
||||
return -EIO;
|
||||
@@ -2813,7 +2813,13 @@ int journal_file_rotate(JournalFile **f, bool compress, bool seal) {
|
||||
if (r < 0 && errno != ENOENT)
|
||||
return -errno;
|
||||
|
||||
- old_file->header->state = STATE_ARCHIVED;
|
||||
+ /* Set as archive so offlining commits w/state=STATE_ARCHIVED.
|
||||
+ * Previously we would set old_file->header->state to STATE_ARCHIVED directly here,
|
||||
+ * but journal_file_set_offline() short-circuits when state != STATE_ONLINE, which
|
||||
+ * would result in the rotated journal never getting fsync() called before closing.
|
||||
+ * Now we simply queue the archive state by setting an archive bit, leaving the state
|
||||
+ * as STATE_ONLINE so proper offlining occurs. */
|
||||
+ old_file->archive = true;
|
||||
|
||||
/* Currently, btrfs is not very good with out write patterns
|
||||
* and fragments heavily. Let's defrag our journal files when
|
||||
diff --git a/src/journal/journal-file.h b/src/journal/journal-file.h
|
||||
index 898d12d..436e5ff 100644
|
||||
--- a/src/journal/journal-file.h
|
||||
+++ b/src/journal/journal-file.h
|
||||
@@ -76,6 +76,7 @@ typedef struct JournalFile {
|
||||
bool compress_lz4:1;
|
||||
bool seal:1;
|
||||
bool defrag_on_close:1;
|
||||
+ bool archive:1;
|
||||
|
||||
bool tail_entry_monotonic_valid:1;
|
||||
|
||||
--
|
||||
2.10.0
|
||||
|
@ -1,36 +0,0 @@
|
||||
From 9f47fe6b6a9aad001e99f1fdea78a0c54ce8ae55 Mon Sep 17 00:00:00 2001
|
||||
From: Franck Bui <fbui@suse.com>
|
||||
Date: Fri, 23 Sep 2016 12:12:13 +0200
|
||||
Subject: [PATCH 1/1] journal: warn when we fail to append a tag to a journal
|
||||
|
||||
We shouldn't silently fail when appending the tag to a journal file
|
||||
since FSS protection will simply be disabled in this case.
|
||||
|
||||
(cherry picked from commit 43cd8794839548a6f332875e8bee8bed2652bf2c)
|
||||
---
|
||||
src/journal/journal-file.c | 9 +++++++--
|
||||
1 file changed, 7 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/src/journal/journal-file.c b/src/journal/journal-file.c
|
||||
index e7eecad..a9882cf 100644
|
||||
--- a/src/journal/journal-file.c
|
||||
+++ b/src/journal/journal-file.c
|
||||
@@ -145,8 +145,13 @@ JournalFile* journal_file_close(JournalFile *f) {
|
||||
|
||||
#ifdef HAVE_GCRYPT
|
||||
/* Write the final tag */
|
||||
- if (f->seal && f->writable)
|
||||
- journal_file_append_tag(f);
|
||||
+ if (f->seal && f->writable) {
|
||||
+ int r;
|
||||
+
|
||||
+ r = journal_file_append_tag(f);
|
||||
+ if (r < 0)
|
||||
+ log_error_errno(r, "Failed to append tag when closing journal: %m");
|
||||
+ }
|
||||
#endif
|
||||
|
||||
journal_file_set_offline(f);
|
||||
--
|
||||
2.10.0
|
||||
|
@ -1,17 +0,0 @@
|
||||
---
|
||||
shell-completion/bash/systemctl.in | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
Index: systemd-221/shell-completion/bash/systemctl.in
|
||||
===================================================================
|
||||
--- systemd-221.orig/shell-completion/bash/systemctl.in
|
||||
+++ systemd-221/shell-completion/bash/systemctl.in
|
||||
@@ -43,7 +43,7 @@ __filter_units_by_property () {
|
||||
local units=("$@")
|
||||
local props
|
||||
IFS=$'\n' read -rd '' -a props < \
|
||||
- <(__systemctl $mode show --property "$property" -- "${units[@]}")
|
||||
+ <(__systemctl $mode show --property "$property" -- "${units[@]}" 2> /dev/null)
|
||||
for ((i=0; $i < ${#units[*]}; i++)); do
|
||||
if [[ "${props[i]}" = "$property=$value" ]]; then
|
||||
echo " ${units[i]}"
|
@ -1,37 +0,0 @@
|
||||
From cb31827d62066a04b02111df3052949fda4b6888 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl>
|
||||
Date: Mon, 23 Nov 2015 13:59:43 -0500
|
||||
Subject: [PATCH] nss-mymachines: do not allow overlong machine names
|
||||
|
||||
https://github.com/systemd/systemd/issues/2002
|
||||
---
|
||||
src/nss-mymachines/nss-mymachines.c | 6 ++++++
|
||||
1 file changed, 6 insertions(+)
|
||||
|
||||
diff --git a/src/nss-mymachines/nss-mymachines.c b/src/nss-mymachines/nss-mymachines.c
|
||||
index 969fa96..c98a959 100644
|
||||
--- a/src/nss-mymachines/nss-mymachines.c
|
||||
+++ b/src/nss-mymachines/nss-mymachines.c
|
||||
@@ -416,6 +416,9 @@ enum nss_status _nss_mymachines_getpwnam_r(
|
||||
if (!e || e == p)
|
||||
goto not_found;
|
||||
|
||||
+ if (e - p > HOST_NAME_MAX - 1) /* -1 for the last dash */
|
||||
+ goto not_found;
|
||||
+
|
||||
r = parse_uid(e + 1, &uid);
|
||||
if (r < 0)
|
||||
goto not_found;
|
||||
@@ -573,6 +576,9 @@ enum nss_status _nss_mymachines_getgrnam_r(
|
||||
if (!e || e == p)
|
||||
goto not_found;
|
||||
|
||||
+ if (e - p > HOST_NAME_MAX - 1) /* -1 for the last dash */
|
||||
+ goto not_found;
|
||||
+
|
||||
r = parse_gid(e + 1, &gid);
|
||||
if (r < 0)
|
||||
goto not_found;
|
||||
--
|
||||
2.1.4
|
||||
|
@ -1,43 +0,0 @@
|
||||
From: Werner Fink <werner@suse.de>
|
||||
Date: Wed Feb 26 14:36:27 UTC 2014
|
||||
Subject: Do not clobber XDG_RUNTIME_DIR if su command preserve environment
|
||||
|
||||
Make sure that even if a su command without option -l or with option -m
|
||||
is used, the XDG_RUNTIME_DIR will not be clobbered by the new uid.
|
||||
|
||||
This belongs to BNC#852015 and also to BNC#855160
|
||||
|
||||
---
|
||||
src/login/pam_systemd.c | 19 +++++++++++++++++++
|
||||
1 file changed, 19 insertions(+)
|
||||
|
||||
Index: systemd-221/src/login/pam_systemd.c
|
||||
===================================================================
|
||||
--- systemd-221.orig/src/login/pam_systemd.c
|
||||
+++ systemd-221/src/login/pam_systemd.c
|
||||
@@ -445,6 +445,25 @@ _public_ PAM_EXTERN int pam_sm_open_sess
|
||||
r = export_legacy_dbus_address(handle, pw->pw_uid, runtime_path);
|
||||
if (r != PAM_SUCCESS)
|
||||
return r;
|
||||
+ } else if (getenv("XDG_RUNTIME_DIR")) {
|
||||
+ _cleanup_free_ char *p = NULL;
|
||||
+
|
||||
+ /* Make sure that after running YaST2 or the xdg-su scripts
|
||||
+ * the runtime directory is not clobbered. Even a normal su
|
||||
+ * command without -l or with -m may clobber. */
|
||||
+
|
||||
+ if ((r = asprintf(&p, "/run/user/%lu", (unsigned long)pw->pw_uid)) < 0)
|
||||
+ return PAM_BUF_ERR;
|
||||
+
|
||||
+ r = pam_misc_setenv(handle, "XDG_RUNTIME_DIR", p, 0);
|
||||
+ if (r != PAM_SUCCESS) {
|
||||
+ pam_syslog(handle, LOG_ERR, "Failed to set runtime dir.");
|
||||
+ return r;
|
||||
+ }
|
||||
+
|
||||
+ r = export_legacy_dbus_address(handle, pw->pw_uid, p);
|
||||
+ if (r != PAM_SUCCESS)
|
||||
+ return r;
|
||||
}
|
||||
|
||||
if (!isempty(seat)) {
|
@ -1,51 +0,0 @@
|
||||
From c47885438517ac77ee34a30ee3d09e5deb9968f6 Mon Sep 17 00:00:00 2001
|
||||
From: Franck Bui <fbui@suse.com>
|
||||
Date: Thu, 29 Sep 2016 19:44:34 +0200
|
||||
Subject: [PATCH 1/1] pid1: don't return any error in
|
||||
manager_dispatch_notify_fd() (#4240)
|
||||
|
||||
If manager_dispatch_notify_fd() fails and returns an error then the handling of
|
||||
service notifications will be disabled entirely leading to a compromised system.
|
||||
|
||||
For example pid1 won't be able to receive the WATCHDOG messages anymore and
|
||||
will kill all services supposed to send such messages.
|
||||
(cherry picked from commit 9987750e7a4c62e0eb8473603150596ba7c3a015)
|
||||
---
|
||||
src/core/manager.c | 13 +++++++++----
|
||||
1 file changed, 9 insertions(+), 4 deletions(-)
|
||||
|
||||
diff --git a/src/core/manager.c b/src/core/manager.c
|
||||
index 56ca9cf..06d78e4 100644
|
||||
--- a/src/core/manager.c
|
||||
+++ b/src/core/manager.c
|
||||
@@ -1560,10 +1560,14 @@ static int manager_dispatch_notify_fd(sd_event_source *source, int fd, uint32_t
|
||||
|
||||
n = recvmsg(m->notify_fd, &msghdr, MSG_DONTWAIT|MSG_CMSG_CLOEXEC);
|
||||
if (n < 0) {
|
||||
- if (errno == EAGAIN || errno == EINTR)
|
||||
- return 0;
|
||||
+ if (!IN_SET(errno, EAGAIN, EINTR))
|
||||
+ log_error("Failed to receive notification message: %m");
|
||||
|
||||
- return -errno;
|
||||
+ /* It's not an option to return an error here since it
|
||||
+ * would disable the notification handler entirely. Services
|
||||
+ * wouldn't be able to send the WATCHDOG message for
|
||||
+ * example... */
|
||||
+ return 0;
|
||||
}
|
||||
if (n == 0) {
|
||||
log_debug("Got zero-length notification message. Ignoring.");
|
||||
@@ -1590,7 +1594,8 @@ static int manager_dispatch_notify_fd(sd_event_source *source, int fd, uint32_t
|
||||
r = fdset_new_array(&fds, fd_array, n_fds);
|
||||
if (r < 0) {
|
||||
close_many(fd_array, n_fds);
|
||||
- return log_oom();
|
||||
+ log_oom();
|
||||
+ return 0;
|
||||
}
|
||||
}
|
||||
|
||||
--
|
||||
2.10.0
|
||||
|
@ -1,38 +0,0 @@
|
||||
From eb54b43fe31392c9f77505d8f9cd86d1f050b49d Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl>
|
||||
Date: Thu, 29 Sep 2016 16:07:41 +0200
|
||||
Subject: [PATCH 1/1] pid1: more informative error message for ignored
|
||||
notifications
|
||||
|
||||
It's probably easier to diagnose a bad notification message if the
|
||||
contents are printed. But still, do anything only if debugging is on.
|
||||
|
||||
(cherry picked from commit a86b76753d7868c2d05f046f601bc7dc89fc2203)
|
||||
---
|
||||
src/core/manager.c | 10 ++++++++--
|
||||
1 file changed, 8 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/src/core/manager.c b/src/core/manager.c
|
||||
index 58d346e..0d0158a 100644
|
||||
--- a/src/core/manager.c
|
||||
+++ b/src/core/manager.c
|
||||
@@ -1516,8 +1516,14 @@ static void manager_invoke_notify_message(Manager *m, Unit *u, pid_t pid, const
|
||||
|
||||
if (UNIT_VTABLE(u)->notify_message)
|
||||
UNIT_VTABLE(u)->notify_message(u, pid, tags, fds);
|
||||
- else
|
||||
- log_unit_debug(u, "Got notification message for unit. Ignoring.");
|
||||
+ else if (_unlikely_(log_get_max_level() >= LOG_DEBUG)) {
|
||||
+ _cleanup_free_ char *x = NULL, *y = NULL;
|
||||
+
|
||||
+ x = cescape(buf);
|
||||
+ if (x)
|
||||
+ y = ellipsize(x, 20, 90);
|
||||
+ log_unit_debug(u, "Got notification message \"%s\", ignoring.", strnull(y));
|
||||
+ }
|
||||
}
|
||||
|
||||
static int manager_dispatch_notify_fd(sd_event_source *source, int fd, uint32_t revents, void *userdata) {
|
||||
--
|
||||
2.10.0
|
||||
|
@ -1,82 +0,0 @@
|
||||
From 98c4bab7add94bdfb6cc238376c47a9c73a4fe39 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl>
|
||||
Date: Thu, 29 Sep 2016 16:06:02 +0200
|
||||
Subject: [PATCH 1/1] pid1: process zero-length notification messages again
|
||||
|
||||
This undoes 531ac2b234. I acked that patch without looking at the code
|
||||
carefully enough. There are two problems:
|
||||
- we want to process the fds anyway
|
||||
- in principle empty notification messages are valid, and we should
|
||||
process them as usual, including logging using log_unit_debug().
|
||||
|
||||
(cherry picked from commit 8523bf7dd514a3a2c6114b7b8fb8f308b4f09fc4)
|
||||
|
||||
[fbui: adjust context]
|
||||
---
|
||||
src/core/manager.c | 15 ++++++---------
|
||||
1 file changed, 6 insertions(+), 9 deletions(-)
|
||||
|
||||
diff --git a/src/core/manager.c b/src/core/manager.c
|
||||
index 06d78e4..58d346e 100644
|
||||
--- a/src/core/manager.c
|
||||
+++ b/src/core/manager.c
|
||||
@@ -1501,13 +1501,12 @@ static unsigned manager_dispatch_dbus_queue(Manager *m) {
|
||||
return n;
|
||||
}
|
||||
|
||||
-static void manager_invoke_notify_message(Manager *m, Unit *u, pid_t pid, const char *buf, size_t n, FDSet *fds) {
|
||||
+static void manager_invoke_notify_message(Manager *m, Unit *u, pid_t pid, const char *buf, FDSet *fds) {
|
||||
_cleanup_strv_free_ char **tags = NULL;
|
||||
|
||||
assert(m);
|
||||
assert(u);
|
||||
assert(buf);
|
||||
- assert(n > 0);
|
||||
|
||||
tags = strv_split(buf, "\n\r");
|
||||
if (!tags) {
|
||||
@@ -1569,10 +1568,6 @@ static int manager_dispatch_notify_fd(sd_event_source *source, int fd, uint32_t
|
||||
* example... */
|
||||
return 0;
|
||||
}
|
||||
- if (n == 0) {
|
||||
- log_debug("Got zero-length notification message. Ignoring.");
|
||||
- return 0;
|
||||
- }
|
||||
|
||||
CMSG_FOREACH(cmsg, &msghdr) {
|
||||
if (cmsg->cmsg_level == SOL_SOCKET && cmsg->cmsg_type == SCM_RIGHTS) {
|
||||
@@ -1609,25 +1604,27 @@ static int manager_dispatch_notify_fd(sd_event_source *source, int fd, uint32_t
|
||||
return 0;
|
||||
}
|
||||
|
||||
+ /* The message should be a string. Here we make sure it's NUL-terminated,
|
||||
+ * but only the part until first NUL will be used anyway. */
|
||||
buf[n] = 0;
|
||||
|
||||
/* Notify every unit that might be interested, but try
|
||||
* to avoid notifying the same one multiple times. */
|
||||
u1 = manager_get_unit_by_pid_cgroup(m, ucred->pid);
|
||||
if (u1) {
|
||||
- manager_invoke_notify_message(m, u1, ucred->pid, buf, n, fds);
|
||||
+ manager_invoke_notify_message(m, u1, ucred->pid, buf, fds);
|
||||
found = true;
|
||||
}
|
||||
|
||||
u2 = hashmap_get(m->watch_pids1, PID_TO_PTR(ucred->pid));
|
||||
if (u2 && u2 != u1) {
|
||||
- manager_invoke_notify_message(m, u2, ucred->pid, buf, n, fds);
|
||||
+ manager_invoke_notify_message(m, u2, ucred->pid, buf, fds);
|
||||
found = true;
|
||||
}
|
||||
|
||||
u3 = hashmap_get(m->watch_pids2, PID_TO_PTR(ucred->pid));
|
||||
if (u3 && u3 != u2 && u3 != u1) {
|
||||
- manager_invoke_notify_message(m, u3, ucred->pid, buf, n, fds);
|
||||
+ manager_invoke_notify_message(m, u3, ucred->pid, buf, fds);
|
||||
found = true;
|
||||
}
|
||||
|
||||
--
|
||||
2.10.0
|
||||
|
@ -1,51 +0,0 @@
|
||||
From 31ae8c8741ce9595f4053234d6a6b2fb3616fedf Mon Sep 17 00:00:00 2001
|
||||
From: bgbhpe <brian.boylston@hpe.com>
|
||||
Date: Fri, 8 Jul 2016 11:43:56 -0400
|
||||
Subject: [PATCH 1/1] rules: block: add support for pmem devices (#3683)
|
||||
|
||||
Persistent memory devices can be exposed as block devices as /dev/pmemN
|
||||
and /dev/pmemNs. pmemN is the raw device and is byte-addressable from
|
||||
within the kernel and when mmapped by applications from a DAX-mounted
|
||||
file system. pmemNs has the block translation table (BTT) layered on top,
|
||||
offering atomic sector/block access. Both pmemN and pmemNs are expected
|
||||
to contain file systems.
|
||||
|
||||
blkid(8) and lsblk(8) seem to correctly report on pmemN and pmemNs.
|
||||
systemd v219 will populate /dev/disk/by-uuid/ when, for example, mkfs is
|
||||
used on pmem, but systemd v228 does not.
|
||||
|
||||
Add pmem to the whitelist.
|
||||
(cherry picked from commit f3bc4ccc2edf5ad2a99d6ba2795b9999fe76c3df)
|
||||
|
||||
[tblume: fixes bsc#988119]
|
||||
---
|
||||
rules/60-block.rules | 2 +-
|
||||
rules/60-persistent-storage.rules | 2 +-
|
||||
2 files changed, 2 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/rules/60-block.rules b/rules/60-block.rules
|
||||
index c74caca..42c7597 100644
|
||||
--- a/rules/60-block.rules
|
||||
+++ b/rules/60-block.rules
|
||||
@@ -8,4 +8,4 @@ ACTION=="add", SUBSYSTEM=="module", KERNEL=="block", ATTR{parameters/events_dfl_
|
||||
ACTION=="change", SUBSYSTEM=="scsi", ENV{DEVTYPE}=="scsi_device", TEST=="block", ATTR{block/*/uevent}="change"
|
||||
|
||||
# watch metadata changes, caused by tools closing the device node which was opened for writing
|
||||
-ACTION!="remove", SUBSYSTEM=="block", KERNEL=="loop*|nvme*|sd*|vd*|xvd*", OPTIONS+="watch"
|
||||
+ACTION!="remove", SUBSYSTEM=="block", KERNEL=="loop*|nvme*|sd*|vd*|xvd*|pmem*", OPTIONS+="watch"
|
||||
diff --git a/rules/60-persistent-storage.rules b/rules/60-persistent-storage.rules
|
||||
index ee1fb08f..ef5d205 100644
|
||||
--- a/rules/60-persistent-storage.rules
|
||||
+++ b/rules/60-persistent-storage.rules
|
||||
@@ -6,7 +6,7 @@
|
||||
ACTION=="remove", GOTO="persistent_storage_end"
|
||||
|
||||
SUBSYSTEM!="block", GOTO="persistent_storage_end"
|
||||
-KERNEL!="loop*|mmcblk*[0-9]|msblk*[0-9]|mspblk*[0-9]|nvme*|sd*|sr*|vd*|xvd*|bcache*|cciss*|dasd*|ubd*", GOTO="persistent_storage_end"
|
||||
+KERNEL!="loop*|mmcblk*[0-9]|msblk*[0-9]|mspblk*[0-9]|nvme*|sd*|sr*|vd*|xvd*|bcache*|cciss*|dasd*|ubd*|pmem*", GOTO="persistent_storage_end"
|
||||
|
||||
# ignore partitions that span the entire disk
|
||||
TEST=="whole_disk", GOTO="persistent_storage_end"
|
||||
--
|
||||
2.10.0
|
||||
|
@ -1,121 +0,0 @@
|
||||
From b8d6cc0513adadea9b5048fa320d7f49c10f004b Mon Sep 17 00:00:00 2001
|
||||
From: Thomas Blume <Thomas.Blume@suse.com>
|
||||
Date: Wed, 4 May 2016 08:51:52 +0200
|
||||
Subject: [PATCH] systemctl,pid1: do not warn about missing install info with
|
||||
"preset"
|
||||
|
||||
When "preset" was executed for a unit without install info, we'd warn similarly
|
||||
as for "enable" and "disable". But "preset" is usually called for all units,
|
||||
because the preset files are provided by the distribution, and the units are under
|
||||
control of individual programs, and it's reasonable to call "preset" for all units
|
||||
rather then try to do it only for the ones that can be installed.
|
||||
We also don't warn about missing info for "preset-all". Thus it seems reasonable
|
||||
to silently ignore units w/o install info when presetting.
|
||||
|
||||
(In addition, when more than one unit was specified, we'd issue the warning
|
||||
only if none of them had install info. But this is probably something to fix
|
||||
for enable/disable too.)
|
||||
---
|
||||
man/systemctl.xml | 26 +++++++++++++-------------
|
||||
src/systemctl/systemctl.c | 10 +++++-----
|
||||
2 files changed, 18 insertions(+), 18 deletions(-)
|
||||
|
||||
diff --git a/man/systemctl.xml b/man/systemctl.xml
|
||||
index f342e26..1c2c919 100644
|
||||
--- a/man/systemctl.xml
|
||||
+++ b/man/systemctl.xml
|
||||
@@ -1082,22 +1082,22 @@ kobject-uevent 1 systemd-udevd-kernel.socket systemd-udevd.service
|
||||
<term><command>preset <replaceable>NAME</replaceable>...</command></term>
|
||||
|
||||
<listitem>
|
||||
- <para>Reset one or more unit files, as specified on the
|
||||
- command line, to the defaults configured in the preset
|
||||
- policy files. This has the same effect as
|
||||
- <command>disable</command> or <command>enable</command>,
|
||||
- depending how the unit is listed in the preset files.</para>
|
||||
+ <para>Reset the enable/disable status one or more unit files, as specified on
|
||||
+ the command line, to the defaults configured in the preset policy files. This
|
||||
+ has the same effect as <command>disable</command> or
|
||||
+ <command>enable</command>, depending how the unit is listed in the preset
|
||||
+ files.</para>
|
||||
|
||||
- <para>Use <option>--preset-mode=</option> to control
|
||||
- whether units shall be enabled and disabled, or only
|
||||
- enabled, or only disabled.</para>
|
||||
+ <para>Use <option>--preset-mode=</option> to control whether units shall be
|
||||
+ enabled and disabled, or only enabled, or only disabled.</para>
|
||||
+
|
||||
+ <para>If the unit carries no install information, it will be silently ignored
|
||||
+ by this command.</para>
|
||||
|
||||
- <para>For more information on the preset policy format,
|
||||
- see
|
||||
+ <para>For more information on the preset policy format, see
|
||||
<citerefentry><refentrytitle>systemd.preset</refentrytitle><manvolnum>5</manvolnum></citerefentry>.
|
||||
- For more information on the concept of presets, please
|
||||
- consult the <ulink
|
||||
- url="http://freedesktop.org/wiki/Software/systemd/Preset">Preset</ulink>
|
||||
+ For more information on the concept of presets, please consult the
|
||||
+ <ulink url="http://freedesktop.org/wiki/Software/systemd/Preset">Preset</ulink>
|
||||
document.</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
diff --git a/src/systemctl/systemctl.c b/src/systemctl/systemctl.c
|
||||
index 1f42d1a..9dc5971 100644
|
||||
--- a/src/systemctl/systemctl.c
|
||||
+++ b/src/systemctl/systemctl.c
|
||||
@@ -5399,6 +5399,7 @@ static int enable_unit(int argc, char *argv[], void *userdata) {
|
||||
UnitFileChange *changes = NULL;
|
||||
unsigned n_changes = 0;
|
||||
int carries_install_info = -1;
|
||||
+ bool ignore_carries_install_info = false;
|
||||
int r;
|
||||
|
||||
if (!argv[1])
|
||||
@@ -5412,8 +5413,7 @@ static int enable_unit(int argc, char *argv[], void *userdata) {
|
||||
if (r < 0)
|
||||
return r;
|
||||
|
||||
- /* If the operation was fully executed by the SysV compat,
|
||||
- * let's finish early */
|
||||
+ /* If the operation was fully executed by the SysV compat, let's finish early */
|
||||
if (strv_isempty(names))
|
||||
return 0;
|
||||
|
||||
@@ -5430,7 +5430,6 @@ static int enable_unit(int argc, char *argv[], void *userdata) {
|
||||
r = unit_file_link(arg_scope, arg_runtime, arg_root, names, arg_force, &changes, &n_changes);
|
||||
else if (streq(verb, "preset")) {
|
||||
r = unit_file_preset(arg_scope, arg_runtime, arg_root, names, arg_preset_mode, arg_force, &changes, &n_changes);
|
||||
- carries_install_info = r;
|
||||
} else if (streq(verb, "mask"))
|
||||
r = unit_file_mask(arg_scope, arg_runtime, arg_root, names, arg_force, &changes, &n_changes);
|
||||
else if (streq(verb, "unmask"))
|
||||
@@ -5450,7 +5449,7 @@ static int enable_unit(int argc, char *argv[], void *userdata) {
|
||||
} else {
|
||||
_cleanup_bus_message_unref_ sd_bus_message *reply = NULL, *m = NULL;
|
||||
_cleanup_bus_error_free_ sd_bus_error error = SD_BUS_ERROR_NULL;
|
||||
- int expect_carries_install_info = false;
|
||||
+ bool expect_carries_install_info = false;
|
||||
bool send_force = true, send_preset_mode = false;
|
||||
const char *method;
|
||||
sd_bus *bus;
|
||||
@@ -5481,6 +5480,7 @@ static int enable_unit(int argc, char *argv[], void *userdata) {
|
||||
method = "PresetUnitFiles";
|
||||
|
||||
expect_carries_install_info = true;
|
||||
+ ignore_carries_install_info = true;
|
||||
} else if (streq(verb, "mask"))
|
||||
method = "MaskUnitFiles";
|
||||
else if (streq(verb, "unmask")) {
|
||||
@@ -5540,7 +5540,7 @@ static int enable_unit(int argc, char *argv[], void *userdata) {
|
||||
r = 0;
|
||||
}
|
||||
|
||||
- if (carries_install_info == 0)
|
||||
+ if (carries_install_info == 0 && !ignore_carries_install_info)
|
||||
log_warning("The unit files have no [Install] section. They are not meant to be enabled\n"
|
||||
"using systemctl.\n"
|
||||
"Possible reasons for having this kind of units are:\n"
|
||||
--
|
||||
2.6.6
|
||||
|
@ -1,19 +0,0 @@
|
||||
|
|
||||
| Belongs to bnc#849071 that is do not install console-shell.service
|
||||
| in any system target as this will cause automatic poweroff at boot.
|
||||
|
|
||||
---
|
||||
units/console-shell.service.m4.in | 3 ---
|
||||
1 file changed, 3 deletions(-)
|
||||
|
||||
Index: systemd-221/units/console-shell.service.m4.in
|
||||
===================================================================
|
||||
--- systemd-221.orig/units/console-shell.service.m4.in
|
||||
+++ systemd-221/units/console-shell.service.m4.in
|
||||
@@ -28,6 +28,3 @@ StandardError=inherit
|
||||
KillMode=process
|
||||
IgnoreSIGPIPE=no
|
||||
SendSIGHUP=yes
|
||||
-
|
||||
-[Install]
|
||||
-WantedBy=getty.target
|
@ -1,75 +0,0 @@
|
||||
From: werner@suse.de
|
||||
Upstream: marked as openSUSE-specific fix originally, but may well
|
||||
worth be to be sent upstream.
|
||||
|
||||
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-227/src/journal/journald-server.c
|
||||
===================================================================
|
||||
--- systemd-227.orig/src/journal/journald-server.c
|
||||
+++ systemd-227/src/journal/journald-server.c
|
||||
@@ -24,6 +24,7 @@
|
||||
#include <selinux/selinux.h>
|
||||
#endif
|
||||
#include <sys/ioctl.h>
|
||||
+#include <linux/fs.h>
|
||||
#include <sys/mman.h>
|
||||
#include <sys/signalfd.h>
|
||||
#include <sys/statvfs.h>
|
||||
@@ -861,6 +862,39 @@ void server_driver_message(Server *s, sd
|
||||
dispatch_message_real(s, iovec, n, ELEMENTSOF(iovec), &ucred, NULL, NULL, 0, NULL, LOG_INFO, 0);
|
||||
}
|
||||
|
||||
+/*
|
||||
+ * 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);
|
||||
+}
|
||||
+
|
||||
void server_dispatch_message(
|
||||
Server *s,
|
||||
struct iovec *iovec, unsigned n, unsigned m,
|
||||
@@ -948,6 +982,7 @@ static int system_journal_open(Server *s
|
||||
|
||||
fn = strjoina("/var/log/journal/", SERVER_MACHINE_ID(s));
|
||||
(void) mkdir(fn, 0755);
|
||||
+ disable_cow(fn, s);
|
||||
|
||||
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);
|
@ -1,272 +0,0 @@
|
||||
---
|
||||
shell-completion/bash/coredumpctl | 6 +++++-
|
||||
shell-completion/bash/hostnamectl | 6 +++++-
|
||||
shell-completion/bash/journalctl | 6 +++++-
|
||||
shell-completion/bash/kernel-install | 13 ++++++++++++-
|
||||
shell-completion/bash/localectl | 6 +++++-
|
||||
shell-completion/bash/loginctl | 6 +++++-
|
||||
shell-completion/bash/systemctl.in | 6 +++++-
|
||||
shell-completion/bash/systemd-analyze | 6 +++++-
|
||||
shell-completion/bash/systemd-run | 14 +++++++++++++-
|
||||
shell-completion/bash/timedatectl | 6 +++++-
|
||||
shell-completion/bash/udevadm | 6 +++++-
|
||||
11 files changed, 70 insertions(+), 11 deletions(-)
|
||||
|
||||
Index: systemd-228/shell-completion/bash/coredumpctl
|
||||
===================================================================
|
||||
--- systemd-228.orig/shell-completion/bash/coredumpctl
|
||||
+++ systemd-228/shell-completion/bash/coredumpctl
|
||||
@@ -44,6 +44,10 @@ _coredumpctl() {
|
||||
[DUMP]='dump gdb'
|
||||
)
|
||||
|
||||
+ if __contains_word ">" ${COMP_WORDS[*]:0:COMP_CWORD}; then
|
||||
+ return 0
|
||||
+ fi
|
||||
+
|
||||
if __contains_word "$prev" '--output -o'; then
|
||||
comps=$( compgen -A file -- "$cur" )
|
||||
compopt -o filenames
|
||||
@@ -82,4 +86,4 @@ _coredumpctl() {
|
||||
return 0
|
||||
}
|
||||
|
||||
-complete -F _coredumpctl coredumpctl
|
||||
+complete -o default -o bashdefault -F _coredumpctl coredumpctl
|
||||
Index: systemd-228/shell-completion/bash/hostnamectl
|
||||
===================================================================
|
||||
--- systemd-228.orig/shell-completion/bash/hostnamectl
|
||||
+++ systemd-228/shell-completion/bash/hostnamectl
|
||||
@@ -30,6 +30,10 @@ _hostnamectl() {
|
||||
local OPTS='-h --help --version --transient --static --pretty
|
||||
--no-ask-password -H --host --machine'
|
||||
|
||||
+ if __contains_word ">" ${COMP_WORDS[*]:0:COMP_CWORD}; then
|
||||
+ return 0
|
||||
+ fi
|
||||
+
|
||||
if [[ $cur = -* ]]; then
|
||||
COMPREPLY=( $(compgen -W '${OPTS[*]}' -- "$cur") )
|
||||
return 0
|
||||
@@ -61,4 +65,4 @@ _hostnamectl() {
|
||||
return 0
|
||||
}
|
||||
|
||||
-complete -F _hostnamectl hostnamectl
|
||||
+complete -o default -o bashdefault -F _hostnamectl hostnamectl
|
||||
Index: systemd-228/shell-completion/bash/journalctl
|
||||
===================================================================
|
||||
--- systemd-228.orig/shell-completion/bash/journalctl
|
||||
+++ systemd-228/shell-completion/bash/journalctl
|
||||
@@ -56,6 +56,10 @@ _journalctl() {
|
||||
--root -M --machine'
|
||||
)
|
||||
|
||||
+ if __contains_word ">" ${COMP_WORDS[*]:0:COMP_CWORD}; then
|
||||
+ return 0
|
||||
+ fi
|
||||
+
|
||||
if __contains_word "$prev" ${OPTS[ARG]} ${OPTS[ARGUNKNOWN]}; then
|
||||
case $prev in
|
||||
--boot|--this-boot|-b)
|
||||
@@ -121,4 +125,4 @@ _journalctl() {
|
||||
fi
|
||||
}
|
||||
|
||||
-complete -F _journalctl journalctl
|
||||
+complete -o default -o bashdefault -F _journalctl journalctl
|
||||
Index: systemd-228/shell-completion/bash/kernel-install
|
||||
===================================================================
|
||||
--- systemd-228.orig/shell-completion/bash/kernel-install
|
||||
+++ systemd-228/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 <http://www.gnu.org/licenses/>.
|
||||
|
||||
+__contains_word () {
|
||||
+ local w word=$1; shift
|
||||
+ for w in "$@"; do
|
||||
+ [[ $w = "$word" ]] && return
|
||||
+ done
|
||||
+}
|
||||
+
|
||||
_kernel_install() {
|
||||
local comps
|
||||
local MACHINE_ID
|
||||
local cur=${COMP_WORDS[COMP_CWORD]}
|
||||
|
||||
+ if __contains_word ">" ${COMP_WORDS[*]:0:COMP_CWORD}; then
|
||||
+ return 0
|
||||
+ fi
|
||||
+
|
||||
case $COMP_CWORD in
|
||||
1)
|
||||
comps="add remove"
|
||||
@@ -47,4 +58,4 @@ _kernel_install() {
|
||||
return 0
|
||||
}
|
||||
|
||||
-complete -F _kernel_install kernel-install
|
||||
+complete -o default -o bashdefault -F _kernel_install kernel-install
|
||||
Index: systemd-228/shell-completion/bash/localectl
|
||||
===================================================================
|
||||
--- systemd-228.orig/shell-completion/bash/localectl
|
||||
+++ systemd-228/shell-completion/bash/localectl
|
||||
@@ -36,6 +36,10 @@ _localectl() {
|
||||
local OPTS='-h --help --version --no-convert --no-pager --no-ask-password
|
||||
-H --host --machine'
|
||||
|
||||
+ if __contains_word ">" ${COMP_WORDS[*]:0:COMP_CWORD}; then
|
||||
+ return 0
|
||||
+ fi
|
||||
+
|
||||
if __contains_word "$prev" $OPTS; then
|
||||
case $prev in
|
||||
--host|-H)
|
||||
@@ -89,4 +93,4 @@ _localectl() {
|
||||
return 0
|
||||
}
|
||||
|
||||
-complete -F _localectl localectl
|
||||
+complete -o default -o bashdefault -F _localectl localectl
|
||||
Index: systemd-228/shell-completion/bash/loginctl
|
||||
===================================================================
|
||||
--- systemd-228.orig/shell-completion/bash/loginctl
|
||||
+++ systemd-228/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
|
||||
+ fi
|
||||
+
|
||||
if __contains_word "$prev" ${OPTS[ARG]}; then
|
||||
case $prev in
|
||||
--signal|-s)
|
||||
@@ -107,4 +111,4 @@ _loginctl () {
|
||||
return 0
|
||||
}
|
||||
|
||||
-complete -F _loginctl loginctl
|
||||
+complete -o default -o bashdefault -F _loginctl loginctl
|
||||
Index: systemd-228/shell-completion/bash/systemctl.in
|
||||
===================================================================
|
||||
--- systemd-228.orig/shell-completion/bash/systemctl.in
|
||||
+++ systemd-228/shell-completion/bash/systemctl.in
|
||||
@@ -104,6 +104,10 @@ _systemctl () {
|
||||
--preset-mode -n --lines -o --output -M --machine'
|
||||
)
|
||||
|
||||
+ if __contains_word ">" ${COMP_WORDS[*]:0:COMP_CWORD}; then
|
||||
+ return 0
|
||||
+ fi
|
||||
+
|
||||
if __contains_word "--user" ${COMP_WORDS[*]}; then
|
||||
mode=--user
|
||||
elif __contains_word "--global" ${COMP_WORDS[*]}; then
|
||||
@@ -280,4 +284,4 @@ _systemctl () {
|
||||
return 0
|
||||
}
|
||||
|
||||
-complete -F _systemctl systemctl
|
||||
+complete -o default -o bashdefault -F _systemctl systemctl
|
||||
Index: systemd-228/shell-completion/bash/systemd-analyze
|
||||
===================================================================
|
||||
--- systemd-228.orig/shell-completion/bash/systemd-analyze
|
||||
+++ systemd-228/shell-completion/bash/systemd-analyze
|
||||
@@ -47,6 +47,10 @@ _systemd_analyze() {
|
||||
[VERIFY]='verify'
|
||||
)
|
||||
|
||||
+ if __contains_word ">" ${COMP_WORDS[*]:0:COMP_CWORD}; then
|
||||
+ return 0
|
||||
+ fi
|
||||
+
|
||||
_init_completion || return
|
||||
|
||||
for ((i=0; i < COMP_CWORD; i++)); do
|
||||
@@ -114,4 +118,4 @@ _systemd_analyze() {
|
||||
return 0
|
||||
}
|
||||
|
||||
-complete -F _systemd_analyze systemd-analyze
|
||||
+complete -o default -o bashdefault -F _systemd_analyze systemd-analyze
|
||||
Index: systemd-228/shell-completion/bash/systemd-run
|
||||
===================================================================
|
||||
--- systemd-228.orig/shell-completion/bash/systemd-run
|
||||
+++ systemd-228/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 <http://www.gnu.org/licenses/>.
|
||||
|
||||
+__contains_word () {
|
||||
+ local w word=$1; shift
|
||||
+ for w in "$@"; do
|
||||
+ [[ $w = "$word" ]] && return
|
||||
+ done
|
||||
+}
|
||||
+
|
||||
__systemctl() {
|
||||
local mode=$1; shift 1
|
||||
systemctl $mode --full --no-legend "$@"
|
||||
@@ -40,6 +47,11 @@ _systemd_run() {
|
||||
|
||||
local mode=--system
|
||||
local i
|
||||
+
|
||||
+ if __contains_word ">" ${COMP_WORDS[*]:0:COMP_CWORD}; then
|
||||
+ return 0
|
||||
+ fi
|
||||
+
|
||||
local opts_with_values=(
|
||||
--unit --description --slice --service-type -H --host -M --machine -p --property --on-active
|
||||
--on-boot --on-startup --on-unit-active --on-unit-inactive --on-calendar --timer-property
|
||||
@@ -114,4 +126,4 @@ _systemd_run() {
|
||||
return 0
|
||||
}
|
||||
|
||||
-complete -F _systemd_run systemd-run
|
||||
+complete -o default -o bashdefault -F _systemd_run systemd-run
|
||||
Index: systemd-228/shell-completion/bash/timedatectl
|
||||
===================================================================
|
||||
--- systemd-228.orig/shell-completion/bash/timedatectl
|
||||
+++ systemd-228/shell-completion/bash/timedatectl
|
||||
@@ -30,6 +30,10 @@ _timedatectl() {
|
||||
local OPTS='-h --help --version --adjust-system-clock --no-pager
|
||||
--no-ask-password -H --host --machine'
|
||||
|
||||
+ if __contains_word ">" ${COMP_WORDS[*]:0:COMP_CWORD}; then
|
||||
+ return 0
|
||||
+ fi
|
||||
+
|
||||
if __contains_word "$prev" $OPTS; then
|
||||
case $prev in
|
||||
--host|-H)
|
||||
@@ -73,4 +77,4 @@ _timedatectl() {
|
||||
return 0
|
||||
}
|
||||
|
||||
-complete -F _timedatectl timedatectl
|
||||
+complete -o default -o bashdefault -F _timedatectl timedatectl
|
||||
Index: systemd-228/shell-completion/bash/udevadm
|
||||
===================================================================
|
||||
--- systemd-228.orig/shell-completion/bash/udevadm
|
||||
+++ systemd-228/shell-completion/bash/udevadm
|
||||
@@ -36,6 +36,10 @@ _udevadm() {
|
||||
|
||||
local verbs=(info trigger settle control monitor hwdb test-builtin test)
|
||||
|
||||
+ if __contains_word ">" ${COMP_WORDS[*]:0:COMP_CWORD}; then
|
||||
+ return 0
|
||||
+ fi
|
||||
+
|
||||
for ((i=0; i < COMP_CWORD; i++)); do
|
||||
if __contains_word "${COMP_WORDS[i]}" "${verbs[@]}" &&
|
||||
! __contains_word "${COMP_WORDS[i-1]}" ${OPTS[ARG]}; then
|
||||
@@ -94,4 +98,4 @@ _udevadm() {
|
||||
return 0
|
||||
}
|
||||
|
||||
-complete -F _udevadm udevadm
|
||||
+complete -o default -o bashdefault -F _udevadm udevadm
|
@ -1,24 +0,0 @@
|
||||
From: Robert Milasan <rmilasan@suse.com>
|
||||
Date: Wed, 27 Jun 2012 08:55:59 +0000
|
||||
Subject: rules create by id scsi links for ATA devices
|
||||
|
||||
Re-enable creation of by-id scsi links for ATA devices. (bnc#769002)
|
||||
---
|
||||
rules/60-persistent-storage.rules | 4 ++++
|
||||
1 file changed, 4 insertions(+)
|
||||
|
||||
Index: systemd-221/rules/60-persistent-storage.rules
|
||||
===================================================================
|
||||
--- systemd-221.orig/rules/60-persistent-storage.rules
|
||||
+++ systemd-221/rules/60-persistent-storage.rules
|
||||
@@ -36,6 +36,10 @@ KERNEL=="cciss*", ENV{DEVTYPE}=="disk",
|
||||
KERNEL=="sd*|sr*|cciss*", ENV{DEVTYPE}=="disk", ENV{ID_SERIAL}=="?*", SYMLINK+="disk/by-id/$env{ID_BUS}-$env{ID_SERIAL}"
|
||||
KERNEL=="sd*|cciss*", ENV{DEVTYPE}=="partition", ENV{ID_SERIAL}=="?*", SYMLINK+="disk/by-id/$env{ID_BUS}-$env{ID_SERIAL}-part%n"
|
||||
|
||||
+# scsi compat links for ATA devices
|
||||
+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"
|
||||
+
|
||||
# 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"
|
@ -1,22 +0,0 @@
|
||||
From: Robert Milasan <rmilasan@suse.com>
|
||||
Date: Mon, 6 Aug 2012 13:35:34 +0000
|
||||
Subject: udev netlink null rules
|
||||
|
||||
udevd race for netlink events (bnc#774646)
|
||||
---
|
||||
src/udev/udevd.c | 2 ++
|
||||
1 file changed, 2 insertions(+)
|
||||
|
||||
Index: systemd-221/src/udev/udevd.c
|
||||
===================================================================
|
||||
--- systemd-221.orig/src/udev/udevd.c
|
||||
+++ systemd-221/src/udev/udevd.c
|
||||
@@ -917,6 +917,8 @@ static int on_uevent(sd_event_source *s,
|
||||
dev = udev_monitor_receive_device(manager->monitor);
|
||||
if (dev) {
|
||||
udev_device_ensure_usec_initialized(dev, NULL);
|
||||
+ if (manager->rules == NULL)
|
||||
+ manager->rules = udev_rules_new(manager->udev, arg_resolve_names);
|
||||
r = event_queue_insert(manager, dev);
|
||||
if (r < 0)
|
||||
udev_device_unref(dev);
|
@ -1,24 +0,0 @@
|
||||
From: Robert Milasan <rmilasan@suse.com>
|
||||
Date: Tue, 12 Feb 2013 09:16:23 +0000
|
||||
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 ++++-
|
||||
1 file changed, 4 insertions(+), 1 deletion(-)
|
||||
|
||||
Index: systemd-221/rules/60-cdrom_id.rules
|
||||
===================================================================
|
||||
--- systemd-221.orig/rules/60-cdrom_id.rules
|
||||
+++ systemd-221/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"
|
||||
+KERNEL=="sr0", ENV{ID_CDROM_CD_RW}=="1", SYMLINK+="cdrw", OPTIONS+="link_priority=-100"
|
||||
+KERNEL=="sr0", ENV{ID_CDROM_DVD}=="1", SYMLINK+="dvd", OPTIONS+="link_priority=-100"
|
||||
+KERNEL=="sr0", ENV{ID_CDROM_DVD_RW}=="1", SYMLINK+="dvdrw", OPTIONS+="link_priority=-100"
|
||||
|
||||
LABEL="cdrom_end"
|
@ -1,77 +0,0 @@
|
||||
From: Robert Milasan <rmilasan@suse.com>
|
||||
Cc: Werner Fink <werner@suse.de>
|
||||
Subject: udev always rename network
|
||||
|
||||
Date: Thu, 28 Mar 2013 09:24:43 +0000
|
||||
udev: ensure that the network interfaces are renamed even if they exist (bnc#809843).
|
||||
|
||||
Date: Tue, 4 Mar 2014 10:29:21 +0000
|
||||
Port the patch of Robert to systemd v210 and test it out.
|
||||
|
||||
---
|
||||
src/udev/udev-event.c | 41 +++++++++++++++++++++++++++++++++++++----
|
||||
1 file changed, 37 insertions(+), 4 deletions(-)
|
||||
|
||||
|
||||
Index: systemd-221/src/udev/udev-event.c
|
||||
===================================================================
|
||||
--- systemd-221.orig/src/udev/udev-event.c
|
||||
+++ systemd-221/src/udev/udev-event.c
|
||||
@@ -796,20 +796,53 @@ out:
|
||||
static int rename_netif(struct udev_event *event) {
|
||||
struct udev_device *dev = event->dev;
|
||||
char name[IFNAMSIZ];
|
||||
+ char interim[IFNAMSIZ], *ptr = &interim[0];
|
||||
const char *oldname;
|
||||
- int r;
|
||||
+ int r, loop;
|
||||
|
||||
oldname = udev_device_get_sysname(dev);
|
||||
|
||||
strscpy(name, IFNAMSIZ, event->name);
|
||||
|
||||
r = rtnl_set_link_name(&event->rtnl, udev_device_get_ifindex(dev), name);
|
||||
- if (r < 0)
|
||||
+ if (r == 0) {
|
||||
+ log_info("renamed network interface %s to %s\n", oldname, name);
|
||||
+ return r;
|
||||
+ } else if (r != -EEXIST) {
|
||||
return log_error_errno(r, "Error changing net interface name '%s' to '%s': %m", oldname, name);
|
||||
+ }
|
||||
|
||||
- log_debug("renamed network interface '%s' to '%s'", oldname, name);
|
||||
+ /* free our own name, another process may wait for us */
|
||||
+ strpcpyf(&ptr, IFNAMSIZ, "rename%u", udev_device_get_ifindex(dev));
|
||||
|
||||
- return 0;
|
||||
+ r = rtnl_set_link_name(&event->rtnl, udev_device_get_ifindex(dev), interim);
|
||||
+ if (r < 0) {
|
||||
+ log_error("error changing net interface name %s to %s: %s",
|
||||
+ oldname, interim, strerror(-r));
|
||||
+ return r;
|
||||
+ }
|
||||
+
|
||||
+ /* log temporary name */
|
||||
+ log_info("renamed network interface %s to %s\n", oldname, interim);
|
||||
+
|
||||
+ loop = 90 * 20;
|
||||
+ while (loop--) {
|
||||
+ const struct timespec duration = { 0, 1000 * 1000 * 1000 / 20 };
|
||||
+ nanosleep(&duration, NULL);
|
||||
+
|
||||
+ r = rtnl_set_link_name(&event->rtnl, udev_device_get_ifindex(dev), name);
|
||||
+ if (r == 0) {
|
||||
+ log_info("renamed network interface %s to %s\n", interim, name);
|
||||
+ break;
|
||||
+ }
|
||||
+
|
||||
+ if (r != -EEXIST) {
|
||||
+ log_error("error changing net interface name %s to %s: %s",
|
||||
+ interim, name, strerror(-r));
|
||||
+ break;
|
||||
+ }
|
||||
+ }
|
||||
+ return r;
|
||||
}
|
||||
|
||||
void udev_event_execute_rules(struct udev_event *event,
|
@ -1,37 +0,0 @@
|
||||
---
|
||||
Makefile.am | 4 ++++
|
||||
rules/80-hotplug-cpu-mem.rules | 12 ++++++++++++
|
||||
2 files changed, 16 insertions(+)
|
||||
|
||||
Index: systemd-221/Makefile.am
|
||||
===================================================================
|
||||
--- systemd-221.orig/Makefile.am
|
||||
+++ systemd-221/Makefile.am
|
||||
@@ -3841,6 +3841,10 @@ dist_udevrules_DATA += \
|
||||
rules/73-seat-numlock.rules
|
||||
|
||||
# ------------------------------------------------------------------------------
|
||||
+dist_udevrules_DATA += \
|
||||
+ rules/80-hotplug-cpu-mem.rules
|
||||
+
|
||||
+# ------------------------------------------------------------------------------
|
||||
mtd_probe_SOURCES = \
|
||||
src/udev/mtd_probe/mtd_probe.c \
|
||||
src/udev/mtd_probe/mtd_probe.h \
|
||||
Index: systemd-221/rules/80-hotplug-cpu-mem.rules
|
||||
===================================================================
|
||||
--- /dev/null
|
||||
+++ systemd-221/rules/80-hotplug-cpu-mem.rules
|
||||
@@ -0,0 +1,12 @@
|
||||
+# do not edit this file, it will be overwritten on update
|
||||
+
|
||||
+# Hotplug physical CPU
|
||||
+SUBSYSTEM=="cpu", ACTION=="add", TEST=="online", ATTR{online}=="0", \
|
||||
+ ATTR{online}="1"
|
||||
+
|
||||
+# Hotplug physical memory
|
||||
+SUBSYSTEM=="memory", ACTION=="add", TEST=="state", ATTR{state}=="offline", \
|
||||
+ ATTR{state}="online", TAG+="tmpfs"
|
||||
+
|
||||
+#
|
||||
+TAG=="tmpfs", RUN+="/usr/lib/udev/remount-tmpfs"
|
@ -1,24 +0,0 @@
|
||||
From e26a5bb50b8aa741c5b2e57749d576c488e7ab32 Mon Sep 17 00:00:00 2001
|
||||
From: Hannes Reinecke <hare@suse.de>
|
||||
Date: Thu, 10 Apr 2014 11:10:41 +0200
|
||||
Subject: [PATCH 1/2] 64-btrfs.rules: skip btrfs check if devices are not ready
|
||||
|
||||
If any devices are marked with 'SYSTEMD_READY=0' then
|
||||
we shouldn't run any btrfs check on them.
|
||||
|
||||
---
|
||||
rules/64-btrfs.rules | 1 +
|
||||
1 file changed, 1 insertion(+)
|
||||
|
||||
Index: systemd-221/rules/64-btrfs.rules
|
||||
===================================================================
|
||||
--- systemd-221.orig/rules/64-btrfs.rules
|
||||
+++ systemd-221/rules/64-btrfs.rules
|
||||
@@ -3,6 +3,7 @@
|
||||
SUBSYSTEM!="block", GOTO="btrfs_end"
|
||||
ACTION=="remove", GOTO="btrfs_end"
|
||||
ENV{ID_FS_TYPE}!="btrfs", GOTO="btrfs_end"
|
||||
+ENV{SYSTEMD_READY}=="0", GOTO="btrfs_end"
|
||||
|
||||
# let the kernel know about this btrfs filesystem, and check if it is complete
|
||||
IMPORT{builtin}="btrfs ready $devnode"
|
@ -1,40 +0,0 @@
|
||||
From f9e1ee09fadbd4fb146d4f7bb45a6212773dff63 Mon Sep 17 00:00:00 2001
|
||||
From: Hannes Reinecke <hare@suse.de>
|
||||
Date: Thu, 10 Apr 2014 11:14:20 +0200
|
||||
Subject: [PATCH 2/2] Skip persistent device link creation on multipath device
|
||||
paths
|
||||
|
||||
When a device is marked as a multipath device path by setting
|
||||
DM_MULTIPATH_DEVICE_PATH="1" udev should not create any
|
||||
persistent symlinks to that device.
|
||||
Otherwise systemd will get confused about which device to use.
|
||||
|
||||
---
|
||||
rules/60-persistent-storage.rules | 7 +++++--
|
||||
1 file changed, 5 insertions(+), 2 deletions(-)
|
||||
|
||||
Index: systemd-221/rules/60-persistent-storage.rules
|
||||
===================================================================
|
||||
--- systemd-221.orig/rules/60-persistent-storage.rules
|
||||
+++ systemd-221/rules/60-persistent-storage.rules
|
||||
@@ -33,8 +33,8 @@ KERNEL=="sd*[!0-9]|sr*", ENV{ID_SERIAL}!
|
||||
# SCSI devices
|
||||
KERNEL=="sd*[!0-9]|sr*", ENV{ID_SERIAL}!="?*", IMPORT{program}="scsi_id --export --whitelisted -d $devnode", ENV{ID_BUS}="scsi"
|
||||
KERNEL=="cciss*", ENV{DEVTYPE}=="disk", ENV{ID_SERIAL}!="?*", IMPORT{program}="scsi_id --export --whitelisted -d $devnode", ENV{ID_BUS}="cciss"
|
||||
-KERNEL=="sd*|sr*|cciss*", ENV{DEVTYPE}=="disk", ENV{ID_SERIAL}=="?*", SYMLINK+="disk/by-id/$env{ID_BUS}-$env{ID_SERIAL}"
|
||||
-KERNEL=="sd*|cciss*", ENV{DEVTYPE}=="partition", ENV{ID_SERIAL}=="?*", SYMLINK+="disk/by-id/$env{ID_BUS}-$env{ID_SERIAL}-part%n"
|
||||
+KERNEL=="sd*|sr*|cciss*", ENV{DEVTYPE}=="disk", ENV{DM_MULTIPATH_DEVICE_PATH}!="1", ENV{ID_SERIAL}=="?*", SYMLINK+="disk/by-id/$env{ID_BUS}-$env{ID_SERIAL}"
|
||||
+KERNEL=="sd*|cciss*", ENV{DEVTYPE}=="partition", ENV{DM_MULTIPATH_DEVICE_PATH}!="1", ENV{ID_SERIAL}=="?*", SYMLINK+="disk/by-id/$env{ID_BUS}-$env{ID_SERIAL}-part%n"
|
||||
|
||||
# scsi compat links for ATA devices
|
||||
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}"
|
||||
@@ -66,6 +66,9 @@ KERNEL=="sr*", ENV{DISK_EJECT_REQUEST}!=
|
||||
KERNEL=="sr*", ENV{DISK_EJECT_REQUEST}!="?*", ENV{ID_CDROM_MEDIA_TRACK_COUNT_DATA}=="?*", ENV{ID_CDROM_MEDIA_SESSION_LAST_OFFSET}=="", \
|
||||
IMPORT{builtin}="blkid --noraid"
|
||||
|
||||
+# Skip blkid on multipath device paths
|
||||
+ENV{DM_MULTIPATH_DEVICE_PATH}=="1", GOTO="persistent_storage_end"
|
||||
+
|
||||
# probe filesystem metadata of disks
|
||||
KERNEL!="sr*", IMPORT{builtin}="blkid"
|
||||
|
@ -1,29 +0,0 @@
|
||||
From c9af1be90db5a29ac86605c67bc2bb4bc5780520 Mon Sep 17 00:00:00 2001
|
||||
From: Hannes Reinecke <hare@suse.de>
|
||||
Date: Thu, 12 Jun 2014 12:25:03 +0200
|
||||
Subject: [PATCH] 99-systemd.rules: Ignore devices with 'SYSTEMD_READY=0'
|
||||
|
||||
Whenever a rule sets 'SYSTEMD_READY=0' it tries to indicate
|
||||
that systemd should ignore this device. So we should not
|
||||
set the 'systemd' tag in these cases; otherwise systemd
|
||||
will pick up the device.
|
||||
|
||||
References: bnc#881942
|
||||
|
||||
Signed-off-by: Hannes Reinecke <hare@suse.de>
|
||||
---
|
||||
rules/99-systemd.rules.in | 1 +
|
||||
1 file changed, 1 insertion(+)
|
||||
|
||||
Index: systemd-221/rules/99-systemd.rules.in
|
||||
===================================================================
|
||||
--- systemd-221.orig/rules/99-systemd.rules.in
|
||||
+++ systemd-221/rules/99-systemd.rules.in
|
||||
@@ -10,6 +10,7 @@ ACTION=="remove", GOTO="systemd_end"
|
||||
SUBSYSTEM=="tty", KERNEL=="tty[a-zA-Z]*|hvc*|xvc*|hvsi*|ttysclp*|sclp_line*|3270/tty*", TAG+="systemd"
|
||||
KERNEL=="vport*", TAG+="systemd"
|
||||
|
||||
+SUBSYSTEM=="block", ENV{SYSTEMD_READY}=="0", GOTO="systemd_end"
|
||||
SUBSYSTEM=="block", TAG+="systemd"
|
||||
SUBSYSTEM=="block", ENV{DM_UDEV_DISABLE_OTHER_RULES_FLAG}=="1", ENV{SYSTEMD_READY}="0"
|
||||
|
@ -1,20 +0,0 @@
|
||||
Exclude cd/dvd as well (bnc#882714)
|
||||
|
||||
---
|
||||
src/udev/udevd.c | 3 ++-
|
||||
1 file changed, 2 insertions(+), 1 deletion(-)
|
||||
|
||||
Index: systemd-221/src/udev/udevd.c
|
||||
===================================================================
|
||||
--- systemd-221.orig/src/udev/udevd.c
|
||||
+++ systemd-221/src/udev/udevd.c
|
||||
@@ -1022,7 +1022,8 @@ static int synthesize_change(struct udev
|
||||
|
||||
if (streq_ptr("block", udev_device_get_subsystem(dev)) &&
|
||||
streq_ptr("disk", udev_device_get_devtype(dev)) &&
|
||||
- !startswith(udev_device_get_sysname(dev), "dm-")) {
|
||||
+ !startswith(udev_device_get_sysname(dev), "dm-") &&
|
||||
+ !startswith(udev_device_get_sysname(dev), "sr")) {
|
||||
bool part_table_read = false;
|
||||
bool has_partitions = false;
|
||||
int fd;
|
@ -1,15 +0,0 @@
|
||||
---
|
||||
rules/50-udev-default.rules | 2 ++
|
||||
1 file changed, 2 insertions(+)
|
||||
|
||||
Index: systemd-221/rules/50-udev-default.rules
|
||||
===================================================================
|
||||
--- systemd-221.orig/rules/50-udev-default.rules
|
||||
+++ systemd-221/rules/50-udev-default.rules
|
||||
@@ -74,4 +74,6 @@ KERNEL=="tun", MODE="0666", OPTIONS+="st
|
||||
|
||||
KERNEL=="fuse", MODE="0666", OPTIONS+="static_node=fuse"
|
||||
|
||||
+KERNEL=="genwqe*", MODE="0666"
|
||||
+
|
||||
LABEL="default_end"
|
@ -1,175 +0,0 @@
|
||||
From: Jeff Mahoney <jeffm@suse.com>
|
||||
Subject: udev: add option to generate old 'buggy' serials
|
||||
References: bnc#886852
|
||||
|
||||
Prior to udev 184, scsi_id would truncate the last character of the model
|
||||
string when generating the ID_SERIAL value. If a system was installed
|
||||
prior to that fix being available in udev, there may be configuration
|
||||
information that refers to the truncated link.
|
||||
|
||||
This patch adds a --truncated-serial option and a udev rule will created
|
||||
the old truncated links.
|
||||
|
||||
Signed-off-by: Jeff Mahoney <jeffm@suse.com>
|
||||
---
|
||||
rules/60-persistent-storage.rules | 4 ++++
|
||||
src/udev/scsi_id/scsi_id.c | 15 ++++++++++++++-
|
||||
src/udev/scsi_id/scsi_id.h | 1 +
|
||||
src/udev/scsi_id/scsi_serial.c | 19 +++++++++++++------
|
||||
4 files changed, 32 insertions(+), 7 deletions(-)
|
||||
|
||||
Index: systemd-221/rules/60-persistent-storage.rules
|
||||
===================================================================
|
||||
--- systemd-221.orig/rules/60-persistent-storage.rules
|
||||
+++ systemd-221/rules/60-persistent-storage.rules
|
||||
@@ -40,6 +40,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"
|
||||
|
||||
+# scsi compat links for ATA devices (for compatibility with udev < 184)
|
||||
+KERNEL=="sd*[!0-9]", ENV{ID_BUS}=="ata", PROGRAM="scsi_id --truncated-serial --whitelisted --replace-whitespace -p0x80 -d$tempnode", RESULT=="?*", ENV{ID_SCSI_COMPAT_TRUNCATED}="$result", SYMLINK+="disk/by-id/scsi-$env{ID_SCSI_COMPAT_TRUNCATED}"
|
||||
+KERNEL=="sd*[0-9]", ENV{ID_SCSI_COMPAT_TRUNCATED}=="?*", SYMLINK+="disk/by-id/scsi-$env{ID_SCSI_COMPAT_TRUNCATED}-part%n"
|
||||
+
|
||||
# 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-221/src/udev/scsi_id/scsi_id.c
|
||||
===================================================================
|
||||
--- systemd-221.orig/src/udev/scsi_id/scsi_id.c
|
||||
+++ systemd-221/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' },
|
||||
{ "verbose", no_argument, NULL, 'v' },
|
||||
+ { "truncated-serial", no_argument, NULL, '9' },
|
||||
{ "version", no_argument, NULL, 'V' }, /* don't advertise -V */
|
||||
{ "export", no_argument, NULL, 'x' },
|
||||
{ "help", no_argument, NULL, 'h' },
|
||||
@@ -54,6 +55,7 @@ static bool dev_specified = false;
|
||||
static char config_file[MAX_PATH_LEN] = "/etc/scsi_id.config";
|
||||
static enum page_code default_page_code = PAGE_UNSPECIFIED;
|
||||
static int sg_version = 4;
|
||||
+static bool compat_truncated = false;
|
||||
static bool reformat_serial = false;
|
||||
static bool export = false;
|
||||
static char vendor_str[64];
|
||||
@@ -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"
|
||||
" -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;
|
||||
|
||||
+ case '9':
|
||||
+ compat_truncated = true;
|
||||
+ break;
|
||||
+
|
||||
case 'V':
|
||||
printf("%s\n", VERSION);
|
||||
exit(0);
|
||||
@@ -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);
|
||||
+ util_replace_whitespace(dev_scsi.serial_compat, serial_str, sizeof(serial_str));
|
||||
+ util_replace_chars(serial_str, NULL);
|
||||
+ printf("ID_SERIAL_COMPAT=%s\n", serial_str);
|
||||
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);
|
||||
@@ -558,7 +568,10 @@ static int scsi_id(struct udev *udev, ch
|
||||
if (reformat_serial) {
|
||||
char serial_str[MAX_SERIAL_LEN];
|
||||
|
||||
- util_replace_whitespace(dev_scsi.serial, serial_str, sizeof(serial_str));
|
||||
+ if (compat_truncated)
|
||||
+ util_replace_whitespace(dev_scsi.serial_compat, serial_str, sizeof(serial_str));
|
||||
+ else
|
||||
+ util_replace_whitespace(dev_scsi.serial, serial_str, sizeof(serial_str));
|
||||
util_replace_chars(serial_str, NULL);
|
||||
printf("%s\n", serial_str);
|
||||
goto out;
|
||||
Index: systemd-221/src/udev/scsi_id/scsi_id.h
|
||||
===================================================================
|
||||
--- systemd-221.orig/src/udev/scsi_id/scsi_id.h
|
||||
+++ systemd-221/src/udev/scsi_id/scsi_id.h
|
||||
@@ -45,6 +45,7 @@ struct scsi_id_device {
|
||||
char kernel[64];
|
||||
char serial[MAX_SERIAL_LEN];
|
||||
char serial_short[MAX_SERIAL_LEN];
|
||||
+ char serial_compat[MAX_SERIAL_LEN];
|
||||
int use_sg;
|
||||
|
||||
/* Always from page 0x80 e.g. 'B3G1P8500RWT' - may not be unique */
|
||||
Index: systemd-221/src/udev/scsi_id/scsi_serial.c
|
||||
===================================================================
|
||||
--- systemd-221.orig/src/udev/scsi_id/scsi_serial.c
|
||||
+++ systemd-221/src/udev/scsi_id/scsi_serial.c
|
||||
@@ -97,7 +97,8 @@ static const char hex_str[]="0123456789a
|
||||
|
||||
static int do_scsi_page80_inquiry(struct udev *udev,
|
||||
struct scsi_id_device *dev_scsi, int fd,
|
||||
- char *serial, char *serial_short, int max_len);
|
||||
+ char *serial, char *serial_short,
|
||||
+ char *serial_compat, int max_len);
|
||||
|
||||
static int sg_err_category_new(struct udev *udev,
|
||||
int scsi_status, int msg_status, int
|
||||
@@ -620,7 +621,7 @@ static int do_scsi_page83_inquiry(struct
|
||||
unsigned char page_83[SCSI_INQ_BUFF_LEN];
|
||||
|
||||
/* also pick up the page 80 serial number */
|
||||
- do_scsi_page80_inquiry(udev, dev_scsi, fd, NULL, unit_serial_number, MAX_SERIAL_LEN);
|
||||
+ do_scsi_page80_inquiry(udev, dev_scsi, fd, NULL, unit_serial_number, NULL, MAX_SERIAL_LEN);
|
||||
|
||||
memzero(page_83, SCSI_INQ_BUFF_LEN);
|
||||
retval = scsi_inquiry(udev, dev_scsi, fd, 1, PAGE_83, page_83,
|
||||
@@ -765,7 +766,8 @@ static int do_scsi_page83_prespc3_inquir
|
||||
/* Get unit serial number VPD page */
|
||||
static int do_scsi_page80_inquiry(struct udev *udev,
|
||||
struct scsi_id_device *dev_scsi, int fd,
|
||||
- char *serial, char *serial_short, int max_len)
|
||||
+ char *serial, char *serial_short,
|
||||
+ char *serial_compat, int max_len)
|
||||
{
|
||||
int retval;
|
||||
int ser_ind;
|
||||
@@ -799,9 +801,14 @@ static int do_scsi_page80_inquiry(struct
|
||||
ser_ind = prepend_vendor_model(udev, dev_scsi, &serial[1]);
|
||||
if (ser_ind < 0)
|
||||
return 1;
|
||||
+ if (serial_compat)
|
||||
+ strcpy(serial_compat, serial);
|
||||
ser_ind++; /* for the leading 'S' */
|
||||
- for (i = 4; i < len + 4; i++, ser_ind++)
|
||||
+ for (i = 4; i < len + 4; i++, ser_ind++) {
|
||||
serial[ser_ind] = buf[i];
|
||||
+ if (serial_compat)
|
||||
+ serial_compat[ser_ind - 1] = buf[i];
|
||||
+ }
|
||||
}
|
||||
if (serial_short != NULL) {
|
||||
memcpy(serial_short, &buf[4], len);
|
||||
@@ -877,7 +884,7 @@ int scsi_get_serial(struct udev *udev,
|
||||
return 1;
|
||||
|
||||
if (page_code == PAGE_80) {
|
||||
- if (do_scsi_page80_inquiry(udev, dev_scsi, fd, dev_scsi->serial, dev_scsi->serial_short, len)) {
|
||||
+ if (do_scsi_page80_inquiry(udev, dev_scsi, fd, dev_scsi->serial, dev_scsi->serial_short, dev_scsi->serial_compat, len)) {
|
||||
retval = 1;
|
||||
goto completed;
|
||||
} else {
|
||||
@@ -951,7 +958,7 @@ int scsi_get_serial(struct udev *udev,
|
||||
for (ind = 4; ind <= page0[3] + 3; ind++)
|
||||
if (page0[ind] == PAGE_80)
|
||||
if (!do_scsi_page80_inquiry(udev, dev_scsi, fd,
|
||||
- dev_scsi->serial, dev_scsi->serial_short, len)) {
|
||||
+ dev_scsi->serial, dev_scsi->serial_short, dev_scsi->serial_compat, len)) {
|
||||
/*
|
||||
* Success
|
||||
*/
|
@ -1,33 +0,0 @@
|
||||
---
|
||||
Makefile.am | 1 +
|
||||
rules/60-ssd-scheduler.rules | 11 +++++++++++
|
||||
2 files changed, 12 insertions(+)
|
||||
|
||||
Index: systemd-221/Makefile.am
|
||||
===================================================================
|
||||
--- systemd-221.orig/Makefile.am
|
||||
+++ systemd-221/Makefile.am
|
||||
@@ -3501,6 +3501,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/60-serial.rules \
|
||||
rules/64-btrfs.rules \
|
||||
rules/70-mouse.rules \
|
||||
Index: systemd-221/rules/60-ssd-scheduler.rules
|
||||
===================================================================
|
||||
--- /dev/null
|
||||
+++ systemd-221/rules/60-ssd-scheduler.rules
|
||||
@@ -0,0 +1,11 @@
|
||||
+# do not edit this file, it will be overwritten on update
|
||||
+
|
||||
+ACTION!="add", GOTO="ssd_scheduler_end"
|
||||
+SUBSYSTEM!="block", GOTO="ssd_scheduler_end"
|
||||
+
|
||||
+IMPORT{cmdline}="elevator"
|
||||
+ENV{elevator}=="*?", GOTO="ssd_scheduler_end"
|
||||
+
|
||||
+KERNEL=="sd*[!0-9]", ATTR{queue/rotational}=="0", ATTR{queue/scheduler}="deadline"
|
||||
+
|
||||
+LABEL="ssd_scheduler_end"
|
@ -1,108 +0,0 @@
|
||||
---
|
||||
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, 96 insertions(+)
|
||||
|
||||
--- systemd-222.orig/Makefile.am
|
||||
+++ systemd-222/Makefile.am
|
||||
@@ -3759,6 +3759,25 @@ EXTRA_DIST += \
|
||||
test/mocks/fsck
|
||||
|
||||
# ------------------------------------------------------------------------------
|
||||
+rootsymlink_generator_SOURCES = \
|
||||
+ src/udev/rootsymlink_generator/rootsymlink_generator.c
|
||||
+
|
||||
+rootsymlink_generator_CFLAGS = \
|
||||
+ $(AM_CFLAGS)
|
||||
+
|
||||
+udevlibexec_PROGRAMS += \
|
||||
+ rootsymlink-generator
|
||||
+
|
||||
+nodist_systemunit_DATA += \
|
||||
+ units/systemd-udev-root-symlink.service
|
||||
+
|
||||
+SYSINIT_TARGET_WANTS += \
|
||||
+ systemd-udev-root-symlink.service
|
||||
+
|
||||
+EXTRA_DIST += \
|
||||
+ units/systemd-udev-root-symlink.service.in
|
||||
+
|
||||
+# ------------------------------------------------------------------------------
|
||||
ata_id_SOURCES = \
|
||||
src/udev/ata_id/ata_id.c
|
||||
|
||||
--- /dev/null
|
||||
+++ systemd-222/src/udev/rootsymlink_generator/rootsymlink_generator.c
|
||||
@@ -0,0 +1,57 @@
|
||||
+/*
|
||||
+ * Copyright (C) 2014-2015 Robert Milasan <rmilasan@suse.com>
|
||||
+ *
|
||||
+ * This program 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.
|
||||
+ *
|
||||
+ * This program is distributed in the hope that it will be useful,
|
||||
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
+ * GNU General Public License for more details.
|
||||
+ *
|
||||
+ * You should have received a copy of the GNU General Public License
|
||||
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
+ */
|
||||
+
|
||||
+#include <stdio.h>
|
||||
+#include <string.h>
|
||||
+#include <errno.h>
|
||||
+#include <sys/stat.h>
|
||||
+#include <sys/types.h>
|
||||
+#include <fcntl.h>
|
||||
+#include <unistd.h>
|
||||
+
|
||||
+#define BUFFER_SIZE 128
|
||||
+
|
||||
+#define _ROOTDEV_ "/"
|
||||
+#define _PATH_ "/run/udev/rules.d"
|
||||
+#define _FILE_ "10-root-symlink.rules"
|
||||
+
|
||||
+int main(void)
|
||||
+{
|
||||
+ char filename[BUFFER_SIZE], buf[BUFFER_SIZE];
|
||||
+ struct stat statbuf;
|
||||
+ int fd;
|
||||
+
|
||||
+ if (stat(_ROOTDEV_, &statbuf) < 0)
|
||||
+ return 1;
|
||||
+ 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;
|
||||
+}
|
||||
--- /dev/null
|
||||
+++ systemd-222/units/systemd-udev-root-symlink.service.in
|
||||
@@ -0,0 +1,10 @@
|
||||
+[Unit]
|
||||
+Description=Rule generator for /dev/root symlink
|
||||
+Before=systemd-udevd.service
|
||||
+DefaultDependencies=no
|
||||
+ConditionPathIsReadWrite=/run/udev
|
||||
+
|
||||
+[Service]
|
||||
+Type=oneshot
|
||||
+RemainAfterExit=yes
|
||||
+ExecStart=@udevlibexecdir@/rootsymlink-generator
|
@ -1,26 +0,0 @@
|
||||
---
|
||||
src/udev/udevd.c | 4 ++--
|
||||
1 file changed, 2 insertions(+), 2 deletions(-)
|
||||
|
||||
Index: systemd-227/src/udev/udevd.c
|
||||
===================================================================
|
||||
--- systemd-227.orig/src/udev/udevd.c
|
||||
+++ systemd-227/src/udev/udevd.c
|
||||
@@ -568,7 +568,7 @@ static void event_run(Manager *manager,
|
||||
|
||||
if (hashmap_size(manager->workers) >= arg_children_max) {
|
||||
if (arg_children_max > 1)
|
||||
- log_debug("maximum number (%i) of children reached", hashmap_size(manager->workers));
|
||||
+ log_error("maximum number (%i) of children reached", hashmap_size(manager->workers));
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -1672,7 +1672,7 @@ int main(int argc, char *argv[]) {
|
||||
arg_children_max = 8;
|
||||
|
||||
if (sched_getaffinity(0, sizeof(cpu_set), &cpu_set) == 0)
|
||||
- arg_children_max += CPU_COUNT(&cpu_set) * 2;
|
||||
+ arg_children_max += CPU_COUNT(&cpu_set) * 64;
|
||||
|
||||
log_debug("set children_max to %u", arg_children_max);
|
||||
}
|
@ -1,14 +0,0 @@
|
||||
---
|
||||
units/systemd-networkd.service.m4.in | 1 +
|
||||
1 file changed, 1 insertion(+)
|
||||
|
||||
Index: systemd-221/units/systemd-networkd.service.m4.in
|
||||
===================================================================
|
||||
--- systemd-221.orig/units/systemd-networkd.service.m4.in
|
||||
+++ systemd-221/units/systemd-networkd.service.m4.in
|
||||
@@ -34,4 +34,5 @@ WatchdogSec=1min
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
+Alias=network.service
|
||||
Also=systemd-networkd.socket
|
@ -1,23 +0,0 @@
|
||||
diff --git a/Makefile.am b/Makefile.am
|
||||
index db206ae..803912c 100644
|
||||
--- a/Makefile.am
|
||||
+++ b/Makefile.am
|
||||
@@ -3524,6 +3524,7 @@ dist_udevrules_DATA += \
|
||||
rules/60-serial.rules \
|
||||
rules/64-btrfs.rules \
|
||||
rules/70-mouse.rules \
|
||||
+ rules/72-valve-steam-controler.rules \
|
||||
rules/75-net-description.rules \
|
||||
rules/78-sound-card.rules \
|
||||
rules/80-net-setup-link.rules
|
||||
diff --git a/rules/72-valve-steam-controler.rules b/rules/72-valve-steam-controler.rules
|
||||
new file mode 100644
|
||||
index 0000000..f676972
|
||||
--- /dev/null
|
||||
+++ b/rules/72-valve-steam-controler.rules
|
||||
@@ -0,0 +1,3 @@
|
||||
+SUBSYSTEM=="usb", ATTRS{idVendor}=="28de", ATTRS{idProduct}=="1142", TAG+="uaccess"
|
||||
+SUBSYSTEM=="usb", ATTRS{idVendor}=="28de", ATTRS{idProduct}=="1102", TAG+="uaccess"
|
||||
+KERNEL=="uinput", SUBSYSTEM=="misc", TAG+="uaccess"
|
||||
--
|
||||
2.6.3
|
@ -1,21 +0,0 @@
|
||||
---
|
||||
src/login/pam_systemd.c | 6 +++++-
|
||||
1 file changed, 5 insertions(+), 1 deletion(-)
|
||||
|
||||
Index: systemd-228/src/login/pam_systemd.c
|
||||
===================================================================
|
||||
--- systemd-228.orig/src/login/pam_systemd.c
|
||||
+++ systemd-228/src/login/pam_systemd.c
|
||||
@@ -515,7 +515,11 @@ _public_ PAM_EXTERN int pam_sm_open_sess
|
||||
r = pam_set_data(handle, "systemd.session-fd", FD_TO_PTR(session_fd), NULL);
|
||||
if (r != PAM_SUCCESS) {
|
||||
pam_syslog(handle, LOG_ERR, "Failed to install session fd.");
|
||||
- safe_close(session_fd);
|
||||
+ if (session_fd >= 0) {
|
||||
+ PROTECT_ERRNO;
|
||||
+ if (_unlikely_(!(close_nointr(session_fd) != -EBADF)))
|
||||
+ pam_syslog(handle, LOG_ERR, "Unexpected error code on closing session fd: %m");
|
||||
+ }
|
||||
return r;
|
||||
}
|
||||
}
|
@ -1,40 +0,0 @@
|
||||
From: Frederic Crozat <fcrozat@suse.com>
|
||||
Date: Wed, 7 Dec 2011 15:15:07 +0000
|
||||
Subject: Fix /run/lock directories permissions to follow openSUSE policy
|
||||
|
||||
disable /var/lock/{subsys,lockdev} and change default permissions on
|
||||
/var/lock (bnc#733523).
|
||||
---
|
||||
tmpfiles.d/legacy.conf | 7 ++++---
|
||||
1 file changed, 4 insertions(+), 3 deletions(-)
|
||||
|
||||
Index: systemd-221/tmpfiles.d/legacy.conf
|
||||
===================================================================
|
||||
--- systemd-221.orig/tmpfiles.d/legacy.conf
|
||||
+++ systemd-221/tmpfiles.d/legacy.conf
|
||||
@@ -10,13 +10,14 @@
|
||||
# These files are considered legacy and are unnecessary on legacy-free
|
||||
# systems.
|
||||
|
||||
-d /run/lock 0755 root root -
|
||||
+# changed for openSUSE: only /run/lock should be available.
|
||||
+d /run/lock 0775 root lock -
|
||||
L /var/lock - - - - ../run/lock
|
||||
|
||||
# /run/lock/subsys is used for serializing SysV service execution, and
|
||||
# hence without use on SysV-less systems.
|
||||
|
||||
-d /run/lock/subsys 0755 root root -
|
||||
+#d /run/lock/subsys 0755 root root -
|
||||
|
||||
# /run/lock/lockdev is used to serialize access to tty devices via
|
||||
# LCK..xxx style lock files, For more information see:
|
||||
@@ -24,7 +25,7 @@ d /run/lock/subsys 0755 root root -
|
||||
# On modern systems a BSD file lock is a better choice if
|
||||
# serialization is needed on those devices.
|
||||
|
||||
-d /run/lock/lockdev 0775 root lock -
|
||||
+#d /run/lock/lockdev 0775 root lock -
|
||||
|
||||
# /forcefsck, /fastboot and /forcequotacheck are deprecated in favor of the
|
||||
# kernel command line options 'fsck.mode=force', 'fsck.mode=skip' and
|
@ -1,47 +0,0 @@
|
||||
From: Frederic Crozat <fcrozat@suse.com>
|
||||
Date: Thu, 10 Jan 2013 15:43:25 +0000
|
||||
Subject: allow multiple sulogin to be started
|
||||
|
||||
allows multiple sulogin instance (bnc#793182).
|
||||
---
|
||||
units/getty@.service.m4 | 1 +
|
||||
units/rescue.target | 1 +
|
||||
units/serial-getty@.service.m4 | 1 +
|
||||
3 files changed, 3 insertions(+)
|
||||
|
||||
Index: systemd-221/units/getty@.service.m4
|
||||
===================================================================
|
||||
--- systemd-221.orig/units/getty@.service.m4
|
||||
+++ systemd-221/units/getty@.service.m4
|
||||
@@ -9,6 +9,7 @@
|
||||
Description=Getty on %I
|
||||
Documentation=man:agetty(8) man:systemd-getty-generator(8)
|
||||
Documentation=http://0pointer.de/blog/projects/serial-console.html
|
||||
+Conflicts=rescue.service
|
||||
After=systemd-user-sessions.service plymouth-quit-wait.service
|
||||
m4_ifdef(`HAVE_SYSV_COMPAT',
|
||||
After=rc-local.service
|
||||
Index: systemd-221/units/rescue.target
|
||||
===================================================================
|
||||
--- systemd-221.orig/units/rescue.target
|
||||
+++ systemd-221/units/rescue.target
|
||||
@@ -10,6 +10,7 @@ Description=Rescue Mode
|
||||
Documentation=man:systemd.special(7)
|
||||
Requires=sysinit.target rescue.service
|
||||
After=sysinit.target rescue.service
|
||||
+Conflicts=getty.target
|
||||
AllowIsolate=yes
|
||||
|
||||
[Install]
|
||||
Index: systemd-221/units/serial-getty@.service.m4
|
||||
===================================================================
|
||||
--- systemd-221.orig/units/serial-getty@.service.m4
|
||||
+++ systemd-221/units/serial-getty@.service.m4
|
||||
@@ -10,6 +10,7 @@ Description=Serial Getty on %I
|
||||
Documentation=man:agetty(8) man:systemd-getty-generator(8)
|
||||
Documentation=http://0pointer.de/blog/projects/serial-console.html
|
||||
BindsTo=dev-%i.device
|
||||
+Conflicts=rescue.service
|
||||
After=dev-%i.device systemd-user-sessions.service plymouth-quit-wait.service
|
||||
m4_ifdef(`HAVE_SYSV_COMPAT',
|
||||
After=rc-local.service
|
@ -1,31 +0,0 @@
|
||||
From: Ludwig Nussel <ludwig.nussel@suse.de>
|
||||
Date: Mon, 8 Apr 2013 14:51:47 +0200
|
||||
Subject: apply ACL for nvidia device nodes
|
||||
|
||||
set ACL on nvidia devices (bnc#808319).
|
||||
---
|
||||
src/login/logind-acl.c | 12 ++++++++++++
|
||||
1 file changed, 12 insertions(+)
|
||||
|
||||
Index: systemd-221/src/login/logind-acl.c
|
||||
===================================================================
|
||||
--- systemd-221.orig/src/login/logind-acl.c
|
||||
+++ systemd-221/src/login/logind-acl.c
|
||||
@@ -285,5 +285,17 @@ int devnode_acl_all(struct udev *udev,
|
||||
r = k;
|
||||
}
|
||||
|
||||
+ /* only apply ACL on nvidia* if /dev/nvidiactl exists */
|
||||
+ if (devnode_acl("/dev/nvidiactl", flush, del, old_uid, add, new_uid) >= 0) {
|
||||
+ int j;
|
||||
+ for (j = 0; j <= 256 ; j++) {
|
||||
+ _cleanup_free_ char *devname = NULL;
|
||||
+ if (asprintf(&devname, "/dev/nvidia%d", j) < 0)
|
||||
+ break;
|
||||
+ if (devnode_acl(devname, flush, del, old_uid, add, new_uid) < 0)
|
||||
+ break;
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
return r;
|
||||
}
|
@ -1,23 +0,0 @@
|
||||
From c79437b7967cf5a23faa881bc5da6b88b63a1ada Mon Sep 17 00:00:00 2001
|
||||
From: Stefan Dirsch <sndirsch@suse.de>
|
||||
Date: Tue, 3 Jun 2014 15:05:55 +0200
|
||||
Subject: [PATCH] apply ACL for nvidia-uvm device node
|
||||
|
||||
set ACL on nvidia-uvm device (bnc#879767).
|
||||
---
|
||||
src/login/logind-acl.c | 2 ++
|
||||
1 file changed, 2 insertions(+)
|
||||
|
||||
Index: systemd-221/src/login/logind-acl.c
|
||||
===================================================================
|
||||
--- systemd-221.orig/src/login/logind-acl.c
|
||||
+++ systemd-221/src/login/logind-acl.c
|
||||
@@ -295,6 +295,8 @@ int devnode_acl_all(struct udev *udev,
|
||||
if (devnode_acl(devname, flush, del, old_uid, add, new_uid) < 0)
|
||||
break;
|
||||
}
|
||||
+ /* required for additional CUDA support (nvidia-uvm module with appropriate device), bnc#879767 */
|
||||
+ devnode_acl("/dev/nvidia-uvm", flush, del, old_uid, add, new_uid);
|
||||
}
|
||||
|
||||
return r;
|
@ -1,34 +0,0 @@
|
||||
Nasty bug reported on boo#867663
|
||||
|
||||
---
|
||||
src/basic/def.h | 2 +-
|
||||
src/core/manager.c | 3 ++-
|
||||
2 files changed, 3 insertions(+), 2 deletions(-)
|
||||
|
||||
Index: systemd-228/src/basic/def.h
|
||||
===================================================================
|
||||
--- systemd-228.orig/src/basic/def.h
|
||||
+++ systemd-228/src/basic/def.h
|
||||
@@ -40,7 +40,7 @@
|
||||
|
||||
#define SYSTEMD_CGROUP_CONTROLLER "name=systemd"
|
||||
|
||||
-#define SIGNALS_CRASH_HANDLER SIGSEGV,SIGILL,SIGFPE,SIGBUS,SIGQUIT,SIGABRT
|
||||
+#define SIGNALS_CRASH_HANDLER SIGSEGV,SIGILL,SIGFPE,SIGBUS,SIGQUIT,SIGABRT,SIGTRAP,SIGSYS
|
||||
#define SIGNALS_IGNORE SIGPIPE
|
||||
|
||||
#define REBOOT_PARAM_FILE "/run/systemd/reboot-param"
|
||||
Index: systemd-228/src/core/manager.c
|
||||
===================================================================
|
||||
--- systemd-228.orig/src/core/manager.c
|
||||
+++ systemd-228/src/core/manager.c
|
||||
@@ -2003,7 +2003,8 @@ static int manager_dispatch_jobs_in_prog
|
||||
assert(m);
|
||||
assert(source);
|
||||
|
||||
- manager_print_jobs_in_progress(m);
|
||||
+ if (m->n_running_jobs > 0)
|
||||
+ manager_print_jobs_in_progress(m);
|
||||
|
||||
next = now(CLOCK_MONOTONIC) + JOBS_IN_PROGRESS_PERIOD_USEC;
|
||||
r = sd_event_source_set_time(source, next);
|
@ -1,29 +0,0 @@
|
||||
Found this during debugging an other problem. The issue was that
|
||||
after ``sudo -i'' and a ``cd /usr/lib/systemd/system/'' followed
|
||||
later by a shutdown may fail with (journalctl -b -1):
|
||||
|
||||
systemd-exit.service: Failed at step CHDIR spawning: /usr/bin/kill
|
||||
|
||||
which then caused the subsequent fault that umounting the users
|
||||
home directories done by automount are busy.
|
||||
|
||||
---
|
||||
units/user/systemd-exit.service.in | 5 +++--
|
||||
1 file changed, 3 insertions(+), 2 deletions(-)
|
||||
|
||||
Index: systemd-221/units/user/systemd-exit.service.in
|
||||
===================================================================
|
||||
--- systemd-221.orig/units/user/systemd-exit.service.in
|
||||
+++ systemd-221/units/user/systemd-exit.service.in
|
||||
@@ -10,8 +10,9 @@ Description=Exit the Session
|
||||
Documentation=man:systemd.special(7)
|
||||
DefaultDependencies=no
|
||||
Requires=shutdown.target
|
||||
-After=shutdown.target
|
||||
+After=shutdown.target multi-user.target
|
||||
|
||||
[Service]
|
||||
Type=oneshot
|
||||
-ExecStart=@KILL@ -s 58 $MANAGERPID
|
||||
+WorkingDirectory=/
|
||||
+ExecStart=@KILL@ -s SIGRTMIN+24 $MANAGERPID
|
@ -1,17 +0,0 @@
|
||||
---
|
||||
units/rc-local.service.in | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
Index: systemd-221/units/rc-local.service.in
|
||||
===================================================================
|
||||
--- systemd-221.orig/units/rc-local.service.in
|
||||
+++ systemd-221/units/rc-local.service.in
|
||||
@@ -10,7 +10,7 @@
|
||||
[Unit]
|
||||
Description=@RC_LOCAL_SCRIPT_PATH_START@ Compatibility
|
||||
ConditionFileIsExecutable=@RC_LOCAL_SCRIPT_PATH_START@
|
||||
-After=network.target
|
||||
+After=basic.target
|
||||
|
||||
[Service]
|
||||
Type=forking
|
@ -1,25 +0,0 @@
|
||||
From: Frederic Crozat <fcrozat@suse.com>
|
||||
Cc: Werner Fink <werner@suse.de>
|
||||
Date: Wed, 24 Aug 2011 13:02:12 +0000
|
||||
Subject: ensure ask-password-wall starts after getty@tty1
|
||||
|
||||
ensure passphrase is handled before starting getty on tty1.
|
||||
|
||||
---
|
||||
units/systemd-ask-password-wall.service.in | 3 ++-
|
||||
1 file changed, 2 insertions(+), 1 deletion(-)
|
||||
|
||||
Index: systemd-221/units/systemd-ask-password-wall.service.in
|
||||
===================================================================
|
||||
--- systemd-221.orig/units/systemd-ask-password-wall.service.in
|
||||
+++ systemd-221/units/systemd-ask-password-wall.service.in
|
||||
@@ -8,7 +8,8 @@
|
||||
[Unit]
|
||||
Description=Forward Password Requests to Wall
|
||||
Documentation=man:systemd-ask-password-console.service(8)
|
||||
-After=systemd-user-sessions.service
|
||||
+Wants=getty.target
|
||||
+After=systemd-user-sessions.service getty.target
|
||||
|
||||
[Service]
|
||||
ExecStartPre=-@SYSTEMCTL@ stop systemd-ask-password-console.path systemd-ask-password-console.service systemd-ask-password-plymouth.path systemd-ask-password-plymouth.service
|
@ -1,31 +0,0 @@
|
||||
From: Frederic Crozat <fcrozat@suse.com>
|
||||
Date: Tue, 28 May 2013 15:17:35 +0200
|
||||
Subject: ensure shortname is set as hostname (bnc#820213)
|
||||
|
||||
strip hostname so the domain part isn't set as part of the hostname
|
||||
---
|
||||
src/core/hostname-setup.c | 4 ++++
|
||||
1 file changed, 4 insertions(+)
|
||||
|
||||
Index: systemd-221/src/core/hostname-setup.c
|
||||
===================================================================
|
||||
--- systemd-221.orig/src/core/hostname-setup.c
|
||||
+++ systemd-221/src/core/hostname-setup.c
|
||||
@@ -34,6 +34,7 @@ int hostname_setup(void) {
|
||||
int r;
|
||||
_cleanup_free_ char *b = NULL;
|
||||
const char *hn;
|
||||
+ char *domain;
|
||||
bool enoent = false;
|
||||
|
||||
r = read_hostname_config("/etc/hostname", &b);
|
||||
@@ -46,6 +47,9 @@ int hostname_setup(void) {
|
||||
hn = NULL;
|
||||
} else
|
||||
hn = b;
|
||||
+ /* strip any leftover of a domain name */
|
||||
+ if ((domain = strchr(hn, '.')) != NULL)
|
||||
+ *domain = '\0';
|
||||
|
||||
if (isempty(hn)) {
|
||||
/* Don't override the hostname if it is already set
|
@ -1,38 +0,0 @@
|
||||
From: Frederic Crozat <fcrozat@suse.com>
|
||||
Date: Thu, 23 Aug 2012 11:08:25 +0200
|
||||
Subject: fix support for boot prefixed initscript (bnc#746506)
|
||||
|
||||
---
|
||||
src/systemctl/systemctl.c | 18 +++++++++++++++++-
|
||||
1 file changed, 17 insertions(+), 1 deletion(-)
|
||||
|
||||
Index: systemd-221/src/systemctl/systemctl.c
|
||||
===================================================================
|
||||
--- systemd-221.orig/src/systemctl/systemctl.c
|
||||
+++ systemd-221/src/systemctl/systemctl.c
|
||||
@@ -5165,8 +5165,24 @@ static int enable_sysv_units(const char
|
||||
|
||||
p[strlen(p) - strlen(".service")] = 0;
|
||||
found_sysv = access(p, F_OK) >= 0;
|
||||
- if (!found_sysv)
|
||||
+ if (!found_sysv) {
|
||||
+#ifdef HAVE_SYSV_COMPAT
|
||||
+ free(p);
|
||||
+ p = NULL;
|
||||
+ if (!isempty(arg_root))
|
||||
+ asprintf(&p, "%s/" SYSTEM_SYSVINIT_PATH "/boot.%s", arg_root, name);
|
||||
+ else
|
||||
+ asprintf(&p, SYSTEM_SYSVINIT_PATH "/boot.%s", name);
|
||||
+ if (!p)
|
||||
+ return -ENOMEM;
|
||||
+ p[strlen(p) - sizeof(".service") + 1] = 0;
|
||||
+ found_sysv = access(p, F_OK) >= 0;
|
||||
+ if (!found_sysv)
|
||||
+ continue;
|
||||
+#else
|
||||
continue;
|
||||
+#endif
|
||||
+ }
|
||||
|
||||
if (found_native)
|
||||
log_info("Synchronizing state of %s with SysV init with %s...", name, argv[0]);
|
@ -1,216 +0,0 @@
|
||||
Original-From: Frederic Crozat <fcrozat@suse.com>
|
||||
Original-Date: Fri, 19 Aug 2011 15:29:49 +0000
|
||||
Subject: handle disable_caplock and compose_table and kbd_rate
|
||||
References: https://bugzilla.opensuse.org/746595
|
||||
Last-Editor: Jan Engelhardt <jengelh@inai.de>
|
||||
Date: Fri Jun 19 21:36:27 CEST 2015
|
||||
|
||||
---
|
||||
src/vconsole/vconsole-setup.c | 151 ++++++++++++++++++++++++++++++++++++++++--
|
||||
1 file changed, 147 insertions(+), 4 deletions(-)
|
||||
|
||||
Index: systemd-228/src/vconsole/vconsole-setup.c
|
||||
===================================================================
|
||||
--- systemd-228.orig/src/vconsole/vconsole-setup.c
|
||||
+++ systemd-228/src/vconsole/vconsole-setup.c
|
||||
@@ -34,6 +34,8 @@
|
||||
#include "alloc-util.h"
|
||||
#include "fd-util.h"
|
||||
#include "fileio.h"
|
||||
+#include "macro.h"
|
||||
+#include "strv.h"
|
||||
#include "io-util.h"
|
||||
#include "locale-util.h"
|
||||
#include "log.h"
|
||||
@@ -104,8 +106,10 @@ static int enable_utf8(int fd) {
|
||||
return r;
|
||||
}
|
||||
|
||||
-static int keyboard_load_and_wait(const char *vc, const char *map, const char *map_toggle, bool utf8) {
|
||||
- const char *args[8];
|
||||
+static int keyboard_load_and_wait(const char *vc, const char *map,
|
||||
+ const char *map_toggle, bool utf8, bool disable_capslock)
|
||||
+{
|
||||
+ const char *args[9];
|
||||
int i = 0, r;
|
||||
pid_t pid;
|
||||
|
||||
@@ -122,6 +126,8 @@ static int keyboard_load_and_wait(const
|
||||
args[i++] = map;
|
||||
if (map_toggle)
|
||||
args[i++] = map_toggle;
|
||||
+ if (disable_capslock)
|
||||
+ args[i++] = "disable.capslock";
|
||||
args[i++] = NULL;
|
||||
|
||||
pid = fork();
|
||||
@@ -251,11 +257,117 @@ static void font_copy_to_all_vcs(int fd)
|
||||
}
|
||||
}
|
||||
|
||||
+#ifdef HAVE_SYSV_COMPAT
|
||||
+static int compose_load_and_wait(const char *vc, const char *compose_table)
|
||||
+{
|
||||
+ const char *args[1024];
|
||||
+ unsigned int i = 0, j = 0;
|
||||
+ int ret;
|
||||
+ pid_t pid;
|
||||
+ char **strv_compose_table = NULL;
|
||||
+ char *to_free[1024];
|
||||
+
|
||||
+ if (isempty(compose_table))
|
||||
+ /* An empty map means no compose table */
|
||||
+ return 1;
|
||||
+
|
||||
+ args[i++] = KBD_LOADKEYS;
|
||||
+ args[i++] = "-q";
|
||||
+ args[i++] = "-C";
|
||||
+ args[i++] = vc;
|
||||
+
|
||||
+ strv_compose_table = strv_split(compose_table, WHITESPACE);
|
||||
+ if (strv_compose_table) {
|
||||
+ bool compose_loaded = false;
|
||||
+ bool compose_clear = false;
|
||||
+ char **name;
|
||||
+ char *arg;
|
||||
+
|
||||
+ STRV_FOREACH(name, strv_compose_table) {
|
||||
+ if (streq(*name, "-c") || streq(*name, "clear")) {
|
||||
+ compose_clear = true;
|
||||
+ continue;
|
||||
+ }
|
||||
+ if (!compose_loaded && compose_clear)
|
||||
+ args[i++] = "-c";
|
||||
+ asprintf(&arg, "compose.%s", *name);
|
||||
+ compose_loaded = true;
|
||||
+ args[i++] = to_free[j++] = arg;
|
||||
+ if (i >= ELEMENTSOF(args) - 1)
|
||||
+ break;
|
||||
+ }
|
||||
+ strv_free(strv_compose_table);
|
||||
+ }
|
||||
+ args[i++] = NULL;
|
||||
+
|
||||
+ pid = fork();
|
||||
+ if (pid < 0)
|
||||
+ return log_error_errno(errno, "Failed to fork: %m");
|
||||
+ if (pid == 0) {
|
||||
+ reset_all_signal_handlers();
|
||||
+ reset_signal_mask();
|
||||
+ execv(args[0], (char **) args);
|
||||
+ _exit(EXIT_FAILURE);
|
||||
+ }
|
||||
+
|
||||
+ ret = wait_for_terminate_and_warn(args[0], pid, true);
|
||||
+ for (i = 0; i < j; ++i)
|
||||
+ free(to_free[i]);
|
||||
+ if (ret < 0)
|
||||
+ return ret;
|
||||
+ return ret == 0;
|
||||
+}
|
||||
+#endif
|
||||
+
|
||||
+static int kbdrate_set_and_wait(const char *vc, const char *kbd_rate,
|
||||
+ const char *kbd_delay)
|
||||
+{
|
||||
+ const char *args[7];
|
||||
+ int i = 0, ret;
|
||||
+ pid_t pid;
|
||||
+
|
||||
+ if (isempty(kbd_rate) && isempty(kbd_delay))
|
||||
+ return 1;
|
||||
+
|
||||
+ args[i++] = "/bin/kbdrate";
|
||||
+ if (!isempty(kbd_rate)) {
|
||||
+ args[i++] = "-r";
|
||||
+ args[i++] = kbd_rate;
|
||||
+ }
|
||||
+ if (!isempty(kbd_delay)) {
|
||||
+ args[i++] = "-d";
|
||||
+ args[i++] = kbd_delay;
|
||||
+ }
|
||||
+ args[i++] = "-s";
|
||||
+ args[i++] = NULL;
|
||||
+
|
||||
+ pid = fork();
|
||||
+ if (pid < 0)
|
||||
+ return log_error_errno(errno, "Failed to fork: %m");
|
||||
+ if (pid == 0) {
|
||||
+ reset_all_signal_handlers();
|
||||
+ reset_signal_mask();
|
||||
+ execv(args[0], (char **) args);
|
||||
+ _exit(EXIT_FAILURE);
|
||||
+ }
|
||||
+ ret = wait_for_terminate_and_warn(args[0], pid, true);
|
||||
+ if (ret < 0)
|
||||
+ return ret;
|
||||
+ return ret == 0;
|
||||
+}
|
||||
+
|
||||
int main(int argc, char **argv) {
|
||||
const char *vc;
|
||||
_cleanup_free_ char
|
||||
*vc_keymap = NULL, *vc_keymap_toggle = NULL,
|
||||
*vc_font = NULL, *vc_font_map = NULL, *vc_font_unimap = NULL;
|
||||
+#ifdef HAVE_SYSV_COMPAT
|
||||
+ _cleanup_free_ char
|
||||
+ *vc_kbd_delay = NULL, *vc_kbd_rate = NULL,
|
||||
+ *vc_kbd_disable_caps_lock = NULL, *vc_compose_table = NULL;
|
||||
+#endif
|
||||
+ bool disable_capslock = false;
|
||||
+ bool comp_ok, rate_ok;
|
||||
_cleanup_close_ int fd = -1;
|
||||
bool utf8, font_copy = false, font_ok, keyboard_ok;
|
||||
int r = EXIT_FAILURE;
|
||||
@@ -286,6 +398,31 @@ int main(int argc, char **argv) {
|
||||
|
||||
utf8 = is_locale_utf8();
|
||||
|
||||
+#ifdef HAVE_SYSV_COMPAT
|
||||
+ r = parse_env_file("/etc/sysconfig/keyboard", NEWLINE,
|
||||
+ "KEYTABLE", &vc_keymap,
|
||||
+ "KBD_DELAY", &vc_kbd_delay,
|
||||
+ "KBD_RATE", &vc_kbd_rate,
|
||||
+ "KBD_DISABLE_CAPS_LOCK", &vc_kbd_disable_caps_lock,
|
||||
+ "COMPOSETABLE", &vc_compose_table,
|
||||
+ NULL);
|
||||
+ if (r < 0 && r != -ENOENT)
|
||||
+ log_warning("Failed to read /etc/sysconfig/keyboard: %s",
|
||||
+ strerror(-r));
|
||||
+
|
||||
+ r = parse_env_file("/etc/sysconfig/console", NEWLINE,
|
||||
+ "CONSOLE_FONT", &vc_font,
|
||||
+ "CONSOLE_SCREENMAP", &vc_font_map,
|
||||
+ "CONSOLE_UNICODEMAP", &vc_font_unimap,
|
||||
+ NULL);
|
||||
+ if (r < 0 && r != -ENOENT)
|
||||
+ log_warning("Failed to read /etc/sysconfig/console: %s",
|
||||
+ strerror(-r));
|
||||
+
|
||||
+ disable_capslock = vc_kbd_disable_caps_lock &&
|
||||
+ strcasecmp(vc_kbd_disable_caps_lock, "YES") == 0;
|
||||
+#endif /* HAVE_SYSV_COMPAT */
|
||||
+
|
||||
r = parse_env_file("/etc/vconsole.conf", NEWLINE,
|
||||
"KEYMAP", &vc_keymap,
|
||||
"KEYMAP_TOGGLE", &vc_keymap_toggle,
|
||||
@@ -317,11 +454,17 @@ int main(int argc, char **argv) {
|
||||
(void) disable_utf8(fd);
|
||||
|
||||
font_ok = font_load_and_wait(vc, vc_font, vc_font_map, vc_font_unimap) > 0;
|
||||
- keyboard_ok = keyboard_load_and_wait(vc, vc_keymap, vc_keymap_toggle, utf8) > 0;
|
||||
+ keyboard_ok = keyboard_load_and_wait(vc, vc_keymap, vc_keymap_toggle,
|
||||
+ utf8, disable_capslock) > 0;
|
||||
+#ifdef HAVE_SYSV_COMPAT
|
||||
+ comp_ok = compose_load_and_wait(vc, vc_compose_table);
|
||||
+ rate_ok = kbdrate_set_and_wait(vc, vc_kbd_rate, vc_kbd_delay);
|
||||
+#endif
|
||||
|
||||
/* Only copy the font when we executed setfont successfully */
|
||||
if (font_copy && font_ok)
|
||||
(void) font_copy_to_all_vcs(fd);
|
||||
|
||||
- return font_ok && keyboard_ok ? EXIT_SUCCESS : EXIT_FAILURE;
|
||||
+ return font_ok && keyboard_ok && comp_ok && rate_ok ?
|
||||
+ EXIT_SUCCESS : EXIT_FAILURE;
|
||||
}
|
@ -1,191 +0,0 @@
|
||||
Set NumLock according to /etc/sysconfig/keyboard.
|
||||
|
||||
https://bugzilla.novell.com/show_bug.cgi?id=746595
|
||||
|
||||
Authors:
|
||||
Stanislav Brabec <sbrabec@suse.cz>
|
||||
Cristian Rodríguez <crrodriguez@opensuse.org>
|
||||
|
||||
---
|
||||
Makefile.am | 13 ++++++++++
|
||||
rules/73-seat-numlock.rules | 8 ++++++
|
||||
src/login/numlock-on.c | 34 ++++++++++++++++++++++++++
|
||||
src/vconsole/vconsole-setup.c | 41 ++++++++++++++++++++++++++++++--
|
||||
units/systemd-vconsole-setup.service.in | 2 -
|
||||
5 files changed, 95 insertions(+), 3 deletions(-)
|
||||
|
||||
Index: systemd-228/Makefile.am
|
||||
===================================================================
|
||||
--- systemd-228.orig/Makefile.am
|
||||
+++ systemd-228/Makefile.am
|
||||
@@ -3825,6 +3825,19 @@ dist_udevrules_DATA += \
|
||||
rules/60-persistent-v4l.rules
|
||||
|
||||
# ------------------------------------------------------------------------------
|
||||
+numlock_on_SOURCES = \
|
||||
+ src/login/numlock-on.c
|
||||
+
|
||||
+numlock_on_CFLAGS = \
|
||||
+ $(AM_CFLAGS)
|
||||
+
|
||||
+udevlibexec_PROGRAMS += \
|
||||
+ numlock-on
|
||||
+
|
||||
+dist_udevrules_DATA += \
|
||||
+ rules/73-seat-numlock.rules
|
||||
+
|
||||
+# ------------------------------------------------------------------------------
|
||||
mtd_probe_SOURCES = \
|
||||
src/udev/mtd_probe/mtd_probe.c \
|
||||
src/udev/mtd_probe/mtd_probe.h \
|
||||
Index: systemd-228/rules/73-seat-numlock.rules
|
||||
===================================================================
|
||||
--- /dev/null
|
||||
+++ systemd-228/rules/73-seat-numlock.rules
|
||||
@@ -0,0 +1,8 @@
|
||||
+# This file is part of SUSE customization 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.
|
||||
+
|
||||
+SUBSYSTEM=="tty", ACTION=="add", KERNEL=="tty[0-9]|tty1[0-2]", TEST=="/run/numlock-on", RUN+="numlock-on $env{DEVNAME}"
|
||||
Index: systemd-228/src/login/numlock-on.c
|
||||
===================================================================
|
||||
--- /dev/null
|
||||
+++ systemd-228/src/login/numlock-on.c
|
||||
@@ -0,0 +1,34 @@
|
||||
+/*
|
||||
+ * numlock-on.c: Turn numlock-on
|
||||
+ *
|
||||
+ * This file may be freely copied under the terms of the GNU General
|
||||
+ * Public License (GPL), version 2, or at your option any later
|
||||
+ * version.
|
||||
+
|
||||
+ * Copyright (C) 2013 Stanislav Brabec, SUSE
|
||||
+ *
|
||||
+ * based on setleds.c, which is
|
||||
+ * Copyright (C) 1994-1999 Andries E. Brouwer
|
||||
+ */
|
||||
+
|
||||
+#include <stdio.h>
|
||||
+#include <stdlib.h>
|
||||
+#include <sys/ioctl.h>
|
||||
+#include <linux/kd.h>
|
||||
+
|
||||
+int
|
||||
+main(int argc, char **argv) {
|
||||
+ char flags;
|
||||
+
|
||||
+ if (ioctl(0, KDGKBLED, &flags)) {
|
||||
+ perror("KDGKBLED");
|
||||
+ exit(1);
|
||||
+ }
|
||||
+
|
||||
+ if (ioctl(0, KDSKBLED, flags | LED_NUM | (LED_NUM << 4))) {
|
||||
+ perror("KDSKBLED");
|
||||
+ exit(1);
|
||||
+ }
|
||||
+
|
||||
+ exit(0);
|
||||
+}
|
||||
Index: systemd-228/src/vconsole/vconsole-setup.c
|
||||
===================================================================
|
||||
--- systemd-228.orig/src/vconsole/vconsole-setup.c
|
||||
+++ systemd-228/src/vconsole/vconsole-setup.c
|
||||
@@ -36,6 +36,7 @@
|
||||
#include "fileio.h"
|
||||
#include "macro.h"
|
||||
#include "strv.h"
|
||||
+#include "fs-util.h"
|
||||
#include "io-util.h"
|
||||
#include "locale-util.h"
|
||||
#include "log.h"
|
||||
@@ -46,6 +47,10 @@
|
||||
#include "util.h"
|
||||
#include "virt.h"
|
||||
|
||||
+#define BIOS_DATA_AREA 0x400
|
||||
+#define BDA_KEYBOARD_STATUS_FLAGS_4 0x97
|
||||
+#define BDA_KSF4_NUMLOCK_MASK 0x02
|
||||
+
|
||||
static bool is_vconsole(int fd) {
|
||||
unsigned char data[1];
|
||||
|
||||
@@ -364,9 +369,10 @@ int main(int argc, char **argv) {
|
||||
#ifdef HAVE_SYSV_COMPAT
|
||||
_cleanup_free_ char
|
||||
*vc_kbd_delay = NULL, *vc_kbd_rate = NULL,
|
||||
- *vc_kbd_disable_caps_lock = NULL, *vc_compose_table = NULL;
|
||||
+ *vc_kbd_disable_caps_lock = NULL, *vc_compose_table = NULL,
|
||||
+ *vc_kbd_numlock = NULL;
|
||||
#endif
|
||||
- bool disable_capslock = false;
|
||||
+ bool disable_capslock = false, numlock = false;
|
||||
bool comp_ok, rate_ok;
|
||||
_cleanup_close_ int fd = -1;
|
||||
bool utf8, font_copy = false, font_ok, keyboard_ok;
|
||||
@@ -404,6 +410,7 @@ int main(int argc, char **argv) {
|
||||
"KBD_DELAY", &vc_kbd_delay,
|
||||
"KBD_RATE", &vc_kbd_rate,
|
||||
"KBD_DISABLE_CAPS_LOCK", &vc_kbd_disable_caps_lock,
|
||||
+ "KBD_NUMLOCK", &vc_kbd_numlock,
|
||||
"COMPOSETABLE", &vc_compose_table,
|
||||
NULL);
|
||||
if (r < 0 && r != -ENOENT)
|
||||
@@ -421,6 +428,30 @@ int main(int argc, char **argv) {
|
||||
|
||||
disable_capslock = vc_kbd_disable_caps_lock &&
|
||||
strcasecmp(vc_kbd_disable_caps_lock, "YES") == 0;
|
||||
+ numlock = vc_kbd_numlock && strcaseeq(vc_kbd_numlock, "yes");
|
||||
+#if defined(__i386__) || defined(__x86_64__)
|
||||
+ if (vc_kbd_numlock && strcaseeq(vc_kbd_numlock, "bios")) {
|
||||
+ int _cleanup_close_ fdmem;
|
||||
+ char c;
|
||||
+
|
||||
+ errno = 0;
|
||||
+ fdmem = open ("/dev/mem", O_RDONLY);
|
||||
+ if (fdmem < 0)
|
||||
+ goto finish;
|
||||
+
|
||||
+ if (lseek(fdmem, BIOS_DATA_AREA + BDA_KEYBOARD_STATUS_FLAGS_4, SEEK_SET) == (off_t) -1)
|
||||
+ goto finish;
|
||||
+
|
||||
+ if (read(fdmem, &c, sizeof(char)) == -1)
|
||||
+ goto finish;
|
||||
+
|
||||
+ if (c & BDA_KSF4_NUMLOCK_MASK)
|
||||
+ numlock = true;
|
||||
+ finish:
|
||||
+ if (errno)
|
||||
+ log_warning_errno(errno, "Failed to read /dev/mem: %m");
|
||||
+ }
|
||||
+#endif /* x86 */
|
||||
#endif /* HAVE_SYSV_COMPAT */
|
||||
|
||||
r = parse_env_file("/etc/vconsole.conf", NEWLINE,
|
||||
@@ -456,6 +487,10 @@ int main(int argc, char **argv) {
|
||||
font_ok = font_load_and_wait(vc, vc_font, vc_font_map, vc_font_unimap) > 0;
|
||||
keyboard_ok = keyboard_load_and_wait(vc, vc_keymap, vc_keymap_toggle,
|
||||
utf8, disable_capslock) > 0;
|
||||
+ if (numlock)
|
||||
+ touch("/run/numlock-on");
|
||||
+ else
|
||||
+ unlink("/run/numlock-on");
|
||||
#ifdef HAVE_SYSV_COMPAT
|
||||
comp_ok = compose_load_and_wait(vc, vc_compose_table);
|
||||
rate_ok = kbdrate_set_and_wait(vc, vc_kbd_rate, vc_kbd_delay);
|
||||
Index: systemd-228/units/systemd-vconsole-setup.service.in
|
||||
===================================================================
|
||||
--- systemd-228.orig/units/systemd-vconsole-setup.service.in
|
||||
+++ systemd-228/units/systemd-vconsole-setup.service.in
|
||||
@@ -10,7 +10,7 @@ Description=Setup Virtual Console
|
||||
Documentation=man:systemd-vconsole-setup.service(8) man:vconsole.conf(5)
|
||||
DefaultDependencies=no
|
||||
Conflicts=shutdown.target
|
||||
-Before=sysinit.target shutdown.target
|
||||
+Before=sysinit.target shutdown.target systemd-udev-trigger.service
|
||||
ConditionPathExists=/dev/tty0
|
||||
|
||||
[Service]
|
@ -1,72 +0,0 @@
|
||||
From: Frederic Crozat <fcrozat@suse.com>
|
||||
Date: Tue, 4 Dec 2012 16:51:32 +0000
|
||||
Subject: handle root_uses_lang value in /etc/sysconfig/language
|
||||
|
||||
handle ROOT_USES_LANG=ctype (boo#792182).
|
||||
---
|
||||
src/core/locale-setup.c | 40 ++++++++++++++++++++++++++++++++++++++++
|
||||
1 file changed, 40 insertions(+)
|
||||
|
||||
Index: systemd-228/src/core/locale-setup.c
|
||||
===================================================================
|
||||
--- systemd-228.orig/src/core/locale-setup.c
|
||||
+++ systemd-228/src/core/locale-setup.c
|
||||
@@ -30,11 +30,16 @@
|
||||
#include "strv.h"
|
||||
#include "util.h"
|
||||
#include "virt.h"
|
||||
+#include "alloc-util.h"
|
||||
|
||||
int locale_setup(char ***environment) {
|
||||
char **add;
|
||||
char *variables[_VARIABLE_LC_MAX] = {};
|
||||
int r = 0, i;
|
||||
+#ifdef HAVE_SYSV_COMPAT
|
||||
+ char _cleanup_free_ *rc_lang = NULL, *rc_lc_ctype = NULL;
|
||||
+ char _cleanup_free_ *root_uses_lang = NULL;
|
||||
+#endif
|
||||
|
||||
if (detect_container() <= 0) {
|
||||
r = parse_env_file("/proc/cmdline", WHITESPACE,
|
||||
@@ -81,6 +86,41 @@ int locale_setup(char ***environment) {
|
||||
if (r < 0 && r != -ENOENT)
|
||||
log_warning_errno(r, "Failed to read /etc/locale.conf: %m");
|
||||
}
|
||||
+#ifdef HAVE_SYSV_COMPAT
|
||||
+ r = parse_env_file("/etc/sysconfig/language", NEWLINE,
|
||||
+ "RC_LANG", &rc_lang,
|
||||
+ "RC_LC_CTYPE", &rc_lc_ctype,
|
||||
+ "ROOT_USES_LANG", &root_uses_lang,
|
||||
+ NULL);
|
||||
+
|
||||
+ if (r < 0 && r != -ENOENT)
|
||||
+ log_warning("Failed to read /etc/sysconfig/language: %s", strerror(-r));
|
||||
+
|
||||
+ /*
|
||||
+ * Use the values of the interactive locale configuration in /etc/sysconfig/language
|
||||
+ * as fallback if /etc/locale.conf does not exist and no locale was specified on the
|
||||
+ * kernel's command line. The special case ROOT_USES_LANG=ctype allows to set LC_CTYPE
|
||||
+ * even if LANG for root is set to e.g. POSIX. But do this only if no LC_CTYPE has been
|
||||
+ * set in /etc/locale.conf and on the kernel's command line.
|
||||
+ */
|
||||
+ if (root_uses_lang) {
|
||||
+ if (strcaseeq(root_uses_lang, "yes") && !variables[VARIABLE_LANG]) {
|
||||
+ variables[VARIABLE_LANG] = rc_lang;
|
||||
+ rc_lang = NULL;
|
||||
+ }
|
||||
+ if (strcaseeq(root_uses_lang, "ctype") && !variables[VARIABLE_LC_CTYPE]) {
|
||||
+ if (variables[VARIABLE_LANG])
|
||||
+ variables[VARIABLE_LC_CTYPE] = strdup(variables[VARIABLE_LANG]);
|
||||
+ else if (rc_lc_ctype && *rc_lc_ctype) {
|
||||
+ variables[VARIABLE_LC_CTYPE] = rc_lc_ctype;
|
||||
+ rc_lc_ctype = NULL;
|
||||
+ } else if (rc_lang && *rc_lang) {
|
||||
+ variables[VARIABLE_LC_CTYPE] = rc_lang;
|
||||
+ rc_lang = NULL;
|
||||
+ }
|
||||
+ }
|
||||
+ }
|
||||
+#endif
|
||||
|
||||
add = NULL;
|
||||
for (i = 0; i < _VARIABLE_LC_MAX; i++) {
|
@ -1,13 +0,0 @@
|
||||
Index: systemd-222/src/core/hostname-setup.c
|
||||
===================================================================
|
||||
--- systemd-222.orig/src/core/hostname-setup.c
|
||||
+++ systemd-222/src/core/hostname-setup.c
|
||||
@@ -44,7 +44,7 @@ int hostname_setup(void) {
|
||||
else
|
||||
log_warning_errno(r, "Failed to read configured hostname: %m");
|
||||
|
||||
- hn = NULL;
|
||||
+ hn = strdup("nohostname.set.site");
|
||||
} else
|
||||
hn = b;
|
||||
/* strip any leftover of a domain name */
|
@ -1,399 +0,0 @@
|
||||
From a8cbe79c77836cc2466e3534157864abc98ef3ef Mon Sep 17 00:00:00 2001
|
||||
From: Frederic Crozat <fcrozat@suse.com>
|
||||
Date: Fri, 28 Jun 2013 17:54:41 +0200
|
||||
Subject: [PATCH] insserv.conf generator
|
||||
|
||||
parse /etc/insserv.conf.dd content and /etc/insserv.conf and generate
|
||||
systemd unit drop-in files to add dependencies
|
||||
---
|
||||
Makefile.am | 9
|
||||
src/insserv-generator/Makefile | 28 ++
|
||||
src/insserv-generator/insserv-generator.c | 319 ++++++++++++++++++++++++++++++
|
||||
3 files changed, 355 insertions(+), 1 deletion(-)
|
||||
create mode 100644 src/insserv-generator/Makefile
|
||||
create mode 100644 src/insserv-generator/insserv-generator.c
|
||||
|
||||
Index: systemd-228/Makefile.am
|
||||
===================================================================
|
||||
--- systemd-228.orig/Makefile.am
|
||||
+++ systemd-228/Makefile.am
|
||||
@@ -626,7 +626,8 @@ nodist_systemunit_DATA += \
|
||||
|
||||
systemgenerator_PROGRAMS += \
|
||||
systemd-sysv-generator \
|
||||
- systemd-rc-local-generator
|
||||
+ systemd-rc-local-generator \
|
||||
+ systemd-insserv-generator
|
||||
endif
|
||||
|
||||
EXTRA_DIST += \
|
||||
@@ -2682,6 +2683,12 @@ $(systemd_boot): $(systemd_boot_solib)
|
||||
endif
|
||||
endif
|
||||
|
||||
+#-------------------------------------------------------------------------------
|
||||
+systemd_insserv_generator_SOURCES = \
|
||||
+ src/insserv-generator/insserv-generator.c
|
||||
+
|
||||
+systemd_insserv_generator_LDADD = libbasic.la
|
||||
+
|
||||
# ------------------------------------------------------------------------------
|
||||
stub_headers = \
|
||||
src/boot/efi/util.h \
|
||||
Index: systemd-228/src/insserv-generator/Makefile
|
||||
===================================================================
|
||||
--- /dev/null
|
||||
+++ systemd-228/src/insserv-generator/Makefile
|
||||
@@ -0,0 +1,28 @@
|
||||
+# This file is part of systemd.
|
||||
+#
|
||||
+# Copyright 2010 Lennart Poettering
|
||||
+#
|
||||
+# systemd is free software; you can redistribute it and/or modify it
|
||||
+# under the terms of the GNU Lesser General Public License as published by
|
||||
+# the Free Software Foundation; either version 2.1 of the License, or
|
||||
+# (at your option) any later version.
|
||||
+#
|
||||
+# systemd is distributed in the hope that it will be useful, but
|
||||
+# WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
+# Lesser General Public License for more details.
|
||||
+#
|
||||
+# You should have received a copy of the GNU Lesser General Public License
|
||||
+# along with systemd; If not, see <http://www.gnu.org/licenses/>.
|
||||
+
|
||||
+# This file is a dirty trick to simplify compilation from within
|
||||
+# emacs. This file is not intended to be distributed. So, don't touch
|
||||
+# it, even better ignore it!
|
||||
+
|
||||
+all:
|
||||
+ $(MAKE) -C ..
|
||||
+
|
||||
+clean:
|
||||
+ $(MAKE) -C .. clean
|
||||
+
|
||||
+.PHONY: all clean
|
||||
Index: systemd-228/src/insserv-generator/insserv-generator.c
|
||||
===================================================================
|
||||
--- /dev/null
|
||||
+++ systemd-228/src/insserv-generator/insserv-generator.c
|
||||
@@ -0,0 +1,319 @@
|
||||
+/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/
|
||||
+
|
||||
+/***
|
||||
+ This file is part of systemd.
|
||||
+
|
||||
+ Copyright 2012 Lennart Poettering
|
||||
+
|
||||
+ systemd is free software; you can redistribute it and/or modify it
|
||||
+ under the terms of the GNU Lesser General Public License as published by
|
||||
+ the Free Software Foundation; either version 2.1 of the License, or
|
||||
+ (at your option) any later version.
|
||||
+
|
||||
+ systemd is distributed in the hope that it will be useful, but
|
||||
+ WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
+ Lesser General Public License for more details.
|
||||
+
|
||||
+ You should have received a copy of the GNU Lesser General Public License
|
||||
+ along with systemd; If not, see <http://www.gnu.org/licenses/>.
|
||||
+ ***/
|
||||
+
|
||||
+#include <stdio.h>
|
||||
+#include <errno.h>
|
||||
+#include <string.h>
|
||||
+#include <sys/stat.h>
|
||||
+
|
||||
+#include "mkdir.h"
|
||||
+#include "log.h"
|
||||
+#include "fileio.h"
|
||||
+#include "unit-name.h"
|
||||
+#include "special.h"
|
||||
+#include "path-util.h"
|
||||
+#include "util.h"
|
||||
+#include "strv.h"
|
||||
+#include "alloc-util.h"
|
||||
+#include "string-util.h"
|
||||
+#include "fd-util.h"
|
||||
+
|
||||
+static const char *arg_dest = "/tmp";
|
||||
+
|
||||
+static char *sysv_translate_name(const char *name) {
|
||||
+ char *r;
|
||||
+
|
||||
+ r = new(char, strlen(name) + sizeof(".service"));
|
||||
+ if (!r)
|
||||
+ return NULL;
|
||||
+
|
||||
+ if (endswith(name, ".sh"))
|
||||
+ /* Drop .sh suffix */
|
||||
+ strcpy(stpcpy(r, name) - 3, ".service");
|
||||
+ if (startswith(name, "boot."))
|
||||
+ /* Drop SuSE-style boot. prefix */
|
||||
+ strcpy(stpcpy(r, name + 5), ".service");
|
||||
+ else
|
||||
+ /* Normal init script name */
|
||||
+ strcpy(stpcpy(r, name), ".service");
|
||||
+
|
||||
+ return r;
|
||||
+}
|
||||
+
|
||||
+static int sysv_translate_facility(const char *name, const char *filename, char **_r) {
|
||||
+
|
||||
+ /* We silently ignore the $ prefix here. According to the LSB
|
||||
+ * spec it simply indicates whether something is a
|
||||
+ * standardized name or a distribution-specific one. Since we
|
||||
+ * just follow what already exists and do not introduce new
|
||||
+ * uses or names we don't care who introduced a new name. */
|
||||
+
|
||||
+ static const char * const table[] = {
|
||||
+ /* LSB defined facilities */
|
||||
+ "local_fs", NULL,
|
||||
+ "network", SPECIAL_NETWORK_ONLINE_TARGET,
|
||||
+ "named", SPECIAL_NSS_LOOKUP_TARGET,
|
||||
+ "portmap", SPECIAL_RPCBIND_TARGET,
|
||||
+ "remote_fs", SPECIAL_REMOTE_FS_TARGET,
|
||||
+ "syslog", NULL,
|
||||
+ "time", SPECIAL_TIME_SYNC_TARGET,
|
||||
+ };
|
||||
+
|
||||
+ unsigned i;
|
||||
+ char *r;
|
||||
+ const char *n;
|
||||
+ int ret;
|
||||
+
|
||||
+ assert(name);
|
||||
+ assert(_r);
|
||||
+
|
||||
+ n = *name == '$' ? name + 1 : name;
|
||||
+
|
||||
+ for (i = 0; i < ELEMENTSOF(table); i += 2) {
|
||||
+
|
||||
+ if (!streq(table[i], n))
|
||||
+ continue;
|
||||
+
|
||||
+ if (!table[i+1])
|
||||
+ return 0;
|
||||
+
|
||||
+ r = strdup(table[i+1]);
|
||||
+ if (!r)
|
||||
+ return log_oom();
|
||||
+
|
||||
+ goto finish;
|
||||
+ }
|
||||
+
|
||||
+ /* If we don't know this name, fallback heuristics to figure
|
||||
+ * out whether something is a target or a service alias. */
|
||||
+
|
||||
+ if (*name == '$') {
|
||||
+ if (!unit_prefix_is_valid(n))
|
||||
+ return -EINVAL;
|
||||
+
|
||||
+ /* Facilities starting with $ are most likely targets */
|
||||
+ ret = unit_name_build(n, NULL, ".target", &r);
|
||||
+ if (ret < 0)
|
||||
+ return ret;
|
||||
+ } else if (filename && streq(name, filename))
|
||||
+ /* Names equaling the file name of the services are redundant */
|
||||
+ return 0;
|
||||
+ else
|
||||
+ /* Everything else we assume to be normal service names */
|
||||
+ r = sysv_translate_name(n);
|
||||
+
|
||||
+ if (!r)
|
||||
+ return -ENOMEM;
|
||||
+
|
||||
+finish:
|
||||
+ *_r = r;
|
||||
+
|
||||
+ return 1;
|
||||
+}
|
||||
+
|
||||
+
|
||||
+
|
||||
+static int parse_insserv_conf(const char* filename) {
|
||||
+ _cleanup_fclose_ FILE *f = NULL;
|
||||
+ int r;
|
||||
+
|
||||
+ if (!(f = fopen(filename, "re"))) {
|
||||
+ log_debug("Failed to open file %s", filename);
|
||||
+ r = errno == ENOENT ? 0 : -errno;
|
||||
+ return r;
|
||||
+ }
|
||||
+
|
||||
+ while (!feof(f)) {
|
||||
+ char l[LINE_MAX], *t;
|
||||
+ _cleanup_strv_free_ char **parsed = NULL;
|
||||
+
|
||||
+ if (!fgets(l, sizeof(l), f)) {
|
||||
+ if (feof(f))
|
||||
+ break;
|
||||
+
|
||||
+ r = -errno;
|
||||
+ log_error("Failed to read configuration file '%s': %s", filename, strerror(-r));
|
||||
+ return -r;
|
||||
+ }
|
||||
+
|
||||
+ t = strstrip(l);
|
||||
+ if (*t != '$' && *t != '<')
|
||||
+ continue;
|
||||
+
|
||||
+ parsed = strv_split(t,WHITESPACE);
|
||||
+ /* we ignore <interactive>, not used, equivalent to X-Interactive */
|
||||
+ if (parsed && !startswith_no_case (parsed[0], "<interactive>")) {
|
||||
+ _cleanup_free_ char *facility = NULL;
|
||||
+ if (sysv_translate_facility(parsed[0], NULL, &facility) < 0 || !facility)
|
||||
+ continue;
|
||||
+ if (streq(facility, SPECIAL_REMOTE_FS_TARGET)) {
|
||||
+ _cleanup_free_ char *unit = NULL;
|
||||
+ /* insert also a Wants dependency from remote-fs-pre on remote-fs */
|
||||
+ unit = strjoin(arg_dest, "/remote-fs.target.d/50-",basename(filename),".conf", NULL);
|
||||
+ if (!unit)
|
||||
+ return log_oom();
|
||||
+
|
||||
+ mkdir_parents_label(unit, 0755);
|
||||
+
|
||||
+ r = write_string_file(unit,
|
||||
+ "# Automatically generated by systemd-insserv-generator\n\n"
|
||||
+ "[Unit]\n"
|
||||
+ "Wants=remote-fs-pre.target\n",
|
||||
+ WRITE_STRING_FILE_CREATE);
|
||||
+ if (r)
|
||||
+ return r;
|
||||
+ free (facility);
|
||||
+ facility=strdup(SPECIAL_REMOTE_FS_PRE_TARGET);
|
||||
+ }
|
||||
+ if (facility && endswith(facility, ".target")) {
|
||||
+ char *name, **j;
|
||||
+ FILE *file = NULL;
|
||||
+
|
||||
+ STRV_FOREACH (j, parsed+1) {
|
||||
+ _cleanup_free_ char *unit = NULL;
|
||||
+ _cleanup_free_ char *dep = NULL;
|
||||
+
|
||||
+ if (*j[0] == '+')
|
||||
+ name = *j+1;
|
||||
+ else
|
||||
+ name = *j;
|
||||
+ if (streq(name, "boot.localfs") ||
|
||||
+ streq(name, "boot.crypto"))
|
||||
+ continue;
|
||||
+ if ((sysv_translate_facility(name, NULL, &dep) < 0) || !dep)
|
||||
+ continue;
|
||||
+
|
||||
+ unit = strjoin(arg_dest, "/", dep, ".d/50-",basename(filename),"-",parsed[0],".conf", NULL);
|
||||
+ if (!unit)
|
||||
+ return log_oom();
|
||||
+
|
||||
+ mkdir_parents_label(unit, 0755);
|
||||
+
|
||||
+ file = fopen(unit, "wxe");
|
||||
+ if (!file) {
|
||||
+ if (errno == EEXIST)
|
||||
+ log_error("Failed to create drop-in file %s", unit);
|
||||
+ else
|
||||
+ log_error("Failed to create drop-in file %s: %m", unit);
|
||||
+ return -errno;
|
||||
+ }
|
||||
+
|
||||
+ fprintf(file,
|
||||
+ "# Automatically generated by systemd-insserv-generator\n\n"
|
||||
+ "[Unit]\n"
|
||||
+ "Wants=%s\n"
|
||||
+ "Before=%s\n",
|
||||
+ facility, facility);
|
||||
+
|
||||
+ fflush(file);
|
||||
+ if (ferror(file)) {
|
||||
+ log_error("Failed to write unit file %s: %m", unit);
|
||||
+ return -errno;
|
||||
+ }
|
||||
+ fclose(file);
|
||||
+
|
||||
+ if (*j[0] != '+') {
|
||||
+ free (unit);
|
||||
+ unit = strjoin(arg_dest, "/", facility, ".d/50-hard-dependency-",basename(filename),"-",parsed[0],".conf", NULL);
|
||||
+ if (!unit)
|
||||
+ return log_oom();
|
||||
+
|
||||
+ mkdir_parents_label(unit, 0755);
|
||||
+
|
||||
+ file = fopen(unit, "wxe");
|
||||
+ if (!file) {
|
||||
+ if (errno == EEXIST)
|
||||
+ log_error("Failed to create drop-in file %s, as it already exists", unit);
|
||||
+ else
|
||||
+ log_error("Failed to create drop-in file %s: %m", unit);
|
||||
+ return -errno;
|
||||
+ }
|
||||
+
|
||||
+
|
||||
+ fprintf(file,
|
||||
+ "# Automatically generated by systemd-insserv-generator\n\n"
|
||||
+ "[Unit]\n"
|
||||
+ "SourcePath=%s\n"
|
||||
+ "Requires=%s\n",
|
||||
+ filename, dep);
|
||||
+ fflush(file);
|
||||
+ if (ferror(file)) {
|
||||
+ log_error("Failed to write unit file %s: %m", unit);
|
||||
+ return -errno;
|
||||
+ }
|
||||
+ fclose(file);
|
||||
+ }
|
||||
+ }
|
||||
+ }
|
||||
+ }
|
||||
+ }
|
||||
+ return r;
|
||||
+}
|
||||
+
|
||||
+static int parse_insserv(void) {
|
||||
+ DIR *d = NULL;
|
||||
+ struct dirent *de;
|
||||
+ int r = 0;
|
||||
+
|
||||
+ if (!(d = opendir("/etc/insserv.conf.d/"))) {
|
||||
+ if (errno != ENOENT) {
|
||||
+ log_debug("opendir() failed on /etc/insserv.conf.d/ %s", strerror(errno));
|
||||
+ }
|
||||
+ } else {
|
||||
+
|
||||
+ while ((de = readdir(d))) {
|
||||
+ char *path = NULL;
|
||||
+ if (hidden_file(de->d_name))
|
||||
+ continue;
|
||||
+
|
||||
+ path = strjoin("/etc/insserv.conf.d/", de->d_name, NULL);
|
||||
+ parse_insserv_conf(path);
|
||||
+ free(path);
|
||||
+ }
|
||||
+ closedir (d);
|
||||
+ }
|
||||
+
|
||||
+ r = parse_insserv_conf("/etc/insserv.conf");
|
||||
+
|
||||
+ return r;
|
||||
+}
|
||||
+
|
||||
+int main(int argc, char *argv[]) {
|
||||
+ int r = 0;
|
||||
+
|
||||
+ if (argc > 1 && argc != 4) {
|
||||
+ log_error("This program takes three or no arguments.");
|
||||
+ return EXIT_FAILURE;
|
||||
+ }
|
||||
+
|
||||
+ if (argc > 1)
|
||||
+ arg_dest = argv[1];
|
||||
+
|
||||
+ log_set_target(LOG_TARGET_SAFE);
|
||||
+ log_parse_environment();
|
||||
+ log_open();
|
||||
+
|
||||
+ umask(0022);
|
||||
+
|
||||
+ r = parse_insserv();
|
||||
+
|
||||
+ return (r < 0) ? EXIT_FAILURE : EXIT_SUCCESS;
|
||||
+}
|
@ -1,138 +0,0 @@
|
||||
From: werner@suse.de
|
||||
Upstream: marked as openSUSE-specific fix originally, but may well
|
||||
worth be to be sent upstream.
|
||||
|
||||
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-221/src/journal/catalog.c
|
||||
===================================================================
|
||||
--- systemd-221.orig/src/journal/catalog.c
|
||||
+++ systemd-221/src/journal/catalog.c
|
||||
@@ -469,6 +469,10 @@ finish:
|
||||
|
||||
static int open_mmap(const char *database, int *_fd, struct stat *_st, void **_p) {
|
||||
const CatalogHeader *h;
|
||||
+ 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;
|
||||
@@ -491,12 +495,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);
|
||||
if (p == MAP_FAILED) {
|
||||
safe_close(fd);
|
||||
return -errno;
|
||||
}
|
||||
|
||||
+ 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 ||
|
||||
le64toh(h->header_size) < sizeof(CatalogHeader) ||
|
||||
Index: systemd-221/src/journal/journal-authenticate.c
|
||||
===================================================================
|
||||
--- systemd-221.orig/src/journal/journal-authenticate.c
|
||||
+++ systemd-221/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);
|
||||
if (m == MAP_FAILED) {
|
||||
m = NULL;
|
||||
r = -errno;
|
||||
@@ -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);
|
||||
if (f->fss_file == MAP_FAILED) {
|
||||
f->fss_file = NULL;
|
||||
r = -errno;
|
||||
Index: systemd-221/src/journal/journald-kmsg.c
|
||||
===================================================================
|
||||
--- systemd-221.orig/src/journal/journald-kmsg.c
|
||||
+++ systemd-221/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);
|
||||
if (p == MAP_FAILED) {
|
||||
log_error_errno(errno, "Failed to map sequential number file, ignoring: %m");
|
||||
return 0;
|
||||
Index: systemd-221/src/journal/mmap-cache.c
|
||||
===================================================================
|
||||
--- systemd-221.orig/src/journal/mmap-cache.c
|
||||
+++ systemd-221/src/journal/mmap-cache.c
|
||||
@@ -466,11 +466,14 @@ static int add_mmap(
|
||||
struct stat *st,
|
||||
void **ret) {
|
||||
|
||||
+ static const unsigned int advice[] =
|
||||
+ {MADV_WILLNEED, MADV_SEQUENTIAL, MADV_DONTDUMP, MADV_DONTFORK};
|
||||
uint64_t woffset, wsize;
|
||||
Context *c;
|
||||
FileDescriptor *f;
|
||||
Window *w;
|
||||
void *d;
|
||||
+ unsigned int n;
|
||||
int r;
|
||||
|
||||
assert(m);
|
||||
@@ -509,7 +512,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);
|
||||
if (d != MAP_FAILED)
|
||||
break;
|
||||
if (errno != ENOMEM)
|
||||
@@ -522,6 +526,16 @@ static int add_mmap(
|
||||
return -ENOMEM;
|
||||
}
|
||||
|
||||
+ 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;
|
||||
+ }
|
||||
+ if (madvise(d, wsize, advice[n]) < 0)
|
||||
+ log_warning("Failed to give advice about use of memory: %m");
|
||||
+ }
|
||||
+
|
||||
c = context_add(m, context);
|
||||
if (!c)
|
||||
goto outofmem;
|
10
kbd-model-map.legacy
Normal file
10
kbd-model-map.legacy
Normal file
@ -0,0 +1,10 @@
|
||||
# Additional layouts offered by YaST
|
||||
Pl02 pl pc105 - terminate:ctrl_alt_bksp
|
||||
arabic ara,us pc105 - terminate:ctrl_alt_bksp,grp:shift_toggle
|
||||
cn-latin1 ca pc105 multix terminate:ctrl_alt_bksp
|
||||
cz-lat2-us cz,us pc105 qwerty,basic terminate:ctrl_alt_bksp,grp:shift_toggle
|
||||
es-cp850 es pc105 - terminate:ctrl_alt_bksp
|
||||
korean kr pc105 - terminate:ctrl_alt_bksp
|
||||
lt.std lt pc105 std terminate:ctrl_alt_bksp
|
||||
no-latin1 no pc105 - terminate:ctrl_alt_bksp
|
||||
ruwin_alt-UTF-8 us,ru pc105 ,winkeys terminate:ctrl_alt_bksp,grp:ctrl_shift_toggle,grp_led:scroll
|
@ -1,28 +0,0 @@
|
||||
From: werner@suse.de
|
||||
Date: Tue Jan 20 11:33:59 UTC 2015
|
||||
|
||||
---
|
||||
src/locale/kbd-model-map | 13 +++++++++++++
|
||||
1 file changed, 13 insertions(+)
|
||||
|
||||
Index: systemd-221/src/locale/kbd-model-map
|
||||
===================================================================
|
||||
--- systemd-221.orig/src/locale/kbd-model-map
|
||||
+++ systemd-221/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
|
||||
+cn-latin1 ca pc105 multix terminate:ctrl_alt_bksp
|
||||
+cz-lat2-us cz,us pc105 qwerty,basic terminate:ctrl_alt_bksp,grp:shift_toggle
|
||||
+es-cp850 es pc105 - terminate:ctrl_alt_bksp
|
||||
+khmer us,kh pc105 - terminate:ctrl_alt_bksp,grp:alt_shift_toggle
|
||||
+korean kr pc105 - terminate:ctrl_alt_bksp
|
||||
+lt.baltic lt pc105 - terminate:ctrl_alt_bksp
|
||||
+lt.std lt pc105 std terminate:ctrl_alt_bksp
|
||||
+no-latin1 no pc105 - terminate:ctrl_alt_bksp
|
||||
+ruwin_alt-UTF-8 us,ru pc105 ,winkeys terminate:ctrl_alt_bksp,grp:ctrl_shift_toggle,grp_led:scroll
|
||||
+sk-qwertz sk,us pc105 - terminate:ctrl_alt_bksp,grp:shift_toggle
|
@ -1,19 +0,0 @@
|
||||
---
|
||||
configure.ac | 4 ----
|
||||
1 file changed, 4 deletions(-)
|
||||
|
||||
Index: systemd-224/configure.ac
|
||||
===================================================================
|
||||
--- systemd-224.orig/configure.ac
|
||||
+++ systemd-224/configure.ac
|
||||
@@ -199,10 +199,6 @@ AS_CASE([$CC], [*clang*],
|
||||
-Wno-gnu-variable-sized-type-not-at-end \
|
||||
])])
|
||||
|
||||
-AS_CASE([$CFLAGS], [*-O[[12345sz\ ]]*],
|
||||
- [CC_CHECK_FLAGS_APPEND([with_cflags], [CFLAGS], [\
|
||||
- -flto])],
|
||||
- [AC_MSG_RESULT([skipping -flto, optimization not enabled])])
|
||||
AC_SUBST([OUR_CFLAGS], "$with_cflags $sanitizer_cflags")
|
||||
|
||||
AS_CASE([$CFLAGS], [*-O[[12345sz\ ]]*],
|
@ -1,84 +0,0 @@
|
||||
From: Werner Fink <werner@suse.de>
|
||||
Date: Wed Sep 23 12:37:23 UTC 2015
|
||||
Subject: Do not bother vistual console to much with GIO/PIO
|
||||
|
||||
This avoids broken virtual console mapping due stressed ioctl API
|
||||
for the virtual consoles (boo#904214)
|
||||
|
||||
---
|
||||
src/vconsole/vconsole-setup.c | 39 +++++++++++++++++++++++++--------------
|
||||
1 file changed, 25 insertions(+), 14 deletions(-)
|
||||
|
||||
--- a/src/vconsole/vconsole-setup.c
|
||||
+++ b/src/vconsole/vconsole-setup.c 2015-09-23 12:34:33.854018750 +0000
|
||||
@@ -202,8 +202,13 @@ static void font_copy_to_all_vcs(int fd)
|
||||
unsigned short map16[E_TABSZ];
|
||||
struct unimapdesc unimapd;
|
||||
struct unipair unipairs[USHRT_MAX];
|
||||
+ struct console_font_op cfo = {};
|
||||
int i, r;
|
||||
|
||||
+ bool hasmap8;
|
||||
+ bool hasmap16;
|
||||
+ bool hasunimap;
|
||||
+
|
||||
/* get active, and 16 bit mask of used VT numbers */
|
||||
r = ioctl(fd, VT_GETSTATE, &vcs);
|
||||
if (r < 0) {
|
||||
@@ -211,10 +216,22 @@ static void font_copy_to_all_vcs(int fd)
|
||||
return;
|
||||
}
|
||||
|
||||
+ /* copy font from active VT, where the font was uploaded to */
|
||||
+ cfo.op = KD_FONT_OP_COPY;
|
||||
+ cfo.height = vcs.v_active-1; /* tty1 == index 0 */
|
||||
+
|
||||
+ hasmap8 = (ioctl(fd, GIO_SCRNMAP, map8) >= 0);
|
||||
+ hasmap16 = (ioctl(fd, GIO_UNISCRNMAP, map16) >= 0);
|
||||
+
|
||||
+ /* unimapd is a ushort count and a pointer to an
|
||||
+ * array of struct unipair { ushort, ushort } */
|
||||
+ unimapd.entries = unipairs;
|
||||
+ unimapd.entry_ct = USHRT_MAX;
|
||||
+ hasunimap = (ioctl(fd, GIO_UNIMAP, &unimapd) >= 0);
|
||||
+
|
||||
for (i = 1; i <= 15; i++) {
|
||||
char vcname[strlen("/dev/vcs") + DECIMAL_STR_MAX(int)];
|
||||
_cleanup_close_ int vcfd = -1;
|
||||
- struct console_font_op cfo = {};
|
||||
|
||||
if (i == vcs.v_active)
|
||||
continue;
|
||||
@@ -229,25 +246,19 @@ static void font_copy_to_all_vcs(int fd)
|
||||
if (vcfd < 0)
|
||||
continue;
|
||||
|
||||
- /* copy font from active VT, where the font was uploaded to */
|
||||
- cfo.op = KD_FONT_OP_COPY;
|
||||
- cfo.height = vcs.v_active-1; /* tty1 == index 0 */
|
||||
+ /* copy font from active VT to vcs */
|
||||
(void) ioctl(vcfd, KDFONTOP, &cfo);
|
||||
|
||||
- /* copy map of 8bit chars */
|
||||
- if (ioctl(fd, GIO_SCRNMAP, map8) >= 0)
|
||||
+ /* copy map of 8bit chars to vcs */
|
||||
+ if (hasmap8)
|
||||
(void) ioctl(vcfd, PIO_SCRNMAP, map8);
|
||||
|
||||
- /* copy map of 8bit chars -> 16bit Unicode values */
|
||||
- if (ioctl(fd, GIO_UNISCRNMAP, map16) >= 0)
|
||||
+ /* copy map of 8bit chars -> 16bit Unicode values to vcs */
|
||||
+ if (hasmap16)
|
||||
(void) ioctl(vcfd, PIO_UNISCRNMAP, map16);
|
||||
|
||||
- /* copy unicode translation table */
|
||||
- /* unimapd is a ushort count and a pointer to an
|
||||
- array of struct unipair { ushort, ushort } */
|
||||
- unimapd.entries = unipairs;
|
||||
- unimapd.entry_ct = USHRT_MAX;
|
||||
- if (ioctl(fd, GIO_UNIMAP, &unimapd) >= 0) {
|
||||
+ /* copy unicode translation table to vcs */
|
||||
+ if (hasunimap) {
|
||||
struct unimapinit adv = { 0, 0, 0 };
|
||||
|
||||
(void) ioctl(vcfd, PIO_UNIMAPCLR, &adv);
|
@ -1,25 +0,0 @@
|
||||
If after emergency service had been started there is incoming
|
||||
traffic on syslog.socket emergency.service gets killed due to
|
||||
implicit dependencies on basic.target => sysinit.target which in
|
||||
turn conflict with emergency.target.
|
||||
|
||||
As a workaround explicitly stop syslog.socket when entering
|
||||
emergency.service.
|
||||
|
||||
Reference: bnc#852232
|
||||
---
|
||||
units/emergency.service.in | 1 +
|
||||
1 file changed, 1 insertion(+)
|
||||
|
||||
Index: systemd-221/units/emergency.service.in
|
||||
===================================================================
|
||||
--- systemd-221.orig/units/emergency.service.in
|
||||
+++ systemd-221/units/emergency.service.in
|
||||
@@ -11,6 +11,7 @@ Documentation=man:sulogin(8)
|
||||
DefaultDependencies=no
|
||||
Conflicts=shutdown.target
|
||||
Conflicts=rescue.service
|
||||
+Conflicts=syslog.socket
|
||||
Before=shutdown.target
|
||||
|
||||
[Service]
|
@ -1,67 +0,0 @@
|
||||
---
|
||||
src/fstab-generator/fstab-generator.c | 45 +++++++++++++++++++++++++++++++++-
|
||||
1 file changed, 44 insertions(+), 1 deletion(-)
|
||||
|
||||
Index: systemd-221/src/fstab-generator/fstab-generator.c
|
||||
===================================================================
|
||||
--- systemd-221.orig/src/fstab-generator/fstab-generator.c
|
||||
+++ systemd-221/src/fstab-generator/fstab-generator.c
|
||||
@@ -47,6 +47,49 @@ static char *arg_usr_what = NULL;
|
||||
static char *arg_usr_fstype = NULL;
|
||||
static char *arg_usr_options = NULL;
|
||||
|
||||
+static int check_crypttab(const char *what) {
|
||||
+ _cleanup_fclose_ FILE *f = NULL;
|
||||
+ unsigned n = 0;
|
||||
+
|
||||
+ f = fopen("/etc/crypttab", "re");
|
||||
+ if (!f) {
|
||||
+ if (errno != ENOENT)
|
||||
+ log_error("Failed to open /etc/crypttab: %m");
|
||||
+
|
||||
+ return 1;
|
||||
+ }
|
||||
+
|
||||
+
|
||||
+ for (;;) {
|
||||
+ char line[LINE_MAX], *l;
|
||||
+ _cleanup_free_ char *name = NULL, *device = NULL, *password = NULL, *options = NULL;
|
||||
+ int k;
|
||||
+
|
||||
+ if (!fgets(line, sizeof(line), f))
|
||||
+ break;
|
||||
+
|
||||
+ n++;
|
||||
+
|
||||
+ l = strstrip(line);
|
||||
+ if (*l == '#' || *l == 0)
|
||||
+ continue;
|
||||
+
|
||||
+ k = sscanf(l, "%ms %ms %ms %ms", &name, &device, &password, &options);
|
||||
+ if (k < 2 || k > 4) {
|
||||
+ log_error("Failed to parse /etc/crypttab:%u, ignoring.", n);
|
||||
+ continue;
|
||||
+ }
|
||||
+
|
||||
+ if (strcmp((what + 12), name) == 0) {
|
||||
+ if (options && strstr(options, "noauto"))
|
||||
+ return 0;
|
||||
+
|
||||
+ return 1;
|
||||
+ }
|
||||
+ }
|
||||
+ return 1;
|
||||
+}
|
||||
+
|
||||
static int add_swap(
|
||||
const char *what,
|
||||
struct mntent *me,
|
||||
@@ -108,7 +151,7 @@ static int add_swap(
|
||||
if (r < 0)
|
||||
return r;
|
||||
|
||||
- if (!noauto) {
|
||||
+ if (!noauto && check_crypttab(what) != 0) {
|
||||
lnk = strjoin(arg_dest, "/" SPECIAL_SWAP_TARGET,
|
||||
nofail ? ".wants/" : ".requires/", name, NULL);
|
||||
if (!lnk)
|
@ -1,46 +0,0 @@
|
||||
---
|
||||
units/console-shell.service.m4.in | 2 ++
|
||||
units/emergency.service.in | 2 +-
|
||||
units/rescue.service.in | 3 ++-
|
||||
3 files changed, 5 insertions(+), 2 deletions(-)
|
||||
|
||||
Index: systemd-224/units/console-shell.service.m4.in
|
||||
===================================================================
|
||||
--- systemd-224.orig/units/console-shell.service.m4.in
|
||||
+++ systemd-224/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=-@SULOGIN@
|
||||
ExecStopPost=-@SYSTEMCTL@ poweroff
|
||||
Type=idle
|
||||
Index: systemd-224/units/emergency.service.in
|
||||
===================================================================
|
||||
--- systemd-224.orig/units/emergency.service.in
|
||||
+++ systemd-224/units/emergency.service.in
|
||||
@@ -17,7 +17,7 @@ Before=shutdown.target
|
||||
[Service]
|
||||
Environment=HOME=/root
|
||||
WorkingDirectory=/root
|
||||
-ExecStartPre=-/bin/plymouth --wait quit
|
||||
+ExecStartPre=-/usr/bin/plymouth --wait 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 "@SULOGIN@; @SYSTEMCTL@ --job-mode=fail --no-block default"
|
||||
Type=idle
|
||||
Index: systemd-224/units/rescue.service.in
|
||||
===================================================================
|
||||
--- systemd-224.orig/units/rescue.service.in
|
||||
+++ systemd-224/units/rescue.service.in
|
||||
@@ -16,7 +16,8 @@ Before=shutdown.target
|
||||
[Service]
|
||||
Environment=HOME=/root
|
||||
WorkingDirectory=/root
|
||||
-ExecStartPre=-/bin/plymouth quit
|
||||
+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 "@SULOGIN@; @SYSTEMCTL@ --job-mode=fail --no-block default"
|
||||
Type=idle
|
@ -1,13 +0,0 @@
|
||||
---
|
||||
units/rpcbind.target | 1 +
|
||||
1 file changed, 1 insertion(+)
|
||||
|
||||
Index: systemd-221/units/rpcbind.target
|
||||
===================================================================
|
||||
--- systemd-221.orig/units/rpcbind.target
|
||||
+++ systemd-221/units/rpcbind.target
|
||||
@@ -12,3 +12,4 @@
|
||||
Description=RPC Port Mapper
|
||||
Documentation=man:systemd.special(7)
|
||||
RefuseManualStart=yes
|
||||
+Wants=rpcbind.socket
|
@ -7,8 +7,7 @@ ORIG_SPEC=systemd
|
||||
EDIT_WARNING="##### WARNING: please do not edit this auto generated spec file. Use the ${ORIG_SPEC}.spec! #####\n"
|
||||
sed "s/^%define bootstrap .*$/${EDIT_WARNING}%define bootstrap 1/;
|
||||
s/^%define mini .*$/${EDIT_WARNING}%define mini -mini/;
|
||||
s/^\(Name:.*\)$/\1-mini/;
|
||||
s/^BuildRoot.*/&\n\nProvides: %{real} = %{version}-%{release}\n/
|
||||
s/^Name:.*/&-mini/
|
||||
" < ${ORIG_SPEC}.spec > ${ORIG_SPEC}-mini.spec
|
||||
cp ${ORIG_SPEC}.changes ${ORIG_SPEC}-mini.changes
|
||||
cp ${ORIG_SPEC}-rpmlintrc ${ORIG_SPEC}-mini-rpmlintrc
|
||||
|
@ -1,29 +0,0 @@
|
||||
---
|
||||
units/emergency.target | 1 +
|
||||
units/rescue.target | 3 ++-
|
||||
2 files changed, 3 insertions(+), 1 deletion(-)
|
||||
|
||||
Index: systemd-221/units/emergency.target
|
||||
===================================================================
|
||||
--- systemd-221.orig/units/emergency.target
|
||||
+++ systemd-221/units/emergency.target
|
||||
@@ -10,4 +10,5 @@ Description=Emergency Mode
|
||||
Documentation=man:systemd.special(7)
|
||||
Requires=emergency.service
|
||||
After=emergency.service
|
||||
+Conflicts=getty.target rescue.target
|
||||
AllowIsolate=yes
|
||||
Index: systemd-221/units/rescue.target
|
||||
===================================================================
|
||||
--- systemd-221.orig/units/rescue.target
|
||||
+++ systemd-221/units/rescue.target
|
||||
@@ -10,7 +10,8 @@ Description=Rescue Mode
|
||||
Documentation=man:systemd.special(7)
|
||||
Requires=sysinit.target rescue.service
|
||||
After=sysinit.target rescue.service
|
||||
-Conflicts=getty.target
|
||||
+Conflicts=getty.target emergency.target
|
||||
+Before=emergency.target
|
||||
AllowIsolate=yes
|
||||
|
||||
[Install]
|
@ -1,22 +0,0 @@
|
||||
---
|
||||
src/fstab-generator/fstab-generator.c | 7 +++++--
|
||||
1 file changed, 5 insertions(+), 2 deletions(-)
|
||||
|
||||
Index: systemd-221/src/fstab-generator/fstab-generator.c
|
||||
===================================================================
|
||||
--- systemd-221.orig/src/fstab-generator/fstab-generator.c
|
||||
+++ systemd-221/src/fstab-generator/fstab-generator.c
|
||||
@@ -289,8 +289,11 @@ static int add_mount(
|
||||
"Documentation=man:fstab(5) man:systemd-fstab-generator(8)\n",
|
||||
source);
|
||||
|
||||
- if (post && !noauto && !nofail && !automount)
|
||||
- fprintf(f, "Before=%s\n", post);
|
||||
+ if (post && !noauto && !nofail && !automount) {
|
||||
+ bool is_nfs = fstype != NULL && streq(fstype, "nfs");
|
||||
+ if (!is_nfs || strstr(opts, "bg") == NULL)
|
||||
+ fprintf(f, "Before=%s\n", post);
|
||||
+ }
|
||||
|
||||
if (!automount && opts) {
|
||||
r = write_requires_after(f, opts);
|
@ -1,87 +0,0 @@
|
||||
From: Frederic Crozat <fcrozat@suse.com>
|
||||
Date: Mon, 29 Oct 2012 13:01:20 +0000
|
||||
Subject: restore /var/run and /var/lock bind mount if they aren't symlink
|
||||
|
||||
---
|
||||
Makefile.am | 9 +++++++++
|
||||
units/var-lock.mount | 19 +++++++++++++++++++
|
||||
units/var-run.mount | 19 +++++++++++++++++++
|
||||
3 files changed, 47 insertions(+)
|
||||
create mode 100644 units/var-lock.mount
|
||||
create mode 100644 units/var-run.mount
|
||||
|
||||
Index: systemd-221/Makefile.am
|
||||
===================================================================
|
||||
--- systemd-221.orig/Makefile.am
|
||||
+++ systemd-221/Makefile.am
|
||||
@@ -526,6 +526,12 @@ dist_systemunit_DATA += \
|
||||
dist_systemunit_DATA_busnames += \
|
||||
units/busnames.target
|
||||
|
||||
+if HAVE_SYSV_COMPAT
|
||||
+dist_systemunit_DATA += \
|
||||
+ units/var-run.mount \
|
||||
+ units/var-lock.mount
|
||||
+endif
|
||||
+
|
||||
nodist_systemunit_DATA = \
|
||||
units/getty@.service \
|
||||
units/serial-getty@.service \
|
||||
@@ -6123,6 +6129,9 @@ GRAPHICAL_TARGET_WANTS += \
|
||||
systemd-update-utmp-runlevel.service
|
||||
RESCUE_TARGET_WANTS += \
|
||||
systemd-update-utmp-runlevel.service
|
||||
+LOCAL_FS_TARGET_WANTS += \
|
||||
+ var-run.mount \
|
||||
+ var-lock.mount
|
||||
endif
|
||||
|
||||
SYSINIT_TARGET_WANTS += \
|
||||
Index: systemd-221/units/var-lock.mount
|
||||
===================================================================
|
||||
--- /dev/null
|
||||
+++ systemd-221/units/var-lock.mount
|
||||
@@ -0,0 +1,19 @@
|
||||
+# 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=Lock Directory
|
||||
+Before=local-fs.target
|
||||
+# skip mounting if the directory does not exist or is a symlink
|
||||
+ConditionPathIsDirectory=/var/lock
|
||||
+ConditionPathIsSymbolicLink=!/var/lock
|
||||
+
|
||||
+[Mount]
|
||||
+What=/run/lock
|
||||
+Where=/var/lock
|
||||
+Type=bind
|
||||
+Options=bind
|
||||
Index: systemd-221/units/var-run.mount
|
||||
===================================================================
|
||||
--- /dev/null
|
||||
+++ systemd-221/units/var-run.mount
|
||||
@@ -0,0 +1,19 @@
|
||||
+# 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=Runtime Directory
|
||||
+Before=local-fs.target
|
||||
+# skip mounting if the directory does not exist or is a symlink
|
||||
+ConditionPathIsDirectory=/var/run
|
||||
+ConditionPathIsSymbolicLink=!/var/run
|
||||
+
|
||||
+[Mount]
|
||||
+What=/run
|
||||
+Where=/var/run
|
||||
+Type=bind
|
||||
+Options=bind
|
@ -1,175 +0,0 @@
|
||||
Use and set default logging console for both journald and kernel messages
|
||||
|
||||
---
|
||||
src/journal/journald-console.c | 100 +++++++++++++++++++++++++++++++++++++++++
|
||||
src/journal/journald-console.h | 3 +
|
||||
src/journal/journald-server.c | 5 ++
|
||||
3 files changed, 108 insertions(+)
|
||||
|
||||
Index: systemd-228/src/journal/journald-console.c
|
||||
===================================================================
|
||||
--- systemd-228.orig/src/journal/journald-console.c
|
||||
+++ systemd-228/src/journal/journald-console.c
|
||||
@@ -22,6 +22,14 @@
|
||||
#include <fcntl.h>
|
||||
#include <sys/socket.h>
|
||||
#include <time.h>
|
||||
+#ifdef HAVE_SYSV_COMPAT
|
||||
+# include <linux/tiocl.h>
|
||||
+# include <linux/vt.h>
|
||||
+# include <sys/ioctl.h>
|
||||
+# include <sys/klog.h>
|
||||
+# include <errno.h>
|
||||
+# include "string-util.h"
|
||||
+#endif
|
||||
|
||||
#include "alloc-util.h"
|
||||
#include "fd-util.h"
|
||||
@@ -50,6 +58,76 @@ static bool prefix_timestamp(void) {
|
||||
return cached_printk_time;
|
||||
}
|
||||
|
||||
+void default_tty_path(Server *s)
|
||||
+{
|
||||
+#ifdef HAVE_SYSV_COMPAT
|
||||
+ static const char list[] = "/dev/tty10\0" "/dev/console\0";
|
||||
+ const char *vc;
|
||||
+
|
||||
+ if (s->tty_path)
|
||||
+ return;
|
||||
+
|
||||
+ NULSTR_FOREACH(vc, list) {
|
||||
+ _cleanup_close_ int fd = -1;
|
||||
+
|
||||
+ if (access(vc, F_OK) < 0)
|
||||
+ continue;
|
||||
+
|
||||
+ fd = open_terminal(vc, O_WRONLY|O_NOCTTY|O_CLOEXEC);
|
||||
+ if (fd < 0)
|
||||
+ continue;
|
||||
+
|
||||
+ s->tty_path = strdup(vc);
|
||||
+ break;
|
||||
+ }
|
||||
+#endif
|
||||
+}
|
||||
+
|
||||
+void klogconsole(Server *s)
|
||||
+{
|
||||
+#ifdef HAVE_SYSV_COMPAT
|
||||
+ _cleanup_free_ char *klogconsole_params = NULL;
|
||||
+ _cleanup_close_ int fd = -1;
|
||||
+ const char *vc = s->tty_path;
|
||||
+ const char *num;
|
||||
+ int tiocl[2];
|
||||
+ int r;
|
||||
+
|
||||
+ if (!vc || *vc == 0 || !strneq("/dev/tty", vc, 8))
|
||||
+ return;
|
||||
+
|
||||
+ num = vc + strcspn(vc, "0123456789");
|
||||
+ if (safe_atoi(num, &r) < 0)
|
||||
+ return;
|
||||
+
|
||||
+ if (access(vc, F_OK) < 0)
|
||||
+ return;
|
||||
+
|
||||
+ fd = open_terminal(vc, O_RDWR|O_NOCTTY|O_CLOEXEC);
|
||||
+ if (fd < 0)
|
||||
+ return;
|
||||
+
|
||||
+ tiocl[0] = TIOCL_SETKMSGREDIRECT;
|
||||
+ tiocl[1] = r;
|
||||
+
|
||||
+ if (ioctl(fd, TIOCLINUX, tiocl) < 0)
|
||||
+ return;
|
||||
+
|
||||
+ zero(klogconsole_params);
|
||||
+ r = parse_env_file("/etc/sysconfig/boot", NEWLINE,
|
||||
+ "KLOGCONSOLE_PARAMS", &klogconsole_params,
|
||||
+ NULL);
|
||||
+ if (r < 0)
|
||||
+ return;
|
||||
+ if (!klogconsole_params || *klogconsole_params == 0)
|
||||
+ return;
|
||||
+
|
||||
+ num = klogconsole_params + strcspn(klogconsole_params, "0123456789");
|
||||
+ if (safe_atoi(num, &r) == 0)
|
||||
+ klogctl(8, 0, r);
|
||||
+#endif
|
||||
+}
|
||||
+
|
||||
void server_forward_console(
|
||||
Server *s,
|
||||
int priority,
|
||||
@@ -71,6 +149,12 @@ void server_forward_console(
|
||||
if (LOG_PRI(priority) > s->max_level_console)
|
||||
return;
|
||||
|
||||
+#ifdef HAVE_SYSV_COMPAT
|
||||
+ /* Do not write security/authorization (private) messages to console */
|
||||
+ if ((priority & LOG_FACMASK) == LOG_AUTHPRIV)
|
||||
+ return;
|
||||
+#endif
|
||||
+
|
||||
/* First: timestamp */
|
||||
if (prefix_timestamp()) {
|
||||
assert_se(clock_gettime(CLOCK_MONOTONIC, &ts) == 0);
|
||||
@@ -107,7 +191,23 @@ void server_forward_console(
|
||||
fd = open_terminal(tty, O_WRONLY|O_NOCTTY|O_CLOEXEC);
|
||||
if (fd < 0) {
|
||||
log_debug_errno(fd, "Failed to open %s for logging: %m", tty);
|
||||
+#ifdef HAVE_SYSV_COMPAT
|
||||
+ if (fd != -ENOENT && fd != -ENODEV)
|
||||
+ return;
|
||||
+ if (tty != s->tty_path)
|
||||
+ return;
|
||||
+ if (!streq("/dev/console", tty)) {
|
||||
+ if (s->tty_path)
|
||||
+ free(s->tty_path);
|
||||
+ s->tty_path = NULL;
|
||||
+ tty = "/dev/console";
|
||||
+ fd = open_terminal(tty, O_WRONLY|O_NOCTTY|O_CLOEXEC);
|
||||
+ if (fd < 0)
|
||||
+ return;
|
||||
+ }
|
||||
+#else
|
||||
return;
|
||||
+#endif
|
||||
}
|
||||
|
||||
if (writev(fd, iovec, n) < 0)
|
||||
Index: systemd-228/src/journal/journald-console.h
|
||||
===================================================================
|
||||
--- systemd-228.orig/src/journal/journald-console.h
|
||||
+++ systemd-228/src/journal/journald-console.h
|
||||
@@ -24,3 +24,6 @@
|
||||
#include "journald-server.h"
|
||||
|
||||
void server_forward_console(Server *s, int priority, const char *identifier, const char *message, const struct ucred *ucred);
|
||||
+
|
||||
+void klogconsole(Server *s);
|
||||
+void default_tty_path(Server *s);
|
||||
Index: systemd-228/src/journal/journald-server.c
|
||||
===================================================================
|
||||
--- systemd-228.orig/src/journal/journald-server.c
|
||||
+++ systemd-228/src/journal/journald-server.c
|
||||
@@ -55,6 +55,7 @@
|
||||
#include "journald-audit.h"
|
||||
#include "journald-kmsg.h"
|
||||
#include "journald-native.h"
|
||||
+#include "journald-console.h"
|
||||
#include "journald-rate-limit.h"
|
||||
#include "journald-server.h"
|
||||
#include "journald-stream.h"
|
||||
@@ -1751,6 +1752,10 @@ int server_init(Server *s) {
|
||||
|
||||
server_parse_config_file(s);
|
||||
server_parse_proc_cmdline(s);
|
||||
+ default_tty_path(s);
|
||||
+
|
||||
+ if (s->tty_path)
|
||||
+ klogconsole(s);
|
||||
|
||||
if (!!s->rate_limit_interval ^ !!s->rate_limit_burst) {
|
||||
log_debug("Setting both rate limit interval and burst from "USEC_FMT",%u to 0,0",
|
@ -1,25 +0,0 @@
|
||||
---
|
||||
Makefile.am | 10 +++++-----
|
||||
1 file changed, 5 insertions(+), 5 deletions(-)
|
||||
|
||||
Index: systemd-221/Makefile.am
|
||||
===================================================================
|
||||
--- systemd-221.orig/Makefile.am
|
||||
+++ systemd-221/Makefile.am
|
||||
@@ -4129,11 +4129,11 @@ noinst_LTLIBRARIES += \
|
||||
libjournal-core.la
|
||||
|
||||
journal-install-hook:
|
||||
- -$(MKDIR_P) $(DESTDIR)/var/log/journal
|
||||
- -chown 0:0 $(DESTDIR)/var/log/journal
|
||||
- -chmod 755 $(DESTDIR)/var/log/journal
|
||||
- -setfacl -nm g:adm:rx,d:g:adm:rx $(DESTDIR)/var/log/journal/
|
||||
- -setfacl -nm g:wheel:rx,d:g:wheel:rx $(DESTDIR)/var/log/journal/
|
||||
+ -$(MKDIR_P) $(DESTDIR)/var/log/journal/
|
||||
+ -@echo chown 0:0 $(DESTDIR)/var/log/journal/
|
||||
+ -chmod 755 $(DESTDIR)/var/log/journal/
|
||||
+ -@echo setfacl -nm g:adm:rx,d:g:adm:rx $(DESTDIR)/var/log/journal/
|
||||
+ -@echo setfacl -nm g:wheel:rx,d:g:wheel:rx $(DESTDIR)/var/log/journal/
|
||||
|
||||
journal-uninstall-hook:
|
||||
-rmdir $(DESTDIR)/var/log/journal/remote
|
@ -1,80 +0,0 @@
|
||||
From: Frederic Crozat <fcrozat@suse.com>
|
||||
Date: Fri, 12 Apr 2013 16:56:26 +0200
|
||||
Subject: Revert "service: drop support for SysV scripts for the early boot"
|
||||
|
||||
This reverts commit 3cdebc217c42c8529086f2965319b6a48eaaeabe.
|
||||
|
||||
[Implementation note: currently, the unit is generated, but not
|
||||
activated even if symlinks exist in boot.d. Hmmm... -jengelh@inai.de]
|
||||
---
|
||||
src/sysv-generator/sysv-generator.c | 20 +++++++++++++++-----
|
||||
1 file changed, 15 insertions(+), 5 deletions(-)
|
||||
|
||||
Index: systemd-228/src/sysv-generator/sysv-generator.c
|
||||
===================================================================
|
||||
--- systemd-228.orig/src/sysv-generator/sysv-generator.c
|
||||
+++ systemd-228/src/sysv-generator/sysv-generator.c
|
||||
@@ -46,7 +46,8 @@
|
||||
|
||||
typedef enum RunlevelType {
|
||||
RUNLEVEL_UP,
|
||||
- RUNLEVEL_DOWN
|
||||
+ RUNLEVEL_DOWN,
|
||||
+ RUNLEVEL_SYSINIT,
|
||||
} RunlevelType;
|
||||
|
||||
static const struct {
|
||||
@@ -54,6 +55,9 @@ static const struct {
|
||||
const char *target;
|
||||
const RunlevelType type;
|
||||
} rcnd_table[] = {
|
||||
+ /* SUSE style boot.d */
|
||||
+ { "boot.d", SPECIAL_SYSINIT_TARGET, RUNLEVEL_SYSINIT },
|
||||
+
|
||||
/* Standard SysV runlevels for start-up */
|
||||
{ "rc1.d", SPECIAL_RESCUE_TARGET, RUNLEVEL_UP },
|
||||
{ "rc2.d", SPECIAL_MULTI_USER_TARGET, RUNLEVEL_UP },
|
||||
@@ -69,10 +73,10 @@ static const struct {
|
||||
directories in this order, and we want to make sure that
|
||||
sysv_start_priority is known when we first load the
|
||||
unit. And that value we only know from S links. Hence
|
||||
- UP must be read before DOWN */
|
||||
+ UP/SYSINIT must be read before DOWN */
|
||||
};
|
||||
|
||||
-const char *arg_dest = "/tmp";
|
||||
+static const char *arg_dest = "/tmp";
|
||||
|
||||
typedef struct SysvStub {
|
||||
char *name;
|
||||
@@ -261,6 +265,10 @@ static char *sysv_translate_name(const c
|
||||
_cleanup_free_ char *c = NULL;
|
||||
char *res;
|
||||
|
||||
+ if (startswith(name, "boot."))
|
||||
+ /* Drop SuSE-style boot. prefix */
|
||||
+ name += 5;
|
||||
+
|
||||
c = strdup(name);
|
||||
if (!c)
|
||||
return NULL;
|
||||
@@ -882,7 +890,8 @@ static int set_dependencies_from_rcnd(co
|
||||
|
||||
if (de->d_name[0] == 'S') {
|
||||
|
||||
- if (rcnd_table[i].type == RUNLEVEL_UP)
|
||||
+ if (rcnd_table[i].type == RUNLEVEL_UP ||
|
||||
+ rcnd_table[i].type == RUNLEVEL_SYSINIT)
|
||||
service->sysv_start_priority = MAX(a*10 + b, service->sysv_start_priority);
|
||||
|
||||
r = set_ensure_allocated(&runlevel_services[i], NULL);
|
||||
@@ -898,7 +907,8 @@ static int set_dependencies_from_rcnd(co
|
||||
}
|
||||
|
||||
} else if (de->d_name[0] == 'K' &&
|
||||
- (rcnd_table[i].type == RUNLEVEL_DOWN)) {
|
||||
+ (rcnd_table[i].type == RUNLEVEL_DOWN ||
|
||||
+ rcnd_table[i].type == RUNLEVEL_SYSINIT)) {
|
||||
|
||||
r = set_ensure_allocated(&shutdown_services, NULL);
|
||||
if (r < 0) {
|
@ -1,30 +0,0 @@
|
||||
Mention that --force is required to override an already existing default.target
|
||||
|
||||
This solves the bug bnc#868439
|
||||
|
||||
---
|
||||
man/systemctl.xml | 4 +++-
|
||||
1 file changed, 3 insertions(+), 1 deletion(-)
|
||||
|
||||
Index: systemd-221/man/systemctl.xml
|
||||
===================================================================
|
||||
--- systemd-221.orig/man/systemctl.xml
|
||||
+++ systemd-221/man/systemctl.xml
|
||||
@@ -439,7 +439,7 @@
|
||||
<term><option>--force</option></term>
|
||||
|
||||
<listitem>
|
||||
- <para>When used with <command>enable</command>, overwrite
|
||||
+ <para>When used with <command>enable</command> or <command>set-default</command>, overwrite
|
||||
any existing conflicting symlinks.</para>
|
||||
|
||||
<para>When used with <command>halt</command>,
|
||||
@@ -1237,6 +1237,8 @@ kobject-uevent 1 systemd-udevd-kernel.so
|
||||
<para>Return the default target to boot into. This returns
|
||||
the target unit name <filename>default.target</filename>
|
||||
is aliased (symlinked) to.</para>
|
||||
+ <para>If combined with <option>--force</option>, override
|
||||
+ an already existing symlink for the default target.</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
|
@ -1,116 +0,0 @@
|
||||
From 84d816c48b57b43e833e2917bbd278c116816fcf Mon Sep 17 00:00:00 2001
|
||||
From: Lennart Poettering <lennart@poettering.net>
|
||||
Date: Thu, 28 Jan 2016 20:15:49 +0100
|
||||
Subject: [PATCH] nspawn: make journal linking non-fatal in try and auto modes
|
||||
|
||||
Fixes #2091
|
||||
---
|
||||
src/nspawn/nspawn.c | 39 ++++++++++++++++++++-------------------
|
||||
1 file changed, 20 insertions(+), 19 deletions(-)
|
||||
|
||||
diff --git a/src/nspawn/nspawn.c b/src/nspawn/nspawn.c
|
||||
index f6a2c03..97ea51a 100644
|
||||
--- a/src/nspawn/nspawn.c
|
||||
+++ b/src/nspawn/nspawn.c
|
||||
@@ -1338,6 +1338,7 @@ static int setup_journal(const char *directory) {
|
||||
sd_id128_t machine_id, this_id;
|
||||
_cleanup_free_ char *b = NULL, *d = NULL;
|
||||
const char *etc_machine_id, *p, *q;
|
||||
+ bool try;
|
||||
char *id;
|
||||
int r;
|
||||
|
||||
@@ -1345,16 +1346,21 @@ static int setup_journal(const char *directory) {
|
||||
if (arg_ephemeral)
|
||||
return 0;
|
||||
|
||||
+ if (arg_link_journal == LINK_NO)
|
||||
+ return 0;
|
||||
+
|
||||
+ try = arg_link_journal_try || arg_link_journal == LINK_AUTO;
|
||||
+
|
||||
etc_machine_id = prefix_roota(directory, "/etc/machine-id");
|
||||
|
||||
r = read_one_line_file(etc_machine_id, &b);
|
||||
- if (r == -ENOENT && arg_link_journal == LINK_AUTO)
|
||||
+ if (r == -ENOENT && try)
|
||||
return 0;
|
||||
else if (r < 0)
|
||||
return log_error_errno(r, "Failed to read machine ID from %s: %m", etc_machine_id);
|
||||
|
||||
id = strstrip(b);
|
||||
- if (isempty(id) && arg_link_journal == LINK_AUTO)
|
||||
+ if (isempty(id) && try)
|
||||
return 0;
|
||||
|
||||
/* Verify validity */
|
||||
@@ -1367,16 +1373,13 @@ static int setup_journal(const char *directory) {
|
||||
return log_error_errno(r, "Failed to retrieve machine ID: %m");
|
||||
|
||||
if (sd_id128_equal(machine_id, this_id)) {
|
||||
- log_full(arg_link_journal == LINK_AUTO ? LOG_WARNING : LOG_ERR,
|
||||
+ log_full(try ? LOG_WARNING : LOG_ERR,
|
||||
"Host and machine ids are equal (%s): refusing to link journals", id);
|
||||
- if (arg_link_journal == LINK_AUTO)
|
||||
+ if (try)
|
||||
return 0;
|
||||
return -EEXIST;
|
||||
}
|
||||
|
||||
- if (arg_link_journal == LINK_NO)
|
||||
- return 0;
|
||||
-
|
||||
r = userns_mkdir(directory, "/var", 0755, 0, 0);
|
||||
if (r < 0)
|
||||
return log_error_errno(r, "Failed to create /var: %m");
|
||||
@@ -1393,21 +1396,19 @@ static int setup_journal(const char *directory) {
|
||||
q = prefix_roota(directory, p);
|
||||
|
||||
if (path_is_mount_point(p, 0) > 0) {
|
||||
- if (arg_link_journal != LINK_AUTO) {
|
||||
- log_error("%s: already a mount point, refusing to use for journal", p);
|
||||
- return -EEXIST;
|
||||
- }
|
||||
+ if (try)
|
||||
+ return 0;
|
||||
|
||||
- return 0;
|
||||
+ log_error("%s: already a mount point, refusing to use for journal", p);
|
||||
+ return -EEXIST;
|
||||
}
|
||||
|
||||
if (path_is_mount_point(q, 0) > 0) {
|
||||
- if (arg_link_journal != LINK_AUTO) {
|
||||
- log_error("%s: already a mount point, refusing to use for journal", q);
|
||||
- return -EEXIST;
|
||||
- }
|
||||
+ if (try)
|
||||
+ return 0;
|
||||
|
||||
- return 0;
|
||||
+ log_error("%s: already a mount point, refusing to use for journal", q);
|
||||
+ return -EEXIST;
|
||||
}
|
||||
|
||||
r = readlink_and_make_absolute(p, &d);
|
||||
@@ -1441,7 +1442,7 @@ static int setup_journal(const char *directory) {
|
||||
if (arg_link_journal == LINK_GUEST) {
|
||||
|
||||
if (symlink(q, p) < 0) {
|
||||
- if (arg_link_journal_try) {
|
||||
+ if (try) {
|
||||
log_debug_errno(errno, "Failed to symlink %s to %s, skipping journal setup: %m", q, p);
|
||||
return 0;
|
||||
} else
|
||||
@@ -1459,7 +1460,7 @@ static int setup_journal(const char *directory) {
|
||||
* permanent journal set up, don't force it here */
|
||||
r = mkdir(p, 0755);
|
||||
if (r < 0) {
|
||||
- if (arg_link_journal_try) {
|
||||
+ if (try) {
|
||||
log_debug_errno(errno, "Failed to create %s, skipping journal setup: %m", p);
|
||||
return 0;
|
||||
} else
|
||||
--
|
||||
2.7.0
|
||||
|
3
systemd-228.tar.xz
Normal file
3
systemd-228.tar.xz
Normal file
@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:141d1609469579adeaf62d76e3527149c5a0140a54c8538f706b4eb97a447f8a
|
||||
size 2866192
|
@ -1,87 +0,0 @@
|
||||
commit 099619957a0d9ae0e6e5e221493e40fb8fc2cd81
|
||||
Author: Alban Crequy <alban@kinvolk.io>
|
||||
Date: Mon Dec 7 01:10:50 2015 +0100
|
||||
|
||||
cgroup2: use new fstype for unified hierarchy
|
||||
|
||||
Since Linux v4.4-rc1, __DEVEL__sane_behavior does not exist anymore and
|
||||
is replaced by a new fstype "cgroup2".
|
||||
|
||||
With this patch, systemd no longer supports the old (unstable) way of
|
||||
doing unified hierarchy with __DEVEL__sane_behavior and systemd now
|
||||
requires Linux v4.4 for unified hierarchy.
|
||||
|
||||
Non-unified hierarchy is still the default and is unchanged by this
|
||||
patch.
|
||||
|
||||
https://github.com/torvalds/linux/commit/67e9c74b8a873408c27ac9a8e4c1d1c8d72c93ff
|
||||
|
||||
Upstream-patch: 099619957a0d9ae0e6e5e221493e40fb8fc2cd81
|
||||
|
||||
diff --git a/src/basic/cgroup-util.c b/src/basic/cgroup-util.c
|
||||
index 56c1fcaab9b2..5124b5bf93ad 100644
|
||||
--- a/src/basic/cgroup-util.c
|
||||
+++ b/src/basic/cgroup-util.c
|
||||
@@ -2129,7 +2129,7 @@ int cg_unified(void) {
|
||||
if (statfs("/sys/fs/cgroup/", &fs) < 0)
|
||||
return -errno;
|
||||
|
||||
- if (F_TYPE_EQUAL(fs.f_type, CGROUP_SUPER_MAGIC))
|
||||
+ if (F_TYPE_EQUAL(fs.f_type, CGROUP2_SUPER_MAGIC))
|
||||
unified_cache = true;
|
||||
else if (F_TYPE_EQUAL(fs.f_type, TMPFS_MAGIC))
|
||||
unified_cache = false;
|
||||
diff --git a/src/basic/missing.h b/src/basic/missing.h
|
||||
index 034e334e6626..66cd5921adf0 100644
|
||||
--- a/src/basic/missing.h
|
||||
+++ b/src/basic/missing.h
|
||||
@@ -437,6 +437,10 @@ struct btrfs_ioctl_quota_ctl_args {
|
||||
#define CGROUP_SUPER_MAGIC 0x27e0eb
|
||||
#endif
|
||||
|
||||
+#ifndef CGROUP2_SUPER_MAGIC
|
||||
+#define CGROUP2_SUPER_MAGIC 0x63677270
|
||||
+#endif
|
||||
+
|
||||
#ifndef TMPFS_MAGIC
|
||||
#define TMPFS_MAGIC 0x01021994
|
||||
#endif
|
||||
diff --git a/src/core/mount-setup.c b/src/core/mount-setup.c
|
||||
index de1a361cc4c5..32fe51c67ea3 100644
|
||||
--- a/src/core/mount-setup.c
|
||||
+++ b/src/core/mount-setup.c
|
||||
@@ -94,7 +94,7 @@ static const MountPoint mount_table[] = {
|
||||
#endif
|
||||
{ "tmpfs", "/run", "tmpfs", "mode=755", MS_NOSUID|MS_NODEV|MS_STRICTATIME,
|
||||
NULL, MNT_FATAL|MNT_IN_CONTAINER },
|
||||
- { "cgroup", "/sys/fs/cgroup", "cgroup", "__DEVEL__sane_behavior", MS_NOSUID|MS_NOEXEC|MS_NODEV,
|
||||
+ { "cgroup", "/sys/fs/cgroup", "cgroup2", NULL, MS_NOSUID|MS_NOEXEC|MS_NODEV,
|
||||
cg_is_unified_wanted, MNT_FATAL|MNT_IN_CONTAINER },
|
||||
{ "tmpfs", "/sys/fs/cgroup", "tmpfs", "mode=755", MS_NOSUID|MS_NOEXEC|MS_NODEV|MS_STRICTATIME,
|
||||
cg_is_legacy_wanted, MNT_FATAL|MNT_IN_CONTAINER },
|
||||
diff --git a/src/nspawn/nspawn-cgroup.c b/src/nspawn/nspawn-cgroup.c
|
||||
index 9f9a4759d1ca..53a7ee713427 100644
|
||||
--- a/src/nspawn/nspawn-cgroup.c
|
||||
+++ b/src/nspawn/nspawn-cgroup.c
|
||||
@@ -94,7 +94,7 @@ int sync_cgroup(pid_t pid, bool unified_requested) {
|
||||
if (unified)
|
||||
r = mount("cgroup", tree, "cgroup", MS_NOSUID|MS_NOEXEC|MS_NODEV, "none,name=systemd,xattr");
|
||||
else
|
||||
- r = mount("cgroup", tree, "cgroup", MS_NOSUID|MS_NOEXEC|MS_NODEV, "__DEVEL__sane_behavior");
|
||||
+ r = mount("cgroup", tree, "cgroup2", MS_NOSUID|MS_NOEXEC|MS_NODEV, NULL);
|
||||
if (r < 0) {
|
||||
r = log_error_errno(errno, "Failed to mount unified hierarchy: %m");
|
||||
goto finish;
|
||||
diff --git a/src/nspawn/nspawn-mount.c b/src/nspawn/nspawn-mount.c
|
||||
index 70cca1527876..64cb6b3ce306 100644
|
||||
--- a/src/nspawn/nspawn-mount.c
|
||||
+++ b/src/nspawn/nspawn-mount.c
|
||||
@@ -750,7 +750,7 @@ static int mount_unified_cgroups(const char *dest) {
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
- if (mount("cgroup", p, "cgroup", MS_NOSUID|MS_NOEXEC|MS_NODEV, "__DEVEL__sane_behavior") < 0)
|
||||
+ if (mount("cgroup", p, "cgroup2", MS_NOSUID|MS_NOEXEC|MS_NODEV, NULL) < 0)
|
||||
return log_error_errno(errno, "Failed to mount unified cgroup hierarchy to %s: %m", p);
|
||||
|
||||
return 0;
|
@ -1,92 +0,0 @@
|
||||
---
|
||||
man/tmpfiles.d.xml | 3 +++
|
||||
src/tmpfiles/tmpfiles.c | 46 ++++++++++++++++++++++++++++++++++++++++------
|
||||
2 files changed, 43 insertions(+), 6 deletions(-)
|
||||
|
||||
Index: systemd-228/man/tmpfiles.d.xml
|
||||
===================================================================
|
||||
--- systemd-228.orig/man/tmpfiles.d.xml
|
||||
+++ systemd-228/man/tmpfiles.d.xml
|
||||
@@ -599,6 +599,9 @@
|
||||
<varname>f</varname>, <varname>F</varname>, and
|
||||
<varname>w</varname>, the argument may be used to specify a short string that
|
||||
is written to the file, suffixed by a newline. For
|
||||
+ <varname>x</varname>, <varname>X</varname>, 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
|
||||
<varname>C</varname>, specifies the source file or
|
||||
directory. For <varname>t</varname> and <varname>T</varname>,
|
||||
determines extended attributes to be set. For
|
||||
Index: systemd-228/src/tmpfiles/tmpfiles.c
|
||||
===================================================================
|
||||
--- systemd-228.orig/src/tmpfiles/tmpfiles.c
|
||||
+++ systemd-228/src/tmpfiles/tmpfiles.c
|
||||
@@ -37,6 +37,7 @@
|
||||
#include <sys/xattr.h>
|
||||
#include <time.h>
|
||||
#include <unistd.h>
|
||||
+#include <pwd.h>
|
||||
|
||||
#include "acl-util.h"
|
||||
#include "alloc-util.h"
|
||||
@@ -378,6 +379,7 @@ static int dir_cleanup(
|
||||
struct timespec times[2];
|
||||
bool deleted = false;
|
||||
int r = 0;
|
||||
+ Item *found = NULL;
|
||||
|
||||
while ((dent = readdir(d))) {
|
||||
struct stat s;
|
||||
@@ -428,14 +430,46 @@ static int dir_cleanup(
|
||||
}
|
||||
|
||||
/* Is there an item configured for this path? */
|
||||
- if (ordered_hashmap_get(items, sub_path)) {
|
||||
- log_debug("Ignoring \"%s\": a separate entry exists.", sub_path);
|
||||
- continue;
|
||||
+ bool found_glob = false;
|
||||
+ found = ordered_hashmap_get(items, sub_path);
|
||||
+ if (!found) {
|
||||
+ found_glob = true;
|
||||
+ found = find_glob(globs, sub_path);
|
||||
}
|
||||
|
||||
- if (find_glob(globs, sub_path)) {
|
||||
- log_debug("Ignoring \"%s\": a separate glob exists.", sub_path);
|
||||
- continue;
|
||||
+ 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)) {
|
@ -1,33 +0,0 @@
|
||||
---
|
||||
src/basic/def.h | 2 +-
|
||||
src/libsystemd/sd-bus/sd-bus.c | 4 ++--
|
||||
2 files changed, 3 insertions(+), 3 deletions(-)
|
||||
|
||||
Index: systemd-221/src/basic/def.h
|
||||
===================================================================
|
||||
--- systemd-221.orig/src/basic/def.h
|
||||
+++ systemd-221/src/basic/def.h
|
||||
@@ -61,7 +61,7 @@
|
||||
"/usr/lib/kbd/keymaps/\0"
|
||||
#endif
|
||||
|
||||
-#define UNIX_SYSTEM_BUS_ADDRESS "unix:path=/var/run/dbus/system_bus_socket"
|
||||
+#define UNIX_SYSTEM_BUS_ADDRESS "unix:path=/run/dbus/system_bus_socket"
|
||||
#define KERNEL_SYSTEM_BUS_ADDRESS "kernel:path=/sys/fs/kdbus/0-system/bus"
|
||||
#define DEFAULT_SYSTEM_BUS_ADDRESS KERNEL_SYSTEM_BUS_ADDRESS ";" UNIX_SYSTEM_BUS_ADDRESS
|
||||
#define UNIX_USER_BUS_ADDRESS_FMT "unix:path=%s/bus"
|
||||
Index: systemd-221/src/libsystemd/sd-bus/sd-bus.c
|
||||
===================================================================
|
||||
--- systemd-221.orig/src/libsystemd/sd-bus/sd-bus.c
|
||||
+++ systemd-221/src/libsystemd/sd-bus/sd-bus.c
|
||||
@@ -837,8 +837,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));
|
||||
- b->sockaddr_size = offsetof(struct sockaddr_un, sun_path) + strlen("/var/run/dbus/system_bus_socket");
|
||||
+ strncpy(b->sockaddr.un.sun_path, "/run/dbus/system_bus_socket", sizeof(b->sockaddr.un.sun_path));
|
||||
+ b->sockaddr_size = offsetof(struct sockaddr_un, sun_path) + strlen("/run/dbus/system_bus_socket");
|
||||
|
||||
return 0;
|
||||
}
|
@ -1,34 +0,0 @@
|
||||
---
|
||||
Makefile.am | 12 ++++++------
|
||||
1 file changed, 6 insertions(+), 6 deletions(-)
|
||||
|
||||
Index: systemd-221/Makefile.am
|
||||
===================================================================
|
||||
--- systemd-221.orig/Makefile.am
|
||||
+++ systemd-221/Makefile.am
|
||||
@@ -5876,12 +5876,6 @@ lib_LTLIBRARIES += \
|
||||
libsystemd-id128.la \
|
||||
libsystemd-daemon.la
|
||||
|
||||
-pkgconfiglib_DATA += \
|
||||
- src/compat-libs/libsystemd-journal.pc \
|
||||
- src/compat-libs/libsystemd-login.pc \
|
||||
- src/compat-libs/libsystemd-id128.pc \
|
||||
- src/compat-libs/libsystemd-daemon.pc
|
||||
-
|
||||
# move lib from $(libdir) to $(rootlibdir) and update devel link, if needed
|
||||
compat-lib-install-hook:
|
||||
libname=libsystemd-login.so && $(move-to-rootlibdir)
|
||||
@@ -5899,6 +5893,12 @@ INSTALL_EXEC_HOOKS += compat-lib-install
|
||||
UNINSTALL_EXEC_HOOKS += compat-lib-uninstall-hook
|
||||
endif
|
||||
|
||||
+pkgconfiglib_DATA += \
|
||||
+ src/compat-libs/libsystemd-journal.pc \
|
||||
+ src/compat-libs/libsystemd-login.pc \
|
||||
+ src/compat-libs/libsystemd-id128.pc \
|
||||
+ src/compat-libs/libsystemd-daemon.pc
|
||||
+
|
||||
EXTRA_DIST += \
|
||||
src/compat-libs/linkwarning.h \
|
||||
src/compat-libs/libsystemd-journal.pc.in \
|
@ -1,3 +1,261 @@
|
||||
-------------------------------------------------------------------
|
||||
Wed Oct 26 09:41:01 UTC 2016 - fbui@suse.com
|
||||
|
||||
- Own a couple of directories even if they don't belong to systemd
|
||||
otherwise the build system will complain.
|
||||
|
||||
Some directories (owned by others packages) are simply used by
|
||||
systemd to ship some scripts or config files to customize others
|
||||
*optional* components. Since thos components are not build required
|
||||
by systemd those directories are not owned by any packages and the
|
||||
BS complains...
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Wed Oct 26 07:45:08 UTC 2016 - fbui@suse.com
|
||||
|
||||
- Import commit
|
||||
|
||||
15ea716 journal-remote: change owner of /var/log/journal/remote and create /var/lib/systemd/journal-upload (bsc#1006372)
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Mon Oct 24 14:26:40 UTC 2016 - fbui@suse.com
|
||||
|
||||
- %sysusers_create and %tmpfiles_create must be called in %post
|
||||
|
||||
Calling %pre is broken since the respective conf files are not yet
|
||||
installed.
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Mon Oct 24 13:53:04 UTC 2016 - fbui@suse.com
|
||||
|
||||
- %{_libexecdir}/{tmpfiles.d,sysusers.d}/systemd-remote.conf are
|
||||
part of systemd-journal-remote package (only).
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Mon Oct 24 13:21:22 UTC 2016 - fbui@suse.com
|
||||
|
||||
- systemd-journal-{gatewayd,remote,upload} units are only part of
|
||||
"systemd-journal-remote" package.
|
||||
|
||||
So exclude them from the main package.
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Mon Oct 24 08:56:59 UTC 2016 - fbui@suse.com
|
||||
|
||||
- Import commit a1c145e6ad6588555dca64402f9103fb1e02b1a0
|
||||
|
||||
7f34037 man: explain that *KeyIgnoreInhibited only apply to a subset of locks
|
||||
df5798b Revert "logind: really handle *KeyIgnoreInhibited options in logind.conf" (bsc#1001790 bsc#1005404)
|
||||
f79fee7 Revert "kbd-model-map: add more mappings offered by Yast"
|
||||
3760c10 manager: tighten incoming notification message checks
|
||||
d6efd71 core: only warn on short reads on signal fd
|
||||
6eebd91 manager: be stricter with incomining notifications, warn properly about too large ones
|
||||
fdf2dc3 manager: don't ever busy loop when we get a notification message we can't process
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Thu Oct 20 06:57:57 UTC 2016 - fbui@suse.com
|
||||
|
||||
- Rename kbd-model-map-extra into kbd-model-map.legacy
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Wed Oct 19 07:24:46 UTC 2016 - fbui@suse.com
|
||||
|
||||
- Remove tcpd-devel build requirement.
|
||||
|
||||
tcpwrap support has been removed since v212, see commit
|
||||
7f8aa67131cfc03ddcbd31c0420754864fc122f0
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Tue Oct 18 14:52:00 UTC 2016 - fbui@suse.com
|
||||
|
||||
- remove all dummy "aliases" to /etc/init.d (as it was already done by
|
||||
factory more than 1 year ago).
|
||||
|
||||
Even if a sysvinit script is still requiring one of those dummy
|
||||
symlinks this should not be an issue since this is requirement is
|
||||
translated into a weak dependency.
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Tue Oct 18 13:20:58 UTC 2016 - fbui@suse.com
|
||||
|
||||
- specfile:
|
||||
|
||||
- do not own /usr/share/zsh directory
|
||||
- do not own /etc/dbus-1 and /etc/dbus-1/system.d dirs
|
||||
- do not own /usr/share/dbus-1 dir
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Tue Oct 18 13:06:27 UTC 2016 - fbui@suse.com
|
||||
|
||||
- specfile: %{_prefix}/lib/systemd/system-preset was mentioned twice
|
||||
in %files section.
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Tue Oct 18 09:30:37 UTC 2016 - fbui@suse.com
|
||||
|
||||
- Specfile cleanup:
|
||||
|
||||
- use curly braces with rpm macros
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Tue Oct 18 09:15:17 UTC 2016 - fbui@suse.com
|
||||
|
||||
- Specfile cleanup:
|
||||
|
||||
- %ghost files doesn't need (anymore) to be created in %builroot
|
||||
- do not own /etc/X11/xorg.conf.d and /etc/X11/xinit
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Tue Oct 18 07:58:38 UTC 2016 - fbui@suse.com
|
||||
|
||||
- Specfile cleanup: no need to protect the manpages with %bootstrap
|
||||
condition in nss-myhostname package since the package itself is
|
||||
already protected.
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Tue Oct 18 07:51:30 UTC 2016 - fbui@suse.com
|
||||
|
||||
- fix nss-resolve sub package:
|
||||
|
||||
- add a %files section
|
||||
- add a package description
|
||||
- libnss_resolve.so.2 is now part of this subpackage
|
||||
- add %post and %postun sections
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Tue Oct 18 07:16:17 UTC 2016 - fbui@suse.com
|
||||
|
||||
- Specfile cleanup:
|
||||
|
||||
- reorganize some files in %files by types
|
||||
- some config files were missing the "noreplace" attribute
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Tue Oct 18 06:19:34 UTC 2016 - fbui@suse.com
|
||||
|
||||
- Use %config(noreplace) for %{_sysconfdir}/pam.d/systemd-user
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Tue Oct 18 05:57:28 UTC 2016 - fbui@suse.com
|
||||
|
||||
- Rework systemd-gatewayd package:
|
||||
|
||||
- some gateway's files were still in the main package
|
||||
- it now includes all progs dealing with remote journals
|
||||
- it can be turned off (SP2 does that currently)
|
||||
- it's been renamed systemd-journal-remote to reflect that
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Mon Oct 17 12:19:34 UTC 2016 - fbui@suse.com
|
||||
|
||||
- Specfile cleanup:
|
||||
|
||||
- only specify once %{_prefix}/lib/systemd/system-shutdown in %file
|
||||
- no need to list the content of %{_prefix}/lib/systemd/user-generators in %file
|
||||
- machined is not built when %bootstrap = 1
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Mon Oct 17 12:11:43 UTC 2016 - fbui@suse.com
|
||||
|
||||
- Specfile cleanup:
|
||||
|
||||
- There's no point in listing all generators in %file
|
||||
explicitly. The default is to include all of them and if for some
|
||||
reason one must be excluded then it should be done explicitly.
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Mon Oct 17 11:44:57 UTC 2016 - fbui@suse.com
|
||||
|
||||
- Specfile cleanup:
|
||||
|
||||
- remove explicit call to make for building man pages. This is not
|
||||
needed and was maybe useful when generated doc was pre-built and
|
||||
shipped in the tarball.
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Mon Oct 17 09:59:13 UTC 2016 - fbui@suse.com
|
||||
|
||||
- Specfile cleanup:
|
||||
|
||||
- break overly long and unreadable line using mkdir
|
||||
- gather directory creations
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Mon Oct 17 08:38:27 UTC 2016 - fbui@suse.com
|
||||
|
||||
- Stop providing udevd.8
|
||||
|
||||
systemd-udevd has replaced udevd for some time already and usage of
|
||||
udevd should be avoided. Therefore don't encourage this and stop
|
||||
documenting it.
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Mon Oct 17 07:36:10 UTC 2016 - fbui@suse.com
|
||||
|
||||
- Import from factory:
|
||||
|
||||
- Thu Feb 4 11:05:37 UTC 2016 - lnussel@suse.de
|
||||
|
||||
- curl also causes building of journal-upload. That one has rather
|
||||
unusal certificate usage, set it's ca root to /etc/pki/systemd
|
||||
instead of the built-in default /etc/ssl as journal-remote and
|
||||
journal-upload think they can put stuff in /etc/ssl/certs then
|
||||
but that directory is managed by p11-kit and doesn't serve the
|
||||
purpose those programs think.
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Thu Oct 13 19:33:17 UTC 2016 - fbui@suse.com
|
||||
|
||||
- Package rootsymlink-generator helper. It was forgotten when
|
||||
switching to the git repo but re-added back.
|
||||
|
||||
That said this thing should be removed as it's broken as soon as
|
||||
there's no direct link between the root fs and its backend device
|
||||
node (i.e. BTRFS).
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Thu Oct 13 19:09:25 UTC 2016 - fbui@suse.com
|
||||
|
||||
- Add kbd-model-map-extra file which contains the additional legacy
|
||||
keymaps needed by yast.
|
||||
|
||||
This was previously directly patched in the systemd source code.
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Mon Oct 10 13:33:40 UTC 2016 - fbui@suse.com
|
||||
|
||||
- Imported e251b8d7fb5c801fdfa3a023257ba0e4d514f3b0
|
||||
|
||||
- Re-add back /dev/root symlink generation (although this must be
|
||||
deprecated and finally removed).
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Fri Oct 7 14:18:10 UTC 2016 - fbui@suse.com
|
||||
|
||||
- Migrating to the Suse Systemd git repo:
|
||||
|
||||
Third step:
|
||||
|
||||
- Re-enable networkd (disabled by default in SLE12)
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Fri Oct 7 13:33:51 UTC 2016 - fbui@suse.com
|
||||
|
||||
- Migrating to the Suse Systemd git repo:
|
||||
|
||||
Second step:
|
||||
|
||||
- Import the specfile
|
||||
- Import the tarball generated from the git repo
|
||||
- Import lastest changes for the different scripts
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Fri Oct 7 08:58:38 UTC 2016 - fbui@suse.com
|
||||
|
||||
- Migrating to the Suse Systemd git repo:
|
||||
|
||||
First step: drop all patches and drop the tar ball.
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Fri Sep 30 06:07:06 UTC 2016 - fbui@suse.com
|
||||
|
||||
|
1342
systemd-mini.spec
1342
systemd-mini.spec
File diff suppressed because it is too large
Load Diff
@ -1,32 +0,0 @@
|
||||
Index: systemd-227/factory/etc/pam.d/other
|
||||
===================================================================
|
||||
--- systemd-227.orig/factory/etc/pam.d/other
|
||||
+++ systemd-227/factory/etc/pam.d/other
|
||||
@@ -1,6 +1,6 @@
|
||||
# This file is part of systemd.
|
||||
|
||||
-auth include system-auth
|
||||
-account include system-auth
|
||||
-password include system-auth
|
||||
-session include system-auth
|
||||
+auth include common-auth
|
||||
+account include common-account
|
||||
+password include common-password
|
||||
+session include common-session
|
||||
Index: systemd-227/src/login/systemd-user.m4
|
||||
===================================================================
|
||||
--- systemd-227.orig/src/login/systemd-user.m4
|
||||
+++ systemd-227/src/login/systemd-user.m4
|
||||
@@ -2,10 +2,10 @@
|
||||
#
|
||||
# Used by systemd --user instances.
|
||||
|
||||
-account include system-auth
|
||||
+account include common-account
|
||||
|
||||
m4_ifdef(`HAVE_SELINUX',
|
||||
session required pam_selinux.so close
|
||||
session required pam_selinux.so nottys open
|
||||
)m4_dnl
|
||||
-session include system-auth
|
||||
+session include common-session
|
@ -102,6 +102,7 @@ while read line ; do
|
||||
done < /var/lib/systemd/sysv-convert/database
|
||||
}
|
||||
|
||||
declare -i fail=0
|
||||
case "$1" in
|
||||
-h|--help)
|
||||
help
|
||||
@ -112,7 +113,8 @@ case "$1" in
|
||||
for service in $@ ; do
|
||||
if [ ! -r "/etc/init.d/$service" ]; then
|
||||
echo "SysV service $service does not exist" >/dev/stderr
|
||||
exit 1
|
||||
let fail++
|
||||
continue
|
||||
fi
|
||||
for runlevel in 2 3 4 5; do
|
||||
find_service $service $runlevel
|
||||
@ -127,11 +129,10 @@ case "$1" in
|
||||
shift
|
||||
services=$@
|
||||
lookup_database $services
|
||||
fail=0
|
||||
for service in $services; do
|
||||
if [ -z "${results_runlevel[$service]}" ]; then
|
||||
echo No information found about service $service found. >/dev/stderr
|
||||
fail=1
|
||||
let fail++
|
||||
continue
|
||||
fi
|
||||
declare -i count
|
||||
@ -142,7 +143,6 @@ case "$1" in
|
||||
count+=1
|
||||
done
|
||||
done
|
||||
exit $fail
|
||||
;;
|
||||
--apply)
|
||||
shift
|
||||
@ -170,8 +170,8 @@ case "$1" in
|
||||
done
|
||||
;;
|
||||
*) usage
|
||||
exit 2;;
|
||||
let fail=2
|
||||
;;
|
||||
esac
|
||||
|
||||
|
||||
|
||||
exit $fail
|
||||
|
@ -1,26 +1,41 @@
|
||||
#!/bin/sh
|
||||
# This script is called by "systemctl enable/disable" when the given unit is a
|
||||
# SysV init.d script. It needs to call the distribution's mechanism for
|
||||
# enabling/disabling those, such as chkconfig, update-rc.d, or similar. This
|
||||
# can optionally take a --root argument for enabling a SysV init script
|
||||
# in a chroot or similar.
|
||||
set -e
|
||||
|
||||
usage() {
|
||||
echo "Usage: $0 [--root=path] enable|disable|is-enabled <sysv script name>" >&2
|
||||
exit 1
|
||||
echo "Usage: $0 [--root=path] enable|disable|is-enabled <sysv script name>" >&2
|
||||
exit 1
|
||||
}
|
||||
|
||||
# parse options
|
||||
eval set -- "$(getopt -o r: --long root: -- "$@")"
|
||||
while true; do
|
||||
case "$1" in
|
||||
-r|--root)
|
||||
ROOT="$2"
|
||||
shift 2 ;;
|
||||
--) shift ; break ;;
|
||||
*) usage ;;
|
||||
esac
|
||||
case "$1" in
|
||||
-r|--root)
|
||||
ROOT="$2"
|
||||
shift 2 ;;
|
||||
--) shift ; break ;;
|
||||
*) usage ;;
|
||||
esac
|
||||
done
|
||||
|
||||
NAME="$2"
|
||||
ROOT="${ROOT:+--root=$ROOT}"
|
||||
[ -n "$NAME" ] || usage
|
||||
|
||||
case "$1" in
|
||||
enable) chkconfig $ROOT -a "$NAME" ;;
|
||||
disable) chkconfig $ROOT -d "$NAME" ;;
|
||||
is-enabled) chkconfig $ROOT -c "$NAME" ;;
|
||||
*) usage ;;
|
||||
enable)
|
||||
chkconfig $ROOT --no-systemctl -s "$NAME" on
|
||||
;;
|
||||
disable)
|
||||
chkconfig $ROOT --no-systemctl -s "$NAME" off
|
||||
;;
|
||||
is-enabled)
|
||||
chkconfig $ROOT --no-systemctl -c "$NAME"
|
||||
;;
|
||||
*)
|
||||
usage ;;
|
||||
esac
|
||||
|
@ -1,26 +0,0 @@
|
||||
From: Reinhard Max <max@suse.de>
|
||||
Date: Fri, 19 Apr 2013 16:12:28 +0200
|
||||
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 +++--
|
||||
1 file changed, 3 insertions(+), 2 deletions(-)
|
||||
|
||||
Index: systemd-228/tmpfiles.d/tmp.conf
|
||||
===================================================================
|
||||
--- systemd-228.orig/tmpfiles.d/tmp.conf
|
||||
+++ systemd-228/tmpfiles.d/tmp.conf
|
||||
@@ -8,8 +8,9 @@
|
||||
# See tmpfiles.d(5) for details
|
||||
|
||||
# Clear tmp directories separately, to make them easier to override
|
||||
-q /tmp 1777 root root 10d
|
||||
-q /var/tmp 1777 root root 30d
|
||||
+# SUSE policy: we do not clean these directories
|
||||
+q /tmp 1777 root root -
|
||||
+q /var/tmp 1777 root root -
|
||||
|
||||
# Exclude namespace mountpoints created with PrivateTmp=yes
|
||||
x /tmp/systemd-private-%b-*
|
258
systemd.changes
258
systemd.changes
@ -1,3 +1,261 @@
|
||||
-------------------------------------------------------------------
|
||||
Wed Oct 26 09:41:01 UTC 2016 - fbui@suse.com
|
||||
|
||||
- Own a couple of directories even if they don't belong to systemd
|
||||
otherwise the build system will complain.
|
||||
|
||||
Some directories (owned by others packages) are simply used by
|
||||
systemd to ship some scripts or config files to customize others
|
||||
*optional* components. Since thos components are not build required
|
||||
by systemd those directories are not owned by any packages and the
|
||||
BS complains...
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Wed Oct 26 07:45:08 UTC 2016 - fbui@suse.com
|
||||
|
||||
- Import commit
|
||||
|
||||
15ea716 journal-remote: change owner of /var/log/journal/remote and create /var/lib/systemd/journal-upload (bsc#1006372)
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Mon Oct 24 14:26:40 UTC 2016 - fbui@suse.com
|
||||
|
||||
- %sysusers_create and %tmpfiles_create must be called in %post
|
||||
|
||||
Calling %pre is broken since the respective conf files are not yet
|
||||
installed.
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Mon Oct 24 13:53:04 UTC 2016 - fbui@suse.com
|
||||
|
||||
- %{_libexecdir}/{tmpfiles.d,sysusers.d}/systemd-remote.conf are
|
||||
part of systemd-journal-remote package (only).
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Mon Oct 24 13:21:22 UTC 2016 - fbui@suse.com
|
||||
|
||||
- systemd-journal-{gatewayd,remote,upload} units are only part of
|
||||
"systemd-journal-remote" package.
|
||||
|
||||
So exclude them from the main package.
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Mon Oct 24 08:56:59 UTC 2016 - fbui@suse.com
|
||||
|
||||
- Import commit a1c145e6ad6588555dca64402f9103fb1e02b1a0
|
||||
|
||||
7f34037 man: explain that *KeyIgnoreInhibited only apply to a subset of locks
|
||||
df5798b Revert "logind: really handle *KeyIgnoreInhibited options in logind.conf" (bsc#1001790 bsc#1005404)
|
||||
f79fee7 Revert "kbd-model-map: add more mappings offered by Yast"
|
||||
3760c10 manager: tighten incoming notification message checks
|
||||
d6efd71 core: only warn on short reads on signal fd
|
||||
6eebd91 manager: be stricter with incomining notifications, warn properly about too large ones
|
||||
fdf2dc3 manager: don't ever busy loop when we get a notification message we can't process
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Thu Oct 20 06:57:57 UTC 2016 - fbui@suse.com
|
||||
|
||||
- Rename kbd-model-map-extra into kbd-model-map.legacy
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Wed Oct 19 07:24:46 UTC 2016 - fbui@suse.com
|
||||
|
||||
- Remove tcpd-devel build requirement.
|
||||
|
||||
tcpwrap support has been removed since v212, see commit
|
||||
7f8aa67131cfc03ddcbd31c0420754864fc122f0
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Tue Oct 18 14:52:00 UTC 2016 - fbui@suse.com
|
||||
|
||||
- remove all dummy "aliases" to /etc/init.d (as it was already done by
|
||||
factory more than 1 year ago).
|
||||
|
||||
Even if a sysvinit script is still requiring one of those dummy
|
||||
symlinks this should not be an issue since this is requirement is
|
||||
translated into a weak dependency.
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Tue Oct 18 13:20:58 UTC 2016 - fbui@suse.com
|
||||
|
||||
- specfile:
|
||||
|
||||
- do not own /usr/share/zsh directory
|
||||
- do not own /etc/dbus-1 and /etc/dbus-1/system.d dirs
|
||||
- do not own /usr/share/dbus-1 dir
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Tue Oct 18 13:06:27 UTC 2016 - fbui@suse.com
|
||||
|
||||
- specfile: %{_prefix}/lib/systemd/system-preset was mentioned twice
|
||||
in %files section.
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Tue Oct 18 09:30:37 UTC 2016 - fbui@suse.com
|
||||
|
||||
- Specfile cleanup:
|
||||
|
||||
- use curly braces with rpm macros
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Tue Oct 18 09:15:17 UTC 2016 - fbui@suse.com
|
||||
|
||||
- Specfile cleanup:
|
||||
|
||||
- %ghost files doesn't need (anymore) to be created in %builroot
|
||||
- do not own /etc/X11/xorg.conf.d and /etc/X11/xinit
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Tue Oct 18 07:58:38 UTC 2016 - fbui@suse.com
|
||||
|
||||
- Specfile cleanup: no need to protect the manpages with %bootstrap
|
||||
condition in nss-myhostname package since the package itself is
|
||||
already protected.
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Tue Oct 18 07:51:30 UTC 2016 - fbui@suse.com
|
||||
|
||||
- fix nss-resolve sub package:
|
||||
|
||||
- add a %files section
|
||||
- add a package description
|
||||
- libnss_resolve.so.2 is now part of this subpackage
|
||||
- add %post and %postun sections
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Tue Oct 18 07:16:17 UTC 2016 - fbui@suse.com
|
||||
|
||||
- Specfile cleanup:
|
||||
|
||||
- reorganize some files in %files by types
|
||||
- some config files were missing the "noreplace" attribute
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Tue Oct 18 06:19:34 UTC 2016 - fbui@suse.com
|
||||
|
||||
- Use %config(noreplace) for %{_sysconfdir}/pam.d/systemd-user
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Tue Oct 18 05:57:28 UTC 2016 - fbui@suse.com
|
||||
|
||||
- Rework systemd-gatewayd package:
|
||||
|
||||
- some gateway's files were still in the main package
|
||||
- it now includes all progs dealing with remote journals
|
||||
- it can be turned off (SP2 does that currently)
|
||||
- it's been renamed systemd-journal-remote to reflect that
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Mon Oct 17 12:19:34 UTC 2016 - fbui@suse.com
|
||||
|
||||
- Specfile cleanup:
|
||||
|
||||
- only specify once %{_prefix}/lib/systemd/system-shutdown in %file
|
||||
- no need to list the content of %{_prefix}/lib/systemd/user-generators in %file
|
||||
- machined is not built when %bootstrap = 1
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Mon Oct 17 12:11:43 UTC 2016 - fbui@suse.com
|
||||
|
||||
- Specfile cleanup:
|
||||
|
||||
- There's no point in listing all generators in %file
|
||||
explicitly. The default is to include all of them and if for some
|
||||
reason one must be excluded then it should be done explicitly.
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Mon Oct 17 11:44:57 UTC 2016 - fbui@suse.com
|
||||
|
||||
- Specfile cleanup:
|
||||
|
||||
- remove explicit call to make for building man pages. This is not
|
||||
needed and was maybe useful when generated doc was pre-built and
|
||||
shipped in the tarball.
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Mon Oct 17 09:59:13 UTC 2016 - fbui@suse.com
|
||||
|
||||
- Specfile cleanup:
|
||||
|
||||
- break overly long and unreadable line using mkdir
|
||||
- gather directory creations
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Mon Oct 17 08:38:27 UTC 2016 - fbui@suse.com
|
||||
|
||||
- Stop providing udevd.8
|
||||
|
||||
systemd-udevd has replaced udevd for some time already and usage of
|
||||
udevd should be avoided. Therefore don't encourage this and stop
|
||||
documenting it.
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Mon Oct 17 07:36:10 UTC 2016 - fbui@suse.com
|
||||
|
||||
- Import from factory:
|
||||
|
||||
- Thu Feb 4 11:05:37 UTC 2016 - lnussel@suse.de
|
||||
|
||||
- curl also causes building of journal-upload. That one has rather
|
||||
unusal certificate usage, set it's ca root to /etc/pki/systemd
|
||||
instead of the built-in default /etc/ssl as journal-remote and
|
||||
journal-upload think they can put stuff in /etc/ssl/certs then
|
||||
but that directory is managed by p11-kit and doesn't serve the
|
||||
purpose those programs think.
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Thu Oct 13 19:33:17 UTC 2016 - fbui@suse.com
|
||||
|
||||
- Package rootsymlink-generator helper. It was forgotten when
|
||||
switching to the git repo but re-added back.
|
||||
|
||||
That said this thing should be removed as it's broken as soon as
|
||||
there's no direct link between the root fs and its backend device
|
||||
node (i.e. BTRFS).
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Thu Oct 13 19:09:25 UTC 2016 - fbui@suse.com
|
||||
|
||||
- Add kbd-model-map-extra file which contains the additional legacy
|
||||
keymaps needed by yast.
|
||||
|
||||
This was previously directly patched in the systemd source code.
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Mon Oct 10 13:33:40 UTC 2016 - fbui@suse.com
|
||||
|
||||
- Imported e251b8d7fb5c801fdfa3a023257ba0e4d514f3b0
|
||||
|
||||
- Re-add back /dev/root symlink generation (although this must be
|
||||
deprecated and finally removed).
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Fri Oct 7 14:18:10 UTC 2016 - fbui@suse.com
|
||||
|
||||
- Migrating to the Suse Systemd git repo:
|
||||
|
||||
Third step:
|
||||
|
||||
- Re-enable networkd (disabled by default in SLE12)
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Fri Oct 7 13:33:51 UTC 2016 - fbui@suse.com
|
||||
|
||||
- Migrating to the Suse Systemd git repo:
|
||||
|
||||
Second step:
|
||||
|
||||
- Import the specfile
|
||||
- Import the tarball generated from the git repo
|
||||
- Import lastest changes for the different scripts
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Fri Oct 7 08:58:38 UTC 2016 - fbui@suse.com
|
||||
|
||||
- Migrating to the Suse Systemd git repo:
|
||||
|
||||
First step: drop all patches and drop the tar ball.
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Fri Sep 30 06:07:06 UTC 2016 - fbui@suse.com
|
||||
|
||||
|
1339
systemd.spec
1339
systemd.spec
File diff suppressed because it is too large
Load Diff
@ -1,20 +0,0 @@
|
||||
Provide /run/lock/subsys directory to be able to provide the
|
||||
/var/lock/subsys via the symbolic link /var/lock (bnc#889357)
|
||||
|
||||
---
|
||||
tmpfiles.d/legacy.conf | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
Index: systemd-221/tmpfiles.d/legacy.conf
|
||||
===================================================================
|
||||
--- systemd-221.orig/tmpfiles.d/legacy.conf
|
||||
+++ systemd-221/tmpfiles.d/legacy.conf
|
||||
@@ -17,7 +17,7 @@ L /var/lock - - - - ../run/lock
|
||||
# /run/lock/subsys is used for serializing SysV service execution, and
|
||||
# hence without use on SysV-less systems.
|
||||
|
||||
-#d /run/lock/subsys 0755 root root -
|
||||
+d /run/lock/subsys 0755 root root -
|
||||
|
||||
# /run/lock/lockdev is used to serialize access to tty devices via
|
||||
# LCK..xxx style lock files, For more information see:
|
@ -1,376 +0,0 @@
|
||||
From 907bc2aa36f58c6050cd4b7b290e0992a4373e49 Mon Sep 17 00:00:00 2001
|
||||
From: Werner Fink <werner@suse.de>
|
||||
Date: Wed, 30 Sep 2015 15:00:41 +0200
|
||||
Subject: [PATCH] Ask for passphrases not only on the first console of
|
||||
/dev/console
|
||||
|
||||
but also on all other consoles. This does help on e.g. mainframes
|
||||
where often a serial console together with other consoles are
|
||||
used. Even rack based servers attachted to both a serial console
|
||||
as well as having a virtual console do sometimes miss a connected
|
||||
monitor.
|
||||
|
||||
To be able to ask on all terminal devices of /dev/console the devices
|
||||
are collected. If more than one device are found, then on each of the
|
||||
terminals a inquiring task for passphrase is forked and do not return
|
||||
to the caller.
|
||||
|
||||
Every task has its own session and its own controlling terminal.
|
||||
If one of the tasks does handle a password, the remaining tasks
|
||||
will be terminated.
|
||||
|
||||
Also let contradictory options on the command of
|
||||
systemd-tty-ask-password-agent fail.
|
||||
|
||||
Spwan for each device of the system console /dev/console a own process.
|
||||
|
||||
Replace the system call wait() with with system call waitid().
|
||||
---
|
||||
src/tty-ask-password-agent/tty-ask-password-agent.c | 264 +++++++++++++++++++-
|
||||
1 file changed, 254 insertions(+), 10 deletions(-)
|
||||
|
||||
Index: systemd-228/src/tty-ask-password-agent/tty-ask-password-agent.c
|
||||
===================================================================
|
||||
--- systemd-228.orig/src/tty-ask-password-agent/tty-ask-password-agent.c
|
||||
+++ systemd-228/src/tty-ask-password-agent/tty-ask-password-agent.c
|
||||
@@ -4,6 +4,7 @@
|
||||
This file is part of systemd.
|
||||
|
||||
Copyright 2010 Lennart Poettering
|
||||
+ Copyright 2015 Werner Fink
|
||||
|
||||
systemd is free software; you can redistribute it and/or modify it
|
||||
under the terms of the GNU Lesser General Public License as published by
|
||||
@@ -21,6 +22,9 @@
|
||||
|
||||
#include <errno.h>
|
||||
#include <fcntl.h>
|
||||
+#include <sys/prctl.h>
|
||||
+#include <signal.h>
|
||||
+#include <sys/wait.h>
|
||||
#include <getopt.h>
|
||||
#include <poll.h>
|
||||
#include <stdbool.h>
|
||||
@@ -49,6 +53,8 @@
|
||||
#include "terminal-util.h"
|
||||
#include "util.h"
|
||||
#include "utmp-wtmp.h"
|
||||
+#include "fileio.h"
|
||||
+#include "macro.h"
|
||||
|
||||
static enum {
|
||||
ACTION_LIST,
|
||||
@@ -57,8 +63,21 @@ static enum {
|
||||
ACTION_WALL
|
||||
} arg_action = ACTION_QUERY;
|
||||
|
||||
+struct console {
|
||||
+ pid_t pid;
|
||||
+ char *tty;
|
||||
+};
|
||||
+
|
||||
+static volatile sig_atomic_t sigchild;
|
||||
+
|
||||
+static void chld_handler(int sig) {
|
||||
+ ++sigchild;
|
||||
+}
|
||||
+
|
||||
static bool arg_plymouth = false;
|
||||
static bool arg_console = false;
|
||||
+static bool arg_device = false;
|
||||
+static const char *current_dev = "/dev/console";
|
||||
|
||||
static int ask_password_plymouth(
|
||||
const char *message,
|
||||
@@ -240,6 +259,80 @@ finish:
|
||||
return r;
|
||||
}
|
||||
|
||||
+static void free_consoles(struct console *con, unsigned int num) {
|
||||
+ unsigned int n;
|
||||
+
|
||||
+ if (!con || num == 0)
|
||||
+ return;
|
||||
+
|
||||
+ for (n = 0; n < num; n++)
|
||||
+ free(con[n].tty);
|
||||
+
|
||||
+ free(con);
|
||||
+}
|
||||
+
|
||||
+static int collect_consoles(struct console **consoles, unsigned int *num) {
|
||||
+ _cleanup_free_ char *active = NULL;
|
||||
+ const char *word, *state;
|
||||
+ struct console *con = NULL;
|
||||
+ size_t con_len = 0, len;
|
||||
+ unsigned int count = 0;
|
||||
+ int ret;
|
||||
+
|
||||
+ assert(num);
|
||||
+ assert(consoles);
|
||||
+
|
||||
+ ret = read_one_line_file("/sys/class/tty/console/active", &active);
|
||||
+ if (ret < 0)
|
||||
+ return log_error_errno(ret, "Failed to read /sys/class/tty/console/active: %m");
|
||||
+
|
||||
+ FOREACH_WORD(word, len, active, state) {
|
||||
+ _cleanup_free_ char *tty = NULL;
|
||||
+
|
||||
+ if (len == 4 && strneq(word, "tty0", 4)) {
|
||||
+
|
||||
+ ret = read_one_line_file("/sys/class/tty/tty0/active", &tty);
|
||||
+ if (ret < 0)
|
||||
+ return log_error_errno(ret, "Failed to read /sys/class/tty/tty0/active: %m");
|
||||
+
|
||||
+ word = tty;
|
||||
+ len = strlen(tty);
|
||||
+ }
|
||||
+
|
||||
+ con = GREEDY_REALLOC(con, con_len, 1+count);
|
||||
+ if (!con)
|
||||
+ return log_oom();
|
||||
+
|
||||
+ if (asprintf(&con[count].tty, "/dev/%.*s", (int)len, word) < 0) {
|
||||
+ free_consoles(con, count);
|
||||
+ return log_oom();
|
||||
+ }
|
||||
+
|
||||
+ con[count].pid = 0;
|
||||
+ count++;
|
||||
+ }
|
||||
+
|
||||
+ if (!con) {
|
||||
+ con = GREEDY_REALLOC(con, con_len, 1);
|
||||
+ if (!con)
|
||||
+ return log_oom();
|
||||
+
|
||||
+ con[0].tty = strdup(current_dev);
|
||||
+ if (!con[0].tty) {
|
||||
+ free_consoles(con, 1);
|
||||
+ return log_oom();
|
||||
+ }
|
||||
+
|
||||
+ con[0].pid = 0;
|
||||
+ count++;
|
||||
+ }
|
||||
+
|
||||
+ *num = count;
|
||||
+ *consoles = con;
|
||||
+
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
static int parse_password(const char *filename, char **wall) {
|
||||
_cleanup_free_ char *socket_name = NULL, *message = NULL, *packet = NULL;
|
||||
bool accept_cached = false, echo = false;
|
||||
@@ -340,7 +433,7 @@ static int parse_password(const char *fi
|
||||
int tty_fd = -1;
|
||||
|
||||
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 log_error_errno(tty_fd, "Failed to acquire /dev/console: %m");
|
||||
|
||||
@@ -601,7 +694,7 @@ static int parse_argv(int argc, char *ar
|
||||
{ "watch", no_argument, NULL, ARG_WATCH },
|
||||
{ "wall", no_argument, NULL, ARG_WALL },
|
||||
{ "plymouth", no_argument, NULL, ARG_PLYMOUTH },
|
||||
- { "console", no_argument, NULL, ARG_CONSOLE },
|
||||
+ { "console", optional_argument, NULL, ARG_CONSOLE },
|
||||
{}
|
||||
};
|
||||
|
||||
@@ -643,6 +736,10 @@ static int parse_argv(int argc, char *ar
|
||||
|
||||
case ARG_CONSOLE:
|
||||
arg_console = true;
|
||||
+ if (optarg && *optarg) {
|
||||
+ current_dev = optarg;
|
||||
+ arg_device = true;
|
||||
+ }
|
||||
break;
|
||||
|
||||
case '?':
|
||||
@@ -657,9 +754,143 @@ static int parse_argv(int argc, char *ar
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
+ if (arg_plymouth || arg_console) {
|
||||
+
|
||||
+ if (!IN_SET(arg_action, ACTION_QUERY, ACTION_WATCH)) {
|
||||
+ log_error("%s conflicting options --query and --watch.", program_invocation_short_name);
|
||||
+ return -EINVAL;
|
||||
+ }
|
||||
+
|
||||
+ if (arg_plymouth && arg_console) {
|
||||
+ log_error("%s conflicting options --plymouth and --console.", program_invocation_short_name);
|
||||
+ return -EINVAL;
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
return 1;
|
||||
}
|
||||
|
||||
+/*
|
||||
+ * To be able to ask on all terminal devices of /dev/console
|
||||
+ * the devices are collected. If more than one device are found,
|
||||
+ * then on each of the terminals a inquiring task is forked.
|
||||
+ * Every task has its own session and its own controlling terminal.
|
||||
+ * If one of the tasks does handle a password, the remaining tasks
|
||||
+ * will be terminated.
|
||||
+ */
|
||||
+static int ask_on_consoles(int argc, char *argv[]) {
|
||||
+ struct console *consoles = NULL;
|
||||
+ struct sigaction sig = {
|
||||
+ .sa_handler = chld_handler,
|
||||
+ .sa_flags = SA_NOCLDSTOP | SA_RESTART,
|
||||
+ };
|
||||
+ struct sigaction oldsig;
|
||||
+ sigset_t oldset;
|
||||
+ unsigned int num = 0, id;
|
||||
+ siginfo_t status = {};
|
||||
+ int ret;
|
||||
+
|
||||
+ ret = collect_consoles(&consoles, &num);
|
||||
+ if (ret < 0)
|
||||
+ return log_error_errno(ret, "Failed to query password: %m");
|
||||
+
|
||||
+ assert_se(sigprocmask_many(SIG_UNBLOCK, &oldset, SIGHUP, SIGCHLD, -1) >= 0);
|
||||
+
|
||||
+ assert_se(sigemptyset(&sig.sa_mask) >= 0);
|
||||
+ assert_se(sigaction(SIGCHLD, &sig, &oldsig) >= 0);
|
||||
+
|
||||
+ sig.sa_handler = SIG_DFL;
|
||||
+ assert_se(sigaction(SIGHUP, &sig, NULL) >= 0);
|
||||
+
|
||||
+ for (id = 0; id < num; id++) {
|
||||
+ consoles[id].pid = fork();
|
||||
+
|
||||
+ if (consoles[id].pid < 0)
|
||||
+ return log_error_errno(errno, "Failed to query password: %m");
|
||||
+
|
||||
+ if (consoles[id].pid == 0) {
|
||||
+ char *conarg;
|
||||
+ int ac;
|
||||
+
|
||||
+ conarg = strjoina("--console=", consoles[id].tty);
|
||||
+ if (!conarg)
|
||||
+ return log_oom();
|
||||
+
|
||||
+ free_consoles(consoles, num); /* not used anymore */
|
||||
+
|
||||
+ assert_se(prctl(PR_SET_PDEATHSIG, SIGHUP) >= 0);
|
||||
+
|
||||
+ zero(sig);
|
||||
+ assert_se(sigprocmask(SIG_UNBLOCK, &oldset, NULL) >= 0);
|
||||
+ assert_se(sigaction(SIGCHLD, &oldsig, NULL) >= 0);
|
||||
+
|
||||
+ for (ac = 0; ac < argc; ac++) {
|
||||
+ if (streq(argv[ac], "--console")) {
|
||||
+ argv[ac] = conarg;
|
||||
+ break;
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+ execv(SYSTEMD_TTY_ASK_PASSWORD_AGENT_BINARY_PATH, argv);
|
||||
+
|
||||
+ return log_error_errno(errno, "Failed to execute %s: %m", program_invocation_name);
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+ ret = 0;
|
||||
+ while (true) {
|
||||
+
|
||||
+ if ((ret = waitid(P_ALL, 0, &status, WEXITED)) < 0) {
|
||||
+
|
||||
+ if (errno != EINTR) {
|
||||
+ ret = -errno;
|
||||
+ if (errno == ECHILD)
|
||||
+ ret = EXIT_SUCCESS;
|
||||
+ break;
|
||||
+ }
|
||||
+ continue;
|
||||
+ }
|
||||
+
|
||||
+ for (id = 0; id < num; id++) {
|
||||
+ struct timespec timeout;
|
||||
+ sigset_t set;
|
||||
+ int signum;
|
||||
+
|
||||
+ if (consoles[id].pid == status.si_pid || kill(consoles[id].pid, 0) < 0)
|
||||
+ consoles[id].pid = -1;
|
||||
+
|
||||
+ if (consoles[id].pid < 0)
|
||||
+ continue;
|
||||
+
|
||||
+ kill(consoles[id].pid, SIGHUP);
|
||||
+
|
||||
+ assert_se(sigemptyset(&set) >= 0);
|
||||
+ assert_se(sigaddset(&set, SIGCHLD) >= 0);
|
||||
+
|
||||
+ timespec_store(&timeout, 50 * USEC_PER_MSEC);
|
||||
+ signum = sigtimedwait(&set, NULL, &timeout);
|
||||
+
|
||||
+ if (signum != SIGCHLD) {
|
||||
+
|
||||
+ if (signum < 0 && errno != EAGAIN)
|
||||
+ return log_error_errno(errno, "sigtimedwait() failed: %m");
|
||||
+
|
||||
+ if (signum >= 0)
|
||||
+ log_warning("sigtimedwait() returned unexpected signal.");
|
||||
+ }
|
||||
+
|
||||
+ kill(consoles[id].pid, SIGKILL);
|
||||
+ }
|
||||
+
|
||||
+ if (WIFEXITED(status.si_status) && ret == 0)
|
||||
+ ret = WEXITSTATUS(status.si_status);
|
||||
+ }
|
||||
+
|
||||
+ free_consoles(consoles, num);
|
||||
+
|
||||
+ return ret;
|
||||
+}
|
||||
+
|
||||
int main(int argc, char *argv[]) {
|
||||
int r;
|
||||
|
||||
@@ -673,16 +904,29 @@ int main(int argc, char *argv[]) {
|
||||
if (r <= 0)
|
||||
goto finish;
|
||||
|
||||
- if (arg_console) {
|
||||
- (void) setsid();
|
||||
- (void) release_terminal();
|
||||
+ if (arg_console && !arg_device)
|
||||
+ /*
|
||||
+ * Spawn for each console device a own process
|
||||
+ */
|
||||
+ r = ask_on_consoles(argc, argv);
|
||||
+ else {
|
||||
+
|
||||
+ if (arg_device) {
|
||||
+ /*
|
||||
+ * Later on a controlling terminal will be will be acquired,
|
||||
+ * therefore the current process has to become a session
|
||||
+ * leader and should not have a controlling terminal already.
|
||||
+ */
|
||||
+ (void) setsid();
|
||||
+ (void) release_terminal();
|
||||
+ }
|
||||
+
|
||||
+ if (IN_SET(arg_action, ACTION_WATCH, ACTION_WALL))
|
||||
+ r = watch_passwords();
|
||||
+ else
|
||||
+ r = show_passwords();
|
||||
}
|
||||
|
||||
- if (IN_SET(arg_action, ACTION_WATCH, ACTION_WALL))
|
||||
- r = watch_passwords();
|
||||
- else
|
||||
- r = show_passwords();
|
||||
-
|
||||
finish:
|
||||
return r < 0 ? EXIT_FAILURE : EXIT_SUCCESS;
|
||||
}
|
@ -1,155 +0,0 @@
|
||||
Simply writing /var/lib/systemd/random-seed back to /dev/(u)random does not
|
||||
increase the entropy bit count. Therefore use the RNDADDENTROPY ioctl to
|
||||
write back the bytes and increase the entropy bit counter.
|
||||
|
||||
Related to bnc#892096
|
||||
|
||||
---
|
||||
src/random-seed/random-seed.c | 71 ++++++++++++++++++++++++++++++++++++------
|
||||
1 file changed, 61 insertions(+), 10 deletions(-)
|
||||
|
||||
Index: systemd-228/src/random-seed/random-seed.c
|
||||
===================================================================
|
||||
--- systemd-228.orig/src/random-seed/random-seed.c
|
||||
+++ systemd-228/src/random-seed/random-seed.c
|
||||
@@ -24,6 +24,8 @@
|
||||
#include <string.h>
|
||||
#include <sys/stat.h>
|
||||
#include <unistd.h>
|
||||
+#include <linux/random.h>
|
||||
+#include <sys/ioctl.h>
|
||||
|
||||
#include "alloc-util.h"
|
||||
#include "fd-util.h"
|
||||
@@ -36,8 +38,8 @@
|
||||
#define POOL_SIZE_MIN 512
|
||||
|
||||
int main(int argc, char *argv[]) {
|
||||
- _cleanup_close_ int seed_fd = -1, random_fd = -1;
|
||||
- _cleanup_free_ void* buf = NULL;
|
||||
+ _cleanup_close_ int seed_fd = -1, random_fd = -1, entropy_fd = -1;
|
||||
+ _cleanup_free_ struct rand_pool_info *entropy = NULL;
|
||||
size_t buf_size = 0;
|
||||
ssize_t k;
|
||||
int r;
|
||||
@@ -68,11 +70,12 @@ int main(int argc, char *argv[]) {
|
||||
if (buf_size <= POOL_SIZE_MIN)
|
||||
buf_size = POOL_SIZE_MIN;
|
||||
|
||||
- buf = malloc(buf_size);
|
||||
- if (!buf) {
|
||||
+ entropy = (struct rand_pool_info*) malloc(sizeof(struct rand_pool_info) + buf_size);
|
||||
+ if (!entropy) {
|
||||
r = log_oom();
|
||||
goto finish;
|
||||
}
|
||||
+ entropy->buf_size = (typeof(entropy->buf_size)) buf_size;
|
||||
|
||||
r = mkdir_parents_label(RANDOM_SEED, 0755);
|
||||
if (r < 0) {
|
||||
@@ -86,6 +89,23 @@ int main(int argc, char *argv[]) {
|
||||
|
||||
if (streq(argv[1], "load")) {
|
||||
|
||||
+ entropy_fd = open(RANDOM_SEED_DIR "entropy_count", O_RDONLY|O_CLOEXEC|O_NOCTTY, 0600);
|
||||
+ if (entropy_fd < 0) {
|
||||
+ entropy->entropy_count = 0;
|
||||
+ if (errno != ENOENT) {
|
||||
+ log_error("Failed to open " RANDOM_SEED "/entropy_count: %m");
|
||||
+ r = -errno;
|
||||
+ goto finish;
|
||||
+ }
|
||||
+ } else {
|
||||
+ r = read(entropy_fd, &entropy->entropy_count, sizeof(entropy->entropy_count));
|
||||
+ if (r < 0) {
|
||||
+ log_error("Failed to read entropy count file: %m");
|
||||
+ r = -errno;
|
||||
+ goto finish;
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
seed_fd = open(RANDOM_SEED, O_RDWR|O_CLOEXEC|O_NOCTTY|O_CREAT, 0600);
|
||||
if (seed_fd < 0) {
|
||||
seed_fd = open(RANDOM_SEED, O_RDONLY|O_CLOEXEC|O_NOCTTY);
|
||||
@@ -106,7 +126,7 @@ int main(int argc, char *argv[]) {
|
||||
}
|
||||
}
|
||||
|
||||
- k = loop_read(seed_fd, buf, buf_size, false);
|
||||
+ k = loop_read(seed_fd, entropy->buf, (size_t) entropy->buf_size, false);
|
||||
if (k < 0)
|
||||
r = log_error_errno(k, "Failed to read seed from " RANDOM_SEED ": %m");
|
||||
else if (k == 0)
|
||||
@@ -114,13 +134,29 @@ int main(int argc, char *argv[]) {
|
||||
else {
|
||||
(void) lseek(seed_fd, 0, SEEK_SET);
|
||||
|
||||
- r = loop_write(random_fd, buf, (size_t) k, false);
|
||||
- if (r < 0)
|
||||
- log_error_errno(r, "Failed to write seed to /dev/urandom: %m");
|
||||
+ if (entropy->entropy_count && (size_t)k == (size_t)entropy->buf_size) {
|
||||
+ r = ioctl(random_fd, RNDADDENTROPY, entropy);
|
||||
+ if (r < 0) {
|
||||
+ log_error_errno(errno, "Failed to write seed to /dev/urandom: %m");
|
||||
+ r = -errno;
|
||||
+ }
|
||||
+ } else {
|
||||
+ r = loop_write(random_fd, entropy->buf, (size_t) k, false);
|
||||
+ if (r < 0)
|
||||
+ log_error_errno(r, "Failed to write seed to /dev/urandom: %m");
|
||||
+ }
|
||||
}
|
||||
|
||||
} else if (streq(argv[1], "save")) {
|
||||
|
||||
+ /* Read available entropy count, if possible */
|
||||
+ f = fopen("/proc/sys/kernel/random/entropy_avail", "re");
|
||||
+ if (f) {
|
||||
+ if (fscanf(f, "%d", &entropy->entropy_count) < 0)
|
||||
+ entropy->entropy_count = 0;
|
||||
+ fclose(f);
|
||||
+ }
|
||||
+
|
||||
seed_fd = open(RANDOM_SEED, O_WRONLY|O_CLOEXEC|O_NOCTTY|O_CREAT, 0600);
|
||||
if (seed_fd < 0) {
|
||||
r = log_error_errno(errno, "Failed to open " RANDOM_SEED ": %m");
|
||||
@@ -133,6 +169,21 @@ int main(int argc, char *argv[]) {
|
||||
goto finish;
|
||||
}
|
||||
|
||||
+ if (entropy->entropy_count) {
|
||||
+ entropy_fd = open(RANDOM_SEED_DIR "entropy_count", O_WRONLY|O_CLOEXEC|O_NOCTTY|O_CREAT, 0600);
|
||||
+ if (seed_fd < 0) {
|
||||
+ log_error("Failed to open " RANDOM_SEED_DIR "entropy_count: %m");
|
||||
+ r = -errno;
|
||||
+ goto finish;
|
||||
+ }
|
||||
+ r = write(entropy_fd, &entropy->entropy_count, sizeof(entropy->entropy_count));
|
||||
+ if (r < 0) {
|
||||
+ log_error("Failed to write entropy count file: %m");
|
||||
+ r = -errno;
|
||||
+ goto finish;
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
} else {
|
||||
log_error("Unknown verb '%s'.", argv[1]);
|
||||
r = -EINVAL;
|
||||
@@ -147,7 +198,7 @@ int main(int argc, char *argv[]) {
|
||||
(void) fchmod(seed_fd, 0600);
|
||||
(void) fchown(seed_fd, 0, 0);
|
||||
|
||||
- k = loop_read(random_fd, buf, buf_size, false);
|
||||
+ k = loop_read(random_fd, entropy->buf, (size_t) entropy->buf_size, false);
|
||||
if (k < 0) {
|
||||
r = log_error_errno(k, "Failed to read new seed from /dev/urandom: %m");
|
||||
goto finish;
|
||||
@@ -158,7 +209,7 @@ int main(int argc, char *argv[]) {
|
||||
goto finish;
|
||||
}
|
||||
|
||||
- r = loop_write(seed_fd, buf, (size_t) k, false);
|
||||
+ r = loop_write(seed_fd, entropy->buf, (size_t) k, false);
|
||||
if (r < 0)
|
||||
log_error_errno(r, "Failed to write new random seed file: %m");
|
||||
}
|
@ -1,3 +0,0 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:dd124ff561a07e6439ed2b3713f38ca914df7747f110ce86deea17b56d245ae6
|
||||
size 4034401
|
@ -1,40 +0,0 @@
|
||||
Related to bnc#886599 and others. That is use the vhangup(8) tool
|
||||
to explicit do a virtually hangup on the specified on the terminal
|
||||
line to give e.g. the bash a few seconds to e.g. safe its history.
|
||||
|
||||
[crrodriguez@opensuse.org: Feb 2015
|
||||
This a known kernel bug, no notification from the cgroup subsystem
|
||||
arrives and the processes in the "scope" units have
|
||||
to be SIGKILL'ed without delay in order not to hang shutdown
|
||||
Status: fix not available as of Feb 16 2015
|
||||
track progress: https://bugzilla.redhat.com/show_bug.cgi?id=1141137
|
||||
]
|
||||
|
||||
---
|
||||
units/getty@.service.m4 | 1 +
|
||||
units/serial-getty@.service.m4 | 1 +
|
||||
2 files changed, 2 insertions(+)
|
||||
Index: systemd-221/units/getty@.service.m4
|
||||
===================================================================
|
||||
--- systemd-221.orig/units/getty@.service.m4
|
||||
+++ systemd-221/units/getty@.service.m4
|
||||
@@ -29,6 +29,7 @@ ConditionPathExists=/dev/tty0
|
||||
[Service]
|
||||
# the VT is cleared by TTYVTDisallocate
|
||||
ExecStart=-/sbin/agetty --noclear %I $TERM
|
||||
+ExecStopPost=-/sbin/vhangup /dev/%I
|
||||
Type=idle
|
||||
Restart=always
|
||||
RestartSec=0
|
||||
Index: systemd-221/units/serial-getty@.service.m4
|
||||
===================================================================
|
||||
--- systemd-221.orig/units/serial-getty@.service.m4
|
||||
+++ systemd-221/units/serial-getty@.service.m4
|
||||
@@ -24,6 +24,7 @@ IgnoreOnIsolate=yes
|
||||
|
||||
[Service]
|
||||
ExecStart=-/sbin/agetty --keep-baud 115200,38400,9600 %I $TERM
|
||||
+ExecStopPost=-/sbin/vhangup /dev/%I
|
||||
Type=idle
|
||||
Restart=always
|
||||
UtmpIdentifier=%I
|
@ -1,153 +0,0 @@
|
||||
---
|
||||
src/core/manager.c | 93 +++++++++++++++++++++++++++++++++++++++++++++++++++++
|
||||
src/core/manager.h | 5 ++
|
||||
2 files changed, 98 insertions(+)
|
||||
|
||||
Index: systemd-227/src/core/manager.c
|
||||
===================================================================
|
||||
--- systemd-227.orig/src/core/manager.c
|
||||
+++ systemd-227/src/core/manager.c
|
||||
@@ -32,6 +32,7 @@
|
||||
#include <sys/timerfd.h>
|
||||
#include <sys/wait.h>
|
||||
#include <unistd.h>
|
||||
+#include <resolv.h>
|
||||
|
||||
#ifdef HAVE_AUDIT
|
||||
#include <libaudit.h>
|
||||
@@ -294,6 +295,91 @@ static int manager_check_ask_password(Ma
|
||||
return m->have_ask_password;
|
||||
}
|
||||
|
||||
+static int manager_setup_resolv_conf_change(Manager *);
|
||||
+
|
||||
+static int manager_dispatch_resolv_conf_fd(sd_event_source *source,
|
||||
+ int fd, uint32_t revents, void *userdata) {
|
||||
+ Manager *m = userdata;
|
||||
+
|
||||
+ assert(m);
|
||||
+ assert(m->resolv_conf_inotify_fd == fd);
|
||||
+
|
||||
+ if (revents != EPOLLIN) {
|
||||
+ log_warning("Got unexpected poll event for notify fd.");
|
||||
+ return 0;
|
||||
+ }
|
||||
+
|
||||
+ if (fd >= 0)
|
||||
+ flush_fd(fd);
|
||||
+
|
||||
+ m->resolv_conf_event_source = sd_event_source_unref(m->resolv_conf_event_source);
|
||||
+ m->resolv_conf_inotify_fd = safe_close(m->resolv_conf_inotify_fd);
|
||||
+ manager_setup_resolv_conf_change(m);
|
||||
+ return m->resolv_conf_noent ? 0 : res_init();
|
||||
+}
|
||||
+
|
||||
+static int manager_setup_resolv_conf_change(Manager *m) {
|
||||
+ int r;
|
||||
+
|
||||
+ assert(m);
|
||||
+ assert(m->resolv_conf_inotify_fd < 0);
|
||||
+
|
||||
+ m->resolv_conf_inotify_fd = inotify_init1(IN_NONBLOCK|IN_CLOEXEC);
|
||||
+ if (m->resolv_conf_inotify_fd < 0) {
|
||||
+ log_error("inotify_init1() failed: %m");
|
||||
+ r = -errno;
|
||||
+ goto fail;
|
||||
+ }
|
||||
+ if (inotify_add_watch(m->resolv_conf_inotify_fd, "/etc/resolv.conf",
|
||||
+ IN_CLOSE_WRITE|IN_MODIFY|IN_ATTRIB|IN_DELETE_SELF) < 0) {
|
||||
+ if (errno == ENOENT) {
|
||||
+ m->resolv_conf_noent = true;
|
||||
+ if (inotify_add_watch(m->resolv_conf_inotify_fd, "/etc", IN_CREATE|IN_MOVED_TO) < 0) {
|
||||
+ log_error("Failed to add watch on /etc: %m");
|
||||
+ r = -errno;
|
||||
+ goto fail;
|
||||
+ }
|
||||
+ } else {
|
||||
+ log_error("Failed to add watch on /etc/resolv.conf: %m");
|
||||
+ r = -errno;
|
||||
+ goto fail;
|
||||
+ }
|
||||
+ }
|
||||
+ if (inotify_add_watch(m->resolv_conf_inotify_fd, "/etc/host.conf",
|
||||
+ IN_CLOSE_WRITE|IN_MODIFY|IN_ATTRIB|IN_DELETE_SELF) < 0 && errno != ENOENT) {
|
||||
+ log_error("Failed to add watch on /etc/host.conf: %m");
|
||||
+ r = -errno;
|
||||
+ goto fail;
|
||||
+ }
|
||||
+
|
||||
+ r = sd_event_add_io(m->event, &m->resolv_conf_event_source,
|
||||
+ m->resolv_conf_inotify_fd, EPOLLIN,
|
||||
+ manager_dispatch_resolv_conf_fd, m);
|
||||
+ if (r < 0) {
|
||||
+ log_error("Failed to add event source for resolver: %s", strerror(-r));
|
||||
+ goto fail;
|
||||
+ }
|
||||
+
|
||||
+ r = sd_event_source_set_priority(m->resolv_conf_event_source, -10);
|
||||
+ if (r < 0) {
|
||||
+ log_error("Failed to add event source for resolver: %s", strerror(-r));
|
||||
+ m->resolv_conf_event_source = sd_event_source_unref(m->resolv_conf_event_source);
|
||||
+ goto fail;
|
||||
+ }
|
||||
+
|
||||
+ return 0;
|
||||
+fail:
|
||||
+ m->resolv_conf_inotify_fd = safe_close(m->resolv_conf_inotify_fd);
|
||||
+ return 0; /* Ignore error here */
|
||||
+}
|
||||
+
|
||||
+static void manager_shutdown_resolv_conf_change(Manager *m) {
|
||||
+ assert(m);
|
||||
+
|
||||
+ m->resolv_conf_event_source = sd_event_source_unref(m->resolv_conf_event_source);
|
||||
+ m->resolv_conf_inotify_fd = safe_close(m->resolv_conf_inotify_fd);
|
||||
+}
|
||||
+
|
||||
static int manager_watch_idle_pipe(Manager *m) {
|
||||
int r;
|
||||
|
||||
@@ -576,6 +662,7 @@ int manager_new(ManagerRunningAs running
|
||||
|
||||
m->current_job_id = 1; /* start as id #1, so that we can leave #0 around as "null-like" value */
|
||||
|
||||
+ m->resolv_conf_inotify_fd = -1;
|
||||
m->ask_password_inotify_fd = -1;
|
||||
m->have_ask_password = -EINVAL; /* we don't know */
|
||||
m->first_boot = -1;
|
||||
@@ -637,6 +724,10 @@ int manager_new(ManagerRunningAs running
|
||||
if (r < 0)
|
||||
goto fail;
|
||||
|
||||
+ r = manager_setup_resolv_conf_change(m);
|
||||
+ if (r < 0)
|
||||
+ goto fail;
|
||||
+
|
||||
m->udev = udev_new();
|
||||
if (!m->udev) {
|
||||
r = -ENOMEM;
|
||||
@@ -914,6 +1005,8 @@ Manager* manager_free(Manager *m) {
|
||||
if (!m)
|
||||
return NULL;
|
||||
|
||||
+ manager_shutdown_resolv_conf_change(m);
|
||||
+
|
||||
manager_clear_jobs_and_units(m);
|
||||
|
||||
for (c = 0; c < _UNIT_TYPE_MAX; c++)
|
||||
Index: systemd-227/src/core/manager.h
|
||||
===================================================================
|
||||
--- systemd-227.orig/src/core/manager.h
|
||||
+++ systemd-227/src/core/manager.h
|
||||
@@ -180,6 +180,11 @@ struct Manager {
|
||||
struct libmnt_monitor *mount_monitor;
|
||||
sd_event_source *mount_event_source;
|
||||
|
||||
+ /* Watch out any change of /etc/resolv.conf */
|
||||
+ int resolv_conf_inotify_fd;
|
||||
+ sd_event_source *resolv_conf_event_source;
|
||||
+ bool resolv_conf_noent;
|
||||
+
|
||||
/* Data specific to the swap filesystem */
|
||||
FILE *proc_swaps;
|
||||
sd_event_source *swap_event_source;
|
Loading…
Reference in New Issue
Block a user