1
0
mirror of https://github.com/rancher/os.git synced 2025-07-18 00:51:04 +00:00

Merge pull request #582 from ibuildthecloud/fix-symlink

Fix symlinking docker.dist in custom consoles
This commit is contained in:
Darren Shepherd 2015-09-25 00:01:47 -07:00
commit 0ac4c783f9
4 changed files with 40 additions and 28 deletions

4
Godeps/Godeps.json generated
View File

@ -363,8 +363,8 @@
}, },
{ {
"ImportPath": "github.com/rancher/docker-from-scratch", "ImportPath": "github.com/rancher/docker-from-scratch",
"Comment": "v1.8.2-1", "Comment": "v1.8.2-1-2-g5852c65",
"Rev": "500f0babfdbfcd55fbdbf6690e4508ceb7323474" "Rev": "5852c65f66b6a5e850811dc9782d3b7400531fee"
}, },
{ {
"ImportPath": "github.com/rancher/netconf", "ImportPath": "github.com/rancher/netconf",

View File

@ -23,6 +23,7 @@ const (
iptables = "/sbin/iptables" iptables = "/sbin/iptables"
modprobe = "/sbin/modprobe" modprobe = "/sbin/modprobe"
systemdRoot = "/sys/fs/cgroup/systemd/user.slice" systemdRoot = "/sys/fs/cgroup/systemd/user.slice"
distSuffix = ".dist"
) )
var ( var (
@ -189,7 +190,7 @@ func execDocker(config *Config, docker, cmd string, args []string) (*exec.Cmd, e
err := cmd.Start() err := cmd.Start()
return cmd, err return cmd, err
} else { } else {
err := syscall.Exec(docker, append([]string{cmd}, args...), env) err := syscall.Exec(expand(docker), append([]string{cmd}, args...), env)
return nil, err 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) 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 { func setupBin(config *Config, bin string) error {
if _, err := os.Stat(bin); os.IsNotExist(err) { expanded, err := exec.LookPath(bin)
dist := bin + ".dist" if err == nil {
if _, err := os.Stat(dist); err == nil { return nil
return os.Symlink(dist, bin)
}
} }
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 { func setupLogging(config *Config) error {

View File

@ -1,11 +1,12 @@
include build.conf include build.conf
FORCE_PULL := 0 FORCE_PULL := 0
DEV_BUILD := 0 DEV_BUILD := 0
GODEP := godep
bin/rancheros: bin/rancheros:
mkdir -p $(dir $@) 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 $@ strip --strip-all $@

View File

@ -72,26 +72,23 @@ type result struct {
Pid int `json:"Pid"` Pid int `json:"Pid"`
} }
func expand(first, second string, args []string) ([]string, error) { func findProgram(searchPaths ...string) string {
var err error
prog := "" prog := ""
prog, err = exec.LookPath(first) for _, i := range searchPaths {
if err != nil { var err error
prog, err = exec.LookPath(second) prog, err = exec.LookPath(i)
} if err == nil {
if err != nil { break
return nil, err }
prog = i
} }
return append([]string{prog}, args...), nil return prog
} }
func runNsenter(pid int) error { func runNsenter(pid int) error {
args, err := expand(userDocker, "", []string{"main"}) args := []string{findProgram(userDocker), "main"}
if err != nil {
return err
}
r, w, err := os.Pipe() r, w, err := os.Pipe()
if err != nil { if err != nil {
@ -227,14 +224,15 @@ func main(cfg *config.CloudConfig) error {
} }
} }
args, err := expand("docker-init", "docker", args) prog := findProgram("docker-init", "dockerlaunch", "docker")
if err != nil { if strings.Contains(prog, "dockerlaunch") {
return err args = append([]string{prog, "docker"}, args...)
} else {
args = append([]string{prog}, args...)
} }
log.Infof("Running %v", args) log.Infof("Running %v", args)
err = syscall.Exec(args[0], args, dockerCfg.AppendEnv()) return syscall.Exec(args[0], args, dockerCfg.AppendEnv())
return err
} }
func switchCgroup(src, target int) error { func switchCgroup(src, target int) error {