#!/bin/sh # Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one # or more contributor license agreements. Licensed under the Elastic License; # you may not use this file except in compliance with the Elastic License. SCRIPT="$0" # SCRIPT may be an arbitrarily deep series of symlinks. Loop until we have the concrete path. while [ -h "$SCRIPT" ] ; do ls=`ls -ld "$SCRIPT"` # Drop everything prior to -> link=`expr "$ls" : '.*-> \(.*\)$'` if expr "$link" : '/.*' > /dev/null; then SCRIPT="$link" else SCRIPT=`dirname "$SCRIPT"`/"$link" fi done # determine elasticsearch home ES_HOME=`dirname "$SCRIPT"`/../.. # make ELASTICSEARCH_HOME absolute ES_HOME=`cd "$ES_HOME"; pwd` # If an include wasn't specified in the environment, then search for one... if [ "x$ES_INCLUDE" = "x" ]; then # Locations (in order) to use when searching for an include file. for include in /usr/share/elasticsearch/elasticsearch.in.sh \ /usr/local/share/elasticsearch/elasticsearch.in.sh \ /opt/elasticsearch/elasticsearch.in.sh \ ~/.elasticsearch.in.sh \ "`dirname "$0"`"/../elasticsearch.in.sh \ "$ES_HOME/bin/elasticsearch.in.sh"; do if [ -r "$include" ]; then . "$include" break fi done # ...otherwise, source the specified include. elif [ -r "$ES_INCLUDE" ]; then . "$ES_INCLUDE" fi if [ -x "$JAVA_HOME/bin/java" ]; then JAVA="$JAVA_HOME/bin/java" else JAVA=`which java` fi if [ ! -x "$JAVA" ]; then echo "Could not find any executable java binary. Please install java in your PATH or set JAVA_HOME" exit 1 fi if [ -z "$ES_CLASSPATH" ]; then echo "You must set the ES_CLASSPATH var" >&2 exit 1 fi # Try to read package config files if [ -f "/etc/sysconfig/elasticsearch" ]; then CONF_DIR=/etc/elasticsearch CONF_FILE=$CONF_DIR/elasticsearch.yml . "/etc/sysconfig/elasticsearch" elif [ -f "/etc/default/elasticsearch" ]; then CONF_DIR=/etc/elasticsearch CONF_FILE=$CONF_DIR/elasticsearch.yml . "/etc/default/elasticsearch" fi # Parse any long getopt options and put them into properties before calling getopt below # Be dash compatible to make sure running under ubuntu works ARGCOUNT=$# COUNT=0 while [ $COUNT -lt $ARGCOUNT ] do case $1 in --*=*) properties="$properties -Des.${1#--}" shift 1; COUNT=$(($COUNT+1)) ;; --*) properties="$properties -Des.${1#--}=$2" shift ; shift; COUNT=$(($COUNT+2)) ;; *) set -- "$@" "$1"; shift; COUNT=$(($COUNT+1)) esac done # check if properties already has a config file or config dir if [ -e "$CONF_DIR" ]; then case "$properties" in *-Des.default.path.conf=*) ;; *) if [ ! -d "$CONF_DIR/xpack" ]; then echo "ERROR: The configuration directory [$CONF_DIR/xpack] does not exist. The users tool expects security configuration files in that location." echo "The plugin may not have been installed with the correct configuration path. If [$ES_HOME/config/xpack] exists, please copy the 'xpack' directory to [$CONF_DIR]" exit 1 fi properties="$properties -Des.default.path.conf=$CONF_DIR" ;; esac fi if [ -e "$CONF_FILE" ]; then case "$properties" in *-Des.default.config=*) ;; *) properties="$properties -Des.default.config=$CONF_FILE" ;; esac fi export HOSTNAME=`hostname -s` # include shield jars in classpath ES_CLASSPATH="$ES_CLASSPATH:$ES_HOME/plugins/xpack/*" # don't let JAVA_TOOL_OPTIONS slip in (e.g. crazy agents in ubuntu) # works around https://bugs.launchpad.net/ubuntu/+source/jayatana/+bug/1441487 if [ "x$JAVA_TOOL_OPTIONS" != "x" ]; then echo "Warning: Ignoring JAVA_TOOL_OPTIONS=$JAVA_TOOL_OPTIONS" echo "Please pass JVM parameters via ES_JAVA_OPTS instead" unset JAVA_TOOL_OPTIONS fi cd "$ES_HOME" > /dev/null "$JAVA" $ES_JAVA_OPTS -cp "$ES_CLASSPATH" -Des.path.home="$ES_HOME" $properties org.elasticsearch.shield.authc.file.tool.UsersTool "$@" status=$? cd - > /dev/null exit $status