Add the frontend to the linux dockerized MsSpec.
epsi-builds/msspec_python3/pipeline/head There was a failure building this commit
Details
epsi-builds/msspec_python3/pipeline/head There was a failure building this commit
Details
This script is the frontend of the dockerized MsSpec for Linux. The user has just to download it, make it executable and place it in the $PATH to run MsSpec.
This commit is contained in:
parent
a57b8d138b
commit
34d0e720f5
|
@ -0,0 +1,165 @@
|
|||
#!/usr/bin/env bash
|
||||
#
|
||||
# Copyright © 2016-2021 - Rennes Physics Institute
|
||||
#
|
||||
# This file is part of msspec.
|
||||
#
|
||||
# msspec is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation, either version 3 of the License, or
|
||||
# (at your option) any later version.
|
||||
# msspec is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this msspec. If not, see <http://www.gnu.org/licenses/>.
|
||||
#
|
||||
# Source file : utils/dockerized/linux/msspec
|
||||
# Last modified: Tue, 21 Sep 2021 17:52:10 +0200
|
||||
# Committed by : sylvain tricot <sylvain.tricot@univ-rennes1.fr>
|
||||
|
||||
THIS_SCRIPT="$0"
|
||||
IMAGE_NAME="iprcnrs/msspec:latest"
|
||||
|
||||
Logln () {
|
||||
echo "$1" >&2
|
||||
}
|
||||
|
||||
Log () {
|
||||
echo -n "$1" >&2
|
||||
}
|
||||
|
||||
Read_YesNo () {
|
||||
PROMPT="$1"
|
||||
DEFAULT="$2"
|
||||
|
||||
ANSWER=""
|
||||
RESPONSE=""
|
||||
|
||||
VALID=1
|
||||
while test $VALID -ne 0; do
|
||||
read -p "${PROMPT} (y/n) [${DEFAULT}]? " "RESPONSE"
|
||||
ANSWER="${RESPONSE:-${DEFAULT}}"
|
||||
case "${ANSWER}" in
|
||||
y|n) VALID=0 ;;
|
||||
*) echo "Invalid choice, please answer \"y\" or \"n\"."; VALID=1 ;;
|
||||
esac
|
||||
done
|
||||
}
|
||||
|
||||
Get_MsSpecContainerID () {
|
||||
CID=$(docker ps -a -q --filter ancestor=$IMAGE_NAME)
|
||||
echo $CID
|
||||
}
|
||||
|
||||
Get_MsSpecImageID () {
|
||||
IID=$(docker images -q $IMAGE_NAME)
|
||||
echo $IID
|
||||
}
|
||||
|
||||
Add_MsSpecImage () {
|
||||
docker pull $IMAGE_NAME 1>&2
|
||||
}
|
||||
|
||||
Add_MsSpecContainer () {
|
||||
CID=$(Get_MsSpecContainerID)
|
||||
if [ -z "$CID" ]; then
|
||||
IID=$(Get_MsSpecImageID)
|
||||
if [ -z "$IID" ]; then
|
||||
Logln "Pulling MsSpec image..."
|
||||
Add_MsSpecImage
|
||||
fi
|
||||
Log "Creating the MsSpec container... "
|
||||
USERNAME=$(whoami)
|
||||
USERID=$(id -u $USERNAME)
|
||||
GROUPID=$(id -g $USERNAME)
|
||||
CID=$(docker create -i --net=host -e DISPLAY=$DISPLAY -v $HOME:$HOME -u ${USERID}:${GROUPID} --entrypoint /bin/bash $IMAGE_NAME)
|
||||
Logln "done."
|
||||
fi
|
||||
echo $CID
|
||||
}
|
||||
|
||||
Start_MsSpecContainer () {
|
||||
CID=$(Add_MsSpecContainer)
|
||||
status=$(docker container inspect -f '{{.State.Status}}' $CID)
|
||||
if [ $status != "running" ]; then
|
||||
Log "Starting MsSpec container... "
|
||||
# Start the container
|
||||
CID=$(docker start $CID)
|
||||
Logln "done."
|
||||
fi
|
||||
}
|
||||
|
||||
Remove_MsSpecContainer () {
|
||||
Log "Removing MsSpec container... "
|
||||
CID=$(Get_MsSpecContainerID)
|
||||
docker stop -t 1 $CID >/dev/null 2>&1
|
||||
docker rm $CID >/dev/null 2>&1
|
||||
Logln "done."
|
||||
}
|
||||
|
||||
Run_MsSpec () {
|
||||
# Run msspec command
|
||||
CID=$(Get_MsSpecContainerID)
|
||||
xhost +localhost >/dev/null 2>&1
|
||||
docker exec -i -t -w "$PWD" $CID msspec "$@"
|
||||
}
|
||||
|
||||
Run_Bash () {
|
||||
# Run msspec command
|
||||
CID=$(Get_MsSpecContainerID)
|
||||
xhost +localhost >/dev/null 2>&1
|
||||
docker exec -i -t -w "$PWD" -e HOME=$HOME -e PS1="MsSpec:\w> " $CID /bin/bash --norc --noprofile
|
||||
}
|
||||
|
||||
Uninstall_MsSpecImage () {
|
||||
Read_YesNo "You are about to remove the MsSpec Docker image, its container and this script. Are you sure" "n"
|
||||
case $ANSWER in
|
||||
y) Remove_MsSpecContainer;
|
||||
Log "Removing ${IMAGE_NAME}...";
|
||||
docker rmi $IMAGE_NAME >/dev/null 2>&1;
|
||||
Logln "done.";
|
||||
Log "Removing ${THIS_SCRIPT}...";
|
||||
rm -f $THIS_SCRIPT;
|
||||
Logln "done.";
|
||||
;;
|
||||
n) echo "Uninstallation aborted."
|
||||
esac
|
||||
}
|
||||
|
||||
Show_Help () {
|
||||
echo "Usage: 1) msspec -p [PYTHON OPTIONS] SCRIPT [ARGUMENTS...]"
|
||||
echo " 2) msspec [-l FILE | -i | -h]"
|
||||
echo " 3) msspec [bash | reset | uninstall]"
|
||||
echo ""
|
||||
echo "Form (1) is used to launch a script"
|
||||
echo "Form (2) is used to load a hdf5 data file"
|
||||
echo "Form (3) is used to control the Docker container/image."
|
||||
echo ""
|
||||
echo "List of possible options:"
|
||||
echo " -p Pass every arguments after this option to the msspec"
|
||||
echo " virtual environment Python interpreter."
|
||||
echo " -i Run the interactive Python interpreter within msspec"
|
||||
echo " virtual environment."
|
||||
echo " -l Load and display a *.hdf5 data file in a graphical"
|
||||
echo " window."
|
||||
echo " -v Print the version."
|
||||
echo " -h Show this help message."
|
||||
echo ""
|
||||
echo " bash This command starts an interactive bash shell in the"
|
||||
echo " MsSpec container."
|
||||
echo " reset This command removes the MsSpec container (but not the"
|
||||
echo " image). Changes made in the container will be lost and"
|
||||
echo " any new call to msspec will recreate a new fresh container."
|
||||
echo " uninstall This command will completely remove the MsSpec container,"
|
||||
echo " the image and this script."
|
||||
}
|
||||
|
||||
case $1 in
|
||||
reset) Remove_MsSpecContainer ;;
|
||||
uninstall) Uninstall_MsSpecImage ;;
|
||||
bash) Start_MsSpecContainer; Run_Bash ;;
|
||||
"-h"|"") Start_MsSpecContainer; Show_Help ;;
|
||||
*) Start_MsSpecContainer; Run_MsSpec "$@" ;;
|
||||
esac
|
Loading…
Reference in New Issue