From patchwork Sat Oct 2 13:45:59 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Oleg Pykhalov X-Patchwork-Id: 33555 Return-Path: X-Original-To: patchwork@mira.cbaines.net Delivered-To: patchwork@mira.cbaines.net Received: by mira.cbaines.net (Postfix, from userid 113) id 80AA827BBE3; Sat, 2 Oct 2021 14:48:34 +0100 (BST) X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on mira.cbaines.net X-Spam-Level: X-Spam-Status: No, score=-2.8 required=5.0 tests=BAYES_00,DKIM_ADSP_CUSTOM_MED, DKIM_SIGNED,FREEMAIL_FROM,MAILING_LIST_MULTI,RCVD_IN_MSPIKE_H2, SPF_HELO_PASS,T_DKIM_INVALID,URIBL_BLOCKED autolearn=unavailable autolearn_force=no version=3.4.2 Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mira.cbaines.net (Postfix) with ESMTPS id C247627BBE1 for ; Sat, 2 Oct 2021 14:48:33 +0100 (BST) Received: from localhost ([::1]:53364 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1mWfNQ-0000G4-4K for patchwork@mira.cbaines.net; Sat, 02 Oct 2021 09:48:32 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:41202) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mWfN0-0008Cx-SW for guix-patches@gnu.org; Sat, 02 Oct 2021 09:48:06 -0400 Received: from debbugs.gnu.org ([209.51.188.43]:46827) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1mWfN0-0002qY-LF for guix-patches@gnu.org; Sat, 02 Oct 2021 09:48:06 -0400 Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1mWfN0-0002vy-JQ for guix-patches@gnu.org; Sat, 02 Oct 2021 09:48:06 -0400 X-Loop: help-debbugs@gnu.org Subject: [bug#50967] [PATCH 08/12] gnu: home-services: Move shepherd to (gnu services). Resent-From: Oleg Pykhalov Original-Sender: "Debbugs-submit" Resent-CC: guix-patches@gnu.org Resent-Date: Sat, 02 Oct 2021 13:48:06 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 50967 X-GNU-PR-Package: guix-patches X-GNU-PR-Keywords: patch To: 50967@debbugs.gnu.org Cc: Oleg Pykhalov Received: via spool by 50967-submit@debbugs.gnu.org id=B50967.163318246111142 (code B ref 50967); Sat, 02 Oct 2021 13:48:06 +0000 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 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 X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list X-BeenThere: guix-patches@gnu.org List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: guix-patches-bounces+patchwork=mira.cbaines.net@gnu.org Sender: "Guix-patches" X-getmail-retrieved-from-mailbox: Patches * 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" <