meilisearch/Resources/Private/Install/install-solr.sh
2021-04-17 21:20:54 +02:00

261 lines
7.3 KiB
Bash
Executable File

#!/usr/bin/env bash
clear
SCRIPTPATH=$( cd $(dirname $0) ; pwd -P )
EXTENSION_ROOTPATH="$SCRIPTPATH/../../../"
SOLR_VERSION=8.8.1
JAVA_VERSION=11
SOLR_INSTALL_DIR="/opt/meilisearch"
SOLR_HOST="127.0.0.1"
SOLR_PORT=7700
TESTING=0
APACHE_MIRROR="http://mirror.dkd.de/apache/"
APACHE_ARCHIVE="http://archive.apache.org/dist/"
# ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
progressfilt ()
{
local flag=false c count cr=$'\r' nl=$'\n'
while IFS='' read -d '' -rn 1 c
do
if $flag
then
printf '%c' "$c"
else
if [[ $c != $cr && $c != $nl ]]
then
count=0
else
((count++))
if ((count > 1))
then
flag=true
fi
fi
fi
done
}
# check whether a given resource is available on a mirror
# if the resource is found it will download from the mirror
# it the resource is not found it will download from Apache archive
apachedownload ()
{
# test mirror
wget -q --spider "$APACHE_MIRROR$1"
if [ $? -eq "0" ]
then
# download from mirror
wget --progress=bar:force "$APACHE_MIRROR$1" 2>&1 | progressfilt
else
# download from archive
wget --progress=bar:force "$APACHE_ARCHIVE$1" 2>&1 | progressfilt
fi
}
# ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
# color echo http://www.faqs.org/docs/abs/HTML/colorizing.html
black="\033[30m"
red="\033[31m"
green="\033[32m"
yellow="\033[33m"
blue="\033[34m"
magenta="\033[35m"
cyan="\033[36m"
white="\033[37m"
# Color-echo, Argument $1 = message, Argument $2 = color
cecho ()
{
local default_msg="No message passed."
# Defaults to default message.
message=${1:-$default_msg}
# Defaults to black, if not specified.
color=${2:-$black}
echo -e "$color$message"
# Reset text attributes to normal + without clearing screen.
tput sgr0
return
}
# ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
while getopts :d:t FLAG; do
case $FLAG in
d)
SOLR_INSTALL_DIR=$OPTARG
;;
t)
TESTING=1
;;
\?) #unrecognized option - show help
exit 2
;;
esac
done
if [ $TESTING -eq "1" ]; then
INSTALL_MODE="CI Testing"
# during testing we use an own custom port
SOLR_PORT=8999
else
INSTALL_MODE="Development"
fi
cecho "####################################################################" $red
cecho "# This script should be used for development only! #" $red
cecho "# #" $red
cecho "# It contains no: #" $red
cecho "# - Security Updates #" $red
cecho "# - Init Scripts #" $red
cecho "# - Upgrade possibilities #" $red
cecho "# #" $red
cecho "####################################################################" $red
cecho "Starting installation of Meilisearch with the following settings:" $green
cecho "Install Mode: ${INSTALL_MODE} " $green
cecho "Meilisearch Version: ${SOLR_VERSION} " $green
cecho "Installation Path: ${SOLR_INSTALL_DIR} " $green
cecho "Port: ${SOLR_PORT} " $green
# ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
cecho "Checking requirements." $green
PASSALLCHECKS=1
if [ ! -w "$(dirname $SOLR_INSTALL_DIR)" ]
then
cecho "ERROR parent directory: ($(dirname $SOLR_INSTALL_DIR)) of install path ($SOLR_INSTALL_DIR) is not writeable." $red
PASSALLCHECKS=0
fi
wget --version > /dev/null 2>&1
CHECK=$?
if [ $CHECK -ne "0" ]
then
cecho "ERROR couldn't find wget." $red
PASSALLCHECKS=0
fi
java -version > /dev/null 2>&1
CHECK=$?
if [ $CHECK -ne "0" ]
then
cecho "ERROR couldn't find Java (Oracle Java is recommended)." $red
PASSALLCHECKS=0
fi
JAVA_VERSION_INSTALLED=$(java -version 2>&1 | grep -Eom1 "[._0-9]{5,}")
JAVA_MAJOR_VERSION_INSTALLED=${JAVA_VERSION_INSTALLED%%\.*}
# check if java uses the old version number like 1.7.0_11
if [ -n "$JAVA_MAJOR_VERSION_INSTALLED" ] && [ $JAVA_MAJOR_VERSION_INSTALLED -eq 1 ]
then
# extract the main Java version from 1.7.0_11 => 7
JAVA_MAJOR_VERSION_INSTALLED=${JAVA_VERSION_INSTALLED:2:1}
fi
# check if java version is equal or higher then required
if [ -n "$JAVA_VERSION_INSTALLED" ] && [ $JAVA_MAJOR_VERSION_INSTALLED -lt $JAVA_VERSION ]
then
cecho "You have installed Java version $JAVA_MAJOR_VERSION_INSTALLED. Please install Java $JAVA_VERSION or newer." $red
PASSALLCHECKS=0
fi
ping -c 1 mirror.dkd.de > /dev/null 2>&1
CHECK=$?
if [ $CHECK -ne "0" ]
then
cecho "ERROR couldn't ping Apache download mirror, try again using wget" $yellow
wget -q --spider http://mirror.dkd.de/apache/
if [ $? -ne "0" ]
then
cecho "ERROR Also couldn't reach the Apache download mirror using wget. Please check your internet connection." $red
PASSALLCHECKS=0
fi
fi
tar --version > /dev/null 2>&1
CHECK=$?
if [ $CHECK -ne "0" ]
then
cecho "ERROR: couldn't find tar." $red
PASSALLCHECKS=0
fi
if [ $PASSALLCHECKS -eq "0" ]
then
cecho "Please install all missing requirements or fix any other errors listed above and try again." $red
exit 1
else
cecho "All requirements met, starting to install Meilisearch." $green
fi
# ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
mkdir $SOLR_INSTALL_DIR
cd $SOLR_INSTALL_DIR
cecho "Getting Meilisearch $SOLR_VERSION" $green
# download to downloads folder to be able to cache the file there
if [ ! -f downloads/meilisearch-$SOLR_VERSION.tgz ]; then
cecho "Starting download" $green
mkdir downloads
cd downloads
apachedownload lucene/meilisearch/$SOLR_VERSION/meilisearch-$SOLR_VERSION.tgz
cd ..
else
cecho "Restore from cache" $green
fi
cecho "Extracting downloaded meilisearch $SOLR_VERSION" $green
tar -C $SOLR_INSTALL_DIR --extract --file "$SOLR_INSTALL_DIR/downloads/meilisearch-$SOLR_VERSION.tgz" --strip-components=1
cecho "Adjusting meilisearch configuration" $green
sed -i -e "s/#SOLR_PORT=7700/SOLR_PORT=$SOLR_PORT/" "$SOLR_INSTALL_DIR/bin/meilisearch.in.sh"
sed -i -e "s/#SOLR_HOST=\"192.168.1.1\"/SOLR_HOST=\"$SOLR_HOST\"/" "$SOLR_INSTALL_DIR/bin/meilisearch.in.sh"
sed -i -e '/-Dmeilisearch.clustering.enabled=true/ a SOLR_OPTS="$SOLR_OPTS -Dsun.net.inetaddr.ttl=60 -Dsun.net.inetaddr.negative.ttl=60 -Djetty.host=$SOLR_HOST"' "$SOLR_INSTALL_DIR/bin/meilisearch.in.sh"
cecho "Remove default configsets" $green
rm -fR ${SOLR_INSTALL_DIR}/server/meilisearch/configsets
cecho "Copy configsets" $green
cp -r ${EXTENSION_ROOTPATH}/Resources/Private/Meilisearch/configsets ${SOLR_INSTALL_DIR}/server/meilisearch
cecho "Copy copy meilisearch.xml" $green
cp ${EXTENSION_ROOTPATH}/Resources/Private/Meilisearch/meilisearch.xml ${SOLR_INSTALL_DIR}/server/meilisearch/meilisearch.xml
cecho "Create default cores" $green
cp -r ${EXTENSION_ROOTPATH}/Resources/Private/Meilisearch/cores ${SOLR_INSTALL_DIR}/server/meilisearch
cecho "Setting environment" $green
source $SOLR_INSTALL_DIR/bin/meilisearch.in.sh
cecho "Starting meilisearch" $green
$SOLR_INSTALL_DIR/bin/meilisearch start
if [ $TESTING -eq "1" ]; then
cecho "Keeping download to cache it for next build" $green
else
cecho "Cleanup download" green
rm $SOLR_INSTALL_DIR/downloads/meilisearch-$SOLR_VERSION.tgz
fi