EVERYTHING FROM THE OTHER REPO
This commit is contained in:
@@ -0,0 +1,123 @@
|
||||
#!/bin/sh
|
||||
# This is a shell library to interface to the Debian configuration management
|
||||
# system.
|
||||
|
||||
###############################################################################
|
||||
# Initialization.
|
||||
|
||||
_DEBCONF_IMPL=
|
||||
if [ "${DEBCONF_USE_CDEBCONF:-}" ]; then
|
||||
# Use cdebconf if explicitly requested.
|
||||
_DEBCONF_IMPL=cdebconf
|
||||
elif [ -x /usr/share/debconf/frontend ] && \
|
||||
[ ! -h /usr/share/debconf/frontend ]; then
|
||||
# Fall back to debconf, but only if installed. (cdebconf currently
|
||||
# installs /usr/share/debconf/frontend as a symlink to
|
||||
# /usr/lib/cdebconf/debconf.)
|
||||
_DEBCONF_IMPL=debconf
|
||||
else
|
||||
# Last resort: use cdebconf although not explicitly requested.
|
||||
_DEBCONF_IMPL=cdebconf
|
||||
fi
|
||||
|
||||
# Check to see if a FrontEnd is running.
|
||||
if [ ! "${DEBIAN_HAS_FRONTEND:-}" ]; then
|
||||
# Since there is no FrontEnd, this program execs a FrontEnd.
|
||||
# It will then run a new copy of $0 that can talk to it.
|
||||
if [ "$_DEBCONF_IMPL" = cdebconf ]; then
|
||||
exec /usr/lib/cdebconf/debconf -- $0 "$@"
|
||||
else
|
||||
export PERL_DL_NONLAZY=1
|
||||
exec /usr/share/debconf/frontend $0 "$@"
|
||||
fi
|
||||
fi
|
||||
|
||||
# Only do this once.
|
||||
if [ -z "${DEBCONF_REDIR:-}" ]; then
|
||||
# Redirect standard output to standard error. This prevents common
|
||||
# mistakes by making all the output of the postinst or whatever
|
||||
# script is using this library not be parsed as confmodule commands.
|
||||
#
|
||||
# To actually send something to standard output, send it to fd 3.
|
||||
exec 3>&1
|
||||
if [ "$_DEBCONF_IMPL" = cdebconf ]; then
|
||||
exec 1>&5
|
||||
else
|
||||
exec 1>&2
|
||||
fi
|
||||
DEBCONF_REDIR=1
|
||||
export DEBCONF_REDIR
|
||||
fi
|
||||
|
||||
# In cdebconf, the original stdin/stdout/stderr fds are duplicated onto fds
|
||||
# DEBCONF_OLD_FD_BASE to DEBCONF_OLD_FD_BASE + 2. These values are exported
|
||||
# so that you can get the original fds back. This is kind of a hack:
|
||||
# ideally, we might use something like a socket for the debconf protocol
|
||||
# instead of stdio.
|
||||
DEBCONF_OLD_FD_BASE='4'
|
||||
export DEBCONF_OLD_FD_BASE
|
||||
|
||||
###############################################################################
|
||||
# Commands.
|
||||
|
||||
_db_cmd () {
|
||||
local _db_internal_IFS="$IFS"
|
||||
IFS=' '
|
||||
printf '%s\n' "$*" >&3
|
||||
# Set to newline to get whole line.
|
||||
IFS='
|
||||
'
|
||||
read -r _db_internal_line
|
||||
IFS="$_db_internal_IFS"
|
||||
|
||||
# Disgusting, but it's the only good way to split the line,
|
||||
# preserving all other whitespace.
|
||||
RET="${_db_internal_line#[! ][ ]}"
|
||||
local _db_status="${_db_internal_line%%[ ]*}"
|
||||
case "$_db_status" in
|
||||
1) # escaped data
|
||||
if [ "$_DEBCONF_IMPL" = cdebconf ]; then
|
||||
_DEBCONF_ESCAPE=/usr/lib/cdebconf/debconf-escape
|
||||
else
|
||||
_DEBCONF_ESCAPE=debconf-escape
|
||||
fi
|
||||
RET="$(printf '%s' "$RET" | $_DEBCONF_ESCAPE -u)"
|
||||
return 0
|
||||
;;
|
||||
esac
|
||||
return "$_db_status"
|
||||
}
|
||||
|
||||
db_beginblock () { _db_cmd "BEGINBLOCK" "$@"; }
|
||||
db_capb () { _db_cmd "CAPB" "$@"; }
|
||||
db_clear () { _db_cmd "CLEAR" "$@"; }
|
||||
db_data () { _db_cmd "DATA" "$@"; }
|
||||
db_endblock () { _db_cmd "ENDBLOCK" "$@"; }
|
||||
db_fget () { _db_cmd "FGET" "$@"; }
|
||||
db_fset () { _db_cmd "FSET" "$@"; }
|
||||
db_get () { _db_cmd "GET" "$@"; }
|
||||
db_go () { _db_cmd "GO" "$@"; }
|
||||
db_info () { _db_cmd "INFO" "$@"; }
|
||||
db_input () { _db_cmd "INPUT" "$@"; }
|
||||
db_metaget () { _db_cmd "METAGET" "$@"; }
|
||||
db_progress () { _db_cmd "PROGRESS" "$@"; }
|
||||
db_purge () { _db_cmd "PURGE" "$@"; }
|
||||
db_register () { _db_cmd "REGISTER" "$@"; }
|
||||
db_reset () { _db_cmd "RESET" "$@"; }
|
||||
db_set () { _db_cmd "SET" "$@"; }
|
||||
db_settitle () { _db_cmd "SETTITLE" "$@"; }
|
||||
db_subst () { _db_cmd "SUBST" "$@"; }
|
||||
db_title () { _db_cmd "TITLE" "$@"; }
|
||||
db_unregister () { _db_cmd "UNREGISTER" "$@"; }
|
||||
db_version () { _db_cmd "VERSION" "$@"; }
|
||||
db_x_loadtemplatefile () { _db_cmd "X_LOADTEMPLATEFILE" "$@"; }
|
||||
|
||||
# An old alias for input.
|
||||
db_text () {
|
||||
db_input "$@"
|
||||
}
|
||||
|
||||
# Cannot read a return code, since there is none and it would block.
|
||||
db_stop () {
|
||||
echo STOP >&3
|
||||
}
|
||||
@@ -0,0 +1,100 @@
|
||||
#!/bin/sh
|
||||
# This is a shell library to interface to the Debian configration management
|
||||
# system.
|
||||
#
|
||||
# This library is obsolete. Do not use.
|
||||
|
||||
###############################################################################
|
||||
# Initialization.
|
||||
|
||||
# Check to see if a FrontEnd is running.
|
||||
if [ ! "$DEBIAN_HAS_FRONTEND" ]; then
|
||||
PERL_DL_NONLAZY=1
|
||||
export PERL_DL_NONLAZY
|
||||
# Ok, this is pretty crazy. Since there is no FrontEnd, this
|
||||
# program execs a FrontEnd. It will then run a new copy of $0 that
|
||||
# can talk to it.
|
||||
exec /usr/share/debconf/frontend $0 $*
|
||||
fi
|
||||
|
||||
# Only do this once.
|
||||
if [ -z "$DEBCONF_REDIR" ]; then
|
||||
# Redirect standard output to standard error. This prevents common
|
||||
# mistakes by making all the output of the postinst or whatever
|
||||
# script is using this library not be parsed as confmodule commands.
|
||||
#
|
||||
# To actually send something to standard output, send it to fd 3.
|
||||
exec 3>&1 1>&2
|
||||
DEBCONF_REDIR=1
|
||||
export DEBCONF_REDIR
|
||||
fi
|
||||
|
||||
# For internal use, send text to the frontend.
|
||||
_command () {
|
||||
echo $* >&3
|
||||
}
|
||||
|
||||
echo "WARNING: Using deprecated debconf compatibility library."
|
||||
|
||||
###############################################################################
|
||||
# Commands.
|
||||
|
||||
# Generate subroutines for all commands that don't have special handlers.
|
||||
# Each command must be listed twice, once in lower case, once in upper.
|
||||
# Doing that saves us a lot of calls to tr at load time. I just wish shell had
|
||||
# an upper-case function.
|
||||
old_opts="$@"
|
||||
for i in "capb CAPB" "set SET" "reset RESET" "title TITLE" \
|
||||
"input INPUT" "beginblock BEGINBLOCK" "endblock ENDBLOCK" "go GO" \
|
||||
"get GET" "register REGISTER" "unregister UNREGISTER" "subst SUBST" \
|
||||
"fset FSET" "fget FGET" "visible VISIBLE" "purge PURGE" \
|
||||
"metaget METAGET" "exist EXIST" \
|
||||
"x_loadtemplatefile X_LOADTEMPLATEFILE"; do
|
||||
# Break string up into words.
|
||||
set -- $i
|
||||
eval "db_$1 () {
|
||||
_command \"$2 \$@\"
|
||||
read _RET
|
||||
old_opts="\$@"
|
||||
set -- \$_RET
|
||||
shift
|
||||
RET="\$*"
|
||||
set -- \$old_opts
|
||||
unset old_opts
|
||||
}"
|
||||
done
|
||||
# $@ was clobbered above, unclobber.
|
||||
set -- $old_opts
|
||||
unset old_opts
|
||||
|
||||
# By default, 1.0 protocol version is sent to the frontend. You can
|
||||
# pass in a different version to override this.
|
||||
db_version () {
|
||||
if [ "$1" ]; then
|
||||
_command "VERSION $1"
|
||||
else
|
||||
_command "VERSION 1.0"
|
||||
fi
|
||||
# Not quite correct, but not worth fixing in obsolete code.
|
||||
read -r RET
|
||||
}
|
||||
|
||||
# Here for backwards compatibility.
|
||||
db_go () {
|
||||
_command "GO"
|
||||
read -r RET
|
||||
if [ "$RET" = 30 ]; then
|
||||
RET='back'
|
||||
fi
|
||||
}
|
||||
|
||||
# Just an alias for input. It tends to make more sense to use this to display
|
||||
# text, since displaying text isn't really asking for input.
|
||||
db_text () {
|
||||
db_input $@
|
||||
}
|
||||
|
||||
# Cannot read a return code, since there is none and we would block.
|
||||
db_stop () {
|
||||
echo STOP >&3
|
||||
}
|
||||
@@ -0,0 +1,27 @@
|
||||
|
||||
Config: configdb
|
||||
Templates: templatedb
|
||||
|
||||
Name: config
|
||||
Driver: File
|
||||
Mode: 644
|
||||
Reject-Type: password
|
||||
Filename: /var/cache/debconf/config.dat
|
||||
|
||||
Name: passwords
|
||||
Driver: File
|
||||
Mode: 600
|
||||
Backup: false
|
||||
Required: false
|
||||
Accept-Type: password
|
||||
Filename: /var/cache/debconf/passwords.dat
|
||||
|
||||
Name: configdb
|
||||
Driver: Stack
|
||||
Stack: config, passwords
|
||||
|
||||
Name: templatedb
|
||||
Driver: File
|
||||
Mode: 644
|
||||
Filename: /var/cache/debconf/templates.dat
|
||||
|
||||
+80
@@ -0,0 +1,80 @@
|
||||
#!/usr/bin/perl
|
||||
# This file was preprocessed, do not edit!
|
||||
use warnings;
|
||||
use strict;
|
||||
use Debconf::Db;
|
||||
use Debconf::Log q{warn};
|
||||
|
||||
Debconf::Db->load;
|
||||
|
||||
if (! @ARGV || $ARGV[0] ne 'end') {
|
||||
my $fix=0;
|
||||
my $ok;
|
||||
my $counter=0;
|
||||
do {
|
||||
$ok=1;
|
||||
|
||||
my %templates=();
|
||||
my $ti=$Debconf::Db::templates->iterator;
|
||||
while (my $t=$ti->iterate) {
|
||||
$templates{$t}=Debconf::Template->get($t);
|
||||
}
|
||||
|
||||
my %questions=();
|
||||
my $qi=Debconf::Question->iterator;
|
||||
while (my $q=$qi->iterate) {
|
||||
if (! defined $q->template) {
|
||||
warn "question \"".$q->name."\" has no template field; removing it.";
|
||||
$q->addowner("killme",""); # make sure it has one owner at least, so removal is triggered
|
||||
foreach my $owner (split(/, /, $q->owners)) {
|
||||
$q->removeowner($owner);
|
||||
}
|
||||
$ok=0;
|
||||
$fix=1;
|
||||
}
|
||||
elsif (! exists $templates{$q->template->template}) {
|
||||
warn "question \"".$q->name."\" uses nonexistent template ".$q->template->template."; removing it.";
|
||||
foreach my $owner (split(/, /, $q->owners)) {
|
||||
$q->removeowner($owner);
|
||||
}
|
||||
$ok=0;
|
||||
$fix=1;
|
||||
}
|
||||
else {
|
||||
$questions{$q->name}=$q;
|
||||
}
|
||||
}
|
||||
|
||||
foreach my $t (keys %templates) {
|
||||
my @owners=$Debconf::Db::templates->owners($t);
|
||||
if (! @owners) {
|
||||
warn "template \"$t\" has no owners; removing it.";
|
||||
$Debconf::Db::templates->addowner($t, "killme","");
|
||||
$Debconf::Db::templates->removeowner($t, "killme");
|
||||
$fix=1;
|
||||
}
|
||||
foreach my $q (@owners) {
|
||||
if (! exists $questions{$q}) {
|
||||
warn "template \"$t\" claims to be used by nonexistent question \"$q\"; removing that.";
|
||||
$Debconf::Db::templates->removeowner($t, $q);
|
||||
$ok=0;
|
||||
$fix=1;
|
||||
}
|
||||
}
|
||||
}
|
||||
$counter++;
|
||||
} until ($ok || $counter > 20);
|
||||
|
||||
if ($fix) {
|
||||
Debconf::Db->save;
|
||||
exec($0, "end");
|
||||
die "exec of self failed";
|
||||
}
|
||||
}
|
||||
|
||||
foreach my $templatefile (glob("/var/lib/dpkg/info/*.templates")) {
|
||||
my ($package) = $templatefile =~ m:/var/lib/dpkg/info/(.*?).templates:;
|
||||
Debconf::Template->load($templatefile, $package);
|
||||
}
|
||||
|
||||
Debconf::Db->save;
|
||||
+112
@@ -0,0 +1,112 @@
|
||||
#!/usr/bin/perl
|
||||
# This file was preprocessed, do not edit!
|
||||
|
||||
|
||||
use warnings;
|
||||
use strict;
|
||||
use Debconf::Db;
|
||||
use Debconf::Template;
|
||||
use Debconf::AutoSelect qw(:all);
|
||||
use Debconf::Log qw(:all);
|
||||
|
||||
Debconf::Db->load;
|
||||
|
||||
debug developer => "frontend started";
|
||||
|
||||
my $frontend=make_frontend();
|
||||
|
||||
shift @ARGV if $ARGV[0] eq '--';
|
||||
|
||||
my $package;
|
||||
my $no_title=0;
|
||||
my $root=$ENV{DPKG_ROOT} // '';
|
||||
if ($ENV{DEBCONF_PACKAGE}) {
|
||||
$package=$ENV{DEBCONF_PACKAGE};
|
||||
}
|
||||
elsif ($ARGV[0]=~m!^.*/(.*?)\.(?:postinst|postrm|prerm)$!) {
|
||||
$package=$1;
|
||||
my $action=$ARGV[1];
|
||||
$no_title=1 if $action eq 'triggered';
|
||||
}
|
||||
elsif (-e "$root/var/lib/dpkg/tmp.ci/control") {
|
||||
open (my $control, "<", "$root/var/lib/dpkg/tmp.ci/control")
|
||||
|| die "Debconf: unable to open control file: $!";
|
||||
while (<$control>) {
|
||||
if (/^Package: (.*)/) {
|
||||
$package=$1;
|
||||
last;
|
||||
}
|
||||
}
|
||||
close $control;
|
||||
if (! exists $ENV{PERL_DL_NONLAZY} || ! $ENV{PERL_DL_NONLAZY}) {
|
||||
warn "PERL_DL_NONLAZY is not set, if debconf is running from a preinst script, this is not safe";
|
||||
}
|
||||
}
|
||||
else {
|
||||
$package='';
|
||||
|
||||
debug developer => 'Trying to find a templates file..';
|
||||
sub trytemplate {
|
||||
my $fn=shift;
|
||||
debug developer => "Trying $fn";
|
||||
if (-e $fn) {
|
||||
debug developer => "I guess it is $fn";
|
||||
Debconf::Template->load($fn, $package);
|
||||
return 1;
|
||||
}
|
||||
else {
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
unless (trytemplate("$ARGV[0].templates")) {
|
||||
unless ($ARGV[0]=~m/(.*)config$/ && trytemplate("${1}templates")) {
|
||||
unless ($ARGV[0]=~m!^(?:.*/)?(.*)! && trytemplate("/usr/share/debconf/templates/${1}.templates")) {
|
||||
debug developer => "Couldn't find a templates file."
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
debug developer => "frontend running, package name is $package";
|
||||
$frontend->default_title($package) if length $package and not $no_title;
|
||||
$frontend->info(undef);
|
||||
|
||||
if ($ARGV[0] =~/^(.*[.\/])(?:preinst|postinst|prerm|postrm)$/) {
|
||||
my $base=$1;
|
||||
my $templates=$base."templates";
|
||||
Debconf::Template->load($templates, $package)
|
||||
if -e $templates;
|
||||
}
|
||||
|
||||
if ($ARGV[0] =~/^(.*[.\/])(?:postinst|preinst)$/) {
|
||||
my $base=$1;
|
||||
|
||||
my $config=$base."config";
|
||||
if (-e $config) {
|
||||
my $version=$ARGV[2];
|
||||
if (! defined($version)) {
|
||||
$version='';
|
||||
}
|
||||
my $confmodule=make_confmodule($config,
|
||||
"configure", $version);
|
||||
|
||||
$confmodule->owner($package);
|
||||
|
||||
1 while ($confmodule->communicate);
|
||||
|
||||
exit $confmodule->exitcode if $confmodule->exitcode > 0;
|
||||
}
|
||||
}
|
||||
|
||||
my $confmodule=make_confmodule(@ARGV);
|
||||
|
||||
$confmodule->owner($package);
|
||||
|
||||
1 while ($confmodule->communicate);
|
||||
|
||||
$frontend->shutdown;
|
||||
|
||||
Debconf::Db->save;
|
||||
|
||||
exit $confmodule->exitcode;
|
||||
|
||||
Reference in New Issue
Block a user