summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--doc/guix.texi2
-rw-r--r--gnu/packages/package-management.scm94
-rw-r--r--gnu/services/guix.scm2
3 files changed, 96 insertions, 2 deletions
diff --git a/doc/guix.texi b/doc/guix.texi
index b72a3d1263..1d3dc424ae 100644
--- a/doc/guix.texi
+++ b/doc/guix.texi
@@ -33067,7 +33067,7 @@ Service type for a Guix Build Coordinator agent.  Its value must be a
 Data type representing the configuration a Guix Build Coordinator agent.
 
 @table @asis
-@item @code{package} (default: @code{guix-build-coordinator})
+@item @code{package} (default: @code{guix-build-coordinator-agent-only})
 The Guix Build Coordinator package to use.
 
 @item @code{user} (default: @code{"guix-build-coordinator-agent"})
diff --git a/gnu/packages/package-management.scm b/gnu/packages/package-management.scm
index 8dae9b2d2a..763d91b5df 100644
--- a/gnu/packages/package-management.scm
+++ b/gnu/packages/package-management.scm
@@ -1366,6 +1366,100 @@ potentially many machines, and with doing something with the results and
 outputs of those builds.")
       (license license:gpl3+))))
 
+(define-public guix-build-coordinator/agent-only
+  (package
+    (inherit guix-build-coordinator)
+    (name "guix-build-coordinator-agent-only")
+    (arguments
+     `(#:modules (((guix build guile-build-system)
+                   #:select (target-guile-effective-version))
+                  ,@%gnu-build-system-modules)
+       #:imported-modules ((guix build guile-build-system)
+                           ,@%gnu-build-system-modules)
+       #:phases
+       (modify-phases %standard-phases
+         (add-before 'build 'set-GUILE_AUTO_COMPILE
+           (lambda _
+             ;; To avoid warnings relating to 'guild'.
+             (setenv "GUILE_AUTO_COMPILE" "0")
+             #t))
+         (add-after 'install 'wrap-executable
+           (lambda* (#:key inputs outputs target #:allow-other-keys)
+             (let* ((out (assoc-ref outputs "out"))
+                    (bin (string-append out "/bin"))
+                    (guile (assoc-ref inputs "guile"))
+                    (version (target-guile-effective-version))
+                    (scm (string-append out "/share/guile/site/" version))
+                    (go  (string-append out "/lib/guile/" version "/site-ccache")))
+               (for-each
+                (lambda (file)
+                  (simple-format (current-error-port) "wrapping: ~A\n" file)
+                  (let ((guile-inputs (list
+                                       "guile-json"
+                                       "guile-gcrypt"
+                                       "guix"
+                                       "guile-prometheus"
+                                       "guile-lib"
+                                       "guile-lzlib"
+                                       "guile-zlib"
+                                       "guile-sqlite3"
+                                       "gnutls")))
+                    (wrap-program file
+                      `("PATH" ":" prefix (,bin))
+                      `("GUILE_LOAD_PATH" ":" prefix
+                        (,scm ,(string-join
+                                (map (lambda (input)
+                                       (simple-format
+                                        #f "~A/share/guile/site/~A"
+                                        (assoc-ref inputs input)
+                                        version))
+                                     guile-inputs)
+                                ":")))
+                      `("GUILE_LOAD_COMPILED_PATH" ":" prefix
+                        (,go ,(string-join
+                               (map (lambda (input)
+                                      (simple-format
+                                       #f "~A/lib/guile/~A/site-ccache"
+                                       (assoc-ref inputs input)
+                                       version))
+                                    guile-inputs)
+                               ":"))))))
+                (find-files bin)))
+             #t))
+         (delete 'strip))))             ; As the .go files aren't compatible
+    (native-inputs
+     (list pkg-config
+           autoconf
+           automake
+           gnutls
+
+           ;; Guile libraries are needed here for cross-compilation.
+           guile-json-4
+           guile-gcrypt
+           guix
+           guile-prometheus
+           guile-lib
+           (first (assoc-ref (package-native-inputs guix) "guile"))))
+    (inputs
+     (list (first (assoc-ref (package-native-inputs guix) "guile"))
+           bash-minimal))
+    (propagated-inputs
+     (append
+         (list guile-prometheus
+               guile-gcrypt
+               guile-json-4
+               guile-lib
+               guile-lzlib
+               guile-zlib
+               guix
+               gnutls)))
+    (description
+     "The Guix Build Coordinator helps with performing lots of builds across
+potentially many machines, and with doing something with the results and
+outputs of those builds.
+
+This package just includes the agent component.")))
+
 (define-public guix-jupyter
   (package
     (name "guix-jupyter")
diff --git a/gnu/services/guix.scm b/gnu/services/guix.scm
index a5ed28647f..afaf8e0070 100644
--- a/gnu/services/guix.scm
+++ b/gnu/services/guix.scm
@@ -146,7 +146,7 @@
   make-guix-build-coordinator-agent-configuration
   guix-build-coordinator-agent-configuration?
   (package             guix-build-coordinator-agent-configuration-package
-                       (default guix-build-coordinator))
+                       (default guix-build-coordinator-agent-only))
   (user                guix-build-coordinator-agent-configuration-user
                        (default "guix-build-coordinator-agent"))
   (coordinator         guix-build-coordinator-agent-configuration-coordinator