|
|
@ -204,46 +204,67 @@ add_snap ()
|
|
|
|
done
|
|
|
|
done
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
add_packages_from_seed_regexp () {
|
|
|
|
derive_language_layers () {
|
|
|
|
# Creates one or more passes, depending on base_pass_name, from any seeds matching seed_regexp.
|
|
|
|
# create special layers for each default language
|
|
|
|
# $1 base pass
|
|
|
|
#
|
|
|
|
# $2 seeds (regexp)
|
|
|
|
|
|
|
|
local pass
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
_check_immutable_passes_to_layers
|
|
|
|
|
|
|
|
_check_layers_only_API "add_packages_from_seed_regexp"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
for seed in $(ls config/germinate-output/|grep -P "$2"); do
|
|
|
|
|
|
|
|
pass=${1}.${seed}
|
|
|
|
|
|
|
|
_register_pass "$pass"
|
|
|
|
|
|
|
|
list_packages_from_seed ${seed} >> config/package-lists/livecd-rootfs.list.chroot_$pass
|
|
|
|
|
|
|
|
done
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
remove_packages_from_seed_regexp() {
|
|
|
|
|
|
|
|
# Creates one or more passes, based on base_pass_name, from any seed matching seed_regexp.
|
|
|
|
|
|
|
|
# This package list is a list of packages to remove (and included in a previous dependent
|
|
|
|
|
|
|
|
# pass then), resulting from base_seed - {current_seed_match_from_regexp}.
|
|
|
|
|
|
|
|
# $1 base pass
|
|
|
|
# $1 base pass
|
|
|
|
# $2 base seed
|
|
|
|
# $2 base seed (without any languages)
|
|
|
|
# $3 seeds to remove from base seed (regexp). If empty, a no-<base-seed> sublayer is generated.
|
|
|
|
# $3 default language seed
|
|
|
|
local pass
|
|
|
|
# e.g.:
|
|
|
|
|
|
|
|
# derive_language_layers minimal desktop-minimal desktop-minimal-default-languages
|
|
|
|
|
|
|
|
# derive_language_layers minimal.standard desktop desktop-default-languages
|
|
|
|
|
|
|
|
#
|
|
|
|
|
|
|
|
# The way this works is perhaps a little counterintuitive.
|
|
|
|
|
|
|
|
#
|
|
|
|
|
|
|
|
# The first goal here is that the installed system should contain
|
|
|
|
|
|
|
|
# language support for the language the user selected. One way to do
|
|
|
|
|
|
|
|
# this using layers would be to have a layer that contained no
|
|
|
|
|
|
|
|
# language support and a derived layer for each (default) language. So
|
|
|
|
|
|
|
|
# something like:
|
|
|
|
|
|
|
|
#
|
|
|
|
|
|
|
|
# filesystem.squashfs (contains no language support)
|
|
|
|
|
|
|
|
# filesystem.en.squashfs (contains English language support)
|
|
|
|
|
|
|
|
# filesystem.fr.squashfs (contains French language support)
|
|
|
|
|
|
|
|
# ...
|
|
|
|
|
|
|
|
#
|
|
|
|
|
|
|
|
# Then if the user selects French as their language, we just copy
|
|
|
|
|
|
|
|
# filesystem.fr.squashfs to the target system.
|
|
|
|
|
|
|
|
#
|
|
|
|
|
|
|
|
# But we want the live session to support these languages too and
|
|
|
|
|
|
|
|
# simply adding all the language support to the live layer would mean
|
|
|
|
|
|
|
|
# we'd have the each language's support files on the ISO twice (once
|
|
|
|
|
|
|
|
# in filesystem.$LANG.squashfs and once in filesystem.live.squashfs).
|
|
|
|
|
|
|
|
#
|
|
|
|
|
|
|
|
# So what is done instead is that we add support for all the default
|
|
|
|
|
|
|
|
# languages to the base layer and then create derived layers that
|
|
|
|
|
|
|
|
# _remove_ support for all languages but the desired language and
|
|
|
|
|
|
|
|
# because file removals are cheap to represent in overlays, this all
|
|
|
|
|
|
|
|
# ends up taking way less space, and filesystem.live.squashfs gets
|
|
|
|
|
|
|
|
# support for all languages from the base layer. We also create a
|
|
|
|
|
|
|
|
# layer than has support for all languages removed, which can be used
|
|
|
|
|
|
|
|
# for the base of an install for a non-default language.
|
|
|
|
|
|
|
|
local pass base_pass=$1 no_lang_seed=$2 def_lang_seed=$3
|
|
|
|
_check_immutable_passes_to_layers
|
|
|
|
_check_immutable_passes_to_layers
|
|
|
|
_check_layers_only_API "remove_packages_from_seed_regexp"
|
|
|
|
_check_layers_only_API "derive_language_layers"
|
|
|
|
|
|
|
|
|
|
|
|
local seed_regexp="$3"
|
|
|
|
pass=$base_pass.no-languages
|
|
|
|
if [ -z "${seed_regexp}" ]; then
|
|
|
|
_register_pass ${pass}
|
|
|
|
pass="${1}.no-${2}"
|
|
|
|
# Remove all packages from the default language seed that are not in
|
|
|
|
_register_pass "$pass"
|
|
|
|
# the no_lang_seed from the no-languages layer.
|
|
|
|
subtract_package_lists ${2} "desktop-minimal" >> config/package-lists/livecd-rootfs.removal-list.chroot_$pass
|
|
|
|
subtract_package_lists ${def_lang_seed} ${no_lang_seed} >> config/package-lists/livecd-rootfs.removal-list.chroot_${pass}
|
|
|
|
return
|
|
|
|
|
|
|
|
fi
|
|
|
|
# We assume any seed name of the form ${no_lang_seed}-${foo} where
|
|
|
|
|
|
|
|
# ${foo} is only two or three characters long is a default language
|
|
|
|
for seed in $(ls config/germinate-output/|grep -P "$seed_regexp"); do
|
|
|
|
# seed.
|
|
|
|
pass="${1}.${seed}"
|
|
|
|
seed_regex="${no_lang_seed}"'-[^-.]{2,3}$'
|
|
|
|
_register_pass "$pass"
|
|
|
|
|
|
|
|
subtract_package_lists ${2} ${seed} >> config/package-lists/livecd-rootfs.removal-list.chroot_$pass
|
|
|
|
for seed in $(ls config/germinate-output | grep -E "${seed_regex}"); do
|
|
|
|
|
|
|
|
lang=$(echo "${seed}" | grep -oE '[^-.]{2,3}$')
|
|
|
|
|
|
|
|
pass="${1}.${lang}"
|
|
|
|
|
|
|
|
_register_pass ${pass}
|
|
|
|
|
|
|
|
# Remove packages from the default language seed that are not
|
|
|
|
|
|
|
|
# in the language specific seed from the language specific layer.
|
|
|
|
|
|
|
|
subtract_package_lists ${def_lang_seed} ${seed} >> config/package-lists/livecd-rootfs.removal-list.chroot_$pass
|
|
|
|
done
|
|
|
|
done
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
@ -629,11 +650,8 @@ case $PROJECT in
|
|
|
|
remove_package minimal.standard.live ubiquity-frontend-gtk
|
|
|
|
remove_package minimal.standard.live ubiquity-frontend-gtk
|
|
|
|
add_snap minimal.standard.live ubuntu-desktop-installer/classic
|
|
|
|
add_snap minimal.standard.live ubuntu-desktop-installer/classic
|
|
|
|
|
|
|
|
|
|
|
|
# LANG PASS for minimal and standard
|
|
|
|
derive_language_layers minimal desktop-minimal desktop-minimal-default-languages
|
|
|
|
remove_packages_from_seed_regexp minimal desktop-minimal-default-languages '^desktop-minimal-(?!default-languages)[^.]+$'
|
|
|
|
derive_language_layers minimal.standard desktop desktop-default-languages
|
|
|
|
remove_packages_from_seed_regexp minimal desktop-minimal-default-languages '' # none (if no default langpack is selected)
|
|
|
|
|
|
|
|
remove_packages_from_seed_regexp minimal.standard desktop-default-languages '^desktop-(?!default-languages|minimal|common)[^.]+$'
|
|
|
|
|
|
|
|
remove_packages_from_seed_regexp minimal.standard desktop-default-languages '' # none (if no default langpack is selected)
|
|
|
|
|
|
|
|
;;
|
|
|
|
;;
|
|
|
|
|
|
|
|
|
|
|
|
desktop-preinstalled)
|
|
|
|
desktop-preinstalled)
|
|
|
|