From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mp12.migadu.com ([2001:41d0:2:4a6f::]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) by ms9.migadu.com with LMTPS id u2wWBt7dcGTqKAAASxT56A (envelope-from ) for ; Fri, 26 May 2023 18:27:10 +0200 Received: from aspmx1.migadu.com ([2001:41d0:2:4a6f::]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) by mp12.migadu.com with LMTPS id mPjsBN7dcGSaFgEAauVa8A (envelope-from ) for ; Fri, 26 May 2023 18:27:10 +0200 Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by aspmx1.migadu.com (Postfix) with ESMTPS id 9F46591D2 for ; Fri, 26 May 2023 18:27:09 +0200 (CEST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1q2aHR-0005op-5S; Fri, 26 May 2023 12:27:05 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1q2aHO-0005oB-UB for guix-patches@gnu.org; Fri, 26 May 2023 12:27:03 -0400 Received: from debbugs.gnu.org ([209.51.188.43]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1q2aHO-00062I-Lz for guix-patches@gnu.org; Fri, 26 May 2023 12:27:02 -0400 Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1q2aHO-0003AJ-IG for guix-patches@gnu.org; Fri, 26 May 2023 12:27:02 -0400 X-Loop: help-debbugs@gnu.org Subject: [bug#49610] [PATCH v4 1/2] services: guix: Add channels field. References: <20210717205819.380-1-brice@waegenei.re> In-Reply-To: <20210717205819.380-1-brice@waegenei.re> Resent-From: Antero Mejr Original-Sender: "Debbugs-submit" Resent-CC: guix-patches@gnu.org Resent-Date: Fri, 26 May 2023 16:27:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 49610 X-GNU-PR-Package: guix-patches X-GNU-PR-Keywords: patch To: 49610@debbugs.gnu.org Cc: ludo@gnu.org, zimon.toutoune@gmail.com Received: via spool by 49610-submit@debbugs.gnu.org id=B49610.168511838712109 (code B ref 49610); Fri, 26 May 2023 16:27:02 +0000 Received: (at 49610) by debbugs.gnu.org; 26 May 2023 16:26:27 +0000 Received: from localhost ([127.0.0.1]:50674 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1q2aGo-000399-B2 for submit@debbugs.gnu.org; Fri, 26 May 2023 12:26:27 -0400 Received: from mout-p-202.mailbox.org ([80.241.56.172]:42264) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1q2aGm-00038r-SI for 49610@debbugs.gnu.org; Fri, 26 May 2023 12:26:25 -0400 Received: from smtp202.mailbox.org (smtp202.mailbox.org [10.196.197.202]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange ECDHE (P-384) server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by mout-p-202.mailbox.org (Postfix) with ESMTPS id 4QSVfX6Rclz9ssc; Fri, 26 May 2023 18:26:12 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=mailbox.org; s=mail20150812; t=1685118372; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding; bh=CpDr/hktiK8QND3jK5avAN6/G0ZGs5l4s3+hJ7rcWWo=; b=GrGt3yk2BwOF1z/Mc85CXhNeblB+KoEiOP2qGhYednpe21bBnb17C4BZQ0TZITQfQXbiIc BcK4Du7+lRcvqMfLnWOKiKNcDC7pb8/ppdZk/jeZsFobqJK/FoIHOS/8TxoRYmDCm5kFUD MmRz9kO0ffNHs2m5NLuQkHLzCEYTLO1+tb+gSmtwYONyBFhGmJ1dE17f2L1RMx2pRXd6k9 fop7R49zEt8k4w6K4pHumOpqe/CJGKr04JyhD0gTLTJqdH+gn/C6uLq+MOSO453FQZeEJg 36NFrxdVFkCI0EK6BHWSNo2dQvSUqzRrm+hXopyZDmciaU5rqwI4CeSjaYUShw== Date: Fri, 26 May 2023 16:26:05 +0000 Message-Id: <20230526162606.6747-1-antero@mailbox.org> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-MBO-RS-META: uyijabr1utymf1zz9mcfmc7ny4xzo9e3 X-MBO-RS-ID: 5cde06eba5612d44fd5 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: , Reply-to: Antero Mejr X-ACL-Warn: , Antero Mejr via Guix-patches From: Antero Mejr via Guix-patches via Errors-To: guix-patches-bounces+larch=yhetil.org@gnu.org Sender: guix-patches-bounces+larch=yhetil.org@gnu.org X-Migadu-Country: US X-Migadu-Flow: FLOW_IN ARC-Seal: i=1; s=key1; d=yhetil.org; t=1685118429; a=rsa-sha256; cv=none; b=rNwoz6F/t9KhvM1lQ8GxtxgEmKU+PlEcr2kmFXVhkiOzy7SEyY+ruE+rMbSc2WouTKXzd1 NRgcVggJGB0KplXADwABz+M9WaAIYc2ZvirPM2LkiBU/e0z8doacSuKeZx1n6I5/lV2fsE TdSnft/ug7RcMuSVQii5mCPZ8D5fJ2OZDx66HA0Kgrb1I0qSIWY5C54+0JN2C0hQOoYh1+ xghmJZOerGR7/EXap6kn7Zs51sxO1gber0y3UUgxd1JLoMecqqIEutbwCPhdS0pFxblryt fcmillsVZ9mQoIIb26f4yHB78o6pHrd/J/N1Isp5bvA1ONWTFPNh047B6Sm2bw== ARC-Authentication-Results: i=1; aspmx1.migadu.com; dkim=fail ("headers rsa verify failed") header.d=mailbox.org header.s=mail20150812 header.b=GrGt3yk2; dmarc=pass (policy=none) header.from=gnu.org; spf=pass (aspmx1.migadu.com: domain of "guix-patches-bounces+larch=yhetil.org@gnu.org" designates 209.51.188.17 as permitted sender) smtp.mailfrom="guix-patches-bounces+larch=yhetil.org@gnu.org" ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=yhetil.org; s=key1; t=1685118429; h=from:from:sender:sender:reply-to:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding:resent-cc: resent-from:resent-sender:resent-message-id:in-reply-to:in-reply-to: references:references:list-id:list-help:list-unsubscribe: list-subscribe:list-post:dkim-signature; bh=CpDr/hktiK8QND3jK5avAN6/G0ZGs5l4s3+hJ7rcWWo=; b=neNzAmlbx6Je0IG/Z2MJCO9eSKvrlYSK2VQTiE5Vc4ubujGVVzdhMA90etBQPJw8tMJvFQ a2vCqJOtrMSSbLTkAckoKJEICEH/lYhqPvnIxcNcAsOMM41VTbyoQEOcvAe2a6uweplvs8 wVEBfHFLKn16K7AJJyJfCmhnPFpJtHFlwt6gOWYv0T1C15sAc4MuvwR2P1KaGjIHYfTKnj ep9TUzVfxRyMv/XWjsemAJ9MqziI12EaWHtcf9acPHLJvSnVQaBEtuGFA1ZhYRTmWTaUuk l+eFOSUf0oHkxMQpF2DLtWZn0zCG3ZMbM7C+frlbGD4d7xxjdrgNY1TNUrNyfQ== X-Migadu-Spam-Score: -0.61 X-Spam-Score: -0.61 X-Migadu-Queue-Id: 9F46591D2 X-Migadu-Scanner: scn0.migadu.com Authentication-Results: aspmx1.migadu.com; dkim=fail ("headers rsa verify failed") header.d=mailbox.org header.s=mail20150812 header.b=GrGt3yk2; dmarc=pass (policy=none) header.from=gnu.org; spf=pass (aspmx1.migadu.com: domain of "guix-patches-bounces+larch=yhetil.org@gnu.org" designates 209.51.188.17 as permitted sender) smtp.mailfrom="guix-patches-bounces+larch=yhetil.org@gnu.org" X-TUID: XdrSuuTdFb2a * doc/guix.texi (Base Services): Document 'guix-configuration-channels' field. * gnu/services/base.scm (install-channels-file): New procedure. (%default-channels-file): New variable. (guix-configuration): Add channels field. (guix-activation): Use 'install-channels-file' procedure. --- doc/guix.texi | 13 +++++++++++++ gnu/services/base.scm | 40 ++++++++++++++++++++++++++++++++++++++-- 2 files changed, 51 insertions(+), 2 deletions(-) diff --git a/doc/guix.texi b/doc/guix.texi index 31dc33fb97..9ebdf70d81 100644 --- a/doc/guix.texi +++ b/doc/guix.texi @@ -18858,6 +18858,19 @@ few seconds when enough entropy is available and is only done once; you might want to turn it off for instance in a virtual machine that does not need it and where the extra boot time is a problem. +@item @code{channels} (default: @code{%default-channels-file}) +File-like object containing a list of channels to be used by +@command{guix pull}, by default. The file-like object is symlinked to +@file{/etc/guix/channels.scm}. + +@quotation Note +When reconfiguring a system, the existing @file{/etc/guix/channels.scm} +file is backed up as @file{/etc/guix/channels.scm.bak} if it was +determined to be a manually modified file. This is to facilitate +migration from earlier versions, which allowed for in-place +modifications to @file{/etc/guix/channels.scm}. +@end quotation + @item @code{max-silent-time} (default: @code{0}) @itemx @code{timeout} (default: @code{0}) The number of seconds of silence and the number of seconds of activity, diff --git a/gnu/services/base.scm b/gnu/services/base.scm index c5b06b57e8..ee0c4880f9 100644 --- a/gnu/services/base.scm +++ b/gnu/services/base.scm @@ -80,6 +80,7 @@ (define-module (gnu services base) #:use-module ((gnu build file-systems) #:select (mount-flags->bit-mask swap-space->flags-bit-mask)) + #:use-module (guix channels) #:use-module (guix gexp) #:use-module (guix records) #:use-module (guix modules) @@ -93,6 +94,7 @@ (define-module (gnu services base) #:use-module (srfi srfi-35) #:use-module (ice-9 match) #:use-module (ice-9 format) + #:use-module (ice-9 pretty-print) #:re-export (user-processes-service-type ;backwards compatibility %default-substitute-urls) #:export (fstab-service-type @@ -207,6 +209,7 @@ (define-module (gnu services base) guix-configuration-use-substitutes? guix-configuration-substitute-urls guix-configuration-generate-substitute-key? + guix-configuration-channels guix-configuration-extra-options guix-configuration-log-file guix-configuration-environment @@ -1739,6 +1742,35 @@ (define acl-file #$%acl-file) ;; Installed the declared ACL. (symlink #+default-acl acl-file)))) +(define %default-channels-file + ;; File-like object containing the default list of channels. + (plain-file "channels.scm" + (with-output-to-string + (lambda _ + (pretty-print (map channel->code %default-channels)))))) + +;; FIXME: Should this gexp be built before boot, like +;; substitute-key-authorization does? +(define (install-channels-file channels-file) + "Return a gexp with code to install CHANNELS-FILE, a file-like object." + (with-imported-modules '((guix build utils)) + #~(begin + (use-modules (guix build utils)) + + ;; If channels.scm already exists, move it out of the way. Create a + ;; backup if it's a regular file: it's likely that the user + ;; manually defined it. + (if (file-exists? "/etc/guix/channels.scm") + (if (and (symbolic-link? "/etc/guix/channels.scm") + (store-file-name? (readlink "/etc/guix/channels.scm"))) + (delete-file "/etc/guix/channels.scm") + (rename-file "/etc/guix/channels.scm" + "/etc/guix/channels.scm.bak")) + (mkdir-p "/etc/guix")) + + ;; Installed the declared channels. + (symlink #+channels-file "/etc/guix/channels.scm")))) + (define %default-authorized-guix-keys ;; List of authorized substitute keys. (list (file-append guix "/share/guix/berlin.guix.gnu.org.pub") @@ -1763,6 +1795,8 @@ (define-record-type* (default %default-substitute-urls)) (generate-substitute-key? guix-configuration-generate-substitute-key? (default #t)) ;Boolean + (channels guix-configuration-channels ;file-like + (default %default-channels-file)) (chroot-directories guix-configuration-chroot-directories ;list of file-like/strings (default '())) (max-silent-time guix-configuration-max-silent-time ;integer @@ -1949,7 +1983,7 @@ (define (guix-accounts config) (define (guix-activation config) "Return the activation gexp for CONFIG." (match-record config - (guix generate-substitute-key? authorize-key? authorized-keys) + (guix generate-substitute-key? authorize-key? authorized-keys channels) #~(begin ;; Assume that the store has BUILD-GROUP as its group. We could ;; otherwise call 'chown' here, but the problem is that on a COW overlayfs, @@ -1963,7 +1997,9 @@ (define (guix-activation config) #$(if authorize-key? (substitute-key-authorization authorized-keys guix) - #~#f)))) + #~#f) + + #$(install-channels-file channels)))) (define-record-type* guix-extension make-guix-extension -- 2.39.2