feat: Always disable cgo support (static builds) (#12600)

This commit is contained in:
Joshua Powers 2023-02-03 01:52:59 -07:00 committed by GitHub
parent bf108da447
commit d137d97ed0
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 5 additions and 124 deletions

View File

@ -368,16 +368,6 @@ jobs:
- package-build:
type: mips
nightly: << parameters.nightly >>
static-package:
parameters:
nightly:
type: boolean
default: false
executor: telegraf-ci
steps:
- package-build:
type: static
nightly: << parameters.nightly >>
armhf-package:
parameters:
nightly:
@ -633,15 +623,6 @@ workflows:
- master
tags:
only: /.*/
- 'static-package':
requires:
- 'test-go-linux'
filters:
branches:
ignore:
- master
tags:
only: /.*/
- 'mipsel-package':
requires:
- 'test-go-linux'
@ -687,7 +668,6 @@ workflows:
- 'darwin-amd64-package'
- 'darwin-arm64-package'
- 'windows-package'
- 'static-package'
- 'arm64-package'
- 'armhf-package'
filters:
@ -723,7 +703,6 @@ workflows:
- 'amd64-package'
- 'mipsel-package'
- 'mips-package'
- 'static-package'
- 'arm64-package'
- 'armhf-package'
- 'riscv64-package'
@ -799,11 +778,6 @@ workflows:
nightly: true
requires:
- 'test-go-linux'
- 'static-package':
name: 'static-package-nightly'
nightly: true
requires:
- 'test-go-linux'
- 'mipsel-package':
name: 'mipsel-package-nightly'
nightly: true
@ -835,7 +809,6 @@ workflows:
- 'ppc64le-package-nightly'
- 'riscv64-package-nightly'
- 's390x-package-nightly'
- 'static-package-nightly'
- 'windows-package-nightly'
- docker-nightly:
requires:

View File

@ -7,7 +7,6 @@ tag := $(shell git describe --exact-match --tags 2>/dev/null)
branch := $(shell git rev-parse --abbrev-ref HEAD)
commit := $(shell git rev-parse --short=8 HEAD)
glibc_version := 2.17
ifdef NIGHTLY
version := $(next_version)
@ -123,7 +122,7 @@ docs: build_tools embed_readme_inputs embed_readme_outputs embed_readme_processo
.PHONY: build
build:
go build -tags "$(BUILDTAGS)" -ldflags "$(LDFLAGS)" ./cmd/telegraf
CGO_ENABLED=0 go build -ldflags "$(LDFLAGS)" ./cmd/telegraf
.PHONY: telegraf
telegraf: build
@ -257,7 +256,6 @@ install: $(buildbin)
@if [ $(GOOS) != "windows" ]; then cp -fv etc/telegraf.conf $(DESTDIR)$(sysconfdir)/telegraf/telegraf.conf$(conf_suffix); fi
@if [ $(GOOS) != "windows" ]; then cp -fv etc/logrotate.d/telegraf $(DESTDIR)$(sysconfdir)/logrotate.d; fi
@if [ $(GOOS) = "windows" ]; then cp -fv etc/telegraf_windows.conf $(DESTDIR)/telegraf.conf; fi
@if [ $(GOOS) = "linux" ]; then scripts/check-dynamic-glibc-versions.sh $(buildbin) $(glibc_version); fi
@if [ $(GOOS) = "linux" ]; then mkdir -pv $(DESTDIR)$(prefix)/lib/telegraf/scripts; fi
@if [ $(GOOS) = "linux" ]; then cp -fv scripts/telegraf.service $(DESTDIR)$(prefix)/lib/telegraf/scripts; fi
@if [ $(GOOS) = "linux" ]; then cp -fv scripts/init.sh $(DESTDIR)$(prefix)/lib/telegraf/scripts; fi
@ -268,7 +266,7 @@ install: $(buildbin)
$(buildbin):
echo $(GOOS)
@mkdir -pv $(dir $@)
go build -o $(dir $@) -ldflags "$(LDFLAGS)" ./cmd/telegraf
CGO_ENABLED=0 go build -o $(dir $@) -ldflags "$(LDFLAGS)" ./cmd/telegraf
# Define packages Telegraf supports, organized by architecture with a rule to echo the list to limit include_packages
# e.g. make package include_packages="$(make amd64)"
@ -288,10 +286,6 @@ amd64 += freebsd_amd64.tar.gz linux_amd64.tar.gz amd64.deb x86_64.rpm
.PHONY: amd64
amd64:
@ echo $(amd64)
static += static_linux_amd64.tar.gz
.PHONY: static
static:
@ echo $(static)
armel += linux_armel.tar.gz armel.rpm armel.deb
.PHONY: armel
armel:
@ -330,7 +324,7 @@ darwin-arm64 += darwin_arm64.tar.gz
darwin-arm64:
@ echo $(darwin-arm64)
include_packages := $(mips) $(mipsel) $(arm64) $(amd64) $(static) $(armel) $(armhf) $(riscv64) $(s390x) $(ppc64le) $(i386) $(windows) $(darwin-amd64) $(darwin-arm64)
include_packages := $(mips) $(mipsel) $(arm64) $(amd64) $(armel) $(armhf) $(riscv64) $(s390x) $(ppc64le) $(i386) $(windows) $(darwin-amd64) $(darwin-arm64)
.PHONY: package
package: docs $(include_packages)
@ -399,9 +393,6 @@ $(include_packages):
amd64.deb x86_64.rpm linux_amd64.tar.gz: export GOOS := linux
amd64.deb x86_64.rpm linux_amd64.tar.gz: export GOARCH := amd64
static_linux_amd64.tar.gz: export cgo := -nocgo
static_linux_amd64.tar.gz: export CGO_ENABLED := 0
i386.deb i386.rpm linux_i386.tar.gz: export GOOS := linux
i386.deb i386.rpm linux_i386.tar.gz: export GOARCH := 386
@ -479,6 +470,6 @@ windows_i386.zip windows_amd64.zip windows_arm64.zip: export EXEEXT := .exe
%.zip: export pkg := zip
%.zip: export prefix := /
%.deb %.rpm %.tar.gz %.zip: export DESTDIR = build/$(GOOS)-$(GOARCH)$(GOARM)$(cgo)-$(pkg)/telegraf-$(version)
%.deb %.rpm %.tar.gz %.zip: export buildbin = build/$(GOOS)-$(GOARCH)$(GOARM)$(cgo)/telegraf$(EXEEXT)
%.deb %.rpm %.tar.gz %.zip: export DESTDIR = build/$(GOOS)-$(GOARCH)$(GOARM)-$(pkg)/telegraf-$(version)
%.deb %.rpm %.tar.gz %.zip: export buildbin = build/$(GOOS)-$(GOARCH)$(GOARM)/telegraf$(EXEEXT)
%.deb %.rpm %.tar.gz %.zip: export LDFLAGS = -w -s

View File

@ -20,7 +20,6 @@ These builds are generated from the master branch at midnight UTC:
| | | [linux_ppc64le.tar.gz](https://dl.influxdata.com/telegraf/nightlies/telegraf-nightly_linux_ppc64le.tar.gz) | |
| | | [linux_riscv64.tar.gz](https://dl.influxdata.com/telegraf/nightlies/telegraf-nightly_linux_riscv64.tar.gz) | |
| | | [linux_s390x.tar.gz](https://dl.influxdata.com/telegraf/nightlies/telegraf-nightly_linux_s390x.tar.gz) | |
| | | [static_linux_amd64.tar.gz](https://dl.influxdata.com/telegraf/nightlies/telegraf-nightly_static_linux_amd64.tar.gz) | |
Nightly docker images are available on [quay.io](https://quay.io/repository/influxdb/telegraf-nightly?tab=tags):

View File

@ -1,82 +0,0 @@
#!/bin/bash
set -euo pipefail
IFS=$'\n\t'
usage () {
echo "Check that no dynamic symbols provided by glibc are newer than a given version"
echo "Usage:"
echo " $0 program version"
echo "where program is the elf binary to check and version is a dotted version string like 2.3.4"
exit 1
}
#validate input and display help
[[ $# = 2 ]] || usage
prog=$1
max=$2
#make sure dependencies are installed
have_deps=true
for i in objdump grep sort uniq sed; do
if ! command -v "$i" > /dev/null; then
echo "$i not in path"
have_deps=false
fi
done
if [[ $have_deps = false ]]; then
exit 1
fi
#compare dotted versions
#see https://stackoverflow.com/questions/4023830/how-to-compare-two-strings-in-dot-separated-version-format-in-bash
vercomp () {
if [[ $1 == "$2" ]]
then
return 0
fi
local IFS=.
local i ver1=("$1") ver2=("$2")
# fill empty fields in ver1 with zeros
for ((i=${#ver1[@]}; i<${#ver2[@]}; i++))
do
ver1[i]=0
done
for ((i=0; i<${#ver1[@]}; i++))
do
if [[ -z ${ver2[i]} ]]
then
# fill empty fields in ver2 with zeros
ver2[i]=0
fi
if ((10#${ver1[i]} > 10#${ver2[i]}))
then
return 1
fi
if ((10#${ver1[i]} < 10#${ver2[i]}))
then
return 2
fi
done
return 0
}
if ! objdump -p "$prog" | grep -q NEEDED; then
echo "$prog doesn't have dynamic library dependencies"
exit 0
fi
objdump -T "$prog" | # get the dynamic symbol table
sed -n "s/.* GLIBC_\([0-9.]\+\).*/\1/p" | # find the entries for glibc and grab the version
sort | uniq | # remove duplicates
while read -r v; do
set +e
vercomp "$v" "$max" # fail if any version is newer than our max
comp=$?
set -e
if [[ $comp -eq 1 ]]; then
echo "$v is newer than $max"
exit 1
fi
done
exit 0