-
Notifications
You must be signed in to change notification settings - Fork 18
/
Copy pathstart-genepattern.sh
executable file
·123 lines (103 loc) · 4.75 KB
/
start-genepattern.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
#!/bin/bash
VERSION="NULL"
HELP=0
name='genepattern'
while [[ "$#" -gt 0 ]]; do
case $1 in
-v|--version) VERSION="$2"; shift ;;
-h|--help) HELP=1 ;;
*) echo "Unknown parameter passed: $1"; exit 1 ;;
esac
shift
done
if [[ $HELP > 0 ]]
then
echo "Start a GenePattern server in a docker container"
echo "Arguments:"
echo "-v|--version <version_tag> Version of GenePattern container to retrieve when starting the first time"
exit
fi
docker_cmd="docker"
command -v "$docker_cmd" >/dev/null || {
echo "\
Command not found: '${docker_cmd}'
Make sure to install Docker and configure your GenePattern Server.
To install Docker ...
See: https://docs.docker.com/get-docker/
" >&2; exit 127;
}
if [[ $VERSION == "NULL" ]]
then
echo "No GenePattern version provided with the -v flag. Using default of v3.9_22.06_b384"
VERSION="v3.9_21.04.05_b325"
VERSION="v3.9_22.06_b384"
fi
#
if [[ $(docker ps -f "name=$name" --format '{{.Names}}') == $name ]]
then
echo "Container $name already running"
elif [[ $(docker ps -af "name=$name" --format '{{.Names}}') == $name ]]
then
echo "Restarting stopped container $name"
docker start $name
else
echo "Starting new GenePattern server container with name $name"
echo "Using GenePattern server container version: $VERSION"
echo "Pulling docker image... genepattern/genepattern-server:$VERSION"
# docker pull genepattern/genepattern-server:$VERSION
echo "Setting up local directories, this will take up to 30 seconds genepattern/genepattern-server:$VERSION"
if [[ -d resources ]]
then
echo "Saving old resources dir"
now=`date +"%Y-%m-%d-%H:%M"`
echo "${now}"
mv ./resources ./resources_${now}
echo " -- copied to resources_${now}"
fi
echo "test run of genepattern/genepattern-server:$VERSION on ${now}"
docker run --name tmpserver -d -t genepattern/genepattern-server:$VERSION sleep 30s
# give the container a moment to start
sleep 5s
if [ -d "resources_${now}" ]; then
docker cp tmpserver:/opt/genepattern/resources "./resources"
echo " The following existing files will be preserved from the old resources "
echo " into the new structure to maintain continuity."
echo " copy: resources/config_custom.yaml (if present)"
echo " copy: resources/genepattern.properties"
echo " copy: resources/GenePatternDB.properties "
echo " copy: resources/GenePatternDB.script"
echo " copy: resources/userGroups.xml"
echo " copy: resources/permissionsMap.xml"
echo " copy: resources/database_custom.properties"
cp ./resources_${now}/config_custom.yaml ./resources/
cp ./resources_${now}/genepattern.properties ./resources/
cp ./resources_${now}/GenePatternDB.properties ./resources/
cp ./resources_${now}/GenePatternDB.script ./resources/
cp ./resources_${now}/userGroups.xml ./resources/
if [ -f ./resources_${now}/database_custom.properties ]; then
cp resources_${now}/database_custom.properties ./resources/
fi
if [ -f resources_${now}/GenePatternDB.log ]; then
cp resources_${now}/GenePatternDB.log ./resources/
fi
docker cp tmpserver:/opt/genepattern/StartGenePatternServer.lax ./resources/StartGenePatternServer.lax
echo "registeredServer=true" >> resources/StartGenePatternServer.lax
else
echo "Did not find resources_${now}"
docker cp tmpserver:/opt/genepattern/resources ./resources
docker cp tmpserver:/opt/genepattern/StartGenePatternServer.lax ./resources/StartGenePatternServer.lax
echo "registeredServer=true" >> resources/StartGenePatternServer.lax
fi
docker stop tmpserver
docker rm tmpserver
# update the bind mount for docker
sed -i.bu s+__PPWWDD__+$PWD+ ./resources/config_custom.yaml
# create the other directories we want external to the container
mkdir -p jobResults
mkdir -p users
mkdir -p taskLib
# bypass registration
#echo "registeredServer=true" >> resources/StartGenePatternServer.lax
echo "Starting new GenePattern server container with name $name"
docker run -v $PWD:$PWD -v /var/run/docker.sock:/var/run/docker.sock -w $PWD --mount type=bind,source=$PWD/resources/StartGenePatternServer.lax,target=/opt/genepattern/StartGenePatternServer.lax -v $PWD/resources:/opt/genepattern/resources -v $PWD/taskLib:/opt/genepattern/taskLib -v $PWD/jobResults:/opt/genepattern/jobResults -v $PWD/users:/opt/genepattern/users -p 8888:8888 -p 8080:8080 -d --name "$name" genepattern/genepattern-server:$VERSION /opt/genepattern/StartGenePatternServer
fi