services: guix: Add guix-build-coordinator-queue-builds-service-type.

* 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.
This commit is contained in:
Christopher Baines 2020-09-18 14:21:13 +01:00
parent 98ab323a24
commit c14714cbbf
No known key found for this signature in database
GPG Key ID: 5E28A33B0B84F577
2 changed files with 157 additions and 0 deletions

View File

@ -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

View File

@ -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