aboutsummaryrefslogtreecommitdiff
path: root/gn/services/genome-browser.scm
blob: 7f7ffc0ed337bfc760a49ff4bca928d7bb0d75fd (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
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
;; See dockerfile for some clarification about choices:
;; https://github.com/icebert/docker_ucsc_genome_browser/blob/master/Dockerfile
;; http://genome.ucsc.edu/goldenPath/help/mirrorManual.html
(define-module (gn services genome-browser))

(use-modules (gnu)
             (guix packages)
             (gn packages bioinformatics))
(use-service-modules
  databases
  web)
(use-package-modules
  bash
  databases
  ghostscript
  wget)

(define %hg.conf
  (mixed-text-file "hg.conf"
                   "browser.documentRoot=" ucsc-genome-browser "/html\n"
                   "db.host=localhost\n"
                   "db.user=readonly\n"
                   "db.password=access\n"
                   "db.trackDb=trackDb\n"
                   "gbdbLoc1=/gbdb/\n"
                   "gbdbLoc2=http://hgdownload.soe.ucsc.edu/gbdb/\n"
                   ;# To disable on-the-fly loading of mysql data, comment out these lines.
                   "slow-db.host=genome-mysql.soe.ucsc.edu\n"
                   "slow-db.user=genomep\n"
                   "slow-db.password=password\n"
                   "defaultGenome=Mouse\n"
                   "central.db=hgcentral\n"
                   "central.host=localhost\n"
                   "central.socket=/run/mysqld/mysqld.sock\n"   ; default for mysql service
                   "central.user=readwrite\n"
                   "central.password=update\n"
                   "central.domain=\n"
                   "backupcentral.db=hgcentral\n"
                   "backupcentral.host=localhost\n"
                   "backupcentral.user=readwrite\n"
                   "backupcentral.password=update\n"
                   "backupcentral.domain=\n"
                   "freeType=on\n"
                   "freeTypeDir=" gs-fonts "/share/fonts/type1/ghostscript\n"
                   "hgc.ghostscriptPath=" ghostscript "/bin/gs\n"   ; needed?
                   ))

(define %startup-script
  (mixed-text-file "create_databases.sh"
                   wget "/bin/wget http://hgdownload.soe.ucsc.edu/admin/hgcentral.sql\n"
                   bash-minimal "/bin/sh " (package-source ucsc-genome-browser) "/src/product/ex.MySQLUserPerms.sh\n"
                   mariadb "/bin/mysql -e \"create database hgcentral;\" mysql\n"
                   mariadb "/bin/mysql hgcentral < hgcentral.sql\n"
                   coreutils-minimal "/bin/mkdir -p /var/www/html/trash\n"
                   coreutils-minimal "/bin/chown -R httpd:httpd /var/www\n"
                   ))

;; TODO: create 'daily clean' mcron scripts.
;;       /var/www/html/trash needs to be created and owned by httpd:httpd

(define ucsc-genome-browser-port 4321)

(operating-system
  (host-name "genome-browser")
  (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 '())
  (packages (cons* mariadb  ; for create-db script
                   %base-packages))
  (services
    (list (service mysql-service-type)
          (service special-files-service-type
                   `(("/root/create_hgcentral" ,%startup-script)
                     ("/var/lib/genome/hg.conf" ,%hg.conf)))
          (service httpd-service-type
                   (httpd-configuration
                     (config
                       (httpd-config-file
                         (document-root (file-append ucsc-genome-browser "/html"))
                         (server-name "Genome_Browser")
                         (listen (list (number->string ucsc-genome-browser-port)))
                         (modules
                           (cons*
                             (httpd-module
                               (name "cgid_module")
                               (file "modules/mod_cgid.so"))
                             (httpd-module
                               (name "include_module")
                               (file "modules/mod_include.so"))
                             %default-httpd-modules))
                         (extra-config (list "\
TypesConfig etc/httpd/mime.types
# cgid.sock needs to be creatable, not in the store
ScriptSock /var/run/cgid.sock
# same as 'listen' above
<VirtualHost *:" (number->string ucsc-genome-browser-port) ">
  XBitHack On
  DocumentRoot " ucsc-genome-browser "/html
  Alias /bin " ucsc-genome-browser "/bin
  #Alias /cgi-bin " ucsc-genome-browser "/cgi-bin   # causes cgi scripts to fail to render
  Alias /htdocs " ucsc-genome-browser "/htdocs
  <Directory " ucsc-genome-browser "/html>
    Options +Includes +FollowSymLinks +Indexes
    AllowOverride None
    <IfModule mod_authz_host.c>
      Require all granted
      SSILegacyExprParser on
    </IfModule>
  </Directory>

  ScriptAlias /cgi-bin " ucsc-genome-browser "/cgi-bin
  <Directory " ucsc-genome-browser "/cgi-bin>
    AllowOverride None
    Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch +Includes +FollowSymlinks
    Order allow,deny
    #SetHandler cgi-script
    Require all granted
    Allow from all
  </Directory>

  <Directory /var/www/html/trash>
    Options MultiViews
    AllowOverride None
    Order allow,deny
    Allow from all
  </Directory>
</VirtualHost>")))))))))

;; guix system container -L /path/to/guix-past/modules/ -L /path/to/guix-bioinformatics/ /path/to/guix-bioinformatics/gn/services/genome-browser.scm --network ;--expose=/path/to/gbdb=/gbdb
;; ALSO need to share in the external database?
;; xdg-open http://localhost:4321