mirror of
https://github.com/rancher/os.git
synced 2025-09-01 14:48:55 +00:00
Start initial support of running in Docker
This commit is contained in:
36
init/init.go
36
init/init.go
@@ -187,25 +187,29 @@ func loadModules(cfg *config.Config) error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func sysInit(cfg *config.Config) error {
|
func sysInit(cfg *config.Config) error {
|
||||||
cmd := exec.Command("openvt", "-s", "/sbin/init-sys")
|
args := append([]string{"/sbin/init-sys"}, os.Args[1:]...)
|
||||||
//cmd := exec.Command("/sbin/init-sys")
|
|
||||||
cmd.Stderr = os.Stderr
|
var cmd *exec.Cmd
|
||||||
cmd.Stdout = os.Stdout
|
if util.IsRunningInTty() {
|
||||||
|
cmd = exec.Command(args[0], args[1:]...)
|
||||||
|
cmd.Stdin = os.Stdin
|
||||||
|
cmd.Stderr = os.Stderr
|
||||||
|
cmd.Stdout = os.Stdout
|
||||||
|
} else {
|
||||||
|
args = append([]string{"openvt", "-s"}, args...)
|
||||||
|
cmd = exec.Command(args[0], args[1:]...)
|
||||||
|
}
|
||||||
|
|
||||||
if err := cmd.Start(); err != nil {
|
if err := cmd.Start(); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
return nil
|
return os.Stdin.Close()
|
||||||
|
|
||||||
//log.Debug("Launching host console")
|
|
||||||
//return exec.Command("openvt", "/bin/sh").Run()
|
|
||||||
|
|
||||||
//log.Debug("Launching console")
|
|
||||||
//return exec.Command("/bin/openvt", "-s", "/bin/console-container.sh").Start()
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func execDocker(cfg *config.Config) error {
|
func execDocker(cfg *config.Config) error {
|
||||||
log.Info("Launching Docker")
|
log.Info("Launching Docker")
|
||||||
|
os.Stdin.Close()
|
||||||
return syscall.Exec(cfg.DockerBin, cfg.SystemDockerArgs, os.Environ())
|
return syscall.Exec(cfg.DockerBin, cfg.SystemDockerArgs, os.Environ())
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -237,11 +241,11 @@ func mountState(cfg *config.Config) error {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
log.Debugf("Bind mounting %s to %s", path.Join(STATE, "docker"), DOCKER)
|
//log.Debugf("Bind mounting %s to %s", path.Join(STATE, "docker"), DOCKER)
|
||||||
err = util.Mount(path.Join(STATE, "docker"), DOCKER, "", "bind")
|
//err = util.Mount(path.Join(STATE, "docker"), DOCKER, "", "bind")
|
||||||
if err != nil && cfg.StateRequired {
|
//if err != nil && cfg.StateRequired {
|
||||||
return err
|
// return err
|
||||||
}
|
//}
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
14
util/term.go
Normal file
14
util/term.go
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
package util
|
||||||
|
|
||||||
|
import (
|
||||||
|
"github.com/kless/term"
|
||||||
|
|
||||||
|
log "github.com/Sirupsen/logrus"
|
||||||
|
)
|
||||||
|
|
||||||
|
func IsRunningInTty() bool {
|
||||||
|
log.Infof("Is a tty : %v", term.IsTerminal(0))
|
||||||
|
log.Infof("Is a tty : %v", term.IsTerminal(1))
|
||||||
|
log.Infof("Is a tty : %v", term.IsTerminal(2))
|
||||||
|
return term.IsTerminal(1)
|
||||||
|
}
|
60
util/util.go
60
util/util.go
@@ -4,6 +4,7 @@ import (
|
|||||||
"archive/tar"
|
"archive/tar"
|
||||||
"fmt"
|
"fmt"
|
||||||
"io"
|
"io"
|
||||||
|
"math/rand"
|
||||||
"os"
|
"os"
|
||||||
"path"
|
"path"
|
||||||
"syscall"
|
"syscall"
|
||||||
@@ -11,6 +12,10 @@ import (
|
|||||||
"github.com/docker/docker/pkg/mount"
|
"github.com/docker/docker/pkg/mount"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
var (
|
||||||
|
letters = []rune("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ")
|
||||||
|
)
|
||||||
|
|
||||||
func mountProc() error {
|
func mountProc() error {
|
||||||
if _, err := os.Stat("/proc/self/mountinfo"); os.IsNotExist(err) {
|
if _, err := os.Stat("/proc/self/mountinfo"); os.IsNotExist(err) {
|
||||||
if _, err := os.Stat("/proc"); os.IsNotExist(err) {
|
if _, err := os.Stat("/proc"); os.IsNotExist(err) {
|
||||||
@@ -94,3 +99,58 @@ func ExtractTar(archive string, dest string) error {
|
|||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func Contains(values []string, value string) bool {
|
||||||
|
if len(value) == 0 {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, value := range values {
|
||||||
|
if value == value {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
type ReturnsErr func() error
|
||||||
|
|
||||||
|
func ShortCircuit(funcs ...ReturnsErr) error {
|
||||||
|
for _, f := range funcs {
|
||||||
|
err := f()
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
type ErrWriter struct {
|
||||||
|
w io.Writer
|
||||||
|
Err error
|
||||||
|
}
|
||||||
|
|
||||||
|
func NewErrorWriter(w io.Writer) *ErrWriter {
|
||||||
|
return &ErrWriter{
|
||||||
|
w: w,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (e *ErrWriter) Write(buf []byte) *ErrWriter {
|
||||||
|
if e.Err != nil {
|
||||||
|
return e
|
||||||
|
}
|
||||||
|
|
||||||
|
_, e.Err = e.w.Write(buf)
|
||||||
|
return e
|
||||||
|
}
|
||||||
|
|
||||||
|
func RandSeq(n int) string {
|
||||||
|
b := make([]rune, n)
|
||||||
|
for i := range b {
|
||||||
|
b[i] = letters[rand.Intn(len(letters))]
|
||||||
|
}
|
||||||
|
return string(b)
|
||||||
|
}
|
||||||
|
Reference in New Issue
Block a user