Files
shellscripts/install_nerdctl.sh
Your Name b00f025742 update
2024-11-12 00:07:46 +08:00

112 lines
3.9 KiB
Bash
Executable File

#!/bin/bash
VERSION="1.7.6"
FILENAME="nerdctl-full-${VERSION}-linux-amd64.tar.gz"
DOWNLOAD_URL="https://github.com/containerd/nerdctl/releases/download/v${VERSION}/${FILENAME}"
INSTALL_DIR="/usr/local"
NERDCTL_BIN="${INSTALL_DIR}/bin/nerdctl"
install_nvidia_docker() {
echo "正在安装 NVIDIA Docker..."
sudo apt-get update
sudo apt-get install -y curl gnupg lsb-release
if ! grep -q "^deb .\+nvidia-container-toolkit" /etc/apt/sources.list /etc/apt/sources.list.d/*; then
curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg \
&& curl -s -L https://nvidia.github.io/libnvidia-container/stable/deb/nvidia-container-toolkit.list | \
sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' | \
sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list
else
echo "NVIDIA Docker 源已经配置,跳过此步骤。"
fi
sudo apt-get update
sudo apt-get install -y nvidia-container-toolkit
}
configure_containerd() {
echo "正在配置 containerd 使用 NVIDIA runtime..."
# 创建 /etc/containerd 目录并生成默认配置文件
sudo mkdir -p /etc/containerd
containerd config default | sudo tee /etc/containerd/config.toml
# 使用 sed 命令在特定位置添加配置项
sudo sed -i '/\[plugins."io.containerd.grpc.v1.cri".registry.configs\]/a \\t[plugins."io.containerd.grpc.v1.cri".registry.configs."docker.io".tls]\n\t\tinsecure_skip_verify = true' /etc/containerd/config.toml
# 检查语法
sudo containerd config dump | sudo tee /etc/containerd/config.toml
# 配置 NVIDIA runtime
sudo nvidia-ctk runtime configure --runtime=containerd
# 重启 containerd 服务
sudo systemctl restart containerd
}
install_nerdctl() {
if [ ! -f "$FILENAME" ]; then
echo "Downloading $FILENAME..."
wget $DOWNLOAD_URL
else
echo "$FILENAME already exists, skipping download."
fi
echo "Installing nerdctl..."
sudo tar -xvf $FILENAME -C $INSTALL_DIR
echo "Setting up nerdctl as docker..."
cat << 'EOF' | sudo tee /usr/local/bin/docker
#!/bin/bash
/usr/local/bin/nerdctl $@
EOF
sudo chmod +x /usr/local/bin/docker
echo "Setting up bash completion for nerdctl and docker..."
sudo apt install bash-completion -y
sudo nerdctl completion bash | sudo tee /etc/bash_completion.d/nerdctl > /dev/null
sudo nerdctl completion bash | sudo tee /etc/bash_completion.d/docker > /dev/null
# Create containerd group and add current user
# if ! getent group containerd > /dev/null; then
# echo "Creating containerd group..."
# sudo groupadd containerd
# fi
# # Use SUDO_USER to get the original username who invoked sudo
# ORIGINAL_USER=${SUDO_USER:-$USER}
# echo "Adding $ORIGINAL_USER to containerd group..."
# sudo usermod -aG containerd $ORIGINAL_USER
# Change ownership and permissions of completion files
echo "Setting permissions for completion files..."
sudo chown root:containerd /etc/bash_completion.d/nerdctl
sudo chmod 755 /etc/bash_completion.d/nerdctl
sudo chown root:containerd /etc/bash_completion.d/docker
sudo chmod 755 /etc/bash_completion.d/docker
# Load completion files
echo "Loading bash completion files..."
source /etc/bash_completion.d/nerdctl
source /etc/bash_completion.d/docker
echo "Nerdctl installation and setup completed."
}
install_nerdctl_rootless() {
echo "Setting up nerdctl for rootless mode..."
/usr/local/bin/containerd-rootless-setuptool.sh install
/usr/local/bin/containerd-rootless-setuptool.sh install-buildkit
}
main() {
install_nvidia_docker
install_nerdctl
install_nerdctl_rootless
configure_containerd
echo "Nerdctl installation completed."
}
main