EVERYTHING FROM THE OTHER REPO
This commit is contained in:
+190
@@ -0,0 +1,190 @@
|
||||
#!/usr/bin/perl
|
||||
# This file was preprocessed, do not edit!
|
||||
|
||||
|
||||
|
||||
use warnings;
|
||||
use strict;
|
||||
|
||||
BEGIN {
|
||||
eval qq{
|
||||
use File::Path qw(make_path remove_tree);
|
||||
use FileHandle;
|
||||
use Debconf::Log qw(:all);
|
||||
use Debconf::Db;
|
||||
use Debconf::Template;
|
||||
use Debconf::Config;
|
||||
use Debconf::AutoSelect qw(:all);
|
||||
use Debconf::Gettext;
|
||||
use Debconf::Path;
|
||||
};
|
||||
if ($@) {
|
||||
print STDERR "debconf: Perl may be unconfigured ($@) -- aborting\n";
|
||||
exit 0;
|
||||
}
|
||||
}
|
||||
|
||||
if (exists $ENV{DEBCONF_USE_CDEBCONF} and $ENV{DEBCONF_USE_CDEBCONF} ne '') {
|
||||
exec "/usr/lib/cdebconf/dpkg-preconfigure", @ARGV;
|
||||
}
|
||||
|
||||
chdir('/');
|
||||
|
||||
Debconf::Db->load;
|
||||
|
||||
my $apt=0;
|
||||
Debconf::Config->getopt(
|
||||
qq{Usage: dpkg-preconfigure [options] [debs]
|
||||
--apt Apt mode.},
|
||||
"apt" => \$apt,
|
||||
);
|
||||
|
||||
$|=1;
|
||||
|
||||
my @debs=@ARGV;
|
||||
@ARGV=();
|
||||
|
||||
my $have_tty=1;
|
||||
|
||||
if ($apt) {
|
||||
while (<STDIN>) {
|
||||
chomp;
|
||||
push @debs, $_ if length $_;
|
||||
}
|
||||
|
||||
exit unless @debs;
|
||||
|
||||
$have_tty=0 unless open (STDIN, "<", "/dev/tty");
|
||||
}
|
||||
elsif (! @debs) {
|
||||
print STDERR sprintf("dpkg-preconfigure: ".gettext("must specify some debs to preconfigure")), "\n";
|
||||
exit(1);
|
||||
}
|
||||
|
||||
my $apt_extracttemplates;
|
||||
if (-x '/usr/lib/apt/apt-extracttemplates') {
|
||||
$apt_extracttemplates = '/usr/lib/apt/apt-extracttemplates';
|
||||
} elsif (Debconf::Path::find('apt-extracttemplates')) {
|
||||
$apt_extracttemplates = 'apt-extracttemplates';
|
||||
} else {
|
||||
warn gettext("delaying package configuration, since apt-utils is not installed");
|
||||
exit;
|
||||
}
|
||||
|
||||
my $frontend=make_frontend();
|
||||
|
||||
if (! $have_tty && $frontend->need_tty) {
|
||||
print STDERR sprintf("dpkg-preconfigure: ".gettext("unable to re-open stdin: %s"), $!)."\n";
|
||||
exit 0;
|
||||
}
|
||||
|
||||
my $tempdir='/var/cache/debconf/tmp.ci';
|
||||
remove_tree($tempdir, { safe => 1, keep_root => 1 });
|
||||
make_path($tempdir);
|
||||
|
||||
my ($package, $version, $template, $config);
|
||||
pipe(my $info_reader, my $info_writer) or die "debconf: pipe failed: $!";
|
||||
my $pid = fork();
|
||||
defined $pid or die "fork failed: $!";
|
||||
unless ($pid) {
|
||||
close($info_reader);
|
||||
|
||||
my $command_max=20000; # LINUX SPECIFIC!!
|
||||
my $static_len=length($apt_extracttemplates);
|
||||
my $len=$static_len;
|
||||
my @collect;
|
||||
my $progress=0;
|
||||
my $show_progress=($apt && @debs > 30 && -t STDERR);
|
||||
|
||||
sub apt_extracttemplates {
|
||||
my $apt_extracttemplates_pid = fork();
|
||||
my $error;
|
||||
if (not defined $apt_extracttemplates_pid) {
|
||||
$error = $!;
|
||||
} elsif (not $apt_extracttemplates_pid) {
|
||||
open(STDOUT, ">&", $info_writer)
|
||||
or die "debconf: redirect stdout failed: $!";
|
||||
exec($apt_extracttemplates, "--tempdir", $tempdir, @collect)
|
||||
or die "debconf: exec $apt_extracttemplates failed: $!";
|
||||
} else {
|
||||
my $child = waitpid($apt_extracttemplates_pid, 0);
|
||||
if ($child == -1) {
|
||||
$error = $!;
|
||||
} elsif ($?) {
|
||||
$error = $?;
|
||||
}
|
||||
}
|
||||
print STDERR sprintf("debconf: ".gettext("apt-extracttemplates failed: %s")."\n", $error) if defined $error;
|
||||
if ($show_progress) {
|
||||
$progress += @collect;
|
||||
printf "\r".gettext("Extracting templates from packages: %d%%"), $progress * 100 / @debs;
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
if ($show_progress) {
|
||||
STDOUT->autoflush(1);
|
||||
}
|
||||
foreach my $deb (@debs) {
|
||||
$len += length($deb) + 1;
|
||||
if ($len < $command_max && @collect < 30) {
|
||||
push @collect, $deb;
|
||||
}
|
||||
else {
|
||||
apt_extracttemplates();
|
||||
@collect=($deb);
|
||||
$len=$static_len + length($deb) + 1;
|
||||
}
|
||||
}
|
||||
apt_extracttemplates();
|
||||
print "\n" if $show_progress;
|
||||
exit;
|
||||
}
|
||||
close($info_writer);
|
||||
my @buffer=<$info_reader>;
|
||||
if ($apt && @buffer) {
|
||||
print gettext("Preconfiguring packages ...\n");
|
||||
}
|
||||
foreach my $line (@buffer) {
|
||||
($package, $version, $template, $config)=split /\s/, $line;
|
||||
|
||||
if (defined $template && length $template) {
|
||||
eval {
|
||||
Debconf::Template->load($template, $package)
|
||||
};
|
||||
unlink $template;
|
||||
if ($@) {
|
||||
print STDERR "$package ".sprintf(gettext("template parse error: %s"), $@)."\n";
|
||||
unlink $config;
|
||||
next;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
foreach my $line (@buffer) {
|
||||
($package, $version, $template, $config)=split /\s/, $line;
|
||||
|
||||
if (defined $config && length $config && -e $config) {
|
||||
debug user => sprintf("preconfiguring %s (%s)",$package,$version);
|
||||
chmod(0755, $config) or
|
||||
die sprintf(gettext("debconf: can't chmod: %s"), $!);
|
||||
$frontend->default_title($package);
|
||||
$frontend->info(undef);
|
||||
my $confmodule=make_confmodule($config, 'configure', $version);
|
||||
$confmodule->owner($package);
|
||||
1 while ($confmodule->communicate);
|
||||
if ($confmodule->exitcode > 0) {
|
||||
print STDERR sprintf(
|
||||
gettext("%s failed to preconfigure, with exit status %s"),
|
||||
$package, $confmodule->exitcode)."\n";
|
||||
}
|
||||
unlink $config;
|
||||
}
|
||||
}
|
||||
|
||||
$frontend->shutdown;
|
||||
|
||||
Debconf::Db->save;
|
||||
|
||||
remove_tree($tempdir, { safe => 1, keep_root => 1 });
|
||||
|
||||
Reference in New Issue
Block a user