180 lines
6.1 KiB
Bash
180 lines
6.1 KiB
Bash
#!/bin/bash
|
|
|
|
# This file contains some utilities to test the elasticsearch scripts with
|
|
# the .deb/.rpm packages.
|
|
|
|
# WARNING: This testing file must be executed as root and can
|
|
# dramatically change your system. It should only be executed
|
|
# in a throw-away VM like those made by the Vagrantfile at
|
|
# the root of the Elasticsearch source code. This should
|
|
# cause the script to fail if it is executed any other way:
|
|
[ -f /etc/is_vagrant_vm ] || {
|
|
>&2 echo "must be run on a vagrant VM"
|
|
exit 1
|
|
}
|
|
|
|
# Licensed to Elasticsearch under one or more contributor
|
|
# license agreements. See the NOTICE file distributed with
|
|
# this work for additional information regarding copyright
|
|
# ownership. Elasticsearch 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.
|
|
|
|
env_file() {
|
|
if is_dpkg; then
|
|
echo "/etc/default/elasticsearch"
|
|
fi
|
|
if is_rpm; then
|
|
echo "/etc/sysconfig/elasticsearch"
|
|
fi
|
|
}
|
|
|
|
# Export some useful paths.
|
|
export_elasticsearch_paths() {
|
|
export ESHOME="/usr/share/elasticsearch"
|
|
export ESPLUGINS="$ESHOME/plugins"
|
|
export ESMODULES="$ESHOME/modules"
|
|
export ESCONFIG="/etc/elasticsearch"
|
|
export ESDATA="/var/lib/elasticsearch"
|
|
export ESLOG="/var/log/elasticsearch"
|
|
export ESENVFILE=$(env_file)
|
|
export PACKAGE_NAME
|
|
}
|
|
|
|
|
|
# Install the rpm or deb package.
|
|
# -u upgrade rather than install. This only matters for rpm.
|
|
# -v the version to upgrade to. Defaults to the version under test.
|
|
install_package() {
|
|
local version=$(cat version)
|
|
local rpmCommand='-i'
|
|
local dir='./'
|
|
while getopts ":fuv:" opt; do
|
|
case $opt in
|
|
u)
|
|
rpmCommand='-U'
|
|
dpkgCommand='--force-confnew'
|
|
;;
|
|
f)
|
|
rpmCommand='-U --force'
|
|
dpkgCommand='--force-conflicts'
|
|
;;
|
|
d)
|
|
dir=$OPTARG
|
|
;;
|
|
v)
|
|
version=$OPTARG
|
|
;;
|
|
\?)
|
|
echo "Invalid option: -$OPTARG" >&2
|
|
;;
|
|
esac
|
|
done
|
|
local rpm_classifier="-x86_64"
|
|
local deb_classifier="-amd64"
|
|
if [[ $version == 6* ]]; then
|
|
rpm_classifier=""
|
|
deb_classifier=""
|
|
fi
|
|
if is_rpm; then
|
|
rpm $rpmCommand $dir/$PACKAGE_NAME-$version$rpm_classifier.rpm
|
|
elif is_dpkg; then
|
|
run dpkg $dpkgCommand -i $dir/$PACKAGE_NAME-$version$deb_classifier.deb
|
|
[[ "$status" -eq 0 ]] || {
|
|
echo "dpkg failed:"
|
|
echo "$output"
|
|
run lsof /var/lib/dpkg/lock
|
|
echo "lsof /var/lib/dpkg/lock:"
|
|
echo "$output"
|
|
false
|
|
}
|
|
else
|
|
skip "Only rpm or deb supported"
|
|
fi
|
|
|
|
# pass through java home to package
|
|
echo "JAVA_HOME=\"$SYSTEM_JAVA_HOME\"" >> $(env_file)
|
|
}
|
|
|
|
# Checks that all directories & files are correctly installed after a deb or
|
|
# rpm install.
|
|
verify_package_installation() {
|
|
id elasticsearch
|
|
|
|
getent group elasticsearch
|
|
# homedir is set in /etc/passwd but to a non existent directory
|
|
assert_file_not_exist $(getent passwd elasticsearch | cut -d: -f6)
|
|
|
|
assert_file "$ESHOME" d root root 755
|
|
assert_file "$ESHOME/bin" d root root 755
|
|
assert_file "$ESHOME/bin/elasticsearch" f root root 755
|
|
assert_file "$ESHOME/bin/elasticsearch-plugin" f root root 755
|
|
assert_file "$ESHOME/bin/elasticsearch-shard" f root root 755
|
|
assert_file "$ESHOME/bin/elasticsearch-node" f root root 755
|
|
assert_file "$ESHOME/lib" d root root 755
|
|
assert_file "$ESCONFIG" d root elasticsearch 2750
|
|
assert_file "$ESCONFIG/elasticsearch.keystore" f root elasticsearch 660
|
|
|
|
sudo -u elasticsearch "$ESHOME/bin/elasticsearch-keystore" list | grep "keystore.seed"
|
|
|
|
assert_file "$ESCONFIG/.elasticsearch.keystore.initial_md5sum" f root elasticsearch 644
|
|
assert_file "$ESCONFIG/elasticsearch.yml" f root elasticsearch 660
|
|
assert_file "$ESCONFIG/jvm.options" f root elasticsearch 660
|
|
assert_file "$ESCONFIG/log4j2.properties" f root elasticsearch 660
|
|
assert_file "$ESDATA" d elasticsearch elasticsearch 2750
|
|
assert_file "$ESLOG" d elasticsearch elasticsearch 2750
|
|
assert_file "$ESPLUGINS" d root root 755
|
|
assert_file "$ESMODULES" d root root 755
|
|
assert_file "$ESHOME/NOTICE.txt" f root root 644
|
|
assert_file "$ESHOME/README.asciidoc" f root root 644
|
|
|
|
if is_dpkg; then
|
|
# Env file
|
|
assert_file "/etc/default/elasticsearch" f root elasticsearch 660
|
|
|
|
# Machine-readable debian/copyright file
|
|
local copyrightDir=$(readlink -f /usr/share/doc/$PACKAGE_NAME)
|
|
assert_file $copyrightDir d root root 755
|
|
assert_file "$copyrightDir/copyright" f root root 644
|
|
fi
|
|
|
|
if is_rpm; then
|
|
# Env file
|
|
assert_file "/etc/sysconfig/elasticsearch" f root elasticsearch 660
|
|
# License file
|
|
assert_file "/usr/share/elasticsearch/LICENSE.txt" f root root 644
|
|
fi
|
|
|
|
if is_systemd; then
|
|
assert_file "/usr/lib/systemd/system/elasticsearch.service" f root root 644
|
|
assert_file "/usr/lib/tmpfiles.d/elasticsearch.conf" f root root 644
|
|
assert_file "/usr/lib/sysctl.d/elasticsearch.conf" f root root 644
|
|
if is_rpm; then
|
|
[[ $(/usr/sbin/sysctl vm.max_map_count) =~ "vm.max_map_count = 262144" ]]
|
|
else
|
|
[[ $(/sbin/sysctl vm.max_map_count) =~ "vm.max_map_count = 262144" ]]
|
|
fi
|
|
fi
|
|
|
|
if is_sysvinit; then
|
|
assert_file "/etc/init.d/elasticsearch" f root root 750
|
|
fi
|
|
|
|
run sudo -E -u vagrant LANG="en_US.UTF-8" cat "$ESCONFIG/elasticsearch.yml"
|
|
[ $status = 1 ]
|
|
[[ "$output" == *"Permission denied"* ]] || {
|
|
echo "Expected permission denied but found $output:"
|
|
false
|
|
}
|
|
}
|