guix-commits
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

01/02: hydra: services: Add 'goggles-bot' service.


From: Ludovic Courtès
Subject: 01/02: hydra: services: Add 'goggles-bot' service.
Date: Sun, 6 Nov 2022 12:05:35 -0500 (EST)

civodul pushed a commit to branch master
in repository maintenance.

commit 8c365f69040d7408b5fb345f9bc3ed6dfe4f54de
Author: Ludovic Courtès <ludo@gnu.org>
AuthorDate: Sun Nov 6 18:02:13 2022 +0100

    hydra: services: Add 'goggles-bot' service.
    
    * hydra/modules/sysadmin/services.scm (<goggles-bot-configuration>): New
    record type.
    (goggles-bot-program): New variable.
    (goggles-bot-shepherd-services, goggles-bot-activation): New procedures.
    (%goggles-bot-accounts, %goggles-bot-log-rotations)
    (goggles-bot-service-type): New variables.
    * hydra/bayfront.scm (services): Use it.
---
 hydra/bayfront.scm                  |   6 +++
 hydra/modules/sysadmin/services.scm | 102 +++++++++++++++++++++++++++++++++++-
 2 files changed, 107 insertions(+), 1 deletion(-)

diff --git a/hydra/bayfront.scm b/hydra/bayfront.scm
index b762f74..9ca9d95 100644
--- a/hydra/bayfront.scm
+++ b/hydra/bayfront.scm
@@ -1053,7 +1053,13 @@ add_header Content-Type text/plain;")))
                       (channels #$%hpcguix-web-channels)))))))
 
     (service certbot-service-type %certbot-configuration)
+
     (service goggles-service-type)
+    (service goggles-bot-service-type
+             (goggles-bot-configuration
+              (channels '("#guix" "#guix-hpc" "#guile"
+                          "#guile-steel" "#hurd"
+                          "#bootstrappable"))))
 
     (service mcron-service-type
              (mcron-configuration
diff --git a/hydra/modules/sysadmin/services.scm 
b/hydra/modules/sysadmin/services.scm
index d9b3ce8..a00ba0c 100644
--- a/hydra/modules/sysadmin/services.scm
+++ b/hydra/modules/sysadmin/services.scm
@@ -1,6 +1,6 @@
 ;;; GNU Guix system administration tools.
 ;;;
-;;; Copyright © 2016, 2017, 2018, 2019, 2020, 2021, 2022 Ludovic Courtès 
<ludo@gnu.org>
+;;; Copyright © 2016-2022 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2017, 2018, 2020 Ricardo Wurmus <rekado@elephly.net>
 ;;;
 ;;; This program is free software: you can redistribute it and/or modify
@@ -23,6 +23,7 @@
   #:use-module (guix records)
   #:use-module ((guix self) #:select (make-config.scm))
   #:use-module ((guix store) #:select (%store-prefix))
+  #:use-module (guix least-authority)
   #:use-module (gnu services)
   #:use-module (gnu services admin)
   #:use-module (gnu services base)
@@ -32,6 +33,8 @@
   #:use-module (gnu services ssh)
   #:use-module (gnu services vpn)
   #:use-module (gnu services web)
+  #:use-module ((gnu system file-systems) #:select (file-system-mapping))
+  #:use-module ((gnu build linux-container) #:select (%namespaces))
   #:use-module (gnu system shadow)
   #:use-module (guix packages)
   #:use-module (gnu packages)
@@ -57,6 +60,8 @@
             disarchive-configuration
             disarchive-service-type
             goggles-service-type
+            goggles-bot-service-type
+            goggles-bot-configuration
             crash-dump-service-type))
 
 (define not-config?
@@ -749,6 +754,101 @@ to a selected directory.")
    (description "Run Goggles, the IRC log web interface.")))
 
 
+;;;
+;;; Logging IRC channels with goggles-bot.
+;;;
+
+(define-record-type* <goggles-bot-configuration>
+  goggles-bot-configuration make-goggles-bot-configuration
+  goggles-bot-configuration?
+  (channels       goggles-bot-configuration-channels
+                  (default '("#guix")))
+  (log-directory  goggles-bot-configuration-log-directory
+                  (default %goggles-irc-log-directory)))
+
+(define goggles-bot-program
+  (with-extensions (list guile-irc guile-gnutls)
+    (program-file "goggles-bot"
+                  #~(load #$(local-file "../../goggles-bot.scm")))))
+
+(define (goggles-bot-shepherd-services config)
+  (define channels
+    (goggles-bot-configuration-channels config))
+
+  (define log-directory
+    (goggles-bot-configuration-log-directory config))
+
+  (define program/wrapped
+    (least-authority-wrapper
+     goggles-bot-program
+     #:name "goggles-bot"
+     #:mappings (list (file-system-mapping
+                       (source log-directory)
+                       (target log-directory)
+                       (writable? #t)))
+     #:namespaces (delq 'net %namespaces)))
+
+  (list (shepherd-service
+         (provision '(goggles-bot))
+         (requirement '(user-processes networking))
+         (start #~(make-forkexec-constructor
+                   (list #$program/wrapped
+                         #$(string-append "--directory=" log-directory)
+                         #$@(map (lambda (channel)
+                                   (string-append "--channel=" channel))
+                                 channels))
+                   #:user "goggles-bot" #:group "goggles-bot"
+                   #:log-file "/var/log/goggles-bot.log"
+                   #:environment-variables
+                   (list (string-append "GUIX_LOCPATH=" #$glibc-utf8-locales
+                                        "/lib/locale")
+                         "LC_ALL=en_US.utf8")))
+         (stop #~(make-kill-destructor))
+         (documentation "Run Goggles-Bot, the IRC logging robot."))))
+
+(define %goggles-bot-accounts
+  (list (user-account
+         (name "goggles-bot")
+         (group "goggles-bot")
+         (home-directory "/var/empty")
+         (create-home-directory? #f)
+         (shell (file-append shadow "/sbin/nologin"))
+         (comment "The Goggles IRC logging robot.")
+         (system? #t))
+        (user-group
+         (name "goggles-bot")
+         (system? #t))))
+
+(define %goggles-bot-log-rotations
+  (list (log-rotation
+         (files (list "/var/log/goggles-bot.log")))))
+
+(define (goggles-bot-activation config)
+  (let ((log-directory (goggles-bot-configuration-log-directory config)))
+    (with-imported-modules '((guix build utils))
+      #~(begin
+          (use-modules (guix build utils))
+          (let ((user (getpwnam "goggles-bot")))
+            (mkdir-p #$log-directory)
+            (chown #$log-directory
+                   (passwd:uid user) (passwd:gid user))
+            (chmod #$log-directory #o755))))))
+
+(define goggles-bot-service-type
+  (service-type
+   (name 'goggles-bot)
+   (extensions (list (service-extension account-service-type
+                                        (const %goggles-bot-accounts))
+                     (service-extension activation-service-type
+                                        goggles-bot-activation)
+                     (service-extension rottlog-service-type
+                                        (const %goggles-bot-log-rotations))
+                     (service-extension shepherd-root-service-type
+                                        goggles-bot-shepherd-services)))
+   (default-value (goggles-bot-configuration))
+   (description "Run Goggles-Bot, the IRC logging robot.")))
+
+
 ;;;
 ;;; Crash-dump.
 ;;;



reply via email to

[Prev in Thread] Current Thread [Next in Thread]