From 7bae9201d20822d6875bcf5949e1fff839b8774c Mon Sep 17 00:00:00 2001 From: Dimitri John Ledkov Date: Wed, 27 May 2020 17:10:24 +0100 Subject: [PATCH] snap_preseed: support channel specification with snap name snap_name[/classic]=track/risk/branch is now the supported snap name specification, which allows to specify the full default track and optional classic confinemnt. Supporting such specification in the seedtext allows one to specify a better default channel. For example, this will allow lxd to switch from latest/stable/ubuntu-20.04 to 4.0/stable/ubuntu-20.04 as 4.0 is the LTS track matching 20.04 support timeframe. LP: #1882374 --- live-build/functions | 23 +++++++++++++++++++---- 1 file changed, 19 insertions(+), 4 deletions(-) diff --git a/live-build/functions b/live-build/functions index e9fbb507..f5745d5b 100644 --- a/live-build/functions +++ b/live-build/functions @@ -620,11 +620,26 @@ snap_prepare() { snap_preseed() { # Preseed a snap in the image (snap_prepare must be called once prior) local CHROOT_ROOT=$1 + # $2 can be in the form of snap_name/classic=track/risk/branch local SNAP=$2 - local SNAP_NAME=${SNAP%/*} - # Per Ubuntu policy, all seeded snaps (with the exception of the core - # snap) must pull from stable/ubuntu-$(release_ver) as their channel. - local CHANNEL=${3:-"stable/ubuntu-$(release_ver)"} + # strip CHANNEL specification + local SNAP_NAME=${SNAP%=*} + # strip /classic confinement + SNAP_NAME=${SNAP_NAME%/*} + # Seed from the specified channel (e.g. core18 latest/stable) + # Or Channel endcoded in the snap name (e.g. lxd=4.0/stable/ubuntu-20.04) + # Or Ubuntu policy default channel latest/stable/ubuntu-$(release_ver) + local CHANNEL=$3 + if [ -z "$CHANNEL" ]; then + case $2 in + *=*) + CHANNEL=${2#*=} + ;; + *) + CHANNEL="stable/ubuntu-$(release_ver)" + ;; + esac + fi if [ ! -e "$CHROOT_ROOT/var/lib/snapd/seed/assertions/model" ]; then echo "ERROR: Snap model assertion not present, snap_prepare must be called"