@cryptotaxi247 / netdata-1 / commits / 79f38dd0d

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