[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.
;;;