guix-commits
[Top][All Lists]
Advanced

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

05/07: services: postgresql: Don't initdb when directory exists.


From: guix-commits
Subject: 05/07: services: postgresql: Don't initdb when directory exists.
Date: Fri, 29 Mar 2024 20:05:58 -0400 (EDT)

civodul pushed a commit to branch master
in repository guix.

commit ed03a0aa9b353434bbd6dce47f1b82cbe6d14000
Author: Robert Vollmert <rob@vllmrt.net>
AuthorDate: Fri Mar 8 11:51:01 2024 +0000

    services: postgresql: Don't initdb when directory exists.
    
    * gnu/services/databases.scm (postgresql-activation): Check if
    directory exists.
    
    Reviewed-by: Dale Mellor <guix-devel-0brg6b@rdmp.org>
    Signed-off-by: Ludovic Courtès <ludo@gnu.org>
    Change-Id: Id563a3e8df2cb5b805e64cd8319303c65d308c69
---
 gnu/services/databases.scm | 68 ++++++++++++++++++++++++----------------------
 1 file changed, 35 insertions(+), 33 deletions(-)

diff --git a/gnu/services/databases.scm b/gnu/services/databases.scm
index 580031cb42..cb85d18e21 100644
--- a/gnu/services/databases.scm
+++ b/gnu/services/databases.scm
@@ -235,20 +235,7 @@ host       all     all     ::1/128         md5"))
          (use-modules (guix build utils)
                       (ice-9 match))
 
-         (let ((user (getpwnam "postgres"))
-               (initdb (string-append
-                        #$(final-postgresql postgresql
-                                            extension-packages)
-                        "/bin/initdb"))
-               (initdb-args
-                (append
-                 (if #$locale
-                     (list (string-append "--locale=" #$locale))
-                     '()))))
-           ;; Create db state directory.
-           (mkdir-p #$data-directory)
-           (chown #$data-directory (passwd:uid user) (passwd:gid user))
-
+         (let ((user (getpwnam "postgres")))
            ;; Create the socket directory.
            (let ((socket-directory
                   #$(postgresql-config-file-socket-directory config-file)))
@@ -261,25 +248,40 @@ host      all     all     ::1/128         md5"))
              (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)
-             (0
-              ;; Exit with a non-zero status code if an exception is thrown.
-              (dynamic-wind
-                (const #t)
-                (lambda ()
-                  (setgid (passwd:gid user))
-                  (setuid (passwd:uid user))
-                  (primitive-exit
-                   (apply system*
-                          initdb
-                          "-D"
-                          #$data-directory
-                          initdb-args)))
-                (lambda ()
-                  (primitive-exit 1))))
-             (pid (waitpid pid))))))))
+           (unless (file-exists? #$data-directory)
+             (let ((initdb (string-append
+                            #$(final-postgresql postgresql
+                                                extension-packages)
+                            "/bin/initdb"))
+                   (initdb-args
+                    (append
+                     (if #$locale
+                         (list (string-append "--locale=" #$locale))
+                         '()))))
+               ;; Create db state directory.
+               (mkdir-p #$data-directory)
+               (chown #$data-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)
+                 (0
+                  ;; Exit with a non-zero status code if an exception is
+                  ;; thrown.
+                  (dynamic-wind
+                      (const #t)
+                      (lambda ()
+                        (setgid (passwd:gid user))
+                        (setuid (passwd:uid user))
+                        (primitive-exit
+                         (apply system*
+                                initdb
+                                "-D"
+                                #$data-directory
+                                initdb-args)))
+                      (lambda ()
+                        (primitive-exit 1))))
+                 (pid (waitpid pid))))))))))
 
 (define postgresql-shepherd-service
   (match-lambda



reply via email to

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