1next_version := $(shell cat build_version.txt) 2tag := $(shell git describe --exact-match --tags 2>git_describe_error.tmp; rm -f git_describe_error.tmp) 3branch := $(shell git rev-parse --abbrev-ref HEAD) 4commit := $(shell git rev-parse --short=8 HEAD) 5glibc_version := 2.17 6 7ifdef NIGHTLY 8 version := $(next_version) 9 rpm_version := nightly 10 rpm_iteration := 0 11 deb_version := nightly 12 deb_iteration := 0 13 tar_version := nightly 14else ifeq ($(tag),) 15 version := $(next_version) 16 rpm_version := $(version)~$(commit)-0 17 rpm_iteration := 0 18 deb_version := $(version)~$(commit)-0 19 deb_iteration := 0 20 tar_version := $(version)~$(commit) 21else ifneq ($(findstring -rc,$(tag)),) 22 version := $(word 1,$(subst -, ,$(tag))) 23 version := $(version:v%=%) 24 rc := $(word 2,$(subst -, ,$(tag))) 25 rpm_version := $(version)-0.$(rc) 26 rpm_iteration := 0.$(subst rc,,$(rc)) 27 deb_version := $(version)~$(rc)-1 28 deb_iteration := 0 29 tar_version := $(version)~$(rc) 30else 31 version := $(tag:v%=%) 32 rpm_version := $(version)-1 33 rpm_iteration := 1 34 deb_version := $(version)-1 35 deb_iteration := 1 36 tar_version := $(version) 37endif 38 39MAKEFLAGS += --no-print-directory 40GOOS ?= $(shell go env GOOS) 41GOARCH ?= $(shell go env GOARCH) 42HOSTGO := env -u GOOS -u GOARCH -u GOARM -- go 43 44LDFLAGS := $(LDFLAGS) -X main.commit=$(commit) -X main.branch=$(branch) -X main.goos=$(GOOS) -X main.goarch=$(GOARCH) 45ifneq ($(tag),) 46 LDFLAGS += -X main.version=$(version) 47endif 48 49# Go built-in race detector works only for 64 bits architectures. 50ifneq ($(GOARCH), 386) 51 race_detector := -race 52endif 53 54 55GOFILES ?= $(shell git ls-files '*.go') 56GOFMT ?= $(shell gofmt -l -s $(filter-out plugins/parsers/influx/machine.go, $(GOFILES))) 57 58prefix ?= /usr/local 59bindir ?= $(prefix)/bin 60sysconfdir ?= $(prefix)/etc 61localstatedir ?= $(prefix)/var 62pkgdir ?= build/dist 63 64.PHONY: all 65all: 66 @$(MAKE) deps 67 @$(MAKE) telegraf 68 69.PHONY: help 70help: 71 @echo 'Targets:' 72 @echo ' all - download dependencies and compile telegraf binary' 73 @echo ' deps - download dependencies' 74 @echo ' telegraf - compile telegraf binary' 75 @echo ' test - run short unit tests' 76 @echo ' fmt - format source files' 77 @echo ' tidy - tidy go modules' 78 @echo ' check-deps - check docs/LICENSE_OF_DEPENDENCIES.md' 79 @echo ' clean - delete build artifacts' 80 @echo '' 81 @echo 'Package Targets:' 82 @$(foreach dist,$(dists),echo " $(dist)";) 83 84.PHONY: deps 85deps: 86 go mod download 87 88.PHONY: telegraf 89telegraf: 90 go build -ldflags "$(LDFLAGS)" ./cmd/telegraf 91 92# Used by dockerfile builds 93.PHONY: go-install 94go-install: 95 go install -mod=mod -ldflags "-w -s $(LDFLAGS)" ./cmd/telegraf 96 97.PHONY: test 98test: 99 go test -short $(race_detector) ./... 100 101.PHONY: fmt 102fmt: 103 @gofmt -s -w $(filter-out plugins/parsers/influx/machine.go, $(GOFILES)) 104 105.PHONY: fmtcheck 106fmtcheck: 107 @if [ ! -z "$(GOFMT)" ]; then \ 108 echo "[ERROR] gofmt has found errors in the following files:" ; \ 109 echo "$(GOFMT)" ; \ 110 echo "" ;\ 111 echo "Run make fmt to fix them." ; \ 112 exit 1 ;\ 113 fi 114 115.PHONY: test-windows 116test-windows: 117 go test -short $(race_detector) ./plugins/inputs/ping/... 118 go test -short $(race_detector) ./plugins/inputs/win_perf_counters/... 119 go test -short $(race_detector) ./plugins/inputs/win_services/... 120 go test -short $(race_detector) ./plugins/inputs/procstat/... 121 go test -short $(race_detector) ./plugins/inputs/ntpq/... 122 go test -short $(race_detector) ./plugins/processors/port_name/... 123 124.PHONY: vet 125vet: 126 @echo 'go vet $$(go list ./... | grep -v ./plugins/parsers/influx)' 127 @go vet $$(go list ./... | grep -v ./plugins/parsers/influx) ; if [ $$? -ne 0 ]; then \ 128 echo ""; \ 129 echo "go vet has found suspicious constructs. Please remediate any reported errors"; \ 130 echo "to fix them before submitting code for review."; \ 131 exit 1; \ 132 fi 133 134.PHONY: tidy 135tidy: 136 go mod verify 137 go mod tidy 138 @if ! git diff --quiet go.mod go.sum; then \ 139 echo "please run go mod tidy and check in changes"; \ 140 exit 1; \ 141 fi 142 143.PHONY: check 144check: fmtcheck vet 145 @$(MAKE) --no-print-directory tidy 146 147.PHONY: test-all 148test-all: fmtcheck vet 149 go test $(race_detector) ./... 150 151.PHONY: check-deps 152check-deps: 153 ./scripts/check-deps.sh 154 155.PHONY: clean 156clean: 157 rm -f telegraf 158 rm -f telegraf.exe 159 rm -rf build 160 161.PHONY: docker-image 162docker-image: 163 docker build -f scripts/buster.docker -t "telegraf:$(commit)" . 164 165plugins/parsers/influx/machine.go: plugins/parsers/influx/machine.go.rl 166 ragel -Z -G2 $^ -o $@ 167 168.PHONY: plugin-% 169plugin-%: 170 @echo "Starting dev environment for $${$(@)} input plugin..." 171 @docker-compose -f plugins/inputs/$${$(@)}/dev/docker-compose.yml up 172 173.PHONY: ci-1.15 174ci-1.15: 175 docker build -t quay.io/influxdb/telegraf-ci:1.15.2 - < scripts/ci-1.15.docker 176 docker push quay.io/influxdb/telegraf-ci:1.15.2 177 178.PHONY: ci-1.14 179ci-1.14: 180 docker build -t quay.io/influxdb/telegraf-ci:1.14.9 - < scripts/ci-1.14.docker 181 docker push quay.io/influxdb/telegraf-ci:1.14.9 182 183.PHONY: install 184install: $(buildbin) 185 @mkdir -pv $(DESTDIR)$(bindir) 186 @mkdir -pv $(DESTDIR)$(sysconfdir) 187 @mkdir -pv $(DESTDIR)$(localstatedir) 188 @if [ $(GOOS) != "windows" ]; then mkdir -pv $(DESTDIR)$(sysconfdir)/logrotate.d; fi 189 @if [ $(GOOS) != "windows" ]; then mkdir -pv $(DESTDIR)$(localstatedir)/log/telegraf; fi 190 @if [ $(GOOS) != "windows" ]; then mkdir -pv $(DESTDIR)$(sysconfdir)/telegraf/telegraf.d; fi 191 @cp -fv $(buildbin) $(DESTDIR)$(bindir) 192 @if [ $(GOOS) != "windows" ]; then cp -fv etc/telegraf.conf $(DESTDIR)$(sysconfdir)/telegraf/telegraf.conf$(conf_suffix); fi 193 @if [ $(GOOS) != "windows" ]; then cp -fv etc/logrotate.d/telegraf $(DESTDIR)$(sysconfdir)/logrotate.d; fi 194 @if [ $(GOOS) = "windows" ]; then cp -fv etc/telegraf_windows.conf $(DESTDIR)/telegraf.conf; fi 195 @if [ $(GOOS) = "linux" ]; then scripts/check-dynamic-glibc-versions.sh $(buildbin) $(glibc_version); fi 196 @if [ $(GOOS) = "linux" ]; then mkdir -pv $(DESTDIR)$(prefix)/lib/telegraf/scripts; fi 197 @if [ $(GOOS) = "linux" ]; then cp -fv scripts/telegraf.service $(DESTDIR)$(prefix)/lib/telegraf/scripts; fi 198 @if [ $(GOOS) = "linux" ]; then cp -fv scripts/init.sh $(DESTDIR)$(prefix)/lib/telegraf/scripts; fi 199 200# Telegraf build per platform. This improves package performance by sharing 201# the bin between deb/rpm/tar packages over building directly into the package 202# directory. 203$(buildbin): 204 @mkdir -pv $(dir $@) 205 go build -o $(dir $@) -ldflags "$(LDFLAGS)" ./cmd/telegraf 206 207debs := telegraf_$(deb_version)_amd64.deb 208debs += telegraf_$(deb_version)_arm64.deb 209debs += telegraf_$(deb_version)_armel.deb 210debs += telegraf_$(deb_version)_armhf.deb 211debs += telegraf_$(deb_version)_i386.deb 212debs += telegraf_$(deb_version)_mips.deb 213debs += telegraf_$(deb_version)_mipsel.deb 214debs += telegraf_$(deb_version)_s390x.deb 215 216rpms += telegraf-$(rpm_version).aarch64.rpm 217rpms += telegraf-$(rpm_version).armel.rpm 218rpms += telegraf-$(rpm_version).armv6hl.rpm 219rpms += telegraf-$(rpm_version).i386.rpm 220rpms += telegraf-$(rpm_version).s390x.rpm 221rpms += telegraf-$(rpm_version).x86_64.rpm 222 223tars += telegraf-$(tar_version)_darwin_amd64.tar.gz 224tars += telegraf-$(tar_version)_freebsd_amd64.tar.gz 225tars += telegraf-$(tar_version)_freebsd_i386.tar.gz 226tars += telegraf-$(tar_version)_linux_amd64.tar.gz 227tars += telegraf-$(tar_version)_linux_arm64.tar.gz 228tars += telegraf-$(tar_version)_linux_armel.tar.gz 229tars += telegraf-$(tar_version)_linux_armhf.tar.gz 230tars += telegraf-$(tar_version)_linux_i386.tar.gz 231tars += telegraf-$(tar_version)_linux_mips.tar.gz 232tars += telegraf-$(tar_version)_linux_mipsel.tar.gz 233tars += telegraf-$(tar_version)_linux_s390x.tar.gz 234tars += telegraf-$(tar_version)_static_linux_amd64.tar.gz 235 236zips += telegraf-$(tar_version)_windows_amd64.zip 237zips += telegraf-$(tar_version)_windows_i386.zip 238 239dists := $(debs) $(rpms) $(tars) $(zips) 240 241.PHONY: package 242package: $(dists) 243 244rpm_amd64 := amd64 245rpm_386 := i386 246rpm_s390x := s390x 247rpm_arm5 := armel 248rpm_arm6 := armv6hl 249rpm_arm647 := aarch64 250rpm_arch = $(rpm_$(GOARCH)$(GOARM)) 251 252.PHONY: $(rpms) 253$(rpms): 254 @$(MAKE) install 255 @mkdir -p $(pkgdir) 256 fpm --force \ 257 --log info \ 258 --architecture $(rpm_arch) \ 259 --input-type dir \ 260 --output-type rpm \ 261 --vendor InfluxData \ 262 --url https://github.com/influxdata/telegraf \ 263 --license MIT \ 264 --maintainer support@influxdb.com \ 265 --config-files /etc/telegraf/telegraf.conf \ 266 --config-files /etc/logrotate.d/telegraf \ 267 --after-install scripts/rpm/post-install.sh \ 268 --before-install scripts/rpm/pre-install.sh \ 269 --after-remove scripts/rpm/post-remove.sh \ 270 --description "Plugin-driven server agent for reporting metrics into InfluxDB." \ 271 --depends coreutils \ 272 --depends shadow-utils \ 273 --rpm-posttrans scripts/rpm/post-install.sh \ 274 --name telegraf \ 275 --version $(version) \ 276 --iteration $(rpm_iteration) \ 277 --chdir $(DESTDIR) \ 278 --package $(pkgdir)/$@ 279 280deb_amd64 := amd64 281deb_386 := i386 282deb_s390x := s390x 283deb_arm5 := armel 284deb_arm6 := armhf 285deb_arm647 := arm64 286deb_mips := mips 287deb_mipsle := mipsel 288deb_arch = $(deb_$(GOARCH)$(GOARM)) 289 290.PHONY: $(debs) 291$(debs): 292 @$(MAKE) install 293 @mkdir -pv $(pkgdir) 294 fpm --force \ 295 --log info \ 296 --architecture $(deb_arch) \ 297 --input-type dir \ 298 --output-type deb \ 299 --vendor InfluxData \ 300 --url https://github.com/influxdata/telegraf \ 301 --license MIT \ 302 --maintainer support@influxdb.com \ 303 --config-files /etc/telegraf/telegraf.conf.sample \ 304 --config-files /etc/logrotate.d/telegraf \ 305 --after-install scripts/deb/post-install.sh \ 306 --before-install scripts/deb/pre-install.sh \ 307 --after-remove scripts/deb/post-remove.sh \ 308 --before-remove scripts/deb/pre-remove.sh \ 309 --description "Plugin-driven server agent for reporting metrics into InfluxDB." \ 310 --name telegraf \ 311 --version $(version) \ 312 --iteration $(deb_iteration) \ 313 --chdir $(DESTDIR) \ 314 --package $(pkgdir)/$@ 315 316.PHONY: $(zips) 317$(zips): 318 @$(MAKE) install 319 @mkdir -p $(pkgdir) 320 (cd $(dir $(DESTDIR)) && zip -r - ./*) > $(pkgdir)/$@ 321 322.PHONY: $(tars) 323$(tars): 324 @$(MAKE) install 325 @mkdir -p $(pkgdir) 326 tar --owner 0 --group 0 -czvf $(pkgdir)/$@ -C $(dir $(DESTDIR)) . 327 328.PHONY: upload-nightly 329upload-nightly: 330 aws s3 sync $(pkgdir) s3://dl.influxdata.com/telegraf/nightlies/ \ 331 --exclude "*" \ 332 --include "*.tar.gz" \ 333 --include "*.deb" \ 334 --include "*.rpm" \ 335 --include "*.zip" \ 336 --acl public-read 337 338%amd64.deb %x86_64.rpm %linux_amd64.tar.gz: export GOOS := linux 339%amd64.deb %x86_64.rpm %linux_amd64.tar.gz: export GOARCH := amd64 340 341%static_linux_amd64.tar.gz: export cgo := -nocgo 342%static_linux_amd64.tar.gz: export CGO_ENABLED := 0 343 344%i386.deb %i386.rpm %linux_i386.tar.gz: export GOOS := linux 345%i386.deb %i386.rpm %linux_i386.tar.gz: export GOARCH := 386 346 347%armel.deb %armel.rpm %linux_armel.tar.gz: export GOOS := linux 348%armel.deb %armel.rpm %linux_armel.tar.gz: export GOARCH := arm 349%armel.deb %armel.rpm %linux_armel.tar.gz: export GOARM := 5 350 351%armhf.deb %armv6hl.rpm %linux_armhf.tar.gz: export GOOS := linux 352%armhf.deb %armv6hl.rpm %linux_armhf.tar.gz: export GOARCH := arm 353%armhf.deb %armv6hl.rpm %linux_armhf.tar.gz: export GOARM := 6 354 355%arm64.deb %aarch64.rpm %linux_arm64.tar.gz: export GOOS := linux 356%arm64.deb %aarch64.rpm %linux_arm64.tar.gz: export GOARCH := arm64 357%arm64.deb %aarch64.rpm %linux_arm64.tar.gz: export GOARM := 7 358 359%mips.deb %linux_mips.tar.gz: export GOOS := linux 360%mips.deb %linux_mips.tar.gz: export GOARCH := mips 361 362%mipsel.deb %linux_mipsel.tar.gz: export GOOS := linux 363%mipsel.deb %linux_mipsel.tar.gz: export GOARCH := mipsle 364 365%s390x.deb %s390x.rpm %linux_s390x.tar.gz: export GOOS := linux 366%s390x.deb %s390x.rpm %linux_s390x.tar.gz: export GOARCH := s390x 367 368%freebsd_amd64.tar.gz: export GOOS := freebsd 369%freebsd_amd64.tar.gz: export GOARCH := amd64 370 371%freebsd_i386.tar.gz: export GOOS := freebsd 372%freebsd_i386.tar.gz: export GOARCH := 386 373 374%windows_amd64.zip: export GOOS := windows 375%windows_amd64.zip: export GOARCH := amd64 376 377%darwin_amd64.tar.gz: export GOOS := darwin 378%darwin_amd64.tar.gz: export GOARCH := amd64 379 380%windows_i386.zip: export GOOS := windows 381%windows_i386.zip: export GOARCH := 386 382 383%windows_i386.zip %windows_amd64.zip: export prefix = 384%windows_i386.zip %windows_amd64.zip: export bindir = $(prefix) 385%windows_i386.zip %windows_amd64.zip: export sysconfdir = $(prefix) 386%windows_i386.zip %windows_amd64.zip: export localstatedir = $(prefix) 387%windows_i386.zip %windows_amd64.zip: export EXEEXT := .exe 388 389%.deb: export pkg := deb 390%.deb: export prefix := /usr 391%.deb: export conf_suffix := .sample 392%.deb: export sysconfdir := /etc 393%.deb: export localstatedir := /var 394%.rpm: export pkg := rpm 395%.rpm: export prefix := /usr 396%.rpm: export sysconfdir := /etc 397%.rpm: export localstatedir := /var 398%.tar.gz: export pkg := tar 399%.tar.gz: export prefix := /usr 400%.tar.gz: export sysconfdir := /etc 401%.tar.gz: export localstatedir := /var 402%.zip: export pkg := zip 403%.zip: export prefix := / 404 405%.deb %.rpm %.tar.gz %.zip: export DESTDIR = build/$(GOOS)-$(GOARCH)$(GOARM)$(cgo)-$(pkg)/telegraf-$(version) 406%.deb %.rpm %.tar.gz %.zip: export buildbin = build/$(GOOS)-$(GOARCH)$(GOARM)$(cgo)/telegraf$(EXEEXT) 407%.deb %.rpm %.tar.gz %.zip: export LDFLAGS = -w -s 408