* It seems the changes for 3.0.0 completely broke extranonfree

support. Re-add it.
This commit is contained in:
Steve McIntyre 2007-04-19 23:38:29 +00:00
parent 4a72ff11a1
commit 0d3c11551e
7 changed files with 130 additions and 47 deletions

View File

@ -58,6 +58,7 @@ make_image=$(BASEDIR)/tools/make_image
merge_package_lists=$(BASEDIR)/tools/merge_package_lists merge_package_lists=$(BASEDIR)/tools/merge_package_lists
update_popcon=$(BASEDIR)/tools/update_popcon update_popcon=$(BASEDIR)/tools/update_popcon
update_tasks=$(BASEDIR)/tools/update_tasks update_tasks=$(BASEDIR)/tools/update_tasks
grab_source_list=$(BASEDIR)/tools/grab_source_list
BDIR=$(TDIR)/$(CODENAME) BDIR=$(TDIR)/$(CODENAME)
ADIR=$(APTTMP) ADIR=$(APTTMP)
@ -350,7 +351,7 @@ image-trees: ok genlist
ARCH=$$ARCH $(list2cds) $(BDIR)/list $(SIZELIMIT); \ ARCH=$$ARCH $(list2cds) $(BDIR)/list $(SIZELIMIT); \
done done
$(Q)if [ "$(SOURCEONLY)"x = "yes"x ] ; then \ $(Q)if [ "$(SOURCEONLY)"x = "yes"x ] ; then \
awk '{printf("source:%s\n",$$0)}' $(BDIR)/list > $(BDIR)/packages; \ $(grab_source_list) $(BDIR) $(ADIR) $(BDIR)/list $(BDIR)/packages; \
else \ else \
$(merge_package_lists) $(BDIR) $(ADIR) "$(ARCHES)" $(BDIR)/packages; \ $(merge_package_lists) $(BDIR) $(ADIR) "$(ARCHES)" $(BDIR)/packages; \
fi fi

4
debian/changelog vendored
View File

@ -16,8 +16,10 @@ debian-cd (3.0.3) UNRELEASED; urgency=high
* Removed m68k from the list of arches in generate_di+k_list and * Removed m68k from the list of arches in generate_di+k_list and
generate_di_list to reduce warnings. generate_di_list to reduce warnings.
* Updated comments in update-cd; potato was a while ago! * Updated comments in update-cd; potato was a while ago!
* It seems the changes for 3.0.0 completely broke extranonfree
support. Re-add it.
-- Frans Pop <fjp@debian.org> Wed, 11 Apr 2007 01:30:06 +0200 -- Steve McIntyre <93sam@debian.org> Fri, 20 Apr 2007 00:37:09 +0100
debian-cd (3.0.2) unstable; urgency=high debian-cd (3.0.2) unstable; urgency=high

View File

@ -306,7 +306,7 @@ sub add_packages {
} }
my $pkg = shift; my $pkg = shift;
my ($arch, $pkgname) = split /:/, $pkg; my ($arch, $component, $pkgname) = split /:/, $pkg;
msg_ap(0, "Looking at $pkg: arch $arch, package $pkgname, rollback $rollback\n"); msg_ap(0, "Looking at $pkg: arch $arch, package $pkgname, rollback $rollback\n");

50
tools/grab_source_list Executable file
View File

@ -0,0 +1,50 @@
#!/bin/sh
BDIR=$1
ADIR=$2
IN="$3"
OUT="$4"
echo "DONEDONE" > $BDIR/DONE
awk '
/^Package:/ {
srcname=$2
srcs_done++
}
/^Section: non-free/ {
component[srcname]="non-free"
next
}
/^Section: contrib/ {
component[srcname]="contrib"
next
}
/^Section:/ {
component[srcname]="main"
next
}
/^DONEDONE/ {
parsed=1
next
}
/.*/ {
if (parsed) {
printf("source:%s:%s\n", component[$0], $0)
}
}
' $ADIR/$CODENAME-source/apt-state/lists/*Sources $BDIR/DONE $IN > $BDIR/list.mid
if [ "$NONFREE"x = "1"x ] ; then
cat $BDIR/list.mid > $OUT
else
grep -v :non-free: $BDIR/list.mid > $OUT
fi
if [ "$EXTRANONFREE"x = "1"x ] ; then
grep :non-free: $BDIR/list.mid >> $OUT
fi

View File

@ -16,8 +16,6 @@ my $limit = $ENV{'SIZELIMIT1'} || $deflimit;
my $nonfree = $ENV{'NONFREE'} || 0; my $nonfree = $ENV{'NONFREE'} || 0;
my $extranonfree = $ENV{'EXTRANONFREE'} || 0; my $extranonfree = $ENV{'EXTRANONFREE'} || 0;
my $nonus = $ENV{'NONUS'} || 0;
my $forcenonusoncd1 = $ENV{'FORCENONUSONCD1'} || 0;
my $local = $ENV{'LOCAL'} || 0; my $local = $ENV{'LOCAL'} || 0;
my $complete = $ENV{'COMPLETE'} || 0; my $complete = $ENV{'COMPLETE'} || 0;
my $exclude = "$list.exclude"; my $exclude = "$list.exclude";
@ -60,8 +58,6 @@ msg(1, "Complete selected packages with all the rest: ");
msg(1, yesno($complete)."\n"); msg(1, yesno($complete)."\n");
msg(1, "Include non-free packages: "); msg(1, "Include non-free packages: ");
msg(1, yesno($nonfree)."\n"); msg(1, yesno($nonfree)."\n");
msg(1, "Include non-US packages: ");
msg(1, yesno($nonus)."\n");
msg(1, "====================================================================== msg(1, "======================================================================
"); ");
@ -83,6 +79,14 @@ while (defined($_=<AVAIL>)) {
$packages{$p}{"Suggests"} = []; $packages{$p}{"Suggests"} = [];
$packages{$p}{"Recommends"} = []; $packages{$p}{"Recommends"} = [];
$packages{$p}{"IsUdeb"} = ($packages{$p}{"Filename"} =~ /.udeb$/) ? 1 : 0; $packages{$p}{"IsUdeb"} = ($packages{$p}{"Filename"} =~ /.udeb$/) ? 1 : 0;
if ($packages{$p}{"Section"} =~ /contrib\//) {
$packages{$p}{"Component"} = "contrib";
} elsif ($packages{$p}{"Section"} =~ /non-free\//) {
$packages{$p}{"Component"} = "non-free";
} else {
$packages{$p}{"Component"} = "main";
}
} }
close AVAIL or die "apt-cache failed : $@ ($!)\n"; close AVAIL or die "apt-cache failed : $@ ($!)\n";
$/ = $oldrs; $/ = $oldrs;
@ -91,7 +95,7 @@ $/ = $oldrs;
%excluded = %included; %excluded = %included;
my $count_excl = 0; my $count_excl = 0;
# Now exclude packages because of the non-free and non-us rules # Now exclude packages because of the non-free rules
if (not $nonfree) { if (not $nonfree) {
foreach (grep { $packages{$_}{"Section"} =~ /non-free/ } foreach (grep { $packages{$_}{"Section"} =~ /non-free/ }
(keys %packages)) { (keys %packages)) {
@ -99,13 +103,6 @@ if (not $nonfree) {
$count_excl++; $count_excl++;
} }
} }
if (not $nonus) {
foreach (grep { $packages{$_}{"Section"} =~ /non-US/ }
(keys %packages)) {
$excluded{$_} = 'nonus';
$count_excl++;
}
}
msg(1, "Statistics: msg(1, "Statistics:
Number of packages: @{ [scalar(keys %packages)] } Number of packages: @{ [scalar(keys %packages)] }
@ -223,6 +220,8 @@ if ($extranonfree and (! $nonfree))
{ {
my ($p, @toinclude); my ($p, @toinclude);
msg(0, " Adding non-free packages now\n");
# Finally accept non-free packages ... # Finally accept non-free packages ...
foreach $p (grep { $excluded{$_} eq "nonfree" } (keys %excluded)) foreach $p (grep { $excluded{$_} eq "nonfree" } (keys %excluded))
{ {
@ -230,16 +229,10 @@ if ($extranonfree and (! $nonfree))
push @toinclude, $p; push @toinclude, $p;
} }
# Start a new CD
$cd++;
$cd_size = 0;
$limit = $ENV{"SIZELIMIT$cd"} || $deflimit;
msg(0, "Limit for non-free CD $cd is $limit.\n");
# Include non-free packages # Include non-free packages
foreach $p (@toinclude) foreach $p (@toinclude)
{ {
add_package($p, 1, 1); add_package(lc $p, 1, 1);
} }
# If a contrib package was listed in the list of packages to # If a contrib package was listed in the list of packages to
@ -259,7 +252,11 @@ if ($extranonfree and (! $nonfree))
"(ignored)\n"); "(ignored)\n");
next; next;
} }
add_package (lc $_, 1, 1); if ($packages{lc $p}{"IsUdeb"}) {
msg(2, " Ignoring udeb $p ...\n");
} else {
add_package (lc $_, 1, 1);
}
} }
close LIST; close LIST;
@ -272,8 +269,12 @@ if ($extranonfree and (! $nonfree))
grep { not ($included{$_} or $excluded{$_}) } grep { not ($included{$_} or $excluded{$_}) }
keys %packages) keys %packages)
{ {
add_package ($p, 0, 0); if ($packages{lc $p}{"IsUdeb"}) {
} msg(2, " Ignoring udeb $p ...\n");
} else {
add_package (lc $p, 0, 0);
}
}
} }
# msg(0, "CD $cd will only be filled with $cd_size bytes ...\n"); # msg(0, "CD $cd will only be filled with $cd_size bytes ...\n");
@ -297,7 +298,8 @@ foreach (sort { $a <=> $b } keys %cds) {
open(CDLIST, "> $dir/packages.$arch") open(CDLIST, "> $dir/packages.$arch")
|| die "Can't write in $dir/$_.packages.$arch: $!\n"; || die "Can't write in $dir/$_.packages.$arch: $!\n";
foreach (@{$cds{$_}}) { foreach (@{$cds{$_}}) {
print CDLIST "$arch:$_\n"; my $component = $packages{$_}{"Component"};
print CDLIST "$arch:$component:$_\n";
$count++; $count++;
} }
close CDLIST; close CDLIST;

View File

@ -9,7 +9,7 @@ use Digest::MD5;
use File::stat; use File::stat;
use File::Find; use File::Find;
my ($basedir, $mirror, $tdir, $codename, $archlist, $mkisofs, $maxcds); my ($basedir, $mirror, $tdir, $codename, $archlist, $mkisofs, $maxcds, $extranonfree);
my $mkisofs_opts = ""; my $mkisofs_opts = "";
my $mkisofs_dirs = ""; my $mkisofs_dirs = "";
my (@arches, @arches_nosrc, @overflowlist, @pkgs_added); my (@arches, @arches_nosrc, @overflowlist, @pkgs_added);
@ -34,6 +34,12 @@ if (defined($ENV{'MAXCDS'})) {
} else { } else {
$maxcds = 0; $maxcds = 0;
} }
if (defined($ENV{'EXTRANONFREE'})) {
$extranonfree = $ENV{'EXTRANONFREE'};
} else {
$extranonfree = 1;
}
my $list = "$tdir/list"; my $list = "$tdir/list";
my $list_ex = "$tdir/list.exclude"; my $list_ex = "$tdir/list.exclude";
@ -157,7 +163,7 @@ while (defined (my $pkg = <INLIST>)) {
# lists intersect and we should re-include some packages # lists intersect and we should re-include some packages
if (scalar @unexclude_packages && scalar @excluded_package_list) { if (scalar @unexclude_packages && scalar @excluded_package_list) {
foreach my $reinclude_pkg (@excluded_package_list) { foreach my $reinclude_pkg (@excluded_package_list) {
my ($arch, $pkgname) = split /:/, $reinclude_pkg; my ($arch, $component, $pkgname) = split /:/, $reinclude_pkg;
foreach my $entry (@unexclude_packages) { foreach my $entry (@unexclude_packages) {
if (($pkgname =~ /^\Q$entry\E$/m)) { if (($pkgname =~ /^\Q$entry\E$/m)) {
print LOG "Re-including $reinclude_pkg due to match on \"\^$entry\$\"\n"; print LOG "Re-including $reinclude_pkg due to match on \"\^$entry\$\"\n";
@ -179,14 +185,23 @@ while (defined (my $pkg = <INLIST>)) {
$pkgs_this_cd++; $pkgs_this_cd++;
$pkgs_done++; $pkgs_done++;
} }
} } # end of creating new CD dir
if (should_exclude_package($pkg)) { if (should_exclude_package($pkg)) {
push(@excluded_package_list, $pkg); push(@excluded_package_list, $pkg);
} elsif (should_start_extra_nonfree($pkg)) {
print LOG "Starting on extra non-free CDs\n";
finish_disc($cddir, "");
# And reset, to start the next disc
$size = 0;
$disknum++;
undef(@pkgs_added);
# Put this package first on the next disc
push (@overflowlist, $pkg);
} else { } else {
$guess_size = int($hfs_mult * add_packages($cddir, $pkg)); $guess_size = int($hfs_mult * add_packages($cddir, $pkg));
$size += $guess_size; $size += $guess_size;
push (@pkgs_added, $pkg); push (@pkgs_added, $pkg);
print LOG "CD $disknum: GUESS_TOTAL is $size after adding $pkg\n"; print LOG "CD $disknum: GUESS_TOTAL is $size after adding $pkg\n";
if (($size > $maxdiskblocks) || if (($size > $maxdiskblocks) ||
(($size > $size_swap_check) && (($size > $size_swap_check) &&
@ -197,22 +212,22 @@ while (defined (my $pkg = <INLIST>)) {
print LOG "CD $disknum: Real current size is $size blocks after adding $pkg\n"; print LOG "CD $disknum: Real current size is $size blocks after adding $pkg\n";
} }
if ($size > $maxdiskblocks) { if ($size > $maxdiskblocks) {
while ($size > $maxdiskblocks) { while ($size > $maxdiskblocks) {
$pkg = pop(@pkgs_added); $pkg = pop(@pkgs_added);
print LOG "CD $disknum over-full ($size > $maxdiskblocks). Rollback!\n"; print LOG "CD $disknum over-full ($size > $maxdiskblocks). Rollback!\n";
$guess_size = int($hfs_mult * add_packages("--rollback", $cddir, $pkg)); $guess_size = int($hfs_mult * add_packages("--rollback", $cddir, $pkg));
$size=`$size_check $cddir`; $size=`$size_check $cddir`;
chomp $size; chomp $size;
print LOG "CD $disknum: Real current size is $size blocks after rolling back $pkg\n"; print LOG "CD $disknum: Real current size is $size blocks after rolling back $pkg\n";
# Put this package first on the next disc # Put this package first on the next disc
push (@overflowlist, $pkg); push (@overflowlist, $pkg);
} }
finish_disc($cddir, ""); finish_disc($cddir, "");
# And reset, to start the next disc # And reset, to start the next disc
$size = 0; $size = 0;
$disknum++; $disknum++;
undef(@pkgs_added); undef(@pkgs_added);
} else { } else {
$pkgs_this_cd++; $pkgs_this_cd++;
$pkgs_done++; $pkgs_done++;
@ -237,9 +252,21 @@ close(LOG);
# Local helper functions # Local helper functions
# #
############################################# #############################################
sub should_start_extra_nonfree {
my $pkg = shift;
my ($arch, $component, $pkgname) = split /:/, $pkg;
if ( ($component eq "non-free") && $extranonfree) {
$extranonfree = 0; # Flag that we don't need to start new next time!
return 1;
}
return 0;
}
sub should_exclude_package { sub should_exclude_package {
my $pkg = shift; my $pkg = shift;
my ($arch, $pkgname) = split /:/, $pkg; my ($arch, $component, $pkgname) = split /:/, $pkg;
my $should_exclude = 0; my $should_exclude = 0;
foreach my $entry (@exclude_packages) { foreach my $entry (@exclude_packages) {

View File

@ -10,7 +10,7 @@
# #
# expects multiple files containing lines of the form, one arch per file # expects multiple files containing lines of the form, one arch per file
# #
# <arch>:<pkgname> # <arch>:<component>:<pkgname>
# #
# and will output similar # and will output similar
# #
@ -89,7 +89,8 @@ if [ $source = "yes" ] ; then
if (parsed) { if (parsed) {
split($0,fields,":") split($0,fields,":")
arch=fields[1] arch=fields[1]
pkg=fields[2] component=fields[2]
pkg=fields[3]
source=bin2src[pkg] source=bin2src[pkg]
if (!included[source]) { if (!included[source]) {
printf("# Adding source %s at %d because of %s:%s\n", printf("# Adding source %s at %d because of %s:%s\n",
@ -129,12 +130,12 @@ echo "# Ending merge pass 1 at "`date` >> $BDIR/list.mid
# again # again
grep -v ^# $BDIR/list.mid | awk -F : ' grep -v ^# $BDIR/list.mid | awk -F : '
{ {
if (!($3 in add)) if (!($4 in add))
{ {
pkgname[number_packages++] = $3 pkgname[number_packages++] = $4
} }
gsub("aaaaaaaaaaaaaaaaaa", "source", $2) # Undo the source sorting hack gsub("aaaaaaaaaaaaaaaaaa", "source", $2) # Undo the source sorting hack
add[$3] = add[$3] $2 ":" $3 " " add[$4] = add[$4] $2 ":" $3 ":" $4 " "
} }
END { END {
for (i = 0; i < number_packages; i++) for (i = 0; i < number_packages; i++)