From 7d8b95546ad7a90ccc9175e7a71a198f05f1b359 Mon Sep 17 00:00:00 2001 From: Efraim Flashner Date: Thu, 29 Apr 2021 12:45:22 +0300 Subject: gn: genome browser: nearly have the graph working. --- gn/packages/bioinformatics.scm | 57 +++++++++++++++----------- gn/services/genome-browser.scm | 92 +++++++++++++++++++++++++++++------------- 2 files changed, 98 insertions(+), 51 deletions(-) diff --git a/gn/packages/bioinformatics.scm b/gn/packages/bioinformatics.scm index b836ff0..3785b0f 100644 --- a/gn/packages/bioinformatics.scm +++ b/gn/packages/bioinformatics.scm @@ -54,6 +54,7 @@ #:use-module (gnu packages ruby) #:use-module (gnu packages shells) #:use-module (gnu packages statistics) + #:use-module (gnu packages tcl) #:use-module (gnu packages time) #:use-module (gnu packages tls) #:use-module (gnu packages vim) @@ -1601,13 +1602,25 @@ multiple sequence alignment.") (setenv "DOCUMENTROOT_USER" (string-append out "/html")) (setenv "BINDIR" (string-append out "/bin")) - ;; Now let's fix some errors + ;; Now let's fix some errors: (mkdir-p (string-append out "/cgi-bin")) (substitute* "inc/cgi_build_rules.mk" (("rm -f.*") "")) (substitute* (cons* "inc/cgi_build_rules.mk" (find-files "." "makefile")) (("CGI_BIN\\}-\\$\\{USER") "CGI_BIN_USER")) + ;; Force linking with freetype. + (substitute* "inc/common.mk" + (("libpng-config --ldflags") "pkg-config --libs libpng freetype2") + (("libpng-config --I_opts") "pkg-config --cflags-only-I libpng freetype2")) + ;; Force the trash location. + (substitute* (cons* + "utils/qa/showTracks" + "webBlat/webBlat.cfg" + "hg/js/hgTracks.js" + (find-files "." "\\.c$")) + ;; This line is specifically needed as-is. + (("\\.\\./trash") "/var/www/html/trash")) #t))) ;; Install happens during the 'build phase. @@ -1617,33 +1630,28 @@ multiple sequence alignment.") (lambda _ (invoke "make" "doc-install") #t)) - ;; TODO: Figure out how to make this configurable in the service. (add-after 'install 'create-hg-conf (lambda* (#:key outputs #:allow-other-keys) (let ((out (assoc-ref outputs "out"))) (with-output-to-file (string-append out "/cgi-bin/hg.conf") (lambda () (display - (string-append - "browser.documentRoot=" out "/html\n" - "db.host=gbdb\n" - "db.user=admin\n" - "db.password=admin\n" - "db.trackDb=trackDb\n" - "defaultGenome=Human\n" - "central.db=hgcentral\n" - "central.host=gbdb\n" - "central.user=admin\n" - "central.password=admin\n" - "central.domain=\n" - "backupcentral.db=hgcentral\n" - "backupcentral.host=gbdb\n" - "backupcentral.user=admin\n" - "backupcentral.password=admin\n" - "backupcentral.domain=\n")))) - #t)))))) + "include /var/lib/genome/hg.conf\n"))) + #t))) + (add-after 'install 'create-symlink + (lambda* (#:key outputs #:allow-other-keys) + (let ((out (assoc-ref outputs "out"))) + ;; Some trash locations are hardcoded as "../trash" + ;(symlink "/var/www/html/trash" + ; (string-append out "/trash")) + (symlink "../html" + (string-append out "/htdocs")) + #t))) + ))) (inputs - `(("libpng" ,libpng) + `( + ("freetype" ,freetype) + ("libpng" ,libpng) ("mysql:dev" ,mariadb "dev") ("mysql:lib" ,mariadb "lib") ("openssl" ,openssl) @@ -1651,10 +1659,11 @@ multiple sequence alignment.") ("python2" ,python-2) ("zlib" ,zlib))) (native-inputs - `(;("python" ,python) + `(("pkg-config" ,pkg-config) + ("python" ,python) ("rsync" ,rsync) ; For installing js files from the source checkout - ;("tcl" ,tcl) - ;("tcsh" ,tcsh) + ("tcl" ,tcl) + ("tcsh" ,tcsh) ("util-linux:lib" ,util-linux "lib") ("which" ,(@ (gnu packages base) which)))) (home-page "https://www.genome.ucsc.edu/") diff --git a/gn/services/genome-browser.scm b/gn/services/genome-browser.scm index 58c8e4a..7f7ffc0 100644 --- a/gn/services/genome-browser.scm +++ b/gn/services/genome-browser.scm @@ -1,30 +1,59 @@ ;; 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) - (gn packages bioinformatics) - ) -(use-service-modules web) + (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=gbdb\n" - "db.user=admin\n" - "db.password=admin\n" + "db.host=localhost\n" + "db.user=readonly\n" + "db.password=access\n" "db.trackDb=trackDb\n" - "defaultGenome=Human\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=gbdb\n" - "central.user=admin\n" - "central.password=admin\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=gbdb\n" - "backupcentral.user=admin\n" - "backupcentral.password=admin\n" - "backupcentral.domain=\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 @@ -42,13 +71,19 @@ (file-systems %base-file-systems) ;; No firmware for VMs (firmware '()) - (packages (cons* %base-packages)) + (packages (cons* mariadb ; for create-db script + %base-packages)) (services - (list (service httpd-service-type + (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* @@ -68,22 +103,25 @@ ScriptSock /var/run/cgid.sock XBitHack On DocumentRoot " ucsc-genome-browser "/html Alias /bin " ucsc-genome-browser "/bin - Alias /cgi-bin " ucsc-genome-browser "/cgi-bin - #Alias /cgi-bin/hg.conf " %hg.conf " # this doesn't seem to work + #Alias /cgi-bin " ucsc-genome-browser "/cgi-bin # causes cgi scripts to fail to render Alias /htdocs " ucsc-genome-browser "/htdocs - Options +Includes - SSILegacyExprParser on + Options +Includes +FollowSymLinks +Indexes + AllowOverride None + + Require all granted + SSILegacyExprParser on + - ScriptAlias /cgi-bin/ " ucsc-genome-browser "/cgi-bin/ + ScriptAlias /cgi-bin " ucsc-genome-browser "/cgi-bin AllowOverride None - Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch - #Order allow,deny - #Allow from all - SetHandler cgi-script + Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch +Includes +FollowSymlinks + Order allow,deny + #SetHandler cgi-script Require all granted + Allow from all @@ -94,6 +132,6 @@ ScriptSock /var/run/cgid.sock "))))))))) -;; guix system container -L /path/to/guix-past/modules/ -L /path/to/guix-bioinformatics/ /path/to/guix-bioinformatics/gn/services/genome-browser.scm --network -;; ALSO need to share in the external database +;; 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 -- cgit v1.2.3