about summary refs log tree commit diff
path: root/gn
diff options
context:
space:
mode:
Diffstat (limited to 'gn')
-rw-r--r--gn/packages/bnw.scm12
-rw-r--r--gn/services/bnw-README14
-rw-r--r--gn/services/bnw-container.scm88
3 files changed, 84 insertions, 30 deletions
diff --git a/gn/packages/bnw.scm b/gn/packages/bnw.scm
index f7e95e3..5b7131b 100644
--- a/gn/packages/bnw.scm
+++ b/gn/packages/bnw.scm
@@ -44,6 +44,9 @@
                (substitute* (find-files "." "\\.php")
                  (("HTTP_POST_VARS") "_POST")
                  (("HTTP_POST_FILES") "_FILES"))
+               ;; change $dir to a writable directory
+               ;(substitute* (find-files "sourcecodes" "\\.php$")
+               ;  (("\\$dir=\"./data") "$dir=\"./data/tmp"))
                #t))
            (add-after 'patch-source-shebangs 'patch-more-shebangs
              (lambda* (#:key inputs #:allow-other-keys)
@@ -84,6 +87,11 @@
                  (substitute* '("sourcecodes/build.sh"
                                 "downloads/BNW/src/build.sh")
                    (("./localscore/libRmath.so") (string-append rmath "/lib/libRmath.so")))
+                 (substitute* "sourcecodes/run.sh"
+                   (("rm ") (string-append (which "rm") " "))
+                   (("rmdir ") (string-append (which "rmdir") " "))
+                   (("mkdir ") (string-append (which "mkdir") " "))
+                   (("dirname ") (string-append (which "dirname")" ")))
                  ;(substitute* "sourcecodes/layout_cyto.php"
                  ;  (("https://cdnjs.cloudflare.com/ajax/libs/cytoscape/3.7.1/cytoscape.min.js")
                  ;   (string-append cyto js-path "cytoscape/cytoscape.min.js"))
@@ -127,8 +135,8 @@
                    (lambda (file)
                      (chmod file #o555))
                    (append (find-files out "\\.(sh|py)$")
-                           (find-files (string-append out "/sourcecodes/run_scripts" ".*"))
-                           ))
+                           (find-files (string-append out "/sourcecodes/run_scripts/" "."))))
+                 (chmod (string-append out "/sourcecodes/data") #o777) ; needs to be writable
                  #t)))
            (replace 'build
              (lambda _
diff --git a/gn/services/bnw-README b/gn/services/bnw-README
index 29cc816..ab7de53 100644
--- a/gn/services/bnw-README
+++ b/gn/services/bnw-README
@@ -1,10 +1,9 @@
 SETUP:
 
 The setup process works like this:
-$ guix build bnw
-$ mkdir -p /home/bnw/server/bnw
-$ cp -a $(guix build bnw)/* /home/bnw/server/bnw/
-$ chmod a+w /home/bnw/server -R
+$ guix pull
+$ cd guix-bioinformatics && git pull
+# systemctl enable --now bnw.service
 
 for testing changes to the container, you'll want to do the following (or thereabouts):
 $ guix system container gn/services/GN1-container.scm --share=/home/bnw/server=/srv/http --network
@@ -15,8 +14,5 @@ see included bnw.service
 
 for upgrades:
 $ guix pull
-$ rm -rf /home/bnw/server
-$ guix build bnw
-$ mkdir -p /home/bnw/server/bnw
-$ cp -a $(guix build bnw)/* /home/bnw/server/bnw/
-$ chmod a+w /home/bnw/server -R
+$ cd guix-bioinformatics && git pull
+# systemctl restart bnw.service
diff --git a/gn/services/bnw-container.scm b/gn/services/bnw-container.scm
index 13a9317..2e5e521 100644
--- a/gn/services/bnw-container.scm
+++ b/gn/services/bnw-container.scm
@@ -1,8 +1,69 @@
 (define-module (gn services bnw-container))
 
 (use-modules (gnu)
-             (gn packages bnw))
-(use-service-modules base networking web)
+             (gn packages bnw)
+             (guix records)
+             (ice-9 match))
+(use-service-modules networking web)
+
+(define-record-type* <bnw-configuration>
+  bnw-configuration
+  make-bnw-configuration
+  bnw-configuration?
+  (package          bnw-configuration-package       ; package
+                    (default bnw))
+  (deploy-directory bnw-deploy-directory            ; string
+                    (default "/home/bnw/server"))
+  (port             bnw-configuration-port          ; list of strings
+                    (default '("8880"))))
+
+(define bnw-activation
+  (match-lambda
+    (($ <bnw-configuration> package deploy-directory port)
+     #~(begin
+         (use-modules (guix build utils))
+         (when (directory-exists? #$deploy-directory)
+           (delete-file-recusively #$deploy-directory))
+         (mkdir-p #$deploy-directory)
+         (copy-recursively #$package #$deploy-directory)
+         (system* #$(file-append coreutils "/bin/chmod") "a+w"
+                  (string-append #$deploy-directory "/sourcecodes/data"))))))
+
+(define bnw-nginx-config
+  (match-lambda
+    (($ <bnw-configuration> package deploy-directory port)
+     (list
+       (nginx-server-configuration
+         (server-name '("Bayesian Network"))
+         (listen port)
+         ;(root package)
+         (root "/srv/http")
+         (locations
+           (list
+             (nginx-php-location)
+             ;(nginx-location-configuration
+             ;  (uri "/sourcecodes/data/")
+             ;  (body (list "alias /tmp/bnw/;")))
+             )))))))
+
+(define bnw-service-type
+  (service-type
+    (name 'bnw)
+    (extensions
+      (list
+        (service-extension activation-service-type
+                           bnw-activation)
+        (service-extension nginx-service-type
+                           bnw-nginx-config)
+        ;; Make sure BNW doesn't get garbage collected.
+        (service-extension profile-service-type
+                           (compose list bnw-configuration-package))
+        ;; Make sure php-fpm is instantiated.
+        (service-extension php-fpm-service-type
+                           (const #t))))
+    (default-value (bnw-configuration))
+    (description
+     "Run a Bayesian Network Webserver.")))
 
 (operating-system
   (host-name "bnw")
@@ -17,20 +78,9 @@
   (firmware '())
 
   (services (list (service dhcp-client-service-type)
-                  (service php-fpm-service-type)
-                  (service nginx-service-type
-                           (nginx-configuration
-                             (server-blocks
-                               (list
-                                 (nginx-server-configuration
-                                   (server-name '("Bayesian Network"))
-                                   (listen '("8888"))
-                                   (root bnw)
-                                   (locations
-                                     (list
-                                       (nginx-php-location)
-                                       (nginx-location-configuration
-                                         (uri "/sourcecodes/data/")
-                                         (body (list "alias /tmp/bnw/;")))
-                                       ))
-                                   ))))))))
+                  (service bnw-service-type
+                           ;; The following is for testing:
+                           ;(bnw-configuration
+                           ;  (deploy-directory "/home/efraimf/bnw")
+                           ;  (port '("8888")))
+                           ))))