SnpHub搭建(一) | CentOS 7下配置SnpHub所需系统环境

SnpHub(主页:http://guoweilong.github.io/SnpHub/)是一款针对大规模基因组变异数据的数据库模型,提供在线的快速检索与轻量级的分析、可视化功能。目前,SnpHub已于GigaScience杂志在线发表doi: 10.1093/gigascience/giaa060。本文将介绍SnpHub所需系统环境配置方法和一些问题的解决方案。考虑到CentOS 7系统作为一款稳定可靠且开源免费的Linux发行版系统,在服务器中十分常见。同时,一些依赖项在CentOS 7上的配置较为复杂。因此,本文将以CentOS 7为系统环境进行介绍。

本文的方法在Docker镜像中(FROM centos:centos7)成功配置了SnpHub所需的系统环境。在实际系统中,也经过的解决方案成功完成了配置。但考虑到系统环境的复杂性,在实际安装中,还请针对错误信息选择(搜索)相应的解决方案,并做好备份

0. 目录

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下架了

2020.07.20查看时,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")
原文地址:https://www.cnblogs.com/esctrionsit/p/13415097.html