f76557928e4493f65f383b578216e2e55beabc13
[policy/engine.git] / packages / docker / src / main / docker / docker-install.sh
1 #!/bin/bash
2 #
3 #============LICENSE_START==================================================
4 #  ONAP Policy Engine
5 #===========================================================================
6 #  Copyright (C) 2017-2018 AT&T Intellectual Property. All rights reserved.
7 #===========================================================================
8 # Licensed under the Apache License, Version 2.0 (the "License");
9 # you may not use this file except in compliance with the License.
10 # You may obtain a copy of the License at
11 #
12 #         http://www.apache.org/licenses/LICENSE-2.0
13 #
14 # Unless required by applicable law or agreed to in writing, software
15 # distributed under the License is distributed on an "AS IS" BASIS,
16 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17 # See the License for the specific language governing permissions and
18 # limitations under the License.
19 #============LICENSE_END==================================================
20 #
21
22
23 #########################################################################
24 ##
25 ## Functions
26 ##
27 #########################################################################
28
29 function usage() {
30         echo -n "syntax: $(basename $0) "
31         echo -n "--debug ("
32         echo -n "[--install base|pap|pdp|console|mysql|elk|brmsgw|paplp|pdplp] | "
33         echo -n "[--configure base|pap|pdp|console|mysql|elk|brmsgw|paplp|pdplp] | "
34 }
35
36 function check_java() {
37         if [[ $DEBUG == y ]]; then
38                 echo "-- ${FUNCNAME[0]} $@ --"
39                 set -x
40         fi
41         
42         TARGET_JAVA_VERSION=$1
43         
44         if [[ -z ${JAVA_HOME} ]]; then
45                 echo "error: ${JAVA_HOME} is not set"
46                 return 1
47         fi
48         
49         if ! check_x_file "${JAVA_HOME}/bin/java"; then
50                 echo "error: ${JAVA_HOME}/bin/java is not accessible"
51                 return 1
52         fi
53         
54         INSTALLED_JAVA_VERSION=$("${JAVA_HOME}/bin/java" -version 2>&1 | awk -F '"' '/version/ {print $2}')
55         if [[ -z $INSTALLED_JAVA_VERSION ]]; then
56                 echo "error: ${JAVA_HOME}/bin/java is invalid"
57                 return 1
58         fi
59         
60         if [[ "${INSTALLED_JAVA_VERSION}" != ${TARGET_JAVA_VERSION}* ]]; then
61                 echo "error: java version (${INSTALLED_JAVA_VERSION}) does not"\
62                          "march desired version ${TARGET_JAVA_VERSION}"
63                 return 1
64         fi 
65         
66         echo "OK: java ${INSTALLED_JAVA_VERSION} installed"
67         
68 }
69
70 function process_configuration() {
71         if [[ $DEBUG == y ]]; then
72                 echo "-- ${FUNCNAME[0]} $@ --"
73                 set -x
74         fi
75         
76         CONF_FILE=$1
77         while read line || [ -n "${line}" ]; do
78         if [[ -n ${line} ]] && [[ ${line} != \#* ]]; then
79                 name=$(echo "${line%%=*}")
80                 value=$(echo "${line#*=}")
81                 # escape ampersand so that sed does not replace it with the search string
82             value=${value//&/\\&}
83                 if [[ -z ${name} ]] || [[ -z $value ]]; then
84                         echo "WARNING: ${line} missing name or value"
85                 fi
86                 export ${name}="${value}"
87                 eval "${name}" "${value}" 2> /dev/null
88         fi
89         done < "${CONF_FILE}"
90         return 0
91 }
92
93 function component_preconfigure() {
94         if [[ $DEBUG == y ]]; then
95                 echo "-- ${FUNCNAME[0]} $@ --"
96                 set -x
97         fi
98
99         /bin/sed -i -e 's!${{POLICY_HOME}}!'"${POLICY_HOME}!g" \
100                 -e 's!${{FQDN}}!'"${FQDN}!g" \
101                 *.conf > /dev/null 2>&1
102 }
103
104 function tomcat_component() {
105         if [[ $DEBUG == y ]]; then
106                 echo "-- ${FUNCNAME[0]} $@ --"
107                 set -x
108         fi
109         
110         TOMCAT_TARGET_INSTALL_DIR=${POLICY_HOME}/servers/${COMPONENT_TYPE}
111         if [[ -d ${TOMCAT_TARGET_INSTALL_DIR} ]]; then
112                 echo "error: ${TOMCAT_TARGET_INSTALL_DIR} exists."
113                 return 1
114         fi
115         
116         TOMCAT_INSTALL_DIR=${POLICY_HOME}/install/3rdparty/${TOMCAT_PACKAGE_NAME}/
117         if [[ -d ${TOMCAT_INSTALL_DIR} ]]; then
118                 echo "error: ${TOMCAT_INSTALL_DIR} exists."
119                 return 1                
120         fi
121         
122         tar -C "${POLICY_HOME}/servers" -xf "${POLICY_HOME}/install/3rdparty/${TOMCAT_PACKAGE_NAME}.tar.gz"
123         
124         mv "${POLICY_HOME}/servers/${TOMCAT_PACKAGE_NAME}" "${POLICY_HOME}/servers/${COMPONENT_TYPE}/"
125         /bin/cp "${POLICY_HOME}"/install/servers/common/tomcat/bin/* "${POLICY_HOME}/servers/${COMPONENT_TYPE}/bin"
126         /bin/cp "${POLICY_HOME}"/install/servers/common/tomcat/conf/* "${POLICY_HOME}/servers/${COMPONENT_TYPE}/conf"
127         
128         /bin/cp "${POLICY_HOME}/install/servers/common/tomcat/init.d/tomcatd" "${POLICY_HOME}/etc/init.d/${COMPONENT_TYPE}"
129         /bin/sed -i -e "s!\${{COMPONENT_TYPE}}!${COMPONENT_TYPE}!g" "${POLICY_HOME}/etc/init.d/${COMPONENT_TYPE}" >/dev/null 2>&1
130
131
132         /bin/cp -fr "${POLICY_HOME}"/install/servers/${COMPONENT_TYPE}/webapps/* "${POLICY_HOME}/servers/${COMPONENT_TYPE}/webapps"
133         /bin/cp -fr "${POLICY_HOME}"/install/servers/${COMPONENT_TYPE}/bin/* "${POLICY_HOME}/servers/${COMPONENT_TYPE}/bin" >/dev/null 2>&1
134         /bin/cp -fr "${POLICY_HOME}"/install/servers/${COMPONENT_TYPE}/conf/* "${POLICY_HOME}/servers/${COMPONENT_TYPE}/conf" >/dev/null 2>&1
135         
136         /bin/rm -fr "${POLICY_HOME}/servers/${COMPONENT_TYPE}/webapps/docs" \
137                  "${POLICY_HOME}/servers/${COMPONENT_TYPE}/webapps/examples" \
138                  "${POLICY_HOME}/servers/${COMPONENT_TYPE}/webapps/ROOT" \
139                  "${POLICY_HOME}/servers/${COMPONENT_TYPE}/webapps/manager" \
140                  "${POLICY_HOME}/servers/${COMPONENT_TYPE}/webapps/host-manager"
141         
142         if [[ ${COMPONENT_TYPE} == console ]]; then
143                 install_onap_portal_settings
144         fi
145
146         return 0
147 }
148
149 function configure_tomcat_component() {
150         configure_component "${COMPONENT_TYPE}.conf" "${POLICY_HOME}/servers/${COMPONENT_TYPE}/"
151 }
152
153 function configure_component() {
154         if [[ $DEBUG == y ]]; then
155                 echo "-- ${FUNCNAME[0]} $@ --"
156                 set -x
157         fi
158                 
159         if ! process_configuration "${COMPONENT_TYPE}.conf"; then
160                 echo "error: aborting ${COMPONENT_TYPE} installation: cannot process configuration ${COMPONENT_TYPE}.conf"
161                 exit 1
162         fi
163         
164         CONF_FILE=$1
165         COMPONENT_ROOT_DIR=$2
166         
167         SED_LINE="sed -i"
168         SED_LINE+=" -e 's!\${{POLICY_HOME}}!${POLICY_HOME}!g' "
169         SED_LINE+=" -e 's!\${{POLICY_USER}}!${POLICY_USER}!g' "
170         SED_LINE+=" -e 's!\${{POLICY_GROUP}}!${POLICY_GROUP}!g' "
171         SED_LINE+=" -e 's!\${{KEYSTORE_PASSWD}}!${KEYSTORE_PASSWD}!g' "
172         SED_LINE+=" -e 's!\${{JAVA_HOME}}!${JAVA_HOME}!g' "
173         SED_LINE+=" -e 's!\${{COMPONENT_TYPE}}!${COMPONENT_TYPE}!g' "
174         SED_LINE+=" -e 's!\${{POLICY_LOGS}}!${POLICY_LOGS}!g' "
175                 
176         while read line || [ -n "${line}" ]; do
177         if [[ -n $line ]] && [[ $line != \#* ]]; then
178                 name=$(echo "${line%%=*}")
179                 value=$(echo "${line#*=}")
180                 # escape ampersand so that sed does not replace it with the search string
181                 value=${value//&/\\&}
182                 if [[ -z ${name} ]] || [[ -z ${value} ]]; then
183                         echo "WARNING: ${line} missing name or value"
184                 fi
185                 SED_LINE+=" -e 's!\${{${name}}}!${value}!g' "
186                 
187         fi
188         done < "$CONF_FILE"
189         
190         SED_FILES=""
191         for sed_file in $(find "${COMPONENT_ROOT_DIR}" -name '*.xml' -o -name '*.sh' -o -name '*.properties' -o -name '*.conf' -o -name '*.cfg' -o -name '*.template' -o -name '*.conf' -o -name '*.cron' -o -name '*.json' | grep -v /backup/); do
192                 if fgrep -l '${{' ${sed_file} > /dev/null 2>&1; then
193                         SED_FILES+="${sed_file} "
194                 fi
195         done
196
197         if [[ -f $HOME/.m2/settings.xml ]]; then
198                 SED_FILES+="$HOME/.m2/settings.xml "
199         fi
200         
201
202         if [[ -z ${SED_FILES} ]]; then
203                 echo "WARNING: no xml, sh, properties, or conf files to perform configuration expansion"
204         else
205                 SED_LINE+=${SED_FILES}
206                 eval "${SED_LINE}"
207         fi
208
209         list_unexpanded_files ${POLICY_HOME}
210 }
211
212 function install_onap_portal_settings() {
213         echo "Install onap portal settings"
214
215         # unpack onap war file
216         mkdir -p "${POLICY_HOME}"/servers/console/webapps/onap
217         cd "${POLICY_HOME}"/servers/console/webapps/onap
218         unzip -q ../onap.war
219         cd ${INSTALL_DIR}
220
221         # copy over the configured settings
222         /bin/cp -fr "${POLICY_HOME}"/install/servers/onap/* "${POLICY_HOME}/servers/console/webapps/onap"
223 }
224
225 function check_r_file() {
226         if [[ $DEBUG == y ]]; then
227                 echo "-- ${FUNCNAME[0]} $@ --"
228                 set -x
229         fi
230
231         FILE=$1
232         if [[ ! -f ${FILE} || ! -r ${FILE} ]]; then
233         return 1
234         fi
235
236         return 0
237 }
238
239 function check_x_file() {       
240         if [[ $DEBUG == y ]]; then
241                 echo "-- ${FUNCNAME[0]} $@ --"
242                 set -x
243         fi
244
245         FILE=$1
246         if [[ ! -f ${FILE} || ! -x ${FILE} ]]; then
247         return 1
248         fi
249
250         return 0
251 }
252
253 function install_prereqs() {
254         if [[ $DEBUG == y ]]; then
255                 echo "-- ${FUNCNAME[0]} $@ --"
256                 set -x
257         fi
258         
259         CONF_FILE=$1
260         
261         if ! check_r_file "${CONF_FILE}"; then
262                 echo "error: aborting ${COMPONENT_TYPE} installation: ${CONF_FILE} is not accessible"
263                 exit 1
264         fi
265         
266         if ! process_configuration "${CONF_FILE}"; then
267                 echo "error: aborting ${COMPONENT_TYPE} installation: cannot process configuration ${CONF_FILE}"
268                 exit 1
269         fi
270         
271 #       if ! check_java "1.8"; then
272 #               echo "error: aborting ${COMPONENT_TYPE} installation: invalid java version"
273 #               exit 1
274 #       fi
275         
276         if [[ -z ${POLICY_HOME} ]]; then
277                 echo "error: aborting ${COMPONENT_TYPE} installation: ${POLICY_HOME} is not set"
278                 exit 1  
279         fi
280
281         HOME_OWNER=$(ls -ld "${POLICY_HOME}" | awk '{print $3}')
282         if [[ ${HOME_OWNER} != ${POLICY_USER} ]]; then
283                 echo "error: aborting ${COMPONENT_TYPE} installation: ${POLICY_USER} does not own ${POLICY_HOME} directory"
284                 exit 1
285         fi
286         
287         echo -n "Starting ${OPERATION} of ${COMPONENT_TYPE} under ${POLICY_USER}:${POLICY_GROUP} "
288         echo "ownership with umask $(umask)."
289 }
290
291 function list_unexpanded_files() {
292         ROOT_DIR=$1
293         SEARCH_LIST=$(find ${ROOT_DIR} -type f -name '*.properties' -o -name '*.sh'  -o -name '*.conf' -o -name '*.yml' -o -name '*.template' -o -name '*.xml' -o -name '*.cfg' -o -name '*.json' -o -path "${ROOT_DIR}/etc/init.d/*" | egrep -v '/m2/|/install/|/logs/')
294     NOT_EXPANDED_BASE_FILES=$(grep -l '${{' ${SEARCH_LIST} 2> /dev/null)
295         if [[ -n ${NOT_EXPANDED_BASE_FILES} ]]; then
296                 echo "error: component installation has completed but some base files have not been expanded:"
297                 echo "${NOT_EXPANDED_BASE_FILES}"
298                 return 1
299         fi
300         return 0
301 }
302
303 function install_base() {
304         if [[ $DEBUG == y ]]; then
305                 echo "-- ${FUNCNAME[0]} $@ --"
306                 set -x
307         fi
308         
309         install_prereqs "${BASE_CONF}"
310         
311         if [[ -z ${POLICY_HOME} ]]; then
312                 echo "error: ${POLICY_HOME} is not set"
313                 exit 1
314         fi
315         
316         POLICY_HOME_CONTENTS=$(ls -A "${POLICY_HOME}" 2> /dev/null)
317         if [[ -n ${POLICY_HOME_CONTENTS} ]]; then
318                 echo "error: aborting base installation: ${POLICY_HOME} directory is not empty"
319                 exit 1
320         fi
321         
322         if [[ ! -d ${POLICY_HOME} ]]; then
323                 echo "error: aborting base installation: ${POLICY_HOME} is not a directory."
324                 exit 1
325         fi
326         
327         if ! /bin/mkdir -p "${POLICY_HOME}/servers/" > /dev/null 2>&1; then     
328                 echo "error: aborting base installation: cannot create ${POLICY_HOME}/servers/"
329                 exit 1
330         fi      
331         
332         if ! /bin/mkdir -p "${POLICY_LOGS}" > /dev/null 2>&1; then      
333                 echo "error: aborting base installation: cannot create ${POLICY_LOGS}"
334                 exit 1
335         fi      
336         
337         if ! /bin/mkdir -p "${POLICY_HOME}/logs/" > /dev/null 2>&1; then        
338                 echo "error: aborting base installation: cannot create ${POLICY_HOME}/logs/"
339                 exit 1
340         fi      
341         
342         BASE_TGZ=$(ls base-*.tar.gz)
343         if [ ! -r ${BASE_TGZ} ]; then
344                 echo "error: aborting base installation: ${POLICY_USER} cannot access tar file: ${BASE_TGZ}"
345                 exit 1                  
346         fi
347         
348         tar -tzf ${BASE_TGZ} > /dev/null 2>&1
349         if [[ $? != 0 ]]; then
350                 echo >&2 "error: aborting base installation: invalid base package tar file: ${BASE_TGZ}"
351                 exit 1
352         fi
353         
354         BASH_PROFILE_LINE=". ${POLICY_HOME}/etc/profile.d/env.sh"
355         PROFILE_LINE="ps -p \$\$ | grep -q bash || . ${POLICY_HOME}/etc/profile.d/env.sh"
356                 
357         tar -C ${POLICY_HOME} -xf ${BASE_TGZ} --no-same-owner
358         if [[ $? != 0 ]]; then
359                 # this should not happened
360                 echo "error: aborting base installation: base package cannot be unpacked: ${BASE_TGZ}"
361                 exit 1
362         fi
363
364         /bin/mkdir -p ${POLICY_HOME}/etc/init.d > /dev/null 2>&1
365         /bin/mkdir -p ${POLICY_HOME}/tmp > /dev/null 2>&1
366         /bin/mkdir -p ${POLICY_HOME}/var > /dev/null 2>&1
367                         
368         #list_unexpanded_files ${POLICY_HOME}
369 }
370
371
372 function configure_base() {
373         if [[ $DEBUG == y ]]; then
374                 echo "-- ${FUNCNAME[0]} $@ --"
375                 set -x
376         fi
377         
378         # check if fqdn is set in base.conf and use that value if set
379         if [[ -z ${INSTALL_FQDN} ]]
380         then
381                 echo "FQDN not set in config...using the default FQDN ${FQDN}"
382         else
383                 echo "Using FQDN ${INSTALL_FQDN} from config"
384                 FQDN=${INSTALL_FQDN}
385         fi
386
387         configure_component "${BASE_CONF}" "${POLICY_HOME}"
388         
389         BASH_PROFILE_LINE=". ${POLICY_HOME}/etc/profile.d/env.sh"
390         PROFILE_LINE="ps -p \$\$ | grep -q bash || . ${POLICY_HOME}/etc/profile.d/env.sh"
391         
392         if ! fgrep -x "${BASH_PROFILE_LINE}" "${HOME}/.bash_profile" >/dev/null 2>&1; then
393                 echo "${BASH_PROFILE_LINE}" >> "${HOME}/.bash_profile"
394         fi
395         
396         if ! fgrep -x "${PROFILE_LINE}" "${HOME}/.profile" >/dev/null 2>&1; then
397                 echo "${PROFILE_LINE}" >> "${HOME}/.profile"
398         fi
399 }
400
401 function configure_keystore() {
402         if [[ $DEBUG == y ]]; then
403                 echo "-- ${FUNCNAME[0]} --"
404                 set -x
405         fi
406
407     local DEFAULT_KEYSTORE_PASSWORD="Pol1cy_0nap"
408
409         if [[ -n ${KEYSTORE_PASSWD} ]]; then
410             keytool -storepasswd -storepass ${DEFAULT_KEYSTORE_PASSWORD} -keystore ${POLICY_HOME}/etc/ssl/policy-keystore -new ${KEYSTORE_PASSWD}
411             keytool -list -keystore ${POLICY_HOME}/etc/ssl/policy-keystore -storepass ${KEYSTORE_PASSWD}
412         fi
413 }
414
415
416 function install_tomcat_component() {
417         if [[ $DEBUG == y ]]; then
418                 echo "-- ${FUNCNAME[0]} $@ --"
419                 set -x
420         fi
421         
422         install_prereqs "${BASE_CONF}"
423
424         if ! process_configuration "${COMPONENT_TYPE}.conf"; then
425                 echo "error: aborting ${COMPONENT_TYPE} installation: cannot process configuration ${COMPONENT_TYPE}.conf"
426                 exit 1
427         fi
428         
429         if ! tomcat_component; then
430                 echo "error: aborting ${COMPONENT_TYPE} installation: tomcat installation failed."
431                 exit 1                  
432         fi
433         
434 }
435
436 # This function installs mysql related shell scripts and sql files in the proper locations
437 # under $POLICY_HOME. It also adds the MySQL client bin to the PATH based on configuration.
438 #
439 function install_mysql() {
440         if [[ $DEBUG == y ]]; then
441                 echo "-- ${FUNCNAME[0]} $@ --"
442                 set -x
443         fi
444         
445         install_prereqs "${BASE_CONF}"
446
447         if ! process_configuration "${COMPONENT_TYPE}.conf"; then
448                 echo "error: aborting ${COMPONENT_TYPE} installation: cannot process configuration ${COMPONENT_TYPE}.conf"
449                 exit 1
450         fi
451         
452         MYSQL_DATA_PATH=${POLICY_HOME}/data/mysql
453         /bin/mkdir -p ${MYSQL_DATA_PATH} > /dev/null 2>&1
454         
455         /bin/cp -f "${POLICY_HOME}"/install/mysql/data/* "${MYSQL_DATA_PATH}"
456         /bin/chmod 555 "${MYSQL_DATA_PATH}"/*
457         
458         MYSQL_BIN_SOURCE=${POLICY_HOME}/install/mysql/bin
459         /bin/mkdir -p ${POLICY_HOME}/bin > /dev/null 2>&1
460         for script in $(/bin/ls "${MYSQL_BIN_SOURCE}"); do
461                 /bin/cp ${MYSQL_BIN_SOURCE}/${script} ${POLICY_HOME}/bin
462                 /bin/chmod 555 "${POLICY_HOME}/bin/${script}"
463         done
464 }
465
466 function configure_mysql() {
467         if [[ $DEBUG == y ]]; then
468                 echo "-- ${FUNCNAME[0]} $@ --"
469                 set -x
470         fi
471         
472         # get user/pass/host from base.conf 
473         if ! check_r_file "${BASE_CONF}"; then
474              echo "error: aborting ${COMPONENT_TYPE} installation: ${BASE_CONF} is not accessible"
475              exit 1
476         fi
477         DB_USER=`grep "^JDBC_USER=" ${BASE_CONF}     | awk -F'=' '{print $2}'`
478         DB_PASS=`grep "^JDBC_PASSWORD=" ${BASE_CONF} | awk -F'=' '{print $2}'`
479         DB_HOST=`grep "^JDBC_URL=" ${BASE_CONF}      | awk -F'=' '{print $2}' | awk -F':' '{print $3}' | sed -e"s/\///g"`
480         echo "Perform DB schema upgrade on: $DB_HOST"
481         if ! check_x_file "${POLICY_HOME}/bin/db_upgrade_remote.sh"; then
482              echo "error: ${POLICY_HOME}/bin/db_upgrade_remote.sh is not accessible"
483              exit 1
484         else
485              ${POLICY_HOME}/bin/db_upgrade_remote.sh "${DB_USER}" "${DB_PASS}" "${DB_HOST}"
486         fi
487         return 0
488 }
489
490 # This function installs elk related shell scripts and sql files in the proper locations
491 # under $POLICY_HOME. It also adds the Elk to the PATH based on configuration.
492 #
493 function configure_elk() {
494         if [[ $DEBUG == y ]]; then
495                 echo "-- ${FUNCNAME[0]} $@ --"
496                 set -x
497         fi
498         
499         # nothing to do
500 }
501
502 function install_elk() {
503         if [[ $DEBUG == y ]]; then
504                 echo "-- ${FUNCNAME[0]} $@ --"
505                 set -x
506         fi
507         
508         if [[ -f "${HOME}/.bash_profile" ]]; then
509                 source "${HOME}/.bash_profile"
510         fi
511         
512         if [[ -f "${HOME}/.profile" ]]; then
513                 source "${HOME}/.profile"
514         fi
515         
516         ELK_TARGET_INSTALL_DIR="${POLICY_HOME}"/elk
517         
518         if [[ -d ${ELK_TARGET_INSTALL_DIR} ]]; then
519                 echo "WARNING: ${ELK_TARGET_INSTALL_DIR} exists."
520                 return 1
521         fi
522         
523         /bin/mkdir -p "${ELK_TARGET_INSTALL_DIR}" > /dev/null 2>&1
524         
525         if [[ ! -d ${ELK_TARGET_INSTALL_DIR} ]]; then
526                 echo "WARNING: ${ELK_TARGET_INSTALL_DIR} doesn't exist."
527                 return 1
528         fi
529         
530         cd ${ELK_TARGET_INSTALL_DIR}
531         curl -L -O https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-5.4.0.tar.gz
532         
533         tar xvzf elasticsearch-5.4.0.tar.gz -C .
534         /bin/rm -fr elasticsearch-5.4.0.tar.gz
535         /bin/mv  ${ELK_TARGET_INSTALL_DIR}/elasticsearch-5.4.0/* .
536         /bin/rm -fr ${ELK_TARGET_INSTALL_DIR}/elasticsearch-5.4.0
537         
538         /bin/cp "${POLICY_HOME}"/install/elk/bin/* "${POLICY_HOME}/bin" 
539         /bin/cp -f "${POLICY_HOME}"/install/elk/config/* "${ELK_TARGET_INSTALL_DIR}/config"
540         /bin/cp -f "${POLICY_HOME}/install/elk/init.d/elkd" "${POLICY_HOME}/etc/init.d/elk"
541         
542         install_prereqs "${COMPONENT_TYPE}.conf"
543         
544         /bin/sed -i -e "s!\${{POLICY_HOME}}!${POLICY_HOME}!g" \
545                 -e "s!\${{FQDN}}!${FQDN}!g" \
546                 -e "s!\${{ELK_JMX_PORT}}!${ELK_JMX_PORT}!g" \
547                 "${ELK_TARGET_INSTALL_DIR}"/config/* "${POLICY_HOME}/etc/init.d/elk" > /dev/null 2>&1
548                 
549
550         list_unexpanded_files ${POLICY_HOME}
551                 
552         return $?
553 }
554
555 # This function installs brmsgw related shell scripts and config files in the proper
556 # locations under $POLICY_HOME. 
557 #
558
559 function install_brmsgw() {
560         if [[ $DEBUG == y ]]; then
561                 echo "-- ${FUNCNAME[0]} $@ --"
562                 set -x
563         fi
564         
565         install_prereqs "${BASE_CONF}"
566
567         if [[ -n ${BUILD_VERSION} ]]; then
568                 echo "Replacing ${BUILD_VERSION} in ${COMPONENT_TYPE}.conf"
569                 sed -i -e "s/^BRMS_DEPENDENCY_VERSION=.*$/BRMS_DEPENDENCY_VERSION=${BUILD_VERSION}/g" "${COMPONENT_TYPE}.conf"
570         fi
571         
572         if ! process_configuration "${COMPONENT_TYPE}.conf"; then
573                 echo "error: aborting ${COMPONENT_TYPE} installation: cannot process configuration ${COMPONENT_TYPE}.conf"
574                 exit 1
575         fi
576         
577         if [ -z "$M2_HOME" ]; then
578                 echo "error: aborting ${COMPONENT_TYPE} installation: M2_HOME must be set in brmsgw.conf"
579                 exit 1
580         fi
581         
582         echo "export M2_HOME=$M2_HOME" >>$POLICY_HOME/etc/profile.d/env.sh
583
584         /bin/cp -f "${POLICY_HOME}/install/servers/brmsgw/init.d/brmsgw" "${POLICY_HOME}/etc/init.d/brmsgw"
585         
586         if ! /bin/mkdir -p "${POLICY_HOME}/servers/${COMPONENT_TYPE}" > /dev/null 2>&1; then    
587                 echo "error: aborting base installation: cannot create ${POLICY_HOME}/servers/${COMPONENT_TYPE}"
588                 exit 1
589         fi      
590
591         /bin/cp -fr "${POLICY_HOME}"/install/servers/${COMPONENT_TYPE}/BRMSGateway.jar "${POLICY_HOME}/servers/${COMPONENT_TYPE}"
592         /bin/cp -fr "${POLICY_HOME}"/install/servers/${COMPONENT_TYPE}/*.properties "${POLICY_HOME}/servers/${COMPONENT_TYPE}"
593         /bin/cp -fr "${POLICY_HOME}"/install/servers/${COMPONENT_TYPE}/config "${POLICY_HOME}/servers/${COMPONENT_TYPE}"
594         /bin/cp -fr "${POLICY_HOME}"/install/servers/${COMPONENT_TYPE}/dependency.json "${POLICY_HOME}/servers/${COMPONENT_TYPE}"
595         
596         /bin/mv $POLICY_HOME/m2 $HOME/.m2
597
598         return 0
599 }
600
601
602 function install_logparser() {
603         if [[ $DEBUG == y ]]; then
604                 echo "-- ${FUNCNAME[0]} $@ --"
605                 set -x
606         fi
607         
608         install_prereqs "${BASE_CONF}"
609
610         if ! process_configuration "${COMPONENT_TYPE}.conf"; then
611                 echo "error: aborting ${COMPONENT_TYPE} installation: cannot process configuration ${COMPONENT_TYPE}.conf"
612                 exit 1
613         fi
614         
615         LP_TARGET_DIR=${POLICY_HOME}/servers/${COMPONENT_TYPE}
616         /bin/mkdir -p ${LP_TARGET_DIR}/bin > /dev/null 2>&1
617         /bin/mkdir -p ${LP_TARGET_DIR}/logs > /dev/null 2>&1
618         
619         # copy binaries, initialization script and configuration
620         /bin/cp "${POLICY_HOME}"/install/servers/common/logparser/bin/*jar "${LP_TARGET_DIR}/bin"
621         /bin/cp "${POLICY_HOME}/install/servers/common/logparser/init.d/logparserd" "${POLICY_HOME}/etc/init.d/${COMPONENT_TYPE}"
622         /bin/cp "${POLICY_HOME}/install/servers/${COMPONENT_TYPE}/bin/parserlog.properties" "${LP_TARGET_DIR}/bin"
623         /bin/cp -fr "${POLICY_HOME}"/install/servers/${COMPONENT_TYPE}/bin/config "${POLICY_HOME}/servers/${COMPONENT_TYPE}/bin"
624         
625 }
626
627 #########################################################################
628 ##
629 ## script execution body
630 ##
631 #########################################################################
632
633
634 OPERATION=none
635 COMPONENT_TYPE=none
636 DEBUG=n
637
638 BASE_CONF=base.conf
639
640 TOMCAT_PACKAGE_NAME=apache-tomcat-8.0.50
641
642 INSTALL_DIR="$(pwd)"
643
644 export POLICY_USER=$(/usr/bin/id -un)
645
646 # command line options parsing
647 until [[ -z "$1" ]]; do
648         case $1 in
649                 -d|--debug)     DEBUG=y
650                                                 set -x
651                                                 ;;
652                 -i|--install)   OPERATION=install
653                                                 shift
654                                                 COMPONENT_TYPE=$1
655                                                 ;;
656                 -c|--configure) OPERATION=configure
657                                                 shift
658                                                 COMPONENT_TYPE=$1
659                                                 ;;
660                 *)                              usage
661                                                 exit 1
662                                                 ;;
663         esac
664         shift
665 done
666
667 # component-type validation
668 case $COMPONENT_TYPE in
669         base)   ;;
670         pdp)    ;;
671         pap)    ;;
672         console)        ;;
673         mysql)  ;;
674         elk)    ;;
675         brmsgw) ;;
676         paplp)  ;;
677         pdplp)  ;;
678         skip)   ;;
679         *)              echo "invalid component type (${COMPONENT_TYPE}): must be in {base|pdp|pap|console|mysql|elk|brmsgw|paplp|pdplp}";
680                         usage
681                         exit 1
682                         ;;
683 esac
684
685 # operation validation
686 case $OPERATION in
687         install|configure)      ;;
688         *)              echo "invalid operation (${OPERATION}): must be in {install|configure}";
689                         usage
690                         exit 1
691                         ;;
692 esac
693
694 if [[ -n ${POLICY_GROUP} ]]; then
695         groups=$(groups)
696         if ! echo ${groups} | grep -qP "\b${POLICY_GROUP}"; then
697                 echo "error: ${POLICY_GROUP} is not a valid group for account ${POLICY_USER}"
698                 exit 1
699         fi
700 fi
701
702 if [[ -z ${POLICY_GROUP} ]]; then
703         numGroups=$(groups | sed "s/^.*: *//g" | wc -w)
704         if [ ${numGroups} -eq 1 ]; then
705                 export POLICY_GROUP=$(groups ${POLICY_USER} | sed "s/^.*: *//g")
706         else
707                 echo "error: ${POLICY_USER} belongs to multiple groups, one group \
708               must be provided for the installation"
709                 usage
710                 exit 1
711         fi
712 fi
713
714 if [[ -z ${POLICY_GROUP} ]]; then
715         echo "error: installation of root section must not provide the \
716               installation group owner argument."
717         usage
718         exit 1
719 fi
720
721 if [[ -z ${POLICY_LOGS} ]]; then
722     echo "POLICY_LOGS environment variable NOT set, default to /var/log/onap"
723     export POLICY_LOGS="/var/log/onap"
724 fi
725
726 FQDN=$(hostname -f 2> /dev/null)
727 if [[ $? != 0 || -z ${FQDN} ]]; then
728         echo "error: cannot determine the FQDN for this host $(hostname)."
729         exit 1
730 fi
731
732 if [[ ${OPERATION} == install ]]; then
733         case $COMPONENT_TYPE in
734                 base)   
735                         install_base
736                         ;;
737                 pdp)    
738                         install_tomcat_component
739                         ;;
740                 pap)
741                         install_tomcat_component
742                         ;;
743                 console)
744                         install_tomcat_component
745                         ;;
746                 mysql)
747                         install_mysql
748                         ;;
749                 elk)
750                         install_elk
751                         ;;              
752                 brmsgw)
753                         install_brmsgw
754                         ;;
755                 paplp|pdplp)
756                         install_logparser
757                         ;;
758                 *)              
759                         echo "invalid component type (${COMPONENT_TYPE}): must be in {base|pdp|pap|console|mysql|elk|brmsgw|paplp|pdplp}";
760                         usage
761                         exit 1
762                         ;;
763         esac
764 fi
765 if [[ ${OPERATION} == configure ]]; then
766
767         install_prereqs "${BASE_CONF}"
768
769         case $COMPONENT_TYPE in
770                 base)   
771                         configure_base
772                         component_preconfigure
773                         configure_keystore
774                         ;;
775                 pdp)    
776                         configure_component "${COMPONENT_TYPE}.conf" "${POLICY_HOME}/servers/${COMPONENT_TYPE}/"
777                         ;;
778                 pap)
779                         configure_component "${COMPONENT_TYPE}.conf" "${POLICY_HOME}/servers/${COMPONENT_TYPE}/"
780                         ;;
781                 console)
782                         configure_component "${COMPONENT_TYPE}.conf" "${POLICY_HOME}/servers/${COMPONENT_TYPE}/"
783                         ;;
784                 mysql)
785                         configure_mysql
786                         ;;
787                 elk)
788                         configure_elk
789                         ;;      
790                 brmsgw)
791                         configure_component "${COMPONENT_TYPE}.conf" "${POLICY_HOME}/servers/${COMPONENT_TYPE}/"
792                         ;;
793                 paplp|pdplp)
794                         configure_component "${COMPONENT_TYPE}.conf" "${POLICY_HOME}/servers/${COMPONENT_TYPE}/"
795                         ;;
796                 *)              
797                         echo "invalid component type (${COMPONENT_TYPE}): must be in {base|pdp|pap|console|mysql|elk|brmsgw|paplp|pdplp}";
798                         usage
799                         exit 1
800                         ;;
801         esac
802 fi
803
804
805 echo -n "Successful ${OPERATION} of ${COMPONENT_TYPE} under ${POLICY_USER}:${POLICY_GROUP} "
806 echo "ownership with umask $(umask)."