From 730ed6ec8b69a0f908a8aadbbe0555dd45de227c Mon Sep 17 00:00:00 2001 From: Christopher Baines Date: Sat, 24 Jun 2017 14:19:46 +0100 Subject: gnu: services: admin: Add tailon. * gnu/services/admin.scm (, ): New record types. (tailon-configuration-files-string, tailon-shepherd-service): New procedures. (%tailon-accounts, tailon-service-type: New variables. * doc/guix.texi (Monitoring Services: Document the Tailon service. * gnu/local.mk (GNU_SYSTEM_MODULES): Add gnu/tests/admin.scm. * gnu/tests/admin.scm: New file. --- gnu/services/admin.scm | 151 ++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 150 insertions(+), 1 deletion(-) (limited to 'gnu/services/admin.scm') diff --git a/gnu/services/admin.scm b/gnu/services/admin.scm index b9e3fa70a4..1044833fef 100644 --- a/gnu/services/admin.scm +++ b/gnu/services/admin.scm @@ -20,14 +20,19 @@ (define-module (gnu services admin) #:use-module (gnu packages admin) #:use-module (gnu packages base) + #:use-module (gnu packages logging) #:use-module (gnu services) #:use-module (gnu services mcron) #:use-module (gnu services shepherd) + #:use-module (gnu services web) + #:use-module (gnu system shadow) #:use-module (guix gexp) + #:use-module (guix store) #:use-module (guix packages) #:use-module (guix records) #:use-module (srfi srfi-1) #:use-module (ice-9 vlist) + #:use-module (ice-9 match) #:export (%default-rotations %rotated-files @@ -41,7 +46,27 @@ rottlog-configuration rottlog-configuration? rottlog-service - rottlog-service-type)) + rottlog-service-type + + + tailon-configuration-file + tailon-configuration-file? + tailon-configuration-file-files + tailon-configuration-file-bind + tailon-configuration-file-relative-root + tailon-configuration-file-allow-transfers? + tailon-configuration-file-follow-names? + tailon-configuration-file-tail-lines + tailon-configuration-file-allowed-commands + tailon-configuration-file-debug? + + + tailon-configuration + tailon-configuration? + tailon-configuration-config-file + tailon-configuration-package + + tailon-service-type)) ;;; Commentary: ;;; @@ -172,4 +197,128 @@ for ROTATION." rotations))))) (default-value (rottlog-configuration)))) + +;;; +;;; Tailon +;;; + +(define-record-type* + tailon-configuration-file make-tailon-configuration-file + tailon-configuration-file? + (files tailon-configuration-file-files + (default '("/var/log"))) + (bind tailon-configuration-file-bind + (default "localhost:8080")) + (relative-root tailon-configuration-file-relative-root + (default #f)) + (allow-transfers? tailon-configuration-file-allow-transfers? + (default #t)) + (follow-names? tailon-configuration-file-follow-names? + (default #t)) + (tail-lines tailon-configuration-file-tail-lines + (default 200)) + (allowed-commands tailon-configuration-file-allowed-commands + (default '("tail" "grep" "awk"))) + (debug? tailon-configuration-file-debug? + (default #f))) + +(define (tailon-configuration-files-string files) + (string-append + "\n" + (string-join + (map + (lambda (x) + (string-append + " - " + (cond + ((string? x) + (simple-format #f "'~A'" x)) + ((list? x) + (string-join + (cons (simple-format #f "'~A':" (car x)) + (map + (lambda (x) (simple-format #f " - '~A'" x)) + (cdr x))) + "\n")) + (else (error x))))) + files) + "\n"))) + +(define-gexp-compiler (tailon-configuration-file-compiler + (file ) system target) + (match file + (($ files bind relative-root + allow-transfers? follow-names? + tail-lines allowed-commands debug?) + (text-file + "tailon-config.yaml" + (string-concatenate + (filter-map + (match-lambda + ((key . #f) #f) + ((key . value) (string-append key ": " value "\n"))) + + `(("files" . ,(tailon-configuration-files-string files)) + ("bind" . ,bind) + ("relative-root" . ,relative-root) + ("allow-transfers" . ,(if allow-transfers? "true" "false")) + ("follow-names" . ,(if follow-names? "true" "false")) + ("tail-lines" . ,(number->string tail-lines)) + ("commands" . ,(string-append "[" + (string-join allowed-commands ", ") + "]")) + ,@(if debug? '(("debug" . "true")) '())))))))) + +(define-record-type* + tailon-configuration make-tailon-configuration + tailon-configuration? + (config-file tailon-configuration-config-file + (default (tailon-configuration-file))) + (package tailon-configuration-package + (default tailon))) + +(define tailon-shepherd-service + (match-lambda + (($ config-file package) + (list (shepherd-service + (provision '(tailon)) + (documentation "Run the tailon daemon.") + (start #~(make-forkexec-constructor + `(,(string-append #$package "/bin/tailon") + "-c" ,#$config-file) + #:user "tailon" + #:group "tailon")) + (stop #~(make-kill-destructor))))))) + +(define %tailon-accounts + (list (user-group (name "tailon") (system? #t)) + (user-account + (name "tailon") + (group "tailon") + (system? #t) + (comment "tailon") + (home-directory "/var/empty") + (shell (file-append shadow "/sbin/nologin"))))) + +(define tailon-service-type + (service-type + (name 'tailon) + (extensions + (list (service-extension shepherd-root-service-type + tailon-shepherd-service) + (service-extension account-service-type + (const %tailon-accounts)))) + (compose concatenate) + (extend (lambda (parameter files) + (tailon-configuration + (inherit parameter) + (config-file + (let ((old-config-file + (tailon-configuration-config-file parameter))) + (tailon-configuration-file + (inherit old-config-file) + (files (append (tailon-configuration-file-files old-config-file) + files)))))))) + (default-value (tailon-configuration)))) + ;;; admin.scm ends here -- cgit v1.2.3 From f2d8e7f720c92dfb0f49d61f7b66d45e3e63e4cd Mon Sep 17 00:00:00 2001 From: Christopher Baines Date: Wed, 26 Jul 2017 12:22:38 +0100 Subject: services: Add missing wrap-lines option to tailon. * gnu/services/admin.scm (): Add wrap-lines. (tailon-configuration-wrap-lines): New procedure. (tailon-configuration-file-compiler): Add support for wrap-lines. * doc/guix.texi (Monitoring Services): Document the wrap-lines Tailon configuration option. --- doc/guix.texi | 5 +++++ gnu/services/admin.scm | 12 +++++++++--- 2 files changed, 14 insertions(+), 3 deletions(-) (limited to 'gnu/services/admin.scm') diff --git a/doc/guix.texi b/doc/guix.texi index 88bf0bb621..e4903be831 100644 --- a/doc/guix.texi +++ b/doc/guix.texi @@ -13769,6 +13769,11 @@ Commands to allow running. By default, @code{sed} is disabled. @item @code{debug?} (default: @code{#f}) Set @code{debug?} to @code{#t} to show debug messages. +@item @code{wrap-lines} (default: @code{#t}) +Initial line wrapping state in the web interface. Set to @code{#t} to +initially wrap lines (the default), or to @code{#f} to initially not +wrap lines. + @end table @end deftp diff --git a/gnu/services/admin.scm b/gnu/services/admin.scm index 1044833fef..19169427c0 100644 --- a/gnu/services/admin.scm +++ b/gnu/services/admin.scm @@ -59,6 +59,8 @@ tailon-configuration-file-tail-lines tailon-configuration-file-allowed-commands tailon-configuration-file-debug? + tailon-configuration-file-wrap-lines + tailon-configuration @@ -220,7 +222,9 @@ for ROTATION." (allowed-commands tailon-configuration-file-allowed-commands (default '("tail" "grep" "awk"))) (debug? tailon-configuration-file-debug? - (default #f))) + (default #f)) + (wrap-lines tailon-configuration-file-wrap-lines + (default #t))) (define (tailon-configuration-files-string files) (string-append @@ -249,7 +253,8 @@ for ROTATION." (match file (($ files bind relative-root allow-transfers? follow-names? - tail-lines allowed-commands debug?) + tail-lines allowed-commands debug? + wrap-lines) (text-file "tailon-config.yaml" (string-concatenate @@ -267,7 +272,8 @@ for ROTATION." ("commands" . ,(string-append "[" (string-join allowed-commands ", ") "]")) - ,@(if debug? '(("debug" . "true")) '())))))))) + ,@(if debug? '(("debug" . "true")) '()) + ("wrap-lines" . ,(if wrap-lines "true" "false"))))))))) (define-record-type* tailon-configuration make-tailon-configuration -- cgit v1.2.3 From 91fdc8a574cccecd55d042bc1f76ab7f7d3adced Mon Sep 17 00:00:00 2001 From: Christopher Baines Date: Wed, 26 Jul 2017 12:18:06 +0100 Subject: services: Update the Tailon service for Tailon 1.3.0. Tailon 1.3.0 (upgraded from 1.1.1) adds support for HTTP authentication. * gnu/services/admin.scm (): Add http-auth and users configuration values. (tailon-configuration-file-http-auth, tailon-configuration-file-users): New procedures. (tailon-configuration-file-compiler): Add support for the http-auth and users configuration options. * doc/guix.texi (Monitoring Services): Document authentication for Tailon. --- doc/guix.texi | 18 ++++++++++++++++++ gnu/services/admin.scm | 24 +++++++++++++++++++----- 2 files changed, 37 insertions(+), 5 deletions(-) (limited to 'gnu/services/admin.scm') diff --git a/doc/guix.texi b/doc/guix.texi index e4903be831..c7787e4a8e 100644 --- a/doc/guix.texi +++ b/doc/guix.texi @@ -13774,6 +13774,24 @@ Initial line wrapping state in the web interface. Set to @code{#t} to initially wrap lines (the default), or to @code{#f} to initially not wrap lines. +@item @code{http-auth} (default: @code{#f}) +HTTP authentication type to use. Set to @code{#f} to disable +authentication (the default). Supported values are @code{"digest"} or +@code{"basic"}. + +@item @code{users} (default: @code{#f}) +If HTTP authentication is enabled (see @code{http-auth}), access will be +restricted to the credentials provided here. To configure users, use a +list of pairs, where the first element of the pair is the username, and +the 2nd element of the pair is the password. + +@example +(tailon-configuration-file + (http-auth "basic") + (users '(("user1" . "password1") + ("user2" . "password2")))) +@end example + @end table @end deftp diff --git a/gnu/services/admin.scm b/gnu/services/admin.scm index 19169427c0..e24aebae2c 100644 --- a/gnu/services/admin.scm +++ b/gnu/services/admin.scm @@ -59,8 +59,8 @@ tailon-configuration-file-tail-lines tailon-configuration-file-allowed-commands tailon-configuration-file-debug? - tailon-configuration-file-wrap-lines - + tailon-configuration-file-http-auth + tailon-configuration-file-users tailon-configuration @@ -224,7 +224,11 @@ for ROTATION." (debug? tailon-configuration-file-debug? (default #f)) (wrap-lines tailon-configuration-file-wrap-lines - (default #t))) + (default #t)) + (http-auth tailon-configuration-file-http-auth + (default #f)) + (users tailon-configuration-file-users + (default #f))) (define (tailon-configuration-files-string files) (string-append @@ -254,7 +258,7 @@ for ROTATION." (($ files bind relative-root allow-transfers? follow-names? tail-lines allowed-commands debug? - wrap-lines) + wrap-lines http-auth users) (text-file "tailon-config.yaml" (string-concatenate @@ -273,7 +277,17 @@ for ROTATION." (string-join allowed-commands ", ") "]")) ,@(if debug? '(("debug" . "true")) '()) - ("wrap-lines" . ,(if wrap-lines "true" "false"))))))))) + ("wrap-lines" . ,(if wrap-lines "true" "false")) + ("http-auth" . ,http-auth) + ("users" . ,(if users + (string-concatenate + (cons "\n" + (map (match-lambda + ((user . pass) + (string-append + " " user ":" pass))) + users))) + #f))))))))) (define-record-type* tailon-configuration make-tailon-configuration -- cgit v1.2.3 From 101205662588f033c944034f91e7d3cda06d6e56 Mon Sep 17 00:00:00 2001 From: Christopher Baines Date: Wed, 26 Jul 2017 12:24:51 +0100 Subject: services: admin: Simplify the handling of the Tailon debug? option. * gnu/services/admin.scm (tailon-configuration-file-compiler): Simplify the handling of debug?. --- gnu/services/admin.scm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'gnu/services/admin.scm') diff --git a/gnu/services/admin.scm b/gnu/services/admin.scm index e24aebae2c..14452a86c7 100644 --- a/gnu/services/admin.scm +++ b/gnu/services/admin.scm @@ -276,7 +276,7 @@ for ROTATION." ("commands" . ,(string-append "[" (string-join allowed-commands ", ") "]")) - ,@(if debug? '(("debug" . "true")) '()) + ("debug" . ,(if debug? "true" #f)) ("wrap-lines" . ,(if wrap-lines "true" "false")) ("http-auth" . ,http-auth) ("users" . ,(if users -- cgit v1.2.3