aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristopher Baines <mail@cbaines.net>2020-09-18 14:21:13 +0100
committerChristopher Baines <mail@cbaines.net>2020-10-05 18:10:48 +0100
commitc14714cbbfe9239410aec2ed73282192a64fbbdc (patch)
tree38d61c04d359e788e705221699e49a1ed5bc1b4d
parent98ab323a246df47610652eca81494c777b50c251 (diff)
downloadguix-build-coordinator.tar
guix-build-coordinator.tar.gz
services: guix: Add guix-build-coordinator-queue-builds-service-type.guix-build-coordinator
* gnu/services/guix.scm (<guix-build-coordinator-queue-builds-configuration>): New record type. (guix-build-coordinator-queue-builds-configuration, guix-build-coordinator-queue-builds-configuration?, guix-build-coordinator-queue-builds-configuration-package, guix-build-coordinator-queue-builds-configuration-user, guix-build-coordinator-queue-builds-coordinator, guix-build-coordinator-queue-builds-configuration-systems, guix-build-coordinator-queue-builds-configuration-system-and-targets, guix-build-coordinator-queue-builds-configuration-guix-data-service, guix-build-coordinator-queue-builds-configuration-processed-commits-file, guix-build-coordinator-queue-builds-shepherd-services, guix-build-coordinator-queue-builds-activation, guix-build-coordinator-queue-builds-account): New procedures. (guix-build-coordinator-queue-builds-service-type): New variable. * doc/guix.texi (Guix Services): Document it.
-rw-r--r--doc/guix.texi45
-rw-r--r--gnu/services/guix.scm112
2 files changed, 157 insertions, 0 deletions
diff --git a/doc/guix.texi b/doc/guix.texi
index a35b718a88..eed7bbec6e 100644
--- a/doc/guix.texi
+++ b/doc/guix.texi
@@ -27880,6 +27880,51 @@ input store items aren't already available.
@end table
@end deftp
+The Guix Build Coordinator package contains a script to query an
+instance of the Guix Data Service for derivations to build, and then
+submit builds for those derivations to the coordinator. The service
+type below assists in running this script. This is an additional tool
+that may be useful when building derivations contained within an
+instance of the Guix Data Service.
+
+@defvar {Scheme Variable} guix-build-coordinator-queue-builds-service-type
+Service type for the
+guix-build-coordinator-queue-builds-from-guix-data-service script. Its
+value must be a @code{guix-build-coordinator-queue-builds-configuration}
+object.
+@end defvar
+
+@deftp {Data Type} guix-build-coordinator-queue-builds-configuration
+Data type representing the options to the queue builds from guix data
+service script.
+
+@table @asis
+@item @code{package} (default: @code{guix-build-coordinator})
+The Guix Build Coordinator package to use.
+
+@item @code{user} (default: @code{"guix-build-coordinator-queue-builds"})
+The system user to run the service as.
+
+@item @code{coordinator} (default: @code{"http://localhost:8745"})
+The URI to use when connecting to the coordinator.
+
+@item @code{systems} (default: @code{#f})
+The systems for which to fetch derivations to build.
+
+@item @code{systems-and-targets} (default: @code{#f})
+An association list of system and target pairs for which to fetch
+derivations to build.
+
+@item @code{guix-data-service} (default: @code{"https://data.guix.gnu.org"})
+The Guix Data Service instance from which to query to find out about
+derivations to build.
+
+@item @code{processed-commits-file} (default: @code{"/var/cache/guix-build-coordinator-queue-builds/processed-commits"})
+A file to record which commits have been processed, to avoid needlessly
+processing them again if the service is restarted.
+
+@end table
+@end deftp
@subsubheading Guix Data Service
The @uref{http://data.guix.gnu.org,Guix Data Service} processes, stores
diff --git a/gnu/services/guix.scm b/gnu/services/guix.scm
index e4f5cf57b9..2b1b69589e 100644
--- a/gnu/services/guix.scm
+++ b/gnu/services/guix.scm
@@ -65,6 +65,18 @@
guix-build-coordinator-agent-service-type
+ guix-build-coordinator-queue-builds-configuration
+ guix-build-coordinator-queue-builds-configuration?
+ guix-build-coordinator-queue-builds-configuration-package
+ guix-build-coordinator-queue-builds-configuration-user
+ guix-build-coordinator-queue-builds-coordinator
+ guix-build-coordinator-queue-builds-configuration-systems
+ guix-build-coordinator-queue-builds-configuration-system-and-targets
+ guix-build-coordinator-queue-builds-configuration-guix-data-service
+ guix-build-coordinator-queue-builds-configuration-processed-commits-file
+
+ guix-build-coordinator-queue-builds-service-type
+
<guix-data-service-configuration>
guix-data-service-configuration
guix-data-service-configuration?
@@ -137,6 +149,28 @@
guix-build-coordinator-agent-configuration-non-derivation-substitute-urls
(default #f)))
+(define-record-type* <guix-build-coordinator-queue-builds-configuration>
+ guix-build-coordinator-queue-builds-configuration
+ make-guix-build-coordinator-queue-builds-configuration
+ guix-build-coordinator-queue-builds-configuration?
+ (package guix-build-coordinator-queue-builds-configuration-package
+ (default guix-build-coordinator))
+ (user guix-build-coordinator-queue-builds-configuration-user
+ (default "guix-build-coordinator-queue-builds"))
+ (coordinator guix-build-coordinator-queue-builds-coordinator
+ (default "http://localhost:8745"))
+ (systems guix-build-coordinator-queue-builds-configuration-systems
+ (default #f))
+ (systems-and-targets
+ guix-build-coordinator-queue-builds-configuration-system-and-targets
+ (default #f))
+ (guix-data-service
+ guix-build-coordinator-queue-builds-configuration-guix-data-service
+ (default "https://data.guix.gnu.org"))
+ (processed-commits-file
+ guix-build-coordinator-queue-builds-configuration-processed-commits-file
+ (default "/var/cache/guix-build-coordinator-queue-builds/processed-commits")))
+
(define* (make-guix-build-coordinator-start-script database-uri-string
allocation-strategy
pid-file
@@ -360,6 +394,84 @@
(description
"Run a Guix Build Coordinator agent.")))
+(define (guix-build-coordinator-queue-builds-shepherd-services config)
+ (match-record config <guix-build-coordinator-queue-builds-configuration>
+ (package user coordinator systems systems-and-targets
+ guix-data-service processed-commits-file)
+ (list
+ (shepherd-service
+ (documentation "Guix Build Coordinator queue builds from Guix Data Service")
+ (provision '(guix-build-coordinator-queue-builds))
+ (requirement '(networking))
+ (start
+ #~(make-forkexec-constructor
+ (list
+ #$(file-append
+ package
+ "/bin/guix-build-coordinator-queue-builds-from-guix-data-service")
+ #$(string-append "--coordinator=" coordinator)
+ #$@(map (lambda (system)
+ (string-append "--system=" system))
+ (or systems '()))
+ #$@(map (match-lambda
+ ((system . target)
+ (string-append "--system-and-target=" system "=" target)))
+ (or systems-and-targets '()))
+ #$@(if guix-data-service
+ #~(#$(string-append "--guix-data-service=" guix-data-service))
+ #~())
+ #$@(if processed-commits-file
+ #~(#$(string-append "--processed-commits-file="
+ processed-commits-file))
+ #~()))
+ #:user #$user
+ #:pid-file "/var/run/guix-build-coordinator-queue-builds/pid"
+ #:environment-variables
+ `(,(string-append
+ "GUIX_LOCPATH=" #$glibc-utf8-locales "/lib/locale")
+ "LC_ALL=en_US.utf8")
+ #:log-file "/var/log/guix-build-coordinator/queue-builds.log"))
+ (stop #~(make-kill-destructor))))))
+
+(define (guix-build-coordinator-queue-builds-activation config)
+ #~(begin
+ (use-modules (guix build utils))
+
+ (mkdir-p "/var/log/guix-build-coordinator")
+
+ ;; Allow writing the PID file
+ (mkdir-p "/var/run/guix-build-coordinator-queue-builds")
+ (chown "/var/run/guix-build-coordinator-queue-builds"
+ (passwd:uid %user)
+ (passwd:gid %user))))
+
+(define (guix-build-coordinator-queue-builds-account config)
+ (list (user-account
+ (name (guix-build-coordinator-queue-builds-configuration-user config))
+ (group "nogroup")
+ (system? #t)
+ (comment "Guix Build Coordinator queue-builds user")
+ (home-directory "/var/empty")
+ (shell (file-append shadow "/sbin/nologin")))))
+
+(define guix-build-coordinator-queue-builds-service-type
+ (service-type
+ (name 'guix-build-coordinator-queue-builds)
+ (extensions
+ (list
+ (service-extension shepherd-root-service-type
+ guix-build-coordinator-queue-builds-shepherd-services)
+ (service-extension activation-service-type
+ guix-build-coordinator-queue-builds-activation)
+ (service-extension account-service-type
+ guix-build-coordinator-queue-builds-account)))
+ (description
+ "Run the guix-build-coordinator-queue-builds-from-guix-data-service
+script.
+
+This is a script to assist in having the Guix Build Coordinator build
+derivations stored in an instance of the Guix Data Service.")))
+
;;;
;;; Guix Data Service