From d137d97ed0226e19445d742c4b203af6f8e012c7 Mon Sep 17 00:00:00 2001 From: Joshua Powers Date: Fri, 3 Feb 2023 01:52:59 -0700 Subject: [PATCH] feat: Always disable cgo support (static builds) (#12600) --- .circleci/config.yml | 27 -------- Makefile | 19 ++---- docs/NIGHTLIES.md | 1 - scripts/check-dynamic-glibc-versions.sh | 82 ------------------------- 4 files changed, 5 insertions(+), 124 deletions(-) delete mode 100755 scripts/check-dynamic-glibc-versions.sh diff --git a/.circleci/config.yml b/.circleci/config.yml index d765795e5..a2ff5173a 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -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: diff --git a/Makefile b/Makefile index 7474aef1b..3443c0c68 100644 --- a/Makefile +++ b/Makefile @@ -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 diff --git a/docs/NIGHTLIES.md b/docs/NIGHTLIES.md index 3ad781841..e686fd470 100644 --- a/docs/NIGHTLIES.md +++ b/docs/NIGHTLIES.md @@ -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): diff --git a/scripts/check-dynamic-glibc-versions.sh b/scripts/check-dynamic-glibc-versions.sh deleted file mode 100755 index bf4ce98ae..000000000 --- a/scripts/check-dynamic-glibc-versions.sh +++ /dev/null @@ -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