File: quick_install.sh

package info (click to toggle)
ecflow 5.15.2-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 51,868 kB
  • sloc: cpp: 269,341; python: 22,756; sh: 3,609; perl: 770; xml: 333; f90: 204; ansic: 141; makefile: 70
file content (195 lines) | stat: -rwxr-xr-x 7,155 bytes parent folder | download | duplicates (3)
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
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
#!/bin/sh
# assumes:
# - $WK is defined to be root of ecflow tree
# - ecflow is installed to: Linux  - /tmp/${USER}/install/cmake/ecflow/${ECFLOW_VERSION} 
#                           Darwin - $(HOME)/install/ecflow/${ECFLOW_VERSION} 
#   Linux Install using: cd $WK; ./cmake.sh make -j8 install
#   mac   Install using: cd $WK; build_scripts/mac.sh make -j8 install
# - metabuilder is at $WK/../metabuilder

# Alter the command below to either
# a/ use the system installed version, everywhere, avoid mismatch between different releases
# b/ Test the latest release, requires compatible client/server versions

set -e # stop the shell on first error
set -u # fail when using an undefined variable
set -x # echo script lines as they are executed
set -o pipefail # fail if last(rightmost) command exits with a non-zero status

cd $WK
export ECF_PORT=4041
PYTHON=python3

os_variant=$(uname -s)
if [[ $os_variant = Darwin ]] ; then

   # we assume $PATH and $PYTHONPATH have been set to locate ecflow_client/ecflow.so
   ECF_HOST=localhost
   export ECF_PORT=4040
   ECF_CLIENT_EXE_PATH=$(which ecflow_client)

else
   ECFLOW_VERSION=$(awk '/^project/ && /ecflow/ && /VERSION/ {for (I=1;I<=NF;I++) if ($I == "VERSION") {print $(I+1)};}' $WK/CMakeLists.txt)      
   install_prefix="/tmp/${USER}/install/cmake"
   export PATH=${install_prefix}/ecflow/${ECFLOW_VERSION}/bin:$PATH
   if [[ $PYTHON == "python3" ]] ; then
      #module load python3
  
      python_dot_version=$(python3 -c 'import sys;print(sys.version_info[0],".",sys.version_info[1],sep="")')
      export PYTHONPATH=${install_prefix}/ecflow/${ECFLOW_VERSION}/lib/python${python_dot_version}/site-packages
   else
      export PYTHONPATH=${install_prefix}/ecflow/${ECFLOW_VERSION}/lib/python2.7/site-packages
   fi
   
   ECF_CLIENT_EXE_PATH=${install_prefix}/ecflow/${ECFLOW_VERSION}/bin/ecflow_client
fi

# =======================================================================
# SSL
# =======================================================================
#export ECF_DEBUG_CLIENT=1
#export ECF_SSL=`hostname`.${ECF_PORT} # use server specific <host>.<port>.*** certificates
#export ECF_SSL=1                      # use non server specific  certificates


# =======================================================================
# Kill the server
# =======================================================================
which ecflow_client
ecflow_client --version
set +e # disable error
ecflow_client --terminate=yes >> /dev/null
set -e # stop the shell on first error

set +e # ignore error 
count=0
while [ 1 ] ; do   
    ecflow_client --ping 2> /dev/null
    if [[ $? == 1 ]] ; then
        echo "server terminates after $count seconds"
        break
    fi
    sleep 1
    count=$((count + 1))
    #echo $count
    if [ "$count" -gt "3" ] ; then
        echo "Timed out after 3 seconds"
        break
    fi
done
set -e  # re-enable error

# =======================================================================
# Create build scripts files. Must be before python $WK/build_scripts/nightly/build.py
# =======================================================================
cd $SCRATCH
rm -rf nightly
cp -r $WK/build_scripts/nightly .
cd nightly

# =======================================================================
# Clean start
# =======================================================================
rm -rf `hostname`.${ECF_PORT}.*

# =======================================================================
# CUSTOM USER, this needs a ECF_CUSTOM_PASSWD, used for client and server
# =======================================================================
test_custom_user=0
if [[ $test_custom_user -eq 1 ]] ; then
   export ECF_CUSTOM_PASSWD=$SCRATCH/nightly/$(hostname).${ECF_PORT}.ecf.custom_passwd
   export ECF_USER=fred # custom user fred
cat << EOF > ${ECF_CUSTOM_PASSWD}
4.5.0  
# <user> <host> <port> <passwd>
$ECF_USER $(hostname) ${ECF_PORT} my_passwd
EOF
fi

# =======================================================================
# PASSWD access, file used for client and server
# =======================================================================
test_passwd_file=0
if [[ $test_passwd_file == 1 ]] ; then
   export ECF_PASSWD=$SCRATCH/nightly/$(hostname).${ECF_PORT}.ecf.passwd
cat << EOF > ${ECF_PASSWD}
4.5.0  
# <user> <host> <port> <passwd>
$USER $(hostname) ${ECF_PORT} my_passwd
EOF
fi


# =======================================================================
# Start server. 
# =======================================================================
#export ECF_TASK_THRESHOLD=1 # 1000 milliseconds = 1 second, enable to test slow job creation
ecflow_server&

# wait for server to start
set +e # ignore error 
count=0
while [ 1 ] ; do   
    ecflow_client --ping 2> /dev/null
    if [[ $? == 0 ]] ; then
        echo "server up and running after $count seconds"
        break;
    fi
    sleep 1
    count=$((count + 1))
    #echo $count
    if [ "$count" -gt "4" ] ; then
        echo "Timed out after 4 seconds"
        exit 1
    fi
done
set -e  # re-enable error 

ecflow_client --server_version

# =======================================================================
# start with a clean slate
# =======================================================================
ecflow_client --restart
ecflow_client --delete=_all_ yes

# ======================================================================
# ecflow metabuilder, this needs PYTHONPATH for local ecflow
# ======================================================================
cd $WK/../metabuilder
git checkout develop
$PYTHON ./clean.py -s ecflow 
$PYTHON ./generate.py -s ecflow
$PYTHON ./reload.py -s ecflow
#git checkout master


# ========================================================================
# Generate test suites, based on definitions known to be good 
# ========================================================================
cd $WK
#$PYTHON Pyext/samples/TestBench.py ANode/parser/test/data/good_defs/JIRA/ecflow_337_.def
#$PYTHON Pyext/samples/TestBench.py ANode/parser/test/data/good_defs/JIRA/ecflow_1550.def

for defs_file in $(find ANode/parser/test/data/good_defs -type f); do
   echo "->$defs_file"
   $PYTHON Pyext/samples/TestBench.py $defs_file
done
 
# Use python3 for ecflow 5 series
# Use the installed ecflow for ecflow_client, to stop mixing of ecflow 4/5
# must be done after since TestBench.py will use build dir
ecflow_client --alter change variable ECF_CLIENT_EXE_PATH "$ECF_CLIENT_EXE_PATH" /
ecflow_client --order=/ecflow alpha      #  sort suites  
ecflow_client --order=/ecflow top    
  
# =======================================================================
# START the GUI, kill first
# =======================================================================
ps -ef | grep -v awk | awk '/ecflow_ui/ {print $2}' | xargs kill -9 || true

export ECFLOWUI_DEVELOP_MODE=1      # enable special menu to diff ecflowui defs and downloaded defs
#export ECFLOWUI_SESSION_MANAGER=1  # to minimise output for debug, use session with a single server
#ecflow_ui.x > ecflow_ui.log 2>&1 & 
#ecflow_ui -confd ${HOME}/.ecflow5_ui &
ecflow_ui&