aboutsummaryrefslogtreecommitdiff
(define-module (gn services bnw-container))

(use-modules (gnu)
             (gn packages bnw)
             (guix build utils)
             (guix records)
             (ice-9 match))
(use-service-modules networking web)
(use-package-modules base)

(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 "/srv/http"))
  (port             bnw-configuration-port          ; list of strings
                    (default '("8881"))))

(define bnw-activation
  (match-lambda
    (($ <bnw-configuration> package _ port)
     #~(begin
         (let ((genenet "/var/lib/genenet/bnw")
               (php-fpm-uid (passwd:uid (getpw "php-fpm")))
               (php-fpm-gid (passwd:gid (getpw "php-fpm"))))
           (mkdir-p genenet)
           (copy-recursively #$(file-append package "/var_lib_genenet_bnw") genenet)
           (for-each (lambda (file-name)
                       (make-file-writable file-name)
                       (chown file-name php-fpm-uid php-fpm-gid))
                     (find-files genenet
                                 #:directories? #t)))))))

(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 deploy-directory)
         (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")
  (timezone "Etc/UTC")
  (locale "en_US.utf8")

  (bootloader (bootloader-configuration
               (bootloader grub-bootloader)
               (targets '("does-not-matter"))))
  (file-systems %base-file-systems)
  ;; No firmware for VMs.
  (firmware '())
  ;; We don't need any packages inside the container.
  (packages (list coreutils))

  (services (list (service dhcp-client-service-type)
                  (service bnw-service-type
                           ;; The following is for testing:
                           ;(bnw-configuration
                           ;  (port '("8888")))
                           ))))

;; guix system container -L ~/workspace/guix-past/modules/ -L ~/workspace/guix-bioinformatics/ ~/workspace/guix-bioinformatics/gn/services/bnw-container.scm --network