services: Add rottlog.
* gnu/services/admin.scm: New file. * gnu/local.mk (GNU_SYSTEM_MODULES): Add it. * doc/guix.texi (Log Rotation): New node. Co-authored-by: Ludovic Courtès <ludo@gnu.org>
This commit is contained in:
parent
d79e8f65b5
commit
92c03a8715
|
@ -26,7 +26,8 @@ Copyright @copyright{} 2016 Ben Woodcroft@*
|
|||
Copyright @copyright{} 2016 Chris Marusich@*
|
||||
Copyright @copyright{} 2016 Efraim Flashner@*
|
||||
Copyright @copyright{} 2016 John Darrington@*
|
||||
Copyright @copyright{} 2016 ng0
|
||||
Copyright @copyright{} 2016 ng0@*
|
||||
Copyright @copyright{} 2016 Jan Nieuwenhuizen
|
||||
|
||||
Permission is granted to copy, distribute and/or modify this document
|
||||
under the terms of the GNU Free Documentation License, Version 1.3 or
|
||||
|
@ -213,6 +214,7 @@ Services
|
|||
|
||||
* Base Services:: Essential system services.
|
||||
* Scheduled Job Execution:: The mcron service.
|
||||
* Log Rotation:: The rottlog service.
|
||||
* Networking Services:: Network setup, SSH daemon, etc.
|
||||
* X Window:: Graphical display.
|
||||
* Desktop Services:: D-Bus and desktop services.
|
||||
|
@ -7581,6 +7583,7 @@ declaration.
|
|||
@menu
|
||||
* Base Services:: Essential system services.
|
||||
* Scheduled Job Execution:: The mcron service.
|
||||
* Log Rotation:: The rottlog service.
|
||||
* Networking Services:: Network setup, SSH daemon, etc.
|
||||
* X Window:: Graphical display.
|
||||
* Desktop Services:: D-Bus and desktop services.
|
||||
|
@ -8055,6 +8058,85 @@ specifications,, mcron, GNU@tie{}mcron}).
|
|||
@end deftp
|
||||
|
||||
|
||||
@node Log Rotation
|
||||
@subsubsection Log Rotation
|
||||
|
||||
@cindex rottlog
|
||||
@cindex log rotation
|
||||
Log files such as those found in @file{/var/log} tend to grow endlessly,
|
||||
so it's a good idea to @dfn{rotate} them once in a while---i.e., archive
|
||||
their contents in separate files, possibly compressed. The @code{(gnu
|
||||
services admin)} module provides an interface to GNU@tie{}Rot[t]log, a
|
||||
log rotation tool (@pxref{Top,,, rottlog, GNU Rot[t]log Manual}).
|
||||
|
||||
The example below defines an operating system that provides log rotation
|
||||
with the default settings.
|
||||
|
||||
@lisp
|
||||
(use-modules (guix) (gnu))
|
||||
(use-service-modules admin mcron)
|
||||
(use-package-modules base idutils)
|
||||
|
||||
(operating-system
|
||||
;; @dots{}
|
||||
(services (cons* (mcron-service)
|
||||
(service rottlog-service-type (rottlog-configuration))
|
||||
%base-services)))
|
||||
@end lisp
|
||||
|
||||
@defvr {Scheme Variable} rottlog-service-type
|
||||
This is the type of the Rottlog service, whose value is a
|
||||
@code{rottlog-configuration} object.
|
||||
|
||||
This service type can define mcron jobs (@pxref{Scheduled Job
|
||||
Execution}) to run the rottlog service.
|
||||
@end defvr
|
||||
|
||||
@deftp {Data Type} rottlog-configuration
|
||||
Data type representing the configuration of rottlog.
|
||||
|
||||
@table @asis
|
||||
@item @code{rottlog} (default: @code{rottlog})
|
||||
The Rottlog package to use.
|
||||
|
||||
@item @code{rc-file} (default: @code{(file-append rottlog "/etc/rc")})
|
||||
The Rottlog configuration file to use (@pxref{Mandatory RC Variables,,,
|
||||
rottlog, GNU Rot[t]log Manual}).
|
||||
|
||||
@item @code{periodic-rotations} (default: @code{`(("weekly" %default-rotatations))})
|
||||
A list of Rottlog period-name/period-config tuples.
|
||||
|
||||
For example, taking an example from the Rottlog manual (@pxref{Period
|
||||
Related File Examples,,, rottlog, GNU Rot[t]log Manual}), a valid tuple
|
||||
might be:
|
||||
|
||||
@example
|
||||
("daily" ,(plain-file "daily"
|
||||
"\
|
||||
/var/log/apache/* @{
|
||||
storedir apache-archives
|
||||
rotate 6
|
||||
notifempty
|
||||
nocompress
|
||||
@}"))
|
||||
@end example
|
||||
|
||||
@item @code{jobs}
|
||||
This is a list of gexps where each gexp corresponds to an mcron job
|
||||
specification (@pxref{Scheduled Job Execution}).
|
||||
@end table
|
||||
@end deftp
|
||||
|
||||
@defvr {Scheme Variable} %default-rotations
|
||||
Specifies weekly rotation of @var{%rotated-files} and
|
||||
@code{"/var/log/shepherd.log"}.
|
||||
@end defvr
|
||||
|
||||
@defvr {Scheme Variable} %rotated-files
|
||||
The list of syslog-controlled files to be rotated. By default it is:
|
||||
@code{'("/var/log/messages" "/var/log/secure")}.
|
||||
@end defvr
|
||||
|
||||
@node Networking Services
|
||||
@subsubsection Networking Services
|
||||
|
||||
|
|
|
@ -385,6 +385,7 @@ GNU_SYSTEM_MODULES = \
|
|||
%D%/packages/zip.scm \
|
||||
\
|
||||
%D%/services.scm \
|
||||
%D%/services/admin.scm \
|
||||
%D%/services/avahi.scm \
|
||||
%D%/services/base.scm \
|
||||
%D%/services/databases.scm \
|
||||
|
|
|
@ -0,0 +1,117 @@
|
|||
;;; GNU Guix --- Functional package management for GNU
|
||||
;;; Copyright © 2016 Jan Nieuwenhuizen <janneke@gnu.org>
|
||||
;;;
|
||||
;;; This file is part of GNU Guix.
|
||||
;;;
|
||||
;;; GNU Guix is free software; you can redistribute it and/or modify it
|
||||
;;; under the terms of the GNU General Public License as published by
|
||||
;;; the Free Software Foundation; either version 3 of the License, or (at
|
||||
;;; your option) any later version.
|
||||
;;;
|
||||
;;; GNU Guix is distributed in the hope that it will be useful, but
|
||||
;;; WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
;;; GNU General Public License for more details.
|
||||
;;;
|
||||
;;; You should have received a copy of thye GNU General Public License
|
||||
;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
(define-module (gnu services admin)
|
||||
#:use-module (gnu packages admin)
|
||||
#:use-module (gnu packages base)
|
||||
#:use-module (gnu services)
|
||||
#:use-module (gnu services mcron)
|
||||
#:use-module (gnu services shepherd)
|
||||
#:use-module (guix gexp)
|
||||
#:use-module (guix packages)
|
||||
#:use-module (guix records)
|
||||
#:use-module (srfi srfi-1)
|
||||
#:export (%default-rotations
|
||||
%rotated-files
|
||||
rottlog-configuration
|
||||
rottlog-configuration?
|
||||
rottlog-service
|
||||
rottlog-service-type))
|
||||
|
||||
;;; Commentary:
|
||||
;;;
|
||||
;;; This module implements configuration of rottlog by writing
|
||||
;;; /etc/rottlog/{rc,hourly|daily|weekly}. Example usage
|
||||
;;;
|
||||
;;; (mcron-service)
|
||||
;;; (service rottlog-service-type (rottlog-configuration))
|
||||
;;;
|
||||
;;; Code:
|
||||
|
||||
(define %rotated-files
|
||||
'("/var/log/messages" "/var/log/secure"))
|
||||
|
||||
(define (syslog-rotation-config file)
|
||||
#~(#$file " {
|
||||
sharedscripts
|
||||
postrotate
|
||||
" #$coreutils "/bin/kill -HUP $(cat /var/run/syslog.pid) 2> /dev/null
|
||||
endscript
|
||||
}
|
||||
"))
|
||||
|
||||
(define (simple-rotation-config file)
|
||||
(string-append file " {
|
||||
sharedscripts
|
||||
postrotate
|
||||
endscript
|
||||
}
|
||||
"))
|
||||
|
||||
(define %default-rotations
|
||||
`(("weekly"
|
||||
,(computed-file "rottlog.weekly"
|
||||
#~(call-with-output-file #$output
|
||||
(lambda (port)
|
||||
(display
|
||||
(string-join
|
||||
(apply append '#$(map syslog-rotation-config
|
||||
%rotated-files))
|
||||
"")
|
||||
port)
|
||||
(display #$(simple-rotation-config
|
||||
"/var/log/shepherd.log")
|
||||
port)))))))
|
||||
|
||||
(define (default-jobs rottlog)
|
||||
(list #~(job '(next-hour '(0)) ;midnight
|
||||
(lambda ()
|
||||
(system* #$(file-append rottlog "/sbin/rottlog"))))
|
||||
#~(job '(next-hour '(12)) ;noon
|
||||
(lambda ()
|
||||
(system* #$(file-append rottlog "/sbin/rottlog"))))))
|
||||
|
||||
(define-record-type* <rottlog-configuration>
|
||||
rottlog-configuration make-rottlog-configuration
|
||||
rottlog-configuration?
|
||||
(rottlog rottlog-rottlog ;package
|
||||
(default rottlog))
|
||||
(rc-file rottlog-rc-file ;file-like
|
||||
(default (file-append rottlog "/etc/rc")))
|
||||
(periodic-rotations rottlog-periodic-rotations ;list of (name file) tuples
|
||||
(default %default-rotations))
|
||||
(jobs rottlog-jobs ;list of <mcron-job>
|
||||
(default #f)))
|
||||
|
||||
(define (rottlog-etc config)
|
||||
`(("rottlog" ,(file-union "rottlog"
|
||||
(cons `("rc" ,(rottlog-rc-file config))
|
||||
(rottlog-periodic-rotations config))))))
|
||||
|
||||
(define (rottlog-jobs-or-default config)
|
||||
(or (rottlog-jobs config)
|
||||
(default-jobs (rottlog-rottlog config))))
|
||||
|
||||
(define rottlog-service-type
|
||||
(service-type
|
||||
(name 'rottlog)
|
||||
(extensions (list (service-extension etc-service-type rottlog-etc)
|
||||
(service-extension mcron-service-type
|
||||
rottlog-jobs-or-default)))))
|
||||
|
||||
;;; admin.scm ends here
|
Loading…
Reference in New Issue