From 4cd30c8da2196faabf7cf8ab05da5100103be548 Mon Sep 17 00:00:00 2001 From: Michael Vogt Date: Mon, 6 Jan 2025 11:28:05 +0100 Subject: [PATCH] bib: use squashfs for the intermediate image This commit moves to the new squashfs image support in the `images` library (c.f. https://github.com/osbuild/images/pull/1105) Closes: https://github.com/osbuild/bootc-image-builder/issues/733 --- .github/workflows/tests.yml | 2 +- bib/cmd/bootc-image-builder/image.go | 4 +++- test/test_build.py | 17 +++++++++++++++-- 3 files changed, 19 insertions(+), 4 deletions(-) diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 73d576f41..0888a8a4c 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -79,7 +79,7 @@ jobs: - name: Install test dependencies run: | sudo apt update - sudo apt install -y python3-pytest python3-paramiko python3-boto3 flake8 qemu-system-x86 qemu-efi-aarch64 qemu-system-arm qemu-user-static pylint libosinfo-bin + sudo apt install -y python3-pytest python3-paramiko python3-boto3 flake8 qemu-system-x86 qemu-efi-aarch64 qemu-system-arm qemu-user-static pylint libosinfo-bin squashfs-tools - name: Diskspace (before) run: | df -h diff --git a/bib/cmd/bootc-image-builder/image.go b/bib/cmd/bootc-image-builder/image.go index d40914480..79681c0c3 100644 --- a/bib/cmd/bootc-image-builder/image.go +++ b/bib/cmd/bootc-image-builder/image.go @@ -526,7 +526,9 @@ func manifestForISO(c *ManifestConfig, rng *rand.Rand) (*manifest.Manifest, erro default: return nil, fmt.Errorf("unsupported architecture %v", c.Architecture) } - + // see https://github.com/osbuild/bootc-image-builder/issues/733 + img.SquashfsCompression = "lz4" + img.RootfsType = manifest.SquashfsRootfs img.Filename = "install.iso" mf := manifest.New() diff --git a/test/test_build.py b/test/test_build.py index 193f466b2..85711ef0c 100644 --- a/test/test_build.py +++ b/test/test_build.py @@ -9,7 +9,7 @@ import subprocess import tempfile import uuid -from contextlib import contextmanager +from contextlib import contextmanager, ExitStack from typing import NamedTuple from dataclasses import dataclass @@ -621,7 +621,6 @@ def test_iso_installs(image_type): assert exit_status == 0 assert_kernel_args(vm, image_type) - def osinfo_for(it: ImageBuildResult, arch: str) -> str: base = "Media is an installer for OS" if it.container_ref.endswith("/centos-bootc/centos-bootc:stream9"): @@ -654,6 +653,20 @@ def test_iso_os_detection(image_type): assert osinfo_output == expected_output +@pytest.mark.skipif(platform.system() != "Linux", reason="osinfo detect test only runs on linux right now") +@pytest.mark.skipif(not testutil.has_executable("unsquashfs"), reason="need unsquashfs") +@pytest.mark.parametrize("image_type", gen_testcases("anaconda-iso"), indirect=["image_type"]) +def test_iso_install_img_is_squashfs(tmp_path, image_type): + installer_iso_path = image_type.img_path + with ExitStack() as cm: + mount_point = tmp_path / "cdrom" + mount_point.mkdir() + subprocess.check_call(["mount", installer_iso_path, os.fspath(mount_point)]) + cm.callback(subprocess.check_call, ["umount", os.fspath(mount_point)]) + # ensure install.img is a valid squashfs + subprocess.check_call(["unsquashfs", "-ls", mount_point / "images/install.img"]) + + @pytest.mark.parametrize("images", gen_testcases("multidisk"), indirect=["images"]) def test_multi_build_request(images): artifacts = set()