2
0
mirror of https://gitlab.com/apparmor/apparmor synced 2025-08-22 01:57:43 +00:00

Add support for running image-garden as a snap

The new image-garden snap offers a one-stop-shop for integration
testing, bundling qemu, spread and image-garden build recipes.

Extend the documentation, the run-spread.sh helper script as well as
spread.yaml to support this new method.

Signed-off-by: Zygmunt Krynicki <zygmunt.krynicki@canonical.com>
This commit is contained in:
Zygmunt Krynicki 2025-03-21 10:24:19 +01:00 committed by Zygmunt Krynicki
parent bf2054d963
commit bd500e2391
3 changed files with 48 additions and 11 deletions

View File

@ -214,6 +214,18 @@ in an ephemeral virtual machine. This allows testing in isolation from the
host, as well as testing across different commonly used distributions and their host, as well as testing across different commonly used distributions and their
real kernels. real kernels.
Image Garden is available as a snap. If you wish to use it this way then snap
then install the snap with:
```sh
sudo snap install image-garden
```
If you need to install snapd first, see https://snapcraft.io/docs/installing-snapd
Alternatively you may build image-garden and spread from source, and install
dependencies manually.
```sh ```sh
sudo apt install git golang whois ovmf genisoimage qemu-utils qemu-system sudo apt install git golang whois ovmf genisoimage qemu-utils qemu-system
go install github.com/snapcore/spread/cmd/spread@latest go install github.com/snapcore/spread/cmd/spread@latest
@ -227,8 +239,9 @@ git clean -xdf
# or ~/go/bin/spread -v garden:ubuntu-cloud-24.04:tests/regression/apparmor:at_secure # or ~/go/bin/spread -v garden:ubuntu-cloud-24.04:tests/regression/apparmor:at_secure
``` ```
Running the `run_spread.sh` script, with `spread` on `PATH` will run all the Running the `run_spread.sh` script, with `image-garden` snap installed or with
tests across several supported systems (Debian, Ubuntu and openSUSE). `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 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. will be used in the integration test. Please look at `spread.yaml` for details.

View File

@ -4,14 +4,24 @@
# quad-core CPU with 8GB of RAM and no desktop session. # quad-core CPU with 8GB of RAM and no desktop session.
set -xeu set -xeu
if test -z "$(command -v spread)"; then if [ -n "$(command -v image-garden.spread)" ]; then
echo "You need to install spread from https://github.com/snapcore/spread with the Go compiler and the command: go install github.com/snapcore/spread/cmd/spread@latest" >&2 if ! snap run --shell image-garden -c "snapctl is-connected kvm"; then
exit 1 echo "Please connect the kvm interface to image-garden" >&2
fi echo "snap connect image-garden:kvm" >&2
exit 1
fi
SPREAD=image-garden.spread
else
SPREAD=spread
if test -z "$(command -v spread)"; then
echo "You need to install spread from https://github.com/snapcore/spread with the Go compiler and the command: go install github.com/snapcore/spread/cmd/spread@latest" >&2
exit 1
fi
if test -z "$(command -v image-garden)"; then if test -z "$(command -v image-garden)"; then
echo "You need to install image-garden from https://gitlab.com/zygoon/image-garden: make install prefix=/usr/local" >&2 echo "You need to install image-garden from https://gitlab.com/zygoon/image-garden: make install prefix=/usr/local" >&2
exit 1 exit 1
fi
fi fi
rm -rf spread-logs spread-artifacts rm -rf spread-logs spread-artifacts
@ -23,7 +33,7 @@ for system in \
ubuntu-cloud-22.04 \ ubuntu-cloud-22.04 \
ubuntu-cloud-24.04 \ ubuntu-cloud-24.04 \
ubuntu-cloud-24.10; do ubuntu-cloud-24.10; do
if ! spread -artifacts ./spread-artifacts -v "$system" | tee spread-logs/"$system".log; then if ! "$SPREAD" -artifacts ./spread-artifacts -v "$system" | tee spread-logs/"$system".log; then
echo "Spread exited with code $?" >spread-logs/"$system".failed echo "Spread exited with code $?" >spread-logs/"$system".failed
fi fi
done done

View File

@ -5,6 +5,15 @@ backends:
# TODO: Switch to a released version for better stability. # TODO: Switch to a released version for better stability.
type: adhoc type: adhoc
allocate: | allocate: |
# Spread automatically injects /snap/bin to PATH. When we are
# running from the image-garden snap then SPREAD_HOST_PATH is the
# original path before such modifications were applied. Snap
# applications cannot normally run /snap/bin/* entry-points
# successfully so re-set PATH to the original value, as provided by
# snapcraft.
if [ -n "${SPREAD_HOST_PATH-}" ]; then
PATH="${SPREAD_HOST_PATH}"
fi
# Use just enough RAM to link the parser on a virtual system with # Use just enough RAM to link the parser on a virtual system with
# two cores. Using more cores may easily consume more memory, due # two cores. Using more cores may easily consume more memory, due
# to make -j$(nproc), used below than a small CI/CD system is # to make -j$(nproc), used below than a small CI/CD system is
@ -38,7 +47,12 @@ backends:
# Ask image garden to allocate the system and relay the result back # Ask image garden to allocate the system and relay the result back
# to spread as either success of failure. # to spread as either success of failure.
exec image-garden allocate "$SPREAD_SYSTEM"."$ARCH" exec image-garden allocate "$SPREAD_SYSTEM"."$ARCH"
discard: image-garden discard "$SPREAD_SYSTEM_ADDRESS" discard: |
# See above for an explanation.
if [ -n "${SPREAD_HOST_PATH-}" ]; then
PATH="${SPREAD_HOST_PATH}"
fi
image-garden discard "$SPREAD_SYSTEM_ADDRESS"
systems: systems:
# All systems except for the one Ubuntu system are marked as # All systems except for the one Ubuntu system are marked as
# manual. This way we don't accidentally spin up everything when # manual. This way we don't accidentally spin up everything when