~phablet-team/phablet-tools/trunk

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
#! /bin/sh

set -eu

TMPDIR=$(mktemp -d /tmp/$(basename $0).XXXXX)
SUITE="trusty"
PREFIX="ubuntu-phablet"
CHARTOPTS="${CHARTOPTS---crop-after=unity8 --annotate=unity8}"
SKIPINST=""
KEEPTAR=""
PNOPTS=""
BUILDID=""
OUTDIR="."
SFX="png"
ERROR=""
ADBOPTS=""
YESTOALL=""

cleanup(){
    [ -n "$ERROR" ] && echo "Error: $ERROR"
	[ -d "$TMPDIR" ] && rm -rf $TMPDIR >/dev/null 2>&1
}

usage(){
cat <<EOF 
Usage: $(basename $0) (Options) [build id]

Options:
	-n|--noinstall				do not perform installation
	-k|--keeptarball			keep tarball around
	-w|--wlancfg <path to wlan file>	point to wlan config
	-o|--outdir <path to output directory>	define (and create) output dir
	-f|--format (png|svg)			output format (default: png)
	-s|--serial <adb serial>		operate on certain adb device
	-y|--yes-to-all				do not ask when wiping (for automation)

	If [build id] is provided this image will be used for installation
EOF
	exit 0
}

reboot_and_wait(){
	adb $ADBOPTS reboot && adb $ADBOPTS wait-for-device
	[ -n "$1" ] && sleep $1
}

do_install(){
	if [ -z "$YESTOALL" ]; then
		echo -n "This will wipe all data on the device, proceed ? (y/n) "
		read yesno
		[ "$yesno" != "y" ] && exit 1
	fi
	echo "Installing Image $1"
	if [ -z "$(fastboot devices)" ]; then
		adb $ADBOPTS reboot bootloader || \
			ERROR="can not reboot to bootloader" exit 1
	fi
	FLASHOPTS="--developer-mode --password 0000 --channel devel-proposed --bootstrap"
	[ -n "$1" ] && FLASHOPTS="${FLASHOPTS} --revision $1"
	ubuntu-device-flash $FLASHOPTS
	adb $ADBOPTS wait-for-device
}

trap cleanup EXIT INT QUIT ILL KILL SEGV TERM

[ -x /usr/bin/pybootchartgui ] || ERROR="please install pybootchartgui" exit 1

while [ $# -gt 0 ]; do
	case "$1" in
		-n|--noinstall)
			SKIPINST=1
			;;
		-y|--yes-to-all)
			YESTOALL=1
			;;
		-k|--keeptarball)
			KEEPTAR=1
			;;
		-w|--wlancfg)
		 	[ -n "$2" ] && PNOPTS="-n $2" shift || \
				ERROR="-w needs a file path" exit 1
		 	;;
		-s|--serial)
			[ -n "$2" ] && ADBOPTS="$ADBOPTS -s $2" shift || \
				ERROR="-s needs serial" exit 1
			;;
		-f|--format)
		 	if [ -n "$2" ]; then
				SFX="$2" shift || \
					ERROR="-f needs png or svg as argument" exit 1
				CHARTOPTS="$CHARTOPTS -f $SFX"
			fi
		 	;;
		-o|--outdir)
			[ -n "$2" ] && OUTDIR="$2" shift || \
				ERROR="-o needs a path" exit 1
			[ -d "$OUTDIR" ] || mkdir -p $OUTDIR
			;;
		-h|--help)
			usage
			;;
		*[0-9])
			BUILDID=$1
			;;
		*)
			ERROR="$1 is unknown" exit 1
			;;
	esac
	shift
done

[ -z "$SKIPINST" ] && do_install "$BUILDID"
echo "Enabling network"
phablet-network $PNOPTS || \
	ERROR="need working network on the device" exit 1

echo "Making Image writable"
phablet-config writable-image || \
	ERROR="could not make image writable" exit 1
reboot_and_wait 30

echo "Installing bootchart"
adb $ADBOPTS shell "echo 0000|sudo -p \"\" -S \
	FLASH_KERNEL_SKIP=true apt-get install -yq --force-yes bootchart"

echo "Disabling Welcome Wizard"
phablet-config welcome-wizard --disable || \
	ERROR="could not disable welcome wizard" exit 1

echo "Disabling Intro Demo"
phablet-config edges-intro --disable || \
	ERROR="could not disable intro" exit 1

echo "Rebooting three times to get accurate data"
reboot_and_wait 60
reboot_and_wait 60
reboot_and_wait 1
adb $ADBOPTS shell "echo 0000|sudo -p \"\" -S rm -rf /var/log/bootchart/*"
sleep 60

echo "Pulling and processing bootchart tarball"
while [ -n "$(adb $ADBOPTS shell pgrep collector)" ]; do
	sleep 30
done
sleep 30
adb $ADBOPTS pull /var/log/bootchart $TMPDIR/

VER="$(adb $ADBOPTS shell system-image-cli -i | grep "^.* ver" | tr -d '[:cntrl:]')"
VER="${VER##* }"
SUITE="$(adb $ADBOPTS shell lsb_release -cs | tr -d '[:cntrl:]')"

echo "Creating $SFX for $VER."
OUTNAME="$OUTDIR/$PREFIX-$SUITE-$VER"
CHARTOPTS="$CHARTOPTS -o $OUTNAME.$SFX"
pybootchartgui -q $CHARTOPTS $TMPDIR/*.tgz >/dev/null 2>&1

if [ -n "$KEEPTAR" ]; then
	cp $TMPDIR/*.tgz $OUTNAME.tgz
	echo "Keeping tarball at $OUTNAME.tgz"
fi
echo "Created $OUTNAME.$SFX"