File: apt-setup

package info (click to toggle)
base-config 2.53.10.3
  • links: PTS
  • area: main
  • in suites: sarge
  • size: 2,072 kB
  • ctags: 36
  • sloc: sh: 1,755; makefile: 101; perl: 48
file content (716 lines) | stat: -rwxr-xr-x 19,895 bytes parent folder | download
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
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
#!/bin/sh
# Apt configurator.
# Copyright GPL 1999-2004 by Joey Hess
set -e

# If the first parameter is "probe", do cd autoprobing on startup.
if [ "$1" = probe ]; then
	CDPROBE=1
fi

# If the second parameter is "-N", do not set seen flags before asking
# questions; this allows for preseeding.
if [ "x$2" = "x-N" ]; then
	NONINTERACTIVE=1
fi

# Where is the mirrors master list?
MIRRORLIST=/usr/lib/base-config/Mirrors.masterlist

. /usr/share/debconf/confmodule

TEXTDOMAIN=base-config
export TEXTDOMAIN

# Get the configuration from /etc/apt/apt.conf
APTGET="/usr/bin/apt-get"
APTETC="/etc/apt/"
APTCDROM="/usr/bin/apt-cdrom"
RES=`apt-config shell \
	APTGET Dir::Bin::apt-get/d \
	APTETC Dir::Etc/d \
	APTCDROM Dir::Bin::apt-cdrom/d`
eval $RES

country_i18n () {
  # conversion country name using iso_3166 table
    case "$1" in
      local)
        perl -e '
		use Locale::gettext;
		use POSIX;
		textdomain("iso_3166");
		print gettext(shift);
		' $2
      ;;
      C)
        perl -e '
		use Locale::gettext;
		use POSIX;
		textdomain("iso_3166");
		$country=shift;
		$ret= "";

		open (T, "/usr/share/zoneinfo/iso3166.tab");
		while (<T>) {
			next if /^#/;
			chomp;
			($code, $long)=split(/\t/, $_);
			if (gettext($long) eq $country) {
			    $ret = $long;
			    close T;
			}
		}
		close T;
		print $ret ? $ret : $country;
		' $2
      ;;
    esac
}

# Pass in a URI type; this function returns a list of countries
# that have mirrors in them that match the type.
country_list () {
	# translators: there MUST be a comma followed by a space at the end
	# of your translation, or things will break!
	gettext "enter information manually, "
	perl -ne '
		BEGIN {
			use Locale::gettext;
			use POSIX;
			textdomain("iso_3166");
			$type=shift;
			open (T, "/usr/share/zoneinfo/iso3166.tab");
			while (<T>) {
				next if /^#/;
				chomp;
				($code, $long)=split(/\t/, $_);
				$co{$code}=$long;
			}
			close T;
			$/="\n\n";
		}
		if (/Archive-$type:/) {
			($c)=/Country: (.*?)\s+.*\n/;
			$countries{gettext($co{$c})}=1 if $c;
		}
		END { print join(", ", sort(keys %countries)) }
	' $1 $MIRRORLIST
}

# Pass in a URI type and a country; this function returns a 
# list of mirrors of the correct type in the country.
# The list is ordered with push mirrors at the top.
# Other orderings can be added here.
mirror_list () {
	perl -ne '
		BEGIN {
			$type=shift;
			$country=shift;
			open (T, "/usr/share/zoneinfo/iso3166.tab");
			while (<T>) {
				next if /^#/;
				chomp;
				($code, $long)=split(/\t/, $_);
				if ($long eq $country) {
					$country=$code;
				        close T;
				}
			}
			close T;
			$/="\n\n";
		}
		if (/Archive-$type:/ && /Country: $country\s+.*\n/) {
			($s)=/Site: (.*?)\n/;
			($t)=/Type: (.*?)\n/;
			$rating=0;
			$rating=1 if $t=~/push/i;
			$rating=2 if $t=~/push-primary/i;
			$mirrors{$s}=$rating;
		}
		END { print join(", ",
			sort { $mirrors{$b} <=> $mirrors{$a} }
			(keys %mirrors)) }
	' $1 "$2" $MIRRORLIST
}

# Pass in the URI type and the hostname of a mirror; this returns the
# directory the debian mirror is located in on that host.
mirror_dir () {
	perl -ne '
		BEGIN { $/="\n\n"; $type=shift; $mirror=shift }
		if (/Site: $mirror/ && /Archive-$type: (.*)\n/) {
			print $1;
			exit;
		}
	' $1 $2 $MIRRORLIST
}

# After mounting a cd, call this function to scan
# it with apt-cdrom, which also adds it to the sources.list.
# The cd will then be unmounted.
scan_cd () {
	clear >/dev/tty </dev/tty
	gettext "Scanning CD, this will take a minute."
	echo
	# Touch file because apt-cdrom bails if it doesn't exist.
	touch ${APTETC}sources.list
	if $APTCDROM add --no-mount </dev/tty >/dev/tty; then
		umount /cdrom 2>/dev/null || true
		clear >/dev/tty </dev/tty
		return 0
	else
		umount /cdrom 2>/dev/null || true
		clear >/dev/tty </dev/tty
		# Apt didn't like the cdrom for some reason.
		db_input critical apt-setup/cd/bad || true
		db_go || true
		db_fset apt-setup/cd/bad seen false
		return 1
	fi
}

# This function should be called only after one cd has been successfully
# scanned. It prompts the user if there are more cd's to scan and
# scans them. Pass in the device that is known to be the cd drive.
handle_rest_cds () {
	LOOP=1
	while [ "$LOOP" ]; do
		# Make sure the cd is unmounted, we may be prompting
		# them to change cd's.
		umount /cdrom 2>/dev/null || true

		db_set apt-setup/cd/another false
		db_input high apt-setup/cd/another || true
		db_go || true
		db_fset apt-setup/cd/another seen false
		db_get apt-setup/cd/another
		if [ "$RET" = true ]; then
			while ! mount $1 /cdrom -o ro -t iso9660
			do
				db_input critical apt-setup/cd/dev || true
				if ! db_go; then
					db_fset apt-setup/cd/dev seen false
					continue 2
				fi
				db_fset apt-setup/cd/dev seen false
				db_get apt-setup/cd/dev
				CDDEV="$RET"
			done
			scan_cd || true
		else
			LOOP=''
		fi
	done
}

# This function will ask the user if they want to add another
# apt source. If so, it returns true.
add_another () {
	# Default to adding another source if all the current sources do
	# not provide at least 300 packages. If it's closer to 200, then
	# they may be using a netinst cdrom or something, and should add
	# more sources.
	PACKAGE_COUNT=$(LC_ALL=C apt-cache stats | grep -i 'Normal Packages:' | awk '{ print $3 }')
	if [ "$PACKAGE_COUNT" -ge 300 ]; then
		prio=medium
		db_set apt-setup/another false
	else
		prio=high
		db_set apt-setup/another true
	fi
	
	#  Several notes for translators:
	#  * The singular form is only there to make use of plural forms;
	#  * If package count is 0, a separate error message should be displayed.
	#  * This sentence is part of a longer paragraph, full stop is omitted here.
	#  * "${PACKAGE_COUNT}" must not be translated.
	MESSAGE=$(ngettext 'The Debian package management tool, apt, is now configured, and can install ${PACKAGE_COUNT} package' 'The Debian package management tool, apt, is now configured, and can install ${PACKAGE_COUNT} packages' $PACKAGE_COUNT | sed -e "s/\${PACKAGE_COUNT}/$PACKAGE_COUNT/")
	db_subst apt-setup/another MESSAGE $MESSAGE

	db_input $prio apt-setup/another || return 1
	if ! db_go; then
		db_fset apt-setup/another seen false
		return 1 # effectively backup to the menu.
	fi
	db_fset apt-setup/another seen false
	db_get apt-setup/another
	if [ "$RET" = true ]; then
		return 0
	else
		return 1
	fi
}

db_capb backup
db_settitle apt-setup/title

MAINLOOP=1

# First, try to do cdrom autodetection. This is so in the most common case,
# you don't have to configure anything at all.

# If /dev/cdrom exists, use it.
if [ -e /dev/cdrom ]; then
	CDDEV=/dev/cdrom
	db_set apt-setup/cd/dev "$CDDEV"
else
	# If there is a fstab entry for /cdrom or /media/cdrom0, use its device.
	CDDEV=$(grep "[[:space:]]/media/cdrom0/*[[:space:]]" /etc/fstab | awk '{print $1}')
	if [ -z "$CDDEV" ]; then
		CDDEV=$(grep "[[:space:]]/cdrom/*[[:space:]]" /etc/fstab | awk '{print $1}')
	fi
	if [ -n "$CDDEV" ] && [ -e "$CDDEV" ]; then
		db_set apt-setup/cd/dev "$CDDEV"
	fi
fi

# Don't probe for CD if preseeded to use some other uri_type.
if [ -n "$NONINTERACTIVE" ]; then
	db_fget apt-setup/uri_type seen
	if [ "$RET" = true ]; then
		db_get apt-setup/uri_type
		if [ "$RET" != "cdrom" ]; then
			CDPROBE=""
		fi
	fi
fi

if [ "$CDPROBE" ] && [ "$CDDEV" ] && [ "$RET" = false ]; then
	umount /cdrom 2>/dev/null || true
	# Try mounting the detected cd rom.
	if mount $CDDEV /cdrom -o ro -t iso9660 2>/dev/null && scan_cd; then
		handle_rest_cds $CDDEV
		MAINLOOP=''
	else
		# Unable to mount it, or the cd was bad. Make sure that cdrom
		# is the default, and just go on to ask them where they want
		# apt to install from.
		db_set apt-setup/uri_type "cdrom"
		db_subst apt-setup/uri_type note $(gettext 'You probably used a CD to install the Debian base system, but it is not currently in the drive. You should probably just insert it and select "cdrom".')
	fi
fi

while [ "$MAINLOOP" ] || add_another; do
	# Ask what source apt should install from.
	db_input critical apt-setup/uri_type || true
	if ! db_go; then
		db_fset apt-setup/uri_type seen false
		exit 30
	fi
	db_fset apt-setup/uri_type seen false
	db_get apt-setup/uri_type
	URI="$RET"
	# Clear any note that is on the uri_type, now that they've seen it.
	db_subst apt-setup/uri_type note ""

	# If they chose to use CD, there is little point in asking
	# these questions, since the CD's they insert will answer them for us.
	# Same goes if they are entering manually.
	if [ "$URI" != "cdrom" ] && [ "$URI" != "edit sources list by hand" ]; then
		db_beginblock
		db_input low mirror/suite || true
		db_input low apt-setup/non-free || true
		db_endblock
		if ! db_go; then
			db_fset mirror/suite seen false
			db_fset apt-setup/non-free seen false
			continue
		fi
		db_fset mirror/suite seen false
		db_fset apt-setup/non-free seen false
			
		# If they choose not 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
			if ! db_go; then
				db_fset apt-setup/contrib seen false
				continue
			fi
			db_fset apt-setup/contrib seen false
		else
			db_fget apt-setup/contrib seen
			if [ "$RET" = false ]; then
				db_set apt-setup/contrib true
			fi
		fi
	fi

	case "$URI" in
	ftp|http)
		# Ask them which country they're in.
		db_subst apt-setup/country countries "`country_list $URI`"
		db_fget apt-setup/country seen
		if [ "$RET" = "false" ]; then
			# Set default country
			db_get debian-installer/country
			COUNTRY=$(perl -e '
				$countrycode=shift;
				open (T, "/usr/share/zoneinfo/iso3166.tab");
				while (<T>) {
					next if /^#/;
					chomp;
					($code, $long)=split(/\t/, $_);
					if ($code eq $countrycode) {
						print "$long";
					        close T;
					}
				}
				close T;
		   	' $RET)
		   	if [ -n "$COUNTRY" ]; then
		   		db_set apt-setup/country "$COUNTRY"
		  	fi
		fi
		db_get apt-setup/country
		IFS=","
		db_set apt-setup/country $(country_i18n local "$RET")
		unset IFS
		db_get apt-setup/country
		db_input critical apt-setup/country || true
		if ! db_go; then
			db_fset apt-setup/country seen false
			continue
		fi
		db_fset apt-setup/country seen false

		db_get apt-setup/country
		if [ "$RET, " != "$(gettext 'enter information manually, ')" ]; then
		   IFS=","
		   db_set apt-setup/country $(country_i18n C "$RET")
		   unset IFS
		else
		   db_set apt-setup/country 'enter information manually'
		fi

		db_get apt-setup/country
		if [ "$RET" != "enter information manually" ]; then
			# Now prompt with the mirrors in the selected country.
			db_subst apt-setup/mirror mirrors "`mirror_list $URI \"$RET\"`"
			db_input critical apt-setup/mirror || true
			if ! db_go; then
				db_fset apt-setup/mirror seen false
				continue
			fi
			db_fset apt-setup/mirror seen false
			
			# Now shove the data about the mirror into some other
			# questions.
			db_get apt-setup/mirror
			MIRROR="$RET"
			db_set apt-setup/hostname $MIRROR
			db_set apt-setup/directory "`mirror_dir $URI $MIRROR`"
		else
			# They elected to enter info manually.
			# Prompt for hostname and directory the mirror is in.
			db_beginblock
			db_input critical apt-setup/hostname || true
			db_input critical apt-setup/directory || true
			db_endblock
			if ! db_go; then
				db_fset apt-setup/hostname seen false
				db_fset apt-setup/directory seen false
				continue
			fi
			db_fset apt-setup/hostname seen false
			db_fset apt-setup/directory seen false
		fi

		# Ask about a proxy if no proxy is yet defined.
		if [ "$URI" = "http" ] && [ -z "$http_proxy" ]; then
			if [ ! -e "$APTETC/apt.conf" ] || \
			   ! grep -iq 'Acquire::http::Proxy' $APTETC/apt.conf; then
				db_input high mirror/http/proxy || true
				if ! db_go; then
					db_fset mirror/http/proxy seen false
					continue
				fi
				db_fset mirror/http/proxy seen false
			fi
		fi
	;;
	cdrom)
		# We've already probed earlier to try to figure out the
		# cd device.
		LOOP=1
		LOOPCOUNT=5
		while [ "$LOOP" ]; do
			# Make sure the cd is unmounted, we may be prompting
			# them to change cd's.
			umount /cdrom 2>/dev/null || true
		
			# Prompt for the cd device if it wasn't autodetected.
			# TODO: We could give them a list of likely devices..
			#       This is unfriendly right now.
			if [ -z "$CDDEV" ]; then
				db_input critical apt-setup/cd/dev || true
				db_go || continue 2
				db_get apt-setup/cd/dev
				CDDEV="$RET"
				# Make /dev/cdrom link now, with device
				# they entered. This is for later use by
				# apt.
				if [ "$CDDEV" ] && [ "$CDDEV" != '/dev/cdrom' ]; then
					ln -sf $CDDEV /dev/cdrom
				fi
			fi
			
			# Now try to mount the cdrom.
			if mount $CDDEV /cdrom -o ro -t iso9660; then
				LOOP=""
				if scan_cd; then
					handle_rest_cds $CDDEV
					MAINLOOP=""
				fi
			else
				# Only loop LOOPCOUNT times.
				LOOPCOUNT=`expr $LOOPCOUNT - 1`
				if [ "0" -ge "$LOOPCOUNT" ]; then
					LOOP=""
				fi
				
				# Loop and prompt again for cd device.
				db_fset apt-setup/cd/dev seen false
				CDDEV=""
			fi
		done
		continue
	;;
	
	filesystem)
		# they need to have a mirror already mounted somewhere.
		URI=file
		LOOP=1
		LOOPCOUNT=5
		while [ "$LOOP" ]; do
			db_input critical apt-setup/directory || true
			if ! db_go; then
				db_fset apt-setup/directory seen false
				continue 2
			fi
			db_fset apt-setup/directory seen false
			db_get apt-setup/directory
			
			# A very simple mirror sanity check.
			if [ ! -d "$RET" ]; then
				db_input critical apt-setup/baddir || true
				db_go || true
				db_fset apt-setup/baddir seen false
			elif [ ! -d "$RET/dists" ]; then
				db_input critical apt-setup/not-mirror || true
				db_go || true
				db_fset apt-setup/not-mirror seen false
			else
				LOOP=''
			fi
			
			# Only try LOOPCOUNT times.
			LOOPCOUNT=`expr $LOOPCOUNT - 1`
			if [ "0" -ge "$LOOPCOUNT" ]; then
				LOOP=""
			fi
		done
	;;
	*)
		touch ${APTETC}sources.list
		cp -f ${APTETC}sources.list ${APTETC}sources.list.bak
		# Just run an editor on the sources.list file, then
		# check the result. If it fails, show the problem and loop.
		if [ -z "$EDITOR" ]; then
			EDITOR=/usr/bin/editor
		fi
		EDITOK=""
		while [ ! "$EDITOK" ]; do
			touch ${APTETC}sources.list
			$EDITOR ${APTETC}sources.list >/dev/tty </dev/tty
			tempfile=`tempfile`
			clear >/dev/tty </dev/tty
			gettext "Testing apt sources..."
			echo
			if $APTGET -o APT::Get::List-Cleanup=false -o Dir::Etc::sourcelist=${APTETC}sources.list update 2>$tempfile; then
				clear >/dev/tty </dev/tty
				EDITOK=1
			else
				clear >/dev/tty </dev/tty
				db_subst apt-setup/badedit apt_error `tr '\n' ' ' < $tempfile`
				db_input critical apt-setup/badedit || true
				db_go || true
				db_fset apt-setup/badedit seen false
				db_get apt-setup/badedit
				if [ "$RET" != "edit" ]; then
					mv -f ${APTETC}sources.list.bak ${APTETC}sources.list
					continue 2
				fi
			fi
		done
		MAINLOOP=""
		rm -f ${APTETC}sources.list.bak
		continue
	esac

	# The temporary file to use as sources.list for testing
	# new items.
	tmpsources=`tempfile`

	db_get apt-setup/hostname
	HOST="$RET"
	db_get apt-setup/directory
	DIR="$RET"
	db_get mirror/suite
	DIST="$RET"
	
	db_get apt-setup/non-free
	if [ "$RET" = true ]; then
		NONFREE=" non-free"
	else
		NONFREE=""
	fi
	db_get apt-setup/contrib
	if [ "$RET" = true ]; then
		CONTRIB=" contrib"
	else
		CONTRIB=""
	fi
	if [ "$URI" = ftp ] || [ "$URI" = http ]; then
		SEP=//
	else
		SEP=""
	fi
	if [ "$URI" = file ]; then
		HOST=""
	fi

	echo "deb $URI:$SEP$HOST$DIR $DIST main$NONFREE$CONTRIB" >> $tmpsources
	SRCENTRY="deb-src $URI:$SEP$HOST$DIR $DIST main$NONFREE$CONTRIB"

	# If there is a http proxy, make apt use it temporarily.
	db_get mirror/http/proxy
	if [ "$RET" ]; then
		PROXY_OPTS="-o Acquire::http::Proxy=\"$RET\""
	else
		PROXY_OPTS=""
	fi

	# As a final sanity check, run apt-get update, and catch the
	# return code and errors.
	tempfile=`tempfile`
	clear >/dev/tty </dev/tty
	gettext "Testing apt sources..."
	echo
	if ! $APTGET $PROXY_OPTS -o APT::Get::List-Cleanup=false -o Dir::Etc::sourcelist=$tmpsources update 2>$tempfile; then
		clear >/dev/tty </dev/tty
		# Show the user the error message and loop.
		db_subst apt-setup/badsource apt_error `tr '\n' ' ' < $tempfile`
		db_input critical apt-setup/badsource || true
		db_go || true
		db_fset apt-setup/badsource seen false
		rm -f $tempfile $tmpsources
		continue
	fi
	# Success, so add the entry to the real sources.list
	touch ${APTETC}sources.list
	echo "" >> ${APTETC}sources.list
	cat $tmpsources >> ${APTETC}sources.list
	MAINLOOP=""
	
	# Success, so add proxy information if not already present.
	db_get mirror/http/proxy
	if [ "$RET" ]; then
		touch $APTETC/apt.conf
		if ! grep -iq 'Acquire::http::Proxy' $APTETC/apt.conf; then
			echo "Acquire::http::Proxy \"$RET\";" >> $APTETC/apt.conf
		fi
	fi
	
	# We have a deb-src line to add too. Test it, see if it works. If not,
	# don't fail, just don't add it.
	echo "$SRCENTRY" > $tmpsources
	if $APTGET -o APT::Get::List-Cleanup=false -o Dir::Etc::sourcelist=$tmpsources update 2>/dev/null; then
		echo "$SRCENTRY" >> ${APTETC}sources.list
	fi
	clear >/dev/tty </dev/tty

	rm -f $tempfile $tmpsources
done

# Finally, see about adding a security.debian.org entry. Deal with these
# situations:
# * already have it in sources.list, uncommented: don't ask about it
# * unstable does not need security.debian.org, so try not to even ask
#   if that's all they have in sources.list
# * installing from CD; no network connectivity: add it, commented out
# * adding it when the user has picked non-free and/or contrib at least
#   some of the time: include those
# * adding it when the user has not: don't include those

if apt-cache policy | grep "o=Debian,a=" | grep -qv 'a=unstable' && \
   ! grep -q '^[^#]*security.debian.org' ${APTETC}sources.list; then
	# Figure out what line to add (we're definitely going to add something,
	# even if it's just a comment).
	#
	# To determine if non-free and contrib should be included, grep
	# the file to see if they are listed in it.
	DISTS="main"
	for dist in contrib non-free; do
		if grep -q '^[^#]*'$dist ${APTETC}sources.list; then
			DISTS="$DISTS $dist"
		fi
	done

	# Figure out which suite to use.
	if apt-cache policy | grep "o=Debian,a=" | grep -q 'a=testing'; then
	    SUITE="testing"
	elif apt-cache policy | grep "o=Debian,a=" | grep -q 'a=oldstable'; then
	    SUITE="oldstable"
	else
	    SUITE="stable"
	fi

	LINE="http://security.debian.org/ $SUITE/updates $DISTS"

	COMMENT="# "

	# Now ask if they want the entry to be added.
	db_input medium apt-setup/security-updates || true
	db_go || true
	db_fset apt-setup/security-updates seen false
	db_get apt-setup/security-updates
	if [ "$RET" = true ]; then
		# Test it.
		tmpsources=`tempfile`
		echo "deb $LINE" > $tmpsources
		clear >/dev/tty </dev/tty
		gettext "Testing apt sources..."
		echo
		tempfile=`tempfile`
		if ! $APTGET -o APT::Get::List-Cleanup=false -o Dir::Etc::sourcelist=$tmpsources update 2>$tempfile; then
			# Display failure message
			clear >/dev/tty </dev/tty
			db_subst apt-setup/security-updates-failed apt_error `tr '\n' ' ' < $tempfile`
			db_input critical apt-setup/security-updates-failed || true
			db_go || true
			db_fset apt-setup/security-updates-failed seen false
		else
			# Success. Don't comment them out.
			COMMENT=""
			# TODO: test and add deb-src too.
		fi
	
		rm -f $tempfile $tmpsources
	fi

	# Now add the entry, commented out or not. (Don't add the commented
	# version if a commented version already exists.)
	if [ -z "$COMMENT" ] || ! grep -q '#.*security.debian.org' ${APTETC}sources.list; then
		echo "" >>${APTETC}sources.list
		echo "${COMMENT}deb $LINE" >>${APTETC}sources.list
	fi	
fi