4. 第4章
安装Kraken2这件事,说简单也简单,说坑也有坑。我自己前后在七八台服务器上部署过,踩过的坑攒下来都能写个小本本。这一章就把最稳的几条路给你捋清楚。
4.1 为什么安装方式很重要
Kraken2本身是个C++程序,依赖不多,但数据库那块儿挺吃硬盘和内存。你安装时选错方式,轻则编译报错,重则跑起来才发现性能不对。
我个人习惯是:能用Conda就别自己编译。但有时候服务器环境受限,或者你想用最新的开发版,那就得走源码编译。两种方式我都用过,下面分别讲清楚。
4.2 方法一:Conda安装(推荐)
Conda安装最简单,一条命令搞定。
Tip:如果你还没装Conda,先去官网下Miniconda。别用Anaconda,太大了,我们只需要环境管理功能。
# 创建一个新环境,避免依赖冲突
conda create -n kraken2_env -c bioconda kraken2
# 激活环境
conda activate kraken2_env
嗯,就这么简单。我在项目中遇到过好几次依赖冲突的情况,比如同时装kraken2和bracken时,某些库版本对不上。这时候我建议:把kraken2、bracken、krona都装在一个环境里,一次性搞定依赖。
Warning:Conda默认会把软件装到环境目录下,但数据库文件很大(~40GB),不要放env里。我习惯单独建个~/kraken2_db目录。
检查一下安装位置:
which kraken2
# 输出类似:/home/you/miniconda3/envs/kraken2_env/bin/kraken2
如果能找到路径,就说明装上了。
4.3 方法二:源码编译安装
有些服务器不能联网,或者你想用最新的commit,那就得自己编译。Kraken2的源码在GitHub上,你克隆下来、cmake、make就行了。
# 克隆仓库
git clone https://github.com/DerrickWood/kraken2.git
cd kraken2
# 编译
./install_kraken2.sh /usr/local/bin
等一下,上面那个脚本其实会帮你做编译和安装两步。不过我更推荐手动编译,好控制参数:
# 手动编译步骤
mkdir -p build && cd build
cmake ..
make -j$(nproc)
# 把可执行文件复制到PATH
cp kraken2 kraken2-build kraken2-inspect /usr/local/bin/
我当时在集群上编译时,遇到一个坑:系统gcc版本太老(4.8.5),cmake报错"C++11不支持"。解决办法是用conda安装新版的gcc:
conda install -c conda-forge gxx_linux-64=9
装上后重新cmake,就一路畅通了。
编译参数详解:
-j$(nproc):用满所有CPU核,明显提速- 默认安装路径是
/usr/local/bin,如果你没root权限,改成~/bin也行 - 编译产物只有三个可执行文件:kraken2、kraken2-build、kraken2-inspect
4.4 验证安装
装好之后,一定要跑个快速测试。我每次装完新软件都先跑自带的例子,心里才踏实。
# 查看版本
kraken2 --version
# 输出样例:Kraken 2 version 2.1.3
# 用自带的小数据库跑测试
kraken2-build --standard --threads 4 --db test_db
# 别慌,这条命令会下标准数据库,大概4-5GB,第一次跑会慢一些
# 验证分类功能
echo -e ">test\nACGTACGTACGTACGTACGT" | kraken2 --db test_db --threads 2 /dev/stdin
第一次下载标准数据库?我记得有一个同学直接拔了网线,下了50%断了……所以建议用--download-only先下好,再--build:
kraken2-build --download-taxonomy --db my_db
kraken2-build --download-library bacteria --db my_db
kraken2-build --build --db my_db --threads 8
这样网断了还能续下(文件在my_db/library/里)。
Tip:验证成功后,删掉测试数据库(rm -rf test_db),别占地方。正式分析时再下标准库或自定义库。
4.5 安装方式对比
我把三种场景下的推荐方式整理成表格,你对照自己的环境选:
| 使用场景 | 推荐方式 | 理由 |
|---|---|---|
| 个人笔记本/工作站 | Conda安装 | 最快,依赖自动解决 |
| 集群(无root权限) | Conda安装 | 无需sudo,环境隔离 |
| 离线服务器 | 源码编译 | 提前准备源码和依赖包 |
| 想用最新开发特性 | 源码编译 | master分支有最新功能 |
| 已有Conda环境但冲突 | 源码编译到自定义路径 | 完全自主控制 |
说实话,我95%的情况都用Conda。只有一次为了测试某个PR,才手动编译了开发版。你按自己的网络和权限情况选就行。