summaryrefslogtreecommitdiff
path: root/px/services/log.scm
diff options
context:
space:
mode:
Diffstat (limited to 'px/services/log.scm')
-rw-r--r--px/services/log.scm152
1 files changed, 152 insertions, 0 deletions
diff --git a/px/services/log.scm b/px/services/log.scm
new file mode 100644
index 0000000..f8f2bc2
--- /dev/null
+++ b/px/services/log.scm
@@ -0,0 +1,152 @@
+(define-module (px services log)
+ #:use-module (gnu)
+ #:use-module (gnu packages admin)
+ #:use-module (gnu packages base)
+ #:use-module (gnu packages bash)
+ #:use-module (gnu packages linux)
+ #:use-module (gnu packages logging)
+ #:use-module (gnu packages screen)
+ #:use-module (gnu services shepherd)
+ #:use-module (px packages log)
+ #:use-module (gnu system)
+ #:use-module (gnu system shadow)
+ #:use-module (guix gexp)
+ #:use-module (guix records)
+ #:use-module (ice-9 match)
+ #:use-module (ice-9 pretty-print)
+
+ #:export (remote-syslog-service-configuration
+ remote-syslog-service-type
+
+ %rsyslog-default-config
+ %rsyslog-default-config-file
+ rsyslog-configuration
+ rsyslog-service-type))
+
+;;
+;; remote-syslog SERVICE
+;;
+
+(define (script-builder destionation-host destionation-port hostname log-files package)
+ "Return the chorny configuration file corresponding to CONFIG."
+ (computed-file "remote-syslog-script.sh"
+ (with-imported-modules
+ '((guix build utils))
+ #~(begin
+ (use-modules (guix build utils))
+ (call-with-output-file #$output
+ (lambda (port)
+ (format port "#!~a~% exec ~a \"$@\"~%"
+ #+(file-append bash "/bin/sh")
+ (string-append #$package "/bin/remote_syslog2"
+ " --no-detach"
+ " -d " #$destionation-host
+ " -p " #$destionation-port
+ " --pid-file=/var/run/remote_syslog.pid"
+ " --hostname " #$hostname
+ " " #$log-files))
+ (chmod port #o555)))))))
+
+(define-record-type* <remote-syslog-service-configuration>
+ remote-syslog-service-configuration make-remote-syslog-service-configuration
+ remote-syslog-service-configuration?
+ (destionation-host remote-syslog-service-configuration-destionation-host
+ (default "logs.papertrailapp.com"))
+ (destionation-port remote-syslog-service-configuration-destionation-port
+ (default "46169"))
+ (hostname remote-syslog-service-configuration-host
+ (default "$(hostname)"))
+ (log-files remote-syslog-service-configuration-log-files
+ (default "/var/log/messages"))
+ (package remote-syslog-service-configuration-package
+ (default remote_syslog2)))
+
+(define remote-syslog-shepherd-service
+ (match-lambda
+ (($ <remote-syslog-service-configuration> destionation-host destionation-port hostname log-files package)
+ (list (shepherd-service
+ (provision '(remote-syslog))
+ (documentation "Run remote-syslog as a daemon")
+ (requirement '(networking syslogd))
+ (start #~(make-forkexec-constructor
+ (list #$(script-builder destionation-host destionation-port hostname log-files package))))
+ (stop #~(make-kill-destructor)))))))
+
+(define remote-syslog-service-type
+ (service-type
+ (name "remote-syslog")
+ (description "Remote syslog service")
+ (extensions (list (service-extension shepherd-root-service-type
+ remote-syslog-shepherd-service)))
+ (default-value (remote-syslog-service-configuration))))
+
+
+;;
+;; rsyslog-service-type
+;;
+
+(define %rsyslog-default-config
+ "## full conf created by rsyslog version 8.2204.1 at 2023-01-02 16:44:08 ##
+
+$ModLoad imuxsock # provides support for local system logging (e.g. via logger command)
+$ModLoad imklog # provides kernel logging support (previously done by rklogd)
+$ModLoad immark # provides --MARK-- message capability
+
+$ModLoad imudp
+$UDPServerRun 514
+
+$ModLoad imtcp
+$InputTCPServerRun 514
+
+$WorkDirectory /var/lib/rsyslog
+$ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat
+
+*.* /var/log/rsyslog
+")
+
+
+(define %rsyslog-default-config-file
+ (plain-file "rsyslog.conf" %rsyslog-default-config))
+
+
+(define-record-type* <rsyslog-configuration>
+ rsyslog-configuration make-rsyslog-cofiguration
+ rsyslog-configuration?
+ (package rsyslog-configuration-package
+ (default rsyslog))
+ (config-file rsyslog-configuration-config-file
+ (default %rsyslog-default-config-file)))
+
+
+(define (rsyslog-activation config)
+ (with-imported-modules '((guix build utils))
+ #~(begin
+ (use-modules ((guix build utils)))
+ (let ((lib-dir "/var/lib/rsyslog"))
+ (mkdir-p lib-dir)))))
+
+
+(define rsyslog-shepherd-service
+ (match-lambda
+ (($ <rsyslog-configuration> package config-file)
+ (list
+ (shepherd-service
+ (provision '(rsyslogd))
+ (documentation "Rsyslog daemon service")
+ (requirement '(syslogd))
+ (start #~(make-forkexec-constructor
+ (list #$(file-append package "/sbin/rsyslogd")
+ "-n" "-f" #$config-file)))
+ (stop #~(make-kill-destructor)))))))
+
+
+(define rsyslog-service-type
+ (service-type
+ (name 'rsyslog)
+ (description "Run rsyslog daemon on machine")
+ (extensions
+ (list (service-extension shepherd-root-service-type
+ rsyslog-shepherd-service)
+ (service-extension activation-service-type
+ rsyslog-activation)))
+ (default-value (rsyslog-configuration))))