第3章 环境准备:系统要求、依赖安装与软件管理器配置
这一章咱们把环境搭起来。说白了,NGS 流程就是在一堆软件之间来回倒数据,环境配不好,后面全是坑。我自己刚接触这个领域时,因为 Java 版本不对,整整卡了三天。
3.1 系统要求
先看操作系统。我个人习惯用 Ubuntu 20.04 LTS 或 CentOS 7.9。原因很简单——社区支持好,Docker 和 Singularity 在这两个系统上 bug 最少。
| 操作系统 | 最低版本 | 备注 |
|---|---|---|
| Ubuntu | 20.04 LTS | 推荐 22.04 LTS |
| CentOS | 7.9 | 尽快迁移到 Rocky Linux 9 |
| macOS | 12 Monterey | 仅小规模测试用 |
硬件方面,内存至少 16 GB,存储 100 GB 以上(SSD 最好)。多线程分析时 CPU 核数越多越好。我曾在 4 核 8 G 的云主机上跑变异检测,结果跑了 36 小时……嗯,血的教训。
3.2 基础依赖安装
Python:建议 3.9 或 3.10。3.7 以下有些库已经不维护了。
# 用 apt 安装
sudo apt update
sudo apt install -y python3 python3-pip python3-venv
python3 --version
Java:很多 NGS 工具(如 GATK、Picard)都依赖 Java。推荐 OpenJDK 11 或 8。
sudo apt install -y default-jdk
java -version
你想想看,如果你同时装了多个 Java 版本,记得用 update-alternatives 切换默认版本。我曾经一次忘记指定 JAVA_HOME,GATK 直接报了类加载异常,查了半天才发现是版本冲突。
3.3 容器环境:Docker / Singularity
容器化是自动化部署的核心。Docker 适合本地开发,Singularity 适合 HPC 集群。
| 工具 | 适用场景 | 安装命令 |
|---|---|---|
| Docker | 个人工作站、CI/CD | sudo apt install -y docker.io |
| Singularity | HPC、无 root 权限 | sudo apt install -y singularity-container |
为什么需要容器?因为你不知道用户的系统里装了哪个版本的 samtools。用容器封装后,流程环境完全一致,再也不会有“我机器上能跑你机器上跑不了”这种破事。
# 安装 Docker(Ubuntu)
sudo apt install -y docker.io
sudo systemctl enable --now docker
sudo usermod -aG docker $USER # 退出再登录生效
# 安装 Singularity
sudo apt install -y singularity-container
singularity --version
3.4 Conda / Mamba 配置
Conda 是生物信息学里最常用的包管理器。但原版 conda 解析依赖时慢得要死。我推荐用 Mamba,它是 conda 的 C++ 重写版,速度提升 10 倍以上。
# 安装 Miniconda(如果没装)
wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh
bash Miniconda3-latest-Linux-x86_64.sh -b -p $HOME/miniconda3
eval "$($HOME/miniconda3/bin/conda shell.bash hook)"
# 安装 mamba
conda install -n base -c conda-forge mamba
然后配置国内镜像源(如果你在墙内)。我个人习惯只保留 conda-forge 和 bioconda 两个 channel,pkgs/main 容易包版本过旧。
# 配置 .condarc
cat > ~/.condarc << 'EOF'
channels:
- conda-forge
- bioconda
- defaults
channel_priority: strict
show_channel_urls: true
EOF
conda-forge 放前面,defaults 放最后,否则会出现依赖冲突。我曾在生产环境里因为顺序反了,装了一个老版的 samtools,跑 bwa 时候直接段错误。安装完成后验证一下环境是否正常:
mamba list
mamba search fastqc # 看能否找到包
3.5 整体环境验证
把所有关键依赖检查一遍:
python --version
java -version
docker --version
singularity --version
conda info --envs
确保每个命令都输出版本号,没报错。我习惯把这些写进一个 check_env.sh 脚本,每次用新机器时先跑一遍,省得后面出错又得回头排查。