#!/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 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__ Solr Console __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