forked from josch/mmdebstrap
enforce dpkg >= 1.20.0 and remove dead code
This commit is contained in:
parent
4f278deadf
commit
1d2a7ef71a
1 changed files with 28 additions and 52 deletions
80
mmdebstrap
80
mmdebstrap
|
@ -1550,29 +1550,6 @@ sub setup {
|
||||||
sub run_setup() {
|
sub run_setup() {
|
||||||
my $options = shift;
|
my $options = shift;
|
||||||
|
|
||||||
my $dpkgversion = version->new(0);
|
|
||||||
{
|
|
||||||
my $pid = open my $fh, '-|' // error "failed to fork(): $!";
|
|
||||||
if ($pid == 0) {
|
|
||||||
# redirect stderr to /dev/null to hide error messages from dpkg
|
|
||||||
# versions before 1.20.0
|
|
||||||
open(STDERR, '>', '/dev/null')
|
|
||||||
or error "cannot open /dev/null for writing: $!";
|
|
||||||
exec 'dpkg', '--robot', '--version';
|
|
||||||
}
|
|
||||||
chomp(
|
|
||||||
my $content = do { local $/; <$fh> }
|
|
||||||
);
|
|
||||||
close $fh;
|
|
||||||
# the --robot option was introduced in 1.20.0 but until 1.20.2 the
|
|
||||||
# output contained a string after the version, separated by a
|
|
||||||
# whitespace -- since then, it's only the version
|
|
||||||
if ($? == 0 and $content =~ /^([0-9.]+)( .*)?$/) {
|
|
||||||
# dpkg is new enough for the --robot option
|
|
||||||
$dpkgversion = version->new($1);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
{
|
{
|
||||||
my @directories = (
|
my @directories = (
|
||||||
'/etc/apt/apt.conf.d', '/etc/apt/sources.list.d',
|
'/etc/apt/apt.conf.d', '/etc/apt/sources.list.d',
|
||||||
|
@ -1583,8 +1560,7 @@ sub run_setup() {
|
||||||
push @directories, '/var/lib/dpkg';
|
push @directories, '/var/lib/dpkg';
|
||||||
# since we do not know the dpkg version inside the chroot at this
|
# since we do not know the dpkg version inside the chroot at this
|
||||||
# point, we can only omit it in chrootless mode
|
# point, we can only omit it in chrootless mode
|
||||||
if ( $options->{mode} ne 'chrootless'
|
if ($options->{mode} ne 'chrootless'
|
||||||
or $dpkgversion < "1.20.0"
|
|
||||||
or scalar @{ $options->{dpkgopts} } > 0) {
|
or scalar @{ $options->{dpkgopts} } > 0) {
|
||||||
push @directories, '/etc/dpkg/dpkg.cfg.d/';
|
push @directories, '/etc/dpkg/dpkg.cfg.d/';
|
||||||
}
|
}
|
||||||
|
@ -1597,8 +1573,7 @@ sub run_setup() {
|
||||||
push @directories, '/var/log/apt';
|
push @directories, '/var/log/apt';
|
||||||
# since we do not know the dpkg version inside the chroot at this
|
# since we do not know the dpkg version inside the chroot at this
|
||||||
# point, we can only omit it in chrootless mode
|
# point, we can only omit it in chrootless mode
|
||||||
if ( $options->{mode} ne 'chrootless'
|
if ($options->{mode} ne 'chrootless') {
|
||||||
or $dpkgversion < "1.20.0") {
|
|
||||||
push @directories, '/var/lib/dpkg/triggers',
|
push @directories, '/var/lib/dpkg/triggers',
|
||||||
'/var/lib/dpkg/info', '/var/lib/dpkg/alternatives',
|
'/var/lib/dpkg/info', '/var/lib/dpkg/alternatives',
|
||||||
'/var/lib/dpkg/updates';
|
'/var/lib/dpkg/updates';
|
||||||
|
@ -1698,31 +1673,6 @@ sub run_setup() {
|
||||||
close $fh;
|
close $fh;
|
||||||
}
|
}
|
||||||
|
|
||||||
# /var/lib/dpkg/available is required to exist or otherwise package
|
|
||||||
# removals will fail
|
|
||||||
# since we do not know the dpkg version inside the chroot at this point, we
|
|
||||||
# can only omit it in chrootless mode
|
|
||||||
# since we want to produce equivalent output independent on the mode, we
|
|
||||||
# only check for the dpkg version
|
|
||||||
if ($dpkgversion < "1.20.0") {
|
|
||||||
open my $fh, '>', "$options->{root}/var/lib/dpkg/available"
|
|
||||||
or error "failed to open(): $!";
|
|
||||||
close $fh;
|
|
||||||
}
|
|
||||||
|
|
||||||
# /var/lib/dpkg/cmethopt is used by dselect
|
|
||||||
# see #930788
|
|
||||||
# since we do not know the dpkg version inside the chroot at this point, we
|
|
||||||
# can only omit it in chrootless mode
|
|
||||||
# since we want to produce equivalent output independent on the mode, we
|
|
||||||
# only check for the dpkg version
|
|
||||||
if ($dpkgversion < "1.20.0") {
|
|
||||||
open my $fh, '>', "$options->{root}/var/lib/dpkg/cmethopt"
|
|
||||||
or error "failed to open(): $!";
|
|
||||||
print $fh "apt apt\n";
|
|
||||||
close $fh;
|
|
||||||
}
|
|
||||||
|
|
||||||
# we create /var/lib/dpkg/arch inside the chroot either if there is more
|
# we create /var/lib/dpkg/arch inside the chroot either if there is more
|
||||||
# than the native architecture in the chroot or if chrootless mode is
|
# than the native architecture in the chroot or if chrootless mode is
|
||||||
# used to create a chroot of a different architecture than the native
|
# used to create a chroot of a different architecture than the native
|
||||||
|
@ -4531,6 +4481,32 @@ sub main() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
my $dpkgversion = version->new(0);
|
||||||
|
my $pid = open my $fh, '-|' // error "failed to fork(): $!";
|
||||||
|
if ($pid == 0) {
|
||||||
|
# redirect stderr to /dev/null to hide error messages from dpkg
|
||||||
|
# versions before 1.20.0
|
||||||
|
open(STDERR, '>', '/dev/null')
|
||||||
|
or error "cannot open /dev/null for writing: $!";
|
||||||
|
exec 'dpkg', '--robot', '--version';
|
||||||
|
}
|
||||||
|
chomp(
|
||||||
|
my $content = do { local $/; <$fh> }
|
||||||
|
);
|
||||||
|
close $fh;
|
||||||
|
# the --robot option was introduced in 1.20.0 but until 1.20.2 the
|
||||||
|
# output contained a string after the version, separated by a
|
||||||
|
# whitespace -- since then, it's only the version
|
||||||
|
if ($? == 0 and $content =~ /^([0-9.]+)( .*)?$/) {
|
||||||
|
# dpkg is new enough for the --robot option
|
||||||
|
$dpkgversion = version->new($1);
|
||||||
|
}
|
||||||
|
if ($dpkgversion < "1.20.0") {
|
||||||
|
error "need dpkg >= 1.20.0 but have $dpkgversion";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
{
|
{
|
||||||
my $aptversion = version->new(0);
|
my $aptversion = version->new(0);
|
||||||
my $pid = open my $fh, '-|', 'apt-get',
|
my $pid = open my $fh, '-|', 'apt-get',
|
||||||
|
|
Loading…
Reference in a new issue