OLD | NEW |
| (Empty) |
1 # Copyright 2014 The Chromium Authors. All rights reserved. | |
2 # Use of this source code is governed by a BSD-style license that can be | |
3 # found in the LICENSE file. | |
4 # | |
5 # This script should not be run directly but sourced by the other | |
6 # scripts (e.g. sysroot-creator-trusty.sh). Its up to the parent scripts | |
7 # to define certain environment variables: e.g. | |
8 # DISTRO=ubuntu | |
9 # DIST=trusty | |
10 # APT_REPO=http://archive.ubuntu.com/ubuntu | |
11 # KEYRING_FILE=/usr/share/keyrings/ubuntu-archive-keyring.gpg | |
12 # DEBIAN_PACKAGES="gcc libz libssl" | |
13 | |
14 #@ This script builds a Debian sysroot images for building Google Chrome. | |
15 #@ | |
16 #@ Generally this script is invoked as: | |
17 #@ sysroot-creator-<flavour>.sh <mode> <args>* | |
18 #@ Available modes are shown below. | |
19 #@ | |
20 #@ List of modes: | |
21 | |
22 ###################################################################### | |
23 # Config | |
24 ###################################################################### | |
25 | |
26 set -o nounset | |
27 set -o errexit | |
28 | |
29 SCRIPT_DIR=$(cd $(dirname $0) && pwd) | |
30 | |
31 if [ -z "${DIST:-}" ]; then | |
32 echo "error: DIST not defined" | |
33 exit 1 | |
34 fi | |
35 | |
36 if [ -z "${APT_REPO:-}" ]; then | |
37 echo "error: APT_REPO not defined" | |
38 exit 1 | |
39 fi | |
40 | |
41 if [ -z "${KEYRING_FILE:-}" ]; then | |
42 echo "error: KEYRING_FILE not defined" | |
43 exit 1 | |
44 fi | |
45 | |
46 if [ -z "${DEBIAN_PACKAGES:-}" ]; then | |
47 echo "error: DEBIAN_PACKAGES not defined" | |
48 exit 1 | |
49 fi | |
50 | |
51 readonly REPO_BASEDIR="${APT_REPO}/dists/${DIST}" | |
52 | |
53 readonly REQUIRED_TOOLS="wget" | |
54 | |
55 ###################################################################### | |
56 # Package Config | |
57 ###################################################################### | |
58 | |
59 readonly RELEASE_FILE="Release" | |
60 readonly RELEASE_FILE_GPG="Release.gpg" | |
61 readonly RELEASE_LIST="${REPO_BASEDIR}/${RELEASE_FILE}" | |
62 readonly RELEASE_LIST_GPG="${REPO_BASEDIR}/${RELEASE_FILE_GPG}" | |
63 readonly PACKAGE_FILE_AMD64="main/binary-amd64/Packages.bz2" | |
64 readonly PACKAGE_FILE_I386="main/binary-i386/Packages.bz2" | |
65 readonly PACKAGE_FILE_ARM="main/binary-armhf/Packages.bz2" | |
66 readonly PACKAGE_FILE_MIPS="main/binary-mipsel/Packages.bz2" | |
67 readonly PACKAGE_LIST_AMD64="${REPO_BASEDIR}/${PACKAGE_FILE_AMD64}" | |
68 readonly PACKAGE_LIST_I386="${REPO_BASEDIR}/${PACKAGE_FILE_I386}" | |
69 readonly PACKAGE_LIST_ARM="${REPO_BASEDIR}/${PACKAGE_FILE_ARM}" | |
70 readonly PACKAGE_LIST_MIPS="${REPO_BASEDIR}/${PACKAGE_FILE_MIPS}" | |
71 | |
72 readonly DEBIAN_DEP_LIST_AMD64="packagelist.${DIST}.amd64" | |
73 readonly DEBIAN_DEP_LIST_I386="packagelist.${DIST}.i386" | |
74 readonly DEBIAN_DEP_LIST_ARM="packagelist.${DIST}.arm" | |
75 readonly DEBIAN_DEP_LIST_MIPS="packagelist.${DIST}.mipsel" | |
76 | |
77 ###################################################################### | |
78 # Helper | |
79 ###################################################################### | |
80 | |
81 Banner() { | |
82 echo "######################################################################" | |
83 echo $* | |
84 echo "######################################################################" | |
85 } | |
86 | |
87 | |
88 SubBanner() { | |
89 echo "----------------------------------------------------------------------" | |
90 echo $* | |
91 echo "----------------------------------------------------------------------" | |
92 } | |
93 | |
94 | |
95 Usage() { | |
96 egrep "^#@" "${BASH_SOURCE[0]}" | cut --bytes=3- | |
97 } | |
98 | |
99 | |
100 DownloadOrCopy() { | |
101 if [ -f "$2" ] ; then | |
102 echo "$2 already in place" | |
103 return | |
104 fi | |
105 | |
106 HTTP=0 | |
107 echo "$1" | grep -qs ^http:// && HTTP=1 | |
108 if [ "$HTTP" = "1" ]; then | |
109 SubBanner "downloading from $1 -> $2" | |
110 wget "$1" -O "${2}.partial" | |
111 mv "${2}.partial" $2 | |
112 else | |
113 SubBanner "copying from $1" | |
114 cp "$1" "$2" | |
115 fi | |
116 } | |
117 | |
118 | |
119 SetEnvironmentVariables() { | |
120 ARCH="" | |
121 echo $1 | grep -qs Amd64$ && ARCH=AMD64 | |
122 if [ -z "$ARCH" ]; then | |
123 echo $1 | grep -qs I386$ && ARCH=I386 | |
124 fi | |
125 if [ -z "$ARCH" ]; then | |
126 echo $1 | grep -qs Mips$ && ARCH=MIPS | |
127 fi | |
128 if [ -z "$ARCH" ]; then | |
129 echo $1 | grep -qs ARM$ && ARCH=ARM | |
130 fi | |
131 if [ -z "${ARCH}" ]; then | |
132 echo "ERROR: Unable to determine architecture based on: $1" | |
133 exit 1 | |
134 fi | |
135 ARCH_LOWER=$(echo $ARCH | tr '[:upper:]' '[:lower:]') | |
136 } | |
137 | |
138 | |
139 # some sanity checks to make sure this script is run from the right place | |
140 # with the right tools | |
141 SanityCheck() { | |
142 Banner "Sanity Checks" | |
143 | |
144 local chrome_dir=$(cd "${SCRIPT_DIR}/../../../.." && pwd) | |
145 BUILD_DIR="${chrome_dir}/out/sysroot-build/${DIST}" | |
146 mkdir -p ${BUILD_DIR} | |
147 echo "Using build directory: ${BUILD_DIR}" | |
148 | |
149 for tool in ${REQUIRED_TOOLS} ; do | |
150 if ! which ${tool} > /dev/null ; then | |
151 echo "Required binary $tool not found." | |
152 echo "Exiting." | |
153 exit 1 | |
154 fi | |
155 done | |
156 | |
157 # This is where the staging sysroot is. | |
158 INSTALL_ROOT="${BUILD_DIR}/${DIST}_${ARCH_LOWER}_staging" | |
159 TARBALL="${BUILD_DIR}/${DISTRO}_${DIST}_${ARCH_LOWER}_sysroot.tgz" | |
160 | |
161 if ! mkdir -p "${INSTALL_ROOT}" ; then | |
162 echo "ERROR: ${INSTALL_ROOT} can't be created." | |
163 exit 1 | |
164 fi | |
165 } | |
166 | |
167 | |
168 ChangeDirectory() { | |
169 # Change directory to where this script is. | |
170 cd ${SCRIPT_DIR} | |
171 } | |
172 | |
173 | |
174 ClearInstallDir() { | |
175 Banner "Clearing dirs in ${INSTALL_ROOT}" | |
176 rm -rf ${INSTALL_ROOT}/* | |
177 } | |
178 | |
179 | |
180 CreateTarBall() { | |
181 Banner "Creating tarball ${TARBALL}" | |
182 tar zcf ${TARBALL} -C ${INSTALL_ROOT} . | |
183 } | |
184 | |
185 ExtractPackageBz2() { | |
186 bzcat "$1" | egrep '^(Package:|Filename:|SHA256:) ' > "$2" | |
187 } | |
188 | |
189 GeneratePackageListAmd64() { | |
190 local output_file="$1" | |
191 local package_list="${BUILD_DIR}/Packages.${DIST}_amd64.bz2" | |
192 local tmp_package_list="${BUILD_DIR}/Packages.${DIST}_amd64" | |
193 DownloadOrCopy "${PACKAGE_LIST_AMD64}" "${package_list}" | |
194 VerifyPackageListing "${PACKAGE_FILE_AMD64}" "${package_list}" | |
195 ExtractPackageBz2 "$package_list" "$tmp_package_list" | |
196 GeneratePackageList "$tmp_package_list" "$output_file" "${DEBIAN_PACKAGES} | |
197 ${DEBIAN_PACKAGES_X86}" | |
198 } | |
199 | |
200 GeneratePackageListI386() { | |
201 local output_file="$1" | |
202 local package_list="${BUILD_DIR}/Packages.${DIST}_i386.bz2" | |
203 local tmp_package_list="${BUILD_DIR}/Packages.${DIST}_amd64" | |
204 DownloadOrCopy "${PACKAGE_LIST_I386}" "${package_list}" | |
205 VerifyPackageListing "${PACKAGE_FILE_I386}" "${package_list}" | |
206 ExtractPackageBz2 "$package_list" "$tmp_package_list" | |
207 GeneratePackageList "$tmp_package_list" "$output_file" "${DEBIAN_PACKAGES} | |
208 ${DEBIAN_PACKAGES_X86}" | |
209 } | |
210 | |
211 GeneratePackageListARM() { | |
212 local output_file="$1" | |
213 local package_list="${BUILD_DIR}/Packages.${DIST}_arm.bz2" | |
214 local tmp_package_list="${BUILD_DIR}/Packages.${DIST}_arm" | |
215 DownloadOrCopy "${PACKAGE_LIST_ARM}" "${package_list}" | |
216 VerifyPackageListing "${PACKAGE_FILE_ARM}" "${package_list}" | |
217 ExtractPackageBz2 "$package_list" "$tmp_package_list" | |
218 GeneratePackageList "$tmp_package_list" "$output_file" "${DEBIAN_PACKAGES}" | |
219 } | |
220 | |
221 GeneratePackageListMips() { | |
222 local output_file="$1" | |
223 local package_list="${BUILD_DIR}/Packages.${DIST}_mips.bz2" | |
224 local tmp_package_list="${BUILD_DIR}/Packages.${DIST}_mips" | |
225 DownloadOrCopy "${PACKAGE_LIST_MIPS}" "${package_list}" | |
226 VerifyPackageListing "${PACKAGE_FILE_MIPS}" "${package_list}" | |
227 ExtractPackageBz2 "$package_list" "$tmp_package_list" | |
228 GeneratePackageList "$tmp_package_list" "$output_file" "${DEBIAN_PACKAGES}" | |
229 } | |
230 | |
231 StripChecksumsFromPackageList() { | |
232 local package_file="$1" | |
233 sed -i 's/ [a-f0-9]\{64\}$//' "$package_file" | |
234 } | |
235 | |
236 VerifyPackageFilesMatch() { | |
237 local downloaded_package_file="$1" | |
238 local stored_package_file="$2" | |
239 diff -u "$downloaded_package_file" "$stored_package_file" | |
240 if [ "$?" -ne "0" ]; then | |
241 echo "ERROR: downloaded package files does not match $2." | |
242 echo "You may need to run UpdatePackageLists." | |
243 exit 1 | |
244 fi | |
245 } | |
246 | |
247 ###################################################################### | |
248 # | |
249 ###################################################################### | |
250 | |
251 HacksAndPatchesAmd64() { | |
252 Banner "Misc Hacks & Patches" | |
253 # these are linker scripts with absolute pathnames in them | |
254 # which we rewrite here | |
255 lscripts="${INSTALL_ROOT}/usr/lib/x86_64-linux-gnu/libpthread.so \ | |
256 ${INSTALL_ROOT}/usr/lib/x86_64-linux-gnu/libc.so" | |
257 | |
258 # Rewrite linker scripts | |
259 sed -i -e 's|/usr/lib/x86_64-linux-gnu/||g' ${lscripts} | |
260 sed -i -e 's|/lib/x86_64-linux-gnu/||g' ${lscripts} | |
261 | |
262 # This is for chrome's ./build/linux/pkg-config-wrapper | |
263 # which overwrites PKG_CONFIG_PATH internally | |
264 SubBanner "Package Configs Symlink" | |
265 mkdir -p ${INSTALL_ROOT}/usr/share | |
266 ln -s ../lib/x86_64-linux-gnu/pkgconfig ${INSTALL_ROOT}/usr/share/pkgconfig | |
267 | |
268 SubBanner "Adding an additional ld.conf include" | |
269 LD_SO_HACK_CONF="${INSTALL_ROOT}/etc/ld.so.conf.d/zz_hack.conf" | |
270 echo /usr/lib/gcc/x86_64-linux-gnu/4.6 > "$LD_SO_HACK_CONF" | |
271 echo /usr/lib >> "$LD_SO_HACK_CONF" | |
272 } | |
273 | |
274 | |
275 HacksAndPatchesI386() { | |
276 Banner "Misc Hacks & Patches" | |
277 # these are linker scripts with absolute pathnames in them | |
278 # which we rewrite here | |
279 lscripts="${INSTALL_ROOT}/usr/lib/i386-linux-gnu/libpthread.so \ | |
280 ${INSTALL_ROOT}/usr/lib/i386-linux-gnu/libc.so" | |
281 | |
282 # Rewrite linker scripts | |
283 sed -i -e 's|/usr/lib/i386-linux-gnu/||g' ${lscripts} | |
284 sed -i -e 's|/lib/i386-linux-gnu/||g' ${lscripts} | |
285 | |
286 # This is for chrome's ./build/linux/pkg-config-wrapper | |
287 # which overwrites PKG_CONFIG_PATH internally | |
288 SubBanner "Package Configs Symlink" | |
289 mkdir -p ${INSTALL_ROOT}/usr/share | |
290 ln -s ../lib/i386-linux-gnu/pkgconfig ${INSTALL_ROOT}/usr/share/pkgconfig | |
291 | |
292 SubBanner "Adding an additional ld.conf include" | |
293 LD_SO_HACK_CONF="${INSTALL_ROOT}/etc/ld.so.conf.d/zz_hack.conf" | |
294 echo /usr/lib/gcc/i486-linux-gnu/4.6 > "$LD_SO_HACK_CONF" | |
295 echo /usr/lib >> "$LD_SO_HACK_CONF" | |
296 } | |
297 | |
298 | |
299 HacksAndPatchesARM() { | |
300 Banner "Misc Hacks & Patches" | |
301 # these are linker scripts with absolute pathnames in them | |
302 # which we rewrite here | |
303 lscripts="${INSTALL_ROOT}/usr/lib/arm-linux-gnueabihf/libpthread.so \ | |
304 ${INSTALL_ROOT}/usr/lib/arm-linux-gnueabihf/libc.so" | |
305 | |
306 # Rewrite linker scripts | |
307 sed -i -e 's|/usr/lib/arm-linux-gnueabihf/||g' ${lscripts} | |
308 sed -i -e 's|/lib/arm-linux-gnueabihf/||g' ${lscripts} | |
309 | |
310 # This is for chrome's ./build/linux/pkg-config-wrapper | |
311 # which overwrites PKG_CONFIG_PATH internally | |
312 SubBanner "Package Configs Symlink" | |
313 mkdir -p ${INSTALL_ROOT}/usr/share | |
314 ln -s ../lib/arm-linux-gnueabihf/pkgconfig ${INSTALL_ROOT}/usr/share/pkgconfig | |
315 } | |
316 | |
317 | |
318 HacksAndPatchesMips() { | |
319 Banner "Misc Hacks & Patches" | |
320 # these are linker scripts with absolute pathnames in them | |
321 # which we rewrite here | |
322 lscripts="${INSTALL_ROOT}/usr/lib/mipsel-linux-gnu/libpthread.so \ | |
323 ${INSTALL_ROOT}/usr/lib/mipsel-linux-gnu/libc.so" | |
324 | |
325 # Rewrite linker scripts | |
326 sed -i -e 's|/usr/lib/mipsel-linux-gnu/||g' ${lscripts} | |
327 sed -i -e 's|/lib/mipsel-linux-gnu/||g' ${lscripts} | |
328 | |
329 # This is for chrome's ./build/linux/pkg-config-wrapper | |
330 # which overwrites PKG_CONFIG_PATH internally | |
331 SubBanner "Package Configs Symlink" | |
332 mkdir -p ${INSTALL_ROOT}/usr/share | |
333 ln -s ../lib/mipsel-linux-gnu/pkgconfig ${INSTALL_ROOT}/usr/share/pkgconfig | |
334 } | |
335 | |
336 | |
337 InstallIntoSysroot() { | |
338 Banner "Install Libs And Headers Into Jail" | |
339 | |
340 mkdir -p ${BUILD_DIR}/debian-packages | |
341 mkdir -p ${INSTALL_ROOT} | |
342 while (( "$#" )); do | |
343 local file="$1" | |
344 local package="${BUILD_DIR}/debian-packages/${file##*/}" | |
345 shift | |
346 local sha256sum="$1" | |
347 shift | |
348 if [ "${#sha256sum}" -ne "64" ]; then | |
349 echo "Bad sha256sum from package list" | |
350 exit 1 | |
351 fi | |
352 | |
353 Banner "Installing ${file}" | |
354 DownloadOrCopy ${APT_REPO}/pool/${file} ${package} | |
355 if [ ! -s "${package}" ] ; then | |
356 echo | |
357 echo "ERROR: bad package ${package}" | |
358 exit 1 | |
359 fi | |
360 echo "${sha256sum} ${package}" | sha256sum --quiet -c | |
361 | |
362 SubBanner "Extracting to ${INSTALL_ROOT}" | |
363 dpkg --fsys-tarfile ${package}\ | |
364 | tar -xf - --exclude=./usr/share -C ${INSTALL_ROOT} | |
365 done | |
366 } | |
367 | |
368 | |
369 CleanupJailSymlinks() { | |
370 Banner "Jail symlink cleanup" | |
371 | |
372 SAVEDPWD=$(pwd) | |
373 cd ${INSTALL_ROOT} | |
374 local libdirs="lib usr/lib" | |
375 if [ "${ARCH}" != "MIPS" ]; then | |
376 libdirs+=" lib64" | |
377 fi | |
378 find $libdirs -type l -printf '%p %l\n' | while read link target; do | |
379 # skip links with non-absolute paths | |
380 echo "${target}" | grep -qs ^/ || continue | |
381 echo "${link}: ${target}" | |
382 case "${link}" in | |
383 usr/lib/gcc/x86_64-linux-gnu/4.*/* | usr/lib/gcc/i486-linux-gnu/4.*/* | \ | |
384 usr/lib/gcc/arm-linux-gnueabihf/4.*/* | \ | |
385 usr/lib/gcc/mipsel-linux-gnu/4.*/*) | |
386 # Relativize the symlink. | |
387 ln -snfv "../../../../..${target}" "${link}" | |
388 ;; | |
389 usr/lib/x86_64-linux-gnu/* | usr/lib/i386-linux-gnu/* | \ | |
390 usr/lib/arm-linux-gnueabihf/* | usr/lib/mipsel-linux-gnu/* ) | |
391 # Relativize the symlink. | |
392 ln -snfv "../../..${target}" "${link}" | |
393 ;; | |
394 usr/lib/*) | |
395 # Relativize the symlink. | |
396 ln -snfv "../..${target}" "${link}" | |
397 ;; | |
398 lib64/* | lib/*) | |
399 # Relativize the symlink. | |
400 ln -snfv "..${target}" "${link}" | |
401 ;; | |
402 esac | |
403 done | |
404 | |
405 find $libdirs -type l -printf '%p %l\n' | while read link target; do | |
406 # Make sure we catch new bad links. | |
407 if [ ! -r "${link}" ]; then | |
408 echo "ERROR: FOUND BAD LINK ${link}" | |
409 ls -l ${link} | |
410 exit 1 | |
411 fi | |
412 done | |
413 cd "$SAVEDPWD" | |
414 } | |
415 | |
416 #@ | |
417 #@ BuildSysrootAmd64 | |
418 #@ | |
419 #@ Build everything and package it | |
420 BuildSysrootAmd64() { | |
421 ClearInstallDir | |
422 local package_file="$BUILD_DIR/package_with_sha256sum_amd64" | |
423 GeneratePackageListAmd64 "$package_file" | |
424 local files_and_sha256sums="$(cat ${package_file})" | |
425 StripChecksumsFromPackageList "$package_file" | |
426 VerifyPackageFilesMatch "$package_file" "$DEBIAN_DEP_LIST_AMD64" | |
427 InstallIntoSysroot ${files_and_sha256sums} | |
428 CleanupJailSymlinks | |
429 HacksAndPatchesAmd64 | |
430 CreateTarBall | |
431 } | |
432 | |
433 #@ | |
434 #@ BuildSysrootI386 | |
435 #@ | |
436 #@ Build everything and package it | |
437 BuildSysrootI386() { | |
438 ClearInstallDir | |
439 local package_file="$BUILD_DIR/package_with_sha256sum_i386" | |
440 GeneratePackageListI386 "$package_file" | |
441 local files_and_sha256sums="$(cat ${package_file})" | |
442 StripChecksumsFromPackageList "$package_file" | |
443 VerifyPackageFilesMatch "$package_file" "$DEBIAN_DEP_LIST_I386" | |
444 InstallIntoSysroot ${files_and_sha256sums} | |
445 CleanupJailSymlinks | |
446 HacksAndPatchesI386 | |
447 CreateTarBall | |
448 } | |
449 | |
450 #@ | |
451 #@ BuildSysrootARM | |
452 #@ | |
453 #@ Build everything and package it | |
454 BuildSysrootARM() { | |
455 ClearInstallDir | |
456 local package_file="$BUILD_DIR/package_with_sha256sum_arm" | |
457 GeneratePackageListARM "$package_file" | |
458 local files_and_sha256sums="$(cat ${package_file})" | |
459 StripChecksumsFromPackageList "$package_file" | |
460 VerifyPackageFilesMatch "$package_file" "$DEBIAN_DEP_LIST_ARM" | |
461 APT_REPO=${APR_REPO_ARM:=$APT_REPO} | |
462 InstallIntoSysroot ${files_and_sha256sums} | |
463 CleanupJailSymlinks | |
464 HacksAndPatchesARM | |
465 CreateTarBall | |
466 } | |
467 | |
468 #@ | |
469 #@ BuildSysrootMips | |
470 #@ | |
471 #@ Build everything and package it | |
472 BuildSysrootMips() { | |
473 ClearInstallDir | |
474 local package_file="$BUILD_DIR/package_with_sha256sum_arm" | |
475 GeneratePackageListMips "$package_file" | |
476 local files_and_sha256sums="$(cat ${package_file})" | |
477 StripChecksumsFromPackageList "$package_file" | |
478 VerifyPackageFilesMatch "$package_file" "$DEBIAN_DEP_LIST_MIPS" | |
479 APT_REPO=${APR_REPO_MIPS:=$APT_REPO} | |
480 InstallIntoSysroot ${files_and_sha256sums} | |
481 CleanupJailSymlinks | |
482 HacksAndPatchesMips | |
483 CreateTarBall | |
484 } | |
485 | |
486 #@ | |
487 #@ BuildSysrootAll | |
488 #@ | |
489 #@ Build sysroot images for all architectures | |
490 BuildSysrootAll() { | |
491 RunCommand BuildSysrootAmd64 | |
492 RunCommand BuildSysrootI386 | |
493 RunCommand BuildSysrootARM | |
494 RunCommand BuildSysrootMips | |
495 } | |
496 | |
497 UploadSysroot() { | |
498 local rev=$1 | |
499 if [ -z "${rev}" ]; then | |
500 echo "Please specify a revision to upload at." | |
501 exit 1 | |
502 fi | |
503 set -x | |
504 gsutil cp -a public-read "${TARBALL}" \ | |
505 "gs://chrome-linux-sysroot/toolchain/$rev/" | |
506 set +x | |
507 } | |
508 | |
509 #@ | |
510 #@ UploadSysrootAmd64 <revision> | |
511 #@ | |
512 UploadSysrootAmd64() { | |
513 UploadSysroot "$@" | |
514 } | |
515 | |
516 #@ | |
517 #@ UploadSysrootI386 <revision> | |
518 #@ | |
519 UploadSysrootI386() { | |
520 UploadSysroot "$@" | |
521 } | |
522 | |
523 #@ | |
524 #@ UploadSysrootARM <revision> | |
525 #@ | |
526 UploadSysrootARM() { | |
527 UploadSysroot "$@" | |
528 } | |
529 | |
530 #@ | |
531 #@ UploadSysrootMips <revision> | |
532 #@ | |
533 UploadSysrootMips() { | |
534 UploadSysroot "$@" | |
535 } | |
536 | |
537 #@ | |
538 #@ UploadSysrootAll <revision> | |
539 #@ | |
540 #@ Upload sysroot image for all architectures | |
541 UploadSysrootAll() { | |
542 RunCommand UploadSysrootAmd64 "$@" | |
543 RunCommand UploadSysrootI386 "$@" | |
544 RunCommand UploadSysrootARM "$@" | |
545 RunCommand UploadSysrootMips "$@" | |
546 } | |
547 | |
548 # | |
549 # CheckForDebianGPGKeyring | |
550 # | |
551 # Make sure the Debian GPG keys exist. Otherwise print a helpful message. | |
552 # | |
553 CheckForDebianGPGKeyring() { | |
554 if [ ! -e "$KEYRING_FILE" ]; then | |
555 echo "Debian GPG keys missing. Install the debian-archive-keyring package." | |
556 exit 1 | |
557 fi | |
558 } | |
559 | |
560 # | |
561 # VerifyPackageListing | |
562 # | |
563 # Verifies the downloaded Packages.bz2 file has the right checksums. | |
564 # | |
565 VerifyPackageListing() { | |
566 local file_path=$1 | |
567 local output_file=$2 | |
568 local release_file="${BUILD_DIR}/${RELEASE_FILE}" | |
569 local release_file_gpg="${BUILD_DIR}/${RELEASE_FILE_GPG}" | |
570 local tmp_keyring_file="${BUILD_DIR}/keyring.gpg" | |
571 | |
572 CheckForDebianGPGKeyring | |
573 | |
574 DownloadOrCopy ${RELEASE_LIST} ${release_file} | |
575 DownloadOrCopy ${RELEASE_LIST_GPG} ${release_file_gpg} | |
576 echo "Verifying: ${release_file} with ${release_file_gpg}" | |
577 cp "${KEYRING_FILE}" "${tmp_keyring_file}" | |
578 gpg --primary-keyring "${tmp_keyring_file}" --recv-keys 2B90D010 | |
579 gpgv --keyring "${tmp_keyring_file}" "${release_file_gpg}" "${release_file}" | |
580 | |
581 echo "Verifying: ${output_file}" | |
582 local checksums=$(grep ${file_path} ${release_file} | cut -d " " -f 2) | |
583 local sha256sum=$(echo ${checksums} | cut -d " " -f 3) | |
584 | |
585 if [ "${#sha256sum}" -ne "64" ]; then | |
586 echo "Bad sha256sum from ${RELEASE_LIST}" | |
587 exit 1 | |
588 fi | |
589 | |
590 echo "${sha256sum} ${output_file}" | sha256sum --quiet -c | |
591 } | |
592 | |
593 # | |
594 # GeneratePackageList | |
595 # | |
596 # Looks up package names in ${BUILD_DIR}/Packages and write list of URLs | |
597 # to output file. | |
598 # | |
599 GeneratePackageList() { | |
600 local input_file="$1" | |
601 local output_file="$2" | |
602 echo "Updating: ${output_file} from ${input_file}" | |
603 /bin/rm -f "${output_file}" | |
604 shift | |
605 shift | |
606 for pkg in $@ ; do | |
607 local pkg_full=$(grep -A 1 " ${pkg}\$" "$input_file" | \ | |
608 egrep -o "pool/.*") | |
609 if [ -z "${pkg_full}" ]; then | |
610 echo "ERROR: missing package: $pkg" | |
611 exit 1 | |
612 fi | |
613 local pkg_nopool=$(echo "$pkg_full" | sed "s/^pool\///") | |
614 local sha256sum=$(grep -A 4 " ${pkg}\$" "$input_file" | \ | |
615 grep ^SHA256: | sed 's/^SHA256: //') | |
616 if [ "${#sha256sum}" -ne "64" ]; then | |
617 echo "Bad sha256sum from Packages" | |
618 exit 1 | |
619 fi | |
620 echo $pkg_nopool $sha256sum >> "$output_file" | |
621 done | |
622 # sort -o does an in-place sort of this file | |
623 sort "$output_file" -o "$output_file" | |
624 } | |
625 | |
626 #@ | |
627 #@ UpdatePackageListsAmd64 | |
628 #@ | |
629 #@ Regenerate the package lists such that they contain an up-to-date | |
630 #@ list of URLs within the Debian archive. (For amd64) | |
631 UpdatePackageListsAmd64() { | |
632 GeneratePackageListAmd64 "$DEBIAN_DEP_LIST_AMD64" | |
633 StripChecksumsFromPackageList "$DEBIAN_DEP_LIST_AMD64" | |
634 } | |
635 | |
636 #@ | |
637 #@ UpdatePackageListsI386 | |
638 #@ | |
639 #@ Regenerate the package lists such that they contain an up-to-date | |
640 #@ list of URLs within the Debian archive. (For i386) | |
641 UpdatePackageListsI386() { | |
642 GeneratePackageListI386 "$DEBIAN_DEP_LIST_I386" | |
643 StripChecksumsFromPackageList "$DEBIAN_DEP_LIST_I386" | |
644 } | |
645 | |
646 #@ | |
647 #@ UpdatePackageListsARM | |
648 #@ | |
649 #@ Regenerate the package lists such that they contain an up-to-date | |
650 #@ list of URLs within the Debian archive. (For arm) | |
651 UpdatePackageListsARM() { | |
652 GeneratePackageListARM "$DEBIAN_DEP_LIST_ARM" | |
653 StripChecksumsFromPackageList "$DEBIAN_DEP_LIST_ARM" | |
654 } | |
655 | |
656 #@ | |
657 #@ UpdatePackageListsMips | |
658 #@ | |
659 #@ Regenerate the package lists such that they contain an up-to-date | |
660 #@ list of URLs within the Debian archive. (For arm) | |
661 UpdatePackageListsMips() { | |
662 GeneratePackageListMips "$DEBIAN_DEP_LIST_MIPS" | |
663 StripChecksumsFromPackageList "$DEBIAN_DEP_LIST_MIPS" | |
664 } | |
665 | |
666 #@ | |
667 #@ UpdatePackageListsAll | |
668 #@ | |
669 #@ Regenerate the package lists for all architectures. | |
670 UpdatePackageListsAll() { | |
671 RunCommand UpdatePackageListsAmd64 | |
672 RunCommand UpdatePackageListsI386 | |
673 RunCommand UpdatePackageListsARM | |
674 RunCommand UpdatePackageListsMips | |
675 } | |
676 | |
677 RunCommand() { | |
678 SetEnvironmentVariables "$1" | |
679 SanityCheck | |
680 "$@" | |
681 } | |
682 | |
683 if [ $# -eq 0 ] ; then | |
684 echo "ERROR: you must specify a mode on the commandline" | |
685 echo | |
686 Usage | |
687 exit 1 | |
688 elif [ "$(type -t $1)" != "function" ]; then | |
689 echo "ERROR: unknown function '$1'." >&2 | |
690 echo "For help, try:" | |
691 echo " $0 help" | |
692 exit 1 | |
693 else | |
694 ChangeDirectory | |
695 if echo $1 | grep -qs "All$"; then | |
696 "$@" | |
697 else | |
698 RunCommand "$@" | |
699 fi | |
700 fi | |
OLD | NEW |