influxdb/releng/packages/spec/clean_install/_install_uninstall.bash

104 lines
2.5 KiB
Bash
Executable File

#!/bin/bash
##########################################################
# This script is intended to be run from inside Docker. #
# #
# You generally can't start services from inside Docker, #
# so we just assert that binaries are on $PATH. #
##########################################################
function printHelp() {
>&2 echo "\
USAGE: $0 [-D | -R]
Tests installing and then uninstalling the provided package files.
Exactly one of -D or -R must be provided to indicate Debian or RPM packages.
"
}
BINS=( influx influxd influx_inspect )
function testInstalled() {
if ! command -v "$1" >/dev/null 2>&1 ; then
>&2 echo "$1 not on \$PATH after install"
exit 1
fi
}
function testUninstalled() {
if command -v "$1" >/dev/null 2>&1 ; then
>&2 echo "$1 still on \$PATH after uninstall"
exit 1
fi
}
function testManpages() {
# We can't simply check that the man pages show up correctly,
# because the docker images for Ubuntu and CentOS disable man page support: https://unix.stackexchange.com/q/259478
# Instead, we will just list the contents of the package
# and ensure that the man pages would be extracted to the right location.
echo 'Checking that man pages would be installed correctly.'
local f=$(mktemp)
if [ "$TYPE" == "deb" ]; then
dpkg -c /data.deb > "$f"
elif [ "$TYPE" == "rpm" ]; then
rpm -qlp /data.rpm > "$f"
fi
for p in influxd influxd-backup influxd-config influxd-restore influxd-run influxd-version \
influx \
influx_inspect ; do
if ! grep -F "/usr/share/man/man1/$p.1.gz" < "$f" > /dev/null; then
>&2 echo "Package is missing man page for $p"
exit 1
fi
done
}
function testInstall() {
if [ "$TYPE" == "deb" ]; then
export DEBIAN_FRONTEND=noninteractive
apt-get update
apt-get install --assume-yes /data.deb
elif [ "$TYPE" == "rpm" ]; then
yum localinstall -y /data.rpm
else
>&2 echo "testInstall: invalid type $TYPE"
exit 2
fi
for x in "${BINS[@]}"; do
testInstalled "$x"
done
testManpages
if [ "$TYPE" == "deb" ]; then
dpkg -r influxdb
elif [ "$TYPE" == "rpm" ]; then
yum remove -y influxdb
fi
for x in "${BINS[@]}"; do
testUninstalled "$x"
done
true # So we don't return 1 if `which` didn't find the executable after uninstall.
}
TYPE=""
while getopts DR arg; do
case "$arg" in
D) TYPE=deb;;
R) TYPE=rpm;;
esac
done
if [ "$TYPE" != "deb" ] && [ "$TYPE" != "rpm" ]; then
printHelp
exit 1
fi
testInstall