Compare commits
3 commits
3db3779b6a
...
1dbea10f6b
Author | SHA1 | Date | |
---|---|---|---|
1dbea10f6b | |||
0d5e05572f | |||
f27ed490d6 |
4 changed files with 44 additions and 36 deletions
|
@ -358,3 +358,7 @@ Needs-QEMU: true
|
||||||
Test: jessie-or-older
|
Test: jessie-or-older
|
||||||
Needs-QEMU: true
|
Needs-QEMU: true
|
||||||
Variants: essential apt minbase
|
Variants: essential apt minbase
|
||||||
|
|
||||||
|
Test: apt-patterns
|
||||||
|
|
||||||
|
Test: apt-patterns-custom
|
||||||
|
|
57
mmdebstrap
57
mmdebstrap
|
@ -2374,18 +2374,7 @@ sub run_download() {
|
||||||
info "nothing to download -- skipping...";
|
info "nothing to download -- skipping...";
|
||||||
return ([], \@cached_debs);
|
return ([], \@cached_debs);
|
||||||
}
|
}
|
||||||
my @apt_argv = ('install');
|
my @apt_argv = ('install', @{ $options->{include} });
|
||||||
for my $incl (@{ $options->{include} }) {
|
|
||||||
for my $pkg (split /[,\s]+/, $incl) {
|
|
||||||
# strip leading and trailing whitespace
|
|
||||||
$pkg =~ s/^\s+|\s+$//g;
|
|
||||||
# skip if the remainder is an empty string
|
|
||||||
if ($pkg eq '') {
|
|
||||||
next;
|
|
||||||
}
|
|
||||||
push @apt_argv, $pkg;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@dl_debs = run_apt_download_progress({
|
@dl_debs = run_apt_download_progress({
|
||||||
APT_ARGV => [@apt_argv],
|
APT_ARGV => [@apt_argv],
|
||||||
|
@ -2913,20 +2902,9 @@ sub run_essential() {
|
||||||
sub run_install() {
|
sub run_install() {
|
||||||
my $options = shift;
|
my $options = shift;
|
||||||
|
|
||||||
my %pkgs_to_install;
|
my @pkgs_to_install = (@{ $options->{include} });
|
||||||
for my $incl (@{ $options->{include} }) {
|
|
||||||
for my $pkg (split /[,\s]+/, $incl) {
|
|
||||||
# strip leading and trailing whitespace
|
|
||||||
$pkg =~ s/^\s+|\s+$//g;
|
|
||||||
# skip if the remainder is an empty string
|
|
||||||
if ($pkg eq '') {
|
|
||||||
next;
|
|
||||||
}
|
|
||||||
$pkgs_to_install{$pkg} = ();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if ($options->{variant} eq 'buildd') {
|
if ($options->{variant} eq 'buildd') {
|
||||||
$pkgs_to_install{'build-essential'} = ();
|
push @pkgs_to_install, 'build-essential';
|
||||||
}
|
}
|
||||||
if (any { $_ eq $options->{variant} }
|
if (any { $_ eq $options->{variant} }
|
||||||
('required', 'important', 'standard', 'buildd')) {
|
('required', 'important', 'standard', 'buildd')) {
|
||||||
|
@ -2943,7 +2921,8 @@ sub run_install() {
|
||||||
$priority = '?and(?or(~prequired,~pimportant,~pstandard),'
|
$priority = '?and(?or(~prequired,~pimportant,~pstandard),'
|
||||||
. '?not(?essential))';
|
. '?not(?essential))';
|
||||||
}
|
}
|
||||||
$pkgs_to_install{
|
push @pkgs_to_install,
|
||||||
|
(
|
||||||
"?narrow("
|
"?narrow("
|
||||||
. (
|
. (
|
||||||
length($options->{suite})
|
length($options->{suite})
|
||||||
|
@ -2955,9 +2934,8 @@ sub run_install() {
|
||||||
)
|
)
|
||||||
. "?architecture($options->{nativearch}),"
|
. "?architecture($options->{nativearch}),"
|
||||||
. "$priority)"
|
. "$priority)"
|
||||||
} = ();
|
);
|
||||||
}
|
}
|
||||||
my @pkgs_to_install = keys %pkgs_to_install;
|
|
||||||
|
|
||||||
if ($options->{mode} eq 'chrootless') {
|
if ($options->{mode} eq 'chrootless') {
|
||||||
if (scalar @pkgs_to_install > 0) {
|
if (scalar @pkgs_to_install > 0) {
|
||||||
|
@ -5134,12 +5112,16 @@ sub main() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
my $compstr = join " ", @components;
|
my $compstr = join " ", @components;
|
||||||
# if the currently selected apt keyrings do not contain the
|
# From the suite name we can maybe infer which key we need. If we
|
||||||
# necessary key material for the chosen suite, then attempt adding
|
# can infer this information, then we need to check whether the
|
||||||
# a signed-by option
|
# currently running apt actually trusts this key or not. If it
|
||||||
|
# doesn't, then we need to add a signed-by line to the sources.list
|
||||||
|
# entry.
|
||||||
my $signedby = '';
|
my $signedby = '';
|
||||||
my %suite_by_vendor = get_suite_by_vendor();
|
my %suite_by_vendor = get_suite_by_vendor();
|
||||||
{
|
if (any { $_ eq 'check/signed-by' } @{ $options->{skip} }) {
|
||||||
|
info "skipping check/signed-by as requested";
|
||||||
|
} else {
|
||||||
my $keyring
|
my $keyring
|
||||||
= get_keyring_by_suite($options->{suite}, \%suite_by_vendor);
|
= get_keyring_by_suite($options->{suite}, \%suite_by_vendor);
|
||||||
if (!defined $keyring) {
|
if (!defined $keyring) {
|
||||||
|
@ -5256,9 +5238,9 @@ sub main() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
close $fh;
|
close $fh;
|
||||||
}
|
|
||||||
if ($? != 0) {
|
if ($? != 0) {
|
||||||
error "gpg failed";
|
warning "gpg failed -- cannot infer signed-by value";
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (scalar @ARGV > 0) {
|
if (scalar @ARGV > 0) {
|
||||||
|
@ -6965,6 +6947,8 @@ Upon startup, several checks are carried out, like:
|
||||||
|
|
||||||
=item * whether the output directory is empty. This check can be disabled using B<--skip=check/empty>
|
=item * whether the output directory is empty. This check can be disabled using B<--skip=check/empty>
|
||||||
|
|
||||||
|
=item * whether adding a C<signed-by> to C<apt/sources.list> is necessary. This requires gpg and can be disabled using B<--skip=check/signed-by>
|
||||||
|
|
||||||
=back
|
=back
|
||||||
|
|
||||||
=item B<setup>
|
=item B<setup>
|
||||||
|
@ -7004,7 +6988,10 @@ variant uses the fact that libapt treats the C<apt> packages as implicitly
|
||||||
essential to download only all C<Essential:yes> packages plus apt using
|
essential to download only all C<Essential:yes> packages plus apt using
|
||||||
C<apt-get dist-upgrade>. In the remaining variants, all Packages files
|
C<apt-get dist-upgrade>. In the remaining variants, all Packages files
|
||||||
downloaded by the B<update> step are inspected to find the C<Essential:yes>
|
downloaded by the B<update> step are inspected to find the C<Essential:yes>
|
||||||
package set as well as all packages of the required priority.
|
package set as well as all packages of the required priority. If I<SUITE> is a
|
||||||
|
non-empty string, then only packages from the archive with suite or codename
|
||||||
|
matching I<SUITE> will be considered for selection of C<Essential:yes>
|
||||||
|
packages.
|
||||||
|
|
||||||
=item B<mount>
|
=item B<mount>
|
||||||
|
|
||||||
|
|
8
tests/apt-patterns
Normal file
8
tests/apt-patterns
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
#!/bin/sh
|
||||||
|
set -eu
|
||||||
|
export LC_ALL=C.UTF-8
|
||||||
|
trap "rm -f /tmp/debian-chroot.tar" EXIT INT TERM
|
||||||
|
{{ CMD }} --mode={{ MODE }} --variant=essential \
|
||||||
|
--include '?or(?exact-name(dummy-does-not-exist),?exact-name(apt))' \
|
||||||
|
{{ DIST }} /tmp/debian-chroot.tar {{ MIRROR }}
|
||||||
|
tar -tf /tmp/debian-chroot.tar | sort | grep -v ./var/lib/apt/extended_states | diff -u tar1.txt -
|
9
tests/apt-patterns-custom
Normal file
9
tests/apt-patterns-custom
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
#!/bin/sh
|
||||||
|
set -eu
|
||||||
|
export LC_ALL=C.UTF-8
|
||||||
|
trap "rm -f /tmp/debian-chroot.tar" EXIT INT TERM
|
||||||
|
{{ CMD }} --mode={{ MODE }} --variant=custom \
|
||||||
|
--include '?narrow(?archive(^{{ DIST }}$),?essential)' \
|
||||||
|
--include apt \
|
||||||
|
{{ DIST }} /tmp/debian-chroot.tar {{ MIRROR }}
|
||||||
|
tar -tf /tmp/debian-chroot.tar | sort | diff -u tar1.txt -
|
Loading…
Reference in a new issue