From 7031b5aeee835f7846aed9d34a7f5a8a79b6f925 Mon Sep 17 00:00:00 2001 From: Zygmunt Krynicki Date: Fri, 6 Dec 2024 20:24:58 +0000 Subject: [PATCH] Allow spread to use locally-provided kernel By placing a bzImage into the top level of the AppArmor git repository one can instruct spread and image-garden to use that image instead of booting traditionally with an EFI / full disk image pair. In addition, make error handling in qemu more robust, so failures are both surfaced and do not cause endless attempts to allocate. Please update image-garden to at least 5a00ead9964df6463e19432ae50e7760fc6da755 Signed-off-by: Zygmunt Krynicki --- README.md | 3 +++ spread.yaml | 43 +++++++++++++++++++++++++++++++++++++------ 2 files changed, 40 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index d0be320d8..abd9c7bea 100644 --- a/README.md +++ b/README.md @@ -230,6 +230,9 @@ git clean -xdf Running the `run_spread.sh` script, with `spread` on `PATH` will run all the tests across several supported systems (Debian, Ubuntu and openSUSE). +If you include a `bzImage` file in the root of the repository then that kernel +will be used in the integration test. Please look at `spread.yaml` for details. + Regression tests ---------------- For details on structure and adding tests, see diff --git a/spread.yaml b/spread.yaml index 10217791c..015b85e08 100644 --- a/spread.yaml +++ b/spread.yaml @@ -4,12 +4,40 @@ backends: # The garden backend relies on https://gitlab.com/zygoon/image-garden # TODO: Switch to a released version for better stability. type: adhoc - # Use just enough RAM to link the parser on a virtual system with two - # cores. Using more cores may easily consume more memory, due to make - # -j$(nproc, used below than a small CI/CD system is typically granted. - # It is better to have more workers than to have one big worker with - # lots of resources. - allocate: ADDRESS "$(QEMU_MEM_OPTION="-m 1536" QEMU_SMP_OPTION="-smp 2" image-garden allocate "$SPREAD_SYSTEM".$(uname -m))" + allocate: | + # Use just enough RAM to link the parser on a virtual system with + # two cores. Using more cores may easily consume more memory, due + # to make -j$(nproc), used below than a small CI/CD system is + # typically granted. It is better to have more workers than to + # have one big worker with lots of resources. + export QEMU_MEM_OPTION="-m 1536" + export QEMU_SMP_OPTION="-smp 2" + ARCH="$(uname -m)" + # If a locally built kernel image exist then use it for booting. + # Care needs to be taken to make sure the kernel is compatible with + # loadable modules present in the file system. + if [ -f bzImage ]; then + # Create the qcow2/run files before setting custom kernel + # options, so that first boot and initialization happen in a + # standardized manner. + image-garden make "$SPREAD_SYSTEM"."$ARCH".run "$SPREAD_SYSTEM"."$ARCH".qcow2 1>&2 + # Pass a simple drive instead of the more elaborate virtio + # configuration that is used by default. Some images may not + # support virtio enough for booting. + export QEMU_STORAGE_OPTION="-drive file=$SPREAD_SYSTEM.$ARCH.qcow2,format=qcow2" + # Refrain from passing EFI firmware to qemu so that we boot a + # kernel directly and bypass both EFI and BIOS. + export QEMU_BOOT_FIRMWARE_OPTION="" + # Pass the kernel and cmdline by hand. At present this is tuned + # to the Ubuntu cloud images that have the rootfs as the first + # partition. + exec image-garden allocate "$SPREAD_SYSTEM"."$ARCH" \ + -kernel bzImage \ + -append 'root=/dev/sda1 ro console=tty1 console=ttyS0' + fi + # Ask image garden to allocate the system and relay the result back + # to spread as either success of failure. + exec image-garden allocate "$SPREAD_SYSTEM"."$ARCH" discard: image-garden discard "$SPREAD_SYSTEM_ADDRESS" systems: # All systems except for the one Ubuntu system are marked as @@ -57,6 +85,9 @@ exclude: - "*.lock" - spread-logs - spread-artifacts + # Locally provided kernel image. See allocate section in system backends, + # this image, if present, is passed directly to qemu. + - bzImage # Copy the project to this path on the test system. # This is also available as $SPREAD_PATH.