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 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
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Reference in a new issue