环境搭建:Linux系统准备与依赖安装
嗯,开始动手搭环境了。别小看这一步,我在项目里见过太多同学因为系统环境不对,折腾好几天装不上Kraken2或Centrifuge。说白了,后面所有对比分析都依赖这层地基。我先把经验浓缩成一张流程图,你跟着走就行,基本不会踩坑。
选对Linux发行版,省一半麻烦
我个人的习惯是:长期跑生产环境用Ubuntu 20.04 LTS或22.04 LTS。CentOS 7以前也行,但官方停止维护后,包管理越来越麻烦。如果你手里是新服务器,直接上Ubuntu 22.04,apt源里预编译包几乎全覆盖,编译时少掉很多头发。
为什么会特别强调发行版?我在项目里遇到过一位同事,他在Arch Linux上装Kraken2,一路顺,结果Centrifuge死活编译不过,原因是Boost版本太新。说白了,长期项目还是走主流LTS版本最稳。
| 发行版 | 推荐版本 | 包管理器 | 备注 |
|---|---|---|---|
| Ubuntu | 20.04 / 22.04 LTS | apt | 首选,依赖最全 |
| Debian | 11 / 12 | apt | 与Ubuntu近似,软件稍旧 |
| CentOS | 7(已EOL) | yum | 不推荐,需EPEL/SCL |
| Rocky Linux / AlmaLinux | 8 / 9 | dnf | CentOS替代品,可用 |
| openSUSE | Leap 15.5 | zypper | 小众但可用 |
基础工具链:项目经理级别的必备
不管用哪个发行版,下面这几样都是刚需:git、cmake、g++(或clang)、make、python3(含pip)。我个人习惯把系统自带python和miniconda分开,避免污染系统环境。
我们直接看命令,以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,根据发行版调一下。
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装的才解决。
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
-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章我们会分别跑一个小测试数据集,确保两个软件真的能用。但今天先确保基础稳扎稳打。