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. (#19224)
* 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:
parent
decc5632e2
commit
50c35cb375
11 changed files with 92 additions and 35 deletions
25
.github/scripts/build-static.sh
vendored
25
.github/scripts/build-static.sh
vendored
|
@ -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"
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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 /
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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"
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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"
|
||||
|
|
|
@ -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"
|
||||
|
|
|
@ -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."
|
||||
|
|
|
@ -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=
|
||||
|
|
Loading…
Reference in a new issue