diff --git a/Dockerfile b/Dockerfile index 97ef11e3..ca5716b6 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,8 +1,11 @@ # use a builder image for building cloudflare +ARG TARGET_GOOS +ARG TARGET_GOARCH FROM golang:1.13.3 as builder -ENV GO111MODULE=on -ENV CGO_ENABLED=0 -ENV GOOS=linux +ENV GO111MODULE=on \ + CGO_ENABLED=0 \ + TARGET_GOOS=${TARGET_GOOS} \ + TARGET_GOARCH=${TARGET_GOARCH} WORKDIR /go/src/github.com/cloudflare/cloudflared/ @@ -12,8 +15,6 @@ COPY . . # compile cloudflared RUN make cloudflared -# --- - # use a distroless base image with glibc FROM gcr.io/distroless/base-debian10:nonroot diff --git a/Makefile b/Makefile index 7aef9225..12ec9209 100644 --- a/Makefile +++ b/Makefile @@ -7,17 +7,35 @@ PACKAGE_DIR := $(CURDIR)/packaging INSTALL_BINDIR := usr/local/bin EQUINOX_FLAGS = --version="$(VERSION)" \ - --platforms="$(EQUINOX_BUILD_PLATFORMS)" \ - --app="$(EQUINOX_APP_ID)" \ - --token="$(EQUINOX_TOKEN)" \ - --channel="$(EQUINOX_CHANNEL)" + --platforms="$(EQUINOX_BUILD_PLATFORMS)" \ + --app="$(EQUINOX_APP_ID)" \ + --token="$(EQUINOX_TOKEN)" \ + --channel="$(EQUINOX_CHANNEL)" ifeq ($(EQUINOX_IS_DRAFT), true) EQUINOX_FLAGS := --draft $(EQUINOX_FLAGS) endif -ifeq ($(GOARCH),) - GOARCH := amd64 +LOCAL_ARCH ?= $(shell uname -m) +ifeq ($(LOCAL_ARCH),x86_64) + TARGET_ARCH ?= amd64 +else ifeq ($(shell echo $(LOCAL_ARCH) | head -c 5),armv8) + TARGET_ARCH ?= arm64 +else ifeq ($(LOCAL_ARCH),aarch64) + TARGET_ARCH ?= arm64 +else ifeq ($(shell echo $(LOCAL_ARCH) | head -c 4),armv) + TARGET_ARCH ?= arm +else + $(error This system's architecture $(LOCAL_ARCH) isn't supported) +endif + +LOCAL_OS ?= $(shell go env GOOS) +ifeq ($(LOCAL_OS),linux) + TARGET_OS ?= linux +else ifeq ($(LOCAL_OS),darwin) + TARGET_OS ?= darwin +else + $(error This system's OS $(LOCAL_OS) isn't supported) endif .PHONY: all @@ -29,11 +47,11 @@ clean: .PHONY: cloudflared cloudflared: tunnel-deps - go build -v -mod=vendor $(VERSION_FLAGS) $(IMPORT_PATH)/cmd/cloudflared + GOOS=$(TARGET_OS) GOARCH=$(TARGET_ARCH) go build -v -mod=vendor $(VERSION_FLAGS) $(IMPORT_PATH)/cmd/cloudflared .PHONY: container container: - docker build -t cloudflare/cloudflared:"$(VERSION)" . + docker build --build-arg=TARGET_ARCH=$(TARGET_ARCH) --build-arg=TARGET_OS=$(TARGET_OS) -t cloudflare/cloudflared-$(TARGET_OS)-$(TARGET_ARCH):"$(VERSION)" . .PHONY: test test: vet @@ -48,7 +66,7 @@ cloudflared-deb: cloudflared mkdir -p $(PACKAGE_DIR) cp cloudflared $(PACKAGE_DIR)/cloudflared fakeroot fpm -C $(PACKAGE_DIR) -s dir -t deb --deb-compression bzip2 \ - -a $(GOARCH) -v $(VERSION) -n cloudflared cloudflared=/usr/local/bin/ + -a $(TARGET_ARCH) -v $(VERSION) -n cloudflared cloudflared=/usr/local/bin/ .PHONY: cloudflared-darwin-amd64.tgz cloudflared-darwin-amd64.tgz: cloudflared diff --git a/cmd/cloudflared/windows_service.go b/cmd/cloudflared/windows_service.go index 1cc34990..a78b4fdb 100644 --- a/cmd/cloudflared/windows_service.go +++ b/cmd/cloudflared/windows_service.go @@ -16,7 +16,6 @@ import ( "github.com/pkg/errors" cli "gopkg.in/urfave/cli.v2" - "github.com/pkg/errors" "golang.org/x/sys/windows" "golang.org/x/sys/windows/svc" "golang.org/x/sys/windows/svc/eventlog"