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:
parent
bf2054d963
commit
bd500e2391
17
README.md
17
README.md
@ -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
|
||||
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
|
||||
sudo apt install git golang whois ovmf genisoimage qemu-utils qemu-system
|
||||
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
|
||||
```
|
||||
|
||||
Running the `run_spread.sh` script, with `spread` on `PATH` will run all the
|
||||
tests across several supported systems (Debian, Ubuntu and openSUSE).
|
||||
Running the `run_spread.sh` script, with `image-garden` snap installed or 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.
|
||||
|
@ -4,14 +4,24 @@
|
||||
# quad-core CPU with 8GB of RAM and no desktop session.
|
||||
set -xeu
|
||||
|
||||
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 [ -n "$(command -v image-garden.spread)" ]; then
|
||||
if ! snap run --shell image-garden -c "snapctl is-connected kvm"; then
|
||||
echo "Please connect the kvm interface to image-garden" >&2
|
||||
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
|
||||
echo "You need to install image-garden from https://gitlab.com/zygoon/image-garden: make install prefix=/usr/local" >&2
|
||||
exit 1
|
||||
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
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
|
||||
rm -rf spread-logs spread-artifacts
|
||||
@ -23,7 +33,7 @@ for system in \
|
||||
ubuntu-cloud-22.04 \
|
||||
ubuntu-cloud-24.04 \
|
||||
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
|
||||
fi
|
||||
done
|
||||
|
16
spread.yaml
16
spread.yaml
@ -5,6 +5,15 @@ backends:
|
||||
# TODO: Switch to a released version for better stability.
|
||||
type: adhoc
|
||||
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
|
||||
# two cores. Using more cores may easily consume more memory, due
|
||||
# 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
|
||||
# to spread as either success of failure.
|
||||
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:
|
||||
# All systems except for the one Ubuntu system are marked as
|
||||
# manual. This way we don't accidentally spin up everything when
|
||||
|
Loading…
x
Reference in New Issue
Block a user