From edeccca42661545bb439ed080229fdb4e827118c 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 | 14 +++++++++++--- 3 files changed, 15 insertions(+), 5 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..5921a5b33 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 @@ -605,7 +605,7 @@ def test_image_build_without_se_linux_denials(image_type): @pytest.mark.skipif(platform.system() != "Linux", reason="boot test only runs on linux right now") @pytest.mark.parametrize("image_type", gen_testcases("anaconda-iso"), indirect=["image_type"]) -def test_iso_installs(image_type): +def test_iso_installs(tmp_path, image_type): installer_iso_path = image_type.img_path test_disk_path = installer_iso_path.with_name("test-disk.img") with open(test_disk_path, "w", encoding="utf8") as fp: @@ -620,7 +620,15 @@ def test_iso_installs(image_type): exit_status, _ = vm.run("true", user=image_type.username, password=image_type.password) assert exit_status == 0 assert_kernel_args(vm, image_type) - + # validate that the install.img is squashfs + if not has_executable("unsquashfs"): + pytest.skip("need unsquashfs to check generate install.img") + with ExitStack as cm: + mount_point = tmp_path / "cdrom" + 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"]) def osinfo_for(it: ImageBuildResult, arch: str) -> str: base = "Media is an installer for OS"