Docker: Build and use musl-based binaries in alpine images to resolve glibc incompatibility issues (#19798)
* build: Install musl cross compilers as part of build Docker image * build: Build also musl packages in scripts/build/build.sh * scripts/build/build-all.sh: Build musl Linux targets * build: Upgrade build-container to 1.2.11 * build.go: De-duplicate code * build: Base Docker images on musl binaries
This commit is contained in:
+22
-10
@@ -1,4 +1,7 @@
|
||||
#!/bin/bash
|
||||
|
||||
# shellcheck disable=SC2086
|
||||
|
||||
#
|
||||
# This script is executed from within the container.
|
||||
#
|
||||
@@ -7,8 +10,11 @@ set -e
|
||||
##########
|
||||
CCARMV6=/opt/rpi-tools/arm-bcm2708/arm-linux-gnueabihf/bin/arm-linux-gnueabihf-gcc
|
||||
CCARMV7=arm-linux-gnueabihf-gcc
|
||||
CCARMV7_MUSL=/tmp/arm-linux-musleabihf-cross/bin/arm-linux-musleabihf-gcc
|
||||
CCARM64=aarch64-linux-gnu-gcc
|
||||
CCARM64_MUSL=/tmp/aarch64-linux-musl-cross/bin/aarch64-linux-musl-gcc
|
||||
CCX64=/tmp/x86_64-centos6-linux-gnu/bin/x86_64-centos6-linux-gnu-gcc
|
||||
CCX64_MUSL=/tmp/x86_64-linux-musl-cross/bin/x86_64-linux-musl-gcc
|
||||
|
||||
BUILD_FAST=0
|
||||
BUILD_BACKEND=1
|
||||
@@ -69,7 +75,8 @@ function build_backend_linux_amd64() {
|
||||
if [ ! -d "dist" ]; then
|
||||
mkdir dist
|
||||
fi
|
||||
CC=${CCX64} go run build.go "${OPT}" build
|
||||
CC=${CCX64} go run build.go ${OPT} build
|
||||
CC=${CCX64_MUSL} go run build.go -libc musl ${OPT} build
|
||||
}
|
||||
|
||||
function build_backend() {
|
||||
@@ -77,9 +84,11 @@ function build_backend() {
|
||||
mkdir dist
|
||||
fi
|
||||
|
||||
go run build.go -goarch armv6 -cc ${CCARMV6} "${OPT}" build
|
||||
go run build.go -goarch armv7 -cc ${CCARMV7} "${OPT}" build
|
||||
go run build.go -goarch arm64 -cc ${CCARM64} "${OPT}" build
|
||||
go run build.go -goarch armv6 -cc ${CCARMV6} ${OPT} build
|
||||
go run build.go -goarch armv7 -cc ${CCARMV7} ${OPT} build
|
||||
go run build.go -goarch arm64 -cc ${CCARM64} ${OPT} build
|
||||
go run build.go -goarch armv7 -libc musl -cc ${CCARMV7_MUSL} ${OPT} build
|
||||
go run build.go -goarch arm64 -libc musl -cc ${CCARM64_MUSL} ${OPT} build
|
||||
build_backend_linux_amd64
|
||||
}
|
||||
|
||||
@@ -89,22 +98,25 @@ function build_frontend() {
|
||||
fi
|
||||
yarn install --pure-lockfile --no-progress
|
||||
echo "Building frontend"
|
||||
go run build.go "${OPT}" build-frontend
|
||||
go run build.go ${OPT} build-frontend
|
||||
echo "FRONTEND: finished"
|
||||
}
|
||||
|
||||
function package_linux_amd64() {
|
||||
echo "Packaging Linux AMD64"
|
||||
go run build.go -goos linux -pkg-arch amd64 "${OPT}" package-only
|
||||
go run build.go -goos linux -pkg-arch amd64 ${OPT} package-only
|
||||
go run build.go -goos linux -pkg-arch amd64 ${OPT} -libc musl -skipRpm -skipDeb package-only
|
||||
go run build.go latest
|
||||
echo "PACKAGE LINUX AMD64: finished"
|
||||
}
|
||||
|
||||
function package_all() {
|
||||
echo "Packaging ALL"
|
||||
go run build.go -goos linux -pkg-arch armv6 "${OPT}" -skipRpm package-only
|
||||
go run build.go -goos linux -pkg-arch armv7 "${OPT}" package-only
|
||||
go run build.go -goos linux -pkg-arch arm64 "${OPT}" package-only
|
||||
go run build.go -goos linux -pkg-arch armv6 ${OPT} -skipRpm package-only
|
||||
go run build.go -goos linux -pkg-arch armv7 ${OPT} package-only
|
||||
go run build.go -goos linux -pkg-arch arm64 ${OPT} package-only
|
||||
go run build.go -goos linux -pkg-arch armv7 -libc musl -skipRpm -skipDeb ${OPT} package-only
|
||||
go run build.go -goos linux -pkg-arch arm64 -libc musl -skipRpm -skipDeb ${OPT} package-only
|
||||
package_linux_amd64
|
||||
echo "PACKAGE ALL: finished"
|
||||
}
|
||||
@@ -115,7 +127,7 @@ function package_setup() {
|
||||
rm -rf dist
|
||||
fi
|
||||
mkdir dist
|
||||
go run build.go -gen-version "${OPT}" > dist/grafana.version
|
||||
go run build.go -gen-version ${OPT} > dist/grafana.version
|
||||
# Load ruby, needed for packing with fpm
|
||||
# shellcheck disable=SC1091
|
||||
source /etc/profile.d/rvm.sh
|
||||
|
||||
Reference in New Issue
Block a user