guix-commits
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

02/08: services: postgresql: Add socket directory support.


From: guix-commits
Subject: 02/08: services: postgresql: Add socket directory support.
Date: Thu, 28 Jan 2021 07:00:03 -0500 (EST)

mothacehe pushed a commit to branch master
in repository guix.

commit 6c0679215f4ffa534c1eb2e8c8a6e043a0c993fe
Author: Mathieu Othacehe <othacehe@gnu.org>
AuthorDate: Mon Jan 18 10:35:29 2021 +0100

    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>
---
 doc/guix.texi              |  6 ++++++
 gnu/services/databases.scm | 32 +++++++++++++++++++++++---------
 gnu/tests/guix.scm         |  5 ++++-
 gnu/tests/monitoring.scm   |  7 ++++++-
 gnu/tests/web.scm          |  7 ++++++-
 5 files changed, 45 insertions(+), 12 deletions(-)

diff --git a/doc/guix.texi b/doc/guix.texi
index 3c607b3..b01bbf0 100644
--- a/doc/guix.texi
+++ b/doc/guix.texi
@@ -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
diff --git a/gnu/services/databases.scm b/gnu/services/databases.scm
index bb0e406..83dee52 100644
--- a/gnu/services/databases.scm
+++ b/gnu/services/databases.scm
@@ -43,6 +43,7 @@
             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 @@ host      all     all     ::1/128         md5"))
 (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 @@ host        all     all     ::1/128         md5"))
        `(("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 @@ host       all     all     ::1/128         md5"))
            (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)
diff --git a/gnu/tests/guix.scm b/gnu/tests/guix.scm
index af7d8f0..219b8b4 100644
--- a/gnu/tests/guix.scm
+++ b/gnu/tests/guix.scm
@@ -164,7 +164,10 @@
                             "
 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")))
diff --git a/gnu/tests/monitoring.scm b/gnu/tests/monitoring.scm
index 7371b02..c21bb1e 100644
--- a/gnu/tests/monitoring.scm
+++ b/gnu/tests/monitoring.scm
@@ -309,7 +309,12 @@ zabbix||{}
           (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")))
diff --git a/gnu/tests/web.scm b/gnu/tests/web.scm
index 7f4518a..cc0e79c 100644
--- a/gnu/tests/web.scm
+++ b/gnu/tests/web.scm
@@ -569,7 +569,12 @@ HTTP-PORT."
                (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)



reply via email to

[Prev in Thread] Current Thread [Next in Thread]