diff --git a/live-build/auto/build b/live-build/auto/build index f9d05e2c..31f4b8a7 100755 --- a/live-build/auto/build +++ b/live-build/auto/build @@ -42,7 +42,7 @@ preinstall_snaps() { chroot chroot sh -c " set -x; cd /var/lib/snapd/seed; - SNAPPY_STORE_NO_CDN=1 snap download \"$snap\"" + SNAPPY_STORE_NO_CDN=1 snap download \"${snap%/*}\"" done lb chroot_resolv remove @@ -55,12 +55,14 @@ snaps: file: ${CORE_SNAP} EOF for snap in "$@"; do + snap_name=${snap%/*} cat <> chroot/var/lib/snapd/seed/seed.yaml - - name: $snap + - name: ${snap_name} channel: stable EOF + case ${snap} in */classic) echo " classic: true" >> chroot/var/lib/snapd/seed/seed.yaml;; esac echo -n " file: " >> chroot/var/lib/snapd/seed/seed.yaml - (cd chroot/var/lib/snapd/seed; ls -1 ${snap}_*.snap) \ + (cd chroot/var/lib/snapd/seed; ls -1 ${snap_name}_*.snap) \ >> chroot/var/lib/snapd/seed/seed.yaml done @@ -367,40 +369,33 @@ deb file:/var/lib/preinstalled-pool/ $LB_DISTRIBUTION $LB_PARENT_ARCHIVE_AREAS rm chroot/etc/apt/sources.list.preinstall chroot/etc/apt/sources.list.orig fi case $PROJECT:$SUBPROJECT in - ubuntu-server:live|ubuntu-mate:*) - assertions_dir="chroot/var/lib/snapd/seed/assertions" - model_assertion="$assertions_dir/generic-classic.model" - account_key_assertion="$assertions_dir/generic.account-key" - account_assertion="$assertions_dir/generic.account" - - mkdir -p "$assertions_dir" - snap known --remote model series=16 \ - model=generic-classic brand-id=generic \ - > "$model_assertion" - account_key=$(sed -n -e's/sign-key-sha3-384: //p' \ - < "$model_assertion") - - snap known --remote account-key \ - public-key-sha3-384="$account_key" \ - > "$account_key_assertion" - account=$(sed -n -e's/account-id: //p' \ - < "$account_key_assertion") - - snap known --remote account account-id=generic \ - > "$account_assertion" - ;; - esac - - # FIXME: this should not be a hard-coded list in this script; this - # is an interim solution for 17.10. - case $PROJECT:$SUBPROJECT in - ubuntu-mate:*) - SNAP_LIST=pulsemixer + *) + if [ -e "config/seeded-snaps" ]; then + assertions_dir="chroot/var/lib/snapd/seed/assertions" + model_assertion="$assertions_dir/generic-classic.model" + account_key_assertion="$assertions_dir/generic.account-key" + account_assertion="$assertions_dir/generic.account" + + mkdir -p "$assertions_dir" + snap known --remote model series=16 \ + model=generic-classic brand-id=generic \ + > "$model_assertion" + account_key=$(sed -n -e's/sign-key-sha3-384: //p' \ + < "$model_assertion") + + snap known --remote account-key \ + public-key-sha3-384="$account_key" \ + > "$account_key_assertion" + account=$(sed -n -e's/account-id: //p' \ + < "$account_key_assertion") + + snap known --remote account account-id=generic \ + > "$account_assertion" + snap_list=$(cat config/seeded-snaps) + preinstall_snaps $snap_list + fi ;; esac - if [ -n "$SNAP_LIST" ]; then - preinstall_snaps $SNAP_LIST - fi if [ "$PROJECT" = "ubuntu-touch" ] || [ "$PROJECT" = "ubuntu-touch-custom" ]; then if [ "$ARCH" = "armhf" ]; then diff --git a/live-build/auto/config b/live-build/auto/config index 8c749ec6..f6ceea42 100755 --- a/live-build/auto/config +++ b/live-build/auto/config @@ -254,13 +254,76 @@ if [ "${SUBPROJECT:-}" = minimized ]; then OPTS="${OPTS:+$OPTS }--bootstrap-flavour=minimal --linux-packages=linux-image" fi +# cribbed from cdimage, perhaps this should be a small helper script in germinate? +add_inheritance () { + case " $inherit " in + *" $1 "*) + ;; + *) + inherit="${inherit:+$inherit }$1" + ;; + esac +} + +expand_inheritance () { + for seed in $(grep "^$1:" config/germinate-output/structure | cut -d: -f2); do + expand_inheritance "$seed" + done + add_inheritance "$1" +} + +inheritance () { + inherit= + expand_inheritance "$1" + echo "$inherit" +} + +mkdir -p config/germinate-output +case $PROJECT in + kubuntu-active*) + SEED=kubuntu-active.$SUITE + ;; + kubuntu*) + SEED=kubuntu.$SUITE + ;; + xubuntu*) + SEED=xubuntu.$SUITE + ;; + *) + SEED=ubuntu.$SUITE + ;; +esac + +if ! [ -e config/germinate-output/structure ]; then + echo "Running germinate..." + (cd config/germinate-output && germinate --no-rdepends --no-installer \ + -S $SEEDMIRROR -m $MIRROR -d $SUITE -s $SEED \ + ${COMPONENTS:+-c "$COMPONENTS"} -a $ARCH) +fi + case $PROJECT in ubuntu|ubuntu-dvd) add_task install minimal standard ubuntu-desktop LIVE_TASK='ubuntu-live' + BASE_SEED='desktop' + SEEDS_EXPANDED=$(inheritance ${BASE_SEED}) case $ARCH in amd64) add_package live $SIGNED_KERNEL_PACKAGE ;; esac + for seed in ${SEEDS_EXPANDED}; do + echo "snap: considering ${seed}" + file=config/germinate-output/${seed}.snaps + [ -e "${file}" ] || continue + # extract the first column (snap package name) from germinate's output + # translate the human-readable "foo (classic)" into a + # more machine readable "foo/classic" + seed_snaps=$(sed -rn '1,/-----/d;/-----/,$d; s/(.*) \|.*/\1/; s, \(classic\),/classic,; p' "${file}") + for snap in ${seed_snaps}; do + echo "snap: found ${snap}" + ALL_SNAPS="${ALL_SNAPS:+${ALL_SNAPS} }${snap}" + done + done + echo "${ALL_SNAPS}" > config/seeded-snaps ;; ubuntu-desktop-next) @@ -933,51 +996,8 @@ case ${SUBPROJECT:-} in ;; esac -# cribbed from cdimage, perhaps this should be a small helper script in germinate? -add_inheritance () { - case " $inherit " in - *" $1 "*) - ;; - *) - inherit="${inherit:+$inherit }$1" - ;; - esac -} - -expand_inheritance () { - for seed in $(grep "^$1:" config/germinate-output/structure | cut -d: -f2); do - expand_inheritance "$seed" - done - add_inheritance "$1" -} - -inheritance () { - inherit= - expand_inheritance "$1" - echo "$inherit" -} - if [ "$PREINSTALLED" = "true" ]; then if [ -n "$PREINSTALL_POOL_SEEDS" ]; then - mkdir -p config/germinate-output - case $PROJECT in - kubuntu-active*) - SEED=kubuntu-active.$SUITE - ;; - kubuntu*) - SEED=kubuntu.$SUITE - ;; - xubuntu*) - SEED=xubuntu.$SUITE - ;; - *) - SEED=ubuntu.$SUITE - ;; - esac - (cd config/germinate-output && germinate --no-rdepends --no-installer \ - -S $SEEDMIRROR -m $MIRROR -d $SUITE -s $SEED \ - ${COMPONENTS:+-c "$COMPONENTS"} -a $ARCH) - UNWANTED_SEEDS="${LIVE_TASK:+$LIVE_TASK }boot installer required" for i in $UNWANTED_SEEDS; do UNWANTED_SEEDS="${UNWANTED_SEEDS:+$UNWANTED_SEEDS }$(inheritance $i)"