summaryrefslogtreecommitdiffstats
path: root/debian/tests/check_upgradepath
blob: d1f257809cd9c3eb451fb7b19e7aea45ba7e2548 (plain)
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
#! /bin/sh

set -e

# WARNING: This script is obsolete and will require a fair bit of work to get
# working again.  It assumes woody, uses debconf questions that don't exist
# any more, and probably doesn't check everything that you would want to
# check.  Preserved just because I haven't done the work to see if puiparts
# can now do the same thing in a cleaner way.

# Setup
: ${chroot_dir:=../chroot}
: ${debmirror:=http://ftp.de.debian.org/debian}
: ${proxy:=http://proxy.galaxy:3128/}
unset LC_ALL
unset LC_CTYPE
unset LC_MESSAGES
# XXX: comment out when testing new versions. Needed so libc6 does not
# ask for restarting services.
export DEBIAN_FRONTEND=noninteractive

woodytar=$chroot_dir/woody_base.tar.gz

# List our packages
list_packages() {
	local p ver
	ver=`dpkg-parsechangelog|sed -ne 's/^Version: //p'`
	for p in `dh_listpackages`; do
		(cd .. && echo ${p}_$ver*deb)
	done
}

# Run a command inside the chroot

in_target() {
	chroot $chroot_dir/woody "$@"
}

# Set a debconf variable inside the chroot

debconf_set() {
	local name=$1
	shift
	cat >>$chroot_dir/woody/var/cache/debconf/config.dat <<EOF
Name: $name
Template: $name
Flags: seen
Value: $@

EOF
}

# Setup a woody chroot

setup_chroot() {
	# Kill an existing chroot
	rm -Rf $chroot_dir/woody

	# If there is a tar archive with a base system we use it
	if [ -e $woodytar ]; then
		mkdir $chroot_dir/woody
		echo -n "Unpacking system from $woodytar"
		tar -C $chroot_dir/woody -xzf $woodytar
		echo "done."
	# Otherwise we need to create a new base system and save it
	# to a tar for the next time
	else
		debootstrap woody $chroot_dir/woody $debmirror | \
		  shtool prop -p "Creating base system from $debmirror"
		tar -C $chroot_dir/woody -czvf $woodytar . | \
			shtool prop -p "Saving system to $woodytar"
	fi

	# Install a suitable apt configuration
	echo "deb $debmirror woody main" \
		> $chroot_dir/woody/etc/apt/sources.list
	echo "Acquire::HTTP::Proxy \"$proxy\";" \
		> $chroot_dir/woody/etc/apt/apt.conf
	in_target apt-get update
	in_target mount -t proc none /proc

	# We don't want any debconf interaction
	#debconf_set debconf/frontend Noninteractive
}

# These are our example configurations for testing the upgrade

conf_domain_or_host() {
	debconf_set slapd/fill_method auto
	debconf_set slapd/suffix_type "domain or host"
	debconf_set slapd/domain "some.example.net"
	debconf_set slapd/replicate false
	debconf_set shared/organization Some Organization
}


check_domain_or_host() {
	sleep 2  # wait for slapd to startup
	in_target ldapsearch -h localhost -b dc=some,dc=example,dc=net -x \
		objectclass=\*
}

conf_location() {
	debconf_set slapd/fill_method auto
	debconf_set slapd/suffix_type "location"
	debconf_set shared/locale/countrycode de
	debconf_set shared/organization "Sample Organization"
	debconf_set slapd/replicate false
	debconf_set shared/organization Some Organization
}

check_location() {
	sleep 2  # wait for slapd to startup
	in_target ldapsearch -h localhost -b "o=Some Organization, c=de" \
		-x objectclass=\*
}
# Install slapd inside the chroot

install_slapd() {
	in_target apt-get -y install slapd ldap-utils
}

# Do an upgrade of our packages inside the chroot

upgrade() {
	# Link our packages into the chroot
	for p in `list_packages`; do 
		ln ../$p $chroot_dir/woody/root/
	done

	# Create a packages file
	(cd $chroot_dir/woody/root && dpkg-scanpackages . /dev/null >Packages)

	# Switch to unstable
	echo "deb $debmirror unstable main" \
		> $chroot_dir/woody/etc/apt/sources.list
	echo "deb file:/root ./" >> $chroot_dir/woody/etc/apt/sources.list

	# Update package lists
	in_target apt-get update

	# Tell our scripts to fix the config
	debconf_set slapd/fix_directory true
	debconf_set slapd/password1 foobar
	debconf_set slapd/allow_ldap_v2

	# Do an upgrade of our packages
	in_target apt-get install -y `dh_listpackages`
}

# Checks if upgrading a woody system with slapd configured with the
# command given works.

check_upgrade() {
	setup_chroot
	conf_$1
	debconf_set slapd/password1 foobar
	debconf_set slapd/password2 foobar
	install_slapd
	check_$1
	upgrade
	check_$1
	in_target /etc/init.d/slapd stop
	in_target umount /proc
}

# Try upgrading our example setups

for i in location domain_or_host; do
	check_upgrade $i
done

echo "SUCCESS testing upgrading from woody"