mirror of
https://git.in.rschanz.org/ryan77627/guix.git
synced 2024-12-24 21:38:07 -05:00
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
3 changed files with 201 additions and 1 deletions
|
@ -26,7 +26,8 @@ Copyright @copyright{} 2016 Ben Woodcroft@*
|
||||||
Copyright @copyright{} 2016 Chris Marusich@*
|
Copyright @copyright{} 2016 Chris Marusich@*
|
||||||
Copyright @copyright{} 2016 Efraim Flashner@*
|
Copyright @copyright{} 2016 Efraim Flashner@*
|
||||||
Copyright @copyright{} 2016 John Darrington@*
|
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
|
Permission is granted to copy, distribute and/or modify this document
|
||||||
under the terms of the GNU Free Documentation License, Version 1.3 or
|
under the terms of the GNU Free Documentation License, Version 1.3 or
|
||||||
|
@ -213,6 +214,7 @@ Services
|
||||||
|
|
||||||
* Base Services:: Essential system services.
|
* Base Services:: Essential system services.
|
||||||
* Scheduled Job Execution:: The mcron service.
|
* Scheduled Job Execution:: The mcron service.
|
||||||
|
* Log Rotation:: The rottlog service.
|
||||||
* Networking Services:: Network setup, SSH daemon, etc.
|
* Networking Services:: Network setup, SSH daemon, etc.
|
||||||
* X Window:: Graphical display.
|
* X Window:: Graphical display.
|
||||||
* Desktop Services:: D-Bus and desktop services.
|
* Desktop Services:: D-Bus and desktop services.
|
||||||
|
@ -7581,6 +7583,7 @@ declaration.
|
||||||
@menu
|
@menu
|
||||||
* Base Services:: Essential system services.
|
* Base Services:: Essential system services.
|
||||||
* Scheduled Job Execution:: The mcron service.
|
* Scheduled Job Execution:: The mcron service.
|
||||||
|
* Log Rotation:: The rottlog service.
|
||||||
* Networking Services:: Network setup, SSH daemon, etc.
|
* Networking Services:: Network setup, SSH daemon, etc.
|
||||||
* X Window:: Graphical display.
|
* X Window:: Graphical display.
|
||||||
* Desktop Services:: D-Bus and desktop services.
|
* Desktop Services:: D-Bus and desktop services.
|
||||||
|
@ -8055,6 +8058,85 @@ specifications,, mcron, GNU@tie{}mcron}).
|
||||||
@end deftp
|
@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
|
@node Networking Services
|
||||||
@subsubsection Networking Services
|
@subsubsection Networking Services
|
||||||
|
|
||||||
|
|
|
@ -385,6 +385,7 @@ GNU_SYSTEM_MODULES = \
|
||||||
%D%/packages/zip.scm \
|
%D%/packages/zip.scm \
|
||||||
\
|
\
|
||||||
%D%/services.scm \
|
%D%/services.scm \
|
||||||
|
%D%/services/admin.scm \
|
||||||
%D%/services/avahi.scm \
|
%D%/services/avahi.scm \
|
||||||
%D%/services/base.scm \
|
%D%/services/base.scm \
|
||||||
%D%/services/databases.scm \
|
%D%/services/databases.scm \
|
||||||
|
|
117
gnu/services/admin.scm
Normal file
117
gnu/services/admin.scm
Normal file
|
@ -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 a new issue