services: postgresql: Add socket directory support.

* gnu/services/databases.scm (postgresql-config-file-socket-directory): New
procedure.
(<postgresql-config-file>)[socket-directory]: New field.
(postgresql-config-file-compiler): Honor it.
(postgresql-activation): Create the socket directory if needed.
* doc/guix.texi (Database Services): Document it.
* gnu/tests/guix.scm (%guix-data-service-os): Adapt it.
* gnu/tests/monitoring.scm (%zabbix-os): Ditto.
* gnu/tests/web.scm (patchwork-os): Ditto.

Signed-off-by: Mathieu Othacehe <othacehe@gnu.org>
This commit is contained in:
Mathieu Othacehe 2021-01-18 10:35:29 +01:00
parent a38d0b0137
commit 6c0679215f
No known key found for this signature in database
GPG key ID: 8354763531769CA6
5 changed files with 45 additions and 12 deletions

View file

@ -19430,6 +19430,12 @@ configuration.
@item @code{ident-file} (default: @code{%default-postgres-ident})
Filename or G-expression for the user name mapping configuration.
@item @code{socket-directory} (default: @code{"/var/lib/postgresql"})
Specifies the directory of the Unix-domain socket(s) on which PostgreSQL
is to listen for connections from client applications. If set to
@code{#false} PostgreSQL does not listen on any Unix-domain sockets, in
which case only TCP/IP sockets can be used to connect to the server.
@item @code{extra-config} (default: @code{'()})
List of additional keys and values to include in the PostgreSQL config
file. Each entry in the list should be a list where the first element

View file

@ -43,6 +43,7 @@ (define-module (gnu services databases)
postgresql-config-file-log-destination
postgresql-config-file-hba-file
postgresql-config-file-ident-file
postgresql-config-file-socket-directory
postgresql-config-file-extra-config
postgresql-configuration
@ -101,20 +102,23 @@ (define %default-postgres-ident
(define-record-type* <postgresql-config-file>
postgresql-config-file make-postgresql-config-file
postgresql-config-file?
(log-destination postgresql-config-file-log-destination
(default "syslog"))
(hba-file postgresql-config-file-hba-file
(default %default-postgres-hba))
(ident-file postgresql-config-file-ident-file
(default %default-postgres-ident))
(extra-config postgresql-config-file-extra-config
(default '())))
(log-destination postgresql-config-file-log-destination
(default "syslog"))
(hba-file postgresql-config-file-hba-file
(default %default-postgres-hba))
(ident-file postgresql-config-file-ident-file
(default %default-postgres-ident))
(socket-directory postgresql-config-file-socket-directory
(default "/var/run/postgresql"))
(extra-config postgresql-config-file-extra-config
(default '())))
(define-gexp-compiler (postgresql-config-file-compiler
(file <postgresql-config-file>) system target)
(match file
(($ <postgresql-config-file> log-destination hba-file
ident-file extra-config)
ident-file socket-directory
extra-config)
;; See: https://www.postgresql.org/docs/current/config-setting.html.
(define (format-value value)
(cond
@ -136,6 +140,9 @@ (define contents
`(("log_destination" ,log-destination)
("hba_file" ,hba-file)
("ident_file" ,ident-file)
,@(if socket-directory
`(("unix_socket_directories" ,socket-directory))
'())
,@extra-config)))
(gexp->derivation
@ -211,6 +218,13 @@ (define postgresql-activation
(mkdir-p #$data-directory)
(chown #$data-directory (passwd:uid user) (passwd:gid user))
;; Create the socket directory.
(let ((socket-directory
#$(postgresql-config-file-socket-directory config-file)))
(when (string? socket-directory)
(mkdir-p socket-directory)
(chown socket-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)

View file

@ -164,7 +164,10 @@ (define %guix-data-service-os
"
local all all trust
host all all 127.0.0.1/32 trust
host all all ::1/128 trust"))))))
host all all ::1/128 trust"))
;; XXX: Remove when postgresql default socket directory is
;; changed to /var/run/postgresql.
(socket-directory #f)))))
(service guix-data-service-type
(guix-data-service-configuration
(host "0.0.0.0")))

View file

@ -309,7 +309,12 @@ (define %zabbix-os
(service dhcp-client-service-type)
(service postgresql-service-type
(postgresql-configuration
(postgresql postgresql-10)))
(postgresql postgresql-10)
;; XXX: Remove when postgresql default socket directory is
;; changed to /var/run/postgresql.
(config-file
(postgresql-config-file
(socket-directory #f)))))
(service zabbix-front-end-service-type
(zabbix-front-end-configuration
(db-password "zabbix")))

View file

@ -569,7 +569,12 @@ (define (patchwork-os patchwork)
(listen '("8080"))))))
(service postgresql-service-type
(postgresql-configuration
(postgresql postgresql-10)))
(postgresql postgresql-10)
;; XXX: Remove when postgresql default socket directory is
;; changed to /var/run/postgresql.
(config-file
(postgresql-config-file
(socket-directory #f)))))
(service patchwork-service-type
(patchwork-configuration
(patchwork patchwork)