#!/bin/bash set -e LONG_DATE=`date +%Y%m%d%H%M%S` if [ -e "/usr/share/debconf/confmodule" ]; then . /usr/share/debconf/confmodule else echo "debconf must be installed. Exiting." exit 1 fi D1_LOG_DIR=/var/log/dataone D1_LOG_FILE=dataone-solr.install.log function log() { # # Set Up logging # Reminder: don't echo to stdout, it messes up debconf # if [ ! -e ${D1_LOG_DIR} ]; then mkdir -p ${D1_LOG_DIR} chown tomcat8:tomcat8 ${D1_LOG_DIR} fi now=$(date "+%Y-%m-%d %H:%M:%S %Z: ") echo -e "${now} postinst $@" >> ${D1_LOG_DIR}/${D1_LOG_FILE} } SOLR_USER=tomcat8 SOLR_ROOT=/var/solr SOLR_SERVER_PORT=8983 ZK_CLIENT_PORT=2181 # Substitution tokens used in config files solr.in.sh SERVER_1_TOKEN="D1_CN_IP_1" SERVER_2_TOKEN="D1_CN_IP_2" SERVER_3_TOKEN="D1_CN_IP_3" ZK_CLIENT_PORT_TOKEN="D1_ZK_CLIENT_PORT" log "start" if ! (/etc/init.d/solr stop >> ${D1_LOG_DIR}/${D1_LOG_FILE} 2>&1); then log "solr refused to stop" fi ## Deploy and configure files that need variable subsitution ##### Parse node.properties to derive CN IP list. db_get dataone-cn-os-core/cn.iplist IP_LIST=(${RET}) SERVER_1=${IP_LIST[0]} SERVER_2=${IP_LIST[1]} SERVER_3=${IP_LIST[2]} ##### Use hostname command to derive local IP, used to set zookeeper server myid file. MY_POSSIBLE_IPS=(`hostname --all-ip-addresses`) for i in ${MY_POSSIBLE_IPS[@]} do if [[ "${IP_LIST[@]}" =~ "${i}" ]]; then LOCAL_IP=${i} fi done cp /usr/share/dataone-solr/debian/server_configs/solr.in.sh ${SOLR_ROOT}/ cp /usr/share/dataone-solr/debian/server_configs/solr /etc/init.d/ chmod 755 /etc/init.d/solr update-rc.d solr defaults update-rc.d solr enable ##### Configure solr.in.sh with server configuration if ! (sed -i "s/$SERVER_1_TOKEN/$SERVER_1/g" ${SOLR_ROOT}/solr.in.sh >> ${D1_LOG_DIR}/${D1_LOG_FILE} 2>&1); then log "Unable to modify ${SOLR_ROOT}/solr.in.sh for $SERVER_1_TOKEN $SERVER_1" fi if ! (sed -i "s/$SERVER_2_TOKEN/$SERVER_2/g" ${SOLR_ROOT}/solr.in.sh >> ${D1_LOG_DIR}/${D1_LOG_FILE} 2>&1); then log "Unable to modify ${SOLR_ROOT}/solr.in.sh for $SERVER_2_TOKEN $SERVER_2" fi if ! (sed -i "s/$SERVER_3_TOKEN/$SERVER_3/g" ${SOLR_ROOT}/solr.in.sh >> ${D1_LOG_DIR}/${D1_LOG_FILE} 2>&1); then log "Unable to modify ${SOLR_ROOT}/start.in.sh for server $SERVER_3_TOKEN $SERVER_3" fi if ! (sed -i "s/$ZK_CLIENT_PORT_TOKEN/$ZK_CLIENT_PORT/g" ${SOLR_ROOT}/solr.in.sh >> ${D1_LOG_DIR}/${D1_LOG_FILE} 2>&1); then log "Unable to modify ${SOLR_ROOT}/start.in.sh for $ZK_CLIENT_PORT_TOKEN $ZK_CLIENT_PORT" fi ### Firewall configuration to allow solr communication if ! (ufw allow from $SERVER_1 to any port $SOLR_SERVER_PORT >> ${D1_LOG_DIR}/${D1_LOG_FILE} 2>&1); then log "Unable to open ufw port $SOLR_SERVER_PORT for $SERVER_1 " fi if ! (ufw allow from $SERVER_2 to any port $SOLR_SERVER_PORT >> ${D1_LOG_DIR}/${D1_LOG_FILE} 2>&1); then log "Unable to open ufw port $SOLR_SERVER_PORT for $SERVER_2 " fi if ! (ufw allow from $SERVER_3 to any port $SOLR_SERVER_PORT >> ${D1_LOG_DIR}/${D1_LOG_FILE} 2>&1); then log "Unable to open ufw port $SOLR_SERVER_PORT for $SERVER_3 " fi ##### Configure log output directory if not there if [ ! -d /var/log/dataone/cn ] then if (mkdir /var/log/dataone/cn >> ${D1_LOG_DIR}/${D1_LOG_FILE} 2>&1 ); then log "mkdir /var/log/dataone/cn succeeded" fi fi if (chown -R ${SOLR_USER}:${SOLR_USER} /var/log/dataone/cn >> ${D1_LOG_DIR}/${D1_LOG_FILE} 2>&1 ); then log "chown -R ${SOLR_USER}:${SOLR_USER} /var/log/dataone/cn succeeded" fi ###### # grant solr directories to solr user chown -R ${SOLR_USER}:${SOLR_USER} ${SOLR_ROOT} /etc/init.d/solr start db_stop exit 0