From 4f0cec5c140a0eba9d2078c51873dc0558bfb934 Mon Sep 17 00:00:00 2001 From: Rolf Neugebauer Date: Sat, 3 Nov 2018 21:40:29 +0000 Subject: [PATCH] build: Restructure the kernel filter Stash the kernel image in a local buffer and flush it out once done. This is preparation work for supporting uncompressed kernels in the next commit. Signed-off-by: Rolf Neugebauer --- src/cmd/linuxkit/moby/build.go | 21 +++++++++++++++++---- 1 file changed, 17 insertions(+), 4 deletions(-) diff --git a/src/cmd/linuxkit/moby/build.go b/src/cmd/linuxkit/moby/build.go index 284a36db3..932e6d8d4 100644 --- a/src/cmd/linuxkit/moby/build.go +++ b/src/cmd/linuxkit/moby/build.go @@ -257,6 +257,7 @@ func Build(m Moby, w io.Writer, pull bool, tp string) error { type kernelFilter struct { tw *tar.Writer buffer *bytes.Buffer + hdr *tar.Header cmdline string kernel string tar string @@ -288,6 +289,19 @@ func (k *kernelFilter) finishTar() error { if k.buffer == nil { return nil } + + if k.hdr != nil { + if err := k.tw.WriteHeader(k.hdr); err != nil { + return err + } + if _, err := k.tw.Write(k.buffer.Bytes()); err != nil { + return err + } + k.hdr = nil + k.buffer = nil + return nil + } + tr := tar.NewReader(k.buffer) err := tarAppend(k.tw, tr) k.buffer = nil @@ -362,15 +376,14 @@ func (k *kernelFilter) WriteHeader(hdr *tar.Header) error { if err != nil { return err } - whdr = &tar.Header{ + // Stash the kernel header and prime the buffer for the kernel + k.hdr = &tar.Header{ Name: "boot/kernel", Mode: hdr.Mode, Size: hdr.Size, Format: tar.FormatPAX, } - if err := tw.WriteHeader(whdr); err != nil { - return err - } + k.buffer = new(bytes.Buffer) case k.tar: k.foundKTar = true k.discard = false