~ruther/guix-local

6942161b44344a20435824c4816404a03da158f6 — Ludovic Courtès 1 year, 3 months ago 48083c8
services: Switch from mcron + Rottlog to Shepherd’s log rotation.

* gnu/services/admin.scm (unattended-upgrade-log-rotations): Remove.
(unattended-upgrade-service-type): Remove ‘rottlog-service-type’
extension.
* gnu/services/audio.scm (mpd-log-rotation): Remove.
(mpd-service-type): Remove ‘rottlog-service-type’ extension.
(mympd-log-rotation): Remove.
(mympd-service-type): Remove rottlog-service-type’ extension.
* gnu/services/base.scm (%guix-publish-log-rotations): Remove.
(guix-publish-service-type): Remove ‘rottlog-service-type’ extension.
(%base-services): Instantiate ‘log-rotation-service-type’ instead of
‘rottlog-service-type’.
(%default-syslog-files): New variable.
(syslog-service-type): Extend ‘log-rotation-service-type’.
* gnu/services/cuirass.scm (cuirass-log-rotations): Remove.
(cuirass-service-type): Remove ‘rottlog-service-type’ extension.
(cuirass-remote-worker-log-rotations): Remove.
(cuirass-remote-worker-service-type): Remove ‘rottlog-service-type’
extension.
* gnu/services/file-sharing.scm (%transmission-daemon-log-rotations):
Remove.
(transmission-daemon-service-type): Remove ‘rottlog-service-type’
extension.
* gnu/services/linux.scm (%earlyoom-log-rotation): Remove.
(earlyoom-service-type): Remove ‘rottlog-service-type’ extension.
* gnu/services/networking.scm (%ntp-log-rotation): Remove.
(ntp-service-type): Remove ‘rottlog-service-type’ extension.
(openntpd-service-type): Likewise.
(%connman-log-rotation): Remove.
(connman-service-type): Remove ‘rottlog-service-type’ extension.
(%hostapd-log-rotation): Remove.
(hostapd-service-type): Remove ‘rottlog-service-type’ extension.
(%pagekite-log-rotation): Remove.
(pagekite-service-type): Remove ‘rottlog-service-type’ extension.
(%yggdrasil-log-rotation): Remove.
(yggdrasil-service-type): Remove ‘rottlog-service-type’ extension.
(%ipfs-log-rotation): Remove.
(ipfs-service-type): Remove ‘rottlog-service-type’ extension.
(%keepalived-log-rotation): Remove.
(keepalived-service-type): Remove ‘rottlog-service-type’ extension.
* gnu/services/web.scm (%hpcguix-web-log-rotations): Remove.
(hpcguix-web-service-type): Remove ‘rottlog-service-type’ extension.
(%mumi-log-rotations): Remove.
(mumi-service-type): Remove ‘rottlog-service-type’ extension.
* doc/guix.texi (Log Rotation): Adjust text regarding which one is in
‘%base-services’.

Change-Id: I8802d4c2337a1e08e3c084d6217f76527d7ee1fb
M doc/guix.texi => doc/guix.texi +3 -2
@@ 20902,6 20902,9 @@ You can also list files subject to rotation with @command{herd files
log-rotation} and trigger rotation manually with @command{herd trigger
log-rotation}.

This service is part of @code{%base-services}, and thus enabled by
default, with the default settings.

@defvar log-rotation-service-type
This is the type of the log rotation service.  Its associated value must
be a @code{log-rotation-configuration} record, as discussed below.


@@ 20950,8 20953,6 @@ An alternative log rotation service relying on GNU@tie{}Rot[t]log, a log
rotation tool (@pxref{Top,,, rottlog, GNU Rot[t]log Manual}), is also
provided.

This service is part of @code{%base-services}, and thus enabled by
default, with the default settings, for commonly encountered log files.
The example below shows how to extend it with an additional
@dfn{rotation}, should you need to do that (usually, services that
produce log files already take care of that):

M gnu/services/admin.scm => gnu/services/admin.scm +1 -8
@@ 670,19 670,12 @@ which lets you search for packages that provide a given file.")
                         (documentation "Trigger unattended system upgrade.")
                         (procedure #~trigger-timer)))))))

(define (unattended-upgrade-log-rotations config)
  (list (log-rotation
         (files
          (list (unattended-upgrade-configuration-log-file config))))))

(define unattended-upgrade-service-type
  (service-type
   (name 'unattended-upgrade)
   (extensions
    (list (service-extension shepherd-root-service-type
                             unattended-upgrade-shepherd-services)
          (service-extension rottlog-service-type
                             unattended-upgrade-log-rotations)))
                             unattended-upgrade-shepherd-services)))
   (description
    "Periodically upgrade the system from the current configuration.")
   (default-value (unattended-upgrade-configuration))))

M gnu/services/audio.scm => gnu/services/audio.scm +2 -24
@@ 579,17 579,6 @@ appended to the configuration.")
   "mpd.conf"
   (serialize-configuration configuration mpd-configuration-fields)))

(define (mpd-log-rotation config)
  (match-record config <mpd-configuration>
    (log-file)
    (if (string=? "syslog" log-file)
        '()                             ;nothing to do
        (list (log-rotation
               (files (list log-file))
               (post-rotate #~(begin
                                (use-modules (gnu services herd))
                                (with-shepherd-action 'mpd ('reopen) #f))))))))

(define (mpd-shepherd-service config)
  (match-record config <mpd-configuration>
    (user package shepherd-requirement


@@ 675,8 664,7 @@ appended to the configuration.")
   (extensions
    (list (service-extension shepherd-root-service-type
                             (compose list mpd-shepherd-service))
          (service-extension account-service-type mpd-accounts)
          (service-extension rottlog-service-type mpd-log-rotation)))
          (service-extension account-service-type mpd-accounts)))
   (default-value (mpd-configuration))))




@@ 953,14 941,6 @@ prompting a pin from the user.")
                    user)))
      (list user group))))

(define (mympd-log-rotation config)
  (match-record config <mympd-configuration>
    (log-to)
    (if (maybe-value-set? log-to)
        (list (log-rotation
               (files (list log-to))))
        '())))

(define mympd-service-type
  (service-type
   (name 'mympd)


@@ 970,8 950,6 @@ prompting a pin from the user.")
           (service-extension account-service-type
                              mympd-accounts)
           (service-extension special-files-service-type
                              mympd-serialize-configuration)
           (service-extension rottlog-service-type
                              mympd-log-rotation)))
                              mympd-serialize-configuration)))
   (description "Run myMPD, a frontend for MPD. (Music Player Daemon)")
   (default-value (mympd-configuration))))

M gnu/services/base.scm => gnu/services/base.scm +11 -11
@@ 1,5 1,5 @@
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2013-2024 Ludovic Courtès <ludo@gnu.org>
;;; Copyright © 2013-2025 Ludovic Courtès <ludo@gnu.org>
;;; Copyright © 2015, 2016 Alex Kost <alezost@gmail.com>
;;; Copyright © 2015, 2016, 2020 Mark H Weaver <mhw@netris.org>
;;; Copyright © 2015 Sou Bunnbu <iyzsong@gmail.com>


@@ 1685,12 1685,20 @@ reload its settings file.")))
             #:pid-file "/var/run/syslog.pid"))
   (stop #~(make-kill-destructor))))

(define %default-syslog-files
  ;; List of files usually produced by syslogd that should be rotated.
  '("/var/log/messages" "/var/log/secure" "/var/log/debug"
    "/var/log/maillog"))

(define syslog-service-type
  (service-type
   (name 'syslog)
   (default-value (syslog-configuration))
   (extensions (list (service-extension shepherd-root-service-type
                                        (compose list syslog-shepherd-service))
                                        (compose list
                                                 syslog-shepherd-service))
                     (service-extension log-rotation-service-type
                                        (const %default-syslog-files))
                     (service-extension etc-service-type syslog-etc)))
   (description "Run the syslog daemon, @command{syslogd}, which is
responsible for logging system messages.")))


@@ 2354,12 2362,6 @@ raise a deprecation warning if the 'compression-level' field was used."
         (home-directory "/var/empty")
         (shell (file-append shadow "/sbin/nologin")))))

(define %guix-publish-log-rotations
  (list (log-rotation
         (files (list "/var/log/guix-publish.log"))
         (options `("rotate 4"                    ;don't keep too many of them
                    ,@%default-log-rotation-options)))))

(define (guix-publish-activation config)
  (let ((cache (guix-publish-configuration-cache config)))
    (if cache


@@ 2381,8 2383,6 @@ raise a deprecation warning if the 'compression-level' field was used."
                                          guix-publish-shepherd-service)
                       (service-extension account-service-type
                                          (const %guix-publish-accounts))
                       (service-extension rottlog-service-type
                                          (const %guix-publish-log-rotations))
                       (service-extension activation-service-type
                                          guix-publish-activation)))
                (default-value (guix-publish-configuration))


@@ 3748,7 3748,7 @@ login manager daemon.")
        (service guix-service-type)
        (service nscd-service-type)

        (service rottlog-service-type)
        (service log-rotation-service-type)

        ;; Periodically delete old build logs.
        (service log-cleanup-service-type

M gnu/services/cuirass.scm => gnu/services/cuirass.scm +1 -26
@@ 340,20 340,6 @@
            (when #$remote-cache
              (chown #$remote-cache uid gid)))))))

(define (cuirass-log-rotations config)
  "Return the list of log rotations that corresponds to CONFIG."
  (list (log-rotation
         (files (append (list (cuirass-configuration-log-file config)
                              (cuirass-configuration-web-log-file config))
                        (let ((server
                               (cuirass-configuration-remote-server config)))
                          (if server
                              (list (cuirass-remote-server-log-file server))
                              '()))))
         (frequency 'weekly)
         (options `("rotate 40"                   ;worth keeping
                    ,@%default-log-rotation-options)))))

(define cuirass-service-type
  (service-type
   (name 'cuirass)


@@ 361,7 347,6 @@
    (list
     (service-extension profile-service-type      ;for 'info cuirass'
                        (compose list cuirass-configuration-cuirass))
     (service-extension rottlog-service-type cuirass-log-rotations)
     (service-extension activation-service-type cuirass-activation)
     (service-extension shepherd-root-service-type cuirass-shepherd-service)
     (service-extension account-service-type cuirass-account)


@@ 454,14 439,6 @@ CONFIG."
                    #:log-file #$log-file))
           (stop #~(make-kill-destructor))))))

(define (cuirass-remote-worker-log-rotations config)
  "Return the list of log rotations that corresponds to CONFIG."
  (list (log-rotation
         (files (list (cuirass-remote-worker-log-file config)))
         (frequency 'weekly)
         (options `("rotate 4"                    ;don't keep too many of them
                    ,@%default-log-rotation-options)))))

(define cuirass-remote-worker-service-type
  (service-type
   (name 'cuirass-remote-worker)


@@ 469,8 446,6 @@ CONFIG."
    (list (service-extension shepherd-root-service-type
                             cuirass-remote-worker-shepherd-service)
          (service-extension account-service-type
                             (const %cuirass-remote-worker-accounts))
          (service-extension rottlog-service-type
                             cuirass-remote-worker-log-rotations)))
                             (const %cuirass-remote-worker-accounts))))
   (description
    "Run the Cuirass remote build worker service.")))

M gnu/services/file-sharing.scm => gnu/services/file-sharing.scm +0 -6
@@ 701,10 701,6 @@ running."))))))))))))
         (shell (file-append shadow "/sbin/nologin"))
         (system? #t))))

(define %transmission-daemon-log-rotations
  (list (log-rotation
         (files (list %transmission-daemon-log-file)))))

(define (transmission-daemon-computed-settings-file config)
  "Return a @code{computed-file} object that, when unquoted in a G-expression,
produces a Transmission settings file (@file{settings.json}) matching CONFIG."


@@ 785,8 781,6 @@ produces a Transmission settings file (@file{settings.json}) matching CONFIG."
                             transmission-daemon-shepherd-service)
          (service-extension account-service-type
                             (const %transmission-daemon-accounts))
          (service-extension rottlog-service-type
                             (const %transmission-daemon-log-rotations))
          (service-extension activation-service-type
                             transmission-daemon-activation)))
   (default-value (transmission-daemon-configuration))

M gnu/services/linux.scm => gnu/services/linux.scm +1 -7
@@ 181,19 181,13 @@ representation."
             #:log-file "/var/log/earlyoom.log"))
   (stop #~(make-kill-destructor))))

(define %earlyoom-log-rotation
  (list (log-rotation
         (files '("/var/log/earlyoom.log")))))

(define earlyoom-service-type
  (service-type
   (name 'earlyoom)
   (default-value (earlyoom-configuration))
   (extensions
    (list (service-extension shepherd-root-service-type
                             (compose list earlyoom-shepherd-service))
          (service-extension rottlog-service-type
                             (const %earlyoom-log-rotation))))
                             (compose list earlyoom-shepherd-service))))
   (description "Run @command{earlyoom}, a daemon that quickly responds to
@acronym{OOM, out-of-memory} conditions by terminating relevant processes.")))


M gnu/services/networking.scm => gnu/services/networking.scm +8 -53
@@ 496,11 496,6 @@ daemon is responsible for allocating IP addresses to its client.")))
;;; NTP.
;;;


(define %ntp-log-rotation
  (list (log-rotation
         (files '("/var/log/ntpd.log")))))

(define ntp-server-types (make-enumeration
                          '(pool
                            server


@@ 634,9 629,7 @@ restrict source notrap nomodify noquery\n"))
                       (service-extension account-service-type
                                          (const %ntp-accounts))
                       (service-extension activation-service-type
                                          ntp-service-activation)
                       (service-extension rottlog-service-type
                                          (const %ntp-log-rotation))))
                                          ntp-service-activation)))
                (description
                 "Run the @command{ntpd}, the Network Time Protocol (NTP)
daemon of the @uref{http://www.ntp.org, Network Time Foundation}.  The daemon


@@ 745,9 738,7 @@ will keep the system clock synchronized with that of the given servers.")
                       (service-extension profile-service-type
                                          (compose list openntpd-configuration-openntpd))
                       (service-extension activation-service-type
                                          openntpd-service-activation)
                       (service-extension rottlog-service-type
                                          (const %ntp-log-rotation))))
                                          openntpd-service-activation)))
                (default-value (openntpd-configuration))
                (description
                 "Run the @command{ntpd}, the Network Time Protocol (NTP)


@@ 1699,10 1690,6 @@ set @file{/dev/null}.")
                       #:log-file "/var/log/connman.log"))
             (stop #~(make-kill-destructor)))))))

(define %connman-log-rotation
  (list (log-rotation
         (files '("/var/log/connman.log")))))

(define connman-service-type
  (let ((connman-package (compose list connman-configuration-connman)))
    (service-type (name 'connman)


@@ 1717,9 1704,7 @@ set @file{/dev/null}.")
                                            connman-activation)
                         ;; Add connman to the system profile.
                         (service-extension profile-service-type
                                            connman-package)
                         (service-extension rottlog-service-type
                                            (const %connman-log-rotation))))
                                            connman-package)))
                  (default-value (connman-configuration))
                  (description
                   "Run @url{https://01.org/connman,Connman},


@@ 1960,18 1945,12 @@ extra-settings "\n"))))
                   #:log-file "/var/log/hostapd.log"))
         (stop #~(make-kill-destructor)))))

(define %hostapd-log-rotation
  (list (log-rotation
         (files '("/var/log/hostapd.log")))))

(define hostapd-service-type
  (service-type
   (name 'hostapd)
   (extensions
    (list (service-extension shepherd-root-service-type
                             hostapd-shepherd-services)
          (service-extension rottlog-service-type
                             (const %hostapd-log-rotation))))
                             hostapd-shepherd-services)))
   (description
    "Run the @uref{https://w1.fi/hostapd/, hostapd} daemon for Wi-Fi access
points and authentication servers.")))


@@ 2272,10 2251,6 @@ table inet filter {
       ;; SIGTERM doesn't always work for some reason.
       (stop #~(make-kill-destructor SIGINT))))))

(define %pagekite-log-rotation
  (list (log-rotation
         (files '("/var/log/pagekite.log")))))

(define %pagekite-accounts
  (list (user-group (name "pagekite") (system? #t))
        (user-account


@@ 2294,9 2269,7 @@ table inet filter {
    (list (service-extension shepherd-root-service-type
                             (compose list pagekite-shepherd-service))
          (service-extension account-service-type
                             (const %pagekite-accounts))
          (service-extension rottlog-service-type
                             (const %pagekite-log-rotation))))
                             (const %pagekite-accounts))))
   (description
    "Run @url{https://pagekite.net/,PageKite}, a tunneling solution to make
local servers publicly accessible on the web, even behind NATs and firewalls.")))


@@ 2387,10 2360,6 @@ local servers publicly accessible on the web, even behind NATs and firewalls."))
                   #:group "yggdrasil"))
         (stop #~(make-kill-destructor)))))

(define %yggdrasil-log-rotation
  (list (log-rotation
         (files '("/var/log/yggdrasil.log")))))

(define %yggdrasil-accounts
  (list (user-group (name "yggdrasil") (system? #t))))



@@ 2406,9 2375,7 @@ See @command{yggdrasil -genconf} for config options.")
          (service-extension account-service-type
                             (const %yggdrasil-accounts))
          (service-extension profile-service-type
                             (compose list yggdrasil-configuration-package))
          (service-extension rottlog-service-type
                             (const %yggdrasil-log-rotation))))))
                             (compose list yggdrasil-configuration-package))))))


;;;


@@ 2478,10 2445,6 @@ See @command{yggdrasil -genconf} for config options.")
                   #:environment-variables #$%ipfs-environment))
         (stop #~(make-kill-destructor)))))

(define %ipfs-log-rotation
  (list (log-rotation
         (files '("/var/log/ipfs.log")))))

(define (%ipfs-activation config)
  "Return an activation gexp for IPFS with CONFIG"
  (define (exec-command . args)


@@ 2537,9 2500,7 @@ See @command{yggdrasil -genconf} for config options.")
          (service-extension activation-service-type
                             %ipfs-activation)
          (service-extension shepherd-root-service-type
                             ipfs-shepherd-service)
          (service-extension rottlog-service-type
                             (const %ipfs-log-rotation))))
                             ipfs-shepherd-service)))
   (default-value (ipfs-configuration))
   (description
    "Run @command{ipfs daemon}, the reference implementation


@@ 2575,16 2536,10 @@ of the IPFS peer-to-peer storage network.")))
           (respawn? #f)
           (stop #~(make-kill-destructor))))))

(define %keepalived-log-rotation
  (list (log-rotation
         (files '("/var/log/keepalived.log")))))

(define keepalived-service-type
  (service-type (name 'keepalived)
                (extensions (list (service-extension shepherd-root-service-type
                                                     keepalived-shepherd-service)
                                  (service-extension rottlog-service-type
                                                     (const %keepalived-log-rotation))))
                                                     keepalived-shepherd-service)))
                (description
                 "Run @uref{https://www.keepalived.org/, Keepalived}
routing software.")))

M gnu/services/web.scm => gnu/services/web.scm +1 -16
@@ 1282,11 1282,6 @@ a webserver.")
(define %hpcguix-web-log-file
  "/var/log/hpcguix-web.log")

(define %hpcguix-web-log-rotations
  (list (log-rotation
         (files (list %hpcguix-web-log-file))
         (frequency 'weekly))))

(define (hpcguix-web-shepherd-service config)
  (let* ((specs       (hpcguix-web-configuration-specs config))
         (config-file (and specs (scheme-file "hpcguix-web.scm" specs)))


@@ 1324,8 1319,6 @@ a webserver.")
                             (const %hpcguix-web-accounts))
          (service-extension activation-service-type
                             (const %hpcguix-web-activation))
          (service-extension rottlog-service-type
                             (const %hpcguix-web-log-rotations))
          (service-extension shepherd-root-service-type
                             (compose list hpcguix-web-shepherd-service))))
   (default-value (hpcguix-web-configuration))))


@@ 2121,12 2114,6 @@ WSGIPassAuthorization On
                      #:log-file #$%mumi-mailer-log))
            (stop #~(make-kill-destructor)))))))

(define %mumi-log-rotations
  (list (log-rotation
         (files (list %mumi-log
                      %mumi-mailer-log
                      %mumi-worker-log)))))

(define mumi-service-type
  (service-type
   (name 'mumi)


@@ 2136,9 2123,7 @@ WSGIPassAuthorization On
          (service-extension account-service-type
                             (const %mumi-accounts))
          (service-extension shepherd-root-service-type
                             mumi-shepherd-services)
          (service-extension rottlog-service-type
                             (const %mumi-log-rotations))))
                             mumi-shepherd-services)))
   (description
    "Run Mumi, a Web interface to the Debbugs bug-tracking server.")
   (default-value