104 lines
2.5 KiB
Bash
Executable File
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
|