diff --git a/debian/changelog b/debian/changelog index c2cebf66..5229ac44 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,19 @@ +livecd-rootfs (2.607) eoan; urgency=medium + + * 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. + + -- Iain Lane Mon, 02 Sep 2019 14:22:49 +0100 + livecd-rootfs (2.606) eoan; urgency=medium * Undivert update-initramfs more carefully: previously the wrapper script diff --git a/live-build/auto/build b/live-build/auto/build index 17c5e228..a625c336 100755 --- a/live-build/auto/build +++ b/live-build/auto/build @@ -83,10 +83,11 @@ Setup_cleanup preinstall_snaps() { lb chroot_resolv install snap_prepare chroot - + for snap in "$@"; do - snap_preseed chroot "${snap}" + SNAP_NO_VALIDATE_SEED=1 snap_preseed chroot "${snap}" done + snap_validate_seed chroot lb chroot_resolv remove } diff --git a/live-build/functions b/live-build/functions index ee2bc2f8..9bbab33a 100644 --- a/live-build/functions +++ b/live-build/functions @@ -650,13 +650,22 @@ snap_preseed() { ;; esac - # Do basic validation of generated snapd seed.yaml, doing it here # 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, - # 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" + # i.e. snaps with bases need to add bases first etc + # + # 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 }