二、环境准备:别让环境卡住你的第一步
说实话,我在协助搭建Kraken2环境这件事上栽过不少跟头。有的团队花了两天时间编译不过去,结果发现是GCC版本太老;有的同学下载了50G的数据库才发现硬盘不够。所以这一章,我陪你一起把环境踩实了。
2.1 Linux系统要求
Kraken2本身是C++写的,对系统要求不算苛刻。但你想想看,要处理几十G甚至上百G的数据库,系统底子得够扎实。
| 项目 | 最低要求 | 推荐配置 |
|---|---|---|
| 操作系统 | Ubuntu 18.04 / CentOS 7 | Ubuntu 22.04 / Rocky Linux 9 |
| 内核版本 | Linux 4.15+ | Linux 5.10+ |
| 内存 | 8 GB | 64 GB(标准库) / 256 GB(Plus库) |
| 存储 | 50 GB | 500 GB(SSD优先) |
| CPU | 双核 | 8核以上,支持AVX2 |
曾经有一次,我在一台CentOS 6的老机器上跑Kraken2,编译到一半报“C++11 not supported”。那时候才意识到,Kraken2从2.1.0版本开始就要求编译器支持C++11了。CentOS 6自带的GCC 4.4.7,根本不行。
2.2 检查系统资源
动手之前,先看看你手头的机器到底行不行。我的习惯是三步走:
- 查操作系统版本
- 查内存和CPU
- 查磁盘空间
对应的命令长这样:
# 操作系统和内核
cat /etc/os-release
uname -a
# 内存和CPU
free -h
nproc
# 磁盘空间
df -h /path/to/data
我个人经验是,free -h看的是可用物理内存,但Kraken2构建数据库时还会用到swap。如果你内存刚好卡在边界值,建议临时加个swap分区,不然很容易在构建最后阶段被系统OOM killer干掉。
2.3 依赖安装
Kraken2的依赖其实不多,但每个都有坑。我来一个一个说。
2.3.1 C++编译器
GCC是主力,Clang也能用。但注意版本——至少GCC 5.0以上才能完整支持C++14。我用GCC 9.3.0跑过最复杂的Plus数据库构建,至今没出过问题。
# 检查GCC版本
gcc --version
# 如果没有GCC
sudo apt update && sudo apt install -y g++ make
# 或
sudo yum install -y gcc-c++ make
这里必须提醒你:别用系统自带的老版本GCC直接编译Kraken2源码。我曾经在Ubuntu 18.04默认GCC 7.5下编译成功,但运行某些子命令时出现“Segmentation fault (core dumped)”。排查了半天,最后升级到GCC 9才解决。说白了,高版本编译器对C++新特性的支持更稳。
2.3.2 Perl
Perl主要用于Kraken2的辅助脚本,比如数据库下载和格式转换。Kraken2自带了一些Perl脚本,但不是必须的——如果你只用kraken2-build命令行工具,可以跳过Perl安装。
perl --version
# 安装Perl(可选)
sudo apt install -y perl
# 或
sudo yum install -y perl
2.3.3 Python
Python在Kraken2生态里越来越重要。尤其是后来官方推出的kraken2-tools和krakentools套装,很多数据处理脚本都依赖Python 3。我个人建议至少装Python 3.6+。
python3 --version
# 安装Python 3
sudo apt install -y python3 python3-pip
# 或
sudo yum install -y python3 python3-pip
如果你打算用Conda管理环境(我强烈推荐),那系统级Python装不装都行。Conda自带的Python版本可控性更高。但有个细节:Conda环境的Python默认是3.x,但部分老脚本还要求Python 2.7。如果你遇到“No module named ‘urllib’”,八成是被Python版本坑了。
2.4 资源冲突与避坑
机器检查完了,依赖也装了,还有几件事得留个心。
- AVX2指令集:Kraken2在构建时默认开启AVX2优化,如果你的CPU不支持(比如早期的Intel Atom或某些ARM处理器),编译会报“illegal instruction”。这时要在CMake里加
-DNO_AVX2=ON。 - 虚拟化环境:我在Docker容器里踩过一回,
nproc返回的是宿主机的核心数,但容器实际只分配了2核。结果并行编译时直接把宿主机拖崩了。建议在容器内显式设置CMAKE_BUILD_PARALLEL_LEVEL。 - 网络代理:有些内网环境需要HTTP_PROXY才能下载数据库,但Kraken2的
kraken2-build不一定走系统代理设置。我曾经被这个坑过,后来直接在命令行里加上--proxy http://proxy:port才搞定。
一句话总结:环境准备的核心就三件事——系统版本够新、内存硬盘管够、编译器版本别太旧。这三条但凡有一条没满足,后面的数据库构建和分类分析都会出幺蛾子。
好了,环境部分就到这里。记住我在项目里踩过的那些坑——版本太老、内存不够、AVX2不支持——你基本就不会再走弯路了。接下来,你可以拿着这套检查清单,去你的服务器上跑一遍环境检查。