This patch just adds the generic support code: * CONF.sh: Add $(VARIANTS) configuration variable. * eash-build.sh: Add command line parameter to enable variants. * Makefile: Define VARIANT_xxx when preprocessing package list. * boot/?/common.sh: Add a function for checking if a variant is enabled. * generate_di_list: Allow variant overrides in udeb exclusion list.
Variant support is documented in docs/README.variants The intention is to use this support to add support for installing a Xen guest from an ISO image. Thanks to Frans Pop for suggesting the approach. --- CONF.sh | 3 ++ Makefile | 5 +++- docs/README.variants | 60 ++++++++++++++++++++++++++++++++++++++++++ easy-build.sh | 6 +++- tools/boot/squeeze/common.sh | 7 +++++ tools/generate_di_list | 18 ++++++++++-- 6 files changed, 94 insertions(+), 5 deletions(-) create mode 100644 docs/README.variants diff --git a/CONF.sh b/CONF.sh index 2cf848a..ae33fed 100644 --- a/CONF.sh +++ b/CONF.sh @@ -189,6 +189,9 @@ export DISKTYPE=CD # included. See tasks/README.tasksel for further info. export TASK_LANGLIST=tasksel_d-i.languages +# Extra variants to enable. See docs/README.variants for more information. +export VARIANTS= + # We don't want certain packages to take up space on CD1... #export EXCLUDE1=exclude # ...but they are okay for other CDs (UNEXCLUDEx == may be included diff --git a/Makefile b/Makefile index 1a9b377..e8f92a7 100755 --- a/Makefile +++ b/Makefile @@ -311,9 +311,12 @@ $(BDIR)/rawlist: ARCHDEFS="$$ARCHDEFS -D ARCH_$(subst -,_,$$ARCH)"; \ ARCHUNDEFS="$$ARCHUNDEFS -U $$ARCH"; \ done; \ + for VARIANT in $(VARIANTS); do \ + VARIANTDEFS="$$VARIANTDEFS -D VARIANT_$$VARIANT"; \ + done; \ if [ "$(SOURCEONLY)"x != "yes"x ] ; then \ cat $(TASKDIR)/$(TASK) | \ - cpp -nostdinc -nostdinc++ -P -undef $$ARCHDEFS \ + cpp -nostdinc -nostdinc++ -P -undef $$ARCHDEFS $$VARIANTDEFS\ $$ARCHUNDEFS -U i386 -U linux -U unix \ -DFORCENONUSONCD1=0 \ -I $(TASKDIR) - - >> $(BDIR)/rawlist; \ diff --git a/docs/README.variants b/docs/README.variants new file mode 100644 index 0000000..75499b8 --- /dev/null +++ b/docs/README.variants @@ -0,0 +1,60 @@ +Introduction +------------ + +Variants enable debian-cd to include extra functionality in a built +image which is somewhat orthogonal to the usual DISKTYPE and ARCH +configurations. + +Variants are enabled by setting the VARIANTS environment variable to a +space separated list of the variants to enable or by passing the -V +option (multiple times if desired) to the easy-build.sh script. + +Available Variants +------------------ + +Implementation +-------------- + +Variants impact several aspects of the debian-cd infrastructure: + + environment variable + -------------------- + + The $VARIANTS environment variable is available to any scripts etc + which are run as part of the build process and is a space separated + list of the variants which are enabled. + + In particular this maybe used by the per-archtecture + tools/boot/<distro>/boot-* scripts which make an image bootable on a + particular architecure. To facilitate this + tools/boot/<distro>/common.sh defines a function `variant_enabled' + which takes a variant name as an argument and returns true if that + variant is enabled. + + deb package lists + ----------------- + + A variant may wish to include extra .deb packages in the image. The + package lists are preprocessed using `cpp' as part of the build + process and a C-preprocessor variable `VARIANT_<x>' will be defined + to 1 for each variant which is enabled. + + udeb package lists + ------------------ + + Similarly a variant may which to include extra .udeb packages in the + image. The list of udebs to include in an image is generated using + tools/generate_di_list which reads one or more udeb exclude files + from data/<distribution>/*. The syntax of these exclude files allows + a udeb to be excluded or included based on which variants are + enabled. + + Each line in an exclude file specifies a glob pattern, a udeb whose + name matches the glob will _not_ be included in the image. After the + udeb glob each line can optionally contain on or more space + separated conditions. At least one of these conditions must be met + in order to exclude the udeb. A condition may either be: + - a positive `variant' condition, in which case the udeb is + excluded when that variant is enabled + - a negative `!variant' condition, in which case the udeb is + excluded when that variant is not enabled. diff --git a/easy-build.sh b/easy-build.sh index b6ce3be..ce9a078 100755 --- a/easy-build.sh +++ b/easy-build.sh @@ -9,6 +9,7 @@ show_usage() { echo "Usage: $(basename $0) [OPTIONS] BC|NETINST|CD|DVD [<ARCH> ...]" echo " Options:" echo " -d gnome|kde|lxde|xfce|light|all : desktop variant (task) to use" + echo " -V <variant> : extra image variants to enable" echo " -h help" } @@ -28,7 +29,8 @@ if [ $# -eq 0 ]; then fi desktop= -while getopts d:h OPT ; do +VARIANTS= +while getopts d:hV: OPT ; do case $OPT in d) case $OPTARG in @@ -41,6 +43,7 @@ while getopts d:h OPT ; do exit 1 ;; esac ;; + V) VARIANTS="$VARIANTS $OPTARG" ;; h) show_usage exit 0 @@ -53,6 +56,7 @@ while getopts d:h OPT ; do done shift $(($OPTIND - 1)) +export VARIANTS export DISKTYPE="$1" shift diff --git a/tools/boot/squeeze/common.sh b/tools/boot/squeeze/common.sh index 7735837..d3ccc00 100644 --- a/tools/boot/squeeze/common.sh +++ b/tools/boot/squeeze/common.sh @@ -48,3 +48,10 @@ add_mkisofs_opt() { echo -n "$NEW_OPT " >> $OPTS_FILE fi } + +variant_enabled() { + VARIANT=$1 + + echo ${VARIANTS} | grep -qw "${VARIANT}" + return $? +} diff --git a/tools/generate_di_list b/tools/generate_di_list index f148d62..8ee7349 100755 --- a/tools/generate_di_list +++ b/tools/generate_di_list @@ -18,6 +18,8 @@ if ( $ENV{ARCHES} ) { } @ARCHES = qw{i386 amd64} unless @ARCHES; +...@variants = split(" ", $ENV{VARIANTS}); + my $DATE=`date`; chomp $DATE; open(OUT, ">debian-installer") || die "write: $!"; @@ -78,9 +80,19 @@ sub read_exclude { chomp; s/^#.*//; next unless length; - $_=quotemeta($_); - $_=~s/\\\*/.*/g; - push @ret, $_; + my ($pkg,@cond) = split(" ", $_); + my $skip = 0; + foreach my $cond ( @cond ) { + if ($cond =~ /^!(.*)/) { + $skip = 1 if grep { $_ eq $1 } @VARIANTS; + } else { + $skip = 1 unless grep { $_ eq $cond } @VARIANTS; + } + } + next if $skip; + $pkg=quotemeta($pkg); + $pkg=~s/\\\*/.*/g; + push @ret, $pkg; } close IN; return @ret; -- 1.6.3.3 -- To UNSUBSCRIBE, email to debian-boot-requ...@lists.debian.org with a subject of "unsubscribe". Trouble? Contact listmas...@lists.debian.org