diff --git a/.gitignore b/.gitignore index 6e17878..2e71f2e 100644 --- a/.gitignore +++ b/.gitignore @@ -9,3 +9,4 @@ bin/ dist/ images wstation +/d2vm diff --git a/Dockerfile b/Dockerfile index 2f8f39c..4119a84 100644 --- a/Dockerfile +++ b/Dockerfile @@ -25,7 +25,7 @@ COPY . . RUN make .build -FROM ubuntu +FROM ubuntu:20.04 RUN apt-get update && \ DEBIAN_FRONTEND=noninteractive apt-get -y install --no-install-recommends \ diff --git a/Makefile b/Makefile index e84eab0..694c584 100644 --- a/Makefile +++ b/Makefile @@ -70,6 +70,8 @@ check-fmt: vet: @go list ./...|grep -v scratch|GOOS=linux xargs go vet +build-dev: docker-build .build + .build: @go generate ./... @go build -o d2vm -ldflags "-s -w -X '$(MODULE).Version=$(VERSION)' -X '$(MODULE).BuildDate=$(shell date)'" ./cmd/d2vm diff --git a/cmd/d2vm/run/sparsecat-linux-amd64 b/cmd/d2vm/run/sparsecat-linux-amd64 index bdf2fee..90fdeff 100755 Binary files a/cmd/d2vm/run/sparsecat-linux-amd64 and b/cmd/d2vm/run/sparsecat-linux-amd64 differ diff --git a/dockerfile.go b/dockerfile.go index e0d281b..ac59253 100644 --- a/dockerfile.go +++ b/dockerfile.go @@ -50,6 +50,15 @@ const ( NetworkManagerNetplan NetworkManager = "netplan" ) +func (n NetworkManager) Validate() error { + switch n { + case NetworkManagerNone, NetworkManagerIfupdown2, NetworkManagerNetplan: + return nil + default: + return fmt.Errorf("unsupported network manager: %s", n) + } +} + type Dockerfile struct { Image string Password string @@ -78,14 +87,26 @@ func NewDockerfile(release OSRelease, img, password string, networkManager Netwo case ReleaseAlpine: d.tmpl = alpineDockerfileTemplate net = NetworkManagerIfupdown2 + if networkManager == NetworkManagerNetplan { + return d, fmt.Errorf("netplan is not supported on alpine") + } case ReleaseCentOS: d.tmpl = centOSDockerfileTemplate + net = NetworkManagerNone + if networkManager != "" && networkManager != NetworkManagerNone { + return Dockerfile{}, fmt.Errorf("network manager is not supported on centos") + } default: return Dockerfile{}, fmt.Errorf("unsupported distribution: %s", release.ID) } if d.NetworkManager == "" { - logrus.Warnf("no network manager specified, using distribution defaults: %s", net) + if release.ID != ReleaseCentOS { + logrus.Warnf("no network manager specified, using distribution defaults: %s", net) + } d.NetworkManager = net } + if err := d.NetworkManager.Validate(); err != nil { + return Dockerfile{}, err + } return d, nil } diff --git a/pkg/docker/docker.go b/pkg/docker/docker.go index 5825ef7..7b6e3fe 100644 --- a/pkg/docker/docker.go +++ b/pkg/docker/docker.go @@ -102,6 +102,9 @@ func RunD2VM(ctx context.Context, image, version, cmd string, args ...string) er if err != nil { return err } + if image == "" { + image = "linkacloud/d2vm" + } if version == "" { version = "latest" }