1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100
|
#!/bin/sh
set -e
. /usr/share/debconf/confmodule
gendir=/usr/lib/apt-setup/generators
if [ "$1" = --log-output ] && type log-output >/dev/null 2>&1; then
CATCHLOG=1
shift
else
CATCHLOG=
fi
export CATCHLOG
if [ "$1" ]; then
ROOT="$1"
chroot=chroot
else
ROOT=
chroot=
fi
export ROOT
# generators/01setup will create this; apt honours it (see apt.conf(5))
export APT_CONFIG=/etc/apt/apt.conf.new
log() {
logger -t apt-setup "$@"
}
warning() {
log "warning: $@"
}
gencount=$(ls "$gendir"/* | wc -l)
db_capb backup progresscancel
db_progress START 0 $(expr $gencount \* 200) apt-setup/progress/title
PROGRESS_FROM=0
PROGRESS_TO=100
export PROGRESS_FROM
export PROGRESS_TO
progress_advance() {
db_progress SET $PROGRESS_TO || true
PROGRESS_FROM=$PROGRESS_TO
PROGRESS_TO=$(expr $PROGRESS_FROM + 100)
}
for generator in $gendir/*; do
base=$(basename $generator | sed 's/[0-9]*//')
base="${base%%.*}"
if ! db_progress INFO apt-setup/progress/$base; then
db_subst apt-setup/progress/fallback SCRIPT "$base"
db_progress INFO apt-setup/progress/fallback || true
fi
tmp=$($chroot $ROOT tempfile)
code=0
$generator $ROOT$tmp || code=$?
progress_advance
case $code in
0)
if ! apt-setup-verify \
--from $PROGRESS_FROM --to $PROGRESS_TO \
$ROOT$tmp $ROOT/etc/apt/sources.list.new; then
warning "$generator output did not verify"
fi
;;
9)
apt-setup-verify --invalid $ROOT$tmp $ROOT/etc/apt/sources.list.new || true
warning "$generator output added commented out"
;;
10)
# TODO handle backup better
log "$generator backed up"
rm -f $ROOT$tmp $ROOT/etc/apt/sources.list.new
db_progress STOP
db_capb backup
exit 10
;;
*)
warning "$generator returned error code $code; discarding output"
;;
esac
rm -f $ROOT$tmp
progress_advance
done
mv $ROOT/etc/apt/sources.list.new $ROOT/etc/apt/sources.list
if [ -s $ROOT/etc/apt/apt.conf.new ]; then
mv $ROOT/etc/apt/apt.conf.new $ROOT/etc/apt/apt.conf
else
rm -f $ROOT/etc/apt/apt.conf.new
fi
db_progress STOP
db_capb backup
|