about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--genenetwork-development.scm91
1 files changed, 61 insertions, 30 deletions
diff --git a/genenetwork-development.scm b/genenetwork-development.scm
index e4442ef..95c794d 100644
--- a/genenetwork-development.scm
+++ b/genenetwork-development.scm
@@ -64,6 +64,7 @@
              (guix packages)
              (guix profiles)
              (guix records)
+             (guix search-paths)
              (guix store)
              (guix utils)
              (forge acme)
@@ -453,15 +454,9 @@ server described by CONFIG, a <genenetwork-configuration> object."
                     (string-append (getcwd) "/genenetwork3"))
             ;; Set other environment variables required by
             ;; genenetwork2.
-            (setenv "SERVER_PORT" #$(number->string gn2-port))
             (setenv "GN2_PROFILE" #$(profile
                                      (content (package->development-manifest genenetwork2))
                                      (allow-collisions? #t)))
-            (setenv "GENENETWORK_FILES" #$genotype-files)
-            (setenv "HOME" "/tmp")
-            (setenv "NO_REDIS" "no-redis")
-            (setenv "RUST_BACKTRACE" "1")
-
             (setenv
              "GN2_SETTINGS"
              #$(mixed-text-file "gn2.conf"
@@ -582,30 +577,66 @@ described by CONFIG, a <genenetwork-configuration> object."
            (provision '(genenetwork2))
            ;; FIXME: The genenetwork2 service should depend on redis.
            (requirement '(networking genenetwork3))
-           (start #~(make-forkexec-constructor
-                     (list #$(least-authority-wrapper
-                              (program-file "genenetwork2"
-                                            (genenetwork2-cd-gexp config))
-                              #:name "genenetwork2-pola-wrapper"
-                              ;; If we mapped only the mysqld.sock
-                              ;; socket file, it would break when the
-                              ;; external mysqld server is restarted.
-                              #:mappings (list (file-system-mapping
-                                                (source genotype-files)
-                                                (target source))
-                                               (file-system-mapping
-                                                (source "/run/mysqld")
-                                                (target source)
-                                                (writable? #t))
-                                               (file-system-mapping
-                                                (source gn2-secrets)
-                                                (target source)
-                                                (writable? #t)))
-                              #:namespaces (delq 'net %namespaces))
-                           "127.0.0.1" #$(number->string gn2-port))
-                     #:user "genenetwork"
-                     #:group "genenetwork"
-                     #:log-file "/var/log/cd/genenetwork2.log"))
+           (modules '((guix search-paths)
+                      (ice-9 match)
+                      (srfi srfi-1)))
+           (start
+            (let* ((gn2-manifest (packages->manifest (list genenetwork2)))
+                   (gn2-profile (profile
+                                 (content gn2-manifest)
+                                 (allow-collisions? #t)))
+                   (gn2-settings
+                    `(("SERVER_PORT" ,(number->string gn2-port))
+                      ("GENENETWORK_FILES" ,genotype-files)
+                      ("HOME" "/tmp")
+                      ("LC_ALL" "en_US.UTF-8")
+                      ("NO_REDIS" "no-redis")
+                      ("RUST_BACKTRACE" "1"))))
+              (with-imported-modules (source-module-closure '((guix search-paths)))
+                #~(make-forkexec-constructor
+                   (list #$(least-authority-wrapper
+                            (program-file "genenetwork2"
+                                          (genenetwork2-cd-gexp config))
+                            #:name "genenetwork2-pola-wrapper"
+                            #:preserved-environment-variables
+                            (append (map first gn2-settings)
+                                    (map search-path-specification-variable
+                                         (manifest-search-paths gn2-manifest)))
+                            ;; If we mapped only the mysqld.sock
+                            ;; socket file, it would break when the
+                            ;; external mysqld server is restarted.
+                            #:mappings (list (file-system-mapping
+                                              (source genotype-files)
+                                              (target source))
+                                             (file-system-mapping
+                                              (source "/run/mysqld")
+                                              (target source)
+                                              (writable? #t))
+                                             (file-system-mapping
+                                              (source gn2-secrets)
+                                              (target source)
+                                              (writable? #t)))
+                            #:namespaces (delq 'net %namespaces))
+                         "127.0.0.1" #$(number->string gn2-port))
+                   #:user "genenetwork"
+                   #:group "genenetwork"
+                   #:environment-variables
+                   (append
+                    (map (match-lambda
+                           ((spec . value)
+                            (string-append (search-path-specification-variable spec)
+                                           "="
+                                           value)))
+                         (evaluate-search-paths
+                          (map sexp->search-path-specification
+                               '#$(map search-path-specification->sexp
+                                       (manifest-search-paths gn2-manifest)))
+                          (list #$gn2-profile)))
+                    (map (match-lambda
+                           ((spec value)
+                            (string-append spec "=" value)))
+                         '#$gn2-settings))
+                   #:log-file "/var/log/cd/genenetwork2.log"))))
            (stop #~(make-kill-destructor)))
           (shepherd-service
            (documentation "Run GeneNetwork 3 development server.")