mirror of
https://github.com/linuxkit/linuxkit.git
synced 2025-07-22 02:21:34 +00:00
commit
d2b8f5291d
@ -16,6 +16,7 @@ import (
|
|||||||
|
|
||||||
var (
|
var (
|
||||||
outputImages = map[string]string{
|
outputImages = map[string]string{
|
||||||
|
"iso": "linuxkit/mkimage-iso:4c77e9969773bf0ed6b0eb2230a2c94b5fae47ab",
|
||||||
"iso-bios": "linuxkit/mkimage-iso-bios:65254243f003cf0ac74c64b0a23b543195ddad8a",
|
"iso-bios": "linuxkit/mkimage-iso-bios:65254243f003cf0ac74c64b0a23b543195ddad8a",
|
||||||
"iso-efi": "linuxkit/mkimage-iso-efi:1f5556e56da8e82d52458667ad354b719f314eb2",
|
"iso-efi": "linuxkit/mkimage-iso-efi:1f5556e56da8e82d52458667ad354b719f314eb2",
|
||||||
"raw-bios": "linuxkit/mkimage-raw-bios:2795f6282bdb8582934d5a0c2f1f859d3073336c",
|
"raw-bios": "linuxkit/mkimage-raw-bios:2795f6282bdb8582934d5a0c2f1f859d3073336c",
|
||||||
@ -108,6 +109,13 @@ var outFuns = map[string]func(string, io.Reader, int) error{
|
|||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
},
|
},
|
||||||
|
"kernel+iso": func(base string, image io.Reader, size int) error {
|
||||||
|
err := outputKernelISO(outputImages["iso"], base, image)
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("Error writing kernel+iso output: %v", err)
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
},
|
||||||
"aws": func(base string, image io.Reader, size int) error {
|
"aws": func(base string, image io.Reader, size int) error {
|
||||||
filename := base + ".raw"
|
filename := base + ".raw"
|
||||||
log.Infof(" %s", filename)
|
log.Infof(" %s", filename)
|
||||||
@ -498,3 +506,58 @@ func outputKernelSquashFS(image, base string, filesystem io.Reader) error {
|
|||||||
|
|
||||||
return dockerRun(buf, output, true, image)
|
return dockerRun(buf, output, true, image)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func outputKernelISO(image, base string, filesystem io.Reader) error {
|
||||||
|
log.Debugf("output kernel/iso: %s %s", image, base)
|
||||||
|
log.Infof(" %s.iso", base)
|
||||||
|
|
||||||
|
tr := tar.NewReader(filesystem)
|
||||||
|
buf := new(bytes.Buffer)
|
||||||
|
rootfs := tar.NewWriter(buf)
|
||||||
|
|
||||||
|
for {
|
||||||
|
var thdr *tar.Header
|
||||||
|
thdr, err := tr.Next()
|
||||||
|
if err == io.EOF {
|
||||||
|
break
|
||||||
|
}
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
thdr.Format = tar.FormatPAX
|
||||||
|
switch {
|
||||||
|
case thdr.Name == "boot/kernel":
|
||||||
|
kernel, err := ioutil.ReadAll(tr)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
if err := ioutil.WriteFile(base+"-kernel", kernel, os.FileMode(0644)); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
case thdr.Name == "boot/cmdline":
|
||||||
|
cmdline, err := ioutil.ReadAll(tr)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
if err := ioutil.WriteFile(base+"-cmdline", cmdline, os.FileMode(0644)); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
case strings.HasPrefix(thdr.Name, "boot/"):
|
||||||
|
// skip the rest of boot/
|
||||||
|
default:
|
||||||
|
rootfs.WriteHeader(thdr)
|
||||||
|
if _, err := io.Copy(rootfs, tr); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
rootfs.Close()
|
||||||
|
|
||||||
|
output, err := os.Create(base + ".iso")
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
defer output.Close()
|
||||||
|
|
||||||
|
return dockerRun(buf, output, true, image)
|
||||||
|
}
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
# SUMMARY: Check that raw output format is generated
|
# SUMMARY: Check that aws output format is generated
|
||||||
# LABELS: amd64
|
# LABELS: amd64
|
||||||
|
|
||||||
set -e
|
set -e
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
# SUMMARY: Check that raw output format is generated
|
# SUMMARY: Check that raw-bios output format is generated
|
||||||
# LABELS: amd64
|
# LABELS: amd64
|
||||||
|
|
||||||
set -e
|
set -e
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
# SUMMARY: Check that raw output format is generated
|
# SUMMARY: Check that raw-efi output format is generated
|
||||||
# LABELS:
|
# LABELS:
|
||||||
|
|
||||||
set -e
|
set -e
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
# SUMMARY: Check that kernel+initrd output format is generated
|
# SUMMARY: Check that kernel+squashfs output format is generated
|
||||||
# LABELS:
|
# LABELS:
|
||||||
|
|
||||||
set -e
|
set -e
|
||||||
|
24
test/cases/000_build/000_formats/012_kernel+iso/test.sh
Normal file
24
test/cases/000_build/000_formats/012_kernel+iso/test.sh
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
# SUMMARY: Check that kernel+iso output format is generated
|
||||||
|
# LABELS:
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
|
# Source libraries. Uncomment if needed/defined
|
||||||
|
#. "${RT_LIB}"
|
||||||
|
. "${RT_PROJECT_ROOT}/_lib/lib.sh"
|
||||||
|
|
||||||
|
NAME=check
|
||||||
|
|
||||||
|
clean_up() {
|
||||||
|
rm -f ${NAME}*
|
||||||
|
}
|
||||||
|
|
||||||
|
trap clean_up EXIT
|
||||||
|
|
||||||
|
linuxkit build -format kernel+iso -name "${NAME}" ../test.yml
|
||||||
|
[ -f "${NAME}-kernel" ] || exit 1
|
||||||
|
[ -f "${NAME}.iso" ] || exit 1
|
||||||
|
[ -f "${NAME}-cmdline" ] || exit 1
|
||||||
|
|
||||||
|
exit 0
|
15
tools/mkimage-iso/Dockerfile
Normal file
15
tools/mkimage-iso/Dockerfile
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
FROM linuxkit/alpine:daed76b8f1d28cdeeee215a95b9671c682a405dc AS mirror
|
||||||
|
RUN mkdir -p /out/etc/apk && cp -r /etc/apk/* /out/etc/apk/
|
||||||
|
RUN apk add --no-cache --initdb -p /out \
|
||||||
|
alpine-baselayout \
|
||||||
|
busybox \
|
||||||
|
cdrkit \
|
||||||
|
libarchive-tools \
|
||||||
|
&& true
|
||||||
|
RUN mv /out/etc/apk/repositories.upstream /out/etc/apk/repositories
|
||||||
|
|
||||||
|
FROM scratch
|
||||||
|
WORKDIR /
|
||||||
|
COPY --from=mirror /out/ /
|
||||||
|
COPY . .
|
||||||
|
ENTRYPOINT [ "/make-iso" ]
|
3
tools/mkimage-iso/build.yml
Normal file
3
tools/mkimage-iso/build.yml
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
image: mkimage-iso
|
||||||
|
arches:
|
||||||
|
- amd64
|
18
tools/mkimage-iso/make-iso
Executable file
18
tools/mkimage-iso/make-iso
Executable file
@ -0,0 +1,18 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
|
mkdir -p /tmp/iso
|
||||||
|
cd /tmp/iso
|
||||||
|
|
||||||
|
# input is a tarball of filesystem on stdin
|
||||||
|
# output is an iso on stdout
|
||||||
|
|
||||||
|
# extract. BSD tar auto recognises compression, unlike GNU tar
|
||||||
|
# only if stdin is a tty, if so need files volume mounted...
|
||||||
|
[ -t 0 ] || bsdtar xzf -
|
||||||
|
|
||||||
|
genisoimage -o ../linuxkit.iso -l -J -R \
|
||||||
|
-joliet-long -input-charset utf8 \
|
||||||
|
-V LinuxKit .
|
||||||
|
cat ../linuxkit.iso
|
Loading…
Reference in New Issue
Block a user