2020-05-27 07:09:37 +00:00
|
|
|
#!/bin/sh -ex
|
2020-05-27 07:49:26 +00:00
|
|
|
# Environment variables:
|
|
|
|
# * INTERACTIVE: set to 1 to keep an interactive shell open after the script ran (for debugging)
|
|
|
|
# * FEED: binary package feed (e.g. "latest", "nightly")
|
2022-08-18 11:14:23 +00:00
|
|
|
# * PROJ: OBS project namespace (e.g. "osmocom:latest")
|
|
|
|
# * PROJ_CONFLICT: Conflicting OBS project namespace (e.g. "osmocom:nightly")
|
2020-05-27 07:49:26 +00:00
|
|
|
# * KEEP_CACHE: set to 1 to keep downloaded binary packages (for development)
|
2021-01-18 16:32:15 +00:00
|
|
|
# * TESTS: which tests to run (all by default, see below for possible values)
|
2020-05-26 13:12:29 +00:00
|
|
|
. "$(dirname "$0")/common.sh"
|
2020-05-26 15:28:31 +00:00
|
|
|
|
2021-01-21 15:57:15 +00:00
|
|
|
DISTRO="$1"
|
|
|
|
DISTROS="
|
|
|
|
centos8
|
2021-01-20 16:01:38 +00:00
|
|
|
debian10
|
2022-07-08 12:52:17 +00:00
|
|
|
debian11
|
2021-01-21 15:57:15 +00:00
|
|
|
"
|
|
|
|
|
|
|
|
check_usage() {
|
|
|
|
local i
|
|
|
|
for i in $DISTROS; do
|
|
|
|
if [ "$DISTRO" = "$i" ]; then
|
|
|
|
return
|
|
|
|
fi
|
|
|
|
done
|
2020-05-26 15:28:31 +00:00
|
|
|
echo "usage: repo-install-test.sh DISTRO"
|
2021-01-21 15:57:15 +00:00
|
|
|
echo "DISTRO: one of: $DISTROS"
|
2020-05-26 15:28:31 +00:00
|
|
|
exit 1
|
2021-01-21 15:57:15 +00:00
|
|
|
}
|
2020-05-26 15:28:31 +00:00
|
|
|
|
2021-01-21 15:57:15 +00:00
|
|
|
check_usage
|
2020-05-26 15:28:31 +00:00
|
|
|
docker_images_require "$DISTRO-repo-install-test"
|
2020-05-26 12:53:31 +00:00
|
|
|
|
2021-01-14 12:46:24 +00:00
|
|
|
FEED="${FEED:-nightly}"
|
2022-08-18 11:14:23 +00:00
|
|
|
PROJ="${PROJ:-osmocom:$FEED}"
|
2020-05-26 15:28:31 +00:00
|
|
|
CONTAINER="$DISTRO-repo-install-test-$FEED"
|
2020-05-26 12:53:31 +00:00
|
|
|
|
2021-01-18 16:32:15 +00:00
|
|
|
if [ -z "$TESTS" ]; then
|
|
|
|
TESTS="
|
2021-01-19 08:22:50 +00:00
|
|
|
test_conflict
|
2021-01-18 16:32:15 +00:00
|
|
|
install_repo_packages
|
|
|
|
test_binaries
|
|
|
|
services_check
|
|
|
|
"
|
|
|
|
fi
|
|
|
|
|
2021-01-19 08:22:50 +00:00
|
|
|
if [ -z "$PROJ_CONFLICT" ]; then
|
|
|
|
case "$FEED" in
|
|
|
|
latest)
|
2022-08-18 11:14:23 +00:00
|
|
|
PROJ_CONFLICT="osmocom:nightly"
|
2021-01-19 08:22:50 +00:00
|
|
|
;;
|
|
|
|
nightly)
|
2022-08-18 11:14:23 +00:00
|
|
|
PROJ_CONFLICT="osmocom:latest"
|
2021-01-19 08:22:50 +00:00
|
|
|
;;
|
|
|
|
next)
|
2022-08-18 11:14:23 +00:00
|
|
|
PROJ_CONFLICT="osmocom:nightly"
|
2021-01-19 08:22:50 +00:00
|
|
|
;;
|
|
|
|
esac
|
|
|
|
fi
|
|
|
|
|
2020-05-26 12:53:31 +00:00
|
|
|
# Try to run "systemctl status" 10 times, kill the container on failure
|
|
|
|
check_if_systemd_is_running() {
|
|
|
|
for i in $(seq 1 10); do
|
|
|
|
sleep 1
|
|
|
|
if docker exec "$CONTAINER" systemctl status; then
|
|
|
|
return
|
|
|
|
fi
|
|
|
|
done
|
|
|
|
|
|
|
|
echo "ERROR: systemd is not running properly."
|
|
|
|
docker container kill "$CONTAINER"
|
|
|
|
exit 1
|
|
|
|
}
|
|
|
|
|
|
|
|
# Kill already running container
|
|
|
|
if [ "$(docker inspect -f '{{.State.Running}}' "$CONTAINER" 2> /dev/null)" = "true" ]; then
|
|
|
|
docker container kill "$CONTAINER"
|
|
|
|
sleep 1
|
|
|
|
fi
|
|
|
|
|
2020-05-27 07:49:26 +00:00
|
|
|
# Additional docker run arguments
|
|
|
|
args=""
|
|
|
|
if [ -n "$KEEP_CACHE" ]; then
|
|
|
|
args="$args -e KEEP_CACHE=1"
|
|
|
|
args="$args -v $OSMO_CI_DIR/_repo_install_test_cache/debian/apt:/var/cache/apt"
|
2020-05-26 15:28:31 +00:00
|
|
|
args="$args -v $OSMO_CI_DIR/_repo_install_test_cache/centos/dnf:/var/cache/dnf"
|
2020-05-27 07:49:26 +00:00
|
|
|
fi
|
|
|
|
|
2020-05-26 12:53:31 +00:00
|
|
|
# Run the container
|
|
|
|
# * This does not output anything, for debugging add -it and remove &.
|
|
|
|
# * /run, /tmp, cgroups, SYS_ADMIN: needed for systemd
|
|
|
|
# * SYS_NICE: needed for changing CPUScheduling{Policy,Priority} (osmo-bts systemd service files)
|
|
|
|
docker run --rm \
|
2020-05-26 13:12:29 +00:00
|
|
|
-v "$OSMO_CI_DIR/scripts/repo-install-test:/repo-install-test:ro" \
|
2020-05-26 12:53:31 +00:00
|
|
|
--name "$CONTAINER" \
|
|
|
|
-e FEED="$FEED" \
|
2021-01-14 13:01:29 +00:00
|
|
|
-e PROJ="$PROJ" \
|
2021-01-19 08:22:50 +00:00
|
|
|
-e PROJ_CONFLICT="$PROJ_CONFLICT" \
|
2020-05-26 15:28:31 +00:00
|
|
|
-e DISTRO="$DISTRO" \
|
2021-01-18 16:32:15 +00:00
|
|
|
-e TESTS="$TESTS" \
|
2020-05-26 12:53:31 +00:00
|
|
|
-e container=docker \
|
|
|
|
--tmpfs /run \
|
2020-05-26 14:44:39 +00:00
|
|
|
--tmpfs /run/lock \
|
2020-05-26 12:53:31 +00:00
|
|
|
--tmpfs /tmp \
|
|
|
|
-v /sys/fs/cgroup:/sys/fs/cgroup:ro \
|
|
|
|
--cap-add SYS_ADMIN \
|
|
|
|
--cap-add SYS_NICE \
|
2020-05-27 07:49:26 +00:00
|
|
|
$args \
|
2020-05-26 15:28:31 +00:00
|
|
|
"$USER/$DISTRO-repo-install-test" \
|
2020-05-26 12:53:31 +00:00
|
|
|
/lib/systemd/systemd &
|
|
|
|
check_if_systemd_is_running
|
|
|
|
|
|
|
|
# Run the test script
|
2020-05-27 07:09:37 +00:00
|
|
|
ret=0
|
|
|
|
if ! docker exec "$CONTAINER" /repo-install-test/run-inside-docker.sh; then
|
|
|
|
ret=1
|
|
|
|
fi
|
2020-05-26 12:53:31 +00:00
|
|
|
|
|
|
|
# Interactive shell
|
|
|
|
if [ -n "$INTERACTIVE" ]; then
|
2020-05-27 07:09:37 +00:00
|
|
|
docker exec -it "$CONTAINER" bash || true
|
2020-05-26 12:53:31 +00:00
|
|
|
fi
|
|
|
|
|
|
|
|
docker container kill "$CONTAINER"
|
|
|
|
|
|
|
|
exit $ret
|