Support for positive and negative sublayers

Calculate positive and negative package lists for sublayers
sil2100/core18-pi3-arm64
Jean-Baptiste Lallement 6 years ago
parent a9908e0c9d
commit f3dadf1091

@ -311,7 +311,13 @@ case $PROJECT in
layered) layered)
PASSES="install-minimal install live" PASSES="install-minimal install live"
add_task install-minimal minimal standard ubuntu-desktop-minimal add_task install-minimal minimal standard ubuntu-desktop-minimal
# LANG PASS for minimal
add_layered_pass_delta install-minimal desktop-minimal-default-languages '^desktop-minimal-(?!default-languages)[^.]+$'
add_layered_pass_delta install-minimal desktop-minimal-default-languages 'nolangpacks' # none (if no default langpack is selected)
add_task install ubuntu-desktop add_task install ubuntu-desktop
# LANG PASS for install
add_layered_pass_delta install desktop-default-languages '^desktop-(?!default-languages|minimal|common)[^.]+$'
add_layered_pass_delta install desktop-default-languages 'nolangpacks' # none (if no default langpack is selected)
LIVE_TASK='ubuntu-live' LIVE_TASK='ubuntu-live'
;; ;;
*) *)

@ -643,3 +643,59 @@ add_package ()
echo "$pkg" >> "config/package-lists/livecd-rootfs.list.chroot_$pass" echo "$pkg" >> "config/package-lists/livecd-rootfs.list.chroot_$pass"
done done
} }
list_packages_from_seed () {
# Store all packages for a given seed, including its seed dependency
# $1: Name of the seed to expand to a package list
local all_seeds="$(inheritance $1)"
for seed in $all_seeds; do
head -n-2 config/germinate-output/${seed}.seed|tail -n+3|awk '{print $1}'
done|sort -u
}
add_layered_pass() {
# Add a layer to an existing pass based on seeds matching a regexp
# $1 base pass
# $2 seeds (regexp)
for seed in $(ls config/germinate-output/|grep -P "$2"); do
pass=${1}_${seed}
list_packages_from_seed ${seed} >> config/package-lists/livecd-rootfs.list.chroot_$pass
done
}
add_layered_pass_delta() {
# Add a layer to an existing pass based on delta between seeds matching a regexp and a base seed
# $1 base pass
# $2 base seed
# $3 seeds to remove from base seed (regexp). If empty, a no-<base-seed> sublayer is generated.
local seed_regexp="$3"
if [ -z "${seed_regexp}" ]; then
substract_package_lists ${2} "" >> config/package-lists/livecd-rootfs.removal-list.chroot_${1}_no-{$2}
return
fi
for seed in $(ls config/germinate-output/|grep -P "$seed_regexp"); do
pass=${1}_${seed}
substract_package_lists ${2} ${seed} >> config/package-lists/livecd-rootfs.removal-list.chroot_$pass
done
}
substract_package_lists() {
# Substract a package list from another
#
# $1 source package list
# $2 Package list to substract from source package list
local list1=$(mktemp)
local list2=$(mktemp)
list_packages_from_seed $1 > list1
list_packages_from_seed $2 > list2
comm -23 list1 list2
rm list1
rm list2
}

@ -191,7 +191,7 @@ create_chroot_pass() {
# Handle direct sublayer of current one # Handle direct sublayer of current one
# Extract the name of the pass corresponding to the sublayer # Extract the name of the pass corresponding to the sublayer
for subpass in $(ls config/package-lists/*.list.chroot_${pass}_* 2>/dev/null | sed -e "s/.*list\.chroot_\(${pass}_[^_]\+\).*/\1/"); do for subpass in $(ls config/package-lists/*list.chroot_${pass}_* 2>/dev/null | sed -e "s/.*list\.chroot_\(${pass}_[^_]\+\).*/\1/"); do
lowerlayers_for_subpass="chroot.${pass}:${lowerlayers}" lowerlayers_for_subpass="chroot.${pass}:${lowerlayers}"
lowerlayers_for_subpass="${lowerlayers_for_subpass%:}" lowerlayers_for_subpass="${lowerlayers_for_subpass%:}"
create_chroot_pass "${subpass}" "${pass}" "${lowerlayers_for_subpass}" "" ${*} create_chroot_pass "${subpass}" "${pass}" "${lowerlayers_for_subpass}" "" ${*}

Loading…
Cancel
Save