123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175 |
- #!/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 ":ufd:v:" 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
- 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
- }
- }
|