|
1 | 1 | #! /bin/bash
|
2 | 2 | ###############################################################
|
3 | 3 | #
|
4 |
| -# Copyright 2019 MarkLogic Corporation. All Rights Reserved. |
| 4 | +# Copyright 2022 MarkLogic Corporation. All Rights Reserved. |
5 | 5 | #
|
6 | 6 | ###############################################################
|
7 |
| -# initialise and start MarkLogic server |
| 7 | +# Initialise and start MarkLogic server |
8 | 8 | #
|
9 | 9 | # ex.
|
10 | 10 | # > start-marklogic.sh
|
11 | 11 | #
|
12 | 12 | ###############################################################
|
13 | 13 |
|
14 |
| -cd ~ |
| 14 | +############################################################### |
| 15 | +# Prepare script |
| 16 | +############################################################### |
| 17 | +cd ~ || exit |
| 18 | +# Convert booleans to lowercase |
| 19 | +for var in OVERWRITE_ML_CONF INSTALL_CONVERTERS MARKLOGIC_DEV_BUILD MARKLOGIC_INIT MARKLOGIC_JOIN_CLUSTER; do |
| 20 | + declare $var="$(echo "${!var}" | sed -e 's/[[:blank:]]//g' | awk '{print tolower($0)}')" |
| 21 | +done |
| 22 | + |
| 23 | +# define log and err functions |
| 24 | +log() { |
| 25 | + echo "$(basename "${0}"): ${*}" |
| 26 | +} |
| 27 | +err() { |
| 28 | + echo "$(basename "${0}") ERROR: ${*}" >&2 |
| 29 | + exit 1 |
| 30 | +} |
15 | 31 |
|
16 | 32 | ################################################################
|
17 |
| -# Read in ENV values |
| 33 | +# Read in ENV values for marklogic.conf |
18 | 34 | ################################################################
|
19 | 35 |
|
20 |
| -# If an ENV value exists in a list, append it to the /etc/marklogic.conf file |
21 |
| -if [[ -z $OVERWRITE_ML_CONF ]] || [[ "$OVERWRITE_ML_CONF" = "false" ]] ; then |
22 |
| - echo "Not writing to /etc/marklogic.conf" |
23 |
| -else |
24 |
| - echo "Deleting previous /etc/marklogic.conf ,if it exists, and overwriting with env variables" |
| 36 | +# If an ENV value exists in a list, append it to the /etc/marklogic.conf file |
| 37 | +if [[ "${OVERWRITE_ML_CONF}" = "true" ]]; then |
| 38 | + log "Deleting previous /etc/marklogic.conf, if it exists, and overwriting with env variables." |
25 | 39 | rm -f /etc/marklogic.conf
|
26 | 40 | sudo touch /etc/marklogic.conf && sudo chmod 777 /etc/marklogic.conf
|
27 | 41 |
|
28 |
| - |
29 |
| - [[ $MARKLOGIC_PID_FILE ]] && sudo echo "export MARKLOGIC_PID_FILE=$MARKLOGIC_PID_FILE" >> /etc/marklogic.conf |
30 |
| - [[ $MARKLOGIC_UMASK ]] && sudo echo "export MARKLOGIC_UMASK=$MARKLOGIC_UMASK" >> /etc/marklogic.conf |
31 |
| - [[ $TZ ]] && sudo echo "export TZ=$TZ " >> /etc/marklogic.conf |
32 |
| - [[ $MARKLOGIC_ADMIN_USERNAME ]] && sudo echo "export MARKLOGIC_ADMIN_USERNAME=$MARKLOGIC_ADMIN_USERNAME" >> /etc/marklogic.conf |
33 |
| - [[ $MARKLOGIC_ADMIN_PASSWORD ]] && sudo echo "export MARKLOGIC_ADMIN_PASSWORD=$MARKLOGIC_ADMIN_PASSWORD" >> /etc/marklogic.conf |
34 |
| - [[ $MARKLOGIC_LICENSEE ]] && sudo echo "export MARKLOGIC_LICENSEE=$MARKLOGIC_LICENSEE" >> /etc/marklogic.conf |
35 |
| - [[ $MARKLOGIC_LICENSE_KEY ]] && sudo echo "export MARKLOGIC_LICENSE_KEY=$MARKLOGIC_LICENSE_KEY" >> /etc/marklogic.conf |
36 |
| - [[ $ML_HUGEPAGES_TOTAL ]] && sudo echo "export ML_HUGEPAGES_TOTAL=$ML_HUGEPAGES_TOTAL" >> /etc/marklogic.conf |
37 |
| - [[ $MARKLOGIC_DISABLE_JVM ]] && sudo echo "export MARKLOGIC_DISABLE_JVM=$MARKLOGIC_DISABLE_JVM" >> /etc/marklogic.conf |
38 |
| - [[ $MARKLOGIC_USER ]] && sudo echo "export MARKLOGIC_USER=$MARKLOGIC_USER" >> /etc/marklogic.conf |
39 |
| - [[ $JAVA_HOME ]] && sudo echo "export JAVA_HOME=$JAVA_HOME" >> /etc/marklogic.conf |
40 |
| - [[ $CLASSPATH ]] && sudo echo "export CLASSPATH=$CLASSPATH" >> /etc/marklogic.conf |
41 |
| - |
| 42 | + [[ "${MARKLOGIC_PID_FILE}" ]] && echo "export MARKLOGIC_PID_FILE=$MARKLOGIC_PID_FILE" >>/etc/marklogic.conf |
| 43 | + [[ "${MARKLOGIC_UMASK}" ]] && echo "export MARKLOGIC_UMASK=$MARKLOGIC_UMASK" >>/etc/marklogic.conf |
| 44 | + [[ "${TZ}" ]] && echo "export TZ=$TZ " >>/etc/marklogic.conf |
| 45 | + [[ "${MARKLOGIC_ADMIN_USERNAME}" ]] && echo "export MARKLOGIC_ADMIN_USERNAME=$MARKLOGIC_ADMIN_USERNAME" >>/etc/marklogic.conf |
| 46 | + [[ "${MARKLOGIC_ADMIN_PASSWORD}" ]] && echo "export MARKLOGIC_ADMIN_PASSWORD=$MARKLOGIC_ADMIN_PASSWORD" >>/etc/marklogic.conf |
| 47 | + [[ "${MARKLOGIC_LICENSEE}" ]] && echo "export MARKLOGIC_LICENSEE=$MARKLOGIC_LICENSEE" >>/etc/marklogic.conf |
| 48 | + [[ "${MARKLOGIC_LICENSE_KEY}" ]] && echo "export MARKLOGIC_LICENSE_KEY=$MARKLOGIC_LICENSE_KEY" >>/etc/marklogic.conf |
| 49 | + [[ "${ML_HUGEPAGES_TOTAL}" ]] && echo "export ML_HUGEPAGES_TOTAL=$ML_HUGEPAGES_TOTAL" >>/etc/marklogic.conf |
| 50 | + [[ "${MARKLOGIC_DISABLE_JVM}" ]] && echo "export MARKLOGIC_DISABLE_JVM=$MARKLOGIC_DISABLE_JVM" >>/etc/marklogic.conf |
| 51 | + [[ "${MARKLOGIC_USER}" ]] && echo "export MARKLOGIC_USER=$MARKLOGIC_USER" >>/etc/marklogic.conf |
| 52 | + [[ "${JAVA_HOME}" ]] && echo "export JAVA_HOME=$JAVA_HOME" >>/etc/marklogic.conf |
| 53 | + [[ "${CLASSPATH}" ]] && echo "export CLASSPATH=$CLASSPATH" >>/etc/marklogic.conf |
42 | 54 |
|
43 | 55 | sudo chmod 400 /etc/marklogic.conf
|
44 |
| -fi |
45 |
| - |
46 |
| - |
47 | 56 |
|
| 57 | +elif [[ -z ${OVERWRITE_ML_CONF} ]] || [[ "${OVERWRITE_ML_CONF}" = "false" ]]; then |
| 58 | + log "Not writing to /etc/marklogic.conf" |
| 59 | +else |
| 60 | + err "OVERWRITE_ML_CONF must be true or false." |
| 61 | +fi |
48 | 62 |
|
49 | 63 | ################################################################
|
50 | 64 | # Install Converters if required
|
51 | 65 | ################################################################
|
52 |
| -if [[ -z $INSTALL_CONVERTERS ]] || [[ "$INSTALL_CONVERTERS" = "false" ]] ; then |
53 |
| - echo "Not Installing Converters" |
54 |
| -else |
| 66 | +if [[ "${INSTALL_CONVERTERS}" == "true" ]]; then |
55 | 67 | if [[ -d "/opt/MarkLogic/Converters" ]]; then
|
56 |
| - echo "Converters directory: /opt/MarkLogic/Converters already exists, skipping installation" |
| 68 | + log "Converters directory: /opt/MarkLogic/Converters already exists, skipping installation." |
57 | 69 | else
|
58 |
| - echo "Installing Converters" |
| 70 | + log "Installing Converters" |
59 | 71 | CONVERTERS_PATH="/converters.rpm"
|
60 | 72 | sudo yum localinstall -y $CONVERTERS_PATH
|
61 | 73 | fi
|
| 74 | +elif [[ -z "${INSTALL_CONVERTERS}" ]] || [[ "${INSTALL_CONVERTERS}" = "false" ]]; then |
| 75 | + log "Not Installing Converters" |
| 76 | +else |
| 77 | + err "INSTALL_CONVERTERS must be true or false." |
62 | 78 | fi
|
63 | 79 |
|
64 |
| - |
65 | 80 | ################################################################
|
66 | 81 | # Setup timezone
|
67 | 82 | ################################################################
|
68 |
| -if [ ! -z $TZ ]; then |
69 |
| - sudo ln -snf /usr/share/zoneinfo/$TZ /etc/localtime |
70 |
| - echo $TZ | sudo tee /etc/timezone |
| 83 | +if [ -n "${TZ}" ]; then |
| 84 | + log "Setting timezone to ${TZ}" |
| 85 | + sudo ln -snf "/usr/share/zoneinfo/${TZ}" /etc/localtime |
| 86 | + echo "${TZ}" | sudo tee /etc/timezone |
71 | 87 | fi
|
72 | 88 |
|
73 |
| - |
74 | 89 | ################################################################
|
75 |
| -# start MarkLogic service |
| 90 | +# Start MarkLogic service |
76 | 91 | ################################################################
|
77 |
| -if [ -z $MARKLOGIC_DEV_BUILD ] |
78 |
| -then |
79 |
| -sudo service MarkLogic start |
| 92 | +if [[ "${MARKLOGIC_DEV_BUILD}" == "true" ]]; then |
| 93 | + log "MARKLOGIC_DEV_BUILD is true, starting using ${MARKLOGIC_INSTALL_DIR}/MarkLogic" |
| 94 | + sudo "${MARKLOGIC_INSTALL_DIR}/MarkLogic" -i . -d "${MARKLOGIC_DATA_DIR}" -p "${MARKLOGIC_PID_FILE}" & |
| 95 | +elif [[ -z "${MARKLOGIC_DEV_BUILD}" ]] || [[ "${MARKLOGIC_DEV_BUILD}" == "false" ]]; then |
| 96 | + sudo service MarkLogic start |
80 | 97 | else
|
81 |
| -echo "MARKLOGIC_DEV_BUILD is defined, starting using ${MARKLOGIC_INSTALL_DIR}/MarkLogic" |
82 |
| -sudo ${MARKLOGIC_INSTALL_DIR}/MarkLogic -i . -d $MARKLOGIC_DATA_DIR -p ${MARKLOGIC_PID_FILE} & |
| 98 | + err "MARKLOGIC_DEV_BUILD must be true or false." |
83 | 99 | fi
|
84 | 100 | sleep 5s
|
85 | 101 |
|
86 | 102 | ################################################################
|
87 |
| -# check if admin password is a secret or env var |
| 103 | +# Check if admin password is a secret or env var |
88 | 104 | ################################################################
|
89 |
| -SECRET_USR_FILE=/run/secrets/${MARKLOGIC_ADMIN_USERNAME_FILE} |
90 |
| -SECRET_PWD_FILE=/run/secrets/${MARKLOGIC_ADMIN_PASSWORD_FILE} |
| 105 | +SECRET_USR_FILE="/run/secrets/${MARKLOGIC_ADMIN_USERNAME_FILE}" |
| 106 | +SECRET_PWD_FILE="/run/secrets/${MARKLOGIC_ADMIN_PASSWORD_FILE}" |
91 | 107 |
|
92 |
| -if [[ -f "$SECRET_PWD_FILE" ]] && [[ ! -z "$(<"$SECRET_PWD_FILE")" ]] |
93 |
| -then |
94 |
| -echo "using docker secrets for credentials" |
95 |
| -ML_ADMIN_PASSWORD=$(<"$SECRET_PWD_FILE") |
| 108 | +if [[ -f "${SECRET_PWD_FILE}" ]] && [[ -n "$(<"${SECRET_PWD_FILE}")" ]]; then |
| 109 | + log "Using docker secrets for credentials." |
| 110 | + ML_ADMIN_PASSWORD=$(<"$SECRET_PWD_FILE") |
96 | 111 | else
|
97 |
| -echo "using ENV for credentials" |
98 |
| -ML_ADMIN_PASSWORD=$MARKLOGIC_ADMIN_PASSWORD |
| 112 | + log "Using ENV for credentials." |
| 113 | + ML_ADMIN_PASSWORD="${MARKLOGIC_ADMIN_PASSWORD}" |
99 | 114 | fi
|
100 | 115 |
|
101 |
| -if [[ -f "$SECRET_USR_FILE" ]] && [[ ! -z "$(<"$SECRET_USR_FILE")" ]] |
102 |
| -then |
103 |
| -echo "using docker secrets for credentials" |
104 |
| -ML_ADMIN_USERNAME=$(<"$SECRET_USR_FILE") |
| 116 | +if [[ -f "$SECRET_USR_FILE" ]] && [[ -n "$(<"$SECRET_USR_FILE")" ]]; then |
| 117 | + log "Using docker secrets for credentials." |
| 118 | + ML_ADMIN_USERNAME=$(<"$SECRET_USR_FILE") |
105 | 119 | else
|
106 |
| -echo "using ENV for credentials" |
107 |
| -ML_ADMIN_USERNAME=$MARKLOGIC_ADMIN_USERNAME |
| 120 | + log "Using ENV for credentials." |
| 121 | + ML_ADMIN_USERNAME="${MARKLOGIC_ADMIN_USERNAME}" |
108 | 122 | fi
|
109 | 123 |
|
110 | 124 | ################################################################
|
111 | 125 | # check bootstrap marklogic (eg. MARKLOGIC_INIT is set)
|
112 | 126 | ################################################################
|
113 |
| -if [ -z $MARKLOGIC_INIT ] || [[ "$MARKLOGIC_INIT" = "false" ]] |
114 |
| -then |
115 |
| -echo "MARKLOGIC_INIT is not defined, no bootstrap" |
116 |
| -else |
117 |
| -echo "MARKLOGIC_INIT is defined, bootstrapping" |
| 127 | +if [[ -f /opt/MarkLogic/DOCKER_INIT ]]; then |
| 128 | + log "MARKLOGIC_INIT is already initialized, no bootstrap." |
| 129 | +elif [[ "${MARKLOGIC_INIT}" = "true" ]]; then |
| 130 | + log "MARKLOGIC_INIT is true, bootstrapping." |
118 | 131 |
|
119 |
| -################################################################ |
120 |
| -# generate JSON payload conditionally with license details. |
121 |
| -################################################################ |
122 |
| -if [[ -z $LICENSE_KEY ]] || [[ -z $LICENSEE ]] |
123 |
| -then |
124 |
| -LICENSE_PAYLOAD="{}" |
125 |
| -else |
126 |
| -echo "LICENSE_KEY and LICENSEE are defined, generating license payload" |
127 |
| -LICENSE_PAYLOAD="{\"license-key\" : \"$LICENSE_KEY\",\"licensee\" : \"$LICENSEE\"}" |
128 |
| -fi |
| 132 | + # generate JSON payload conditionally with license details. |
| 133 | + if [[ -z "${LICENSE_KEY}" ]] || [[ -z "${LICENSEE}" ]]; then |
| 134 | + LICENSE_PAYLOAD="{}" |
| 135 | + else |
| 136 | + log "LICENSE_KEY and LICENSEE are defined, generating license payload." |
| 137 | + LICENSE_PAYLOAD="{\"license-key\" : \"${LICENSE_KEY}\",\"licensee\" : \"${LICENSEE}\"}" |
| 138 | + fi |
129 | 139 |
|
130 |
| -################################################################ |
131 |
| -# run init requests via curl. |
132 |
| -################################################################ |
133 |
| -curl --anyauth -i -X POST \ |
134 |
| - -H "Content-type:application/json" \ |
135 |
| - -d "$LICENSE_PAYLOAD" \ |
136 |
| - http://$HOSTNAME:8001/admin/v1/init |
137 |
| -sleep 5s |
138 |
| -curl -X POST -H "Content-type: application/x-www-form-urlencoded" \ |
139 |
| - --data "admin-username=$ML_ADMIN_USERNAME" --data "admin-password=$ML_ADMIN_PASSWORD" \ |
140 |
| - --data "realm=public" \ |
141 |
| - http://$HOSTNAME:8001/admin/v1/instance-admin |
142 |
| -sleep 5s |
| 140 | + log "Bootstrapping MarkLogic on ${HOSTNAME}." |
| 141 | + curl -s --anyauth -i -X POST \ |
| 142 | + -H "Content-type:application/json" \ |
| 143 | + -d "${LICENSE_PAYLOAD}" \ |
| 144 | + "http://${HOSTNAME}:8001/admin/v1/init" |
| 145 | + sleep 5s |
| 146 | + curl -s -X POST -H "Content-type: application/x-www-form-urlencoded" \ |
| 147 | + --data "admin-username=${ML_ADMIN_USERNAME}" --data "admin-password=${ML_ADMIN_PASSWORD}" \ |
| 148 | + --data "realm=public" \ |
| 149 | + "http://${HOSTNAME}:8001/admin/v1/instance-admin" |
| 150 | + sleep 5s |
| 151 | + sudo touch /opt/MarkLogic/DOCKER_INIT |
| 152 | +elif [[ -z "${MARKLOGIC_INIT}" ]] || [[ "${MARKLOGIC_INIT}" = "false" ]]; then |
| 153 | + log "MARKLOGIC_INIT is set to false or not defined, no bootstrap." |
| 154 | +else |
| 155 | + err "MARKLOGIC_INIT must be true or false." |
143 | 156 | fi
|
144 | 157 |
|
145 | 158 | ################################################################
|
146 | 159 | # check join cluster (eg. MARKLOGIC_JOIN_CLUSTER is set)
|
147 | 160 | ################################################################
|
148 |
| -if [ -z $MARKLOGIC_JOIN_CLUSTER ] || [[ "$MARKLOGIC_JOIN_CLUSTER" = "false" ]] |
149 |
| -then |
150 |
| -echo "MARKLOGIC_JOIN_CLUSTER is not defined, not joining cluster" |
| 161 | +if [[ -f /opt/MarkLogic/DOCKER_JOIN_CLUSTER ]]; then |
| 162 | + log "MARKLOGIC_JOIN_CLUSTER is already joined, not joining cluster." |
| 163 | +elif [[ "${MARKLOGIC_JOIN_CLUSTER}" = "true" ]]; then |
| 164 | + log "MARKLOGIC_JOIN_CLUSTER is true, joining cluster." |
| 165 | + sleep 5s |
| 166 | + /usr/local/bin/join-cluster.sh "${MARKLOGIC_BOOTSTRAP_HOST}" "${HOSTNAME}" "${ML_ADMIN_USERNAME}" "${ML_ADMIN_PASSWORD}" |
| 167 | + sudo touch /opt/MarkLogic/DOCKER_JOIN_CLUSTER |
| 168 | +elif [ -z "${MARKLOGIC_JOIN_CLUSTER}" ] || [[ "${MARKLOGIC_JOIN_CLUSTER}" = "false" ]]; then |
| 169 | + log "MARKLOGIC_JOIN_CLUSTER is false or not defined, not joining cluster." |
151 | 170 | else
|
152 |
| -echo "MARKLOGIC_JOIN_CLUSTER is defined, joining cluster" |
153 |
| -sleep 5s |
154 |
| -/usr/local/bin/join-cluster.sh $MARKLOGIC_BOOTSTRAP_HOST $HOSTNAME |
| 171 | + err "MARKLOGIC_JOIN_CLUSTER must be true or false." |
155 | 172 | fi
|
156 | 173 |
|
157 | 174 | ################################################################
|
158 | 175 | # tail ErrorLog for docker logs
|
159 | 176 | ################################################################
|
160 |
| -tail -f $MARKLOGIC_DATA_DIR/Logs/ErrorLog.txt |
| 177 | +tail -f "${MARKLOGIC_DATA_DIR}/Logs/ErrorLog.txt" |
0 commit comments