blob: 5735d9aead6b56b9f22ba1272985c2d764192003 [file] [log] [blame]
#!/bin/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.
set -e
usage() {
echo "
usage: $0 <options>
Required not-so-options:
--distro-dir=DIR path to distro specific files (debian/RPM)
--build-dir=DIR path to dist dir
--prefix=PREFIX path to install into
Optional options:
--doc-dir=DIR path to install docs into [/usr/share/doc/solr]
--lib-dir=DIR path to install bits [/usr/lib/solr]
--installed-lib-dir=DIR path where lib-dir will end up on target system
--bin-dir=DIR path to install bins [/usr/bin]
--examples-dir=DIR path to install examples [doc-dir/examples]
... [ see source for more similar options ]
"
exit 1
}
OPTS=$(getopt \
-n $0 \
-o '' \
-l 'prefix:' \
-l 'distro-dir:' \
-l 'doc-dir:' \
-l 'lib-dir:' \
-l 'installed-lib-dir:' \
-l 'bin-dir:' \
-l 'examples-dir:' \
-l 'build-dir:' -- "$@")
if [ $? != 0 ] ; then
usage
fi
eval set -- "$OPTS"
while true ; do
case "$1" in
--prefix)
PREFIX=$2 ; shift 2
;;
--distro-dir)
DISTRO_DIR=$2 ; shift 2
;;
--build-dir)
BUILD_DIR=$2 ; shift 2
;;
--doc-dir)
DOC_DIR=$2 ; shift 2
;;
--lib-dir)
LIB_DIR=$2 ; shift 2
;;
--installed-lib-dir)
INSTALLED_LIB_DIR=$2 ; shift 2
;;
--bin-dir)
BIN_DIR=$2 ; shift 2
;;
--examples-dir)
EXAMPLES_DIR=$2 ; shift 2
;;
--)
shift ; break
;;
*)
echo "Unknown option: $1"
usage
exit 1
;;
esac
done
for var in PREFIX BUILD_DIR DISTRO_DIR ; do
if [ -z "$(eval "echo \$$var")" ]; then
echo Missing param: $var
usage
fi
done
MAN_DIR=${MAN_DIR:-/usr/share/man/man1}
DOC_DIR=${DOC_DIR:-/usr/share/doc/solr}
LIB_DIR=${LIB_DIR:-/usr/lib/solr}
INSTALLED_LIB_DIR=${INSTALLED_LIB_DIR:-/usr/lib/solr}
EXAMPLES_DIR=${EXAMPLES_DIR:-$DOC_DIR/examples}
BIN_DIR=${BIN_DIR:-/usr/bin}
CONF_DIR=${CONF_DIR:-/etc/solr/conf}
DEFAULT_DIR=${ETC_DIR:-/etc/default}
VAR_DIR=$PREFIX/var
install -d -m 0755 $PREFIX/$LIB_DIR
cp -ra ${BUILD_DIR}/dist/*.*ar $PREFIX/$LIB_DIR
cp -ra ${BUILD_DIR}/dist/solrj-lib $PREFIX/$LIB_DIR/lib
cp -ra ${BUILD_DIR}/example/solr/collection1/conf $PREFIX/$LIB_DIR/coreconfig-template
cp -fa $DISTRO_DIR/solrconfig.xml $PREFIX/$LIB_DIR/coreconfig-template
cp -fa $DISTRO_DIR/schema.xml $PREFIX/$LIB_DIR/coreconfig-template
install -d -m 0755 $PREFIX/$LIB_DIR/contrib
cp -ra ${BUILD_DIR}/contrib/velocity $PREFIX/$LIB_DIR/contrib
cp -ra ${BUILD_DIR}/contrib/map-reduce $PREFIX/$LIB_DIR/contrib
cp -ra ${BUILD_DIR}/example/scripts/map-reduce $PREFIX/$LIB_DIR/contrib
cp -ra ${BUILD_DIR}/contrib/morphlines* $PREFIX/$LIB_DIR/contrib
install -d -m 0755 $PREFIX/$LIB_DIR/server/webapps/solr
(cd $PREFIX/$LIB_DIR/server/webapps/solr ; jar xf ../../../*.war)
ln -s /var/lib/solr $PREFIX/$LIB_DIR/server/work
cp ${BUILD_DIR}/example/lib/ext/*.jar $PREFIX/$LIB_DIR/server/webapps/solr/WEB-INF/lib/
install -d -m 0755 $PREFIX/$LIB_DIR/server/webapps/ROOT
cat > $PREFIX/$LIB_DIR/server/webapps/ROOT/index.html <<__EOT__
<html><head><meta http-equiv="refresh" content="0;url=./solr"></head><body><a href="/solr">Solr Console</a></body></html>
__EOT__
install -m 0755 ${DISTRO_DIR}/tomcat-deployment.sh ${PREFIX}/${LIB_DIR}/tomcat-deployment.sh
install -d -m 0755 $PREFIX/etc/solr/tomcat-conf.dist/conf
cp $DISTRO_DIR/web.xml $PREFIX/etc/solr/tomcat-conf.dist/conf
cp $DISTRO_DIR/server.xml $PREFIX/etc/solr/tomcat-conf.dist/conf
cp $DISTRO_DIR/logging.properties $PREFIX/etc/solr/tomcat-conf.dist/conf
install -d -m 0755 $PREFIX/etc/solr/tomcat-conf.dist/WEB-INF
mv $PREFIX/$LIB_DIR/webapps/solr/WEB-INF/*.xml $PREFIX/etc/solr/tomcat-conf.dist/WEB-INF/ || :
cp -ra ${BUILD_DIR}/dist/*.*ar $PREFIX/$LIB_DIR
cp -ra ${BUILD_DIR}/dist/solrj-lib $PREFIX/$LIB_DIR/lib
install -d -m 0755 $PREFIX/$LIB_DIR/bin
cp -a ${BUILD_DIR}/example/scripts/cloud-scripts/*.sh $PREFIX/$LIB_DIR/bin
sed -i -e 's#/../solr-webapp/webapp/WEB-INF/lib/#/../webapps/solr/WEB-INF/lib/#' $PREFIX/$LIB_DIR/bin/zkcli.sh
chmod 755 $PREFIX/$LIB_DIR/bin/*
install -d -m 0755 $PREFIX/$DOC_DIR
cp -a ${BUILD_DIR}/*.txt $PREFIX/$DOC_DIR
cp -ra ${BUILD_DIR}/docs/* $PREFIX/$DOC_DIR
cp -ra ${BUILD_DIR}/example/ $PREFIX/$DOC_DIR/
# Copy in the configuration files
install -d -m 0755 $PREFIX/$DEFAULT_DIR
cp $DISTRO_DIR/solr.default $PREFIX/$DEFAULT_DIR/solr
install -d -m 0755 $PREFIX/${CONF_DIR}.dist
cp ${BUILD_DIR}/example/resources/log4j.properties $PREFIX/${CONF_DIR}.dist
# Copy in the wrapper
cat > $PREFIX/$LIB_DIR/bin/solrd <<'EOF'
#!/bin/bash
BIGTOP_DEFAULTS_DIR=${BIGTOP_DEFAULTS_DIR-/etc/default}
[ -n "${BIGTOP_DEFAULTS_DIR}" -a -r ${BIGTOP_DEFAULTS_DIR}/solr ] && . ${BIGTOP_DEFAULTS_DIR}/solr
# Autodetect JAVA_HOME if not defined
. /usr/lib/bigtop-utils/bigtop-detect-javahome
# resolve links - $0 may be a softlink
PRG="${BASH_SOURCE[0]}"
while [ -h "${PRG}" ]; do
ls=`ls -ld "${PRG}"`
link=`expr "$ls" : '.*-> \(.*\)$'`
if expr "$link" : '/.*' > /dev/null; then
PRG="$link"
else
PRG=`dirname "${PRG}"`/"$link"
fi
done
BASEDIR=`dirname ${PRG}`
BASEDIR=`cd ${BASEDIR}/..;pwd`
SOLR_PORT=${SOLR_PORT:-8983}
SOLR_ADMIN_PORT=${SOLR_ADMIN_PORT:-8984}
SOLR_LOG=${SOLR_LOG:-/var/log/solr}
SOLR_HOME=${SOLR_HOME:-/var/lib/solr}
SOLR_LOG4J_CONFIG=${SOLR_LOG4J_CONFIG:-/etc/solr/conf/log4j.properties}
export CATALINA_TMPDIR=${SOLR_DATA:-/var/lib/solr/}
export CATALINA_PID=${SOLR_RUN:-/var/run/solr}/solr.pid
export CATALINA_OUT=${SOLR_LOG:-/var/log/solr}/solr.out
export CATALINA_HOME=${CATALINA_HOME:-$BASEDIR/../bigtop-tomcat}
export CATALINA_BASE=${CATALINA_BASE:-$CATALINA_TMPDIR/tomcat-deployment}
die() {
echo "$@" >&2
exit 1
}
# Preflight checks:
# 1. We are only supporting SolrCloud mode
if [ -z "$SOLR_ZK_ENSEMBLE" ] ; then
die "Error: SOLR_ZK_ENSEMBLE is not set in /etc/default/solr"
fi
CATALINA_OPTS="${CATALINA_OPTS} -DzkHost=${SOLR_ZK_ENSEMBLE} -Dsolr.solrxml.location=zookeeper"
if [ -n "$SOLR_HDFS_HOME" ] ; then
CATALINA_OPTS="${CATALINA_OPTS} -Dsolr.hdfs.home=${SOLR_HDFS_HOME}"
fi
if [ -n "$SOLR_HDFS_CONFIG" ] ; then
CATALINA_OPTS="${CATALINA_OPTS} -Dsolr.hdfs.confdir=${SOLR_HDFS_CONFIG}"
fi
if [ "$SOLR_KERBEROS_ENABLED" == "true" ] ; then
CATALINA_OPTS="${CATALINA_OPTS} -Dsolr.hdfs.security.kerberos.enabled=${SOLR_KERBEROS_ENABLED}"
fi
if [ -n "$SOLR_KERBEROS_KEYTAB" ] ; then
CATALINA_OPTS="${CATALINA_OPTS} -Dsolr.hdfs.security.kerberos.keytabfile=${SOLR_KERBEROS_KEYTAB}"
fi
if [ -n "$SOLR_KERBEROS_PRINCIPAL" ] ; then
CATALINA_OPTS="${CATALINA_OPTS} -Dsolr.hdfs.security.kerberos.principal=${SOLR_KERBEROS_PRINCIPAL}"
fi
if [ -n "$SOLR_AUTHENTICATION_TYPE" ] ; then
CATALINA_OPTS="${CATALINA_OPTS} -Dsolr.authentication.type=${SOLR_AUTHENTICATION_TYPE}"
fi
if [ -n "$SOLR_AUTHENTICATION_KERBEROS_KEYTAB" ] ; then
CATALINA_OPTS="${CATALINA_OPTS} -Dsolr.authentication.kerberos.keytab=${SOLR_AUTHENTICATION_KERBEROS_KEYTAB}"
fi
if [ -n "$SOLR_AUTHENTICATION_KERBEROS_PRINCIPAL" ] ; then
CATALINA_OPTS="${CATALINA_OPTS} -Dsolr.authentication.kerberos.principal=${SOLR_AUTHENTICATION_KERBEROS_PRINCIPAL}"
fi
if [ -n "$SOLR_AUTHENTICATION_KERBEROS_NAME_RULES" ] ; then
CATALINA_OPTS="${CATALINA_OPTS} -Dsolr.authentication.kerberos.name.rules=${SOLR_AUTHENTICATION_KERBEROS_NAME_RULES}"
fi
if [ -n "$SOLR_AUTHENTICATION_SIMPLE_ALLOW_ANON" ] ; then
CATALINA_OPTS="${CATALINA_OPTS} -Dsolr.authentication.simple.anonymous.allowed=${SOLR_AUTHENTICATION_SIMPLE_ALLOW_ANON}"
fi
if [ -n "$SOLR_AUTHENTICATION_JAAS_CONF" ] ; then
CATALINA_OPTS="${CATALINA_OPTS} -Djava.security.auth.login.config=${SOLR_AUTHENTICATION_JAAS_CONF}"
fi
# FIXME: we need to set this because of the jetty-centric default solr.xml
CATALINA_OPTS="${CATALINA_OPTS} -Dhost=$HOSTNAME -Djetty.port=$SOLR_PORT"
export CATALINA_OPTS="${CATALINA_OPTS} -Dsolr.host=$HOSTNAME
-Dsolr.port=$SOLR_PORT
-Dlog4j.configuration=file://$SOLR_LOG4J_CONFIG
-Dsolr.log=$SOLR_LOG
-Dsolr.admin.port=$SOLR_ADMIN_PORT
-Dsolr.solr.home=$SOLR_HOME"
# catalina doesn't use CATALINA_OPTS for stop action so we need to
# set JAVA_OPTS to include the admin port
if [ $1 = "stop" ] ; then
export JAVA_OPTS="$CATALINA_OPTS"
fi
if [ -x /usr/lib/bigtop-utils/bigtop-monitor-service ]; then
if ([ "$1" = "start" -o "$1" = "run" ]) && [ -n "$SOLRD_WATCHDOG_TIMEOUT" ] ; then
/usr/lib/bigtop-utils/bigtop-monitor-service $SOLRD_WATCHDOG_TIMEOUT $$ http://127.0.0.1:8983/solr
fi
fi
exec ${CATALINA_HOME}/bin/catalina.sh "$@"
EOF
chmod 755 $PREFIX/$LIB_DIR/bin/solrd
# installing the only script that goes into /usr/bin
install -D -m 0755 $DISTRO_DIR/solrctl.sh $PREFIX/usr/bin/solrctl
# precreating /var layout
install -d -m 0755 $VAR_DIR/log/solr
install -d -m 0755 $VAR_DIR/run/solr
install -d -m 0755 $VAR_DIR/lib/solr