diff --git a/.gitignore b/.gitignore index e685a1b6..4c848836 100644 --- a/.gitignore +++ b/.gitignore @@ -33,6 +33,7 @@ coverage.html weaver/weaver weavedns/weavedns sigproxy/sigproxy +weavewait/weavewait tools/bin tools/build releases @@ -41,6 +42,7 @@ weavedns.tar weaveexec.tar weaveexec/proxy weaveexec/weave +weaveexec/weavewait weaveexec/sigproxy weaveexec/docker*.tgz Vagrantfile.local diff --git a/Makefile b/Makefile index 36fef509..cec7e20f 100644 --- a/Makefile +++ b/Makefile @@ -12,6 +12,7 @@ WEAVER_EXE=weaver/weaver WEAVEDNS_EXE=weavedns/weavedns SIGPROXY_EXE=sigproxy/sigproxy PROXY_EXE=weaveexec/proxy +WEAVEWAIT_EXE=weavewait/weavewait WEAVER_IMAGE=$(DOCKERHUB_USER)/weave WEAVEDNS_IMAGE=$(DOCKERHUB_USER)/weavedns WEAVEEXEC_IMAGE=$(DOCKERHUB_USER)/weaveexec @@ -30,7 +31,7 @@ travis: $(WEAVER_EXE) $(WEAVEDNS_EXE) update: go get -u -f -v -tags -netgo ./$(dir $(WEAVER_EXE)) ./$(dir $(WEAVEDNS_EXE)) ./$(dir $(SIGPROXY_EXE)) ./$(dir $(PROXY_EXE)) -$(WEAVER_EXE) $(WEAVEDNS_EXE) $(PROXY_EXE): common/*.go +$(WEAVER_EXE) $(WEAVEDNS_EXE) $(PROXY_EXE) $(WEAVEWAIT_EXE): common/*.go go get -tags netgo ./$(@D) go build -ldflags "-extldflags \"-static\" -X main.version $(WEAVE_VERSION)" -tags netgo -o $@ ./$(@D) @strings $@ | grep cgo_stub\\\.go >/dev/null || { \ @@ -45,6 +46,7 @@ $(WEAVER_EXE) $(WEAVEDNS_EXE) $(PROXY_EXE): common/*.go $(WEAVER_EXE): router/*.go ipam/*.go ipam/*/*.go weaver/main.go $(WEAVEDNS_EXE): nameserver/*.go weavedns/main.go $(PROXY_EXE): proxy/*.go weaveexec/main.go +$(WEAVEWAIT_EXE): weavewait/*.go weavewait/main.go # Sigproxy needs separate rule as it fails the netgo check in the main # build stanza due to not importing net package @@ -59,9 +61,10 @@ $(WEAVEDNS_EXPORT): weavedns/Dockerfile $(WEAVEDNS_EXE) $(SUDO) docker build -t $(WEAVEDNS_IMAGE) weavedns $(SUDO) docker save $(WEAVEDNS_IMAGE):latest > $@ -$(WEAVEEXEC_EXPORT): weaveexec/Dockerfile $(DOCKER_DISTRIB) weave $(SIGPROXY_EXE) $(PROXY_EXE) +$(WEAVEEXEC_EXPORT): weaveexec/Dockerfile $(DOCKER_DISTRIB) weave $(SIGPROXY_EXE) $(PROXY_EXE) $(WEAVEWAIT_EXE) cp weave weaveexec/weave - cp sigproxy/sigproxy weaveexec/sigproxy + cp $(SIGPROXY_EXE) weaveexec/sigproxy + cp $(WEAVEWAIT_EXE) weaveexec/weavewait cp $(DOCKER_DISTRIB) weaveexec/docker.tgz $(SUDO) docker build -t $(WEAVEEXEC_IMAGE) weaveexec $(SUDO) docker save $(WEAVEEXEC_IMAGE):latest > $@ @@ -94,7 +97,7 @@ publish: $(PUBLISH) clean: -$(SUDO) docker rmi $(WEAVER_IMAGE) $(WEAVEDNS_IMAGE) $(WEAVEEXEC_IMAGE) - rm -f $(WEAVER_EXE) $(WEAVEDNS_EXE) $(SIGPROXY_EXE) $(WEAVER_EXPORT) $(WEAVEDNS_EXPORT) $(WEAVEEXEC_EXPORT) + rm -f $(WEAVER_EXE) $(WEAVEDNS_EXE) $(SIGPROXY_EXE) $(PROXY_EXE) $(WEAVEWAIT_EXE) $(WEAVER_EXPORT) $(WEAVEDNS_EXPORT) $(WEAVEEXEC_EXPORT) build: $(SUDO) go clean -i net diff --git a/proxy/create_container_interceptor.go b/proxy/create_container_interceptor.go index c96431c4..ac022685 100644 --- a/proxy/create_container_interceptor.go +++ b/proxy/create_container_interceptor.go @@ -64,7 +64,7 @@ func addToVolumesFrom(config *docker.HostConfig, mounts ...string) error { func setWeaveWaitEntrypoint(image, container *docker.Config) { container.Cmd = combineEntrypoints(image, container) - container.Entrypoint = []string{"/home/weavewait/wait-for-weave"} + container.Entrypoint = []string{"/home/weavewait/weavewait"} } func combineEntrypoints(image, container *docker.Config) []string { diff --git a/weaveexec/Dockerfile b/weaveexec/Dockerfile index 6295b8a6..03c5fa24 100644 --- a/weaveexec/Dockerfile +++ b/weaveexec/Dockerfile @@ -16,9 +16,9 @@ WORKDIR /home/weave ADD ./weave /home/weave/ ADD ./sigproxy /home/weave/ ADD ./proxy /home/weave/ +ADD ./weavewait /home/weavewait/weavewait ADD ./docker.tgz / -ADD ./wait-for-weave /home/weavewait/wait-for-weave VOLUME /home/weavewait ENTRYPOINT ["/home/weave/sigproxy", "/home/weave/weave"] diff --git a/weavewait/main.go b/weavewait/main.go new file mode 100644 index 00000000..c4f52549 --- /dev/null +++ b/weavewait/main.go @@ -0,0 +1,26 @@ +package main + +import ( + "fmt" + "os" + "os/exec" + + "github.com/weaveworks/weave/net" +) + +func main() { + if _, err := net.EnsureInterface("ethwe", 20); err != nil { + fmt.Fprintln(os.Stderr, err) + } + + if len(os.Args) <= 1 { + os.Exit(0) + } + cmd := exec.Command(os.Args[1], os.Args[2:]...) + cmd.Stdin = os.Stdin + cmd.Stdout = os.Stdout + cmd.Stderr = os.Stderr + if err := cmd.Run(); err != nil { + os.Exit(1) + } +}