Skip to content
Snippets Groups Projects
install.sh 7.47 KiB
Newer Older
  • Learn to ignore specific revisions
  • Lukáš Krupčík's avatar
    Lukáš Krupčík committed
    #!/bin/bash
    #
    
    Lukáš Krupčík's avatar
    Lukáš Krupčík committed
    #  Copyright (C) 2017-2023 IT4Innovations
    
    Lukáš Krupčík's avatar
    Lukáš Krupčík committed
    #  Lukas Krupcik, lukas.krupcik@vsb.cz
    #
    
    # if without any parameters
    if [[ $# -eq 0 ]]; then
    	 printf "\e[31m
    
    Lukáš Krupčík's avatar
    Lukáš Krupčík committed
     ./install.sh\e[0m   ... create and build apptainer 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
    
    Lukáš Krupčík's avatar
    Lukáš Krupčík committed
     Example:
    
    Lukáš Krupčík's avatar
    Lukáš Krupčík committed
                 \e[33m ./install.sh -i CentOS -v 7\e[0m
    
    Lukáš Krupčík's avatar
    Lukáš Krupčík committed
        	"
    	echo ""
    	exit 0
    fi
    
    # parse the arguments
    
    while getopts ":i:v:o:" opt; do
    
    Lukáš Krupčík's avatar
    Lukáš Krupčík committed
      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
    
    Lukáš Krupčík's avatar
    Lukáš Krupčík committed
    if [ -z "$APPTAINER_BIN_PATH" ] || [ -z "$IMAGE_PATH" ] || [ -z "$MODULEFILE_PATH" ] || [ -z "$USER_IMAGE" ]; then
    
    Lukáš Krupčík's avatar
    Lukáš Krupčík committed
       TEST_CONFIG="FALSE"
       echo "CONFIG test empty value ERROR"
    fi
    
    # test other value
    
    Lukáš Krupčík's avatar
    Lukáš Krupčík committed
    if [ ! -d "$APPTAINER_BIN_PATH" ]; then
    
    Lukáš Krupčík's avatar
    Lukáš Krupčík committed
       TEST_CONFIG="FALSE"
    
    Lukáš Krupčík's avatar
    Lukáš Krupčík committed
       echo "CONFIG test APPTAINER BIN PATH ERROR"
    
    Lukáš Krupčík's avatar
    Lukáš Krupčík committed
    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
    
    Lukáš Krupčík's avatar
    Lukáš Krupčík committed
       echo -e "Please, specify apptainer image (-i \e[31mCentOS\e[0m, \e[31mUbuntu\e[0m, \e[31mDebian\e[0m, \e[31mFedora\e[0m, \e[31mRocky\e[0m)"
    
    Lukáš Krupčík's avatar
    Lukáš Krupčík committed
       exit 1
    
    Lukáš Krupčík's avatar
    Lukáš Krupčík committed
    elif [ "$IMAGE" == "CentOS" ] || [ "$IMAGE" == "Debian" ] || [ "$IMAGE" == "Ubuntu" ] || [ "$IMAGE" == "Debian" ] || [ "$IMAGE" == "Fedora" ] || [ "$IMAGE" == "Rocky" ]; then
    
    Lukáš Krupčík's avatar
    Lukáš Krupčík committed
       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
    
    Lukáš Krupčík's avatar
    Lukáš Krupčík committed
       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), Rocky \e[31mlatest\e[0m))"
    
    Lukáš Krupčík's avatar
    Lukáš Krupčík committed
       exit 1
    
    Lukáš Krupčík's avatar
    Lukáš Krupčík committed
    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" ]) || ([ "$IMAGE" == "Rocky" ] && [ "$VERSION" == "8" ]) || ([ "$IMAGE" == "Rocky" ] && [ "$VERSION" == "9" ]); then
    
    Lukáš Krupčík's avatar
    Lukáš Krupčík committed
       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]"
    
    Lukáš Krupčík's avatar
    Lukáš Krupčík committed
    else
    
       OMPI="OpenMPI/4.1.2-GCC-11.2.0"
       echo -e "OpenMPI/4.1.2-GCC-11.2.0 ............... [\e[32mOK\e[0m]"
    
    Lukáš Krupčík's avatar
    Lukáš Krupčík committed
    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
    
    
    Lukáš Krupčík's avatar
    Lukáš Krupčík committed
    echo -e "\e[32mCreate & Build apptainer image\e[0m ($IMAGE-$VERSION-$TYPE)"
    
    Lukáš Krupčík's avatar
    Lukáš Krupčík committed
    
    if [ "$IMAGE" == "CentOS" ]; then
    
       if [ "$VERSION" == "8" ]; then
    
          BOOTSTRAP="CENTOS8LATEST"
    
    Lukáš Krupčík's avatar
    Lukáš Krupčík committed
       else
    
          BOOTSTRAP="CENTOS7LATEST"
    
    Lukáš Krupčík's avatar
    Lukáš Krupčík committed
       fi
    
    Lukáš Krupčík's avatar
    Lukáš Krupčík committed
    elif [ "$IMAGE" == "Rocky" ]; then
       if [ "$VERSION" == "8" ]; then
          BOOTSTRAP="ROCKY8LATEST"
       elif [ "$VERSION" == "9" ]; then
          BOOTSTRAP="ROCKY9LATEST"
       else
         echo "ERROR version ubuntu"
         exit 1
       fi
    
    Lukáš Krupčík's avatar
    Lukáš Krupčík committed
    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"
    
    Lukáš Krupčík's avatar
    Lukáš Krupčík committed
    fi
    
    DATE=$(date +%Y%m%d%H%M%S)
    
    
    if [ -f image.sif ]; then
       rm image.sif || exit 1
    
    Lukáš Krupčík's avatar
    Lukáš Krupčík committed
    fi
    
    
    Lukáš Krupčík's avatar
    Lukáš Krupčík committed
    echo "$APPTAINER_BIN_PATH"
    export PATH="$PATH:$APPTAINER_BIN_PATH"
    
    Lukáš Krupčík's avatar
    Lukáš Krupčík committed
    
    
    Lukáš Krupčík's avatar
    Lukáš Krupčík committed
    apptainer build image.sif "$BOOTSTRAP" || CHECK_STATUS="FALSE" && CHECK_STATUS="TRUE"
    
    Lukáš Krupčík's avatar
    Lukáš Krupčík committed
    
    
    CHECK_STATUS="TRUE"
    
    
    Lukáš Krupčík's avatar
    Lukáš Krupčík committed
    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`;
    
    Lukáš Krupčík's avatar
    Lukáš Krupčík committed
    do
       if [ "$STATE" == "True" ]; then
    
          rm "$IMAGE_PATH/$IMAGE/$VERSION/$i"
    
    Lukáš Krupčík's avatar
    Lukáš Krupčík committed
       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]"
    
    Lukáš Krupčík's avatar
    Lukáš Krupčík committed
       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)"
    
    Lukáš Krupčík's avatar
    Lukáš Krupčík committed
       exit 0
    else
    
       echo -e "\e[31mFail (image.sif not exists...)\e[0m]"
    
    Lukáš Krupčík's avatar
    Lukáš Krupčík committed
       exit 1
    fi
    
    exit 0