diff --git a/Dockerfile b/Dockerfile index f41b6335..42b4c503 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,8 +1,23 @@ -FROM alpine:3.7 +FROM golang:latest as builder + +WORKDIR /go/src/github.com/micromdm/micromdm/ + +ENV CGO_ENABLED=0 \ + GOARCH=amd64 \ + GOOS=linux + +COPY . . + +RUN make deps +RUN make + + +FROM alpine:latest RUN apk --update add ca-certificates -COPY ./build/linux/micromdm /usr/bin +COPY --from=builder /go/src/github.com/micromdm/micromdm/build/linux/micromdm /usr/bin/ +COPY --from=builder /go/src/github.com/micromdm/micromdm/build/linux/mdmctl /usr/bin/ EXPOSE 80 443 VOLUME ["/var/db/micromdm"] diff --git a/Makefile b/Makefile index 1728905c..5e367dd1 100644 --- a/Makefile +++ b/Makefile @@ -17,7 +17,7 @@ REVSHORT = $(shell git rev-parse --short HEAD) USER = $(shell whoami) GOVERSION = $(shell go version | awk '{print $$3}') NOW = $(shell date -u +"%Y-%m-%dT%H:%M:%SZ") -SHELL = /bin/bash +SHELL = /bin/sh ifndef ($(DOCKER_IMAGE_NAME)) DOCKER_IMAGE_NAME = micromdm/micromdm @@ -27,7 +27,7 @@ DOCKER_IMAGE_TAG = $(shell echo ${VERSION} | sed 's/^v//') ifneq ($(OS), Windows_NT) CURRENT_PLATFORM = linux ifeq ($(shell uname), Darwin) - SHELL := /bin/bash + SHELL := /bin/sh CURRENT_PLATFORM = darwin endif else @@ -48,7 +48,7 @@ BUILD_VERSION = "\ -X github.com/micromdm/go4/version.goVersion=${GOVERSION} \ -X github.com/micromdm/micromdm/dep.version=${VERSION}" -gomodcheck: +gomodcheck: @go help mod > /dev/null || (@echo micromdm requires Go version 1.11 or higher && exit 1) deps: gomodcheck diff --git a/cmd/micromdm/serve.go b/cmd/micromdm/serve.go index e2c2f904..10671f54 100644 --- a/cmd/micromdm/serve.go +++ b/cmd/micromdm/serve.go @@ -69,26 +69,33 @@ const homePage = ` func serve(args []string) error { flagset := flag.NewFlagSet("serve", flag.ExitOnError) var ( - flConfigPath = flagset.String("config-path", "/var/db/micromdm", "path to configuration directory") - flServerURL = flagset.String("server-url", "", "public HTTPS url of your server") + flConfigPath = flagset.String("config-path", env.String("MICROMDM_CONFIG_PATH", "/var/db/micromdm"), "Path to configuration directory") + flServerURL = flagset.String("server-url", env.String("MICROMDM_SERVER_URL", ""), "Public HTTPS url of your server") flAPIKey = flagset.String("api-key", env.String("MICROMDM_API_KEY", ""), "API Token for mdmctl command") - flTLS = flagset.Bool("tls", true, "use https") - flTLSCert = flagset.String("tls-cert", "", "path to TLS certificate") - flTLSKey = flagset.String("tls-key", "", "path to TLS private key") - flHTTPAddr = flagset.String("http-addr", ":https", "http(s) listen address of mdm server. defaults to :8080 if tls is false") - flHTTPDebug = flagset.Bool("http-debug", false, "enable debug for http(dumps full request)") - flRepoPath = flagset.String("filerepo", "", "path to http file repo") - flDepSim = flagset.String("depsim", "", "use depsim URL") - flExamples = flagset.Bool("examples", false, "prints some example usage") - flCommandWebhookURL = flagset.String("command-webhook-url", "", "URL to send command responses.") - flHomePage = flagset.Bool("homepage", true, "hosts a simple built-in webpage at the / address") - flSCEPClientValidity = flagset.Int("scep-client-validity", 365, "sets the scep certificate validity in days") + flTLS = flagset.Bool("tls", env.Bool("MICROMDM_TLS", true), "Use https") + flTLSCert = flagset.String("tls-cert", env.String("MICROMDM_TLS_CERT", ""), "Path to TLS certificate") + flTLSKey = flagset.String("tls-key", env.String("MICROMDM_TLS_KEY", ""), "Path to TLS private key") + flHTTPAddr = flagset.String("http-addr", env.String("MICROMDM_HTTP_ADDR", ":https"), "http(s) listen address of mdm server. defaults to :8080 if tls is false") + flHTTPDebug = flagset.Bool("http-debug", env.Bool("MICROMDM_HTTP_DEBUG", false), "Enable debug for http(dumps full request)") + flRepoPath = flagset.String("filerepo", env.String("MICROMDM_FILE_REPO", ""), "Path to http file repo") + flDepSim = flagset.String("depsim", env.String("MICROMDM_DEPSIM_URL", ""), "Use depsim URL") + flExamples = flagset.Bool("examples", false, "Prints some example usage") + flCommandWebhookURL = flagset.String("command-webhook-url", env.String("MICROMDM_WEBHOOK_URL", ""), "URL to send command responses") + flHomePage = flagset.Bool("homepage", env.Bool("MICROMDM_HTTP_HOMEPAGE", true), "Hosts a simple built-in webpage at the / address") + flSCEPClientValidity = flagset.Int("scep-client-validity", env.Int("MICROMDM_SCEP_CLIENT_VALIDITY", 365), "Sets the scep certificate validity in days") + flPrintArgs = flagset.Bool("print-flags", false, "Print all flags and their values") ) flagset.Usage = usageFor(flagset, "micromdm serve [flags]") if err := flagset.Parse(args); err != nil { return err } + if *flPrintArgs { + flagset.VisitAll(func(fl *flag.Flag) { + fmt.Printf("%v: %v\n", fl.Usage, fl.Value) + }) + } + if *flExamples { printExamples() return nil diff --git a/go.mod b/go.mod index 7c01f6fb..f72a016a 100644 --- a/go.mod +++ b/go.mod @@ -22,7 +22,7 @@ require ( github.com/lann/ps v0.0.0-20150810152359-62de8c46ede0 // indirect github.com/lib/pq v1.0.0 github.com/mattn/go-sqlite3 v1.9.0 // indirect - github.com/micromdm/go4 v0.0.0-20171021081444-deded5397014 + github.com/micromdm/go4 v0.0.0-20190530145745-54e7af012bbc github.com/micromdm/scep v1.0.1-0.20181014170139-9be65e185499 github.com/pkg/errors v0.8.0 github.com/pmezard/go-difflib v1.0.0 // indirect diff --git a/go.sum b/go.sum index 61a132e4..30b35380 100644 --- a/go.sum +++ b/go.sum @@ -30,6 +30,7 @@ github.com/gorilla/mux v1.6.2 h1:Pgr17XVTNXAk3q/r4CpKzC5xBM/qW1uVLV+IhRZpIIk= github.com/gorilla/mux v1.6.2/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs= github.com/groob/finalizer v0.0.0-20170707115354-4c2ed49aabda h1:5ikpG9mYCMFiZX0nkxoV6aU2IpCHPdws3gCNgdZeEV0= github.com/groob/finalizer v0.0.0-20170707115354-4c2ed49aabda/go.mod h1:MyndkAZd5rUMdNogn35MWXBX1UiBigrU8eTj8DoAC2c= +github.com/groob/pkcs7 v0.0.0-20180824154052-36585635cb64 h1:1ALD84dEnUxPKZENhUAeQ0tuJ+s3PuL85pV95B0Ekfk= github.com/groob/pkcs7 v0.0.0-20180824154052-36585635cb64/go.mod h1:mEOMQ8C7oeXY3LnE2jy4UkLAqrW9rrpwiP5U4hVV+MY= github.com/groob/plist v0.0.0-20180203051248-dd56909aee38 h1:afbUddvIjPRC7XHHgeSTRfzZtIxEsSl4VCxumLBGDJU= github.com/groob/plist v0.0.0-20180203051248-dd56909aee38/go.mod h1:qg2Nek0ND/hIr+nY8H1oVqEW2cLzVVNaAQ0QexOyjyc= @@ -52,8 +53,8 @@ github.com/lib/pq v1.0.0 h1:X5PMW56eZitiTeO7tKzZxFCSpbFZJtkMMooicw2us9A= github.com/lib/pq v1.0.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= github.com/mattn/go-sqlite3 v1.9.0 h1:pDRiWfl+++eC2FEFRy6jXmQlvp4Yh3z1MJKg4UeYM/4= github.com/mattn/go-sqlite3 v1.9.0/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc= -github.com/micromdm/go4 v0.0.0-20171021081444-deded5397014 h1:8Za9WLoGTSU96EAWFziRCiFmQuBAC6xj9/dKiN45LHw= -github.com/micromdm/go4 v0.0.0-20171021081444-deded5397014/go.mod h1:8EzTEgA3q2ZdZotWXs1bWnFCXuaFHU0+jDNZbHlwduM= +github.com/micromdm/go4 v0.0.0-20190530145745-54e7af012bbc h1:lpsBe6vFai/EZTbqK48gnuTjqzjHBcovCughxrNQO4k= +github.com/micromdm/go4 v0.0.0-20190530145745-54e7af012bbc/go.mod h1:8EzTEgA3q2ZdZotWXs1bWnFCXuaFHU0+jDNZbHlwduM= github.com/micromdm/scep v1.0.1-0.20181014170139-9be65e185499 h1:tAPbBGVDrfo7Tv4rvmzVQPfbQTrR/XSLbl4JuGfJbPI= github.com/micromdm/scep v1.0.1-0.20181014170139-9be65e185499/go.mod h1:a4hGfYA9e51888COzEduLGsstH9NPxJPndn/Ke5/Tw8= github.com/pkg/errors v0.8.0 h1:WdK/asTD0HN+q6hsWO3/vpuAkAr+tw6aNJNDFFf0+qw=