File: postinst

package info (click to toggle)
pkgsel 0.85
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 720 kB
  • sloc: sh: 206; makefile: 2
file content (216 lines) | stat: -rwxr-xr-x 5,662 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
#!/bin/sh
set -e
. /usr/share/debconf/confmodule

# Avoid perl warnings in any of the chroot calls below
export LANG=C

REMOUNT_CD=""
DIVERTS=""
for divert in /usr/bin/fc-cache; do
	if ! chroot /target dpkg-divert --listpackage $divert | grep -q .; then
		DIVERTS="$DIVERTS $divert"
	fi
done

log() {
	logger -t pkgsel "$@"
}
warning() {
	log "warning: $@"
}

cleanup() {
	for divert in $DIVERTS; do
		rm -f "/target$divert"
		log-output -t pkgsel chroot /target dpkg-divert \
			--package pkgsel --rename --quiet --remove "$divert"
	done
	if [ -x /target/usr/sbin/update-initramfs ]; then
		umount /target/proc
		umount /target/sys
		umount /target/dev
	fi
}

aptfailed() {
	ret=$?
	if [ "$ret" != 0 ]; then
		# In case packages failed to install, try to clean up.
		in-target dpkg --configure -a || true

		# TODO useful error message here (for ret != 30)
		db_progress INFO pkgsel/progress/cleanup
		if ! cleanup; then
			log "cleanup failed"
		fi
		db_progress STOP
		load_install_cd
		exit $ret
	fi
}

load_install_cd() {
	if [ "$REMOUNT_CD" ]; then
		load-install-cd "/target" || true
	fi
}

db_progress START 0 1000 debian-installer/pkgsel/title
db_progress INFO pkgsel/progress/init

# d-i debconf variables used by packages
debconf-copydb -p \
	"^(debian-installer/language|debian-installer/country|debian-installer/keymap|passwd/username)$" \
	configdb target_configdb

# temporarily divert programs that take a long time
for divert in $DIVERTS; do
	log-output -t pkgsel chroot /target dpkg-divert --package pkgsel \
		--rename --quiet --add "$divert"
	ln -sf /bin/true "/target$divert"
done

db_progress STEP 10

# Unmount the installation CD to allow CD changing; as it may be needed
# again after pkgsel, make sure it is reloaded before exiting
if [ -e /var/lib/install-cd.id ]; then
	log-output -t pkgsel umount /cdrom || true
	REMOUNT_CD=1
fi

# Make update-initramfs work if it's needed during upgrade/installation
if [ -x /target/usr/sbin/update-initramfs ]; then
	# get UUIDs for any devices formatted after partitioning
	update-dev

	# make UUIDs etc. available in the target system
	mount -o bind /dev /target/dev
	mount -o bind /sys /target/sys
	mount -o bind /proc /target/proc
fi

db_get pkgsel/upgrade
if [ "$RET" = none ]; then
	tasksel_start=50
else
	upgrade_type="$RET"
	# Convert to apt-get command names.
	case "$RET" in
	safe-upgrade) upgrade_type='upgrade --with-new-pkgs';;
	full-upgrade) upgrade_type=dist-upgrade;;
	esac
	db_progress INFO pkgsel/progress/upgrade
	sleep 2 # allow the message to be seen

	log "checking for (security) updates to the base system"
	# Exclude Recommends to avoid installing new recommended packages
	# as part of an upgrade
	in-target sh -c "debconf-apt-progress --from 50 --to 100 --logstderr -- apt-get -q --no-install-recommends -y -o DPkg::options=--force-confnew $upgrade_type" || aptfailed
	tasksel_start=100
fi

partsdir="/usr/lib/pre-pkgsel.d"
if [ -d "$partsdir" ]; then
	log "running pre-pkgsel hook scripts"

	scriptcount=$(ls "$partsdir"/* 2>/dev/null | wc -l)
	if [ $scriptcount -lt 10 ]; then
		scripts_range=$(($scriptcount * 10))
	else
		scripts_range=100
	fi
	scripts_start=$tasksel_start
	tasksel_start=$(($scripts_start + $scripts_range))

	scriptcur=0
	for script in $(ls "$partsdir"/* 2>/dev/null); do
		base=$(basename $script | sed 's/[0-9]*//')
		if ! db_progress INFO pkgsel/progress/$base; then
			db_subst pkgsel/progress/fallback SCRIPT "$base"
			db_progress INFO pkgsel/progress/fallback
		fi
		if [ -x "$script" ]; then
			# be careful to preserve exit code
			if log-output -t pkgsel "$script"; then
				:
			else
				warning "$script returned error code $?"
			fi
		else
			error "Unable to execute $script"
		fi

		# Advance progress bar
		scriptcur=$(($scriptcur + 1))
		db_progress SET $(($scripts_start + $scripts_range * $scriptcur / $scriptcount))
	done
fi

db_get pkgsel/include
if [ "$RET" ]; then
	tasksel_end=900
else
	tasksel_end=950
fi

if db_get pkgsel/run_tasksel && [ "$RET" = true ]; then
    log "starting tasksel"
    db_progress INFO pkgsel/progress/tasksel
    apt-install tasksel  # ensure tasksel is installed
    DEBIAN_TASKS_ONLY=1 in-target sh -c "tasksel --new-install --debconf-apt-progress='--from $tasksel_start --to $tasksel_end --logstderr'" || aptfailed
fi

if db_get pkgsel/include/install-recommends; then
	log "The template pkgsel/include/install-recommends is no longer used; please use base-installer/install-recommends instead"
fi

db_get pkgsel/include
if [ "$RET" ]; then
	log "installing additional packages"

	# Allow comma-separation so that this can more easily be preseeded
	# at the kernel command line.
	RET="$(printf '%s' "$RET" | sed 's/,/ /g')"
	in-target sh -c "debconf-apt-progress --from 900 --to 950 --logstderr -- apt-get -q -y install -- $RET" || aptfailed
fi


# Start blendsel?
if [ -f "/target/usr/bin/blendsel" ]; then
    log "starting blendsel"
    db_progress INFO pkgsel/progress/blendsel
    in-target sh -c "blendsel --debconf-apt-progress='--from 100 --to 2000 --logstderr'" || aptfailed
fi


log "finishing up"
db_progress INFO pkgsel/progress/cleanup
if ! cleanup; then
	log "cleanup failed"
fi

db_progress STEP 20

if [ -x /target/usr/bin/fc-cache ]; then
	chroot /target fc-cache -f -v >/target/var/log/fontconfig.log 2>&1 \
		|| true
fi

if db_get pkgsel/updatedb && [ "$RET" = true ]; then
	for script in mlocate locate; do
		if [ -x "/target/etc/cron.daily/$script" ]; then
			chroot /target "/etc/cron.daily/$script" || true
			break
		fi
	done
fi

# Ensure we don't have any leftover .deb files in cache
chroot /target apt-get clean

db_progress STEP 30
db_progress STOP

load_install_cd