aboutsummaryrefslogtreecommitdiff
path: root/gn/services
diff options
context:
space:
mode:
Diffstat (limited to 'gn/services')
-rw-r--r--gn/services/ratspub-container.scm94
-rw-r--r--gn/services/ratspub.service13
2 files changed, 107 insertions, 0 deletions
diff --git a/gn/services/ratspub-container.scm b/gn/services/ratspub-container.scm
new file mode 100644
index 0000000..c026247
--- /dev/null
+++ b/gn/services/ratspub-container.scm
@@ -0,0 +1,94 @@
+(define-module (gn services ratspub-container))
+
+(use-modules (gnu)
+ (gn packages ratspub)
+ (gn packages bioinformatics)
+ (guix modules)
+ (guix records)
+ (ice-9 match))
+(use-service-modules networking shepherd)
+(use-package-modules certs)
+
+(define-record-type* <ratspub-configuration>
+ ratspub-configuration
+ make-ratspub-configuration
+ ratspub-configuration?
+ (package ratspub-configuration-package ; package
+ (default ratspub))
+ (deploy-directory ratspub-configuration-deploy-directory
+ (default "/srv/http")))
+
+(define ratspub-activation
+ (match-lambda
+ (($ <ratspub-configuration> package deploy-directory)
+ #~(begin
+ (use-modules (guix build utils))
+ (when (directory-exists? #$deploy-directory)
+ ;; Not 'delete-file-recursively' because the directory might be empty.
+ (and (string-append #$coreutils "/bin/rm" "-r " #$deploy-directory "/*")
+ (delete-file #$deploy-directory)))
+ (mkdir-p #$deploy-directory)
+ (copy-recursively #$package #$deploy-directory)))))
+
+(define ratspub-shepherd-service
+ (match-lambda
+ (($ <ratspub-configuration> package deploy-directory)
+ (with-imported-modules (source-module-closure
+ '((gnu build shepherd)
+ (gnu system file-systems)))
+ (list (shepherd-service
+ (provision '(ratspub))
+ (requirement '(networking))
+ (modules '((gnu build shepherd)
+ (gnu system file-systems)))
+ (start #~(make-forkexec-constructor
+ '("./server.py")
+ #:directory "/srv/http"
+ #:environment-variables
+ '("EDIRECT_PUBMED_MASTER=/export2/PubMed"
+ "NLTK_DATA=/export2/PubMed/nltk_data"
+ "PERL_LWP_SSL_CA_FILE=/run/current-system/profile/etc/ssl/certs/ca-certificates.crt"
+ ;"PATH=/run/current-system/profile/bin"
+ )
+ #:mappings (list (file-system-mapping
+ (source "/export2/PubMed")
+ (target source)
+ (writable? #t))
+ )
+ ))
+ (stop #~(make-kill-destructor))))))))
+
+(define ratspub-service-type
+ (service-type
+ (name 'ratspub)
+ (extensions
+ (list
+ (service-extension activation-service-type
+ ratspub-activation)
+ (service-extension shepherd-root-service-type
+ ratspub-shepherd-service)
+ ;; Make sure RatsPub doesn't get garbage collected.
+ (service-extension profile-service-type
+ (compose list ratspub-configuration-package))))
+ (default-value (ratspub-configuration))
+ (description
+ "Run a RatsPub Webserver.")))
+
+(operating-system
+ ;(host-name "ratspub")
+ (host-name "penguin2") ; hardcoded in ratspub.py
+ (timezone "Etc/UTC")
+ (locale "en_US.utf8")
+
+ (bootloader (bootloader-configuration
+ (bootloader grub-bootloader)
+ (target "does-not-matter")))
+ (file-systems %base-file-systems)
+ ;; No firmware for VMs.
+ (firmware '())
+ ;; We don't need any packages inside the container.
+ ;(packages '())
+ (packages (list edirect-gn sed nss-certs))
+
+ (services (list (service dhcp-client-service-type)
+ (service ratspub-service-type))))
diff --git a/gn/services/ratspub.service b/gn/services/ratspub.service
new file mode 100644
index 0000000..91b9509
--- /dev/null
+++ b/gn/services/ratspub.service
@@ -0,0 +1,13 @@
+[Unit]
+Description=Rats.pub web server
+
+[Service]
+ExecStart=/home/gn-rshiny/run_ratspub.sh
+#WorkingDirectory=/home/gn-shiny/ratspub
+#ExecStartPre='/bin/cp -r $(/var/guix/profiles/per-user/efraimf/current-guix/bin/guix build ratspub)/* /home/gn-shiny/ratspub'
+#ExecStop='/bin/rm -rf /home/gn-shiny/ratspub/*'
+Environment="EDIRECT_PUBMED_MASTER=/export2/PubMed" "NLTK_DATA=/export2/PubMed/nltk_data" "PERL_LWP_SSL_CA_FILE=/etc/ssl/certs/ca-certificates.crt"
+Restart=always
+
+[Install]
+WantedBy=multi-user.target