From debbugs-submit-bounces@debbugs.gnu.org Sat Oct 02 09:47:40 2021 Received: (at 50967) by debbugs.gnu.org; 2 Oct 2021 13:47:41 +0000 Received: from localhost ([127.0.0.1]:58362 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1mWfMW-0002tC-Tf for submit@debbugs.gnu.org; Sat, 02 Oct 2021 09:47:40 -0400 Received: from mail-lf1-f42.google.com ([209.85.167.42]:44583) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1mWfMH-0002pP-JT for 50967@debbugs.gnu.org; Sat, 02 Oct 2021 09:47:26 -0400 Received: by mail-lf1-f42.google.com with SMTP id y26so50579127lfa.11 for <50967@debbugs.gnu.org>; Sat, 02 Oct 2021 06:47:21 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=jBCGXwko3ry0vqp8RqjtfEPtP3jo9R7YU9+NAx3L61c=; b=MZHqnrBtMw0HCXkSoNxxHz7cnRkR13RmxuVAs+C8xGVpOBtexabp/ZJYmJzgjtUCrn nHF3zJpro1cqKcTGq0uDsN8OKE8GZMJyDVm8L+t/f2uce8oP/TX/CkUivspHH1L76y3w kph6RqMr1ia7uhp8Uc/YRatknkBejZAOihTWLBSl9sEaOvbjzPZLLaO9A9uFChSmwUss WQG0tdA/S+wyEadbaqNwbQnVRJSDmscBSQBzDmpL7mBEYDYZEwY0kMUP71M13sW6CYHq T6xVVwt+jv6W0WMzDbjf6HKvJ/+9X+JkjuESy5QxWeu5ep3W/b8a02y1YCDsra4dBDfX Usqg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=jBCGXwko3ry0vqp8RqjtfEPtP3jo9R7YU9+NAx3L61c=; b=q1ijPvXl8CiBjGsTofa9mAStt5xDAMz8cgZSqvlZG+daEwtEhcnWjaESFQqHwSS03w jvYVlcdBMbG8L/WR21l+zgz6fRZPjX6fpkg1sKBkNkSEr1Nn/ceamj4PxXp1wDacmWy0 OyntvJuSCkWDoIMXnUtGU7x52XWEGEM+T6Jq9lXUq572R7FkyNe3E1w1txGwY/dCeRu0 s4ugW/gNW25VrCMVuxdgUi8CAgp9F23w8IGV914KsWnZaNnlIvg5Rr/tiwMSpV6BwC9y 27V+fzU//ydNSPyL9WLId5I25bx7dV6SLzb6j2zGClK2HqQZBrTWv+Ft5LL/cdf+JY4K UU6A== X-Gm-Message-State: AOAM532msQwtONvmqVlzZTt3X4c4eRvnXA2tFdbTVkollWyRXMP3+ixq Ws52WoUvDgdn9wVBYT+ZbrhGaCKE8aE= X-Google-Smtp-Source: ABdhPJx9s6I6Ru4gmqZTblh+9SQuPJlSISv1AAMIqasEkztaDC2rFBo3TEH9h8mBvNxzFmVNDsvBoA== X-Received: by 2002:a05:6512:12c9:: with SMTP id p9mr4099841lfg.345.1633182435527; Sat, 02 Oct 2021 06:47:15 -0700 (PDT) Received: from localhost.localdomain ([88.201.161.72]) by smtp.gmail.com with ESMTPSA id e5sm952648ljj.129.2021.10.02.06.47.14 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 02 Oct 2021 06:47:15 -0700 (PDT) From: Oleg Pykhalov To: 50967@debbugs.gnu.org Subject: [PATCH 08/12] gnu: home-services: Move shepherd to (gnu services). Date: Sat, 2 Oct 2021 16:45:59 +0300 Message-Id: <20211002134603.6229-8-go.wigust@gmail.com> X-Mailer: git-send-email 2.33.0 In-Reply-To: <20211002134603.6229-1-go.wigust@gmail.com> References: <20211002134603.6229-1-go.wigust@gmail.com> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Spam-Score: 2.0 (++) X-Spam-Report: Spam detection software, running on the system "debbugs.gnu.org", has NOT identified this incoming email as spam. The original message has been attached to this so you can view it or label similar future email. If you have any questions, see the administrator of that system for details. Content preview: * gnu/home-services/shepherd.scm: Move content ... * gnu/services/shepherd.scm: ... here. * gnu/local.mk: Delete gnu/home-services/shepherd.scm. * gnu/home-services/mcron.scm: Replace (gnu home-servic [...] Content analysis details: (2.0 points, 10.0 required) pts rule name description ---- ---------------------- -------------------------------------------------- -0.0 RCVD_IN_MSPIKE_H2 RBL: Average reputation (+2) [209.85.167.42 listed in wl.mailspike.net] -0.0 SPF_PASS SPF: sender matches SPF record 0.0 FREEMAIL_FROM Sender email is commonly abused enduser mail provider (go.wigust[at]gmail.com) 2.0 PDS_OTHER_BAD_TLD Untrustworthy TLDs [URI: yoctocell.xyz (xyz)] 0.0 SPF_HELO_NONE SPF: HELO does not publish an SPF Record X-Debbugs-Envelope-To: 50967 Cc: Oleg Pykhalov 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: 1.0 (+) * gnu/home-services/shepherd.scm: Move content ... * gnu/services/shepherd.scm: ... here. * gnu/local.mk: Delete gnu/home-services/shepherd.scm. * gnu/home-services/mcron.scm: Replace (gnu home-services shepherd) with (gnu services shepherd). * tests/guix-home.sh: Same. --- gnu/home-services/mcron.scm | 2 +- gnu/home-services/shepherd.scm | 134 --------------------------------- gnu/local.mk | 1 - gnu/services/shepherd.scm | 112 ++++++++++++++++++++++++++- tests/guix-home.sh | 2 +- 5 files changed, 113 insertions(+), 138 deletions(-) delete mode 100644 gnu/home-services/shepherd.scm diff --git a/gnu/home-services/mcron.scm b/gnu/home-services/mcron.scm index fdfde179a5..a4e09f509c 100644 --- a/gnu/home-services/mcron.scm +++ b/gnu/home-services/mcron.scm @@ -20,7 +20,7 @@ (define-module (gnu home-services mcron) #:use-module (gnu packages guile-xyz) #:use-module (gnu home-services) - #:use-module (gnu home-services shepherd) + #:use-module (gnu services shepherd) #:use-module (gnu services shepherd) #:use-module (guix records) #:use-module (guix gexp) diff --git a/gnu/home-services/shepherd.scm b/gnu/home-services/shepherd.scm deleted file mode 100644 index 120cfde1a1..0000000000 --- a/gnu/home-services/shepherd.scm +++ /dev/null @@ -1,134 +0,0 @@ -;;; GNU Guix --- Functional package management for GNU -;;; Copyright © 2021 Andrew Tropin -;;; Copyright © 2021 Xinglu Chen -;;; -;;; This file is part of GNU Guix. -;;; -;;; GNU Guix is free software; you can redistribute it and/or modify it -;;; under the terms of the GNU General Public License as published by -;;; the Free Software Foundation; either version 3 of the License, or (at -;;; your option) any later version. -;;; -;;; GNU Guix is distributed in the hope that it will be useful, but -;;; WITHOUT ANY WARRANTY; without even the implied warranty of -;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -;;; GNU General Public License for more details. -;;; -;;; You should have received a copy of the GNU General Public License -;;; along with GNU Guix. If not, see . - -(define-module (gnu home-services shepherd) - #:use-module (gnu home-services) - #:use-module (gnu packages admin) - #:use-module (gnu services shepherd) - #:use-module (guix sets) - #:use-module (guix gexp) - #:use-module (guix records) - - #:use-module (srfi srfi-1) - - #:export (home-shepherd-service-type - home-shepherd-configuration) - #:re-export (shepherd-service - shepherd-action)) - -(define-record-type* - home-shepherd-configuration make-home-shepherd-configuration - home-shepherd-configuration? - (shepherd home-shepherd-configuration-shepherd - (default shepherd)) ; package - (auto-start? home-shepherd-configuration-auto-start? - (default #t)) - (services home-shepherd-configuration-services - (default '()))) - -(define (home-shepherd-configuration-file services shepherd) - "Return the shepherd configuration file for SERVICES. SHEPHERD is used -as shepherd package." - (assert-valid-graph services) - - (let ((files (map shepherd-service-file services)) - ;; TODO: Add compilation of services, it can improve start - ;; time. - ;; (scm->go (cute scm->go <> shepherd)) - ) - (define config - #~(begin - (use-modules (srfi srfi-34) - (system repl error-handling)) - (apply - register-services - (map - (lambda (file) (load file)) - '#$files)) - (action 'root 'daemonize) - (format #t "Starting services...~%") - (for-each - (lambda (service) (start service)) - '#$(append-map shepherd-service-provision - (filter shepherd-service-auto-start? - services))) - (newline))) - - (scheme-file "shepherd.conf" config))) - -(define (launch-shepherd-gexp config) - (let* ((shepherd (home-shepherd-configuration-shepherd config)) - (services (home-shepherd-configuration-services config))) - (if (home-shepherd-configuration-auto-start? config) - (with-imported-modules '((guix build utils)) - #~(let ((log-dir (or (getenv "XDG_LOG_HOME") - (format #f "~a/.local/var/log" (getenv "HOME"))))) - ((@ (guix build utils) mkdir-p) log-dir) - (system* - #$(file-append shepherd "/bin/shepherd") - "--logfile" - (string-append - log-dir - "/shepherd.log") - "--config" - #$(home-shepherd-configuration-file services shepherd)))) - #~""))) - -(define (reload-configuration-gexp config) - (let* ((shepherd (home-shepherd-configuration-shepherd config)) - (services (home-shepherd-configuration-services config))) - #~(system* - #$(file-append shepherd "/bin/herd") - "load" "root" - #$(home-shepherd-configuration-file services shepherd)))) - -(define (ensure-shepherd-gexp config) - #~(if (file-exists? - (string-append - (or (getenv "XDG_RUNTIME_DIR") - (format #f "/run/user/~a" (getuid))) - "/shepherd/socket")) - #$(reload-configuration-gexp config) - #$(launch-shepherd-gexp config))) - -(define-public home-shepherd-service-type - (service-type (name 'home-shepherd) - (extensions - (list (service-extension - home-run-on-first-login-service-type - launch-shepherd-gexp) - (service-extension - home-activation-service-type - ensure-shepherd-gexp) - (service-extension - home-profile-service-type - (lambda (config) - `(,(home-shepherd-configuration-shepherd config)))))) - (compose concatenate) - (extend - (lambda (config extra-services) - (home-shepherd-configuration - (inherit config) - (services - (append (home-shepherd-configuration-services config) - extra-services))))) - (default-value (home-shepherd-configuration)) - (description "Configure and install userland Shepherd."))) - - diff --git a/gnu/local.mk b/gnu/local.mk index 97ff893bf7..fb60e6492e 100644 --- a/gnu/local.mk +++ b/gnu/local.mk @@ -75,7 +75,6 @@ GNU_SYSTEM_MODULES = \ %D%/ci.scm \ %D%/home.scm \ %D%/home-services.scm \ - %D%/home-services/shepherd.scm \ %D%/home-services/mcron.scm \ %D%/image.scm \ %D%/packages.scm \ diff --git a/gnu/services/shepherd.scm b/gnu/services/shepherd.scm index 7277273686..46c80472dc 100644 --- a/gnu/services/shepherd.scm +++ b/gnu/services/shepherd.scm @@ -4,6 +4,8 @@ ;;; Copyright © 2018 Carlo Zancanaro ;;; Copyright © 2020 Jan (janneke) Nieuwenhuizen ;;; Copyright © 2021 Maxime Devos +;;; Copyright © 2021 Andrew Tropin +;;; Copyright © 2021 Xinglu Chen ;;; ;;; This file is part of GNU Guix. ;;; @@ -28,6 +30,7 @@ #:use-module (guix records) #:use-module (guix derivations) ;imported-modules, etc. #:use-module (guix utils) + #:use-module (gnu home-services) #:use-module (gnu services) #:use-module (gnu services herd) #:use-module (gnu packages admin) @@ -75,7 +78,10 @@ user-processes-service-type - assert-valid-graph)) + assert-valid-graph + + home-shepherd-service-type + home-shepherd-configuration)) ;;; Commentary: ;;; @@ -590,4 +596,108 @@ read-only, just before rebooting/halting. Processes still running after a few seconds after @code{SIGTERM} has been sent are terminated with @code{SIGKILL}."))) + +;;; +;;; Home services +;;; + +(define-record-type* + home-shepherd-configuration make-home-shepherd-configuration + home-shepherd-configuration? + (shepherd home-shepherd-configuration-shepherd + (default shepherd)) ; package + (auto-start? home-shepherd-configuration-auto-start? + (default #t)) + (services home-shepherd-configuration-services + (default '()))) + +(define (home-shepherd-configuration-file services shepherd) + "Return the shepherd configuration file for SERVICES. SHEPHERD is used +as shepherd package." + (assert-valid-graph services) + + (let ((files (map shepherd-service-file services)) + ;; TODO: Add compilation of services, it can improve start + ;; time. + ;; (scm->go (cute scm->go <> shepherd)) + ) + (define config + #~(begin + (use-modules (srfi srfi-34) + (system repl error-handling)) + (apply + register-services + (map + (lambda (file) (load file)) + '#$files)) + (action 'root 'daemonize) + (format #t "Starting services...~%") + (for-each + (lambda (service) (start service)) + '#$(append-map shepherd-service-provision + (filter shepherd-service-auto-start? + services))) + (newline))) + + (scheme-file "shepherd.conf" config))) + +(define (launch-shepherd-gexp config) + (let* ((shepherd (home-shepherd-configuration-shepherd config)) + (services (home-shepherd-configuration-services config))) + (if (home-shepherd-configuration-auto-start? config) + (with-imported-modules '((guix build utils)) + #~(let ((log-dir (or (getenv "XDG_LOG_HOME") + (format #f "~a/.local/var/log" (getenv "HOME"))))) + ((@ (guix build utils) mkdir-p) log-dir) + (system* + #$(file-append shepherd "/bin/shepherd") + "--logfile" + (string-append + log-dir + "/shepherd.log") + "--config" + #$(home-shepherd-configuration-file services shepherd)))) + #~""))) + +(define (reload-configuration-gexp config) + (let* ((shepherd (home-shepherd-configuration-shepherd config)) + (services (home-shepherd-configuration-services config))) + #~(system* + #$(file-append shepherd "/bin/herd") + "load" "root" + #$(home-shepherd-configuration-file services shepherd)))) + +(define (ensure-shepherd-gexp config) + #~(if (file-exists? + (string-append + (or (getenv "XDG_RUNTIME_DIR") + (format #f "/run/user/~a" (getuid))) + "/shepherd/socket")) + #$(reload-configuration-gexp config) + #$(launch-shepherd-gexp config))) + +(define-public home-shepherd-service-type + (service-type (name 'home-shepherd) + (extensions + (list (service-extension + home-run-on-first-login-service-type + launch-shepherd-gexp) + (service-extension + home-activation-service-type + ensure-shepherd-gexp) + (service-extension + home-profile-service-type + (lambda (config) + `(,(home-shepherd-configuration-shepherd config)))))) + (compose concatenate) + (extend + (lambda (config extra-services) + (home-shepherd-configuration + (inherit config) + (services + (append (home-shepherd-configuration-services config) + extra-services))))) + (default-value (home-shepherd-configuration)) + (description "Configure and install userland Shepherd."))) + ;;; shepherd.scm ends here diff --git a/tests/guix-home.sh b/tests/guix-home.sh index cb015c907f..46cd779c81 100644 --- a/tests/guix-home.sh +++ b/tests/guix-home.sh @@ -75,7 +75,7 @@ fi cat > "$tmpfile" <