summaryrefslogtreecommitdiffstats
path: root/bin/cd_tester.sh
blob: 54ccd2d2383fa53445a3f3974aea6b39f9255433 (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
#!/bin/bash

# Copyright 2012 Holger Levsen <holger@layer-acht.org>
# released under the GPLv=2

# $1 = vnc-display
# $2 = name
# $3 = wget url/jigdo url

if [ "$1" = "" ] || [ "$2" = "" ] || [ "$3" = "" ] ; then
	echo "need three params"
	echo '# $1 = vnc-display'
	echo '# $2 = name'
	echo '# $3 = wget url/jigdo url'
	exit 1
fi

#
# default settings
#
set -x
set -e
export LC_ALL=C
export MIRROR=http://ftp.de.debian.org/debian
export http_proxy="http://localhost:3128"

#
# init
#
DISPLAY=$1
NAME=$2
IMAGE_URL=$3
IMAGE=$(pwd)/$(basename $IMAGE_URL)
IMAGE_MNT="/media/cd-$NAME.iso"
rm -rf results
mkdir -p results
cd results

cleanup_all() {
	set -x
	#
	# create video
	#
	ffmpeg2theora --videobitrate 700 --no-upscaling snapshot_%06d.ppm --framerate 12 --max_size 800x600 -o cd-test-$NAME.ogv
	set +x
	rm snapshot_??????.ppm
	set -x
	#
	# kill qemu and image
	#
	sudo kill -9 $(ps fax | grep -v grep | grep -v sudo | grep qemu-system | grep $IMAGE 2>/dev/null | cut -d " " -f1)
	sleep 0.3s
	rm $NAME.qcow
	#
	# cleanup
	#
	sudo umount $IMAGE_MNT
}

bootstrap() {
	echo "Doing cd tests for $NAME now."
	qemu-img create -f qcow $NAME.qcow 20g
	case $NAME in
		debian-edu-wheezy)
				echo "fire up qemu now..."
				sudo qemu-system-x86_64 -cdrom $IMAGE -hda $NAME.qcow -boot d -m 1024 -display vnc=localhost:$DISPLAY --kernel $IMAGE_MNT/install.amd/vmlinuz --append "auto=true priority=critical url=http://10.0.2.2/userContent/$NAME-preseed.cfg video=vesa:ywrap,mtrr vga=788 acpi=off initrd=/install.amd/gtk/initrd.gz -- quiet" --initrd $IMAGE_MNT/install.amd/gtk/initrd.gz &
				;;
		*)		echo "unsupported distro."
				exit 1
				# wheezy: qemu-system-x86_64 -cdrom debian-6.0.6-amd64-businesscard.iso -hda debian.qcow -boot d -m 2048 -display vnc=localhost:1 --kernel /mnt/install.amd/vmlinuz --append "auto=true priority=critical url=http://10.0.2.2/userContent/preseed.cfg vga=788 initrd=/install.amd/initrd.gz" --initrd /mnt/install.amd/initrd.gz
				# kernel /install.amd/vmlinuz
				# append desktop=lxde video=vesa:ywrap,mtrr vga=788 initrd=/install.amd/gtk/initrd.gz -- quiet
				;;
	esac
}

monitor_installation() {
	sleep 2
	echo "Taking screenshots every 2secs now, until the installation is finished or 5h have passed"
	NR=0
	while [ $NR -lt 9000 ] ; do
		set +x
		#
		# break if qemu-system has finished
		#
		if [ $(ps fax | grep -v grep | grep qemu-system | grep $IMAGE 2>/dev/null | wc -l) -eq 0 ] ; then
			break
		fi
		vncsnapshot -quiet -allowblank localhost:$DISPLAY snapshot_$(printf "%06d" $NR).jpg 2>/dev/null
		convert snapshot_$(printf "%06d" $NR).jpg snapshot_$(printf "%06d" $NR).ppm 
		rm snapshot_$(printf "%06d" $NR).jpg 
		let NR=NR+1
		sleep 2
		# give signal we are still running
		if [ $(($NR % 15)) -eq 0 ] ; then
			date
		fi
	done
	set -x
	if [ $NR -eq 9000 ] ; then
		echo Warning: running for 5h, forceing termination.
	fi
}

trap cleanup_all INT TERM EXIT

# only download if $IMAGE is older than a week (60*24*7=10080)
if test $(find $IMAGE -mmin +10080) || ! test -f $IMAGE ; then
	rm -f $IMAGE
	curl $IMAGE_URL > $IMAGE
fi
sudo mkdir -p $IMAGE_MNT
sudo mount -o loop,ro $IMAGE $IMAGE_MNT
bootstrap 
monitor_installation

cleanup_all
trap - INT TERM EXIT