# 2023.02.13-在超算上搭建Singularity环境并配置Geant4

# I. 制作singularity包

# 1. 进入fakeroot节点

ssh <user_id>@162.105.133.209

# 2. 制作并进入sandbox镜像

  1. 搭建ubuntu

    singularity build --fakeroot --sandbox Geant4 docker://ubuntu:22.04
    
  2. 进入Geant4环境(sandbox)

    singularity shell --fakeroot -w Geant4
    

# 3. 配置geant4环境

  1. 安装基本环境

    apt-get install build-essential
    apt-get install wget
    
  2. 下载geant4

    mkdir geant4
    wget https://geant4-data.web.cern.ch/releases/geant4-v11.1.0.tar.gz
    tar -xzvf geant4-v11.1.0.tar.gz
    
  3. 安装依赖包(若报错,则分别单独安装)

    sudo apt-get install -y cmake libx11-dev libxext-dev libxtst-dev libxrender-dev libxmu-dev libxmuu-dev libhdf5-serial-dev hdf5-tools
    sudo apt-get install -y libexpat1-dev
    sudo apt install -y qt5*
    
  4. 编译安装

    mkdir build
    cd build
    cmake -DCMAKE_INSTALL_PREFIX=/root/Geant4/home/geant4 /root/Geant4/home/geant4-v11.1.0
    cmake -DGEANT4_INSTALL_DATA=ON .
    make -jN  # N表示处理器数量,需修改为实际值
    make install
    
  5. 配置环境变量

    cd /root/Geant4/etc/skel/
    vim .bashrc
    

    将下列内容添加到 .bashrc

    source /root/Geant4/home/geant4/bin/geant4.sh
    source /root/Geant4/home/geant4/share/Geant4/geant4make/geant4make.sh
    

    配置

    cp /root/Geant4/etc/skel/.bashrc /root/Geant4/home
    cd /root/Geant4/home
    source .bashrc
    
  6. 检验geant4是否配置成功

    cd /root/Geant4/home/geant4/share/Geant4/examples/basic/B1
    mkdir build && cd build
    cmake ..
    make
    ./exampleB1 run1.mac
    

    若无报错则配置成功

  7. 退出

    exit
    

# 4. 打包

singularity build --fakeroot s-Geant4.sif Geant4/

# II. 配置go&singularity

# 1. 配置go环境

# 超算Data节点
export VERSION=1.17.2 OS=linux ARCH=amd64
wget https://dl.google.com/go/go$VERSION.$OS-$ARCH.tar.gz
tar -xzvf go1.17.2.linux-amd64.tar.gz
rm -f go1.17.2.linux-amd64.tar.gz
export PATH=/lustre/home/<user_id>/go/bin:$PATH

# 2. 安装singularity

module load singularity/3.11.3

# 3. 环境变量

cd $HOME
vim .bashrc
# 将下列语句添加到.bashrc中
# export PATH=/lustre/home/<user_id>/go/bin:$PATH
source .bashrc

# III. 启用singularity

# 1. 将SIF镜像下载到常规节点

scp -r <user_id>@162.105.133.209:/home/<user_id>/s-Geant4.sif /gpfs/share/home/<user_id>/

# 2. 转换成sandbox镜像并启用

singularity build --sandbox Geant4 s-Geant4.sif
singularity shell -w Geant4

# 3. 配置环境变量

cd Geant4/home
vim .bashrc

# 将下列语句添加到文件末尾
# source /lustre/home/2201210084/singularity/Geant4/home/geant4/bin/geant4.sh
# source /lustre/home/2201210084/singularity/Geant4/home/geant4/share/Geant4/geant4make/geant4make.sh

source .bashrc

看见如下字样表示成功

Untitled

# IV. 附录

# 1. SIF容器与sandbox相互转换

# 1. 将SIF格式的容器转换成sandbox;
singularity build --sandbox XXX XXX.sif

# 2. 将sandbox容器镜像转化成SIF格式;
singularity build XXX.sif XXX

# 2. 在fakeroot节点上删除sandbox镜像

# 假设要删除的为文件夹名为molspin的sandbox镜像

# 首先,以可读的模式进入要删除的镜像
singularity shell --fakeroot -w molspin

# 删除掉容器中,基于fakeroot创建的所有文件
rm -rf /* 1>/dev/null 2>&1

# 退出镜像
exit

# 将创建好的软件镜像上传到高性能计算集群,加载singularity软件环境
# 删除掉剩下的
rm -rf molspin