JBrowse 总结

当没有得到结果的时候,总是战战兢兢。得到结果之后,逻辑一下子就很清晰。

  1. 下载JBrowse最新版本,我用的是 1.16.3
  2. web服务器,用Nginx。(用 Apache,建立 VCF track 会出错)^question

安装 JBrowse

./setup.sh这一步需要安装很多perl依赖库,如果报错,查看setup.log文件,应该是一些 perl 模块没有安装。如:

! Installing GD failed. See /root/.cpanm/work/1551106022.8560/build.log for details. Retry with –force to force install it.
Searching XML::LibXML (0) on cpanmetadb …
Already tried XML-LibXML-2.0134. Skipping.
! Installing the dependencies failed: Module ‘XML::LibXML’ is not installed, Module ‘XML::LibXML::Reader’ is not installed, Module ‘GD’ is not install
ed, Module ‘DBI’ is not installed, Module ‘DB_File’ is not installed
! Bailing out the installation for BioPerl-1.7.5.
Searching JSON::XS (0) on cpanmetadb …
Unpacking JSON-XS-4.01.tar.gz
FAIL

官方文档说,运行./setup.sh 的时候不要是 root 或使用 sudo。(和安装目录有关?)这可能是之前安装失败的原因。

Run the automated-setup script, ./setup.sh, which will attempt to install all of JBrowse’s (modest) prerequisites for you in the jbrowse/ directory itself. Note that setup.sh should not be run as root or with sudo.^1

安装Nginx

yum install nginx

1
2
3
sudo systemctl stop httpd.service # 因为之前有apache服务器,所以要先停掉
sudo yum install nginx # 安装
systemctl start nginx.service # 启动

如果你的服务器正在运行防火墙,请运行下列命令以允许它进行 HTTP 和 HTTPS 通信:

https://www.jianshu.com/p/a482a0f8adfd

1
2
3
sudo firewall-cmd --permanent --zone=public --add-service=http
sudo firewall-cmd --permanent --zone=public --add-service=https
sudo firewall-cmd --reload

两个 perl 版本的问题,从报错信息知 JBrowse 用的是 perl 5.16.3,即 /usr/bin/perl。系统默认的 perl 是 conda 安装的 perl。

Can’t locate local/lib.pm in @INC (@INC contains: /var/www/html/JBrowse-1.16.3/bin/../src/perl5/../../extlib/lib/perl5/5.16.3/x86_64-linux-thread-multi /var/www/html/JBrowse-1.16.3/bin/../src/perl5/../../extlib/lib/perl5/5.16.3 /var/www/html/JBrowse-1.16.3/bin/../src/perl5/../../extlib/lib/perl5/x86_64-linux-thread-multi /var/www/html/JBrowse-1.16.3/bin/../src/perl5/../../extlib/lib/perl5 /var/www/html/JBrowse-1.16.3/bin/../src/perl5 /usr/local/lib64/perl5 /usr/local/share/perl5 /usr/lib64/perl5/vendor_perl /usr/share/perl5/vendor_perl /usr/lib64/perl5 /usr/share/perl5 .) at /var/www/html/JBrowse-1.16.3/bin/../src/perl5/JBlibs.pm line 25.
Compilation failed in require at bin/prepare-refseqs.pl line 5.
BEGIN failed–compilation aborted at bin/prepare-refseqs.pl line 5

解决上面的问题,可以直接copy 一份。(不知道家目录下的 perl5 文件夹是什么时候生成的?)

1
2
3
4
5
6
7
locate local/lib.pm
cp -r /home/qi/perl5/lib/perl5/local /var/www/html/JBrowse-1.16.3/bin/../src/perl5/../../extlib/lib/perl5/5.16.3

# 运行示例
sudo bin/prepare-refseqs.pl --fasta docs/tutorial/data_files/volvox.fa --out sample_data/json/volvox

sudo bin/prepare-refseqs.pl --fasta sample_data/raw/yeast_scaffolds/chr1.fa.gz --fasta sample_data/raw/yeast_scaffolds/chr2.fa.gzip --out sample_data/json/yeast/

柚子数据

准备参考序列和特征数据

所有track都生成在默认的data目录中

1
2
3
4
5
6
7
8
9
# 指定perl为/usr/bin/perl 

# seq trackList.json tracks.conf
/usr/bin/perl bin/prepare-refseqs.pl --fasta ~/data2/tan_rna/genome/HWB.chromosome.fa
# tracks
/usr/bin/perl bin/flatfile-to-json.pl --gff HWB.gene.models.gff3 --trackType CanvasFeatures --trackLabel HWBgff

# 建索引。生成 ./data/names
/usr/bin/perl bin/generate-names.pl

不指定会出现如下错误:

(base) [qi@localhost JBrowse-1.16.3]$ bin/flatfile-to-json.pl –help
perl: symbol lookup error: /var/www/html/JBrowse-1.16.3/bin/../src/perl5/../../extlib/lib/perl5/x86_64-linux-thread-multi/auto/JSON/XS/XS.so: undefined symbol: Perl_xs_apiversion_bootcheck

查资料

This type of error is almost always indicates you are loading a module that was installed using a different build of Perl.^stackoverflow

VCF tracks

http://jbrowse.org/docs/variants.html

VCF files used with the VCFTabix must be compressed with bgzip and indexed with tabix, both of which are part of the samtools package. This is usually done with commands like:

1
2
for i in *.vcf; do bgzip $i; done
for i in *.vcf.gz; do tabix -p vcf $i; done

安装好之后,我们将JBrowse-1.12.1下所有文件拷贝到网站根目录

1
sudo cp *  /usr/share/nginx/html

http://10.164.6.154

要添加其他物种,可重命名data文件夹

1
$ mv data xxx

下次再把另外一个基因组放进来时,bin目录下的脚本又会默认放到data目录,就不会发生混乱啦!

另外,如果你把JBrowse部署在内网,却想让外网访问到,而部署JBrowse的服务器又在防火墙后面的话,请一定要记得把jbrowse.conf加入到防火墙白名单,因为防火墙默认会把这种.conf结尾的文件屏蔽。^引自

所谓基因组浏览器就是通过这个工具查看基因组,具体包括参考基因组序列,哪个地方是外显子、那个地方是内含子等等功能。参考基因组就是一个fasta文件,哪个地方是外显子、哪个地方是内含子这些信息称之为特征,一般情况下NCBI、ENSEMBL等数据库都会提供GFF3格式的基因组特征文件。JBrowse支持GFF3, BED, FASTA, Wiggle, BigWig, BAM, VCF (with tabix), REST等众多数据格式,BAM, BigWig,VCF格式的数据可以不需要转换而直接使用。

其他相关的命令

一些关于防火墙的命令

1
2
3
4
firewall-cmd --state  # 查看状态,running
firewall-cmd --reload # 重启firewall
systemctl stop firewalld.service # 停止firewall
systemctl disable firewalld.service # 禁止firewall开机启动

查看历史记录

1
2
# awk去掉第一列,sed去掉行首空格
history | tail -n 40 | awk '{$1="";print $0}' | sed 's/^ *//'

conda 命令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
conda create --name bioinfo python=3.6    # 创建环境
conda list # 查看包
conda update --all # 更新所有包

# 查看环境
conda info -e
conda activate bioinfo
conda deactivate

# ERROR: This cross-compiler package contains no program
# https://github.com/conda/conda/issues/6600
conda list | grep gcc
# 需要超级用户权限
conda remove gcc_linux-64 gcc_impl_linux-64 binutils_linux-64 binutils_impl_linux-64

解决复制终端文本换行的问题

1
2
3
zcat HB-10-2_filtered.vcf.gz | sed -n '/#CHROM/='  # 输出行号
zcat HB-10-2_filtered.vcf.gz | head -n 42 > header.txt
# 文本编辑器打开会多一行,因为行末尾的换行符

JBrowse 参考

JBrowse Configuration Guide

Variant Tracks (VCF)

Troubleshooting

Browse基因浏览器介绍