From 09fbcb59d7cacef12c79080f7454fc7c3cf1f460 Mon Sep 17 00:00:00 2001 From: Rolf Neugebauer Date: Sat, 10 Nov 2018 14:43:50 +0000 Subject: [PATCH] cmd: Add scaffolding to decompress the kernel Add the '-vmlinux' flag to build and pass it all the way to the kernel filter. Note, this commit only adds the flag but does not yet perform the decompression. This will be added with the next commit. Signed-off-by: Rolf Neugebauer --- src/cmd/linuxkit/build.go | 3 ++- src/cmd/linuxkit/moby/build.go | 31 ++++++++++++++++--------------- src/cmd/linuxkit/moby/linuxkit.go | 2 +- 3 files changed, 19 insertions(+), 17 deletions(-) diff --git a/src/cmd/linuxkit/build.go b/src/cmd/linuxkit/build.go index 6c991a15e..37a00bbac 100644 --- a/src/cmd/linuxkit/build.go +++ b/src/cmd/linuxkit/build.go @@ -49,6 +49,7 @@ func build(args []string) { buildSize := buildCmd.String("size", "1024M", "Size for output image, if supported and fixed size") buildPull := buildCmd.Bool("pull", false, "Always pull images") buildDisableTrust := buildCmd.Bool("disable-content-trust", false, "Skip image trust verification specified in trust section of config (default false)") + buildDecompressKernel := buildCmd.Bool("decompress-kernel", false, "Decompress the Linux kernel (default false)") buildCmd.Var(&buildFormats, "format", "Formats to create [ "+strings.Join(outputTypes, " ")+" ]") if err := buildCmd.Parse(args); err != nil { @@ -203,7 +204,7 @@ func build(args []string) { if moby.Streamable(buildFormats[0]) { tp = buildFormats[0] } - err = moby.Build(m, w, *buildPull, tp) + err = moby.Build(m, w, *buildPull, tp, *buildDecompressKernel) if err != nil { log.Fatalf("%v", err) } diff --git a/src/cmd/linuxkit/moby/build.go b/src/cmd/linuxkit/moby/build.go index 932e6d8d4..8f307557a 100644 --- a/src/cmd/linuxkit/moby/build.go +++ b/src/cmd/linuxkit/moby/build.go @@ -142,7 +142,7 @@ func outputImage(image *Image, section string, prefix string, m Moby, idMap map[ } // Build performs the actual build process -func Build(m Moby, w io.Writer, pull bool, tp string) error { +func Build(m Moby, w io.Writer, pull bool, tp string, decompressKernel bool) error { if MobyDir == "" { MobyDir = defaultMobyConfigDir() } @@ -179,7 +179,7 @@ func Build(m Moby, w io.Writer, pull bool, tp string) error { if m.Kernel.ref != nil { // get kernel and initrd tarball and ucode cpio archive from container log.Infof("Extract kernel image: %s", m.Kernel.ref) - kf := newKernelFilter(iw, m.Kernel.Cmdline, m.Kernel.Binary, m.Kernel.Tar, m.Kernel.UCode) + kf := newKernelFilter(iw, m.Kernel.Cmdline, m.Kernel.Binary, m.Kernel.Tar, m.Kernel.UCode, decompressKernel) err := ImageTar(m.Kernel.ref, "", kf, enforceContentTrust(m.Kernel.ref.String(), &m.Trust), pull, "") if err != nil { return fmt.Errorf("Failed to extract kernel image and tarball: %v", err) @@ -255,20 +255,21 @@ func Build(m Moby, w io.Writer, pull bool, tp string) error { // kernelFilter is a tar.Writer that transforms a kernel image into the output we want on underlying tar writer type kernelFilter struct { - tw *tar.Writer - buffer *bytes.Buffer - hdr *tar.Header - cmdline string - kernel string - tar string - ucode string - discard bool - foundKernel bool - foundKTar bool - foundUCode bool + tw *tar.Writer + buffer *bytes.Buffer + hdr *tar.Header + cmdline string + kernel string + tar string + ucode string + decompressKernel bool + discard bool + foundKernel bool + foundKTar bool + foundUCode bool } -func newKernelFilter(tw *tar.Writer, cmdline string, kernel string, tar, ucode *string) *kernelFilter { +func newKernelFilter(tw *tar.Writer, cmdline string, kernel string, tar, ucode *string, decompressKernel bool) *kernelFilter { tarName, kernelName, ucodeName := "kernel.tar", "kernel", "" if tar != nil { tarName = *tar @@ -282,7 +283,7 @@ func newKernelFilter(tw *tar.Writer, cmdline string, kernel string, tar, ucode * if ucode != nil { ucodeName = *ucode } - return &kernelFilter{tw: tw, cmdline: cmdline, kernel: kernelName, tar: tarName, ucode: ucodeName} + return &kernelFilter{tw: tw, cmdline: cmdline, kernel: kernelName, tar: tarName, ucode: ucodeName, decompressKernel: decompressKernel} } func (k *kernelFilter) finishTar() error { diff --git a/src/cmd/linuxkit/moby/linuxkit.go b/src/cmd/linuxkit/moby/linuxkit.go index c77764ab9..56cde4619 100644 --- a/src/cmd/linuxkit/moby/linuxkit.go +++ b/src/cmd/linuxkit/moby/linuxkit.go @@ -62,7 +62,7 @@ func ensureLinuxkitImage(name string) error { return err } defer os.Remove(tf.Name()) - Build(m, tf, false, "") + Build(m, tf, false, "", false) if err := tf.Close(); err != nil { return err }