Add basic runtime checks to static build process. (#13339)
* Enable use of Podman for static builds. This way those of us who have migrated away from Docker can still easily test static builds. * Add basic runtime testing to the static build process. This will help catch basic runtime issues that would not show up just from building the agent.
Austin S. Hemmelgarn committed
Jul 14, 2022 at 14:26 UTC
bd5f778838ff6b4206509a19b967f7b6eb6b16c7
3 files changed
+78
-9
packaging/makeself/build-static.sh
+23
-9
@@ -15,30 +15,44 @@ if [ -z "${platform}" ]; then
15
exit 1
16
fi
17
18
+if command -v docker > /dev/null 2>&1; then
19
+ docker="docker"
20
+elif command -v podman > /dev/null 2>&1; then
21
+ docker="podman"
22
+else
23
+ echo "Could not find a usable OCI runtime, need either Docker or Podman."
24
+ exit 1
25
+fi
26
+
27
DOCKER_IMAGE_NAME="netdata/static-builder"
28
29
if [ "${BUILDARCH}" != "$(uname -m)" ] && [ "$(uname -m)" = 'x86_64' ] && [ -z "${SKIP_EMULATION}" ]; then
21
- docker run --rm --privileged multiarch/qemu-user-static --reset -p yes || exit 1
30
+ ${docker} run --rm --privileged multiarch/qemu-user-static --reset -p yes || exit 1
31
fi
32
24
-if docker inspect "${DOCKER_IMAGE_NAME}" > /dev/null 2>&1; then
25
- img_platform="$(docker image inspect netdata/static-builder --format '{{.Os}}/{{.Architecture}}/{{.Variant}}')"
26
- if [ "${img_platform%'/'}" != "${platform}" ]; then
27
- docker image rm "${DOCKER_IMAGE_NAME}" || exit 1
33
+if ${docker} inspect "${DOCKER_IMAGE_NAME}" > /dev/null 2>&1; then
34
+ if ${docker} image inspect "${DOCKER_IMAGE_NAME}" | grep -q 'Variant'; then
35
+ img_platform="$(${docker} image inspect "${DOCKER_IMAGE_NAME}" --format '{{.Os}}/{{.Architecture}}/{{.Variant}}')"
36
+ else
37
+ img_platform="$(${docker} image inspect "${DOCKER_IMAGE_NAME}" --format '{{.Os}}/{{.Architecture}}')"
38
+ fi
39
+
40
+ if [ "${img_platform}" != "${platform}" ]; then
41
+ ${docker} image rm "${DOCKER_IMAGE_NAME}" || exit 1
42
fi
43
fi
44
31
-if ! docker inspect "${DOCKER_IMAGE_NAME}" > /dev/null 2>&1; then
32
- docker pull --platform "${platform}" "${DOCKER_IMAGE_NAME}"
45
+if ! ${docker} inspect "${DOCKER_IMAGE_NAME}" > /dev/null 2>&1; then
46
+ ${docker} pull --platform "${platform}" "${DOCKER_IMAGE_NAME}"
47
fi
48
49
# Run the build script inside the container
50
if [ -t 1 ]; then
37
- run docker run --rm -e BUILDARCH="${BUILDARCH}" -a stdin -a stdout -a stderr -i -t -v "$(pwd)":/netdata:rw \
51
+ run ${docker} run --rm -e BUILDARCH="${BUILDARCH}" -a stdin -a stdout -a stderr -i -t -v "$(pwd)":/netdata:rw \
52
"${DOCKER_IMAGE_NAME}" \
53
/bin/sh /netdata/packaging/makeself/build.sh "${@}"
54
else
41
- run docker run --rm -e BUILDARCH="${BUILDARCH}" -v "$(pwd)":/netdata:rw \
55
+ run ${docker} run --rm -e BUILDARCH="${BUILDARCH}" -v "$(pwd)":/netdata:rw \
56
-e GITHUB_ACTIONS="${GITHUB_ACTIONS}" "${DOCKER_IMAGE_NAME}" \
57
/bin/sh /netdata/packaging/makeself/build.sh "${@}"
58
fi
packaging/makeself/install-alpine-packages.sh
+1
@@ -24,6 +24,7 @@ apk add --no-cache -U \
24
git \
25
gnutls-dev \
26
gzip \
27
+ jq \
28
libelf-static \
29
libmnl-dev \
30
libnetfilter_acct-dev \
packaging/makeself/jobs/90-netdata-runtime-check.sh
new
+54
@@ -0,0 +1,54 @@
1
+#!/usr/bin/env bash
2
+# SPDX-License-Identifier: GPL-3.0-or-later
3
+
4
+# shellcheck source=./packaging/makeself/functions.sh
5
+. "${NETDATA_MAKESELF_PATH}"/functions.sh "${@}" || exit 1
6
+
7
+dump_log() {
8
+ cat ./netdata.log
9
+}
10
+
11
+wait_for() {
12
+ host="${1}"
13
+ port="${2}"
14
+ name="${3}"
15
+ timeout="30"
16
+
17
+ if command -v nc > /dev/null ; then
18
+ netcat="nc"
19
+ elif command -v netcat > /dev/null ; then
20
+ netcat="netcat"
21
+ else
22
+ printf "Unable to find a usable netcat command.\n"
23
+ return 1
24
+ fi
25
+
26
+ printf "Waiting for %s on %s:%s ... " "${name}" "${host}" "${port}"
27
+
28
+ sleep 30
29
+
30
+ i=0
31
+ while ! ${netcat} -z "${host}" "${port}"; do
32
+ sleep 1
33
+ if [ "$i" -gt "$timeout" ]; then
34
+ printf "Timed out!\n"
35
+ return 1
36
+ fi
37
+ i="$((i + 1))"
38
+ done
39
+ printf "OK\n"
40
+}
41
+
42
+trap dump_log EXIT
43
+
44
+"${NETDATA_INSTALL_PATH}/bin/netdata" -D > ./netdata.log 2>&1 &
45
+
46
+wait_for localhost 19999 netdata || exit 1
47
+
48
+curl -sS http://127.0.0.1:19999/api/v1/info > ./response || exit 1
49
+
50
+cat ./response
51
+
52
+jq '.version' ./response || exit 1
53
+
54
+trap - EXIT