二、环境准备:别让环境卡住你的第一步

说实话,我在协助搭建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 检查系统资源

动手之前,先看看你手头的机器到底行不行。我的习惯是三步走:

  1. 查操作系统版本
  2. 查内存和CPU
  3. 查磁盘空间

对应的命令长这样:

# 操作系统和内核
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才搞定。

一句话总结:环境准备的核心就三件事——系统版本够新、内存硬盘管够、编译器版本别太旧。这三条但凡有一条没满足,后面的数据库构建和分类分析都会出幺蛾子。

环境准备核心流程 开始准备环境 检查Linux系统与内核 检查CPU架构与内存 检查存储空间 安装C++/Perl/Python 验证环境并预备构建 可进入数据库构建

好了,环境部分就到这里。记住我在项目里踩过的那些坑——版本太老、内存不够、AVX2不支持——你基本就不会再走弯路了。接下来,你可以拿着这套检查清单,去你的服务器上跑一遍环境检查。