blob: c026247166bafc40e318cb90f1b96ee47dbf8d0a (
about) (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
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))))
|