Marcus Meissner
337f029af9
- spec: remove --disable-multi-seat-x, gone.(fixed in xorg) - spec: Do not enable systemd-readahead-collect.service and systemd-readahead-replay.service as these do not exist anymore. - spec: drop timedate-add-support-for-openSUSE-version-of-etc-sysconfig.patch Yast was fixed to write all timezone changes exactly how timedated expects things to be done. - spec: remove handle-etc-HOSTNAME.patch, since late 2014 the netcfg package handles the migration from /etc/HOSTNAME to /etc/hostname and owns both files. -spec: remove boot.udev and systemd-journald.init as they currently serve no purpose. - suse-sysv-bootd-support.diff: Remove HAVE_SYSVINIT conditions, we are in sysvcompat-only codepath, also remove the code targetting other distributions, never compiled as the TARGET_$DISTRO macros are never defined. - systemd-powerd-initctl-support.patch guard with HAVE_SYSV_COMPAT - set-and-use-default-logconsole.patch: fix HAVE_SYSV_COMPAT guards - insserv-generator.patch: Only build when sysvcompat is enabled - vhangup-on-all-consoles.patch add a comment indicating this is a workaround for a kernel bug. - spec: Add option to allow disabling sysvinit compat at build time. - spec: Add option to enable resolved at build time. - spec: Remove all %ifs for !factory products, current systemd releases can neither be built nor installed in older products without upgrading several components of the base system. (removed: 1008-add-msft-compability-rules.patch was only for =< 13.1) - spec: remove all dummy "aliases" to /etc/init.d, that made sense only when those init scripts still existed. (dummy localfs.service source: gone) - systemd-sleep-grub: moved to the grub2 package where it belongs as a suspend/resume hook (SR#286533) (drops prepare-suspend-to-disk.patch) OBS-URL: https://build.opensuse.org/package/show/Base:System/systemd?expand=0&rev=856
163 lines
4.9 KiB
Diff
163 lines
4.9 KiB
Diff
Use and set default logging console for both journald and kernel messages
|
|
|
|
---
|
|
src/journal/journald-console.c | 96 +++++++++++++++++++++++++++++++++++++++++
|
|
src/journal/journald-console.h | 4 +
|
|
src/journal/journald-server.c | 5 ++
|
|
3 files changed, 105 insertions(+)
|
|
|
|
--- systemd-219.orig/src/journal/journald-console.c
|
|
+++ systemd-219/src/journal/journald-console.c
|
|
@@ -23,6 +23,14 @@
|
|
#include <fcntl.h>
|
|
#include <unistd.h>
|
|
#include <sys/socket.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 "util.h"
|
|
+#endif
|
|
|
|
#include "fileio.h"
|
|
#include "journald-server.h"
|
|
@@ -43,6 +51,76 @@ static bool prefix_timestamp(void) {
|
|
return cached_printk_time;
|
|
}
|
|
|
|
+void defaul_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,
|
|
@@ -64,6 +142,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);
|
|
@@ -100,7 +184,23 @@ void server_forward_console(
|
|
fd = open_terminal(tty, O_WRONLY|O_NOCTTY|O_CLOEXEC);
|
|
if (fd < 0) {
|
|
log_debug_errno(errno, "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)
|
|
--- systemd-219.orig/src/journal/journald-console.h
|
|
+++ systemd-219/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 defaul_tty_path(Server *s);
|
|
--- systemd-219.orig/src/journal/journald-server.c
|
|
+++ systemd-219/src/journal/journald-server.c
|
|
@@ -1520,6 +1520,11 @@ int server_init(Server *s) {
|
|
|
|
server_parse_config_file(s);
|
|
server_parse_proc_cmdline(s);
|
|
+ defaul_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",
|
|
s->rate_limit_interval, s->rate_limit_burst);
|