Files
apptainerce_build/install_apptainer.sh
2023-12-14 20:01:43 +08:00

127 lines
3.5 KiB
Bash
Executable File
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/bin/bash
# 定义版本变量和下载链接
GO_VERSION="1.21.4"
APPTAINER_VERSION="1.2.5"
GO_URL="https://dl.google.com/go/go${GO_VERSION}.linux-amd64.tar.gz"
GO_ARCHIVE="/tmp/go${GO_VERSION}.linux-amd64.tar.gz"
APPTAINER_URL="https://github.com/apptainer/apptainer/archive/refs/tags/v${APPTAINER_VERSION}.tar.gz"
APPTAINER_ARCHIVE="/tmp/apptainer-${APPTAINER_VERSION}.tar.gz"
APPTAINER_DIR="apptainer-${APPTAINER_VERSION}"
# 安装系统依赖
install_dependencies() {
if grep -q 'PRETTY_NAME="Deepin 23"' /etc/os-release || [[ -f /etc/debian_version ]]; then
# Debian/Ubuntu/Deepin 系统依赖安装
echo "安装 Debian/Ubuntu/Deepin 依赖"
sudo apt-get update
sudo apt-get install -y build-essential libseccomp-dev pkg-config uidmap squashfs-tools squashfuse fuse2fs fuse-overlayfs fakeroot cryptsetup curl wget git
elif [[ -f /etc/redhat-release ]]; then
# RHEL/CentOS 系统依赖安装
echo "安装 RHEL/CentOS 依赖"
sudo yum groupinstall -y 'Development Tools'
sudo yum install -y epel-release
sudo yum install -y libseccomp-devel squashfs-tools squashfuse fuse-overlayfs fakeroot /usr/*bin/fuse2fs cryptsetup wget git
elif [[ -f /etc/SuSE-release ]]; then
# SLES/openSUSE 系统依赖安装
echo "安装 SLES/openSUSE 依赖"
sudo zypper install -y libseccomp-devel libuuid-devel openssl-devel cryptsetup sysuser-tools gcc go
else
echo "不支持的操作系统。"
exit 1
fi
}
# 安装 Go
install_go() {
if [ ! -f "$GO_ARCHIVE" ]; then
wget -O "$GO_ARCHIVE" "$GO_URL"
fi
sudo rm -rf /usr/local/go
sudo tar -C /usr/local -xzf "$GO_ARCHIVE"
echo 'export PATH=$PATH:/usr/local/go/bin' >> ~/.bashrc
source ~/.bashrc
}
# 下载并解压 Apptainer 源码
download_apptainer() {
if [ ! -f "$APPTAINER_ARCHIVE" ]; then
wget -O "$APPTAINER_ARCHIVE" "$APPTAINER_URL"
fi
if [ ! -d "$APPTAINER_DIR" ]; then
mkdir "$APPTAINER_DIR"
tar -xzf "$APPTAINER_ARCHIVE" -C "$APPTAINER_DIR" --strip-components=1
fi
}
# 编译和安装 Apptainer
compile_apptainer() {
cd "$APPTAINER_DIR"
./mconfig
make -C builddir
sudo make -C builddir install
}
# 卸载 Apptainer
uninstall_apptainer() {
echo "正在卸载 Apptainer..."
sudo rm -rf /usr/local/bin/apptainer
sudo rm -rf /usr/local/libexec/apptainer
sudo rm -rf /usr/local/var/apptainer
sudo rm -rf /usr/local/etc/apptainer
sudo rm -rf /usr/local/lib/apptainer
echo "Apptainer 卸载完成。"
}
# 静默安装
silent_install() {
install_dependencies
install_go
download_apptainer
compile_apptainer
echo "Apptainer 安装完成。"
}
# 交互式菜单
interactive_menu() {
echo "选择操作:"
echo "1) 安装 Apptainer"
echo "2) 卸载 Apptainer"
echo "3) 退出"
read -p "请输入选项1、2或3: " choice
case "$choice" in
1)
silent_install
;;
2)
uninstall_apptainer
;;
3)
exit 0
;;
*)
echo "无效的选项。"
exit 1
;;
esac
}
# 处理传入参数
if [[ $# -gt 0 ]]; then
case "$1" in
install)
silent_install
;;
uninstall)
uninstall_apptainer
;;
*)
echo "无效的参数。可用参数: install, uninstall"
exit 1
;;
esac
else
interactive_menu
fi