0
0
Fork 0
mirror of https://github.com/netdata/netdata.git synced 2025-03-17 14:32:48 +00:00

Fix static builds to ensure usability on intended baseline hardware. ()

* Enforce usage of specific CPU models for static build runtime checks.

* Add explicit architecture overrides for ARMv6l static builds.

* Fix handling of source paths.

* Enable tracing for static build code.

* Fix cflags and version handling.

* Restructure cflags handling and add Go architecture flags.
This commit is contained in:
Austin S. Hemmelgarn 2024-12-19 08:28:20 -05:00 committed by GitHub
parent decc5632e2
commit 50c35cb375
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
11 changed files with 92 additions and 35 deletions

View file

@ -13,30 +13,21 @@ VERSION="${VERSION:-"$(git describe)"}"
BASENAME="$NAME-$BUILDARCH-$VERSION"
prepare_build() {
progress "Preparing build"
(
test -d artifacts || mkdir -p artifacts
) >&2
test -d artifacts || mkdir -p artifacts
}
build_static() {
progress "Building static ${BUILDARCH}"
(
EXTRA_INSTALL_FLAGS="${EXTRA_INSTALL_FLAGS}" USER="" ./packaging/makeself/build-static.sh "${BUILDARCH}"
) >&2
EXTRA_INSTALL_FLAGS="${EXTRA_INSTALL_FLAGS}" USER="" ./packaging/makeself/build-static.sh "${BUILDARCH}"
}
prepare_assets() {
progress "Preparing assets"
(
cp packaging/version artifacts/latest-version.txt
cp packaging/version artifacts/latest-version.txt
cd artifacts || exit 1
ln -s "${BASENAME}.gz.run" "netdata-${BUILDARCH}-latest.gz.run"
if [ "${BUILDARCH}" = "x86_64" ]; then
ln -s "${BASENAME}.gz.run" netdata-latest.gz.run
fi
) >&2
cd artifacts || exit 1
ln -s "${BASENAME}.gz.run" "netdata-${BUILDARCH}-latest.gz.run"
if [ "${BUILDARCH}" = "x86_64" ]; then
ln -s "${BASENAME}.gz.run" netdata-latest.gz.run
fi
}
steps="prepare_build build_static"

View file

@ -35,6 +35,34 @@ if [ "${BUILDARCH}" != "$(uname -m)" ] && [ -z "${SKIP_EMULATION}" ]; then
fi
fi
case "${BUILDARCH}" in
x86_64) # x86-64-v2 equivalent
QEMU_CPU="Nehalem-v2"
TUNING_FLAGS="-march=x86-64"
GOAMD64="v1"
;;
armv6l) # Raspberry Pi 1 equivalent
QEMU_CPU="arm1176"
TUNING_FLAGS="-march=armv6zk -mtune=arm1176jzf-s"
GOARM="6"
;;
armv7l) # Baseline ARMv7 CPU
QEMU_CPU="cortex-a7"
TUNING_FLAGS="-march=armv7-a"
GOARM="7"
;;
aarch64) # Baseline ARMv8 CPU
QEMU_CPU="cortex-a53"
TUNING_FLAGS="-march=armv8-a"
GOARM64="v8.0"
;;
ppc64le) # Baseline POWER8+ CPU
QEMU_CPU="power8nvl"
TUNING_FLAGS="-mcpu=power8 -mtune=power9"
GOPPC64="power8"
;;
esac
if ${docker} inspect "${DOCKER_IMAGE_NAME}" > /dev/null 2>&1; then
if ${docker} image inspect "${DOCKER_IMAGE_NAME}" | grep -q 'Variant'; then
img_platform="$(${docker} image inspect "${DOCKER_IMAGE_NAME}" --format '{{.Os}}/{{.Architecture}}/{{.Variant}}')"
@ -55,10 +83,18 @@ fi
if [ -t 1 ]; then
run ${docker} run --rm -e BUILDARCH="${BUILDARCH}" -a stdin -a stdout -a stderr -i -t -v "$(pwd)":/netdata:rw \
--platform "${platform}" ${EXTRA_INSTALL_FLAGS:+-e EXTRA_INSTALL_FLAGS="${EXTRA_INSTALL_FLAGS}"} \
${QEMU_CPU:+-e QEMU_CPU="${QEMU_CPU}"} \
-e TUNING_FLAGS="${TUNING_FLAGS}" \
${GOAMD64:+-e GOAMD64="${GOAMD64}"} ${GOARM:+-e GOARM="${GOARM}"} \
${GOARM64:+-e GOARM64="${GOARM64}"} ${GOPPC64:+-e GOPPC64="${GOPPC64}"} \
"${DOCKER_IMAGE_NAME}" /bin/sh /netdata/packaging/makeself/build.sh "${@}"
else
run ${docker} run --rm -e BUILDARCH="${BUILDARCH}" -v "$(pwd)":/netdata:rw \
-e GITHUB_ACTIONS="${GITHUB_ACTIONS}" --platform "${platform}" \
${EXTRA_INSTALL_FLAGS:+-e EXTRA_INSTALL_FLAGS="${EXTRA_INSTALL_FLAGS}"} \
${QEMU_CPU:+-e QEMU_CPU="${QEMU_CPU}"} \
-e TUNING_FLAGS="${TUNING_FLAGS}" \
${GOAMD64:+-e GOAMD64="${GOAMD64}"} ${GOARM:+-e GOARM="${GOARM}"} \
${GOARM64:+-e GOARM64="${GOARM64}"} ${GOPPC64:+-e GOPPC64="${GOPPC64}"} \
"${DOCKER_IMAGE_NAME}" /bin/sh /netdata/packaging/makeself/build.sh "${@}"
fi

View file

@ -6,10 +6,22 @@
# allow running the jobs by hand
[ -z "${NETDATA_BUILD_WITH_DEBUG}" ] && export NETDATA_BUILD_WITH_DEBUG=0
[ -z "${NETDATA_INSTALL_PATH}" ] && export NETDATA_INSTALL_PATH="${1-/opt/netdata}"
[ -z "${NETDATA_MAKESELF_PATH}" ] && NETDATA_MAKESELF_PATH="$(dirname "${0}")/../.."
[ "${NETDATA_MAKESELF_PATH:0:1}" != "/" ] && NETDATA_MAKESELF_PATH="$(pwd)/${NETDATA_MAKESELF_PATH}"
[ -z "${NETDATA_SOURCE_PATH}" ] && export NETDATA_SOURCE_PATH="${NETDATA_MAKESELF_PATH}/../.."
export NETDATA_MAKESELF_PATH NETDATA_MAKESELF_PATH
[ -z "${NETDATA_MAKESELF_PATH}" ] && NETDATA_MAKESELF_PATH="$(
self=${0}
while [ -L "${self}" ]
do
cd "${self%/*}" || exit 1
self=$(readlink "${self}")
done
cd "${self%/*}" || exit 1
cd ../.. || exit 1
echo "$(pwd -P)/${self##*/}"
)"
[ -z "${NETDATA_SOURCE_PATH}" ] && NETDATA_SOURCE_PATH="$(
cd "${NETDATA_MAKESELF_PATH}/../.." || exit 1
pwd -P
)"
export NETDATA_MAKESELF_PATH NETDATA_SOURCE_PATH
export NULL=
# make sure the path does not end with /

View file

@ -8,8 +8,9 @@
# shellcheck disable=SC2015
[ "${GITHUB_ACTIONS}" = "true" ] && echo "::group::Building OpenSSL" || true
export CFLAGS='-fno-lto -pipe'
export LDFLAGS='-static'
export CFLAGS="${TUNING_FLAGS} -fno-lto -pipe"
export CXXFLAGS="${CFLAGS}"
export LDFLAGS="-static"
export PKG_CONFIG="pkg-config --static"
if [ -d "${NETDATA_MAKESELF_PATH}/tmp/openssl" ]; then

View file

@ -12,7 +12,8 @@
fetch "bash-${BASH_VERSION}" "${BASH_ARTIFACT_SOURCE}/bash-${BASH_VERSION}.tar.gz" \
"${BASH_ARTIFACT_SHA256}" bash
export CFLAGS="-pipe"
export CFLAGS="${TUNING_FLAGS} -pipe"
export CXXFLAGS="${CFLAGS}"
export PKG_CONFIG_PATH="/openssl-static/lib64/pkgconfig"
if [ "${CACHE_HIT:-0}" -eq 0 ]; then

View file

@ -27,7 +27,8 @@ fi
cd "${NETDATA_MAKESELF_PATH}/tmp/curl" || exit 1
export CFLAGS="-I/openssl-static/include -pipe"
export CFLAGS="${TUNING_FLAGS} -I/openssl-static/include -pipe"
export CXXFLAGS="${CFLAGS}"
export LDFLAGS="-static -L/openssl-static/lib64"
export PKG_CONFIG="pkg-config --static"
export PKG_CONFIG_PATH="/openssl-static/lib64/pkgconfig"

View file

@ -12,7 +12,8 @@
fetch "ioping-${IOPING_VERSION}" "${IOPING_SOURCE}/archive/refs/tags/v${IOPING_VERSION}.tar.gz" \
"${IOPING_ARTIFACT_SHA256}" ioping
export CFLAGS="-static -pipe"
export CFLAGS="${TUNING_FLAGS} -static -pipe"
export CXXFLAGS="${CFLAGS}"
if [ "${CACHE_HIT:-0}" -eq 0 ]; then
run make clean

View file

@ -12,7 +12,8 @@
# shellcheck disable=SC2015
[ "${GITHUB_ACTIONS}" = "true" ] && echo "::group::building libnetfilter_acct" || true
export CFLAGS="-static -I/usr/include/libmnl -pipe"
export CFLAGS="${TUNING_FLAGS} -static -I/usr/include/libmnl -pipe"
export CXXFLAGS="${CFLAGS}"
export LDFLAGS="-static -L/usr/lib -lmnl"
export PKG_CONFIG="pkg-config --static"
export PKG_CONFIG_PATH="/usr/lib/pkgconfig"

View file

@ -7,9 +7,9 @@
cd "${NETDATA_SOURCE_PATH}" || exit 1
if [ "${NETDATA_BUILD_WITH_DEBUG}" -eq 0 ]; then
export CFLAGS="-ffunction-sections -fdata-sections -static -O2 -funroll-loops -I/openssl-static/include -I/libnetfilter-acct-static/include/libnetfilter_acct -I/curl-local/include/curl -I/usr/include/libmnl -pipe"
export CFLAGS="${TUNING_FLAGS} -ffunction-sections -fdata-sections -static -O2 -funroll-loops -I/openssl-static/include -I/libnetfilter-acct-static/include/libnetfilter_acct -I/curl-local/include/curl -I/usr/include/libmnl -pipe"
else
export CFLAGS="-static -O1 -pipe -ggdb -Wall -Wextra -Wformat-signedness -DNETDATA_INTERNAL_CHECKS=1 -I/openssl-static/include -I/libnetfilter-acct-static/include/libnetfilter_acct -I/curl-local/include/curl -I/usr/include/libmnl"
export CFLAGS="${TUNING_FLAGS} -static -O1 -pipe -ggdb -Wall -Wextra -Wformat-signedness -DNETDATA_INTERNAL_CHECKS=1 -I/openssl-static/include -I/libnetfilter-acct-static/include/libnetfilter_acct -I/curl-local/include/curl -I/usr/include/libmnl"
fi
export LDFLAGS="-Wl,--gc-sections -static -L/openssl-static/lib64 -L/libnetfilter-acct-static/lib -lnetfilter_acct -L/usr/lib -lmnl -L/usr/lib -lzstd -L/curl-local/lib"

View file

@ -1,6 +1,8 @@
#!/usr/bin/env bash
# SPDX-License-Identifier: GPL-3.0-or-later
set -x
# shellcheck source=packaging/makeself/functions.sh
. "$(dirname "${0}")/../functions.sh" "${@}" || exit 1
@ -13,6 +15,7 @@ run cd "${NETDATA_SOURCE_PATH}" || exit 1
# find the netdata version
VERSION="$("${NETDATA_INSTALL_PARENT}/netdata/bin/netdata" -v | cut -f 2 -d ' ')"
[ -z "${VERSION}" ] && VERSION="$(cat "${NETDATA_SOURCE_PATH}/packaging/version")"
if [ "${VERSION}" == "" ]; then
echo >&2 "Cannot find version number. Create makeself executable from source code with git tree structure."

View file

@ -1,6 +1,7 @@
#!/bin/bash
# SPDX-License-Identifier: GPL-3.0-or-later
set -x
set -e
LC_ALL=C
@ -13,15 +14,24 @@ umask 002
export NETDATA_INSTALL_PATH="${1-/opt/netdata}"
# our source directory
NETDATA_MAKESELF_PATH="$(dirname "${0}")"
NETDATA_MAKESELF_PATH="$(
self=${0}
while [ -L "${self}" ]
do
cd "${self%/*}" || exit 1
self=$(readlink "${self}")
done
cd "${self%/*}" || exit 1
pwd -P
)"
export NETDATA_MAKESELF_PATH
if [ "${NETDATA_MAKESELF_PATH:0:1}" != "/" ]; then
NETDATA_MAKESELF_PATH="$(pwd)/${NETDATA_MAKESELF_PATH}"
export NETDATA_MAKESELF_PATH
fi
# netdata source directory
export NETDATA_SOURCE_PATH="${NETDATA_MAKESELF_PATH}/../.."
NETDATA_SOURCE_PATH="$(
cd "${NETDATA_MAKESELF_PATH}/../.." || exit 1
pwd -P
)"
export NETDATA_SOURCE_PATH
# make sure ${NULL} is empty
export NULL=