snap seeding: Defer validation for regular image builds

When getting the list of snaps to include on an image via germinate, we
process the snaps in alphabetical order. Currently we seed several
packages `gnome-foo` and also `gtk-common-themes`, the default provider
of `gtk-3-themes`. Since `gtk-common-themes` is alphabetically after
`gnome-foo`, the `seed.yaml` we generate is invalid when we are part way
through generating.

What we really care about, though, is not that the `seed.yaml` is always
valid at every step, but it is that it is valid at the *end* of seeding.
So for the germinate case, let's defer validation to happen once at the
end. Other callsites of `snap_preseed`, where callers are careful to
seed snaps in the right order, are unaffected by this.
amd64-kernel-on-i386
Iain Lane 5 years ago
parent 57a13cc16c
commit b68a5abf65
No known key found for this signature in database
GPG Key ID: E352D5C51C5041D4

@ -85,8 +85,9 @@ preinstall_snaps() {
snap_prepare chroot snap_prepare chroot
for snap in "$@"; do for snap in "$@"; do
snap_preseed chroot "${snap}" SNAP_NO_VALIDATE_SEED=1 snap_preseed chroot "${snap}"
done done
snap_validate_seed chroot
lb chroot_resolv remove lb chroot_resolv remove
} }

@ -650,13 +650,22 @@ snap_preseed() {
;; ;;
esac esac
# Do basic validation of generated snapd seed.yaml, doing it here # Do basic validation of generated snapd seed.yaml, doing it here
# means we catch all the places(tm) that snaps are added but the # means we catch all the places(tm) that snaps are added but the
# downside is that each time a snap is added the seed must be valid, # downside is that each time a snap is added the seed must be valid,
# i.e. snaps with bases need to add bases first etc. # i.e. snaps with bases need to add bases first etc
if [ -e chroot/var/lib/snapd/seed/seed.yaml ]; then #
snap debug validate-seed "$CHROOT_ROOT/var/lib/snapd/seed/seed.yaml" # Skip validation by setting SNAP_NO_VALIDATE_SEED=1.
if [ -z "${SNAP_NO_VALIDATE_SEED}" ]; then
snap_validate_seed "${CHROOT_ROOT}"
fi
}
snap_validate_seed() {
local CHROOT_ROOT=$1
if [ -e "${CHROOT_ROOT}/var/lib/snapd/seed/seed.yaml" ]; then
snap debug validate-seed "${CHROOT_ROOT}/var/lib/snapd/seed/seed.yaml"
fi fi
} }

Loading…
Cancel
Save