环境搭建:Linux系统准备与依赖安装

嗯,开始动手搭环境了。别小看这一步,我在项目里见过太多同学因为系统环境不对,折腾好几天装不上Kraken2或Centrifuge。说白了,后面所有对比分析都依赖这层地基。我先把经验浓缩成一张流程图,你跟着走就行,基本不会踩坑。

Linux 环境搭建全流程 选择 Linux 发行版 基础工具链 Kraken2 依赖 g++/make/zlib/... Centrifuge 依赖 Boost/Perl/... 验证环境就绪

选对Linux发行版,省一半麻烦

我个人的习惯是:长期跑生产环境用Ubuntu 20.04 LTS或22.04 LTS。CentOS 7以前也行,但官方停止维护后,包管理越来越麻烦。如果你手里是新服务器,直接上Ubuntu 22.04,apt源里预编译包几乎全覆盖,编译时少掉很多头发。

为什么会特别强调发行版?我在项目里遇到过一位同事,他在Arch Linux上装Kraken2,一路顺,结果Centrifuge死活编译不过,原因是Boost版本太新。说白了,长期项目还是走主流LTS版本最稳。

发行版推荐版本包管理器备注
Ubuntu20.04 / 22.04 LTSapt首选,依赖最全
Debian11 / 12apt与Ubuntu近似,软件稍旧
CentOS7(已EOL)yum不推荐,需EPEL/SCL
Rocky Linux / AlmaLinux8 / 9dnfCentOS替代品,可用
openSUSELeap 15.5zypper小众但可用
注意:如果你非要用CentOS 7,记得先安装EPEL和SCL,不然很多包版本太老,编译时直接报错。我曾经在CentOS 7上折腾Kraken2,gcc 4.8.5不支持C++11特性,不得不手动升级gcc,多花了两天时间。

基础工具链:项目经理级别的必备

不管用哪个发行版,下面这几样都是刚需:git、cmake、g++(或clang)、make、python3(含pip)。我个人习惯把系统自带python和miniconda分开,避免污染系统环境。

小技巧:先装好miniconda,后面建环境、装Python依赖非常方便。Kraken2和Centrifuge的官方安装脚本也明确支持conda。

我们直接看命令,以Ubuntu 22.04为例:

sudo apt update
sudo apt install -y git cmake g++ make python3 python3-pip
# 可选:libz-dev 某些老版本Kraken2需要
sudo apt install -y zlib1g-dev  # 绝大部分Linux自带

如果你用的是RedHat系(Rocky/Alma):

sudo dnf groupinstall "Development Tools"
sudo dnf install -y git cmake python3 python3-pip zlib-devel

装完后建议验证一下:

g++ --version
cmake --version
git --version
python3 --version
我个人经验:g++版本最好 >= 7.0,低于5.0会直接编译不过Kraken2和Centrifuge。如果系统版本太低,可以用conda install -c conda-forge gxx_linux-64来获取一个可用的编译器。

Kraken2的依赖细节

Kraken2本身是纯C++项目,依赖很简单:

  • g++ 4.8+(推荐7+)
  • make
  • zlib1g-dev
  • 部分功能需要perl脚本,但编译不依赖Perl

下载和编译:

git clone https://github.com/DerrickWood/kraken2.git
cd kraken2
./install_kraken2.sh /usr/local/bin

如果遇到zlib.h: No such file or directory,就补装zlib1g-dev。有时候系统包名可能叫libz-dev或者zlib-devel,根据发行版调一下。

坑点:Kraken2默认用g++编译,如果你系统有多个编译器,可以用CXX=clang++来指定。我在Ubuntu 20.04上就碰到过gcc 9编译报错,换clang 10一次过。

Centrifuge的依赖细节

Centrifuge比Kraken2多几个依赖:

  • g++ 4.8+(推荐7+)
  • cmake (>= 3.1)
  • Boost库(>= 1.42,推荐1.60+)
  • Perl(用于构建和运行脚本)
  • 可选:bzip2-dev / libbz2-dev(用于压缩支持)

安装Boost在Ubuntu上很简单:

sudo apt install -y libboost-all-dev

但在CentOS/Rocky上,需要用sudo dnf install boost-devel。如果你用conda环境,也可以直接:

conda install -c conda-forge boost-cpp

然后编译Centrifuge:

git clone https://github.com/infphilo/centrifuge.git
cd centrifuge
make

如果cmake找不到Boost,可以手动设置BOOST_ROOT环境变量。我曾经在CentOS 7上卡在这里,因为系统自带的Boost 1.53版本不够,最后用conda装的才解决。

效率提示:如果你把Kraken2和Centrifuge都放到同一个conda环境里,可以共享gcc、cmake、boost等依赖。我个人的推荐做法是:conda create -n metagenomics -c conda-forge gxx_linux-64 cmake boost-cpp python git,然后在这个环境里分别编译两个软件。

共享的数据库工具依赖

除了编译依赖,运行阶段还需要:

  • wget 或 curl(下载数据库文件)
  • tar / gzip / bzip2 / zstd(解压数据库)
  • rsync(部分镜像站使用)

安装:

sudo apt install -y wget curl tar gzip bzip2 zstd rsync

或者RedHat系:

sudo dnf install -y wget curl tar gzip bzip2 zstd rsync
提示:有些数据库文件非常大(几十GB),用wget断点续传给力。我一般加-c参数:wget -c 大文件URL。

验证环境是否就绪

跑一个简单的测试脚本,确保两边都能调用:

# Kraken2 测试
kraken2 --version
# 预期输出 Kraken2 version x.y.z

# Centrifuge 测试
centrifuge --version
# 预期输出 centrifuge-class ...
# 如果报错缺少libboost,说明动态链接库没找到,用 ldd 查一下

再测试一下数据库下载和解压:

mkdir -p ~/test_env
cd ~/test_env
# 模拟一个极小数据库(实际不要用这个)
wget -c https://genome-idx.s3.amazonaws.com/kraken/minikraken2_v1_8GB_202003.tgz
tar -xzf minikraken2_v1_8GB_202003.tgz
# 如果能正常解压,说明zstd/tar没问题

嗯,到这里你的环境就算搭建完毕了。后面第3章我们会分别跑一个小测试数据集,确保两个软件真的能用。但今天先确保基础稳扎稳打。

个人忠告:环境搭建花上半天是值得的。我见过太多人因为环境不干净,分析跑了一周才发现是库冲突导致结果偏差。干净的环境 = 可复现的结果。