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:
		
							parent
							
								
									98ab323a24
								
							
						
					
					
						commit
						c14714cbbf
					
				
					 2 changed files with 157 additions and 0 deletions
				
			
		| 
						 | 
					@ -27880,6 +27880,51 @@ input store items aren't already available.
 | 
				
			||||||
@end table
 | 
					@end table
 | 
				
			||||||
@end deftp
 | 
					@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
 | 
					@subsubheading Guix Data Service
 | 
				
			||||||
The @uref{http://data.guix.gnu.org,Guix Data Service} processes, stores
 | 
					The @uref{http://data.guix.gnu.org,Guix Data Service} processes, stores
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -65,6 +65,18 @@
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            guix-build-coordinator-agent-service-type
 | 
					            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
 | 
					            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
 | 
					   guix-build-coordinator-agent-configuration-non-derivation-substitute-urls
 | 
				
			||||||
   (default #f)))
 | 
					   (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
 | 
					(define* (make-guix-build-coordinator-start-script database-uri-string
 | 
				
			||||||
                                                   allocation-strategy
 | 
					                                                   allocation-strategy
 | 
				
			||||||
                                                   pid-file
 | 
					                                                   pid-file
 | 
				
			||||||
| 
						 | 
					@ -360,6 +394,84 @@
 | 
				
			||||||
   (description
 | 
					   (description
 | 
				
			||||||
    "Run a Guix Build Coordinator agent.")))
 | 
					    "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
 | 
					;;; Guix Data Service
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Reference in a new issue