From unknown Sat Jun 14 19:44:25 2025 X-Loop: help-debbugs@gnu.org Subject: [bug#28021] [PATCH] gnu: Fix memcached service startup. Resent-From: Christopher Baines Original-Sender: "Debbugs-submit" Resent-CC: guix-patches@gnu.org Resent-Date: Tue, 08 Aug 2017 20:49:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: report 28021 X-GNU-PR-Package: guix-patches X-GNU-PR-Keywords: patch To: 28021@debbugs.gnu.org X-Debbugs-Original-To: guix-patches@gnu.org Received: via spool by submit@debbugs.gnu.org id=B.15022253374382 (code B ref -1); Tue, 08 Aug 2017 20:49:02 +0000 Received: (at submit) by debbugs.gnu.org; 8 Aug 2017 20:48:57 +0000 Received: from localhost ([127.0.0.1]:52282 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1dfBQv-00018c-5h for submit@debbugs.gnu.org; Tue, 08 Aug 2017 16:48:57 -0400 Received: from eggs.gnu.org ([208.118.235.92]:45262) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1dfBQt-00018O-Rp for submit@debbugs.gnu.org; Tue, 08 Aug 2017 16:48:56 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1dfBQn-0007Yz-9h for submit@debbugs.gnu.org; Tue, 08 Aug 2017 16:48:50 -0400 X-Spam-Checker-Version: SpamAssassin 3.3.2 (2011-06-06) on eggs.gnu.org X-Spam-Level: X-Spam-Status: No, score=0.8 required=5.0 tests=BAYES_50 autolearn=disabled version=3.3.2 Received: from lists.gnu.org ([2001:4830:134:3::11]:59766) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1dfBQn-0007Yt-74 for submit@debbugs.gnu.org; Tue, 08 Aug 2017 16:48:49 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:36220) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dfBQl-00073g-IB for guix-patches@gnu.org; Tue, 08 Aug 2017 16:48:48 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1dfBQg-0007U6-Gl for guix-patches@gnu.org; Tue, 08 Aug 2017 16:48:47 -0400 Received: from li622-129.members.linode.com ([212.71.249.129]:48214 helo=mira.cbaines.net) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dfBQg-0007To-8L for guix-patches@gnu.org; Tue, 08 Aug 2017 16:48:42 -0400 Received: by mira.cbaines.net (Postfix, from userid 113) id 7B27313E3BE; Tue, 8 Aug 2017 21:48:40 +0100 (BST) Received: from localhost (cpc102582-walt20-2-0-cust14.13-2.cable.virginm.net [86.27.34.15]) by mira.cbaines.net (Postfix) with ESMTPSA id 3F4A213E3BD for ; Tue, 8 Aug 2017 21:48:40 +0100 (BST) Received: from localhost.localdomain (localhost [127.0.0.1]) by localhost (OpenSMTPD) with ESMTP id 53e1af1a for ; Tue, 8 Aug 2017 20:48:39 +0000 (UTC) From: Christopher Baines Date: Tue, 8 Aug 2017 21:48:39 +0100 Message-Id: <20170808204839.23723-1-mail@cbaines.net> X-Mailer: git-send-email 2.14.0 X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] [fuzzy] X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.6.x X-Received-From: 2001:4830:134:3::11 X-Spam-Score: -4.0 (----) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -4.0 (----) Memcached changes to the memcached user from root before writing the PID file. This means that it must be able to write the PID file as the memcached user. To make this work, create the /var/run/memcached directory when the service starts, make it owned by memcached, and change memcached to write the PID file to /var/run/memcached/pid. This wasn't picked up by the system test as the "service running" part was too permissive, and only failed on an error. Instead, test the response from calling start-service and check that the PID is a number. * gnu/services/databases.scm (memcached-activation): New variable. (memcached-shepherd-service): Change PID file location. (memcached-service-type): Extend the activation-service-type. * gnu/tests/databases.scm (run-memcached-test)[test]: Change the "service running" test to check the response from the shepherd. --- gnu/services/databases.scm | 17 +++++++++++++++-- gnu/tests/databases.scm | 10 ++++++---- 2 files changed, 21 insertions(+), 6 deletions(-) diff --git a/gnu/services/databases.scm b/gnu/services/databases.scm index 3b64d0e07..de1f6b841 100644 --- a/gnu/services/databases.scm +++ b/gnu/services/databases.scm @@ -216,6 +216,14 @@ and stores the database cluster in @var{data-directory}." (home-directory "/var/empty") (shell (file-append shadow "/sbin/nologin"))))) +(define memcached-activation + #~(begin + (use-modules (guix build utils)) + (let ((user (getpwnam "memcached"))) + (mkdir-p "/var/run/memcached") + (chown "/var/run/memcached" + (passwd:uid user) (passwd:gid user))))) + (define memcached-shepherd-service (match-lambda (($ memcached interfaces tcp-port udp-port @@ -233,11 +241,14 @@ and stores the database cluster in @var{data-directory}." "-p" #$(number->string tcp-port) "-U" #$(number->string udp-port) "--daemon" - "-P" "/var/run/memcached.pid" + ;; Memcached changes to the memcached user prior to + ;; writing the pid file, so write it to a directory + ;; that memcached owns. + "-P" "/var/run/memcached/pid" "-u" "memcached" ,#$@additional-options) #:log-file "/var/log/memcached" - #:pid-file "/var/run/memcached.pid")) + #:pid-file "/var/run/memcached/pid")) (stop #~(make-kill-destructor)))))))) (define memcached-service-type @@ -245,6 +256,8 @@ and stores the database cluster in @var{data-directory}." (extensions (list (service-extension shepherd-root-service-type memcached-shepherd-service) + (service-extension activation-service-type + (const memcached-activation)) (service-extension account-service-type (const %memcached-accounts)))) (default-value (memcached-configuration)))) diff --git a/gnu/tests/databases.scm b/gnu/tests/databases.scm index 310210c36..9d9a75374 100644 --- a/gnu/tests/databases.scm +++ b/gnu/tests/databases.scm @@ -63,13 +63,15 @@ (test-begin "memcached") ;; Wait for memcached to be up and running. - (test-eq "service running" - 'running! + (test-assert "service running" (marionette-eval '(begin (use-modules (gnu services herd)) - (start-service 'memcached) - 'running!) + (match (start-service 'memcached) + (#f #f) + (('service response-parts ...) + (match (assq-ref response-parts 'running) + ((pid) (number? pid)))))) marionette)) (let* ((ai (car (getaddrinfo "localhost" -- 2.14.0 From unknown Sat Jun 14 19:44:25 2025 MIME-Version: 1.0 X-Mailer: MIME-tools 5.505 (Entity 5.505) X-Loop: help-debbugs@gnu.org From: help-debbugs@gnu.org (GNU bug Tracking System) To: Christopher Baines Subject: bug#28021: closed (Re: [bug#28021] [PATCH] gnu: Fix memcached service startup.) Message-ID: References: <20170815222610.1f24c7df@cbaines.net> <20170808204839.23723-1-mail@cbaines.net> X-Gnu-PR-Message: they-closed 28021 X-Gnu-PR-Package: guix-patches X-Gnu-PR-Keywords: patch Reply-To: 28021@debbugs.gnu.org Date: Tue, 15 Aug 2017 21:27:02 +0000 Content-Type: multipart/mixed; boundary="----------=_1502832422-21641-1" This is a multi-part message in MIME format... ------------=_1502832422-21641-1 Content-Disposition: inline Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Your bug report #28021: [PATCH] gnu: Fix memcached service startup. which was filed against the guix-patches package, has been closed. The explanation is attached below, along with your original report. If you require more details, please reply to 28021@debbugs.gnu.org. --=20 28021: http://debbugs.gnu.org/cgi/bugreport.cgi?bug=3D28021 GNU Bug Tracking System Contact help-debbugs@gnu.org with problems ------------=_1502832422-21641-1 Content-Type: message/rfc822 Content-Disposition: inline Content-Transfer-Encoding: 7bit Received: (at 28021-done) by debbugs.gnu.org; 15 Aug 2017 21:26:13 +0000 Received: from localhost ([127.0.0.1]:39789 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1dhjLp-0005cr-KM for submit@debbugs.gnu.org; Tue, 15 Aug 2017 17:26:13 -0400 Received: from li622-129.members.linode.com ([212.71.249.129]:55103 helo=mira.cbaines.net) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1dhjLo-0005cl-C7 for 28021-done@debbugs.gnu.org; Tue, 15 Aug 2017 17:26:12 -0400 Received: by mira.cbaines.net (Postfix, from userid 113) id 7F64516FE42; Tue, 15 Aug 2017 22:26:11 +0100 (BST) X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on mira.cbaines.net X-Spam-Level: X-Spam-Status: No, score=-2.9 required=5.0 tests=ALL_TRUSTED,BAYES_00, URIBL_BLOCKED autolearn=ham autolearn_force=no version=3.4.0 Received: from localhost (cpc102582-walt20-2-0-cust14.13-2.cable.virginm.net [86.27.34.15]) by mira.cbaines.net (Postfix) with ESMTPSA id 3E38916FE41 for <28021-done@debbugs.gnu.org>; Tue, 15 Aug 2017 22:26:11 +0100 (BST) Date: Tue, 15 Aug 2017 22:26:10 +0100 From: Christopher Baines To: 28021-done@debbugs.gnu.org Subject: Re: [bug#28021] [PATCH] gnu: Fix memcached service startup. Message-ID: <20170815222610.1f24c7df@cbaines.net> In-Reply-To: <20170808204839.23723-1-mail@cbaines.net> References: <20170808204839.23723-1-mail@cbaines.net> X-Mailer: Claws Mail 3.15.0-dirty (GTK+ 2.24.31; x86_64-unknown-linux-gnu) MIME-Version: 1.0 Content-Type: multipart/signed; micalg=pgp-sha512; boundary="Sig_/TrXNpXfgWLKtgGdi90S4Wu+"; protocol="application/pgp-signature" X-Spam-Score: -0.0 (/) X-Debbugs-Envelope-To: 28021-done X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -0.0 (/) --Sig_/TrXNpXfgWLKtgGdi90S4Wu+ Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: quoted-printable On Tue, 8 Aug 2017 21:48:39 +0100 Christopher Baines wrote: > Memcached changes to the memcached user from root before writing the > PID file. This means that it must be able to write the PID file as > the memcached user. >=20 > To make this work, create the /var/run/memcached directory when the > service starts, make it owned by memcached, and change memcached to > write the PID file to /var/run/memcached/pid. >=20 > This wasn't picked up by the system test as the "service running" > part was too permissive, and only failed on an error. Instead, test > the response from calling start-service and check that the PID is a > number. >=20 > * gnu/services/databases.scm (memcached-activation): New variable. > (memcached-shepherd-service): Change PID file location. > (memcached-service-type): Extend the activation-service-type. > * gnu/tests/databases.scm (run-memcached-test)[test]: Change the > "service running" test to check the response from the shepherd. This was reviewed by lfam and rekado on IRC, and I've now pushed :) --Sig_/TrXNpXfgWLKtgGdi90S4Wu+ Content-Type: application/pgp-signature Content-Description: OpenPGP digital signature -----BEGIN PGP SIGNATURE----- iQKTBAEBCgB9FiEEPonu50WOcg2XVOCyXiijOwuE9XcFAlmTZvJfFIAAAAAALgAo aXNzdWVyLWZwckBub3RhdGlvbnMub3BlbnBncC5maWZ0aGhvcnNlbWFuLm5ldDNF ODlFRUU3NDU4RTcyMEQ5NzU0RTBCMjVFMjhBMzNCMEI4NEY1NzcACgkQXiijOwuE 9XcZXRAApfrh5lLTUJdWRXNitbgIWC3kWJ1+qG82XEYC/e9PCVVj3oMBqtwUt5Ck ZGZgH712jjsBHkMkZNfRAWV9874t1bOs2HqpThvTaSEhqsGLp6/qEqGSH2lA2Qbi rmZnx55zK0Pn9MfWN5mUHsw3DYujXXcZ/lFqokvsx9tCLOi4VeEOmDxePexkkcI5 Ivd3TXpw24g6tSS7e/Z1pbZDdiWN8phiQHbSykCPeohh6whuSXbn9LVU1wHeWA2f D4ldG18B4GFv21UMwQcE7y85AGAuS/CV8Hq3KilnitINyP4Br8FDORmJstRFkn+a F0vDyt01KmXXGNniclhC8MOBLI9jdnhnJsf7RHezNtyuTTDlX1U8Bve0pepJaH5P CMUMJoYFZnw18YFiEoa3XbEZLACt6ehWV8K/g7E7uSEyKCWOs3BsprhLwNmxYmmj 3Rnh8DuVlwV4Iq/ciP7x5eRC9tT7HypoyJpW0WgcrtdIoaIqcm6g2rOFL8ZUyRfS Bz4KWfLsUIhTuluPzJbuPrQFt7G09w2lz+mwaG2oPyWwNot4k4SHstQegjQAlCry T8MtftyLzykZwfPR+kCmBE8iyvVZColuYlqYlScnI0BHIl76vhb3IAwsiB2B97aF hHajCmpJoPHyFtd9qKrbyQbLC0vJX03lNKQ58/qzB2Pj2U30t5M= =h6zY -----END PGP SIGNATURE----- --Sig_/TrXNpXfgWLKtgGdi90S4Wu+-- ------------=_1502832422-21641-1 Content-Type: message/rfc822 Content-Disposition: inline Content-Transfer-Encoding: 7bit Received: (at submit) by debbugs.gnu.org; 8 Aug 2017 20:48:57 +0000 Received: from localhost ([127.0.0.1]:52282 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1dfBQv-00018c-5h for submit@debbugs.gnu.org; Tue, 08 Aug 2017 16:48:57 -0400 Received: from eggs.gnu.org ([208.118.235.92]:45262) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1dfBQt-00018O-Rp for submit@debbugs.gnu.org; Tue, 08 Aug 2017 16:48:56 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1dfBQn-0007Yz-9h for submit@debbugs.gnu.org; Tue, 08 Aug 2017 16:48:50 -0400 X-Spam-Checker-Version: SpamAssassin 3.3.2 (2011-06-06) on eggs.gnu.org X-Spam-Level: X-Spam-Status: No, score=0.8 required=5.0 tests=BAYES_50 autolearn=disabled version=3.3.2 Received: from lists.gnu.org ([2001:4830:134:3::11]:59766) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1dfBQn-0007Yt-74 for submit@debbugs.gnu.org; Tue, 08 Aug 2017 16:48:49 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:36220) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dfBQl-00073g-IB for guix-patches@gnu.org; Tue, 08 Aug 2017 16:48:48 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1dfBQg-0007U6-Gl for guix-patches@gnu.org; Tue, 08 Aug 2017 16:48:47 -0400 Received: from li622-129.members.linode.com ([212.71.249.129]:48214 helo=mira.cbaines.net) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dfBQg-0007To-8L for guix-patches@gnu.org; Tue, 08 Aug 2017 16:48:42 -0400 Received: by mira.cbaines.net (Postfix, from userid 113) id 7B27313E3BE; Tue, 8 Aug 2017 21:48:40 +0100 (BST) Received: from localhost (cpc102582-walt20-2-0-cust14.13-2.cable.virginm.net [86.27.34.15]) by mira.cbaines.net (Postfix) with ESMTPSA id 3F4A213E3BD for ; Tue, 8 Aug 2017 21:48:40 +0100 (BST) Received: from localhost.localdomain (localhost [127.0.0.1]) by localhost (OpenSMTPD) with ESMTP id 53e1af1a for ; Tue, 8 Aug 2017 20:48:39 +0000 (UTC) From: Christopher Baines To: guix-patches@gnu.org Subject: [PATCH] gnu: Fix memcached service startup. Date: Tue, 8 Aug 2017 21:48:39 +0100 Message-Id: <20170808204839.23723-1-mail@cbaines.net> X-Mailer: git-send-email 2.14.0 X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] [fuzzy] X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.6.x X-Received-From: 2001:4830:134:3::11 X-Spam-Score: -4.0 (----) X-Debbugs-Envelope-To: submit X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -4.0 (----) Memcached changes to the memcached user from root before writing the PID file. This means that it must be able to write the PID file as the memcached user. To make this work, create the /var/run/memcached directory when the service starts, make it owned by memcached, and change memcached to write the PID file to /var/run/memcached/pid. This wasn't picked up by the system test as the "service running" part was too permissive, and only failed on an error. Instead, test the response from calling start-service and check that the PID is a number. * gnu/services/databases.scm (memcached-activation): New variable. (memcached-shepherd-service): Change PID file location. (memcached-service-type): Extend the activation-service-type. * gnu/tests/databases.scm (run-memcached-test)[test]: Change the "service running" test to check the response from the shepherd. --- gnu/services/databases.scm | 17 +++++++++++++++-- gnu/tests/databases.scm | 10 ++++++---- 2 files changed, 21 insertions(+), 6 deletions(-) diff --git a/gnu/services/databases.scm b/gnu/services/databases.scm index 3b64d0e07..de1f6b841 100644 --- a/gnu/services/databases.scm +++ b/gnu/services/databases.scm @@ -216,6 +216,14 @@ and stores the database cluster in @var{data-directory}." (home-directory "/var/empty") (shell (file-append shadow "/sbin/nologin"))))) +(define memcached-activation + #~(begin + (use-modules (guix build utils)) + (let ((user (getpwnam "memcached"))) + (mkdir-p "/var/run/memcached") + (chown "/var/run/memcached" + (passwd:uid user) (passwd:gid user))))) + (define memcached-shepherd-service (match-lambda (($ memcached interfaces tcp-port udp-port @@ -233,11 +241,14 @@ and stores the database cluster in @var{data-directory}." "-p" #$(number->string tcp-port) "-U" #$(number->string udp-port) "--daemon" - "-P" "/var/run/memcached.pid" + ;; Memcached changes to the memcached user prior to + ;; writing the pid file, so write it to a directory + ;; that memcached owns. + "-P" "/var/run/memcached/pid" "-u" "memcached" ,#$@additional-options) #:log-file "/var/log/memcached" - #:pid-file "/var/run/memcached.pid")) + #:pid-file "/var/run/memcached/pid")) (stop #~(make-kill-destructor)))))))) (define memcached-service-type @@ -245,6 +256,8 @@ and stores the database cluster in @var{data-directory}." (extensions (list (service-extension shepherd-root-service-type memcached-shepherd-service) + (service-extension activation-service-type + (const memcached-activation)) (service-extension account-service-type (const %memcached-accounts)))) (default-value (memcached-configuration)))) diff --git a/gnu/tests/databases.scm b/gnu/tests/databases.scm index 310210c36..9d9a75374 100644 --- a/gnu/tests/databases.scm +++ b/gnu/tests/databases.scm @@ -63,13 +63,15 @@ (test-begin "memcached") ;; Wait for memcached to be up and running. - (test-eq "service running" - 'running! + (test-assert "service running" (marionette-eval '(begin (use-modules (gnu services herd)) - (start-service 'memcached) - 'running!) + (match (start-service 'memcached) + (#f #f) + (('service response-parts ...) + (match (assq-ref response-parts 'running) + ((pid) (number? pid)))))) marionette)) (let* ((ai (car (getaddrinfo "localhost" -- 2.14.0 ------------=_1502832422-21641-1--