From 9be3f1ef7806a7693a3d75c068564f19c57b7361 Mon Sep 17 00:00:00 2001 From: Darren Shepherd Date: Thu, 24 Sep 2015 23:16:48 -0700 Subject: [PATCH 1/2] Make godep executable configurable in Makefile.docker --- Makefile.docker | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Makefile.docker b/Makefile.docker index d640d46d..dfa4578a 100644 --- a/Makefile.docker +++ b/Makefile.docker @@ -1,11 +1,12 @@ include build.conf FORCE_PULL := 0 DEV_BUILD := 0 +GODEP := godep bin/rancheros: mkdir -p $(dir $@) - godep go build -tags netgo -installsuffix netgo -ldflags "-X github.com/rancherio/os/config.VERSION $(VERSION) -linkmode external -extldflags -static" -o $@ + $(GODEP) go build -tags netgo -installsuffix netgo -ldflags "-X github.com/rancherio/os/config.VERSION $(VERSION) -linkmode external -extldflags -static" -o $@ strip --strip-all $@ From 427aa1f61a398d5e369c4c36acfb7b17adb8c555 Mon Sep 17 00:00:00 2001 From: Darren Shepherd Date: Thu, 24 Sep 2015 23:21:37 -0700 Subject: [PATCH 2/2] Fix symlinking docker.dist in custom consoles --- Godeps/Godeps.json | 4 +-- .../rancher/docker-from-scratch/scratch.go | 27 +++++++++++---- cmd/userdocker/main.go | 34 +++++++++---------- 3 files changed, 38 insertions(+), 27 deletions(-) diff --git a/Godeps/Godeps.json b/Godeps/Godeps.json index 09aa80c3..bfd8736e 100644 --- a/Godeps/Godeps.json +++ b/Godeps/Godeps.json @@ -351,8 +351,8 @@ }, { "ImportPath": "github.com/rancher/docker-from-scratch", - "Comment": "v1.8.2-1", - "Rev": "500f0babfdbfcd55fbdbf6690e4508ceb7323474" + "Comment": "v1.8.2-1-2-g5852c65", + "Rev": "5852c65f66b6a5e850811dc9782d3b7400531fee" }, { "ImportPath": "github.com/rancher/netconf", diff --git a/Godeps/_workspace/src/github.com/rancher/docker-from-scratch/scratch.go b/Godeps/_workspace/src/github.com/rancher/docker-from-scratch/scratch.go index b7c8070a..e9f1c149 100644 --- a/Godeps/_workspace/src/github.com/rancher/docker-from-scratch/scratch.go +++ b/Godeps/_workspace/src/github.com/rancher/docker-from-scratch/scratch.go @@ -23,6 +23,7 @@ const ( iptables = "/sbin/iptables" modprobe = "/sbin/modprobe" systemdRoot = "/sys/fs/cgroup/systemd/user.slice" + distSuffix = ".dist" ) var ( @@ -189,7 +190,7 @@ func execDocker(config *Config, docker, cmd string, args []string) (*exec.Cmd, e err := cmd.Start() return cmd, err } else { - err := syscall.Exec(docker, append([]string{cmd}, args...), env) + err := syscall.Exec(expand(docker), append([]string{cmd}, args...), env) return nil, err } } @@ -481,15 +482,27 @@ func setupSystemd(config *Config) error { return ioutil.WriteFile(path.Join(systemdRoot, "cgroup.procs"), []byte(strconv.Itoa(os.Getpid())+"\n"), 0644) } +func expand(bin string) string { + expanded, err := exec.LookPath(bin) + if err == nil { + return expanded + } + return bin +} + func setupBin(config *Config, bin string) error { - if _, err := os.Stat(bin); os.IsNotExist(err) { - dist := bin + ".dist" - if _, err := os.Stat(dist); err == nil { - return os.Symlink(dist, bin) - } + expanded, err := exec.LookPath(bin) + if err == nil { + return nil } - return nil + expanded, err = exec.LookPath(bin + distSuffix) + if err != nil { + // Purposely not returning error + return nil + } + + return CreateSymlink(expanded, expanded[:len(expanded)-len(distSuffix)]) } func setupLogging(config *Config) error { diff --git a/cmd/userdocker/main.go b/cmd/userdocker/main.go index d09f398b..afd2b32c 100644 --- a/cmd/userdocker/main.go +++ b/cmd/userdocker/main.go @@ -70,26 +70,23 @@ type result struct { Pid int `json:"Pid"` } -func expand(first, second string, args []string) ([]string, error) { - var err error +func findProgram(searchPaths ...string) string { prog := "" - prog, err = exec.LookPath(first) - if err != nil { - prog, err = exec.LookPath(second) - } - if err != nil { - return nil, err + for _, i := range searchPaths { + var err error + prog, err = exec.LookPath(i) + if err == nil { + break + } + prog = i } - return append([]string{prog}, args...), nil + return prog } func runNsenter(pid int) error { - args, err := expand(userDocker, "", []string{"main"}) - if err != nil { - return err - } + args := []string{findProgram(userDocker), "main"} r, w, err := os.Pipe() if err != nil { @@ -224,14 +221,15 @@ func main(cfg *config.CloudConfig) error { } } - args, err := expand("docker-init", "docker", args) - if err != nil { - return err + prog := findProgram("docker-init", "dockerlaunch", "docker") + if strings.Contains(prog, "dockerlaunch") { + args = append([]string{prog, "docker"}, args...) + } else { + args = append([]string{prog}, args...) } log.Infof("Running %v", args) - err = syscall.Exec(args[0], args, dockerCfg.AppendEnv()) - return err + return syscall.Exec(args[0], args, dockerCfg.AppendEnv()) } func switchCgroup(src, target int) error {