feat: install script

This commit is contained in:
TING-JUN WANG 2024-06-27 01:23:24 +08:00
parent 52a850159d
commit 5dbeafad80

88
setup-docker Executable file
View File

@ -0,0 +1,88 @@
# Description:
# This script will help the user to setup rootless docker[1] on CMLab Server.
# We follow our CMLab's rootless docker guideline[2] to build the environment:
#
# We will add the user's username into subuid & subgid so that the docker service
# can start the containers. Then we run the script provided by docker to install
# rootless docker's service.
#
# After checking whether the docker service can start, we should allow Docker
# can access NVIDIA Container Runtime so that our Docker container can use GPUs.
#
# Then, we should change the directory of Docker to /tmp2 so that Docker can save
# images.
#
# [1] rootless docker's documentation: https://docs.docker.com/engine/security/rootless/
# [2] CMLab's rootless docker guideline: https://hackmd.io/@snsd0805/SkWMyB1ER
echo -e -n "\033[44m[CML INFO]\033[0m "
echo "Start setting up Docker service"
# insert the username into /etc/subuid & /etc/subuid
# setup-uid's source code is on https://gitea.snsd0805.com/snsd0805/CMLAB-Docker-Builder/src/branch/master/tool/setup_uid.c
setup-uid
if [ $? -eq 0 ]; then
echo -e -n "\033[44m[CML INFO]\033[0m "
echo "Inserted $(whoami) into /etc/subuid & /etc/subgid"
else
echo -e -n "\033[41m[CML ERROR]\033[0m "
echo "failed to set subuid & subgid. Please contact us: unix_manager@cmlab.csie.ntu.edu.tw"
exit 1
fi
# Run install script provided by docker
curl -fsSL https://get.docker.com/rootless | DOCKER_BIN=/tmp2/$(whoami)/docker/bin sh
if [ $? -eq 0 ]; then
echo -e -n "\033[44m[CML INFO]\033[0m "
echo "Docker installed."
else
echo -e -n "\033[41m[CML ERROR]\033[0m "
echo "failed to install rootless docker. Please contact us: unix_manager@cmlab.csie.ntu.edu.tw"
exit 1
fi
echo "export PATH=/tmp2/$(whoami)/docker/bin:\$PATH" >> ~/.bashrc
echo "export DOCKER_HOST=unix:///run/user/$(id -u)/docker.sock" >> ~/.bashrc
echo -e -n "\033[44m[CML INFO]\033[0m "
echo "We have some environment variables in your ~/.bashrc"
# Link NVIDIA Container Runtime to Docker & change docker image's path
mkdir /tmp2/$(whoami)/docker-data
cat << EOF > $HOME/.config/docker/daemon.json
{
"runtimes": {
"nvidia": {
"args": [],
"path": "nvidia-container-runtime"
}
},
"data-root": "/tmp2/$(whoami)/docker-data"
}
EOF
if [ $? -eq 0 ]; then
echo -e -n "\033[44m[CML INFO]\033[0m "
echo "Linked NVIDIA Container Runtime & changed the data path."
else
echo -e -n "\033[41m[CML ERROR]\033[0m "
echo "failed to link NVIDIA Container Runtime to Docker. Please contact us: unix_manager@cmlab.csie.ntu.edu.tw"
exit 1
fi
# restart docker
echo -e -n "\033[44m[CML INFO]\033[0m "
echo "Restarting Docker..."
systemctl --user restart docker && docker pull ubuntu && docker run --rm --runtime=nvidia --gpus '"device=0,1"' ubuntu:22.04 nvidia-smi
echo -e -n "\033[44m[CML INFO]\033[0m "
echo "These are 2 GPUs on this server."