Skip to content
Snippets Groups Projects
install.sh 7.10 KiB
#!/bin/bash
#
#  Copyright (C) 2017-2020 IT4Innovations
#  Lukas Krupcik, lukas.krupcik@vsb.cz
#

# if without any parameters
if [[ $# -eq 0 ]]; then
	 printf "\e[31m
 ./install.sh\e[0m   ... create and build singularity image
	-\e[33mi\e[0m OS (\e[33mCentOS\e[0m, \e[33mUbuntu\e[0m)
	-\e[33mv\e[0m Version OS (CentOS 7, CentOS 8, Ubuntu latest, Ubuntu 18, Debian latest, Fedora latest)
	-\e[33mo\e[0m OpenMPI module
 Example:
             \e[33m ./install.sh -i CentOS -v 7777777\e[0m
    	"
	echo ""
	exit 0
fi

# parse the arguments
while getopts ":i:v:o:" opt; do
  case $opt in
  i)
      IMAGE="$OPTARG"
      ;;
  v)
      VERSION="$OPTARG"
      ;;
  o)
      OMPI="$OPTARG"
      ;;
  \?)
      exit "Invalid option: -$OPTARG"
      ;;
  esac
done

printf "\033c"

# load config
. CONFIG

TEST_CONFIG="TRUE"

# test empty value
if [ -z "$SINGULARITY_BIN_PATH" ] || [ -z "$IMAGE_PATH" ] || [ -z "$MODULEFILE_PATH" ] || [ -z "$USER_IMAGE" ]; then
   TEST_CONFIG="FALSE"
   echo "CONFIG test empty value ERROR"
fi

# test other value
if [ ! -d "$SINGULARITY_BIN_PATH" ]; then
   TEST_CONFIG="FALSE"
   echo "CONFIG test SINGULARITY BIN PATH ERROR"
fi

if [ ! -d "$IMAGE_PATH" ]; then
   TEST_CONFIG="FALSE"
   echo "CONFIG test IMAGE PATH ERROR"
fi

if [ ! -d "$MODULEFILE_PATH" ]; then
   TEST_CONFIG="FALSE"
   echo "CONFIG test MODULEFILE PATH ERROR"
fi

if [ -z "$USER_IMAGE" ]; then
   TEST_CONFIG="FALSE"
   echo "CONFIG test USER IMAGE ERROR"
fi

echo -n "Check CONFIG ........................... ["
if [ "$TEST_CONFIG" == "TRUE" ]; then
   echo -e "\e[32mOK\e[0m]"
else
   echo -e "\e[31mERROR\e[0m]"
   exit 1
fi

if [ -z "$IMAGE" ]; then
   echo -e "Please, specify singularity image (-i \e[31mCentOS\e[0m, \e[31mUbuntu\e[0m, \e[31mDebian\e[0m, \e[31mFedora\e[0m,)"
   exit 1
elif [ "$IMAGE" == "CentOS" ] || [ "$IMAGE" == "Debian" ] || [ "$IMAGE" == "Ubuntu" ] || [ "$IMAGE" == "Debian" ] || [ "$IMAGE" == "Fedora" ]; then
   echo -e "Image .................................. [\e[32mOK\e[0m]"
else
   echo -e "Image .................................. [\e[31mERROR\e[0m]"
   echo -e "Unknowm OS, exiting..."
   exit 1
fi

if [ -z "$VERSION" ]; then
   echo -e "Please, specify OS version (-v CentOS \e[31m7\e[0m, CentOS \e[31m8\e[0m, Ubuntu \e[31mlatest\e[0m, Debian \e[31mlatest\e[0m), Fedora \e[31mlatest\e[0m))"
   exit 1
elif ([ "$IMAGE" == "CentOS" ] && [ "$VERSION" == "7" ]) || ([ "$IMAGE" == "CentOS" ] && [ "$VERSION" == "8" ]) || ([ "$IMAGE" == "Ubuntu" ] && [ "$VERSION" == "latest" ]) || ([ "$IMAGE" == "Ubuntu" ] && [ "$VERSION" == "18" ]) || ([ "$IMAGE" == "Debian" ] && [ "$VERSION" == "latest" ]) || ([ "$IMAGE" == "Fedora" ] && [ "$VERSION" == "latest" ]); then
   echo -e "Version ................................ [\e[32mOK\e[0m]"
else
   echo -e "Version ................................ [\e[31mERROR\e[0m]"
   echo -e "Unknowm OS version, exiting..."
   exit 1
fi

if [ -z "$OMPI" ]; then
   OMPI=
   echo -e "OpenMPI ................................ [\e[33mNO\e[0m]"
else
   OMPI="OpenMPI/4.1.2-GCC-11.2.0"
   echo -e "OpenMPI/4.1.2-GCC-11.2.0 ............... [\e[32mOK\e[0m]"
fi

USER=$(whoami)

if [ ! "$USER" == "root" ]; then
   echo -e "ROOT ................................... [\e[31mFALSE\e[0m]"
   echo "SORRY, you must ROOT!!!"
   exit 1
else
   echo -e "ROOT ................................... [\e[32mOK\e[0m]"
fi

echo -e "\e[32mCreate & Build singularity image\e[0m ($IMAGE-$VERSION-$TYPE)"

if [ "$IMAGE" == "CentOS" ]; then
   if [ "$VERSION" == "8" ]; then
      BOOTSTRAP="CENTOS8LATEST"
   else
      BOOTSTRAP="CENTOS7LATEST"
   fi
elif [ "$IMAGE" == "Ubuntu" ]; then
   if [ "$VERSION" == "latest" ]; then
      BOOTSTRAP="UBUNTULATEST"
   elif [ "$VERSION" == "18" ]; then
      BOOTSTRAP="UBUNTU1804"
   else
     echo "ERROR version ubuntu"
     exit 1
   fi
elif [ "$IMAGE" == "Debian" ]; then
      BOOTSTRAP="DEBIANLATEST"
elif [ "$IMAGE" == "Fedora" ]; then
      BOOTSTRAP="FEDORALATEST"
fi

DATE=$(date +%Y%m%d%H%M%S)

if [ -f image.sif ]; then
   rm image.sif || exit 1
fi

echo "$SINGULARITY_BIN_PATH"
export PATH="$PATH:$SINGULARITY_BIN_PATH"

singularity build image.sif "$BOOTSTRAP" || CHECK_STATUS="FALSE" && CHECK_STATUS="TRUE"

CHECK_STATUS="TRUE"

if [ "$CHECK_STATUS" == "FALSE" ]; then
   echo -e "Build image ...................................................................................................... [\e[31mFALSE\e[0m]"
   exit 1
elif [ "$CHECK_STATUS" == "TRUE" ]; then
   echo -e "Build image ...................................................................................................... [\e[32mOK\e[0m]"
else
  echo -e "Build image ...................................................................................................... [\e[31mERROR\e[0m]"
  exit 1
fi

for i in `ls -t "$IMAGE_PATH/$IMAGE/$VERSION/" | grep sif`;
do
   if [ "$STATE" == "True" ]; then
      rm "$IMAGE_PATH/$IMAGE/$VERSION/$i"
   fi
done

if [ -f "image.sif" ]; then
   mkdir -p "$IMAGE_PATH/$IMAGE/$VERSION/" && chmod 0755 $IMAGE_PATH/$IMAGE/$VERSION/ && chown $USER_IMAGE:$USER_IMAGE $IMAGE_PATH/$IMAGE/$VERSION/ -R
   echo -n "Copy image to $IMAGE_PATH/$IMAGE/$VERSION/$IMAGE-${VERSION}_${DATE}.sif .......................................... ["
   mv image.sif "$IMAGE_PATH/$IMAGE/$VERSION/$IMAGE-${VERSION}_${DATE}.sif" || ( echo -e "\e[31mFALSE\e[0m]" && exit 1 ) && echo -e "\e[32mOK\e[0m]"
   echo -n "chown $USER_IMAGE:$USER_IMAGE $IMAGE_PATH/$IMAGE/$VERSION/$IMAGE-${VERSION}_${DATE}.sif .............................. ["
   chown "$USER_IMAGE":"$USER_IMAGE" "$IMAGE_PATH/$IMAGE/$VERSION/$IMAGE-${VERSION}_${DATE}.sif" || ( echo -e "\e[31mFALSE\e[0m]" && exit 1 ) && echo -e "\e[32mOK\e[0m]"
   echo -n "chmod 0775 $IMAGE_PATH/$IMAGE/$VERSION/$IMAGE-${VERSION}_${DATE}.sif ............................................. ["
   chmod 0775 "$IMAGE_PATH/$IMAGE/$VERSION$TYPE/$IMAGE-${VERSION}_${DATE}.sif" || ( echo -e "\e[31mFALSE\e[0m]" && exit 1 ) && echo -e "\e[32mOK\e[0m]"
   echo -n "Copy bootstrap to $IMAGE_PATH/$IMAGE/$VERSION/$IMAGE-$VERSION-Bootstrap ............................................... ["
   cp "$BOOTSTRAP" "$IMAGE_PATH/$IMAGE/$VERSION/$IMAGE-$VERSION-Bootstrap" || ( echo -e "\e[31mFALSE\e[0m]" && exit 1 ) && echo -e "\e[32mOK\e[0m]"
   echo -n "chown $USER_IMAGE:$USER_IMAGE $IMAGE_PATH/$IMAGE/$VERSION/$IMAGE-$VERSION-Bootstrap ....................................... ["
   chown "$USER_IMAGE":"$USER_IMAGE" "$IMAGE_PATH/$IMAGE/$VERSION/$IMAGE-$VERSION-Bootstrap" || ( echo -e "\e[31mFALSE\e[0m]" && exit 1 ) && echo -e "\e[32mOK\e[0m]"
   echo -n "chmod 0664 $IMAGE_PATH/$IMAGE/$VERSION/$IMAGE-$VERSION-Bootstrap ...................................................... ["
   chmod 0664 "$IMAGE_PATH/$IMAGE/$VERSION/$IMAGE-$VERSION-Bootstrap" || ( echo -e "\e[31mFALSE\e[0m]" && exit 1 ) && echo -e "\e[32mOK\e[0m]"
   cd ./modulefile_template
   echo -n "Modulefile for image ............................................................................................. ["
   ./create_modulefile.sh "$IMAGE" "$VERSION" "$OMPI" || (echo -e "\e[31mFALSE\e[0m]" && exit 1) && echo -e "\e[32mOK\e[0m]"
   echo -e "\e[32mSuccess\e[0m (module \e[33m$IMAGE/$VERSION\e[0m)"
   exit 0
else
   echo -e "\e[31mFail (image.sif not exists...)\e[0m]"
   exit 1
fi

exit 0