build-static.sh 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. #!/usr/bin/env bash
  2. # SPDX-License-Identifier: GPL-3.0-or-later
  3. # shellcheck source=./packaging/installer/functions.sh
  4. . "$(dirname "$0")"/../installer/functions.sh || exit 1
  5. BUILDARCH="${1}"
  6. set -e
  7. platform="$("$(dirname "${0}")/uname2platform.sh" "${BUILDARCH}")"
  8. if [ -z "${platform}" ]; then
  9. exit 1
  10. fi
  11. if command -v docker > /dev/null 2>&1; then
  12. docker="docker"
  13. elif command -v podman > /dev/null 2>&1; then
  14. docker="podman"
  15. else
  16. echo "Could not find a usable OCI runtime, need either Docker or Podman."
  17. exit 1
  18. fi
  19. DOCKER_IMAGE_NAME="netdata/static-builder"
  20. if [ "${BUILDARCH}" != "$(uname -m)" ] && [ "$(uname -m)" = 'x86_64' ] && [ -z "${SKIP_EMULATION}" ]; then
  21. ${docker} run --rm --privileged multiarch/qemu-user-static --reset -p yes || exit 1
  22. fi
  23. if ${docker} inspect "${DOCKER_IMAGE_NAME}" > /dev/null 2>&1; then
  24. if ${docker} image inspect "${DOCKER_IMAGE_NAME}" | grep -q 'Variant'; then
  25. img_platform="$(${docker} image inspect "${DOCKER_IMAGE_NAME}" --format '{{.Os}}/{{.Architecture}}/{{.Variant}}')"
  26. else
  27. img_platform="$(${docker} image inspect "${DOCKER_IMAGE_NAME}" --format '{{.Os}}/{{.Architecture}}')"
  28. fi
  29. if [ "${img_platform}" != "${platform}" ]; then
  30. ${docker} image rm "${DOCKER_IMAGE_NAME}" || exit 1
  31. fi
  32. fi
  33. if ! ${docker} inspect "${DOCKER_IMAGE_NAME}" > /dev/null 2>&1; then
  34. ${docker} pull --platform "${platform}" "${DOCKER_IMAGE_NAME}"
  35. fi
  36. # Run the build script inside the container
  37. if [ -t 1 ]; then
  38. run ${docker} run --rm -e BUILDARCH="${BUILDARCH}" -a stdin -a stdout -a stderr -i -t -v "$(pwd)":/netdata:rw \
  39. "${DOCKER_IMAGE_NAME}" \
  40. /bin/sh /netdata/packaging/makeself/build.sh "${@}"
  41. else
  42. run ${docker} run --rm -e BUILDARCH="${BUILDARCH}" -v "$(pwd)":/netdata:rw \
  43. -e GITHUB_ACTIONS="${GITHUB_ACTIONS}" "${DOCKER_IMAGE_NAME}" \
  44. /bin/sh /netdata/packaging/makeself/build.sh "${@}"
  45. fi