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 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241
|
#!/bin/sh
set -e
. /usr/share/debconf/confmodule
file="$1"
NL="
"
log() {
logger -t apt-setup "$@"
}
warning() {
log "warning: $@"
}
# Ask if a mirror should be used if the base system can be installed from CD
# Default value and priority vary with the CD type used and number of CDs
# that has been scanned in 41cdset
if [ -e /cdrom/.disk/base_installable ]; then
if ! search-path choose-mirror; then
warning "choose-mirror is not available; cannot offer network mirror"
exit 1
fi
cd_type=unknown
if [ -e /cdrom/.disk/cd_type ]; then
cd_type=$(cat /cdrom/.disk/cd_type)
fi
cd_count=$(grep "^deb cdrom:" $ROOT/etc/apt/sources.list.new | wc -l)
case "$cd_type" in
not_complete)
use_mirror=true
use_prio=medium
db_metaget apt-setup/use/netinst description
db_subst apt-setup/use_mirror EXPLANATION "$RET"
;;
full_cd*)
use_mirror=true
use_prio=high
if [ $cd_count -le 8 ]; then
if [ $cd_count -eq 1 ]; then
db_metaget apt-setup/use/cd description
elif [ $cd_count -le 3 ]; then
db_metaget apt-setup/use/cd-set1 description
RET="$(printf "$RET" "$cd_count")"
else
use_mirror=false
db_metaget apt-setup/use/cd-set2 description
RET="$(printf "$RET" "$cd_count")"
fi
explanation="$RET"
if [ $cd_count -le 3 ]; then
db_metaget apt-setup/use/inet1 description
explanation="$explanation $RET"
db_metaget apt-setup/use/cd-note description
explanation="$explanation$NL$NL$RET"
else
db_metaget apt-setup/use/inet2 description
explanation="$explanation $RET"
fi
db_subst apt-setup/use_mirror EXPLANATION "$explanation"
else
use_mirror=false
use_prio=low
fi
;;
dvd*)
use_mirror=false
use_prio=high
if [ $cd_count -eq 1 ]; then
db_metaget apt-setup/use/dvd description
explanation="$RET"
db_metaget apt-setup/use/inet2 description
explanation="$explanation $RET"
db_subst apt-setup/use_mirror EXPLANATION "$explanation"
else
use_prio=low
fi
;;
bluray*)
use_mirror=false
use_prio=low
;;
*)
use_mirror=true
use_prio=high
;;
esac
# Default to false if no network selected in netcfg
if db_get netcfg/dhcp_options && \
[ "$RET" = "Do not configure the network at this time" ]; then
use_mirror=false
use_prio=medium
fi
# Only set default if not preseeded or already asked
# Hack alert: for this to work no default is set in template
db_get apt-setup/use_mirror
[ "$RET" ] || db_set apt-setup/use_mirror $use_mirror
db_input $use_prio apt-setup/use_mirror || [ $? -eq 30 ]
db_go || exit 10
db_get apt-setup/use_mirror
if [ "$RET" = false ]; then
exit 1
fi
# Default suite to codename; choose-mirror will determine actual suite
if db_get cdrom/codename && [ "$RET" ]; then
db_set mirror/suite $RET
fi
while true; do
CODE=0
choose-mirror -n || CODE=$? # no progress bar
db_capb backup progresscancel
if [ $CODE -eq 0 ]; then
break
elif [ $CODE -eq 10 ]; then
# User backed out of choose-mirror
db_input critical apt-setup/no_mirror
db_go || exit 10
db_get apt-setup/no_mirror
if [ "$RET" = true ]; then
exit 1
fi
else
logger -t apt-setup "choose-mirror failed with error code $CODE"
exit $CODE
fi
done
fi
# Abort if no mirror is configured.
db_get mirror/protocol
protocol="$RET"
db_get mirror/codename
codename="$RET"
db_get mirror/$protocol/hostname
hostname="$RET"
db_get mirror/$protocol/directory
directory="/${RET#/}"
if [ -z "$hostname" ] || [ -z "$directory" ]; then
exit 1
fi
STATE=1
while true; do
case "$STATE" in
1)
db_input low apt-setup/non-free || true
;;
2)
# If they chose not to use non-free, ask about
# contrib, with a default of no. If they chose to
# use non-free, they get contrib too..
db_get apt-setup/non-free
if [ "$RET" = false ]; then
db_fget apt-setup/contrib seen
if [ "$RET" = false ]; then
db_set apt-setup/contrib false
fi
db_input low apt-setup/contrib || true
else
db_fget apt-setup/contrib seen
if [ "$RET" = false ]; then
db_set apt-setup/contrib true
fi
fi
;;
*)
break
;;
esac
if db_go; then
STATE=$(($STATE + 1))
else
STATE=$(($STATE - 1))
fi
done
if [ $STATE -eq 0 ]; then
exit 10
fi
dists="main"
db_get apt-setup/non-free
if [ "$RET" = true ]; then
dists="$dists non-free"
fi
db_get apt-setup/contrib
if [ "$RET" = true ]; then
dists="$dists contrib"
fi
done=""
while [ ! "$done" ]; do
db_get mirror/codename
codename="$RET"
db_get mirror/protocol
protocol="$RET"
db_get mirror/$protocol/hostname
hostname="$RET"
db_get mirror/$protocol/directory
directory="/${RET#/}"
if [ "$protocol" = http ]; then
db_get mirror/$protocol/proxy
proxy="$RET"
if [ -n "$proxy" ]; then
if ! grep -iq "Acquire::$protocol::Proxy" $ROOT/etc/apt/apt.conf.new; then
echo "Acquire::$protocol::Proxy \"$proxy\";" >> $ROOT/etc/apt/apt.conf.new
fi
fi
fi
echo "deb $protocol://$hostname$directory $codename $dists" > $file
if apt-setup-verify --from $PROGRESS_FROM --to $PROGRESS_TO $file; then
done=1
else
db_set apt-setup/mirror/error Retry
db_input critical apt-setup/mirror/error || true
db_go || exit 10
db_get apt-setup/mirror/error
if [ "$RET" = "Change mirror" ]; then
choose-mirror -n || true
db_capb backup progresscancel
elif [ "$RET" = Ignore ]; then
exit 1
fi
fi
done
echo "deb-src $protocol://$hostname$directory $codename $dists" >> $file
|