[原创]【NGS数据分析经验分享】1-3 安装编译基本库和基本开发工具

大多数NGS数据分析工具以源代码(source code)的形式发布。需要对这些源代码进行编译才能运行。编译过程很简单,但是有时会因为缺少基本库(library)而失败。为了方便以后编译安装工具软件,我们首先安装常用的基本库。CentOS自带yum管理软件,方便快速安装基本库。使用yum需要管理员权限(sudo)。在开始之前,我推荐大家使用PuTTY软件“远程”登陆你的虚拟机来熟悉控制台终端操作。将来远程登陆服务器将使用类似的方法。可以在下面地址下载PuTTY软件。
https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html
我选择64-bit的版本,就1个exe文件,很小,下载下来放在桌面就可以了。然后运行这个文件。
需要在“Host Name (or IP address)”里面填上虚拟机Linux的IP地址。我们启动虚拟机Linux,登陆,打开一个控制台窗口,并敲入下面命令。
ifconfig
输出结果的最开始一段,找到inet后面的IP地址(我的是192.168.182.130)。
把这个地址复制粘贴到PuTTY的“Host Name (or IP address)”框里,给这个会话(session)起个名叫“CentOS 7 VM”,然后点击“Save”(方便以后使用)。之后点“Open”或双击保存的会话(CentOS 7 VM)。
第一次连接需要注册主机(这里指Linux,一般登陆的远程计算机称为主机,假想你的虚拟机Linux是远程服务器),点“Yes”(如果你不想每次看到这个对话框)。
用你的用户名和密码登陆。注意,密码并不会显示(连*都不会显示,这是为了防止被人看见你的密码有多长)。成功登陆会出现提示符$,表明你以普通用户登陆系统。
下面安装基本系统库(当然不完全,我根据我自己的经验选择了一些),非常简单,运行下面的命令。
sudo yum groupinstall "Development tools"
sudo yum install gcc gcc-c++ make automake
sudo yum install kernel-headers kernel-devel
sudo yum install ncurses ncurses-devel sqlite sqlite-devel openssl openssl-devel tk tk-devel bzip2 bzip2-devel readline readline-devel zlib zlib-devel libpng libpng-devel freetype freetype-devel
注意,我们在Windows里复制其中一行命令,然后到PuTTY里面点击鼠标右键,复制的命令会自动粘贴。
使用sudo命令会调用管理员(Administrator,或者称为sudoer)权限来执行后面的命令,因此需要输入密码(这里是你的用户密码,不是root密码,因为你的用户具有管理员权限,参考1-1 VMware虚拟机安装Linux)。在一段时间内(几分钟)不需要再次输入密码。
yum会自动查找关联(dependencies)的软件包(这曾经是让系统管理员非常头疼的事儿)。如果有需要安装或升级的包,会给出一个列表。键盘敲“y”并回车继续。
安装之前的第三行命令(kernel相关的包)不是必须的。如果安装之后,发现Windows共享目录不工作,则需要重新编译虚拟机驱动程序(参考1-2 配置VMware磁盘共享)。
安装完成之后,最好执行下面命令,来更新系统到最新版本。
sudo yum update
哇~~好多软件包需要更新!
在一段广告之后(有人想要插播广告吗?),更新完成。然后运行sudo reboot重新启动Linux。
PuTTY弹出提示“失去网络连接”(当然了,因为重启了Linux主机)。关闭PuTTY,查看VMware窗口,等Linux重启完成后(看到登陆窗口就可以,不需要登陆),重新打开PuTTY软件。双击保存的会话“CentOS 7 VM”,输入用户名和密码登陆。
下面涉及系统级别的软件安装,包括gcc,python和perl。
如果是初学者或者想活的简单一些,可以使用conda创建和管理虚拟环境(强烈推荐如果你在HPC上工作,而不是可以随便搞的虚拟机)。如果需要在系统上运行不同版本的软件,这将非常方便。如何使用conda,请移驾到楼下。如果想要更加高冷,使用完全独立的虚拟环境,比如Vagrant或Docker,请Google。如果想挑战自己,请继续看(反正是虚拟机,搞坏了就重新装一个)。
运行下面的命令检查GCC,Python和Perl的版本。
gcc --version
python --version
perl --version
GCC的版本是4.8.5-16,够用(就算不够用也最好不要尝试自己安装,找个头发比你多的朋友帮忙吧);Python的版本是2.7.5,这个版本比较低,需要升级(然而这已经是系统自带Python的最新版本,我们刚刚sudo yum update过的);Perl的版本是5.16.3,也够用(这个如果不够可以自己搞)。我发现我们只需要安装新的Python就可以了,惊不惊喜?意不意外?(难道你就不想问问Java的事儿吗?为了做教程的时候不困,Java被我给喝了。)
到Python的官方网站下载(https://www.python.org/downloads/)最新的Python 2.x (或者你喜欢用3.x也可以,不过我发现很多分析工具都是用2.x开发的)。
千万不要点击“Download Python 2.7.14”下载,因为网站识别你的操作系统为Windows,而我们需要下载Linux版本。
向下找到“Looking for a specific release?”,点击这个“Python 2.7.14”。
在新页面右键点“XZ compressed source tarball”(这个文件小一点儿,也可以选上面的Gzipped文件,解压缩参数略有不同)。
在弹出的对话框中选择“Copy link address”。
在PuTTY控制台中(确保你在主目录~下,如果不是,使用cd回到主目录)进入Downloads目录(或者随便什么你喜欢的目录),敲入wget (此处有个空格),按鼠标右键(复制的地址会自动粘贴),按回车键下载(wget是命令行的下载工具)。
cd
cd Downloads
wget
https://www.python.org/ftp/python/2.7.14/Python-2.7.14.tar.xz
下载完成后,运行下面命令检查文件完整性。
md5sum Python-2.7.14.tar.xz
对比这个字符串“1f6db41ad91d9eb0a6f0c769b8613c5b”是否和网页上列出的一致。如果一致,说明下载的文件完整无缺。md5sum(有时也会用sha256sum)工具非常有用,常常用来生成文件的哈希(hash)串(你可以理解成文件指纹)来验证文件完整性。这对超大文件(NGS测序数据都超大的)非常有用(当文件非常大时,在复制、存储、上传、下载等过程中都可能出错)。
用下面的命令解压缩(如果你懒得打字,可以只打文件开头的几个字母,比如Py,然后按TAB键,系统会自动补全,如果不能补全,就接着再打几个)。
tar Jxvf Python-2.7.14.tar.xz
解压完成后,会生成一个目录“Python-2.7.14”(也就是Python 2.7.4的源代码目录),进入这个目录(cd Python-2.7.14)。
为了方便使用,我习惯在主目录下创建“Tools”目录(mkdir ~/Tools),并把各种程序都安装到这个目录下。
在Python 2.7.4的源代码目录中,用下面命令编译并安装Python。
unset PYTHONPATH
unset PYTHONHOME
./configure --prefix=$HOME/Tools/Python-2.7.14
这里要注意./不能省略。Linux默认只从系统PATH(使用echo $PATH查看系统路径,或使用printenv查看所有系统环境变量)里面寻找命令(除非你专门设置),而不包括当前目录(即使configure程序就在当前目录下,系统也找不到)。--prefix选项指定安装路径。如果不使用这一选项,之后的make install命令将会把程序安装到系统目录下(这需要sudo,然而你会发现,当远程操作服务器集群时,你并没有这个权限)。
然后运行make编译。
make
编译成功。系统提示这几个模块(module)找不到。这几个都是过去的老系统需要的库,现在已经不需要了,直接忽略掉。如果你发现还有其他的模块找不到(比如ncurses、readline之类),那么你没有成功安装基本库,请从头阅读本教程。运行下面命令测试(不是必须的)Python(此处可以插入广告或者吃个瓜什么的)。
make test
测试期间,你会看到许多警告信息(warning)。软件大都不是完美的,只要没有错误(error),我们就凑合着用吧。
测试成功后,安装Python到指定的目录($HOME/Tools/Python-2.7.14)。
make install
安装完成后,我们进入到~/Tools目录查看(~和$HOME是等价的),果然有个Python-2.7.14目录。Python-2.7.14目录下有4个子目录,分别存储可执行文件(bin),头文件(include),库文件(lib)和联机Man说明文档(share)。运行python --version查看版本,发现还是老版本。这是因为我们还没有把新版本Python放在系统PATH里面,所以系统并不知道我们安装了新版。可以通过给出路径来运行新的Python。
也可以把新的Python添加到系统PATH。
export PATH=$HOME/Tools/Python-2.7.14/bin:$PATH
这是我们再运行python --version查看版本,就是新版了(系统会运行找到的第一个Python)。
可以把这行命令放到启动配置文件~/.bashrc中,这样就不用每次启动都运行一遍了(因为~/.bashrc会在启动终端时自动运行)。
echo "export PATH=$HOME/Tools/Python-2.7.14/bin:$PATH" >> ~/.bashrc
在Linux中,以.开头的文件是隐藏文件。ls命令需要-a参数来显示所有文件。
ls -a
使用了-a选项,发现了好几个.开头的文件,其中,.bash_profile是登陆时自动运行,.bashrc是开启终端(在虚拟机Linux中打开终端)时自动运行(PuTTY相当于登陆并开启终端),.bash_logout在登出时运行。我常常通过编辑.bashrc来实现自动运行脚本。
为了方便安装Python的包(package),下面安装pip包管理器。
https://pip.pypa.io/en/stable/installing/#installing-with-get-pip-py
下载get-pip.py程序。
cd ~/Downloads/
wget https://bootstrap.pypa.io/get-pip.py
然后在控制台输入下面命令安装pip。
python get-pip.py
pip是Python的包管理器,和yum类似(yum管理Linux软件,pip管理Python包,下面要介绍的cpan管理Perl模块)。pip用于安装、更新、删除Python软件包,并且能够自动查找关联的包(dependencies)。
Perl也有类似的模块管理器(Perl中叫module,Python中叫package,都是一样的意思)。下面配置Perl模块管理器cpan。cpan默认已经安装好了,在控制台敲cpan运行。
第一次运行cpan需要简单的配置。
配置完成显示cpan[数字]提示符,键入h可以显示简单的帮助,q退出。接着安装App::cpanminus模块,已简化未来其他模块的安装。
cpan App::cpanminus
模块的下载,解压缩,编译和安装都是自动完成的。之后只需要运行cpanm Module::Name命令就可以安装模块了。模块默认安装在你的用户主目录下的perl5目录中。如果希望自己指定目录,可以安装local::lib模块。
好累!
就到这里,再见吧!
PS:发没发现,我的PuTTY的颜色比你的好看!想知道是怎么弄的?不告诉你。
最后编辑于 2018-09-09 · 浏览 8871