mirror of
https://github.com/linuxkit/linuxkit.git
synced 2025-07-20 17:49:10 +00:00
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 <rn@rneugeba.io>
This commit is contained in:
parent
a33d8024cb
commit
4f0cec5c14
@ -257,6 +257,7 @@ func Build(m Moby, w io.Writer, pull bool, tp string) error {
|
|||||||
type kernelFilter struct {
|
type kernelFilter struct {
|
||||||
tw *tar.Writer
|
tw *tar.Writer
|
||||||
buffer *bytes.Buffer
|
buffer *bytes.Buffer
|
||||||
|
hdr *tar.Header
|
||||||
cmdline string
|
cmdline string
|
||||||
kernel string
|
kernel string
|
||||||
tar string
|
tar string
|
||||||
@ -288,6 +289,19 @@ func (k *kernelFilter) finishTar() error {
|
|||||||
if k.buffer == nil {
|
if k.buffer == nil {
|
||||||
return 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)
|
tr := tar.NewReader(k.buffer)
|
||||||
err := tarAppend(k.tw, tr)
|
err := tarAppend(k.tw, tr)
|
||||||
k.buffer = nil
|
k.buffer = nil
|
||||||
@ -362,15 +376,14 @@ func (k *kernelFilter) WriteHeader(hdr *tar.Header) error {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
whdr = &tar.Header{
|
// Stash the kernel header and prime the buffer for the kernel
|
||||||
|
k.hdr = &tar.Header{
|
||||||
Name: "boot/kernel",
|
Name: "boot/kernel",
|
||||||
Mode: hdr.Mode,
|
Mode: hdr.Mode,
|
||||||
Size: hdr.Size,
|
Size: hdr.Size,
|
||||||
Format: tar.FormatPAX,
|
Format: tar.FormatPAX,
|
||||||
}
|
}
|
||||||
if err := tw.WriteHeader(whdr); err != nil {
|
k.buffer = new(bytes.Buffer)
|
||||||
return err
|
|
||||||
}
|
|
||||||
case k.tar:
|
case k.tar:
|
||||||
k.foundKTar = true
|
k.foundKTar = true
|
||||||
k.discard = false
|
k.discard = false
|
||||||
|
Loading…
Reference in New Issue
Block a user