From mboxrd@z Thu Jan 1 00:00:00 1970 From: =?UTF-8?Q?Cl=C3=A9ment?= Lassieur Subject: bug#29992: [PATCH] services: postgresql: Use pg_ctl to start and stop postgres. Date: Thu, 25 Jan 2018 14:20:02 +0100 Message-ID: <20180125132002.12953-1-clement@lassieur.org> References: <87d11zxpqp.fsf@gnu.org> Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Return-path: Received: from eggs.gnu.org ([2001:4830:134:3::10]:55601) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1eehSk-0005E2-Sl for bug-guix@gnu.org; Thu, 25 Jan 2018 08:21:08 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1eehSg-0000xF-4Z for bug-guix@gnu.org; Thu, 25 Jan 2018 08:21:06 -0500 Received: from debbugs.gnu.org ([208.118.235.43]:33971) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1eehSg-0000xA-0p for bug-guix@gnu.org; Thu, 25 Jan 2018 08:21:02 -0500 Sender: "Debbugs-submit" Resent-Message-ID: In-Reply-To: <87d11zxpqp.fsf@gnu.org> List-Id: Bug reports for GNU Guix List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: bug-guix-bounces+gcggb-bug-guix=m.gmane.org@gnu.org Sender: "bug-Guix" To: 29992@debbugs.gnu.org Fixes . * gnu/services/databases.scm (postgresql-shepherd-service): Replace make-forkexec-constructor and make-kill-destructor with pg_ctl. --- gnu/services/databases.scm | 40 ++++++++++++++++++++++++---------------- 1 file changed, 24 insertions(+), 16 deletions(-) diff --git a/gnu/services/databases.scm b/gnu/services/databases.scm index 6a01cb1ce..b34a67aa9 100644 --- a/gnu/services/databases.scm +++ b/gnu/services/databases.scm @@ -3,6 +3,7 @@ ;;; Copyright © 2015, 2016 Ludovic Courtès ;;; Copyright © 2016 Leo Famulari ;;; Copyright © 2017 Christopher Baines +;;; Copyright © 2018 Clément Lassieur ;;; ;;; This file is part of GNU Guix. ;;; @@ -147,26 +148,33 @@ host all all ::1/128 trust")) (define postgresql-shepherd-service (match-lambda (($ postgresql port locale config-file data-directory) - (let ((start-script - ;; Wrapper script that switches to the 'postgres' user before - ;; launching daemon. - (program-file "start-postgres" - #~(let ((user (getpwnam "postgres")) - (postgres (string-append #$postgresql - "/bin/postgres"))) - (setgid (passwd:gid user)) - (setuid (passwd:uid user)) - (system* postgres - (string-append "--config-file=" - #$config-file) - "-p" (number->string #$port) - "-D" #$data-directory))))) + (let* ((pg_ctl-wrapper + ;; Wrapper script that switches to the 'postgres' user before + ;; launching daemon. + (program-file + "pg_ctl-wrapper" + #~(begin + (use-modules (ice-9 match) + (ice-9 format)) + (match (command-line) + ((_ mode) + (let ((user (getpwnam "postgres")) + (pg_ctl #$(file-append postgresql "/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 + mode))))))) + (action (lambda args + #~(lambda _ + (invoke #$pg_ctl-wrapper #$@args))))) (list (shepherd-service (provision '(postgres)) (documentation "Run the PostgreSQL daemon.") (requirement '(user-processes loopback syslogd)) - (start #~(make-forkexec-constructor #$start-script)) - (stop #~(make-kill-destructor)))))))) + (start (action "start")) + (stop (action "stop")))))))) (define postgresql-service-type (service-type (name 'postgresql) -- 2.16.1