diff options
author | Robert Vollmert <rob@vllmrt.net> | 2024-03-08 11:51:01 +0000 |
---|---|---|
committer | Ludovic Courtès <ludo@gnu.org> | 2024-03-30 01:01:32 +0100 |
commit | ed03a0aa9b353434bbd6dce47f1b82cbe6d14000 (patch) | |
tree | c67cec83f7946c8257eb29368ae0fae23141fec4 | |
parent | b0a37d8b1ab6762ede3c807bbb05004ba606c684 (diff) | |
download | guix-ed03a0aa9b353434bbd6dce47f1b82cbe6d14000.tar.gz guix-ed03a0aa9b353434bbd6dce47f1b82cbe6d14000.zip |
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
-rw-r--r-- | gnu/services/databases.scm | 68 |
1 files 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 |