mirror of
				https://github.com/linuxkit/linuxkit.git
				synced 2025-11-04 08:55:13 +00:00 
			
		
		
		
	@@ -16,6 +16,7 @@ import (
 | 
			
		||||
 | 
			
		||||
var (
 | 
			
		||||
	outputImages = map[string]string{
 | 
			
		||||
		"iso":         "linuxkit/mkimage-iso:4c77e9969773bf0ed6b0eb2230a2c94b5fae47ab",
 | 
			
		||||
		"iso-bios":    "linuxkit/mkimage-iso-bios:65254243f003cf0ac74c64b0a23b543195ddad8a",
 | 
			
		||||
		"iso-efi":     "linuxkit/mkimage-iso-efi:1f5556e56da8e82d52458667ad354b719f314eb2",
 | 
			
		||||
		"raw-bios":    "linuxkit/mkimage-raw-bios:2795f6282bdb8582934d5a0c2f1f859d3073336c",
 | 
			
		||||
@@ -108,6 +109,13 @@ var outFuns = map[string]func(string, io.Reader, int) error{
 | 
			
		||||
		}
 | 
			
		||||
		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 {
 | 
			
		||||
		filename := base + ".raw"
 | 
			
		||||
		log.Infof("  %s", filename)
 | 
			
		||||
@@ -498,3 +506,58 @@ func outputKernelSquashFS(image, base string, filesystem io.Reader) error {
 | 
			
		||||
 | 
			
		||||
	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
 | 
			
		||||
# SUMMARY: Check that raw output format is generated
 | 
			
		||||
# SUMMARY: Check that aws output format is generated
 | 
			
		||||
# LABELS: amd64
 | 
			
		||||
 | 
			
		||||
set -e
 | 
			
		||||
 
 | 
			
		||||
@@ -1,5 +1,5 @@
 | 
			
		||||
#!/bin/sh
 | 
			
		||||
# SUMMARY: Check that raw output format is generated
 | 
			
		||||
# SUMMARY: Check that raw-bios output format is generated
 | 
			
		||||
# LABELS: amd64
 | 
			
		||||
 | 
			
		||||
set -e
 | 
			
		||||
 
 | 
			
		||||
@@ -1,5 +1,5 @@
 | 
			
		||||
#!/bin/sh
 | 
			
		||||
# SUMMARY: Check that raw output format is generated
 | 
			
		||||
# SUMMARY: Check that raw-efi output format is generated
 | 
			
		||||
# LABELS:
 | 
			
		||||
 | 
			
		||||
set -e
 | 
			
		||||
 
 | 
			
		||||
@@ -1,5 +1,5 @@
 | 
			
		||||
#!/bin/sh
 | 
			
		||||
# SUMMARY: Check that kernel+initrd output format is generated
 | 
			
		||||
# SUMMARY: Check that kernel+squashfs output format is generated
 | 
			
		||||
# LABELS:
 | 
			
		||||
 | 
			
		||||
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
 | 
			
		||||
		Reference in New Issue
	
	Block a user