1cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)# Copyright 2014 The Chromium Authors. All rights reserved. 2868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)# Use of this source code is governed by a BSD-style license that can be 3868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)# found in the LICENSE file. 4868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)# 5cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)# This script should not be run directly but sourced by the other 6cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)# scripts (e.g. sysroot-creator-trusty.sh). Its up to the parent scripts 7cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)# to define certain environment variables: e.g. 8cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)# DIST=trusty 9cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)# APT_REPO=http://archive.ubuntu.com/ubuntu 10cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)# KEYRING_FILE=/usr/share/keyrings/ubuntu-archive-keyring.gpg 11cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)# DEBIAN_PACKAGES="gcc libz libssl" 12cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 13cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#@ This script builds a Debian sysroot images for building Google Chrome. 14868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#@ 15868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#@ Generally this script is invoked as: 16cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#@ sysroot-creator-<flavour>.sh <mode> <args>* 17868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#@ Available modes are shown below. 18868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#@ 19868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#@ List of modes: 20868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 21868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)###################################################################### 22868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)# Config 23868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)###################################################################### 24868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 25868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)set -o nounset 26868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)set -o errexit 27868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 28cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)SCRIPT_DIR=$(cd $(dirname $0) && pwd) 29cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 30cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)if [ -z "${DIST:-}" ]; then 31cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) echo "error: DIST not defined" 32cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) exit 1 33cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)fi 34cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 35cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)if [ -z "${APT_REPO:-}" ]; then 36cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) echo "error: APT_REPO not defined" 37cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) exit 1 38cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)fi 39cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 40cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)if [ -z "${KEYRING_FILE:-}" ]; then 41cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) echo "error: KEYRING_FILE not defined" 42cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) exit 1 43cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)fi 44cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 45cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)if [ -z "${DEBIAN_PACKAGES:-}" ]; then 46cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) echo "error: DEBIAN_PACKAGES not defined" 47cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) exit 1 48cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)fi 49cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 50cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)readonly REPO_BASEDIR="${APT_REPO}/dists/${DIST}" 51868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 52868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)# This is where the staging sysroot is. 53cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)readonly INSTALL_ROOT_AMD64=$(pwd)/${DIST}_amd64_staging 54cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)readonly INSTALL_ROOT_I386=$(pwd)/${DIST}_i386_staging 55cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)readonly INSTALL_ROOT_ARM=$(pwd)/${DIST}_arm_staging 56868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 57868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)readonly REQUIRED_TOOLS="wget" 58868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 59868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)###################################################################### 60868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)# Package Config 61868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)###################################################################### 62868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 63f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)readonly RELEASE_FILE="Release" 64f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)readonly RELEASE_FILE_GPG="Release.gpg" 65f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)readonly RELEASE_LIST="${REPO_BASEDIR}/${RELEASE_FILE}" 66f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)readonly RELEASE_LIST_GPG="${REPO_BASEDIR}/${RELEASE_FILE_GPG}" 67f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)readonly PACKAGE_FILE_AMD64="main/binary-amd64/Packages.bz2" 68f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)readonly PACKAGE_FILE_I386="main/binary-i386/Packages.bz2" 69cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)readonly PACKAGE_FILE_ARM="main/binary-armhf/Packages.bz2" 70f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)readonly PACKAGE_LIST_AMD64="${REPO_BASEDIR}/${PACKAGE_FILE_AMD64}" 71f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)readonly PACKAGE_LIST_I386="${REPO_BASEDIR}/${PACKAGE_FILE_I386}" 72cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)readonly PACKAGE_LIST_ARM="${REPO_BASEDIR}/${PACKAGE_FILE_ARM}" 73868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 74cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)readonly DEBIAN_DEP_LIST_AMD64="packagelist.${DIST}.amd64" 75cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)readonly DEBIAN_DEP_LIST_I386="packagelist.${DIST}.i386" 76cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)readonly DEBIAN_DEP_LIST_ARM="packagelist.${DIST}.arm" 77868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 78868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)###################################################################### 79868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)# Helper 80868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)###################################################################### 81868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 82868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)Banner() { 83868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) echo "######################################################################" 84868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) echo $* 85868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) echo "######################################################################" 86868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)} 87868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 88868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 89868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)SubBanner() { 90cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) echo "----------------------------------------------------------------------" 91868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) echo $* 92cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) echo "----------------------------------------------------------------------" 93868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)} 94868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 95868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 96868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)Usage() { 97cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) egrep "^#@" "${BASH_SOURCE[0]}" | cut --bytes=3- 98868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)} 99868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 100868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 101868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)DownloadOrCopy() { 102868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) if [ -f "$2" ] ; then 103868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) echo "$2 already in place" 104868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) return 105868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) fi 106868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 107868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) HTTP=0 108868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) echo "$1" | grep -qs ^http:// && HTTP=1 109868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) if [ "$HTTP" = "1" ]; then 110868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) SubBanner "downloading from $1 -> $2" 111cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) wget "$1" -O "${2}.partial" 112cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) mv "${2}.partial" $2 113868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) else 114868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) SubBanner "copying from $1" 115868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) cp "$1" "$2" 116868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) fi 117868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)} 118868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 119868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 120868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)SetEnvironmentVariables() { 121868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) ARCH="" 122868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) echo $1 | grep -qs Amd64$ && ARCH=AMD64 123868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) if [ -z "$ARCH" ]; then 124868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) echo $1 | grep -qs I386$ && ARCH=I386 125868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) fi 126cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) if [ -z "$ARCH" ]; then 127cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) echo $1 | grep -qs ARM$ && ARCH=ARM 128cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) fi 129868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) case "$ARCH" in 130cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) ARM) 131cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) INSTALL_ROOT="$INSTALL_ROOT_ARM"; 132cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) ;; 133868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) AMD64) 134868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) INSTALL_ROOT="$INSTALL_ROOT_AMD64"; 135868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) ;; 136868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) I386) 137868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) INSTALL_ROOT="$INSTALL_ROOT_I386"; 138868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) ;; 139868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) *) 140868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) echo "ERROR: Unexpected bad architecture." 141868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) exit 1 142868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) ;; 143868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) esac 144868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)} 145868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 146868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 147868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)# some sanity checks to make sure this script is run from the right place 148868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)# with the right tools 149868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)SanityCheck() { 150868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) Banner "Sanity Checks" 151868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 152868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) if ! mkdir -p "${INSTALL_ROOT}" ; then 153868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) echo "ERROR: ${INSTALL_ROOT} can't be created." 154868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) exit 1 155868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) fi 156868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 157cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) CHROME_DIR=$(cd "${SCRIPT_DIR}/../../.." && pwd) 158cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) BUILD_DIR=${CHROME_DIR}/out/sysroot-build/${DIST} 159cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) mkdir -p ${BUILD_DIR} 160cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) echo "Using build directory: ${BUILD_DIR}" 161868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 162868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) for tool in ${REQUIRED_TOOLS} ; do 163cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) if ! which ${tool} > /dev/null ; then 164868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) echo "Required binary $tool not found." 165868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) echo "Exiting." 166868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) exit 1 167868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) fi 168868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) done 169868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)} 170868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 171868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 172868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)ChangeDirectory() { 173868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) # Change directory to where this script is. 174cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) cd ${SCRIPT_DIR} 175868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)} 176868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 177868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 178868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)ClearInstallDir() { 1790529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch Banner "Clearing dirs in ${INSTALL_ROOT}" 180868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) rm -rf ${INSTALL_ROOT}/* 181868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)} 182868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 183868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 184868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)CreateTarBall() { 185868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) local tarball=$1 1860529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch Banner "Creating tar ball ${tarball}" 187868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) tar zcf ${tarball} -C ${INSTALL_ROOT} . 188868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)} 189868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 190effb81e5f8246d0db0270817048dc992db66e9fbBen MurdochCheckBuildSysrootArgs() { 191effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch if [ "$#" -ne "1" ]; then 192effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch echo "ERROR: BuildSysroot commands only take 1 argument" 193effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch exit 1 194effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch fi 195effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 196effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch if [ -z "$1" ]; then 197effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch echo "ERROR: tarball name required" 198effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch exit 1 199effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch fi 200effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch} 201effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 2020529e5d033099cbfc42635f6f6183833b09dff6eBen MurdochExtractPackageBz2() { 2030529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch bzcat "$1" | egrep '^(Package:|Filename:|SHA256:) ' > "$2" 2040529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch} 2050529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 2060529e5d033099cbfc42635f6f6183833b09dff6eBen MurdochGeneratePackageListAmd64() { 2070529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch local output_file="$1" 208cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) local package_list="${BUILD_DIR}/Packages.${DIST}_amd64.bz2" 209cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) local tmp_package_list="${BUILD_DIR}/Packages.${DIST}_amd64" 210cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) DownloadOrCopy "${PACKAGE_LIST_AMD64}" "${package_list}" 211cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) VerifyPackageListing "${PACKAGE_FILE_AMD64}" "${package_list}" 212cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) ExtractPackageBz2 "$package_list" "$tmp_package_list" 213cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) GeneratePackageList "$tmp_package_list" "$output_file" "${DEBIAN_PACKAGES} 214cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) ${DEBIAN_PACKAGES_X86}" 2150529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch} 2160529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 2170529e5d033099cbfc42635f6f6183833b09dff6eBen MurdochGeneratePackageListI386() { 2180529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch local output_file="$1" 219cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) local package_list="${BUILD_DIR}/Packages.${DIST}_i386.bz2" 220cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) local tmp_package_list="${BUILD_DIR}/Packages.${DIST}_amd64" 221cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) DownloadOrCopy "${PACKAGE_LIST_I386}" "${package_list}" 222cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) VerifyPackageListing "${PACKAGE_FILE_I386}" "${package_list}" 223cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) ExtractPackageBz2 "$package_list" "$tmp_package_list" 224cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) GeneratePackageList "$tmp_package_list" "$output_file" "${DEBIAN_PACKAGES} 225cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) ${DEBIAN_PACKAGES_X86}" 226cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} 2270529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 228cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)GeneratePackageListARM() { 229cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) local output_file="$1" 230cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) local package_list="${BUILD_DIR}/Packages.${DIST}_arm.bz2" 231cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) local tmp_package_list="${BUILD_DIR}/Packages.${DIST}_arm" 232cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) DownloadOrCopy "${PACKAGE_LIST_ARM}" "${package_list}" 233cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) VerifyPackageListing "${PACKAGE_FILE_ARM}" "${package_list}" 234cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) ExtractPackageBz2 "$package_list" "$tmp_package_list" 235cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) GeneratePackageList "$tmp_package_list" "$output_file" "${DEBIAN_PACKAGES}" 2360529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch} 2370529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 2380529e5d033099cbfc42635f6f6183833b09dff6eBen MurdochStripChecksumsFromPackageList() { 2390529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch local package_file="$1" 2400529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch sed -i 's/ [a-f0-9]\{64\}$//' "$package_file" 2410529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch} 2420529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 2430529e5d033099cbfc42635f6f6183833b09dff6eBen MurdochVerifyPackageFilesMatch() { 2440529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch local downloaded_package_file="$1" 2450529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch local stored_package_file="$2" 2460529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch diff -u "$downloaded_package_file" "$stored_package_file" 2470529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch if [ "$?" -ne "0" ]; then 2480529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch echo "ERROR: downloaded package files does not match $2." 2490529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch echo "You may need to run UpdatePackageLists." 2500529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch exit 1 2510529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch fi 2520529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch} 2530529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 254868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)###################################################################### 255868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)# 256868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)###################################################################### 257868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 258868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)HacksAndPatchesAmd64() { 259868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) Banner "Misc Hacks & Patches" 260868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) # these are linker scripts with absolute pathnames in them 261868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) # which we rewrite here 262868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) lscripts="${INSTALL_ROOT}/usr/lib/x86_64-linux-gnu/libpthread.so \ 263868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) ${INSTALL_ROOT}/usr/lib/x86_64-linux-gnu/libc.so" 264868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 265868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) #SubBanner "Rewriting Linker Scripts" 266868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) sed -i -e 's|/usr/lib/x86_64-linux-gnu/||g' ${lscripts} 267868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) sed -i -e 's|/lib/x86_64-linux-gnu/||g' ${lscripts} 268868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 269868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) # This is for chrome's ./build/linux/pkg-config-wrapper 270868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) # which overwrites PKG_CONFIG_PATH internally 271868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) SubBanner "Package Configs Symlink" 272868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) mkdir -p ${INSTALL_ROOT}/usr/share 273868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) ln -s ../lib/x86_64-linux-gnu/pkgconfig ${INSTALL_ROOT}/usr/share/pkgconfig 274868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 275868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) SubBanner "Adding an additional ld.conf include" 276868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) LD_SO_HACK_CONF="${INSTALL_ROOT}/etc/ld.so.conf.d/zz_hack.conf" 277868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) echo /usr/lib/gcc/x86_64-linux-gnu/4.6 > "$LD_SO_HACK_CONF" 278868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) echo /usr/lib >> "$LD_SO_HACK_CONF" 279868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)} 280868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 281868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 282868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)HacksAndPatchesI386() { 283868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) Banner "Misc Hacks & Patches" 284868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) # these are linker scripts with absolute pathnames in them 285868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) # which we rewrite here 286868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) lscripts="${INSTALL_ROOT}/usr/lib/i386-linux-gnu/libpthread.so \ 287868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) ${INSTALL_ROOT}/usr/lib/i386-linux-gnu/libc.so" 288868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 289868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) #SubBanner "Rewriting Linker Scripts" 290868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) sed -i -e 's|/usr/lib/i386-linux-gnu/||g' ${lscripts} 291868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) sed -i -e 's|/lib/i386-linux-gnu/||g' ${lscripts} 292868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 293868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) # This is for chrome's ./build/linux/pkg-config-wrapper 294868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) # which overwrites PKG_CONFIG_PATH internally 295868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) SubBanner "Package Configs Symlink" 296868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) mkdir -p ${INSTALL_ROOT}/usr/share 297868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) ln -s ../lib/i386-linux-gnu/pkgconfig ${INSTALL_ROOT}/usr/share/pkgconfig 298868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 299868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) SubBanner "Adding an additional ld.conf include" 300868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) LD_SO_HACK_CONF="${INSTALL_ROOT}/etc/ld.so.conf.d/zz_hack.conf" 301868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) echo /usr/lib/gcc/i486-linux-gnu/4.6 > "$LD_SO_HACK_CONF" 302868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) echo /usr/lib >> "$LD_SO_HACK_CONF" 303868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)} 304868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 305868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 306cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)HacksAndPatchesARM() { 307cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) Banner "Misc Hacks & Patches" 308cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) # these are linker scripts with absolute pathnames in them 309cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) # which we rewrite here 310cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) lscripts="${INSTALL_ROOT}/usr/lib/arm-linux-gnueabihf/libpthread.so \ 311cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) ${INSTALL_ROOT}/usr/lib/arm-linux-gnueabihf/libc.so" 312cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 313cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) #SubBanner "Rewriting Linker Scripts" 314cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) sed -i -e 's|/usr/lib/arm-linux-gnueabihf/||g' ${lscripts} 315cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) sed -i -e 's|/lib/arm-linux-gnueabihf/||g' ${lscripts} 316cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 317cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) # This is for chrome's ./build/linux/pkg-config-wrapper 318cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) # which overwrites PKG_CONFIG_PATH internally 319cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) SubBanner "Package Configs Symlink" 320cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) mkdir -p ${INSTALL_ROOT}/usr/share 321cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) ln -s ../lib/arm-linux-gnueabihf/pkgconfig ${INSTALL_ROOT}/usr/share/pkgconfig 322cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} 323cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 324cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 325868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)InstallIntoSysroot() { 326868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) Banner "Install Libs And Headers Into Jail" 327868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 328cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) mkdir -p ${BUILD_DIR}/debian-packages 329868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) mkdir -p ${INSTALL_ROOT} 3300529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch while (( "$#" )); do 3310529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch local file="$1" 332cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) local package="${BUILD_DIR}/debian-packages/${file##*/}" 3330529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch shift 3340529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch local sha256sum="$1" 3350529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch shift 3360529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch if [ "${#sha256sum}" -ne "64" ]; then 3370529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch echo "Bad sha256sum from package list" 3380529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch exit 1 3390529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch fi 3400529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 3410529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch Banner "Installing ${file}" 342cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) DownloadOrCopy ${APT_REPO}/pool/${file} ${package} 343868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) if [ ! -s "${package}" ] ; then 344868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) echo 345868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) echo "ERROR: bad package ${package}" 346868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) exit 1 347868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) fi 3480529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch echo "${sha256sum} ${package}" | sha256sum --quiet -c 3490529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 3500529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch SubBanner "Extracting to ${INSTALL_ROOT}" 351868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) dpkg --fsys-tarfile ${package}\ 352cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) | tar -xf - --exclude=./usr/share -C ${INSTALL_ROOT} 353868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) done 354868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)} 355868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 356868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 357868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)CleanupJailSymlinks() { 3580529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch Banner "Jail symlink cleanup" 359868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 360868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) SAVEDPWD=$(pwd) 361868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) cd ${INSTALL_ROOT} 362868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) find lib lib64 usr/lib -type l -printf '%p %l\n' | while read link target; do 363868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) # skip links with non-absolute paths 364868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) echo "${target}" | grep -qs ^/ || continue 365868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) echo "${link}: ${target}" 366868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) case "${link}" in 367cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) usr/lib/gcc/x86_64-linux-gnu/4.*/* | usr/lib/gcc/i486-linux-gnu/4.*/* | \ 368cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) usr/lib/gcc/arm-linux-gnueabihf/4.*/*) 369868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) # Relativize the symlink. 370868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) ln -snfv "../../../../..${target}" "${link}" 371868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) ;; 372cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) usr/lib/x86_64-linux-gnu/* | usr/lib/i386-linux-gnu/* | \ 373cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) usr/lib/arm-linux-gnueabihf/*) 374868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) # Relativize the symlink. 375868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) ln -snfv "../../..${target}" "${link}" 376868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) ;; 377868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) usr/lib/*) 378868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) # Relativize the symlink. 379868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) ln -snfv "../..${target}" "${link}" 380868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) ;; 381868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) lib64/* | lib/*) 382868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) # Relativize the symlink. 383868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) ln -snfv "..${target}" "${link}" 384868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) ;; 385868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) esac 386868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) done 387868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 388868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) find lib lib64 usr/lib -type l -printf '%p %l\n' | while read link target; do 389868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) # Make sure we catch new bad links. 390868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) if [ ! -r "${link}" ]; then 391868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) echo "ERROR: FOUND BAD LINK ${link}" 392868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) ls -l ${link} 393868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) exit 1 394868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) fi 395868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) done 396868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) cd "$SAVEDPWD" 397868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)} 398868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 399868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#@ 400868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#@ BuildSysrootAmd64 <tarball-name> 401868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#@ 402868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#@ Build everything and package it 403868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)BuildSysrootAmd64() { 404effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch CheckBuildSysrootArgs $@ 405868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) ClearInstallDir 406cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) local package_file="$BUILD_DIR/package_with_sha256sum_amd64" 4070529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch GeneratePackageListAmd64 "$package_file" 4080529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch local files_and_sha256sums="$(cat ${package_file})" 4090529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch StripChecksumsFromPackageList "$package_file" 4100529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch VerifyPackageFilesMatch "$package_file" "$DEBIAN_DEP_LIST_AMD64" 4110529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch InstallIntoSysroot ${files_and_sha256sums} 412868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) CleanupJailSymlinks 413868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) HacksAndPatchesAmd64 414effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch CreateTarBall "$1" 415868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)} 416868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 417868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#@ 418868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#@ BuildSysrootI386 <tarball-name> 419868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#@ 420868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#@ Build everything and package it 421868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)BuildSysrootI386() { 422effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch CheckBuildSysrootArgs $@ 423868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) ClearInstallDir 424cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) local package_file="$BUILD_DIR/package_with_sha256sum_i386" 4250529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch GeneratePackageListI386 "$package_file" 4260529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch local files_and_sha256sums="$(cat ${package_file})" 4270529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch StripChecksumsFromPackageList "$package_file" 4280529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch VerifyPackageFilesMatch "$package_file" "$DEBIAN_DEP_LIST_I386" 4290529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch InstallIntoSysroot ${files_and_sha256sums} 430868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) CleanupJailSymlinks 431868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) HacksAndPatchesI386 432effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch CreateTarBall "$1" 433868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)} 434868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 435cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#@ 436cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#@ BuildSysrootARM <tarball-name> 437cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#@ 438cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#@ Build everything and package it 439cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)BuildSysrootARM() { 440cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) CheckBuildSysrootArgs $@ 441cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) ClearInstallDir 442cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) local package_file="$BUILD_DIR/package_with_sha256sum_arm" 443cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) GeneratePackageListARM "$package_file" 444cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) local files_and_sha256sums="$(cat ${package_file})" 445cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) StripChecksumsFromPackageList "$package_file" 446cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) VerifyPackageFilesMatch "$package_file" "$DEBIAN_DEP_LIST_ARM" 447cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) APT_REPO=${APR_REPO_ARM:=$APT_REPO} 448cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) InstallIntoSysroot ${files_and_sha256sums} 449cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) CleanupJailSymlinks 450cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) HacksAndPatchesARM 451cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) CreateTarBall "$1" 452cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} 453cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 454868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)# 455cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)# CheckForDebianGPGKeyring 456f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)# 457f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)# Make sure the Debian GPG keys exist. Otherwise print a helpful message. 458f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)# 459cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)CheckForDebianGPGKeyring() { 460cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) if [ ! -e "$KEYRING_FILE" ]; then 461f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) echo "Debian GPG keys missing. Install the debian-archive-keyring package." 462f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) exit 1 463f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) fi 464f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 465f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 466f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)# 467f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)# VerifyPackageListing 468f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)# 469f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)# Verifies the downloaded Packages.bz2 file has the right checksums. 470f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)# 471f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)VerifyPackageListing() { 472f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) local file_path=$1 473f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) local output_file=$2 474cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) local release_file="${BUILD_DIR}/${RELEASE_FILE}" 475cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) local release_file_gpg="${BUILD_DIR}/${RELEASE_FILE_GPG}" 476f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 477cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) CheckForDebianGPGKeyring 478f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 479f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) DownloadOrCopy ${RELEASE_LIST} ${release_file} 480f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) DownloadOrCopy ${RELEASE_LIST_GPG} ${release_file_gpg} 481f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) echo "Verifying: ${release_file} with ${release_file_gpg}" 482cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) gpgv --keyring $KEYRING_FILE ${release_file_gpg} ${release_file} 483f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 484f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) echo "Verifying: ${output_file}" 485f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) local checksums=$(grep ${file_path} ${release_file} | cut -d " " -f 2) 486f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) local sha256sum=$(echo ${checksums} | cut -d " " -f 3) 487f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 488f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) if [ "${#sha256sum}" -ne "64" ]; then 489f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) echo "Bad sha256sum from ${RELEASE_LIST}" 490f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) exit 1 491f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) fi 492f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 493f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) echo "${sha256sum} ${output_file}" | sha256sum --quiet -c 494f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 495f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 496f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)# 497868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)# GeneratePackageList 498868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)# 499cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)# Looks up package names in ${BUILD_DIR}/Packages and write list of URLs 500868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)# to output file. 501868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)# 502868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)GeneratePackageList() { 503cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) local input_file="$1" 504cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) local output_file="$2" 505cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) echo "Updating: ${output_file} from ${input_file}" 5060529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch /bin/rm -f "${output_file}" 507868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) shift 508cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) shift 509868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) for pkg in $@ ; do 510cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) local pkg_full=$(grep -A 1 " ${pkg}\$" "$input_file" | \ 5110529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch egrep -o "pool/.*") 512868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) if [ -z "${pkg_full}" ]; then 513868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) echo "ERROR: missing package: $pkg" 514868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) exit 1 515868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) fi 5160529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch local pkg_nopool=$(echo "$pkg_full" | sed "s/^pool\///") 517cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) local sha256sum=$(grep -A 4 " ${pkg}\$" "$input_file" | \ 5180529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch grep ^SHA256: | sed 's/^SHA256: //') 5190529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch if [ "${#sha256sum}" -ne "64" ]; then 5200529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch echo "Bad sha256sum from Packages" 5210529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch exit 1 5220529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch fi 5230529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch echo $pkg_nopool $sha256sum >> "$output_file" 524868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) done 525868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) # sort -o does an in-place sort of this file 5260529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch sort "$output_file" -o "$output_file" 527868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)} 528868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 529868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#@ 530868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#@ UpdatePackageListsAmd64 531868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#@ 532868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#@ Regenerate the package lists such that they contain an up-to-date 533868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#@ list of URLs within the Debian archive. (For amd64) 534868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)UpdatePackageListsAmd64() { 5350529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch GeneratePackageListAmd64 "$DEBIAN_DEP_LIST_AMD64" 5360529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch StripChecksumsFromPackageList "$DEBIAN_DEP_LIST_AMD64" 537868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)} 538868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 539868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#@ 540868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#@ UpdatePackageListsI386 541868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#@ 542868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#@ Regenerate the package lists such that they contain an up-to-date 543868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#@ list of URLs within the Debian archive. (For i386) 544868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)UpdatePackageListsI386() { 5450529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch GeneratePackageListI386 "$DEBIAN_DEP_LIST_I386" 5460529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch StripChecksumsFromPackageList "$DEBIAN_DEP_LIST_I386" 547868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)} 548868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 549cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#@ 550cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#@ UpdatePackageListsARM 551cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#@ 552cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#@ Regenerate the package lists such that they contain an up-to-date 553cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#@ list of URLs within the Debian archive. (For arm) 554cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)UpdatePackageListsARM() { 555cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) GeneratePackageListARM "$DEBIAN_DEP_LIST_ARM" 556cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) StripChecksumsFromPackageList "$DEBIAN_DEP_LIST_ARM" 557cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} 558cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 559868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)if [ $# -eq 0 ] ; then 560868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) echo "ERROR: you must specify a mode on the commandline" 561868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) echo 562868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) Usage 563868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) exit 1 564868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)elif [ "$(type -t $1)" != "function" ]; then 565868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) echo "ERROR: unknown function '$1'." >&2 566868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) echo "For help, try:" 567868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) echo " $0 help" 568868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) exit 1 569868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)else 570868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) ChangeDirectory 571868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) SetEnvironmentVariables "$1" 572868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) SanityCheck 573868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) "$@" 574868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)fi 575