diff --git a/moby/config.go b/moby/config.go index 06734fbb6..2d7326e65 100644 --- a/moby/config.go +++ b/moby/config.go @@ -19,6 +19,9 @@ type Moby struct { Path string Contents string } + Outputs []struct { + Format string + } } type MobyImage struct { diff --git a/moby/main.go b/moby/main.go index 8b3a86fa5..9d8a8c522 100644 --- a/moby/main.go +++ b/moby/main.go @@ -69,8 +69,8 @@ func containersInitrd(containers []*bytes.Buffer) (*bytes.Buffer, error) { return w, nil } -func build() { - config, err := ioutil.ReadFile("moby.yaml") +func build(configfile string) { + config, err := ioutil.ReadFile(configfile) if err != nil { log.Fatalf("Cannot open config file: %v", err) } @@ -143,17 +143,33 @@ func build() { log.Fatalf("Failed to make initrd %v", err) } - // TODO should we tar these up? Also output to other formats - err = ioutil.WriteFile("initrd.img", initrd.Bytes(), os.FileMode(0644)) - if err != nil { - log.Fatalf("could not write initrd: %v", err) - } - err = ioutil.WriteFile("bzImage", bzimage.Bytes(), os.FileMode(0644)) - if err != nil { - log.Fatalf("could not write kernel: %v", err) + for _, o := range m.Outputs { + switch o.Format { + case "kernel+initrd": + err = OutputKernelInitrd(bzimage.Bytes(), initrd.Bytes()) + if err != nil { + log.Fatalf("Error writing %s output: %v", o.Format, err) + } + case "": + log.Fatalf("No format specified for output") + default: + log.Fatalf("Unknown output type %s", o.Format) + } } } -func main() { - build() +func OutputKernelInitrd(bzimage []byte, initrd []byte) error { + err := ioutil.WriteFile("initrd.img", initrd, os.FileMode(0644)) + if err != nil { + return err + } + err = ioutil.WriteFile("bzImage", bzimage, os.FileMode(0644)) + if err != nil { + return err + } + return nil +} + +func main() { + build("moby.yaml") } diff --git a/moby/moby.yaml b/moby/moby.yaml index b98a1ab56..30e77e848 100644 --- a/moby/moby.yaml +++ b/moby/moby.yaml @@ -23,3 +23,5 @@ system: files: - path: etc/docker/daemon.json contents: '{"debug": true}' +outputs: + - format: kernel+initrd