From 80687231d1c1ef17c00c66a39c81eb091de984c3 Mon Sep 17 00:00:00 2001 From: Wayne Schneider Date: Thu, 4 Aug 2016 09:47:13 -0500 Subject: [PATCH] Prepare for Solr 6 [SOLR-26] --- debian/dirs | 6 - debian/install | 3 - debian/masterkey-lui-solr5.dirs | 6 + debian/masterkey-lui-solr5.install | 6 + debian/masterkey-lui-solr5.postinst | 28 +++ debian/postinst | 28 --- dev-deploy.yml | 2 +- dist/install_solr5_service.sh | 330 +++++++++++++++++++++++++++++++++++ dist/install_solr_service.sh | 330 ----------------------------------- 9 files changed, 371 insertions(+), 368 deletions(-) delete mode 100644 debian/dirs delete mode 100644 debian/install create mode 100644 debian/masterkey-lui-solr5.dirs create mode 100644 debian/masterkey-lui-solr5.install create mode 100755 debian/masterkey-lui-solr5.postinst delete mode 100755 debian/postinst create mode 100755 dist/install_solr5_service.sh delete mode 100755 dist/install_solr_service.sh diff --git a/debian/dirs b/debian/dirs deleted file mode 100644 index fae317f..0000000 --- a/debian/dirs +++ /dev/null @@ -1,6 +0,0 @@ -etc/default -usr/share/masterkey/lui -usr/share/doc/masterkey-lui-solr5 -etc/masterkey/lui/solr -var/log/masterkey/lui -var/lib/masterkey/lui/solr/lui diff --git a/debian/install b/debian/install deleted file mode 100644 index 21ad2d9..0000000 --- a/debian/install +++ /dev/null @@ -1,3 +0,0 @@ -dist usr/share/masterkey/lui -conf/solr/* etc/masterkey/lui/solr -doc/* usr/share/doc/masterkey-lui-solr5 diff --git a/debian/masterkey-lui-solr5.dirs b/debian/masterkey-lui-solr5.dirs new file mode 100644 index 0000000..a689e3d --- /dev/null +++ b/debian/masterkey-lui-solr5.dirs @@ -0,0 +1,6 @@ +etc/default +usr/share/masterkey/lui/dist +usr/share/doc/masterkey-lui-solr5 +etc/masterkey/lui/solr +var/log/masterkey/lui +var/lib/masterkey/lui/solr/lui diff --git a/debian/masterkey-lui-solr5.install b/debian/masterkey-lui-solr5.install new file mode 100644 index 0000000..b1e455e --- /dev/null +++ b/debian/masterkey-lui-solr5.install @@ -0,0 +1,6 @@ +dist/solr-5*.tgz usr/share/masterkey/lui/dist +dist/install_solr5_service.sh usr/share/masterkey/lui/dist +conf/solr/* etc/masterkey/lui/solr +doc/apache-solr-ref-guide-5*.pdf usr/share/doc/masterkey-lui-solr5 +doc/debian-install.md usr/share/doc/masterkey-lui-solr5 +doc/upgrade.md usr/share/doc/masterkey-lui-solr5 diff --git a/debian/masterkey-lui-solr5.postinst b/debian/masterkey-lui-solr5.postinst new file mode 100755 index 0000000..261e193 --- /dev/null +++ b/debian/masterkey-lui-solr5.postinst @@ -0,0 +1,28 @@ +#!/bin/sh -e + +case "$1" in + configure|upgrade) + # Create the solr user + adduser --system --shell /bin/bash --group --disabled-password --home /var/lib/masterkey/lui lui-solr + # Set directory permissions + chown -R lui-solr /var/lib/masterkey/lui + chown -R lui-solr /var/log/masterkey/lui + chown -R lui-solr /etc/masterkey/lui/solr/solr-home + # Run Solr installation script + /usr/share/masterkey/lui/dist/install_solr5_service.sh /usr/share/masterkey/lui/dist/solr-5.5.1.tgz -d /var/lib/masterkey/lui -i /usr/share/masterkey/lui -s lui-solr -u lui-solr -f + # Remove extra files created by Solr installation + rm -f /var/lib/masterkey/lui/log4j.properties + rm -rf /var/lib/masterkey/lui/logs + rm -rf /var/lib/masterkey/lui/data + ;; + + abort-upgrade|abort-remove|abort-deconfigure) + ;; + + *) + echo "postinst called with unknown argument '$1'" >&2 + exit 1 + ;; +esac + +exit 0 diff --git a/debian/postinst b/debian/postinst deleted file mode 100755 index 0eb3fcf..0000000 --- a/debian/postinst +++ /dev/null @@ -1,28 +0,0 @@ -#!/bin/sh -e - -case "$1" in - configure|upgrade) - # Create the solr user - adduser --system --shell /bin/bash --group --disabled-password --home /var/lib/masterkey/lui lui-solr - # Set directory permissions - chown -R lui-solr /var/lib/masterkey/lui - chown -R lui-solr /var/log/masterkey/lui - chown -R lui-solr /etc/masterkey/lui/solr/solr-home - # Run Solr installation script - /usr/share/masterkey/lui/dist/install_solr_service.sh /usr/share/masterkey/lui/dist/solr-5.5.1.tgz -d /var/lib/masterkey/lui -i /usr/share/masterkey/lui -s lui-solr -u lui-solr -f - # Remove extra files created by Solr installation - rm -f /var/lib/masterkey/lui/log4j.properties - rm -rf /var/lib/masterkey/lui/logs - rm -rf /var/lib/masterkey/lui/data - ;; - - abort-upgrade|abort-remove|abort-deconfigure) - ;; - - *) - echo "postinst called with unknown argument '$1'" >&2 - exit 1 - ;; -esac - -exit 0 diff --git a/dev-deploy.yml b/dev-deploy.yml index a3908e3..ad8eacd 100644 --- a/dev-deploy.yml +++ b/dev-deploy.yml @@ -44,7 +44,7 @@ - name: Install Solr binary become: yes - command: /vagrant/dist/install_solr_service.sh /vagrant/dist/solr-5.5.1.tgz -d /var/lib/masterkey/lui -i /usr/share/masterkey/lui -s lui-solr -u lui-solr -f creates=/usr/share/masterkey/lui/solr-5.5.1 + command: /vagrant/dist/install_solr5_service.sh /vagrant/dist/solr-5.5.1.tgz -d /var/lib/masterkey/lui -i /usr/share/masterkey/lui -s lui-solr -u lui-solr -f creates=/usr/share/masterkey/lui/solr-5.5.1 - name: Remove extra files created by Solr install become: yes diff --git a/dist/install_solr5_service.sh b/dist/install_solr5_service.sh new file mode 100755 index 0000000..c91777a --- /dev/null +++ b/dist/install_solr5_service.sh @@ -0,0 +1,330 @@ +#!/usr/bin/env bash +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright ownership. +# The ASF licenses this file to You under the Apache License, Version 2.0 +# (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +if [[ $EUID -ne 0 ]]; then + echo -e "\nERROR: This script must be run as root\n" 1>&2 + exit 1 +fi + +print_usage() { + ERROR_MSG="$1" + + if [ "$ERROR_MSG" != "" ]; then + echo -e "\nERROR: $ERROR_MSG\n" 1>&2 + fi + + echo "" + echo "Usage: install_solr_service.sh path_to_solr_distribution_archive OPTIONS" + echo "" + echo " The first argument to the script must be a path to a Solr distribution archive, such as solr-5.0.0.tgz" + echo " (only .tgz or .zip are supported formats for the archive)" + echo "" + echo " Supported OPTIONS include:" + echo "" + echo " -d Directory for live / writable Solr files, such as logs, pid files, and index data; defaults to /var/solr" + echo "" + echo " -i Directory to extract the Solr installation archive; defaults to /opt/" + echo " The specified path must exist prior to using this script." + echo "" + echo " -p Port Solr should bind to; default is 8983" + echo "" + echo " -s Service name; defaults to solr" + echo "" + echo " -u User to own the Solr files and run the Solr process as; defaults to solr" + echo " This script will create the specified user account if it does not exist." + echo "" + echo " -f Upgrade Solr. Overwrite symlink and init script of previous installation." + echo "" + echo " NOTE: Must be run as the root user" + echo "" +} # end print_usage + +if [ -f "/proc/version" ]; then + proc_version=`cat /proc/version` +else + proc_version=`uname -a` +fi + +if [[ $proc_version == *"Debian"* ]]; then + distro=Debian +elif [[ $proc_version == *"Red Hat"* ]]; then + distro=RedHat +elif [[ $proc_version == *"Ubuntu"* ]]; then + distro=Ubuntu +elif [[ $proc_version == *"SUSE"* ]]; then + distro=SUSE +else + echo -e "\nERROR: Your Linux distribution ($proc_version) not supported by this script!\nYou'll need to setup Solr as a service manually using the documentation provided in the Solr Reference Guide.\n" 1>&2 + exit 1 +fi + +if [ -z "$1" ]; then + print_usage "Must specify the path to the Solr installation archive, such as solr-5.0.0.tgz" + exit 1 +fi + +SOLR_ARCHIVE=$1 +if [ ! -f "$SOLR_ARCHIVE" ]; then + print_usage "Specified Solr installation archive $SOLR_ARCHIVE not found!" + exit 1 +fi + +# strip off path info +SOLR_INSTALL_FILE=${SOLR_ARCHIVE##*/} +is_tar=true +if [ ${SOLR_INSTALL_FILE: -4} == ".tgz" ]; then + SOLR_DIR=${SOLR_INSTALL_FILE%.tgz} +elif [ ${SOLR_INSTALL_FILE: -4} == ".zip" ]; then + SOLR_DIR=${SOLR_INSTALL_FILE%.zip} + is_tar=false +else + print_usage "Solr installation archive $SOLR_ARCHIVE is invalid, expected a .tgz or .zip file!" + exit 1 +fi + +if [ $# -gt 1 ]; then + shift + while true; do + case $1 in + -i) + if [[ -z "$2" || "${2:0:1}" == "-" ]]; then + print_usage "Directory path is required when using the $1 option!" + exit 1 + fi + SOLR_EXTRACT_DIR=$2 + shift 2 + ;; + -d) + if [[ -z "$2" || "${2:0:1}" == "-" ]]; then + print_usage "Directory path is required when using the $1 option!" + exit 1 + fi + SOLR_VAR_DIR="$2" + shift 2 + ;; + -u) + if [[ -z "$2" || "${2:0:1}" == "-" ]]; then + print_usage "Username is required when using the $1 option!" + exit 1 + fi + SOLR_USER="$2" + shift 2 + ;; + -s) + if [[ -z "$2" || "${2:0:1}" == "-" ]]; then + print_usage "Service name is required when using the $1 option!" + exit 1 + fi + SOLR_SERVICE="$2" + shift 2 + ;; + -p) + if [[ -z "$2" || "${2:0:1}" == "-" ]]; then + print_usage "Port is required when using the $1 option!" + exit 1 + fi + SOLR_PORT="$2" + shift 2 + ;; + -f) + SOLR_UPGRADE="YES" + shift 1 + ;; + -help|-usage) + print_usage "" + exit 0 + ;; + --) + shift + break + ;; + *) + if [ "$1" != "" ]; then + print_usage "Unrecognized or misplaced argument: $1!" + exit 1 + else + break # out-of-args, stop looping + fi + ;; + esac + done +fi + +if [ -z "$SOLR_EXTRACT_DIR" ]; then + SOLR_EXTRACT_DIR=/opt +fi + +if [ ! -d "$SOLR_EXTRACT_DIR" ]; then + print_usage "Installation directory $SOLR_EXTRACT_DIR not found! Please create it before running this script." + exit 1 +fi + +if [ -z "$SOLR_SERVICE" ]; then + SOLR_SERVICE=solr +fi + +if [ -z "$SOLR_VAR_DIR" ]; then + SOLR_VAR_DIR="/var/$SOLR_SERVICE" +fi + +if [ -z "$SOLR_USER" ]; then + SOLR_USER=solr +fi + +if [ -z "$SOLR_PORT" ]; then + SOLR_PORT=8983 +fi + +if [ -z "$SOLR_UPGRADE" ]; then + SOLR_UPGRADE=NO +fi + +if [ ! "$SOLR_UPGRADE" = "YES" ]; then + if [ -f "/etc/init.d/$SOLR_SERVICE" ]; then + print_usage "/etc/init.d/$SOLR_SERVICE already exists! Perhaps Solr is already setup as a service on this host? To upgrade Solr use the -f option." + exit 1 + fi + + if [ -e "$SOLR_EXTRACT_DIR/$SOLR_SERVICE" ]; then + print_usage "$SOLR_EXTRACT_DIR/$SOLR_SERVICE already exists! Please move this directory / link or choose a different service name using the -s option." + exit 1 + fi +fi + +# stop running instance +if [ -f "/etc/init.d/$SOLR_SERVICE" ]; then + echo -e "\nStopping Solr instance if exists ...\n" + service "$SOLR_SERVICE" stop +fi + +# create user if not exists +solr_uid="`id -u "$SOLR_USER"`" +if [ $? -ne 0 ]; then + echo "Creating new user: $SOLR_USER" + if [ "$distro" == "RedHat" ]; then + adduser "$SOLR_USER" + elif [ "$distro" == "SUSE" ]; then + useradd -m "$SOLR_USER" + else + adduser --system --shell /bin/bash --group --disabled-password --home "$SOLR_VAR_DIR" "$SOLR_USER" + fi +fi + +# extract +SOLR_INSTALL_DIR="$SOLR_EXTRACT_DIR/$SOLR_DIR" +if [ ! -d "$SOLR_INSTALL_DIR" ]; then + + echo -e "\nExtracting $SOLR_ARCHIVE to $SOLR_EXTRACT_DIR\n" + + if $is_tar ; then + tar zxf "$SOLR_ARCHIVE" -C "$SOLR_EXTRACT_DIR" + else + unzip -q "$SOLR_ARCHIVE" -d "$SOLR_EXTRACT_DIR" + fi + + if [ ! -d "$SOLR_INSTALL_DIR" ]; then + echo -e "\nERROR: Expected directory $SOLR_INSTALL_DIR not found after extracting $SOLR_ARCHIVE ... script fails.\n" 1>&2 + exit 1 + fi + + chown -R root: "$SOLR_INSTALL_DIR" + find "$SOLR_INSTALL_DIR" -type d -print0 | xargs -0 chmod 0755 + find "$SOLR_INSTALL_DIR" -type f -print0 | xargs -0 chmod 0644 + chmod -R 0755 "$SOLR_INSTALL_DIR/bin" +else + echo -e "\nWARNING: $SOLR_INSTALL_DIR already exists! Skipping extract ...\n" +fi + +# create a symlink for easier scripting +if [ -h "$SOLR_EXTRACT_DIR/$SOLR_SERVICE" ]; then + echo -e "\nRemoving old symlink $SOLR_EXTRACT_DIR/$SOLR_SERVICE ...\n" + rm "$SOLR_EXTRACT_DIR/$SOLR_SERVICE" +fi +if [ -e "$SOLR_EXTRACT_DIR/$SOLR_SERVICE" ]; then + echo -e "\nWARNING: $SOLR_EXTRACT_DIR/$SOLR_SERVICE is not symlink! Skipping symlink update ...\n" +else + echo -e "\nInstalling symlink $SOLR_EXTRACT_DIR/$SOLR_SERVICE -> $SOLR_INSTALL_DIR ...\n" + ln -s "$SOLR_INSTALL_DIR" "$SOLR_EXTRACT_DIR/$SOLR_SERVICE" +fi + +# install init.d script +echo -e "\nInstalling /etc/init.d/$SOLR_SERVICE script ...\n" +cp "$SOLR_INSTALL_DIR/bin/init.d/solr" "/etc/init.d/$SOLR_SERVICE" +chmod 0744 "/etc/init.d/$SOLR_SERVICE" +chown root: "/etc/init.d/$SOLR_SERVICE" +# do some basic variable substitution on the init.d script +sed_expr1="s#SOLR_INSTALL_DIR=.*#SOLR_INSTALL_DIR=\"$SOLR_EXTRACT_DIR/$SOLR_SERVICE\"#" +sed_expr2="s#SOLR_ENV=.*#SOLR_ENV=\"/etc/default/$SOLR_SERVICE.in.sh\"#" +sed_expr3="s#RUNAS=.*#RUNAS=\"$SOLR_USER\"#" +sed_expr4="s#Provides:.*#Provides: $SOLR_SERVICE#" +sed -i -e "$sed_expr1" -e "$sed_expr2" -e "$sed_expr3" -e "$sed_expr4" "/etc/init.d/$SOLR_SERVICE" + +# install/move configuration +if [ ! -d /etc/default ]; then + mkdir /etc/default + chown root: /etc/default + chmod 0755 /etc/default +fi +if [ -f "$SOLR_VAR_DIR/solr.in.sh" ]; then + echo -e "\nMoving existing $SOLR_VAR_DIR/solr.in.sh to /etc/default/$SOLR_SERVICE.in.sh ...\n" + mv "$SOLR_VAR_DIR/solr.in.sh" "/etc/default/$SOLR_SERVICE.in.sh" +elif [ -f "/etc/default/$SOLR_SERVICE.in.sh" ]; then + echo -e "\n/etc/default/$SOLR_SERVICE.in.sh already exist. Skipping install ...\n" +else + echo -e "\nInstalling /etc/default/$SOLR_SERVICE.in.sh ...\n" + cp "$SOLR_INSTALL_DIR/bin/solr.in.sh" "/etc/default/$SOLR_SERVICE.in.sh" + echo "SOLR_PID_DIR=\"$SOLR_VAR_DIR\" +SOLR_HOME=\"$SOLR_VAR_DIR/data\" +LOG4J_PROPS=\"$SOLR_VAR_DIR/log4j.properties\" +SOLR_LOGS_DIR=\"$SOLR_VAR_DIR/logs\" +SOLR_PORT=\"$SOLR_PORT\" +" >> "/etc/default/$SOLR_SERVICE.in.sh" +fi +chown root: "/etc/default/$SOLR_SERVICE.in.sh" +chmod 0644 "/etc/default/$SOLR_SERVICE.in.sh" + +# install data directories and files +mkdir -p "$SOLR_VAR_DIR/data" +mkdir -p "$SOLR_VAR_DIR/logs" +if [ -f "$SOLR_VAR_DIR/data/solr.xml" ]; then + echo -e "\n$SOLR_VAR_DIR/data/solr.xml already exists. Skipping install ...\n" +else + cp "$SOLR_INSTALL_DIR/server/solr/solr.xml" "$SOLR_VAR_DIR/data/solr.xml" +fi +if [ -f "$SOLR_VAR_DIR/log4j.properties" ]; then + echo -e "\n$SOLR_VAR_DIR/log4j.properties already exists. Skipping install ...\n" +else + cp "$SOLR_INSTALL_DIR/server/resources/log4j.properties" "$SOLR_VAR_DIR/log4j.properties" + sed_expr="s#solr.log=.*#solr.log=\${solr.solr.home}/../logs#" + sed -i -e "$sed_expr" "$SOLR_VAR_DIR/log4j.properties" +fi +chown -R "$SOLR_USER:" "$SOLR_VAR_DIR" +find "$SOLR_VAR_DIR" -type d -print0 | xargs -0 chmod 0750 +find "$SOLR_VAR_DIR" -type f -print0 | xargs -0 chmod 0640 + +# configure autostart of service +if [[ "$distro" == "RedHat" || "$distro" == "SUSE" ]]; then + chkconfig "$SOLR_SERVICE" on +else + update-rc.d "$SOLR_SERVICE" defaults +fi + +# start service +service "$SOLR_SERVICE" start +sleep 5 +service "$SOLR_SERVICE" status + +echo "Service $SOLR_SERVICE installed." diff --git a/dist/install_solr_service.sh b/dist/install_solr_service.sh deleted file mode 100755 index c91777a..0000000 --- a/dist/install_solr_service.sh +++ /dev/null @@ -1,330 +0,0 @@ -#!/usr/bin/env bash -# Licensed to the Apache Software Foundation (ASF) under one or more -# contributor license agreements. See the NOTICE file distributed with -# this work for additional information regarding copyright ownership. -# The ASF licenses this file to You under the Apache License, Version 2.0 -# (the "License"); you may not use this file except in compliance with -# the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -if [[ $EUID -ne 0 ]]; then - echo -e "\nERROR: This script must be run as root\n" 1>&2 - exit 1 -fi - -print_usage() { - ERROR_MSG="$1" - - if [ "$ERROR_MSG" != "" ]; then - echo -e "\nERROR: $ERROR_MSG\n" 1>&2 - fi - - echo "" - echo "Usage: install_solr_service.sh path_to_solr_distribution_archive OPTIONS" - echo "" - echo " The first argument to the script must be a path to a Solr distribution archive, such as solr-5.0.0.tgz" - echo " (only .tgz or .zip are supported formats for the archive)" - echo "" - echo " Supported OPTIONS include:" - echo "" - echo " -d Directory for live / writable Solr files, such as logs, pid files, and index data; defaults to /var/solr" - echo "" - echo " -i Directory to extract the Solr installation archive; defaults to /opt/" - echo " The specified path must exist prior to using this script." - echo "" - echo " -p Port Solr should bind to; default is 8983" - echo "" - echo " -s Service name; defaults to solr" - echo "" - echo " -u User to own the Solr files and run the Solr process as; defaults to solr" - echo " This script will create the specified user account if it does not exist." - echo "" - echo " -f Upgrade Solr. Overwrite symlink and init script of previous installation." - echo "" - echo " NOTE: Must be run as the root user" - echo "" -} # end print_usage - -if [ -f "/proc/version" ]; then - proc_version=`cat /proc/version` -else - proc_version=`uname -a` -fi - -if [[ $proc_version == *"Debian"* ]]; then - distro=Debian -elif [[ $proc_version == *"Red Hat"* ]]; then - distro=RedHat -elif [[ $proc_version == *"Ubuntu"* ]]; then - distro=Ubuntu -elif [[ $proc_version == *"SUSE"* ]]; then - distro=SUSE -else - echo -e "\nERROR: Your Linux distribution ($proc_version) not supported by this script!\nYou'll need to setup Solr as a service manually using the documentation provided in the Solr Reference Guide.\n" 1>&2 - exit 1 -fi - -if [ -z "$1" ]; then - print_usage "Must specify the path to the Solr installation archive, such as solr-5.0.0.tgz" - exit 1 -fi - -SOLR_ARCHIVE=$1 -if [ ! -f "$SOLR_ARCHIVE" ]; then - print_usage "Specified Solr installation archive $SOLR_ARCHIVE not found!" - exit 1 -fi - -# strip off path info -SOLR_INSTALL_FILE=${SOLR_ARCHIVE##*/} -is_tar=true -if [ ${SOLR_INSTALL_FILE: -4} == ".tgz" ]; then - SOLR_DIR=${SOLR_INSTALL_FILE%.tgz} -elif [ ${SOLR_INSTALL_FILE: -4} == ".zip" ]; then - SOLR_DIR=${SOLR_INSTALL_FILE%.zip} - is_tar=false -else - print_usage "Solr installation archive $SOLR_ARCHIVE is invalid, expected a .tgz or .zip file!" - exit 1 -fi - -if [ $# -gt 1 ]; then - shift - while true; do - case $1 in - -i) - if [[ -z "$2" || "${2:0:1}" == "-" ]]; then - print_usage "Directory path is required when using the $1 option!" - exit 1 - fi - SOLR_EXTRACT_DIR=$2 - shift 2 - ;; - -d) - if [[ -z "$2" || "${2:0:1}" == "-" ]]; then - print_usage "Directory path is required when using the $1 option!" - exit 1 - fi - SOLR_VAR_DIR="$2" - shift 2 - ;; - -u) - if [[ -z "$2" || "${2:0:1}" == "-" ]]; then - print_usage "Username is required when using the $1 option!" - exit 1 - fi - SOLR_USER="$2" - shift 2 - ;; - -s) - if [[ -z "$2" || "${2:0:1}" == "-" ]]; then - print_usage "Service name is required when using the $1 option!" - exit 1 - fi - SOLR_SERVICE="$2" - shift 2 - ;; - -p) - if [[ -z "$2" || "${2:0:1}" == "-" ]]; then - print_usage "Port is required when using the $1 option!" - exit 1 - fi - SOLR_PORT="$2" - shift 2 - ;; - -f) - SOLR_UPGRADE="YES" - shift 1 - ;; - -help|-usage) - print_usage "" - exit 0 - ;; - --) - shift - break - ;; - *) - if [ "$1" != "" ]; then - print_usage "Unrecognized or misplaced argument: $1!" - exit 1 - else - break # out-of-args, stop looping - fi - ;; - esac - done -fi - -if [ -z "$SOLR_EXTRACT_DIR" ]; then - SOLR_EXTRACT_DIR=/opt -fi - -if [ ! -d "$SOLR_EXTRACT_DIR" ]; then - print_usage "Installation directory $SOLR_EXTRACT_DIR not found! Please create it before running this script." - exit 1 -fi - -if [ -z "$SOLR_SERVICE" ]; then - SOLR_SERVICE=solr -fi - -if [ -z "$SOLR_VAR_DIR" ]; then - SOLR_VAR_DIR="/var/$SOLR_SERVICE" -fi - -if [ -z "$SOLR_USER" ]; then - SOLR_USER=solr -fi - -if [ -z "$SOLR_PORT" ]; then - SOLR_PORT=8983 -fi - -if [ -z "$SOLR_UPGRADE" ]; then - SOLR_UPGRADE=NO -fi - -if [ ! "$SOLR_UPGRADE" = "YES" ]; then - if [ -f "/etc/init.d/$SOLR_SERVICE" ]; then - print_usage "/etc/init.d/$SOLR_SERVICE already exists! Perhaps Solr is already setup as a service on this host? To upgrade Solr use the -f option." - exit 1 - fi - - if [ -e "$SOLR_EXTRACT_DIR/$SOLR_SERVICE" ]; then - print_usage "$SOLR_EXTRACT_DIR/$SOLR_SERVICE already exists! Please move this directory / link or choose a different service name using the -s option." - exit 1 - fi -fi - -# stop running instance -if [ -f "/etc/init.d/$SOLR_SERVICE" ]; then - echo -e "\nStopping Solr instance if exists ...\n" - service "$SOLR_SERVICE" stop -fi - -# create user if not exists -solr_uid="`id -u "$SOLR_USER"`" -if [ $? -ne 0 ]; then - echo "Creating new user: $SOLR_USER" - if [ "$distro" == "RedHat" ]; then - adduser "$SOLR_USER" - elif [ "$distro" == "SUSE" ]; then - useradd -m "$SOLR_USER" - else - adduser --system --shell /bin/bash --group --disabled-password --home "$SOLR_VAR_DIR" "$SOLR_USER" - fi -fi - -# extract -SOLR_INSTALL_DIR="$SOLR_EXTRACT_DIR/$SOLR_DIR" -if [ ! -d "$SOLR_INSTALL_DIR" ]; then - - echo -e "\nExtracting $SOLR_ARCHIVE to $SOLR_EXTRACT_DIR\n" - - if $is_tar ; then - tar zxf "$SOLR_ARCHIVE" -C "$SOLR_EXTRACT_DIR" - else - unzip -q "$SOLR_ARCHIVE" -d "$SOLR_EXTRACT_DIR" - fi - - if [ ! -d "$SOLR_INSTALL_DIR" ]; then - echo -e "\nERROR: Expected directory $SOLR_INSTALL_DIR not found after extracting $SOLR_ARCHIVE ... script fails.\n" 1>&2 - exit 1 - fi - - chown -R root: "$SOLR_INSTALL_DIR" - find "$SOLR_INSTALL_DIR" -type d -print0 | xargs -0 chmod 0755 - find "$SOLR_INSTALL_DIR" -type f -print0 | xargs -0 chmod 0644 - chmod -R 0755 "$SOLR_INSTALL_DIR/bin" -else - echo -e "\nWARNING: $SOLR_INSTALL_DIR already exists! Skipping extract ...\n" -fi - -# create a symlink for easier scripting -if [ -h "$SOLR_EXTRACT_DIR/$SOLR_SERVICE" ]; then - echo -e "\nRemoving old symlink $SOLR_EXTRACT_DIR/$SOLR_SERVICE ...\n" - rm "$SOLR_EXTRACT_DIR/$SOLR_SERVICE" -fi -if [ -e "$SOLR_EXTRACT_DIR/$SOLR_SERVICE" ]; then - echo -e "\nWARNING: $SOLR_EXTRACT_DIR/$SOLR_SERVICE is not symlink! Skipping symlink update ...\n" -else - echo -e "\nInstalling symlink $SOLR_EXTRACT_DIR/$SOLR_SERVICE -> $SOLR_INSTALL_DIR ...\n" - ln -s "$SOLR_INSTALL_DIR" "$SOLR_EXTRACT_DIR/$SOLR_SERVICE" -fi - -# install init.d script -echo -e "\nInstalling /etc/init.d/$SOLR_SERVICE script ...\n" -cp "$SOLR_INSTALL_DIR/bin/init.d/solr" "/etc/init.d/$SOLR_SERVICE" -chmod 0744 "/etc/init.d/$SOLR_SERVICE" -chown root: "/etc/init.d/$SOLR_SERVICE" -# do some basic variable substitution on the init.d script -sed_expr1="s#SOLR_INSTALL_DIR=.*#SOLR_INSTALL_DIR=\"$SOLR_EXTRACT_DIR/$SOLR_SERVICE\"#" -sed_expr2="s#SOLR_ENV=.*#SOLR_ENV=\"/etc/default/$SOLR_SERVICE.in.sh\"#" -sed_expr3="s#RUNAS=.*#RUNAS=\"$SOLR_USER\"#" -sed_expr4="s#Provides:.*#Provides: $SOLR_SERVICE#" -sed -i -e "$sed_expr1" -e "$sed_expr2" -e "$sed_expr3" -e "$sed_expr4" "/etc/init.d/$SOLR_SERVICE" - -# install/move configuration -if [ ! -d /etc/default ]; then - mkdir /etc/default - chown root: /etc/default - chmod 0755 /etc/default -fi -if [ -f "$SOLR_VAR_DIR/solr.in.sh" ]; then - echo -e "\nMoving existing $SOLR_VAR_DIR/solr.in.sh to /etc/default/$SOLR_SERVICE.in.sh ...\n" - mv "$SOLR_VAR_DIR/solr.in.sh" "/etc/default/$SOLR_SERVICE.in.sh" -elif [ -f "/etc/default/$SOLR_SERVICE.in.sh" ]; then - echo -e "\n/etc/default/$SOLR_SERVICE.in.sh already exist. Skipping install ...\n" -else - echo -e "\nInstalling /etc/default/$SOLR_SERVICE.in.sh ...\n" - cp "$SOLR_INSTALL_DIR/bin/solr.in.sh" "/etc/default/$SOLR_SERVICE.in.sh" - echo "SOLR_PID_DIR=\"$SOLR_VAR_DIR\" -SOLR_HOME=\"$SOLR_VAR_DIR/data\" -LOG4J_PROPS=\"$SOLR_VAR_DIR/log4j.properties\" -SOLR_LOGS_DIR=\"$SOLR_VAR_DIR/logs\" -SOLR_PORT=\"$SOLR_PORT\" -" >> "/etc/default/$SOLR_SERVICE.in.sh" -fi -chown root: "/etc/default/$SOLR_SERVICE.in.sh" -chmod 0644 "/etc/default/$SOLR_SERVICE.in.sh" - -# install data directories and files -mkdir -p "$SOLR_VAR_DIR/data" -mkdir -p "$SOLR_VAR_DIR/logs" -if [ -f "$SOLR_VAR_DIR/data/solr.xml" ]; then - echo -e "\n$SOLR_VAR_DIR/data/solr.xml already exists. Skipping install ...\n" -else - cp "$SOLR_INSTALL_DIR/server/solr/solr.xml" "$SOLR_VAR_DIR/data/solr.xml" -fi -if [ -f "$SOLR_VAR_DIR/log4j.properties" ]; then - echo -e "\n$SOLR_VAR_DIR/log4j.properties already exists. Skipping install ...\n" -else - cp "$SOLR_INSTALL_DIR/server/resources/log4j.properties" "$SOLR_VAR_DIR/log4j.properties" - sed_expr="s#solr.log=.*#solr.log=\${solr.solr.home}/../logs#" - sed -i -e "$sed_expr" "$SOLR_VAR_DIR/log4j.properties" -fi -chown -R "$SOLR_USER:" "$SOLR_VAR_DIR" -find "$SOLR_VAR_DIR" -type d -print0 | xargs -0 chmod 0750 -find "$SOLR_VAR_DIR" -type f -print0 | xargs -0 chmod 0640 - -# configure autostart of service -if [[ "$distro" == "RedHat" || "$distro" == "SUSE" ]]; then - chkconfig "$SOLR_SERVICE" on -else - update-rc.d "$SOLR_SERVICE" defaults -fi - -# start service -service "$SOLR_SERVICE" start -sleep 5 -service "$SOLR_SERVICE" status - -echo "Service $SOLR_SERVICE installed." -- 1.7.10.4