install-build-deps.sh revision 5f1c94371a64b3196d4be9466099bb892df9b88e
15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#!/bin/bash -e 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# Copyright (c) 2012 The Chromium Authors. All rights reserved. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# Use of this source code is governed by a BSD-style license that can be 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# found in the LICENSE file. 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# Script to install everything needed to build chromium (well, ideally, anyway) 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# See http://code.google.com/p/chromium/wiki/LinuxBuildInstructions 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# and http://code.google.com/p/chromium/wiki/LinuxBuild64Bit 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)usage() { 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) echo "Usage: $0 [--options]" 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) echo "Options:" 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) echo "--[no-]syms: enable or disable installation of debugging symbols" 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) echo "--[no-]lib32: enable or disable installation of 32 bit libraries" 162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) echo "--[no-]arm: enable or disable installation of arm cross toolchain" 172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) echo "--[no-]chromeos-fonts: enable or disable installation of Chrome OS"\ 182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "fonts" 195d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) echo "--[no-]nacl: enable or disable installation of prerequisites for"\ 205d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) "building standalone NaCl and all its toolchains" 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) echo "--no-prompt: silently select standard options/defaults" 221e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) echo "--quick-check: quickly try to determine if dependencies are installed" 231e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) echo " (this avoids interactive prompts and sudo commands," 241e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) echo " so might not be 100% accurate)" 251e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) echo "--unsupported: attempt installation even on unsupported systems" 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) echo "Script will prompt interactively if options not given." 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) exit 1 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 30868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)# Checks whether a particular package is available in the repos. 31868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)# USAGE: $ package_exists <package name> 32868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)package_exists() { 33868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) apt-cache pkgnames | grep -x "$1" > /dev/null 2>&1 34868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)} 35868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 365d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)# These default to on because (some) bots need them and it keeps things 375d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)# simple for the bot setup if all bots just run the script in its default 385d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)# mode. Developers who don't want stuff they don't need installed on their 395d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)# own workstations can pass --no-arm --no-nacl when running the script. 405d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)do_inst_arm=1 415d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)do_inst_nacl=1 425d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)while test "$1" != "" 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)do 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case "$1" in 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) --syms) do_inst_syms=1;; 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) --no-syms) do_inst_syms=0;; 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) --lib32) do_inst_lib32=1;; 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) --no-lib32) do_inst_lib32=0;; 502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) --arm) do_inst_arm=1;; 512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) --no-arm) do_inst_arm=0;; 522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) --chromeos-fonts) do_inst_chromeos_fonts=1;; 532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) --no-chromeos-fonts) do_inst_chromeos_fonts=0;; 545d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) --nacl) do_inst_nacl=1;; 555d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) --no-nacl) do_inst_nacl=0;; 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) --no-prompt) do_default=1 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) do_quietly="-qq --assume-yes" 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ;; 591e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) --quick-check) do_quick_check=1;; 602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) --unsupported) do_unsupported=1;; 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *) usage;; 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) esac 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) shift 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)done 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 66cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)# Check for lsb_release command in $PATH 67cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)if ! which lsb_release > /dev/null; then 68cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) echo "ERROR: lsb_release not found in \$PATH" >&2 69cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) exit 1; 70cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)fi 712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 72cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)lsb_release=$(lsb_release --codename --short) 73cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)ubuntu_codenames="(precise|quantal|raring|saucy|trusty)" 741e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)if [ 0 -eq "${do_unsupported-0}" ] && [ 0 -eq "${do_quick_check-0}" ] ; then 75cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) if [[ ! $lsb_release =~ $ubuntu_codenames ]]; then 76cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) echo "ERROR: Only Ubuntu 12.04 (precise) through 14.04 (trusty) are"\ 772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "currently supported" >&2 782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) exit 1 792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) fi 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if ! uname -m | egrep -q "i686|x86_64"; then 822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) echo "Only x86 architectures are currently supported" >&2 832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) exit 842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) fi 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)fi 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 871e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)if [ "x$(id -u)" != x0 ] && [ 0 -eq "${do_quick_check-0}" ]; then 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) echo "Running as non-root user." 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) echo "You might have to enter your password one or more times for 'sudo'." 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) echo 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)fi 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# Packages needed for chromeos only 941e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)chromeos_dev_list="libbluetooth-dev" 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 96f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)# Packages needed for development 975c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liudev_list="apache2.2-bin bison curl dpkg-dev elfutils devscripts fakeroot flex 98c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch fonts-thai-tlwg g++ git-core gperf language-pack-da language-pack-fr 99c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch language-pack-he language-pack-zh-hant libapache2-mod-php5 100116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch libasound2-dev libbrlapi-dev libav-tools libbz2-dev libcairo2-dev 101116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch libcap-dev libcups2-dev libcurl4-gnutls-dev libdrm-dev libelf-dev 102116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch libexif-dev libgconf2-dev libgl1-mesa-dev libglib2.0-dev 103116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch libglu1-mesa-dev libgnome-keyring-dev libgtk2.0-dev libkrb5-dev 104116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch libnspr4-dev libnss3-dev libpam0g-dev libpci-dev libpulse-dev 105116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch libsctp-dev libspeechd-dev libsqlite3-dev libssl-dev libudev-dev 106116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch libwww-perl libxslt1-dev libxss-dev libxt-dev libxtst-dev 107116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mesa-common-dev openbox patch perl php5-cgi pkg-config python 108116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch python-cherrypy3 python-dev python-psutil rpm ruby subversion 109116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ttf-dejavu-core ttf-indic-fonts ttf-kochi-gothic ttf-kochi-mincho 110116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch wdiff xfonts-mathml zip $chromeos_dev_list" 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# 64-bit systems need a minimum set of 32-bit compat packages for the pre-built 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# NaCl binaries. These are always needed, regardless of whether or not we want 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# the full 32-bit "cross-compile" support (--lib32). 1150f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)if file /sbin/init | grep -q 'ELF 64-bit'; then 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) dev_list="${dev_list} libc6-i386 lib32gcc1 lib32stdc++6" 1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)fi 1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# Run-time libraries required by chromeos only 1201e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)chromeos_lib_list="libpulse0 libbz2-1.0" 1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# Full list of required run-time libraries 1231e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)lib_list="libatk1.0-0 libc6 libasound2 libcairo2 libcap2 libcups2 libexpat1 124a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) libexif12 libfontconfig1 libfreetype6 libglib2.0-0 libgnome-keyring0 1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) libgtk2.0-0 libpam0g libpango1.0-0 libpci3 libpcre3 libpixman-1-0 12690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) libpng12-0 libspeechd2 libstdc++6 libsqlite3-0 libx11-6 1272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) libxau6 libxcb1 libxcomposite1 libxcursor1 libxdamage1 libxdmcp6 1282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) libxext6 libxfixes3 libxi6 libxinerama1 libxrandr2 libxrender1 1292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) libxtst6 zlib1g $chromeos_lib_list" 1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# Debugging symbols for all of the run-time libraries 1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)dbg_list="libatk1.0-dbg libc6-dbg libcairo2-dbg libfontconfig1-dbg 1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) libglib2.0-0-dbg libgtk2.0-0-dbg libpango1.0-0-dbg libpcre3-dbg 1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) libpixman-1-0-dbg libsqlite3-0-dbg libx11-6-dbg libxau6-dbg 1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) libxcb1-dbg libxcomposite1-dbg libxcursor1-dbg libxdamage1-dbg 1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) libxdmcp6-dbg libxext6-dbg libxfixes3-dbg libxi6-dbg libxinerama1-dbg 137f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) libxrandr2-dbg libxrender1-dbg libxtst6-dbg zlib1g-dbg 138f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) libstdc++6-4.6-dbg" 1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1401e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)# arm cross toolchain packages needed to build chrome on armhf 141cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)arm_list="libc6-dev-armhf-cross 142cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) linux-libc-dev-armhf-cross 143cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) g++-arm-linux-gnueabihf" 1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)# Packages to build NaCl, its toolchains, and its ports. 1466d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)nacl_list="autoconf bison cmake g++-mingw-w64-i686 gawk lib32z1-dev 1476d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) libasound2:i386 libcap2:i386 libelf-dev:i386 libexif12:i386 1486d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) libfontconfig1:i386 libgconf-2-4:i386 libglib2.0-0:i386 libgpm2:i386 1495f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) libgtk2.0-0:i386 libncurses5:i386 lib32ncurses5-dev 1505f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) libnss3:i386 libpango1.0-0:i386 xsltproc ant 1516d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) libssl0.9.8:i386 libtinfo-dev libtinfo-dev:i386 libtool 1526d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) libxcomposite1:i386 libxcursor1:i386 libxdamage1:i386 libxi6:i386 1536d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) libxrandr2:i386 libxss1:i386 libxtst6:i386 texinfo xvfb" 1546d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) 1556d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)# Find the proper version of libgbm-dev. We can't just install libgbm-dev as 1566d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)# it depends on mesa, and only one version of mesa can exists on the system. 1576d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)# Hence we must match the same version or this entire script will fail. 1586d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)mesa_variant="" 1596d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)for variant in "-lts-quantal" "-lts-raring" "-lts-saucy"; do 1606d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) if $(dpkg-query -Wf'${Status}' libgl1-mesa-glx${variant} | \ 1616d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) grep -q " ok installed"); then 1626d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) mesa_variant="${variant}" 1636d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) fi 1646d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)done 165116680a4aac90f2aa7413d9095a592090648e557Ben Murdochdev_list="${dev_list} libgbm-dev${mesa_variant} 166116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch libgles2-mesa-dev${mesa_variant}" 1676d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)nacl_list="${nacl_list} libgl1-mesa-glx${mesa_variant}:i386" 1685d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# Some package names have changed over time 170868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)if package_exists ttf-mscorefonts-installer; then 1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) dev_list="${dev_list} ttf-mscorefonts-installer" 1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)else 1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) dev_list="${dev_list} msttcorefonts" 1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)fi 175868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)if package_exists libnspr4-dbg; then 1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) dbg_list="${dbg_list} libnspr4-dbg libnss3-dbg" 1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) lib_list="${lib_list} libnspr4 libnss3" 1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)else 1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) dbg_list="${dbg_list} libnspr4-0d-dbg libnss3-1d-dbg" 1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) lib_list="${lib_list} libnspr4-0d libnss3-1d" 1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)fi 182868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)if package_exists libjpeg-dev; then 18390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) dev_list="${dev_list} libjpeg-dev" 1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)else 18590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) dev_list="${dev_list} libjpeg62-dev" 1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)fi 187868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)if package_exists libudev1; then 18890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) dev_list="${dev_list} libudev1" 18946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) nacl_list="${nacl_list} libudev1:i386" 19090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)else 19190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) dev_list="${dev_list} libudev0" 19246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) nacl_list="${nacl_list} libudev0:i386" 19390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)fi 19458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)if package_exists libbrlapi0.6; then 19558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) dev_list="${dev_list} libbrlapi0.6" 19658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)else 19758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) dev_list="${dev_list} libbrlapi0.5" 19858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)fi 19990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2014e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)# Some packages are only needed if the distribution actually supports 2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# installing them. 203868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)if package_exists appmenu-gtk; then 2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) lib_list="$lib_list appmenu-gtk" 2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)fi 2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# Waits for the user to press 'Y' or 'N'. Either uppercase of lowercase is 2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# accepted. Returns 0 for 'Y' and 1 for 'N'. If an optional parameter has 2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# been provided to yes_no(), the function also accepts RETURN as a user input. 2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# The parameter specifies the exit code that should be returned in that case. 2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# The function will echo the user's selection followed by a newline character. 2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# Users can abort the function by pressing CTRL-C. This will call "exit 1". 2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)yes_no() { 2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if [ 0 -ne "${do_default-0}" ] ; then 2154e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) [ $1 -eq 0 ] && echo "Y" || echo "N" 2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return $1 2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fi 2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) local c 2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) while :; do 2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) c="$(trap 'stty echo -iuclc icanon 2>/dev/null' EXIT INT TERM QUIT 2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) stty -echo iuclc -icanon 2>/dev/null 2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) dd count=1 bs=1 2>/dev/null | od -An -tx1)" 2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case "$c" in 2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " 0a") if [ -n "$1" ]; then 2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) [ $1 -eq 0 ] && echo "Y" || echo "N" 2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return $1 2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fi 2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ;; 2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " 79") echo "Y" 2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return 0 2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ;; 2325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " 6e") echo "N" 2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return 1 2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ;; 2355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "") echo "Aborted" >&2 2365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) exit 1 2375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ;; 2385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *) # The user pressed an unrecognized key. As we are not echoing 2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) # any incorrect user input, alert the user by ringing the bell. 2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (tput bel) 2>/dev/null 2415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ;; 2425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) esac 2435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) done 2445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2461e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)if test "$do_inst_syms" = "" && test 0 -eq ${do_quick_check-0} 2475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)then 2485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) echo "This script installs all tools and libraries needed to build Chromium." 2495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) echo "" 2505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) echo "For most of the libraries, it can also install debugging symbols, which" 2515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) echo "will allow you to debug code in the system libraries. Most developers" 2525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) echo "won't need these symbols." 2535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) echo -n "Do you want me to install them for you (y/N) " 2545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if yes_no 1; then 2555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) do_inst_syms=1 2565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fi 2575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)fi 2585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)if test "$do_inst_syms" = "1"; then 2591e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) echo "Including debugging symbols." 2605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)else 2611e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) echo "Skipping debugging symbols." 2625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) dbg_list= 2635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)fi 2645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)# When cross building for arm on 64-bit systems the host binaries 2662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)# that are part of v8 need to be compiled with -m32 which means 2672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)# that basic multilib support is needed. 2680f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)if file /sbin/init | grep -q 'ELF 64-bit'; then 269cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) if [ "$lsb_release" = "trusty" ]; then 270cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) # gcc-multilib conflicts with the arm cross compiler in trusty but 271cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) # g++-4.8-multilib gives us the 32-bit support that we need. 272cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) arm_list="$arm_list g++-4.8-multilib" 273cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) else 274cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) arm_list="$arm_list g++-multilib" 275cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) fi 2762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)fi 2772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2781e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)if test "$do_inst_arm" = "1" ; then 2791e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) echo "Including ARM cross toolchain." 2802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)else 2811e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) echo "Skipping ARM cross toolchain." 2822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) arm_list= 2832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)fi 2842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2855d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)if test "$do_inst_nacl" = "1"; then 28646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) echo "Including NaCl, NaCl toolchain, NaCl ports dependencies." 2875d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)else 28846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) echo "Skipping NaCl, NaCl toolchain, NaCl ports dependencies." 2895d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) nacl_list= 2905d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)fi 2915d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 2925d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)packages="$( 2935d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) echo "${dev_list} ${lib_list} ${dbg_list} ${arm_list} ${nacl_list}" | 2945d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) tr " " "\n" | sort -u | tr "\n" " " 2955d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles))" 2961e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 2971e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)if [ 1 -eq "${do_quick_check-0}" ] ; then 2981e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) failed_check="$(dpkg-query -W -f '${PackageSpec}:${Status}\n' \ 2991e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) ${packages} 2>&1 | grep -v "ok installed" || :)" 3001e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) if [ -n "${failed_check}" ]; then 3011e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) echo 3021e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) nomatch="$(echo "${failed_check}" | \ 3031e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) sed -e "s/^No packages found matching \(.*\).$/\1/;t;d")" 3041e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) missing="$(echo "${failed_check}" | \ 3051e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) sed -e "/^No packages found matching/d;s/^\(.*\):.*$/\1/")" 3061e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) if [ "$nomatch" ]; then 3071e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) # Distinguish between packages that actually aren't available to the 3081e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) # system (i.e. not in any repo) and packages that just aren't known to 3091e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) # dpkg (i.e. managed by apt). 3101e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) unknown="" 3111e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) for p in ${nomatch}; do 3121e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) if apt-cache show ${p} > /dev/null 2>&1; then 3131e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) missing="${p}\n${missing}" 3141e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) else 3151e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) unknown="${p}\n${unknown}" 3161e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) fi 3171e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) done 3181e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) if [ -n "${unknown}" ]; then 3191e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) echo "WARNING: The following packages are unknown to your system" 3201e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) echo "(maybe missing a repo or need to 'sudo apt-get update'):" 3211e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) echo -e "${unknown}" | sed -e "s/^/ /" 3221e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) fi 3231e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) fi 3241e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) if [ -n "${missing}" ]; then 3251e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) echo "WARNING: The following packages are not installed:" 3261e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) echo -e "${missing}" | sed -e "s/^/ /" 3271e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) fi 3281e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) exit 1 3291e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) fi 3301e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) exit 0 3311e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)fi 3321e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 3335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)sudo apt-get update 3345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# We initially run "apt-get" with the --reinstall option and parse its output. 3365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# This way, we can find all the packages that need to be newly installed 3375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# without accidentally promoting any packages from "auto" to "manual". 3385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# We then re-run "apt-get" with just the list of missing packages. 3395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)echo "Finding missing packages..." 3405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# Intentionally leaving $packages unquoted so it's more readable. 3415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)echo "Packages required: " $packages 3425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)echo 3435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)new_list_cmd="sudo apt-get install --reinstall $(echo $packages)" 344b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)if new_list="$(yes n | LANGUAGE=en LANG=C $new_list_cmd)"; then 3455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) # We probably never hit this following line. 3465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) echo "No missing packages, and the packages are up-to-date." 3475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)elif [ $? -eq 1 ]; then 3485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) # We expect apt-get to have exit status of 1. 3495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) # This indicates that we cancelled the install with "yes n|". 3505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new_list=$(echo "$new_list" | 3515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sed -e '1,/The following NEW packages will be installed:/d;s/^ //;t;d') 3525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new_list=$(echo "$new_list" | sed 's/ *$//') 3535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if [ -z "$new_list" ] ; then 3545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) echo "No missing packages, and the packages are up-to-date." 3555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) else 3565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) echo "Installing missing packages: $new_list." 3575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sudo apt-get install ${do_quietly-} ${new_list} 3585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fi 3595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) echo 3605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)else 3615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) # An apt-get exit status of 100 indicates that a real error has occurred. 3625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) # I am intentionally leaving out the '"'s around new_list_cmd, 3645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) # as this makes it easier to cut and paste the output 3655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) echo "The following command failed: " ${new_list_cmd} 3665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) echo 3675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) echo "It produces the following output:" 3685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) yes n | $new_list_cmd || true 3695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) echo 3705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) echo "You will have to install the above packages yourself." 3715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) echo 3725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) exit 100 3735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)fi 3745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 375d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)# Install the Chrome OS default fonts. This must go after running 376d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)# apt-get, since install-chromeos-fonts depends on curl. 377d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)if test "$do_inst_chromeos_fonts" != "0"; then 378d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) echo 379d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) echo "Installing Chrome OS fonts." 380d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) dir=`echo $0 | sed -r -e 's/\/[^/]+$//'` 381d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) if ! sudo $dir/linux/install-chromeos-fonts.py; then 382d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) echo "ERROR: The installation of the Chrome OS default fonts failed." 383d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) if [ `stat -f -c %T $dir` == "nfs" ]; then 384d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) echo "The reason is that your repo is installed on a remote file system." 385d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) else 386d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) echo "This is expected if your repo is installed on a remote file system." 387d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) fi 388d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) echo "It is recommended to install your repo on a local file system." 389d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) echo "You can skip the installation of the Chrome OS default founts with" 390d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) echo "the command line option: --no-chromeos-fonts." 391d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) exit 1 392d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) fi 393d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)else 394d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) echo "Skipping installation of Chrome OS fonts." 395d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)fi 396d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) 39746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)if test "$do_inst_nacl" = "1"; then 39846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) echo "Installing symbolic links for NaCl." 39946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) if [ ! -r /usr/lib/i386-linux-gnu/libcrypto.so ]; then 40046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) sudo ln -fs libcrypto.so.0.9.8 /usr/lib/i386-linux-gnu/libcrypto.so 40146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) fi 40246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) if [ ! -r /usr/lib/i386-linux-gnu/libssl.so ]; then 40346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) sudo ln -fs libssl.so.0.9.8 /usr/lib/i386-linux-gnu/libssl.so 40446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) fi 40546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)else 40646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) echo "Skipping symbolic links for NaCl." 40746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)fi 40846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 4095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# Install 32bit backwards compatibility support for 64bit systems 4100f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)if file /sbin/init | grep -q 'ELF 64-bit'; then 4115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if test "$do_inst_lib32" != "1" 4125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) then 4135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) echo "NOTE: If you were expecting the option to install 32bit libs," 4145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) echo "please run with the --lib32 flag." 4155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) echo 4165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) echo "Installation complete." 4175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) exit 0 418c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) else 419c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) # This conditional statement has been added to deprecate and eventually 420c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) # remove support for 32bit libraries on 64bit systems. But for the time 421c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) # being, we still have to support a few legacy systems (e.g. bots), where 422c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) # this feature is needed. 423c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) # We only even give the user the option to install these libraries, if 424c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) # they explicitly requested doing so by setting the --lib32 command line 425c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) # flag. 426c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) # And even then, we interactively ask them one more time whether they are 427c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) # absolutely sure. 428c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) # In order for that to work, we must reset the ${do_inst_lib32} variable. 429c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) # There are other ways to achieve the same goal. But resetting the 430c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) # variable is the best way to document the intended behavior -- and to 431c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) # allow us to gradually deprecate and then remove the obsolete code. 4324e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) if test "${do_default-0}" -ne 1; then 4334e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) do_inst_lib32= 4344e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) fi 4355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fi 4365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) echo "WARNING" 4385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) echo 4395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) echo "We no longer recommend that you use this script to install" 4405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) echo "32bit libraries on a 64bit system. Instead, consider using the" 4415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) echo "install-chroot.sh script to help you set up a 32bit environment" 4425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) echo "for building and testing 32bit versions of Chrome." 4435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) echo 4445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) echo "The code for installing 32bit libraries on a 64bit system is" 4455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) echo "unmaintained and might not work with modern versions of Ubuntu" 4465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) echo "or Debian." 4474e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) if test "$do_inst_lib32" != "" ; then 4484e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) echo 4494e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) echo -n "Are you sure you want to proceed (y/N) " 4504e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) if yes_no 1; then 4514e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) do_inst_lib32=1 4524e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) fi 4535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fi 4545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if test "$do_inst_lib32" != "1" 4555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) then 4565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) exit 0 4575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fi 4585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) # Standard 32bit compatibility libraries 4605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) echo "First, installing the limited existing 32-bit support..." 4615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cmp_list="ia32-libs lib32asound2-dev lib32stdc++6 lib32z1 4625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) lib32z1-dev libc6-dev-i386 libc6-i386 g++-multilib" 4635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if [ -n "`apt-cache search lib32readline-gplv2-dev 2>/dev/null`" ]; then 4645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cmp_list="${cmp_list} lib32readline-gplv2-dev" 4655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) else 4665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cmp_list="${cmp_list} lib32readline5-dev" 4675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fi 4685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sudo apt-get install ${do_quietly-} $cmp_list 4695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) tmp=/tmp/install-32bit.$$ 4715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) trap 'rm -rf "${tmp}"' EXIT INT TERM QUIT 4725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mkdir -p "${tmp}/apt/lists/partial" "${tmp}/cache" "${tmp}/partial" 4735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) touch "${tmp}/status" 4745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) [ -r /etc/apt/apt.conf ] && cp /etc/apt/apt.conf "${tmp}/apt/" 4765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cat >>"${tmp}/apt/apt.conf" <<EOF 4775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Apt::Architecture "i386"; 4785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Dir::Cache "${tmp}/cache"; 4795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Dir::Cache::Archives "${tmp}/"; 4805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Dir::State::Lists "${tmp}/apt/lists/"; 4815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Dir::State::status "${tmp}/status"; 4825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)EOF 4835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) # Download 32bit packages 4855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) echo "Computing list of available 32bit packages..." 4865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sudo apt-get -c="${tmp}/apt/apt.conf" update 4875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) echo "Downloading available 32bit packages..." 4895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sudo apt-get -c="${tmp}/apt/apt.conf" \ 4905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) --yes --download-only --force-yes --reinstall install \ 4915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ${lib_list} ${dbg_list} 4925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) # Open packages, remove everything that is not a library, move the 4945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) # library to a lib32 directory and package everything as a *.deb file. 4955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) echo "Repackaging and installing 32bit packages for use on 64bit systems..." 4965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for i in ${lib_list} ${dbg_list}; do 4975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) orig="$(echo "${tmp}/${i}"_*_i386.deb)" 4985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) compat="$(echo "${orig}" | 4995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sed -e 's,\(_[^_/]*_\)i386\(.deb\),-ia32\1amd64\2,')" 5005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) rm -rf "${tmp}/staging" 5015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) msg="$(fakeroot -u sh -exc ' 5025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) # Unpack 32bit Debian archive 5035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) umask 022 5045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mkdir -p "'"${tmp}"'/staging/dpkg/DEBIAN" 5055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cd "'"${tmp}"'/staging" 5065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ar x "'${orig}'" 5072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) tar Cfx dpkg data.tar* 5085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) tar zCfx dpkg/DEBIAN control.tar.gz 5095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) # Create a posix extended regular expression fragment that will 5115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) # recognize the includes which have changed. Should be rare, 5125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) # will almost always be empty. 5135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) includes=`sed -n -e "s/^[0-9a-z]* //g" \ 5145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) -e "\,usr/include/,p" dpkg/DEBIAN/md5sums | 5155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xargs -n 1 -I FILE /bin/sh -c \ 5165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "cmp -s dpkg/FILE /FILE || echo FILE" | 5175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) tr "\n" "|" | 5185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sed -e "s,|$,,"` 5195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) # If empty, set it to not match anything. 5215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) test -z "$includes" && includes="^//" 5225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) # Turn the conflicts into an extended RE for removal from the 5245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) # Provides line. 5255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) conflicts=`sed -n -e "/Conflicts/s/Conflicts: *//;T;s/, */|/g;p" \ 5265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) dpkg/DEBIAN/control` 5275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) # Rename package, change architecture, remove conflicts and dependencies 5295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sed -r -i \ 5305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) -e "/Package/s/$/-ia32/" \ 5315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) -e "/Architecture/s/:.*$/: amd64/" \ 5325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) -e "/Depends/s/:.*/: ia32-libs/" \ 5335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) -e "/Provides/s/($conflicts)(, *)?//g;T1;s/, *$//;:1" \ 5345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) -e "/Recommends/d" \ 5355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) -e "/Conflicts/d" \ 5365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) dpkg/DEBIAN/control 5375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) # Only keep files that live in "lib" directories or the includes 5395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) # that have changed. 5405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sed -r -i \ 5415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) -e "/\/lib64\//d" -e "/\/.?bin\//d" \ 5425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) -e "\,$includes,s,[ /]include/,&32/,g;s,include/32/,include32/,g" \ 5435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) -e "s, lib/, lib32/,g" \ 5445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) -e "s,/lib/,/lib32/,g" \ 5455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) -e "t;d" \ 5465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) -e "\,^/usr/lib32/debug\(.*/lib32\),s,^/usr/lib32/debug,/usr/lib/debug," \ 5475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) dpkg/DEBIAN/md5sums 5485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) # Re-run ldconfig after installation/removal 5505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { echo "#!/bin/sh"; echo "[ \"x\$1\" = xconfigure ]&&ldconfig||:"; } \ 5515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) >dpkg/DEBIAN/postinst 5525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { echo "#!/bin/sh"; echo "[ \"x\$1\" = xremove ]&&ldconfig||:"; } \ 5535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) >dpkg/DEBIAN/postrm 5545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chmod 755 dpkg/DEBIAN/postinst dpkg/DEBIAN/postrm 5555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) # Remove any other control files 5575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) find dpkg/DEBIAN -mindepth 1 "(" -name control -o -name md5sums -o \ 5585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) -name postinst -o -name postrm ")" -o -print | 5595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xargs -r rm -rf 5605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) # Remove any files/dirs that live outside of "lib" directories, 5625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) # or are not in our list of changed includes. 5635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) find dpkg -mindepth 1 -regextype posix-extended \ 5645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "(" -name DEBIAN -o -name lib -o -regex "dpkg/($includes)" ")" \ 5655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) -prune -o -print | tac | 5665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xargs -r -n 1 sh -c "rm \$0 2>/dev/null || rmdir \$0 2>/dev/null || : " 5675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) find dpkg -name lib64 -o -name bin -o -name "?bin" | 5685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) tac | xargs -r rm -rf 5695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) # Remove any symbolic links that were broken by the above steps. 5715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) find -L dpkg -type l -print | tac | xargs -r rm -rf 5725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) # Rename lib to lib32, but keep debug symbols in /usr/lib/debug/usr/lib32 5745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) # That is where gdb looks for them. 5755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) find dpkg -type d -o -path "*/lib/*" -print | 5765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xargs -r -n 1 sh -c " 5775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) i=\$(echo \"\${0}\" | 5785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sed -e s,/lib/,/lib32/,g \ 5795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) -e s,/usr/lib32/debug\\\\\(.*/lib32\\\\\),/usr/lib/debug\\\\1,); 5805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mkdir -p \"\${i%/*}\"; 5815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mv \"\${0}\" \"\${i}\"" 5825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) # Rename include to include32. 5845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) [ -d "dpkg/usr/include" ] && mv "dpkg/usr/include" "dpkg/usr/include32" 5855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) # Prune any empty directories 5875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) find dpkg -type d | tac | xargs -r -n 1 rmdir 2>/dev/null || : 5885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) # Create our own Debian package 5905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cd .. 5915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) dpkg --build staging/dpkg .' 2>&1)" 5925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) compat="$(eval echo $(echo "${compat}" | 5935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sed -e 's,_[^_/]*_amd64.deb,_*_amd64.deb,'))" 5945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) [ -r "${compat}" ] || { 5955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) echo "${msg}" >&2 5965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) echo "Failed to build new Debian archive!" >&2 5975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) exit 1 5985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) msg="$(sudo dpkg -i "${compat}" 2>&1)" && { 6015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) echo "Installed ${compat##*/}" 6025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } || { 6035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) # echo "${msg}" >&2 6045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) echo "Skipped ${compat##*/}" 6055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 6065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) done 6075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) # Add symbolic links for developing 32bit code 6095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) echo "Adding missing symbolic links, enabling 32bit code development..." 6105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for i in $(find /lib32 /usr/lib32 -maxdepth 1 -name \*.so.\* | 6115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sed -e 's/[.]so[.][0-9].*/.so/' | 6125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sort -u); do 6135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) [ "x${i##*/}" = "xld-linux.so" ] && continue 6145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) [ -r "$i" ] && continue 6155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) j="$(ls "$i."* | sed -e 's/.*[.]so[.]\([^.]*\)$/\1/;t;d' | 6165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sort -n | tail -n 1)" 6175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) [ -r "$i.$j" ] || continue 6185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sudo ln -s "${i##*/}.$j" "$i" 6195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) done 6205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)fi 621