在Linux上建立多用户科学计算服务器
本次的机子是centos 7
Part 1: 为所有用户配置 zsh + oh-my-zsh
目标: 每个用户一登录就是花里胡哨的 zsh,别再面对 bash 那个老年模式。
步骤:
1. 安装 zsh
apt update && apt install -y zsh git curl # Ubuntu/Debian 系列
# 或者
yum install -y zsh git curl # CentOS/RHEL 系列2. 创建公共 oh-my-zsh 安装目录(推荐共享安装)
mkdir -p /opt/oh-my-zsh
chmod 755 /opt/oh-my-zsh3. 作为 root 下载 oh-my-zsh 到共享目录
git clone https://github.com/ohmyzsh/ohmyzsh.git /opt/oh-my-zsh
4. 为每个用户设置默认 shell 为 zsh(批量脚本可后续写)
chsh -s /bin/zsh username5. 为每个用户配置 .zshrc(可放在 /etc/skel 中供新用户自动复制)
cp /opt/oh-my-zsh/templates/zshrc.zsh-template /etc/skel/.zshrc
# 修改 oh-my-zsh 目录
sed -i 's|ZSH=.*|ZSH=/opt/oh-my-zsh|' /etc/skel/.zshrcPart 2: 安装 Anaconda3
给所有用户配置 Anaconda,让他们在科研和机器学习路上如虎添翼(也别再 pip 装得一地鸡毛),最推荐的方式是:
以 root 安装 Anaconda 到共享路径(如
/opt/anaconda3),然后配置所有用户的 PATH。
安装策略一览:
| 项目 | 推荐设置 |
| ------- | ---------------------------- |
| 安装路径 | /opt/anaconda3 |
| 所有权 | root:root(或一个专用组) |
| PATH 设置 | /etc/profile.d/conda.sh |
| 环境共享 | 用 conda create --prefix 管理 |
| 权限控制 | 用户不能乱删 base 环境 |
1. 下载 Anaconda 安装脚本(x86_64)
curl -O https://repo.anaconda.com/archive/Anaconda3-2025.06-0-Linux-x86_64.sh
(根据实际版本更新,或者去官网拿最新版)
2. 安装到 /opt/anaconda3
bash Anaconda3-2024.02-1-Linux-x86_64.sh
# 手动指定安装路径为 /opt/anaconda3安装过程注意:
- 不要选择 "初始化 shell(yes)",我们统一用
/etc/profile.d/conda.sh管理 PATH。 - 安装完成后,给其他用户加读执行权限:
chown -R root:root /opt/anaconda3
chmod -R o+rx /opt/anaconda33. 配置所有用户的环境变量(关键)
在 /etc/profile.d/conda.sh 写入:
export PATH=/opt/anaconda3/bin:$PATH也可以手动创建:
echo 'export PATH=/opt/anaconda3/bin:$PATH' > /etc/profile.d/conda.sh
chmod +x /etc/profile.d/conda.sh所有用户登录后都会自动拥有 conda 命令。
4. 测试
让一个非 root 用户登录,输入:
conda --version
which python应该会看到 /opt/anaconda3/bin/python,说明生效了。
附加高级功能
限制用户不能破坏 base 环境
conda config --system --set auto_activate_base false
chmod -R 555 /opt/anaconda3/envs /opt/anaconda3/pkgs然后建议让大家创建自己的环境:
conda create -p ~/myenv python=3.11 numpy pandas
conda activate ~/myenvPart 3: 安装 SLURM 作业调度系统(单节点)
目标: 支持作业提交、资源调度
步骤(单机版简化流程):
1. 安装依赖项
yum install -y epel-release
yum groupinstall -y "Development Tools"
yum install -y munge munge-devel \
readline readline-devel \
openssl openssl-devel \
pam pam-devel \
hwloc hwloc-devel \
wget二、配置 Munge(Slurm 安全认证)
create-munge-key
chown -R munge:munge /etc/munge
chmod 0700 /etc/munge
chmod 400 /etc/munge/munge.key
systemctl enable munge
systemctl start munge检查一下:
munge -n | unmunge能解码就说明 OK。
三、下载并编译 Slurm
cd /usr/local/src
wget https://download.schedmd.com/slurm/slurm-25.05.0.tar.bz2
tar -xjf slurm-25.05.0.tar.bz2
cd slurm-25.05.0
./configure --prefix=/opt/slurm
make -j$(nproc)
make install四、添加 Slurm 用户 & 文件夹
useradd -r slurm
mkdir -p /opt/slurm/etc /opt/slurm/log /opt/slurm/spool
chown -R slurm:slurm /opt/slurm五、配置最简 slurm.conf
直接贴一份能跑的最简单节点配置:
cat > /opt/slurm/etc/slurm.conf <<EOF
ClusterName=local
ControlMachine=$(hostname)
SlurmUser=slurm
SlurmdUser=root
StateSaveLocation=/opt/slurm/log
SlurmdSpoolDir=/opt/slurm/spool
SlurmctldLogFile=/opt/slurm/log/slurmctld.log
SlurmdLogFile=/opt/slurm/log/slurmd.log
SchedulerType=sched/backfill
SelectType=select/linear
NodeName=localhost CPUs=$(nproc) State=UNKNOWN
PartitionName=debug Nodes=ALL Default=YES MaxTime=INFINITE State=UP
EOF确保 hostname 正确(hostname 显示的必须是 localhost 或匹配 NodeName 字段)。
六、启动服务(手动运行)
/opt/slurm/sbin/slurmctld
/opt/slurm/sbin/slurmd第一次运行建议开两个终端分别运行看看有没有报错。
七、测试任务
sinfo # 查看节点状态
srun -N1 -n1 hostname # 看是否调度并输出如果成功,说明一切 OK!
可选:加到 PATH
echo 'export PATH=/opt/slurm/bin:/opt/slurm/sbin:$PATH' > /etc/profile.d/slurm.sh
chmod +x /etc/profile.d/slurm.sh
source /etc/profile.d/slurm.shCUDA Toolkit
wget https://developer.download.nvidia.com/compute/cuda/12.3.2/local_installers/cuda-repo-rhel7-12-3-local-12.3.2_545.23.08-1.x86_64.rpm
sudo rpm -i cuda-repo-rhel7-12-3-local-12.3.2_545.23.08-1.x86_64.rpm
sudo yum clean all
sudo yum -y install cuda-toolkit-12-3Part 4: 安装 JDFTx(开源的第一性原理软件)
建议更新gcc版本到9.3 4.8.5跟cuda不兼容
目标: 编译安装 JDFTx 并配置环境变量供用户使用
步骤:
1. 安装依赖项
apt install -y cmake g++ libopenblas-dev liblapack-dev \
libfftw3-dev libgsl-dev libeigen3-dev git2. 克隆 JDFTx 源码
git clone https://github.com/shankar1729/jdftx.git
cd jdftx
mkdir build && cd build3. 编译安装
mkdir /opt/jdftx
cd /opt/jdftx
cmake -D EnableCUDA=yes -D CUDA_ARCH=compute_70 -D CUDA_CODE=sm_70 -D CudaAwareMPI=yes -D ForceFFTW=yes /usr/local/src/jdftx-1.7.0/jdftx/ # 这个目录是你解压jdftx的目录
# CUDA_ARCH=compute_70 -D CUDA_CODE=sm_70 去官网查 写大了 即使编译成功也会报错
make -j$(nproc)
make install4. 设置环境变量(推荐写入 /etc/profile.d/jdftx.sh)
echo 'export PATH=/opt/jdftx/bin:$PATH' > /etc/profile.d/jdftx.sh
chmod +x /etc/profile.d/jdftx.sh