[PATCH] gnu: guix-configuration: Improve offload build-machines.

  • Done
  • quality assurance status badge
Details
2 participants
  • Ian Eure
  • Ludovic Courtès
Owner
unassigned
Submitted by
Ian Eure
Severity
normal
I
I
Ian Eure wrote on 7 Apr 21:20 +0200
(address . guix-patches@gnu.org)(name . Ian Eure)(address . ian@retrospec.tv)
7d5b40b2df8b68e1aafc881080680824e6655460.1712517547.git.ian@retrospec.tv
It’s currently difficult to programmatically add a build-machine, because the
`service-extension' mechanism is the only facility which can do that. It
relies on the `guix-service-type', ala:

(service-extension guix-service-type
(guix-extension (build-machines (list ...))))

...but `guix-service-type' is already instantiated as part of
`%base-services', and replacing it may lose other configuration, like
substitute servers and authorized keys.

Additionally, a default value of `#f' for the build-machines field requires
guarding uses of the field with:

(or (guix-build-machines config) '())

Changing the default to be the empty list avoids that. One can now add
build-machines with code such as:

(modify-services %base-services
(guix-service-type
config =>
(guix-configuration
(inherit config)
(authorized-keys
(cons %build-machine-key
(guix-configuration-authorized-keys config)))
(build-machines (cons #~(build-machine ...)
(guix-configuration-build-machines config))))))

* gnu/services/base.scm (guix-configuration): Rename `guix-build-machines' to
`guix-configuration-build-machines' and export it. Change the default from
`#f' to the empty list.
* gnu/services/base.scm (guix-activation): Update the build-machines test and
reverse the conditions.

Change-Id: I6780c6a5579fd9d4b4f22ee2b2bf7ba7a0454407
---
gnu/services/base.scm | 15 ++++++++-------
1 file changed, 8 insertions(+), 7 deletions(-)

Toggle diff (53 lines)
diff --git a/gnu/services/base.scm b/gnu/services/base.scm
index 3f912225a0..5cf6083821 100644
--- a/gnu/services/base.scm
+++ b/gnu/services/base.scm
@@ -212,6 +212,7 @@ (define-module (gnu services base)
guix-configuration-guix
guix-configuration-build-group
guix-configuration-build-accounts
+ guix-configuration-build-machines
guix-configuration-authorize-key?
guix-configuration-authorized-keys
guix-configuration-use-substitutes?
@@ -1848,8 +1849,8 @@ (define-record-type* <guix-configuration>
(default #f))
(tmpdir guix-tmpdir ;string | #f
(default #f))
- (build-machines guix-build-machines ;list of gexps | #f
- (default #f))
+ (build-machines guix-configuration-build-machines ;list of gexps | '()
+ (default '()))
(environment guix-configuration-environment ;list of strings
(default '())))
@@ -2044,10 +2045,10 @@ (define (guix-activation config)
#$(and channels (install-channels-file channels))
;; ... and /etc/guix/machines.scm.
- #$(if (guix-build-machines config)
+ #$(if (null? (guix-configuration-build-machines config))
+ #~#f
(guix-machines-files-installation
- #~(list #$@(guix-build-machines config)))
- #~#f))))
+ #~(list #$@(guix-configuration-build-machines config)))))))
(define-record-type* <guix-extension>
guix-extension make-guix-extension
@@ -2093,9 +2094,9 @@ (define guix-service-type
(substitute-urls (append (guix-extension-substitute-urls extension)
(guix-configuration-substitute-urls config)))
(build-machines
- (and (or (guix-build-machines config)
+ (and (or (guix-configuration-build-machines config)
(pair? (guix-extension-build-machines extension)))
- (append (or (guix-build-machines config) '())
+ (append (guix-configuration-build-machines config)
(guix-extension-build-machines extension))))
(chroot-directories
(append (guix-extension-chroot-directories extension)

base-commit: ab3731d255ff1ac8d6874bc0f68ad94f21f08e79
--
2.41.0
L
L
Ludovic Courtès wrote 4 days ago
(name . Ian Eure)(address . ian@retrospec.tv)(address . 70263-done@debbugs.gnu.org)
87r0ehsdpg.fsf@gnu.org
Hi Ian,

Ian Eure <ian@retrospec.tv> skribis:

Toggle quote (36 lines)
> It’s currently difficult to programmatically add a build-machine, because the
> `service-extension' mechanism is the only facility which can do that. It
> relies on the `guix-service-type', ala:
>
> (service-extension guix-service-type
> (guix-extension (build-machines (list ...))))
>
> ...but `guix-service-type' is already instantiated as part of
> `%base-services', and replacing it may lose other configuration, like
> substitute servers and authorized keys.
>
> Additionally, a default value of `#f' for the build-machines field requires
> guarding uses of the field with:
>
> (or (guix-build-machines config) '())
>
> Changing the default to be the empty list avoids that. One can now add
> build-machines with code such as:
>
> (modify-services %base-services
> (guix-service-type
> config =>
> (guix-configuration
> (inherit config)
> (authorized-keys
> (cons %build-machine-key
> (guix-configuration-authorized-keys config)))
> (build-machines (cons #~(build-machine ...)
> (guix-configuration-build-machines config))))))
>
> * gnu/services/base.scm (guix-configuration): Rename `guix-build-machines' to
> `guix-configuration-build-machines' and export it. Change the default from
> `#f' to the empty list.
> * gnu/services/base.scm (guix-activation): Update the build-machines test and
> reverse the conditions.

That makes a lot of sense to me. Applied, thanks!

Ludo’.
Closed
?