mirror of
https://github.com/linuxkit/linuxkit.git
synced 2025-07-21 10:09:07 +00:00
Support both kernel and bzImage for now
Also do not require `tar` to be in container, use the standard image export code that we already have and find the files we want. Signed-off-by: Justin Cormack <justin.cormack@docker.com>
This commit is contained in:
parent
2cd9bead88
commit
ef017ac223
@ -117,18 +117,19 @@ func buildInternal(name string, pull bool, config []byte) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
// get kernel and initrd tarball from container
|
// get kernel and initrd tarball from container
|
||||||
// TODO examine contents to see what names they might have
|
|
||||||
log.Infof("Extract kernel image: %s", m.Kernel.Image)
|
log.Infof("Extract kernel image: %s", m.Kernel.Image)
|
||||||
const (
|
const (
|
||||||
kernelName = "kernel"
|
kernelName = "kernel"
|
||||||
ktarName = "kernel.tar"
|
kernelAltName = "bzImage"
|
||||||
|
ktarName = "kernel.tar"
|
||||||
)
|
)
|
||||||
out, err := dockerRun(m.Kernel.Image, "tar", "cf", "-", kernelName, ktarName)
|
out, err := ImageExtract(m.Kernel.Image, "")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Fatalf("Failed to extract kernel image and tarball: %v", err)
|
log.Fatalf("Failed to extract kernel image and tarball: %v", err)
|
||||||
}
|
}
|
||||||
buf := bytes.NewBuffer(out)
|
buf := bytes.NewBuffer(out)
|
||||||
kernel, ktar, err := untarKernel(buf, kernelName, ktarName)
|
|
||||||
|
kernel, ktar, err := untarKernel(buf, kernelName, kernelAltName, ktarName)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Fatalf("Could not extract kernel image and filesystem from tarball. %v", err)
|
log.Fatalf("Could not extract kernel image and filesystem from tarball. %v", err)
|
||||||
}
|
}
|
||||||
@ -218,10 +219,11 @@ func buildInternal(name string, pull bool, config []byte) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func untarKernel(buf *bytes.Buffer, kernelName, ktarName string) (*bytes.Buffer, *bytes.Buffer, error) {
|
func untarKernel(buf *bytes.Buffer, kernelName, kernelAltName, ktarName string) (*bytes.Buffer, *bytes.Buffer, error) {
|
||||||
tr := tar.NewReader(buf)
|
tr := tar.NewReader(buf)
|
||||||
|
|
||||||
var kernel, ktar *bytes.Buffer
|
var kernel, ktar *bytes.Buffer
|
||||||
|
foundKernel := false
|
||||||
|
|
||||||
for {
|
for {
|
||||||
hdr, err := tr.Next()
|
hdr, err := tr.Next()
|
||||||
@ -232,7 +234,11 @@ func untarKernel(buf *bytes.Buffer, kernelName, ktarName string) (*bytes.Buffer,
|
|||||||
log.Fatalln(err)
|
log.Fatalln(err)
|
||||||
}
|
}
|
||||||
switch hdr.Name {
|
switch hdr.Name {
|
||||||
case kernelName:
|
case kernelName, kernelAltName:
|
||||||
|
if foundKernel {
|
||||||
|
return nil, nil, errors.New("found more than one possible kernel image")
|
||||||
|
}
|
||||||
|
foundKernel = true
|
||||||
kernel = new(bytes.Buffer)
|
kernel = new(bytes.Buffer)
|
||||||
_, err := io.Copy(kernel, tr)
|
_, err := io.Copy(kernel, tr)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
Loading…
Reference in New Issue
Block a user