[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
03/08: services: postgresql: Add log directory support.
From: |
guix-commits |
Subject: |
03/08: services: postgresql: Add log directory support. |
Date: |
Thu, 28 Jan 2021 07:00:04 -0500 (EST) |
mothacehe pushed a commit to branch master
in repository guix.
commit fe4b8823505c3271fc3eacaa93c30a5cec078739
Author: Mathieu Othacehe <othacehe@gnu.org>
AuthorDate: Mon Jan 18 10:52:25 2021 +0100
services: postgresql: Add log directory support.
* gnu/services/databases.scm (postgresql-configuration-log-directory): New
procedure.
(<postgresql-configuration>)[log-directory]: New field.
(postgresql-activation): Create the log directory.
(postgresql-shepherd-service): Honor it.
* gnu/tests/databases.scm (%postgresql-log-directory): New variable.
(log-file): New test case.
* doc/guix.texi (Database Services): Document it.
---
doc/guix.texi | 5 +++++
gnu/services/databases.scm | 36 ++++++++++++++++++++++++++++--------
gnu/tests/databases.scm | 20 ++++++++++++++++++++
3 files changed, 53 insertions(+), 8 deletions(-)
diff --git a/doc/guix.texi b/doc/guix.texi
index b01bbf0..f4fbe6b 100644
--- a/doc/guix.texi
+++ b/doc/guix.texi
@@ -19344,6 +19344,11 @@ The configuration file to use when running
PostgreSQL@. The default
behaviour uses the postgresql-config-file record with the default values
for the fields.
+@item @code{log-directory} (default: @code{"/var/log/postgresql"})
+The directory where @command{pg_ctl} output will be written in a file
+named @code{"pg_ctl.log"}. This file can be useful to debug PostgreSQL
+configuration errors for instance.
+
@item @code{data-directory} (default: @code{"/var/lib/postgresql/data"})
Directory in which to store the data.
diff --git a/gnu/services/databases.scm b/gnu/services/databases.scm
index 83dee52..c387a7d 100644
--- a/gnu/services/databases.scm
+++ b/gnu/services/databases.scm
@@ -52,6 +52,7 @@
postgresql-configuration-port
postgresql-configuration-locale
postgresql-configuration-file
+ postgresql-configuration-log-directory
postgresql-configuration-data-directory
postgresql-service
@@ -164,6 +165,8 @@ host all all ::1/128 md5"))
(default "en_US.utf8"))
(config-file postgresql-configuration-file
(default (postgresql-config-file)))
+ (log-directory postgresql-configuration-log-directory
+ (default "/var/log/postgresql"))
(data-directory postgresql-configuration-data-directory
(default "/var/lib/postgresql/data"))
(extension-packages postgresql-configuration-extension-packages
@@ -200,15 +203,18 @@ host all all ::1/128 md5"))
(define postgresql-activation
(match-lambda
- (($ <postgresql-configuration> postgresql port locale config-file
data-directory
- extension-packages)
+ (($ <postgresql-configuration> postgresql port locale config-file
+ log-directory data-directory
+ extension-packages)
#~(begin
(use-modules (guix build utils)
(ice-9 match))
(let ((user (getpwnam "postgres"))
- (initdb (string-append #$(final-postgresql postgresql
extension-packages)
- "/bin/initdb"))
+ (initdb (string-append
+ #$(final-postgresql postgresql
+ extension-packages)
+ "/bin/initdb"))
(initdb-args
(append
(if #$locale
@@ -225,6 +231,11 @@ host all all ::1/128 md5"))
(mkdir-p socket-directory)
(chown socket-directory (passwd:uid user) (passwd:gid user))))
+ ;; Create the log directory.
+ (when (string? #$log-directory)
+ (mkdir-p #$log-directory)
+ (chown #$log-directory (passwd:uid user) (passwd:gid user)))
+
;; Drop privileges and init state directory in a new
;; process. Wait for it to finish before proceeding.
(match (primitive-fork)
@@ -247,8 +258,9 @@ host all all ::1/128 md5"))
(define postgresql-shepherd-service
(match-lambda
- (($ <postgresql-configuration> postgresql port locale config-file
data-directory
- extension-packages)
+ (($ <postgresql-configuration> postgresql port locale config-file
+ log-directory data-directory
+ extension-packages)
(let* ((pg_ctl-wrapper
;; Wrapper script that switches to the 'postgres' user before
;; launching daemon.
@@ -260,13 +272,21 @@ host all all ::1/128 md5"))
(match (command-line)
((_ mode)
(let ((user (getpwnam "postgres"))
- (pg_ctl #$(file-append (final-postgresql postgresql
extension-packages)
+ (pg_ctl #$(file-append
+ (final-postgresql postgresql
+ extension-packages)
"/bin/pg_ctl"))
(options (format #f "--config-file=~a -p ~d"
#$config-file #$port)))
(setgid (passwd:gid user))
(setuid (passwd:uid user))
- (execl pg_ctl pg_ctl "-D" #$data-directory "-o" options
+ (execl pg_ctl pg_ctl "-D" #$data-directory
+ #$@(if (string? log-directory)
+ (list "-l"
+ (string-append log-directory
+ "/pg_ctl.log"))
+ '())
+ "-o" options
mode)))))))
(pid-file (in-vicinity data-directory "postmaster.pid"))
(action (lambda args
diff --git a/gnu/tests/databases.scm b/gnu/tests/databases.scm
index 7338007..d881a8c 100644
--- a/gnu/tests/databases.scm
+++ b/gnu/tests/databases.scm
@@ -214,6 +214,9 @@
;;; The PostgreSQL service.
;;;
+(define %postgresql-log-directory
+ "/var/log/postgresql")
+
(define %postgresql-os
(simple-operating-system
(service postgresql-service-type
@@ -262,6 +265,23 @@
(start-service 'postgres))
marionette))
+ (test-assert "log-file"
+ (marionette-eval
+ '(begin
+ (use-modules (ice-9 ftw)
+ (ice-9 match))
+ (current-output-port
+ (open-file "/dev/console" "w0"))
+ (let ((server-log-file
+ (string-append #$%postgresql-log-directory
+ "/pg_ctl.log")))
+ (and (file-exists? server-log-file)
+ (display
+ (call-with-input-file server-log-file
+ get-string-all)))
+ #t))
+ marionette))
+
(test-end)
(exit (= (test-runner-fail-count (test-runner-current)) 0)))))
- branch master updated (ff0ff69 -> f58d071), guix-commits, 2021/01/28
- 02/08: services: postgresql: Add socket directory support., guix-commits, 2021/01/28
- 03/08: services: postgresql: Add log directory support.,
guix-commits <=
- 06/08: service: cuirass: Update it., guix-commits, 2021/01/28
- 04/08: services: postgresql: Wrap long lines., guix-commits, 2021/01/28
- 08/08: tests: Add cuirass test., guix-commits, 2021/01/28
- 01/08: services: postgresql: Use Guile datatypes., guix-commits, 2021/01/28
- 05/08: services: postgresql: Add postgresql-role-service-type., guix-commits, 2021/01/28
- 07/08: services: cuirass: Add remote build support., guix-commits, 2021/01/28