From ed5b5f1e14b40fbbf393b8bcaec393a381398e11 Mon Sep 17 00:00:00 2001 From: Dict Xiong Date: Wed, 22 Nov 2023 16:41:38 +0800 Subject: [PATCH] improve dnew --- testbed/scripts/dnew | 92 +++++++++++++++++++++++++++++++++++++------- 1 file changed, 78 insertions(+), 14 deletions(-) diff --git a/testbed/scripts/dnew b/testbed/scripts/dnew index 8a38e14..f2559ff 100755 --- a/testbed/scripts/dnew +++ b/testbed/scripts/dnew @@ -1,21 +1,85 @@ #!/bin/bash set -e +trap 'echo "An error occurred. Please contact the manager." >&2' ERR + +echo "================== dnew ===================" +echo "=== contact: xd21@mails.tsinghua.edu.cn ===" + +test_not_empty() +{ + if [[ -z "$1" ]]; then + echo $2 >&2 + exit + fi +} + +ask_for_yN() +{ + if [[ "$DFS_QUIET" == "1" ]]; then + echo 0 + else + read -p "$1 [yN]: " yn + case $yn in + [Yy]* ) echo 1;; + * ) echo 0;; + esac + fi +} + +container_name=$(whoami)_$(date +%y%m%d-%H%M%S) + +base_command="sudo docker run -d --net=host -v /home2:/home2 \\ + --cap-add=SYS_NICE --cap-add=IPC_LOCK \\ + --security-opt seccomp=unconfined --ulimit memlock=-1:-1 \\ + --restart=unless-stopped \\ + --name $container_name" + + if [[ "$EUID" == "0" ]]; then echo "Please run as your own user (i.e., DO NOT sudo)." exit 1 fi -container_name=$(whoami)_$(date +%y%m%d-%H%M%S) -image_name=${1:-"git.nasp.ob.ac.cn/nasp/nasp-ubuntu"} -cmd=${2:-"/etc/startup.sh"} -echo "container name: $container_name" -echo "image: $image_name" -sudo docker run -d --net=host -v /home2:/home2 \ - --cap-add=SYS_NICE --cap-add=IPC_LOCK \ - --device=/dev/infiniband/rdma_cm --device=/dev/infiniband/issm0 \ - --device=/dev/infiniband/umad0 --device=/dev/infiniband/uverbs0 \ - --runtime=nvidia -e NVIDIA_VISIBLE_DEVICES=all \ - --security-opt \ - seccomp=unconfined --ulimit memlock=-1:-1 \ - --restart=always \ - --name $container_name -it $image_name $cmd + +ret=$(ask_for_yN "Use GPU?") +if [[ "$ret" == "1" ]]; then + base_command="$base_command \\ + --runtime=nvidia -e NVIDIA_VISIBLE_DEVICES=all" +fi +ret=$(ask_for_yN "Use RDMA?") +if [[ "$ret" == "1" ]]; then + base_command="$base_command \\ + --device=/dev/infiniband/rdma_cm --device=/dev/infiniband/issm0 \\ + --device=/dev/infiniband/umad0 --device=/dev/infiniband/uverbs0" +fi + +read -p "Image name (default: git.nasp.ob.ac.cn/nasp/nasp-ubuntu): " +if [[ -z "$REPLY" ]]; then + image_name="git.nasp.ob.ac.cn/nasp/nasp-ubuntu" +else + image_name="$REPLY" +fi +base_command="$base_command \\ + -it $image_name" + +read -p "Start up command (default: /etc/startup.sh): " +if [[ -z "$REPLY" ]]; then + cmd="/etc/startup.sh" +else + cmd="$REPLY" +fi +base_command="$base_command $cmd" + +echo "Will run:" +echo "=====" +echo "$base_command" +echo "=====" +ret=$(ask_for_yN "Start the container?") + +if [[ "$ret" == "1" ]]; then + eval "$base_command" + echo "Container $container_name started. You can use the following command to get in:" + echo "sudo docker exec -it $container_name bash" +else + echo "Aborted." +fi