]>
Commit | Line | Data |
---|---|---|
29f98055 LO |
1 | #!/bin/bash |
2 | ||
3 | export LC_ALL=C.UTF-8 | |
4 | ||
5 | if [ "$#" = "1" ]; then | |
6 | set - $(echo "$1" | sed -e 's/-/ /') | |
7 | fi | |
8 | if [ "$#" != "2" ]; then | |
9 | echo "Usage: $0 <version>" 1>&2 | |
10 | echo "Usage: $0 <release> <revision>" 1>&2 | |
11 | exit 1 | |
12 | fi | |
13 | ||
14 | if [ "$DEBIAN" = "" ]; then | |
15 | . debian/debian.env | |
16 | fi | |
17 | ||
18 | ver=$1 | |
19 | revision=$2 | |
20 | abi=$(echo $revision | sed -r -e 's/([^\+~]*)\.[^\.]+(~.*)?(\+.*)?$/\1/') | |
21 | ||
22 | verabi=$ver-$abi | |
23 | verfull=$ver-$revision | |
24 | ||
25 | WGET="wget --tries=1 --timeout=10 --quiet -c" | |
26 | ||
27 | abidir="`pwd`/$DEBIAN/abi/$verfull" | |
28 | tmpdir="`pwd`/abi-tmp-$verfull" | |
29 | origdir="`pwd`" | |
30 | fwinfo=$abidir/fwinfo | |
31 | ||
32 | test -d $tmpdir || mkdir $tmpdir | |
33 | ||
34 | package_prefixes() { | |
35 | : # no longer used ... | |
36 | } | |
37 | ||
38 | getall() { | |
39 | arch=$1 | |
40 | shift | |
41 | ||
42 | mkdir -p $abidir/$arch | |
43 | ||
44 | for sub in $@; do | |
45 | if [ -f $abidir/$arch/$sub ]; then | |
46 | echo "Existing $sub($arch)..." | |
47 | continue | |
48 | fi | |
49 | echo "Fetching $sub($arch)..." | |
50 | getall_set "linux-buildinfo" "$arch" "$sub" || \ | |
51 | getall_set "linux-image-unsigned linux-modules linux-modules-extra" "$arch" "$sub" || \ | |
52 | getall_set "linux-image-unsigned linux-modules" "$arch" "$sub" || \ | |
53 | getall_set "linux-image linux-modules linux-modules-extra" "$arch" "$sub" || \ | |
54 | getall_set "linux-image linux-modules" "$arch" "$sub" || \ | |
55 | getall_set "linux-image linux-image-extra" "$arch" "$sub" || \ | |
56 | getall_set "linux-image" "$arch" "$sub" || \ | |
57 | { echo "FAILED"; exit 1; } | |
58 | done | |
59 | } | |
60 | getall_set() | |
61 | { | |
62 | prefixes="$1" | |
63 | arch="$2" | |
64 | sub="$3" | |
65 | ( | |
66 | echo -n " set:" | |
67 | filenames="" | |
68 | cd $tmpdir | |
69 | found=1 | |
70 | for prefix in $prefixes | |
71 | do | |
72 | echo -n " $prefix=" | |
73 | if [ "$found" = 0 ]; then | |
74 | echo -n "-" | |
75 | continue | |
76 | fi | |
77 | filename=${prefix}-${verabi}-${sub}_${verfull}_${arch}.deb | |
78 | for r in "${repo_list[@]}" | |
79 | do | |
80 | if ! [ -f $filename ]; then | |
81 | $WGET $r/$filename | |
82 | rc="$?" | |
83 | # If this was not successful or a valid error | |
84 | # return from the server all bets are off, bail. | |
85 | [ "$rc" != 0 -a "$rc" != 8 ] && return 2 | |
86 | fi | |
87 | if [ -f $filename ]; then | |
88 | echo -n "y" | |
89 | filenames="$filenames $filename" | |
90 | break | |
91 | fi | |
92 | done | |
93 | if [ ! -f "$filename" ]; then | |
94 | echo -n "n" | |
95 | found=0 | |
96 | fi | |
97 | done | |
98 | echo "" | |
99 | if [ "$found" = 0 ]; then | |
100 | return 1 | |
101 | fi | |
102 | echo " extracting..." | |
103 | for filename in $filenames | |
104 | do | |
105 | dpkg-deb --extract $filename tmp | |
106 | done | |
107 | # FORM 1: linux-image et al extracted here. | |
108 | if [ -d tmp/boot ]; then | |
109 | echo " images..." | |
110 | find tmp -name "*.ko" | while read f; do | |
111 | modinfo $f | grep ^firmware >> $fwinfo | |
112 | done | |
113 | if [ -f tmp/boot/abi-* ]; then | |
114 | mv tmp/boot/abi-* $abidir/$arch/$sub | |
115 | else | |
116 | echo " NO ABI FILE" | |
117 | fi | |
118 | if [ -f tmp/boot/retpoline-* ]; then | |
119 | mv tmp/boot/retpoline-* $abidir/$arch/$sub.retpoline | |
120 | else | |
121 | echo " NO RETPOLINE FILE" | |
122 | fi | |
123 | (cd tmp; find lib/modules/$verabi-$sub/kernel -name '*.ko') | \ | |
124 | sed -e 's/.*\/\([^\/]*\)\.ko/\1/' | sort > \ | |
125 | $abidir/$arch/$sub.modules | |
126 | ( | |
127 | cd tmp; | |
128 | # Prevent exposing some errors when called by python scripts. SIGPIPE seems to get | |
129 | # exposed when using the `find ...` form of the command. | |
130 | ko=$(find lib/modules/$verabi-$sub/kernel \ | |
131 | -name '*.ko' | head -1) | |
132 | readelf -p .comment "$ko" | gawk ' | |
133 | ($1 == "[") { | |
134 | printf("%s", $3); | |
135 | for (n=4; n<=NF; n++) { | |
136 | printf(" %s", $n); | |
137 | } | |
138 | print "" | |
139 | }' | sort -u >$abidir/$arch/$sub.compiler | |
140 | version=`cat $abidir/$arch/$sub.compiler` | |
141 | echo " $version" | |
142 | ) | |
143 | # FORM 2: moduleinfo packages | |
144 | # cranky fix -- modinfo supported | |
145 | else | |
146 | echo " buildinfo..." | |
147 | base="tmp/usr/lib/linux/${verabi}-${sub}" | |
148 | mv "$base/abi" "$abidir/$arch/$sub" | |
149 | for comp in 'modules' 'retpoline' 'compiler' | |
150 | do | |
151 | mv "$base/$comp" "$abidir/$arch/$sub.$comp" | |
152 | done | |
153 | cat "$base/fwinfo" >>"$fwinfo" | |
154 | fi | |
155 | rm -rf tmp $filenames | |
156 | echo " done" | |
157 | ) | |
158 | rc="$?" | |
159 | if [ "$rc" = 2 ]; then | |
160 | echo "ERROR: downloads are reporting network failures" 1>&2 | |
161 | exit 1 | |
162 | fi | |
163 | return "$rc" | |
164 | } | |
165 | ||
166 | # MAIN | |
167 | ||
168 | # Setup abi directory | |
169 | mkdir -p $abidir | |
170 | echo $abi > $abidir/abiname | |
2392988e | 171 | echo $verfull > $abidir/version |
29f98055 LO |
172 | |
173 | # NOTE: The flavours are hardcoded, because they may have changed from the | |
174 | # current build. | |
175 | ||
176 | . $DEBIAN/etc/getabis | |
177 | ||
178 | # Extract compiler source package version from e.g.: | |
179 | # GCC: (Ubuntu/Linaro 4.8.2-19ubuntu1) 4.8.2 | |
180 | compilers=`sed 's/^.*(.* \(.*\)).*$/\1/' $abidir/*/*.compiler | sort -u | wc -l` | |
181 | if [ "$compilers" != 1 ]; then | |
182 | echo "WARNING: inconsistent compiler versions detected:" 1>&2 | |
183 | sort -u $abidir/*/*.compiler | sed 's/^/WARNING: /' 1>&2 | |
184 | fi | |
185 | ||
186 | sort < $fwinfo | uniq > fwinfo.tmp | |
187 | mv fwinfo.tmp $fwinfo | |
188 | ||
189 | rmdir $tmpdir | |
190 | ||
2392988e AR |
191 | # Replace the previous ABI directory with the new one |
192 | abiprevdir="$(pwd)/$DEBIAN/abi/previous" | |
193 | rm -rf "$abiprevdir" | |
194 | mv "$abidir" "$abiprevdir" | |
195 | ||
196 | # If this is running in a git repo, add the current ABI directory and remove any old ones | |
29f98055 | 197 | if [ -d ".git" ]; then |
2392988e AR |
198 | git add "$abiprevdir" |
199 | find "$DEBIAN"/abi/* -maxdepth 0 -type d | grep -v '/previous$' | while read f; do git rm -rf "$f"; done | |
29f98055 | 200 | fi |