aboutsummaryrefslogtreecommitdiff
path: root/gn/services/ratspub-container.scm
blob: c026247166bafc40e318cb90f1b96ee47dbf8d0a (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))))