SnpHub(主页:http://guoweilong.github.io/SnpHub/)是一款针对大规模基因组变异数据的数据库模型,提供在线的快速检索与轻量级的分析、可视化功能。目前,SnpHub已于GigaScience杂志在线发表(https://doi.org/10.1093/gigascience/giaa060)。本文将介绍SnpHub所需系统环境的配置方法和一些问题的解决方案。考虑到CentOS 7系统作为一款稳定可靠且开源免费的Linux发行版系统,在服务器中十分常见。同时,一些依赖项在CentOS 7上的配置较为复杂。因此,本文将以CentOS 7为系统环境进行介绍。
本文的方法在Docker镜像中(FROM centos:centos7
)成功配置了SnpHub所需的系统环境。在实际系统中,也经过的解决方案成功完成了配置。但考虑到系统环境的复杂性,在实际安装中,还请针对错误信息选择(搜索)相应的解决方案,并做好备份。
1. 环境配置
本节默认用户具有root权限。若非root用户,请在命令前添加sudo
(如sudo yum -y update
)。
1.1 yum安装的软件
yum -y update
yum -y install epel-release
yum -y update
yum -y install R
yum -y install libjpeg-turbo-devel
yum -y install openssl-devel
yum -y install libcurl-devel
# 安装后包含lwgeom,GEOS会用
yum -y install -y geos-devel
# R包udunits2会用到
yum -y install udunits2-devel
# R包RPostgreSQL会用
yum -y install postgresql-devel
# Proj.6会用到
yum -y install libsqlite3x-devel.x86_64
yum -y install wget
yum -y install curl
yum -y install bzip2
yum -y install ncurses-devel
yum -y install git
1.2 SAMtools工具组和seqkit
本小节及之后,会将压缩包下载至/tmpdownloads
目录。可将此目录替换为自己的临时目录/下载目录。
# 创建临时文件夹
# 可连同下述代码一起替换为自己的文件夹地址
mkdir /tmpdownloads
若完全按照本文安装,安装完成后,/tmpdownloads
目录可删除。
# SAMtools
cd /tmpdownloads/
wget -c https://github.com/samtools/samtools/releases/download/1.4/samtools-1.4.tar.bz2
tar jxvf samtools-1.4.tar.bz2
cd /tmpdownloads/samtools-1.4
./configure --prefix=/tmpdownloads/samtools-1.4
make && make install
# 编译好的二进制程序放到/usr/local/bin/中,以供命令行下直接调用
cp ./bin/samtools /usr/local/bin/
echo 'export PATH="/tmpdownloads/samtools-1.4/bin:$PATH" ' >>~/.bashrc
# 查看版本信息,正常显示证明安装完成
samtools
# BCFtools
cd /tmpdownloads/
wget -c https://github.com/samtools/bcftools/releases/download/1.8/bcftools-1.8.tar.bz2
tar jxvf bcftools-1.8.tar.bz2
cd /tmpdownloads/bcftools-1.8
./configure --prefix=/tmpdownloads/bcftools-1.8
make && make install
# 编译好的二进制程序放到/usr/local/bin/中,以供命令行下直接调用
cp ./bcftools /usr/local/bin/
echo 'export PATH="/tmpdownloads/samtools-1.4/bin:$PATH" ' >>~/.bashrc
# 查看版本信息,正常显示证明安装完成
bcftools
# tabix & bgzip
cd /tmpdownloads/
wget -c https://github.com/samtools/htslib/releases/download/1.6/htslib-1.6.tar.bz2
tar jxvf htslib-1.6.tar.bz2
cd /tmpdownloads/htslib-1.6
./configure --prefix=/tmpdownloads/htslib-1.6
make && make install
# 编译好的二进制程序放到/usr/local/bin/中,以供命令行下直接调用
cp ./bin/tabix /usr/local/bin/
# bgzip在数据预处理中可能用到
cp ./bin/bgzip /usr/local/bin/
echo 'export PATH="/tmpdownloads/htslib-1.6/bin:$PATH" ' >>~/.bashrc
# 查看版本信息,正常显示证明安装完成
tabix
# seqkit
cd /tmpdownloads/
wget -c https://github.com/shenwei356/seqkit/releases/download/v0.11.0/seqkit_linux_amd64.tar.gz
tar -zxvf seqkit_linux_amd64.tar.gz
# 解压完成直接就是二进制软件
cp seqkit /usr/local/bin/
1.3 PROJ6、GEOS和GDAL的安装
# PROJ
cd /tmpdownloads/
wget https://download.osgeo.org/proj/proj-6.2.1.tar.gz
tar -zxvf proj-6.2.1.tar.gz
wget https://download.osgeo.org/proj/proj-datumgrid-1.8.zip
# 该压缩包需要解压至proj-6.2.1/data/目录下
unzip -o proj-datumgrid-1.8.zip -d proj-6.2.1/data/
cd /tmpdownloads/proj-6.2.1
./configure && make && make install
# 安装完成后,下述命令查看`proj.4`的`.pc`文件路径是否在`$PKG_CONFIG_PATH`中。
echo $PKG_CONFIG_PATH
# 如不在,手动添加。(例中,编译后`.pc`文件绝对路径为/tmpdownloads/proj-6.2.1)
export PKG_CONFIG_PATH=/tmpdownloads/proj-6.2.1
# GEOS
cd /tmpdownloads/
wget http://download.osgeo.org/geos/geos-3.6.2.tar.bz2
tar -xjf geos-3.6.2.tar.bz2
cd /tmpdownloads/geos-3.6.2
./configure && make && make install
echo "/usr/local/lib" > /etc/ld.so.conf.d/libgeos-x86_64.conf
# relink to new gdal
# need to relogin R
ldconfig
# GDAL
cd /tmpdownloads/
wget http://download.osgeo.org/gdal/3.0.2/gdal302.zip
unzip gdal302.zip
cd /tmpdownloads/gdal-3.0.2
./configure && make && make install
echo "/usr/local/lib" > /etc/ld.so.conf.d/libgdal-x86_64.conf
# relink to new gdal
# need to relogin R
ldconfig
1.4 R包的安装
R -e "install.packages('shiny', repos='https://cran.rstudio.com/')"
R -e "install.packages('ggplot2', repos='https://cran.rstudio.com/')"
R -e "install.packages('ggmap', repos='https://cran.rstudio.com/')"
R -e "install.packages('crayon', repos='https://cran.rstudio.com/')"
R -e "install.packages('rjson', repos='https://cran.rstudio.com/')"
R -e "install.packages('udunits2', configure.args='--with-udunits2-include=/usr/include/udunits2/', repos='https://cran.rstudio.com/')"
R -e "install.packages('RPostgreSQL', dependencies=TRUE, repos='https://cran.rstudio.com/')"
R -e "install.packages('pegas', repos='https://cran.rstudio.com/')"
# 在2020.07.20的安装中,CRAN下架了本软件包,但仍可以下载旧版本。解决方案见第二节
R -e "install.packages('vcfR', repos='https://cran.rstudio.com/')"
R -e "install.packages('DT', repos='https://cran.rstudio.com/')"
R -e "install.packages('maps', repos='https://cran.rstudio.com/')"
1.5 Shiny-Server安装
官方安装教程:Download Shiny Server for Red Hat/CentOS 6+
官方配置教程:Shiny Server Professional v1.5.14 Administrator's Guide
wget https://download3.rstudio.org/centos6.3/x86_64/shiny-server-1.5.14.948-x86_64.rpm
sudo yum install --nogpgcheck shiny-server-1.5.14.948-x86_64.rpm
2. 奇怪问题的解决方案
上文的安装方法在Docker的环境配置中成功完成,但在另一次实际环境配置中出现了一些问题。本节记录了这些问题的解决方案。
/lib64/libstdc++.so.6: version 'GLIBCXX_3.4.20' not found (required by /usr/lib64/R/library/00LOCK-Rcpp/00new/Rcpp/libs/Rcpp.so)
安装Rcpp时出现
首先检查库文件中是否真的没有记录GLIBCXX_3.4.20
,返回中若确实没有,则证明文件libstdc++.so.6
版本过旧
strings /usr/lib64/libstdc++.so.6 | grep GLIBCXX
查找全局,寻找有无更新版本的libstdc++.so.6x
sudo find / -name "libstdc++.so.6*"
(如果没有,安装一下或许再寻找就有了)
sudo yum install libstdc++
假设找到了其他目录下的更加新的版本的文件libstdc++.so.6.0.25
(可检查其中是否有GLIBCXX_3.4.20
),将其复制到库目录下,并重命名(软连接)为libstdc++.so.6
sudo cp /opt/anaconda3/lib/libstdc++.so.6.0.25 /usr/lib64/
sudo mv /usr/lib64/libstdc++.so.6 /usr/lib64/libstdc++.so.6.bkp
sudo ln -s /usr/lib64/libstdc++.so.6.0.25 /usr/lib64/libstdc++.so.6
/usr/lib/libgdal.so.20: undefined symbol: sqlite3_column_table_name
安装GDAL时出现
问题出在SQLite3安装时未设置对应参数,导致编译出的SQLite3缺少对应API。
解决方案是手动下载源码,编译安装。注意,这里下载的版本是3070500,而不是目前最新的3320300,因为3320300版本手动添加SQLITE_ENABLE_COLUMN_METADATA后会报错,疑似存在BUG。
wget http://www.sqlite.org/sqlite-autoconf-3070500.tar.gz
tar xvzf sqlite-autoconf-3070500.tar.gz
cd sqlite-autoconf-3070500
进入目录后,编辑sqlite3.c
文件,添加#define SQLITE_ENABLE_COLUMN_METADATA
,使看起来形如
/* ...
** if you want a wrapper to interface SQLite with your choice of programming
** language. The code for the "sqlite3" command-line shell is also in a
** separate file. This file contains only code for the core SQLite library.
*/
#define SQLITE_CORE 1
#define SQLITE_AMALGAMATION 1
#ifndef SQLITE_PRIVATE
# define SQLITE_PRIVATE static
#endif
#ifndef SQLITE_API
# define SQLITE_API
#endif
#define SQLITE_ENABLE_COLUMN_METADATA
/************** Begin file sqliteInt.h ***************************************/
/*
** 2001 September 15
**
** The author disclaims copyright to this source code. In place of
** a legal notice, here is a blessing:
保存并退出。设置了SQLITE_ENABLE_COLUMN_METADATA
后,SQLite3即可增加如下API。(细节见SQLite文档)
SQLITE_ENABLE_COLUMN_METADATA
When this C-preprocessor macro is defined, SQLite includes some additional APIs that provide convenient access to meta-data about tables and queries. The APIs that are enabled by this option are:
sqlite3_column_database_name()
sqlite3_column_database_name16()
sqlite3_column_table_name()
sqlite3_column_table_name16()
sqlite3_column_origin_name()
sqlite3_column_origin_name16()
继续编译安装SQLite3
./configure
make
sudo make install
/usr/bin/ld: cannot find -lgfortran
安装ape时出现
查看库目录,确实没有名为libgfortran.so
的文件,但是有以libgfortran
为前缀的其他文件。
cd /usr/lib64/
ls
(可选,不一定好用)直接重新安装编译工具集
sudo yum install centos-release-scl-rh
sudo yum install devtoolset-7-toolchain
系统内寻找库文件
locate lgfortran.so
如果/usr/lib64没有名为libgfortran.so
的文件,而在其他目录找到了,把它复制过去。(本例在/usr/lib/gcc/x86_64-redhat-linux/4.8.2/
目录下找到了libgfortran.so
)
cp /usr/lib/gcc/x86_64-redhat-linux/4.8.2/libgfortran.so /usr/lib64/
vcfR包默认方法安装不上,提示未找到
原因:vcfR有问题一直没修,被CRAN下架了
方法:安装旧版
# 手动安装依赖
install.packages('memuse', repos='https://cran.rstudio.com/')
install.packages('pinfsc50', repos='https://cran.rstudio.com/')
# 下载旧版安装包进行安装
install.packages("https://cran.r-project.org/src/contrib/Archive/vcfR/vcfR_1.9.0.tar.gz", repos=NULL, type="source")