aboutsummaryrefslogtreecommitdiff
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.")