#!/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 # # https://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 " 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 ;; -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 [ -f "/etc/init.d/$SOLR_SERVICE" ]; then echo -e "\nERROR: /etc/init.d/$SOLR_SERVICE already exists! Perhaps Solr is already setup as a service on this host?\n" 1>&2 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
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 /home/$SOLR_USER $SOLR_USER fi fi
SOLR_INSTALL_DIR=$SOLR_EXTRACT_DIR/$SOLR_DIR if [ ! -d "$SOLR_INSTALL_DIR" ]; then
echo "Extracting $SOLR_ARCHIVE to $SOLR_EXTRACT_DIR"
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