Enforce correct CPU architecture for Go plugin builds. (#20405)
Co-authored-by: ilyam8 <ilya@netdata.cloud>
Austin S. Hemmelgarn committed
Jun 6, 2025 at 07:38 UTC
79f38dd0d2fd8e7491894117e044b358a726ee69
2 files changed
+70
-2
packaging/makeself/build-static.sh
+7
-2
@@ -30,30 +30,35 @@ case "${BUILDARCH}" in
30
QEMU_CPU="Nehalem-v2"
31
TUNING_FLAGS="-march=x86-64"
32
GOAMD64="v1"
33
+ GOARCH="amd64"
34
;;
35
armv6l) # Raspberry Pi 1 equivalent
36
QEMU_ARCH="arm"
37
QEMU_CPU="arm1176"
38
TUNING_FLAGS="-march=armv6zk -mtune=arm1176jzf-s"
39
GOARM="6"
40
+ GOARCH="arm"
41
;;
42
armv7l) # Baseline ARMv7 CPU
43
QEMU_ARCH="arm"
44
QEMU_CPU="cortex-a7"
45
TUNING_FLAGS="-march=armv7-a"
46
GOARM="7"
47
+ GOARCH="arm"
48
;;
49
aarch64) # Baseline ARMv8 CPU
50
QEMU_ARCH="aarch64"
51
QEMU_CPU="cortex-a53"
52
TUNING_FLAGS="-march=armv8-a"
53
GOARM64="v8.0"
54
+ GOARCH="arm64"
55
;;
56
ppc64le) # Baseline POWER8+ CPU
57
QEMU_ARCH="ppc64le"
58
QEMU_CPU="power8nvl"
59
TUNING_FLAGS="-mcpu=power8 -mtune=power9"
60
GOPPC64="power8"
61
+ GOARCH="ppc64le"
62
;;
63
esac
64
@@ -87,7 +92,7 @@ if [ -t 1 ]; then
92
--platform "${platform}" ${EXTRA_INSTALL_FLAGS:+-e EXTRA_INSTALL_FLAGS="${EXTRA_INSTALL_FLAGS}"} \
93
${DEBUG_BUILD_INFRA:+-e DEBUG_BUILD_INFRA=1} \
94
${QEMU_CPU:+-e QEMU_CPU="${QEMU_CPU}"} \
90
- -e TUNING_FLAGS="${TUNING_FLAGS}" \
95
+ -e TUNING_FLAGS="${TUNING_FLAGS}" ${GOARCH:+-e GOARCH="${GOARCH}"} \
96
${GOAMD64:+-e GOAMD64="${GOAMD64}"} ${GOARM:+-e GOARM="${GOARM}"} \
97
${GOARM64:+-e GOARM64="${GOARM64}"} ${GOPPC64:+-e GOPPC64="${GOPPC64}"} \
98
"${DOCKER_IMAGE_NAME}" /bin/sh /netdata/packaging/makeself/build.sh "${@}"
@@ -96,7 +101,7 @@ else
101
-e GITHUB_ACTIONS="${GITHUB_ACTIONS}" --platform "${platform}" \
102
${EXTRA_INSTALL_FLAGS:+-e EXTRA_INSTALL_FLAGS="${EXTRA_INSTALL_FLAGS}"} \
103
${QEMU_CPU:+-e QEMU_CPU="${QEMU_CPU}"} \
99
- -e TUNING_FLAGS="${TUNING_FLAGS}" \
104
+ -e TUNING_FLAGS="${TUNING_FLAGS}" ${GOARCH:+-e GOARCH="${GOARCH}"} \
105
${GOAMD64:+-e GOAMD64="${GOAMD64}"} ${GOARM:+-e GOARM="${GOARM}"} \
106
${GOARM64:+-e GOARM64="${GOARM64}"} ${GOPPC64:+-e GOPPC64="${GOPPC64}"} \
107
"${DOCKER_IMAGE_NAME}" /bin/sh /netdata/packaging/makeself/build.sh "${@}"
packaging/makeself/jobs/82-cpu-arch-check.sh
new
+63
@@ -0,0 +1,63 @@
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
+# shellcheck disable=SC2015
8
+[ "${GITHUB_ACTIONS}" = "true" ] && echo "::group::Checking Go plugin CPU architecture" || true
9
+
10
+check_files="${NETDATA_INSTALL_PATH}/bin/netdata ${NETDATA_INSTALL_PATH}/usr/libexec/netdata/plugins.d/go.d.plugin"
11
+
12
+case "${BUILDARCH}" in
13
+ aarch64)
14
+ ELF_MACHINE="AArch64"
15
+ ELF_CLASS="ELF64"
16
+ ;;
17
+ armv6l | armv7l)
18
+ ELF_MACHINE="ARM"
19
+ ELF_CLASS="ELF32"
20
+ ;;
21
+ ppc64le)
22
+ ELF_MACHINE="PowerPC64"
23
+ ELF_CLASS="ELF64"
24
+ ;;
25
+ x86_64)
26
+ ELF_MACHINE="X86-64"
27
+ ELF_CLASS="ELF64"
28
+ ;;
29
+ *)
30
+ echo "Buildarch is not recognized for architecture check."
31
+ exit 1
32
+ ;;
33
+esac
34
+
35
+for f in ${check_files}; do
36
+ if [ ! -f "${f}" ]; then
37
+ echo "File ${f} not found, skipping check"
38
+ continue
39
+ fi
40
+
41
+ # Get both the machine type and the class (32-bit vs 64-bit)
42
+ elf_info=$(readelf -h "${f}")
43
+ file_machine=$(echo "${elf_info}" | grep 'Machine:' | awk -F: '{print $2}' | xargs)
44
+ file_class=$(echo "${elf_info}" | grep 'Class:' | awk -F: '{print $2}' | xargs)
45
+
46
+ echo "Checking ${f}:"
47
+ echo " Expected: Class=${ELF_CLASS}, Machine contains '${ELF_MACHINE}'"
48
+ echo " Found: Class=${file_class}, Machine='${file_machine}'"
49
+
50
+ if [ "${file_class}" != "${ELF_CLASS}" ]; then
51
+ echo "ERROR: ${f} has wrong ELF class (${file_class} instead of ${ELF_CLASS})"
52
+ echo "This indicates a 32-bit/64-bit mismatch!"
53
+ exit 1
54
+ fi
55
+
56
+ if ! echo "${file_machine}" | grep -q "${ELF_MACHINE}"; then
57
+ echo "ERROR: ${f} was built for the wrong architecture (${file_machine} does not contain ${ELF_MACHINE})"
58
+ exit 1
59
+ fi
60
+done
61
+
62
+# shellcheck disable=SC2015
63
+[ "${GITHUB_ACTIONS}" = "true" ] && echo "::endgroup::" || true