[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[bug#30498] [WIP v2 shepherd] shepherd: If /dev/kmsg is writable, use it
From: |
Danny Milosavljevic |
Subject: |
[bug#30498] [WIP v2 shepherd] shepherd: If /dev/kmsg is writable, use it for logging. |
Date: |
Sat, 3 Mar 2018 23:37:15 +0100 |
I think that just something like this is missing:
diff --git a/modules/shepherd/service.scm b/modules/shepherd/service.scm
index 83600e4..481203d 100644
--- a/modules/shepherd/service.scm
+++ b/modules/shepherd/service.scm
@@ -728,20 +728,37 @@ false."
;; it for something unrelated, which can confuse some packages.
(dup2 (open-fdes "/dev/null" O_RDONLY) 0)
- (when log-file
- (catch #t
- (lambda ()
- ;; Redirect stout and stderr to use LOG-FILE.
- (catch-system-error (close-fdes 1))
- (catch-system-error (close-fdes 2))
- (dup2 (open-fdes log-file (logior O_CREAT O_WRONLY)) 1)
- (dup2 (open-fdes log-file (logior O_CREAT O_WRONLY)) 2))
- (lambda (key . args)
- (format (current-error-port)
- "failed to open log-file ~s:~%" log-file)
- (print-exception (current-error-port) #f key args)
- (primitive-exit 1))))
-
+ (if log-file
+ (catch #t
+ (lambda ()
+ ;; Redirect stout and stderr to use LOG-FILE.
+ (catch-system-error (close-fdes 1))
+ (catch-system-error (close-fdes 2))
+ (dup2 (open-fdes log-file (logior O_CREAT O_WRONLY)) 1)
+ (dup2 (open-fdes log-file (logior O_CREAT O_WRONLY)) 2))
+ (lambda (key . args)
+ (format (current-error-port)
+ "failed to open log-file ~s:~%" log-file)
+ (print-exception (current-error-port) #f key args)
+ (primitive-exit 1)))
+ (catch #t
+ (lambda ()
+ ;; Make sure the child has stdout/stderr that can be used.
+ ;; We sometimes set current-error-port to a softport.
+ ;; libguile would then autoconnect /dev/null -
+ ;; which we don't want.
+ ;; Also, cryptsetup interactively asks for a password,
+ ;; so we don't want /dev/kmsg either.
+ ;; In a user shepherd all this is not necessary -
+ ;; but then, port->fdes will not fail.
+ (when (not (false-if-exception (port->fdes
(current-output-port))))
+ (dup2 (open-fdes "/dev/console" (logior O_WRONLY)) 1))
+ (when (not (false-if-exception (port->fdes
(current-error-port))))
+ (dup2 (open-fdes "/dev/console" (logior O_WRONLY)) 2)))
+ (lambda (key . args)
+ (format (current-error-port) "failed to open stdout/stderr\n")
+ (print-exception (current-error-port) #f key args)
+ (primitive-exit 1))))
(let loop ((i 3))
(when (< i max-fd)
;; First try to close any ports associated with file descriptor I.
Patch starting from master attached for convenience.
shepherd-klog.patch
Description: Text Data
pgpd7JjQWqRqr.pgp
Description: OpenPGP digital signature
- [bug#30498] [WIP v2 shepherd] shepherd: If /dev/kmsg is writable, use it for logging., Ludovic Courtès, 2018/03/03
- [bug#30498] [WIP v2 shepherd] shepherd: If /dev/kmsg is writable, use it for logging.,
Danny Milosavljevic <=
- [bug#30498] [WIP v2 shepherd] shepherd: If /dev/kmsg is writable, use it for logging., Ludovic Courtès, 2018/03/05
- [bug#30498] [PATCH 0/3] Log to syslog whenever possible, Ludovic Courtès, 2018/03/07
- [bug#30498] [PATCH 2/3] Simplify 'make-shepherd-output-port'., Ludovic Courtès, 2018/03/07
- [bug#30498] [PATCH 1/3] Turn 'log-output-port' into a parameter., Ludovic Courtès, 2018/03/07
- [bug#30498] [PATCH 3/3] Use syslog for logging when running as root., Ludovic Courtès, 2018/03/07
- [bug#30498] [PATCH 0/3] Log to syslog whenever possible, Ludovic Courtès, 2018/03/07
- bug#30498: [PATCH 0/3] Log to syslog whenever possible, Ludovic Courtès, 2018/03/15