From mboxrd@z Thu Jan 1 00:00:00 1970 From: Jan Nieuwenhuizen Subject: Re: [PATCH] gnu: rottlog: rotate messages daily. Date: Fri, 09 Sep 2016 07:26:15 +0200 Message-ID: <87zinhve2w.fsf@gnu.org> References: <87d1lfziew.fsf@gnu.org> <87k2eoox3p.fsf@gnu.org> <877fanyjoy.fsf@gnu.org> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="=-=-=" Return-path: Received: from eggs.gnu.org ([2001:4830:134:3::10]:47405) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1biEKt-0008Oa-3L for guix-devel@gnu.org; Fri, 09 Sep 2016 01:26:48 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1biEKo-0005o4-TT for guix-devel@gnu.org; Fri, 09 Sep 2016 01:26:46 -0400 In-Reply-To: <877fanyjoy.fsf@gnu.org> (Jan Nieuwenhuizen's message of "Wed, 07 Sep 2016 14:32:13 +0200") List-Id: "Development of GNU Guix and the GNU System distribution." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: guix-devel-bounces+gcggd-guix-devel=m.gmane.org@gnu.org Sender: "Guix-devel" To: Ludovic =?utf-8?Q?Court=C3=A8s?= Cc: guix-devel@gnu.org --=-=-= Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Jan Nieuwenhuizen writes: Hi! >> =E2=80=98rottlog=E2=80=99 was looking for config files in OUT/etc, which= made it >> impossible for people to configure it. So in commit >> 268ad34e0eadf8a015798b5c5587aad65b9f3a61 I changed it to look for >> configuration files in /etc/rottlog. >> >> Consequently, running =E2=80=9Crottlog=E2=80=9D alone won=E2=80=99t work= ; one has to provide >> /etc/rottlog/{rc,daily} first. We should have a GuixSD service that >> does that. > > Ah, yes configuration was the bit I was wondering about. A service > that initializes/writes these sounds like a good idea! I made an attempt at a simple version of such a service. Its currently just copying rc and writing a daily/weekly, find a working example attached. Greetings, Jan --=-=-= Content-Type: text/x-patch; charset=utf-8 Content-Disposition: inline; filename=0001-gnu-services-add-rottlog.patch Content-Transfer-Encoding: quoted-printable >From cf93c7b59d0dc71ff23b4f9d435106d3844a9b9a Mon Sep 17 00:00:00 2001 From: Jan Nieuwenhuizen Date: Thu, 8 Sep 2016 01:20:43 +0200 Subject: [PATCH] gnu: services: add rottlog. * gnu/services/admin.scm: New file. * gnu/local.mk (GNU_SYSTEM_MODULES): Add it. --- gnu/local.mk | 1 + gnu/services/admin.scm | 106 +++++++++++++++++++++++++++++++++++++++++++++= ++++ 2 files changed, 107 insertions(+) create mode 100644 gnu/services/admin.scm diff --git a/gnu/local.mk b/gnu/local.mk index cd29ae0..3fed7fc 100644 --- a/gnu/local.mk +++ b/gnu/local.mk @@ -381,6 +381,7 @@ GNU_SYSTEM_MODULES =3D \ %D%/packages/zip.scm \ \ %D%/services.scm \ + %D%/services/admin.scm \ %D%/services/avahi.scm \ %D%/services/base.scm \ %D%/services/databases.scm \ diff --git a/gnu/services/admin.scm b/gnu/services/admin.scm new file mode 100644 index 0000000..097e8a6 --- /dev/null +++ b/gnu/services/admin.scm @@ -0,0 +1,106 @@ +;;; GNU Guix --- Functional package management for GNU +;;; Copyright =C2=A9 2016 Jan Nieuwenhuizen +;;; +;;; 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 the GNU General Public License +;;; along with GNU Guix. If not, see . + +(define-module (gnu services admin) + #:use-module (gnu packages admin) + #:use-module (gnu packages base) + #:use-module (gnu services) + #:use-module (gnu services shepherd) + #:use-module (guix gexp) + #:use-module (guix records) + #:export (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 +;;;=20 +;;; (define rottlog-job +;;; #~(job '(next-hour '(5)) +;;; (lambda () +;;; (system (string-append #$rottlog "/sbin/rottlog"))))) +;;; +;;; Add to operating-system services +;;; +;;; (mcron-service (list rottlog-job)) +;;; (rottlog-service) +;;; +;;; Code: + +(define-record-type* + rottlog-configuration make-rottlog-configuration + rottlog-configuration? + (period rottlog-period) + (initialize? rottlog-initialize?)) + +(define (rottlog-initialization period) + "Return the gexp to initialize the ROTTLOG service for PERIOD." + #~(begin + (use-modules (ice-9 rdelim)) + (let* ((dir "/etc/rottlog") + (period-config (format #f "~a/~a" dir '#$period)) + (rc-config (string-append dir "/rc"))) + + (mkdir-p dir) + + ;; TODO: substitutions + (unless (file-exists? rc-config) + (format #t "creating rottlog config '~a'...~%" rc-config) + (let* ((file (open-file rc-config "w")) + (template (string-append #$rottlog "/etc/rc")) + (config (with-input-from-file template read-string))) + (display config file) + (close file))) + + ;; TODO: list of periods? + (if (not (memq '#$period '(hourly daily weekly))) + (format (current-error-port) "cowardly refusing to create rott= log config for unknown period: '~a'~%" '#$period) + (unless (file-exists? period-config) + (format #t "creating rottlog config'~a'...~%" period-config) + (let* ((file (open-file period-config "w"))) + (format file "/var/log/messages { + sharedscripts + postrotate + ~a/bin/kill -HUP $(~a/bin/cat /var/run/syslog.pid) 2> /dev/null + endscript + nocompress +} +" #$coreutils #$coreutils) + (close file))))))) + +(define (rottlog-activation config) + "Return the activation gexp for CONFIG." + #~(begin + #$(if (rottlog-initialize? config) + (rottlog-initialization (rottlog-period config)) + #t))) + +(define rottlog-service-type + (service-type (name 'rottlog) + (extensions + (list (service-extension activation-service-type + rottlog-activation))))) + +(define* (rottlog-service #:key (period 'daily) (initialize? #t)) + (service rottlog-service-type + (rottlog-configuration (period period) + (initialize? initialize?)))) +;;; admin.scm ends here --=20 2.9.3 --=-=-= Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable --=20 Jan Nieuwenhuizen | GNU LilyPond http://lilypond.org Freelance IT http://JoyofSource.com | Avatar=C2=AE http://AvatarAcademy.nl= =20=20 --=-=-=--