aboutsummaryrefslogtreecommitdiff
path: root/gn/services/genome-browser.scm
blob: 1a5b6784574f2cd37ce08349d0968ca251a973ca (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
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
;; 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
  networking
  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.psxyPath=/hive/data/outside/GMT4.3.1/bin/psxy"
                   ;"hgc.ps2rasterPath=""/bin/ps2raster"
                   "hgc.ghostscriptPath=" ghostscript "/bin/gs\n"   ; needed?
                   "udc.cacheDir=/var/www/html/trash/udcCache\n"    ; default is /tmp/udcCache
                   ))

(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.
;;  move /var/www/html/trash to /gbdb/trash?
;;  Fix from main page:
;;      hgVai
;;      hgIntegrator
;;  from 'more tools'
;;      hgPhyloPlace

(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 inetd-service-type
                   (inetd-configuration
                     (entries
                       (list
                         (inetd-entry
                           (node "127.0.0.1")
                           (name "blat")    ; yes, it's named blat
                           (socket-type 'stream)
                           (protocol "tcp") ; probably?
                           (wait? #f)
                           (user "httpd:httpd") ; or dedicated user. Needs write access.
                           (program (file-append ucsc-genome-browser "/bin/gfServer"))
                           (arguments
                             '("gfServer" "dynserver" "/gbdb")))))))
          (syslog-service)  ; needed by inetd
          (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
  #Alias /trash /var/www/html/trash # this is wrong
  Alias /var/www/html/trash /var/www/html/trash
  <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 --share=/path/to/gbdb=/gbdb
;; ALSO need to share in the external database?
;; Probably not, it falls back to http://hgdownload.soe.ucsc.edu/gbdb/
;; Can skip the %startup-script dance if /var/lib/mysql is stored outside of the container, but might need /var/www/html/trash too then.
;; xdg-open http://localhost:4321