File: 41cdset

package info (click to toggle)
apt-setup 1%3A0.198
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 2,272 kB
  • sloc: sh: 1,247; makefile: 25
file content (151 lines) | stat: -rwxr-xr-x 4,180 bytes parent folder | download | duplicates (2)
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
#!/bin/sh
set -e

. /usr/share/debconf/confmodule
. /lib/chroot-setup.sh

# This code is copied from chroot-setup.sh, and is needed until after a d-i
# release whose initrds contain a sufficiently new version of di-utils.
if ! type chroot_cleanup_localmounts >/dev/null 2>&1; then
	# Variant of chroot_cleanup that only cleans up chroot_setup's mounts.
	chroot_cleanup_localmounts () {
		rm -f /target/usr/sbin/policy-rc.d
		mv /target/sbin/start-stop-daemon.REAL /target/sbin/start-stop-daemon
		if [ -x /target/sbin/initctl.REAL ]; then
			mv /target/sbin/initctl.REAL /target/sbin/initctl
		fi

		# Undo the mounts done by the packages during installation.
		# Reverse sorting to umount the deepest mount points first.
		# Items with count of 1 are new.
		for dir in $( (cat /tmp/mount.pre /tmp/mount.pre /tmp/mount.post ) | \
			     sort -r | uniq -c | grep "^[[:space:]]*1[[:space:]]" | \
			     sed "s/^[[:space:]]*[0-9][[:space:]]//"); do
			if ! umount $dir; then
				logger -t $0 "warning: Unable to umount '$dir'"
			fi
		done
		rm -f /tmp/mount.pre /tmp/mount.post

		rm -f /var/run/chroot-setup.lock
	}
fi

file="$1"

if [ ! -e /cdrom/.disk/cd_type ] || [ ! -e /var/lib/install-cd.id ]; then
	exit 0
fi

# Various different image types look different here:
#
# Image Type                       cd_type
###################################################
# netinst                          "not_complete"
# full CD sets (default desktop)   "full_cd"
# desktop-specific CD images       "full_cd/single"
# DVD                              "dvd"
# bluray                           "bluray"
# multi-arch CD/DVD                "not_complete"
# live                             "live"
#
# It can make sense to offer to scan more media here in most cases,
# but... on live or blu-ray it's unlikely to help; the
# desktop-specific image is designed specifically to work with only a
# single image. Hopefully the following makes sense.
#
# Images written to USB pen drives still need better support
# too... :-(
cd_type=$(cat /cdrom/.disk/cd_type)
case "$cd_type" in
    live)
	exit 0
	;;
    full_cd/single)
	exit 0
	;;
    bluray*)
	exit 0
	;;
esac

get_label() {
	LC_ALL=C $logoutput --pass-stdout $chroot $ROOT \
		apt-cdrom ident < /dev/null | grep "^Stored label:" | head -n1 | \
		sed "s/^[^:]*: //"
}

logoutput=""
if [ "$CATCHLOG" ]; then
	logoutput="log-output -t apt-setup"
fi

chroot=
if [ "$ROOT" ]; then
	chroot=chroot

	# We can only change CDs if current CD is unmounted
	$logoutput umount /cdrom || true

	chroot_setup
	# Horrible hack to let us call a subprocess that also sources the
	# confmodule, since chroot_setup tears down debconf state.
	export DEBIAN_HAS_FRONTEND=1
	export DEBCONF_REDIR=1
	# Needed until after a d-i release with new enough di-utils.
	mountpoints > /tmp/mount.post
	trap chroot_cleanup_localmounts EXIT HUP INT QUIT TERM
fi

tmp=$($chroot $ROOT mktemp)

cd_label=$(tail -n1 /var/lib/install-cd.id)
db_subst apt-setup/cdrom/set-first LABEL "$cd_label"
db_input high apt-setup/cdrom/set-first || true
if ! db_go; then
	if [ "$ROOT" ]; then
		load-install-cd "$ROOT"
	fi
	exit 10
fi
db_get apt-setup/cdrom/set-first

while [ "$RET" = true ]; do
	cd_label=$(get_label)
	# Hmm. The greps could fail if a label contains regexp control chars...
	if [ "$cd_label" ] && \
	   (grep "^deb cdrom:\[$cd_label\]" $file || \
	    grep "^deb cdrom:\[$cd_label\]" $ROOT/etc/apt/sources.list.new); then
		template=apt-setup/cdrom/set-double
		db_subst $template LABEL "$cd_label"
	else
		# apt-cdrom can be interactive, avoid that
		if $logoutput $chroot $ROOT apt-cdrom add \
		   -o Dir::Etc::SourceList=$tmp \
		   </dev/null; then
			cat $ROOT$tmp >> $file

			# Label is assigned by apt-cdrom add, so get again
			cd_label=$(get_label)
			template=apt-setup/cdrom/set-next
			db_subst $template LABEL "$cd_label"
		else
			template=apt-setup/cdrom/set-failed
		fi
		rm -f $ROOT$tmp $ROOT$tmp~
	fi

	db_input critical $template || true
	if ! db_go; then
		if [ "$ROOT" ]; then
			load-install-cd "$ROOT"
		fi
		exit 10
	fi
	db_get $template
done

# Make sure the installation CD is loaded again
if [ "$ROOT" ]; then
	load-install-cd "$ROOT"
fi