mirror of
https://github.com/rancher/os.git
synced 2025-09-09 10:40:30 +00:00
Some refactoring
This commit is contained in:
@@ -12,6 +12,19 @@ import (
|
||||
"github.com/rancherio/os/util"
|
||||
)
|
||||
|
||||
const (
|
||||
CONSOLE_CONTAINER = "console"
|
||||
DOCKER_BIN = "/usr/bin/docker"
|
||||
DOCKER_SYSTEM_HOST = "unix:///var/run/system-docker.sock"
|
||||
DOCKER_HOST = "unix:///var/run/docker.sock"
|
||||
IMAGES_PATH = "/"
|
||||
IMAGES_PATTERN = "images*.tar"
|
||||
SYS_INIT = "/sbin/init-sys"
|
||||
USER_INIT = "/sbin/init-user"
|
||||
MODULES_ARCHIVE = "/modules.tar"
|
||||
DEBUG = true
|
||||
)
|
||||
|
||||
type InitFunc func(*Config) error
|
||||
|
||||
type ContainerConfig struct {
|
||||
@@ -23,27 +36,23 @@ type ContainerConfig struct {
|
||||
|
||||
type Config struct {
|
||||
//BootstrapContainers []ContainerConfig `json:"bootstrapContainers,omitempty"`
|
||||
//UserContainers []ContainerConfig `json:"userContainser,omitempty"`
|
||||
ConsoleContainer string `json:"consoleContainer,omitempty"`
|
||||
Debug bool `json:"debug,omitempty"`
|
||||
Disable []string `json:"disable,omitempty"`
|
||||
DockerEndpoint string `json:"dockerEndpoint,omitempty"`
|
||||
Dns []string `json:"dns,omitempty"`
|
||||
ImagesPath string `json:"ImagesPath,omitempty"`
|
||||
ImagesPattern string `json:"ImagesPattern,omitempty"`
|
||||
ModulesArchive string `json:"modulesArchive,omitempty"`
|
||||
Rescue bool `json:"rescue,omitempty"`
|
||||
RescueContainer ContainerConfig `json:"rescueContainer,omitempty"`
|
||||
StateDevFSType string `json:"stateDevFsType,omitempty"`
|
||||
StateDev string `json:"stateDev,omitempty"`
|
||||
StateRequired bool `json:"stateRequired,omitempty"`
|
||||
SysInit string `json:"sysInit,omitempty"`
|
||||
State ConfigState `json:"state,omitempty"`
|
||||
SystemContainers []ContainerConfig `json:"systemContainers,omitempty"`
|
||||
SystemDockerArgs []string `json:"systemDockerArgs,omitempty"`
|
||||
UserContainers []ContainerConfig `json:"userContainser,omitempty"`
|
||||
UserInit string `json:"userInit,omitempty"`
|
||||
DockerBin string `json:"dockerBin,omitempty"`
|
||||
Modules []string `json:"modules,omitempty"`
|
||||
Respawn []string `json:"respawn,omitempty"`
|
||||
}
|
||||
|
||||
type ConfigState struct {
|
||||
FsType string `json:"fsType,omitempty"`
|
||||
Dev string `json:"dev,omitempty"`
|
||||
Required bool `json:"required,omitempty"`
|
||||
}
|
||||
|
||||
func (c *Config) Dump() string {
|
||||
|
@@ -2,24 +2,18 @@ package config
|
||||
|
||||
func NewConfig() *Config {
|
||||
return &Config{
|
||||
ConsoleContainer: "console",
|
||||
DockerBin: "/usr/bin/docker",
|
||||
Debug: true,
|
||||
DockerEndpoint: "unix:/var/run/docker.sock",
|
||||
Debug: DEBUG,
|
||||
Dns: []string{
|
||||
"8.8.8.8",
|
||||
"8.8.4.4",
|
||||
},
|
||||
ImagesPath: "/",
|
||||
ImagesPattern: "images*.tar",
|
||||
StateRequired: false,
|
||||
StateDev: "LABEL=RANCHER_STATE",
|
||||
StateDevFSType: "auto",
|
||||
SysInit: "/sbin/init-sys",
|
||||
State: ConfigState{
|
||||
Required: false,
|
||||
Dev: "LABEL=RANCHER_STATE",
|
||||
FsType: "auto",
|
||||
},
|
||||
SystemDockerArgs: []string{"docker", "-d", "-s", "overlay", "-b", "none"},
|
||||
UserInit: "/sbin/init-user",
|
||||
Modules: []string{},
|
||||
ModulesArchive: "/modules.tar",
|
||||
SystemContainers: []ContainerConfig{
|
||||
{
|
||||
Cmd: []string{
|
||||
|
@@ -12,11 +12,15 @@ const (
|
||||
INTERVAL = 100
|
||||
)
|
||||
|
||||
func NewClient(cfg *config.Config) (*dockerClient.Client, error) {
|
||||
endpoint := "unix:///var/run/docker.sock"
|
||||
if cfg != nil {
|
||||
endpoint = cfg.DockerEndpoint
|
||||
}
|
||||
func NewSystemClient() (*dockerClient.Client, error) {
|
||||
return NewClient(config.DOCKER_SYSTEM_HOST)
|
||||
}
|
||||
|
||||
func NewDefaultClient() (*dockerClient.Client, error) {
|
||||
return NewClient(config.DOCKER_HOST)
|
||||
}
|
||||
|
||||
func NewClient(endpoint string) (*dockerClient.Client, error) {
|
||||
client, err := dockerClient.NewClient(endpoint)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
|
@@ -28,7 +28,7 @@ type Container struct {
|
||||
detach bool
|
||||
Config *runconfig.Config
|
||||
HostConfig *runconfig.HostConfig
|
||||
cfg *config.Config
|
||||
dockerHost string
|
||||
container *dockerClient.Container
|
||||
containerCfg *config.ContainerConfig
|
||||
}
|
||||
@@ -47,16 +47,17 @@ func getHash(containerCfg *config.ContainerConfig) (string, error) {
|
||||
return hex.EncodeToString(hash.Sum([]byte{})), nil
|
||||
}
|
||||
|
||||
func StartAndWait(cfg *config.Config, containerCfg *config.ContainerConfig) error {
|
||||
container := NewContainer(cfg, containerCfg).start(true)
|
||||
func StartAndWait(dockerHost string, containerCfg *config.ContainerConfig) error {
|
||||
container := NewContainer(dockerHost, containerCfg).start(true)
|
||||
return container.Err
|
||||
}
|
||||
|
||||
func NewContainer(cfg *config.Config, containerCfg *config.ContainerConfig) *Container {
|
||||
return &Container{
|
||||
cfg: cfg,
|
||||
func NewContainer(dockerHost string, containerCfg *config.ContainerConfig) *Container {
|
||||
c := &Container{
|
||||
dockerHost: dockerHost,
|
||||
containerCfg: containerCfg,
|
||||
}
|
||||
return c.Parse()
|
||||
}
|
||||
|
||||
func (c *Container) returnErr(err error) *Container {
|
||||
@@ -76,7 +77,7 @@ func (c *Container) Lookup() *Container {
|
||||
return c.returnErr(err)
|
||||
}
|
||||
|
||||
client, err := NewClient(c.cfg)
|
||||
client, err := NewClient(c.dockerHost)
|
||||
if err != nil {
|
||||
return c.returnErr(err)
|
||||
}
|
||||
@@ -153,7 +154,7 @@ func (c *Container) Stage() *Container {
|
||||
return c
|
||||
}
|
||||
|
||||
client, err := NewClient(c.cfg)
|
||||
client, err := NewClient(c.dockerHost)
|
||||
if err != nil {
|
||||
c.Err = err
|
||||
return c
|
||||
@@ -185,7 +186,7 @@ func (c *Container) Delete() *Container {
|
||||
return c
|
||||
}
|
||||
|
||||
client, err := NewClient(c.cfg)
|
||||
client, err := NewClient(c.dockerHost)
|
||||
if err != nil {
|
||||
return c.returnErr(err)
|
||||
}
|
||||
@@ -235,7 +236,7 @@ func (c *Container) start(wait bool) *Container {
|
||||
return c.returnErr(err)
|
||||
}
|
||||
|
||||
client, err := NewClient(c.cfg)
|
||||
client, err := NewClient(c.dockerHost)
|
||||
if err != nil {
|
||||
return c.returnErr(err)
|
||||
}
|
||||
|
66
init/init.go
66
init/init.go
@@ -7,7 +7,6 @@ import (
|
||||
"os/exec"
|
||||
"strings"
|
||||
"syscall"
|
||||
"time"
|
||||
|
||||
log "github.com/Sirupsen/logrus"
|
||||
"github.com/rancherio/os/config"
|
||||
@@ -123,13 +122,13 @@ func mountCgroups(cfg *config.Config) error {
|
||||
}
|
||||
|
||||
func extractModules(cfg *config.Config) error {
|
||||
if _, err := os.Stat(cfg.ModulesArchive); os.IsNotExist(err) {
|
||||
if _, err := os.Stat(config.MODULES_ARCHIVE); os.IsNotExist(err) {
|
||||
log.Debug("Modules do not exist")
|
||||
return nil
|
||||
}
|
||||
|
||||
log.Debug("Extracting modules")
|
||||
return util.ExtractTar(cfg.ModulesArchive, "/")
|
||||
return util.ExtractTar(config.MODULES_ARCHIVE, "/")
|
||||
}
|
||||
|
||||
func setResolvConf(cfg *config.Config) error {
|
||||
@@ -214,62 +213,37 @@ func MainInit() {
|
||||
func mountState(cfg *config.Config) error {
|
||||
var err error
|
||||
|
||||
dev := util.ResolveDevice(cfg.StateDev)
|
||||
log.Debugf("Mounting state device %s", dev)
|
||||
if cfg.State.Dev != "" {
|
||||
dev := util.ResolveDevice(cfg.State.Dev)
|
||||
log.Debugf("Mounting state device %s to %s", dev, STATE)
|
||||
|
||||
fsType := cfg.StateDevFSType
|
||||
log.Debugf("FsType has been set to %s", fsType)
|
||||
fsType := cfg.State.FsType
|
||||
if fsType == "auto" {
|
||||
actualFsType, fsErr := util.GetFsType(dev)
|
||||
if fsErr != nil {
|
||||
return fsErr
|
||||
fsType, err = util.GetFsType(dev)
|
||||
}
|
||||
fsType = actualFsType
|
||||
}
|
||||
err = util.Mount(dev, STATE, fsType, "")
|
||||
|
||||
if err != nil {
|
||||
if cfg.StateRequired {
|
||||
if err == nil {
|
||||
log.Debugf("FsType has been set to %s", fsType)
|
||||
err = util.Mount(dev, STATE, fsType, "")
|
||||
}
|
||||
}
|
||||
|
||||
if err != nil && cfg.State.Required {
|
||||
return err
|
||||
} else {
|
||||
}
|
||||
|
||||
if err != nil || cfg.State.Dev == "" {
|
||||
log.Debugf("State will not be persisted")
|
||||
err = util.Mount("none", STATE, "tmpfs", "")
|
||||
if err != nil {
|
||||
}
|
||||
|
||||
return err
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
//for _, i := range []string{"docker", "images"} {
|
||||
// dir := path.Join(STATE, i)
|
||||
// err = os.MkdirAll(dir, 0755)
|
||||
// if err != nil {
|
||||
// return err
|
||||
// }
|
||||
//}
|
||||
|
||||
//log.Debugf("Bind mounting %s to %s", path.Join(STATE, "docker"), DOCKER)
|
||||
//err = util.Mount(path.Join(STATE, "docker"), DOCKER, "", "bind")
|
||||
//if err != nil && cfg.StateRequired {
|
||||
// return err
|
||||
//}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func pause(cfg *config.Config) error {
|
||||
time.Sleep(5 + time.Minute)
|
||||
return nil
|
||||
}
|
||||
|
||||
func RunInit() error {
|
||||
var cfg config.Config
|
||||
|
||||
os.Setenv("PATH", "/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin")
|
||||
os.Setenv("PATH", "/sbin:/usr/bin")
|
||||
os.Setenv("DOCKER_RAMDISK", "true")
|
||||
|
||||
initFuncs := []config.InitFunc{
|
||||
|
@@ -131,6 +131,7 @@ download()
|
||||
local hash=$1
|
||||
|
||||
if ! check $hash $file; then
|
||||
echo Downloading $url to $file
|
||||
curl -sL $url > $file
|
||||
fi
|
||||
|
||||
|
@@ -1,4 +1,6 @@
|
||||
FROM base
|
||||
RUN rm /sbin/poweroff /sbin/reboot /sbin/halt
|
||||
RUN sed -i '/^root/s!/bin/sh!/bin/bash!' /etc/passwd
|
||||
RUN echo -e 'RancherOS\n' > /etc/issue
|
||||
COPY scripts/dockerimages/scripts/console.sh /
|
||||
CMD ["/console.sh"]
|
||||
|
@@ -41,6 +41,6 @@ else
|
||||
zcat ${HD_GZ} > ${HD}
|
||||
fi
|
||||
|
||||
qemu-system-x86_64 -kernel ${KERNEL} -initrd ${INITRD_TEST} -m 1024 -net nic,vlan=0,model=virtio -net user,vlan=0,hostfwd=tcp::2222-:22,hostname=rancher -drive if=virtio,file=${HD} -machine accel=kvm -cpu host -smp 4 -append "x $@"
|
||||
qemu-system-x86_64 -serial stdio -kernel ${KERNEL} -initrd ${INITRD_TEST} -m 1024 -net nic,vlan=0,model=virtio -net user,vlan=0,hostfwd=tcp::2222-:22,hostname=rancher -drive if=virtio,file=${HD} -machine accel=kvm -cpu host -smp 4 -append "console=ttyS0 $@"
|
||||
|
||||
fi
|
||||
|
@@ -47,11 +47,11 @@ func hasImage(name string) bool {
|
||||
}
|
||||
|
||||
func findImages(cfg *config.Config) ([]string, error) {
|
||||
log.Debugf("Looking for images at %s", cfg.ImagesPath)
|
||||
log.Debugf("Looking for images at %s", config.IMAGES_PATH)
|
||||
|
||||
result := []string{}
|
||||
|
||||
dir, err := os.Open(cfg.ImagesPath)
|
||||
dir, err := os.Open(config.IMAGES_PATH)
|
||||
if os.IsNotExist(err) {
|
||||
log.Debugf("Not loading images, %s does not exist")
|
||||
return result, nil
|
||||
@@ -68,7 +68,7 @@ func findImages(cfg *config.Config) ([]string, error) {
|
||||
}
|
||||
|
||||
for _, fileName := range files {
|
||||
if ok, _ := path.Match(cfg.ImagesPattern, fileName); ok {
|
||||
if ok, _ := path.Match(config.IMAGES_PATTERN, fileName); ok {
|
||||
log.Debugf("Found %s", fileName)
|
||||
result = append(result, fileName)
|
||||
}
|
||||
@@ -83,7 +83,7 @@ func loadImages(cfg *config.Config) error {
|
||||
return err
|
||||
}
|
||||
|
||||
client, err := docker.NewClient(cfg)
|
||||
client, err := docker.NewDefaultClient()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
@@ -93,7 +93,7 @@ func loadImages(cfg *config.Config) error {
|
||||
continue
|
||||
}
|
||||
|
||||
inputFileName := path.Join(cfg.ImagesPath, image)
|
||||
inputFileName := path.Join(config.IMAGES_PATH, image)
|
||||
input, err := os.Open(inputFileName)
|
||||
if err != nil {
|
||||
return err
|
||||
@@ -122,7 +122,7 @@ func runContainers(cfg *config.Config) error {
|
||||
}
|
||||
|
||||
for _, containerConfig := range containerConfigs {
|
||||
container := docker.NewContainer(cfg, &containerConfig)
|
||||
container := docker.NewContainer(config.DOCKER_HOST, &containerConfig)
|
||||
container.Parse()
|
||||
|
||||
if util.Contains(cfg.Disable, containerConfig.Id) {
|
||||
|
Reference in New Issue
Block a user