Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(197)

Unified Diff: chrome_linux/installer/debian/build.sh

Issue 33333002: Roll Linux reference build to official build 30.0.1599.33 (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/deps/reference_builds/
Patch Set: Created 7 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome_linux/installer/common/wrapper ('k') | chrome_linux/installer/debian/changelog.template » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome_linux/installer/debian/build.sh
===================================================================
--- chrome_linux/installer/debian/build.sh (revision 0)
+++ chrome_linux/installer/debian/build.sh (revision 0)
@@ -0,0 +1,332 @@
+#!/bin/bash
+#
+# Copyright (c) 2012 The Chromium Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+# TODO(mmoss) This currently only works with official builds, since non-official
+# builds don't add the "${BUILDDIR}/installer/" files needed for packaging.
+
+set -e
+if [ "$VERBOSE" ]; then
+ set -x
+fi
+set -u
+
+# Create the Debian changelog file needed by dpkg-gencontrol. This just adds a
+# placeholder change, indicating it is the result of an automatic build.
+# TODO(mmoss) Release packages should create something meaningful for a
+# changelog, but simply grabbing the actual 'svn log' is way too verbose. Do we
+# have any type of "significant/visible changes" log that we could use for this?
+gen_changelog() {
+ rm -f "${DEB_CHANGELOG}"
+ process_template "${SCRIPTDIR}/changelog.template" "${DEB_CHANGELOG}"
+ debchange -a --nomultimaint -m --changelog "${DEB_CHANGELOG}" \
+ "Release Notes: ${RELEASENOTES}"
+ # Trunk packages need to install to a custom path and with custom filenames
+ # (e.g. not /usr/bin/google-chrome) so they don't conflict with release
+ # channel packages.
+ if [ "$CHANNEL" = "trunk" ] || [ "$CHANNEL" = "asan" ]; then
+ local PACKAGE="${PACKAGE}-${CHANNEL}"
+ fi
+ GZLOG="${STAGEDIR}/usr/share/doc/${PACKAGE}/changelog.gz"
+ mkdir -p "$(dirname "${GZLOG}")"
+ gzip -9 -c "${DEB_CHANGELOG}" > "${GZLOG}"
+ chmod 644 "${GZLOG}"
+}
+
+# Create the Debian control file needed by dpkg-deb.
+gen_control() {
+ dpkg-gencontrol -v"${VERSIONFULL}" -c"${DEB_CONTROL}" -l"${DEB_CHANGELOG}" \
+ -f"${DEB_FILES}" -p"${PACKAGE}-${CHANNEL}" -P"${STAGEDIR}" \
+ -O > "${STAGEDIR}/DEBIAN/control"
+ rm -f "${DEB_CONTROL}"
+}
+
+# Setup the installation directory hierachy in the package staging area.
+prep_staging_debian() {
+ prep_staging_common
+ install -m 755 -d "${STAGEDIR}/DEBIAN" \
+ "${STAGEDIR}/etc/cron.daily" \
+ "${STAGEDIR}/usr/share/menu" \
+ "${STAGEDIR}/usr/share/doc/${PACKAGE}"
+}
+
+# Put the package contents in the staging area.
+stage_install_debian() {
+ # Trunk packages need to install to a custom path and with custom filenames
+ # (e.g. not /usr/bin/google-chrome) so they don't conflict with release
+ # channel packages.
+ if [ "$CHANNEL" = "trunk" ] || [ "$CHANNEL" = "asan" ]; then
+ local PACKAGE="${PACKAGE}-${CHANNEL}"
+ local INSTALLDIR="${INSTALLDIR}-${CHANNEL}"
+ # This would ideally be compiled into the app, but that's a bit too
+ # intrusive of a change for these limited use channels, so we'll just hack
+ # it into the wrapper script. The user can still override since it seems to
+ # work to specify --user-data-dir multiple times on the command line, with
+ # the last occurrence winning.
+ local DEFAULT_FLAGS="--user-data-dir=\"\${HOME}/.config/${PACKAGE}\""
+ local MENUNAME="${MENUNAME} (${CHANNEL})"
+ fi
+ prep_staging_debian
+ stage_install_common
+ echo "Staging Debian install files in '${STAGEDIR}'..."
+ install -m 755 -d "${STAGEDIR}/${INSTALLDIR}/cron"
+ process_template "${BUILDDIR}/installer/common/repo.cron" \
+ "${STAGEDIR}/${INSTALLDIR}/cron/${PACKAGE}"
+ chmod 755 "${STAGEDIR}/${INSTALLDIR}/cron/${PACKAGE}"
+ pushd "${STAGEDIR}/etc/cron.daily/"
+ ln -snf "${INSTALLDIR}/cron/${PACKAGE}" "${PACKAGE}"
+ popd
+ process_template "${BUILDDIR}/installer/debian/debian.menu" \
+ "${STAGEDIR}/usr/share/menu/${PACKAGE}.menu"
+ chmod 644 "${STAGEDIR}/usr/share/menu/${PACKAGE}.menu"
+ process_template "${BUILDDIR}/installer/debian/postinst" \
+ "${STAGEDIR}/DEBIAN/postinst"
+ chmod 755 "${STAGEDIR}/DEBIAN/postinst"
+ process_template "${BUILDDIR}/installer/debian/prerm" \
+ "${STAGEDIR}/DEBIAN/prerm"
+ chmod 755 "${STAGEDIR}/DEBIAN/prerm"
+ process_template "${BUILDDIR}/installer/debian/postrm" \
+ "${STAGEDIR}/DEBIAN/postrm"
+ chmod 755 "${STAGEDIR}/DEBIAN/postrm"
+}
+
+# Actually generate the package file.
+do_package() {
+ echo "Packaging ${ARCHITECTURE}..."
+ PREDEPENDS="$COMMON_PREDEPS"
+ DEPENDS="${COMMON_DEPS}"
+ # Trunk is a special package, mostly for development testing, so don't make
+ # it replace any installed release packages.
+ if [ "$CHANNEL" != "trunk" ] && [ "$CHANNEL" != "asan" ]; then
+ REPLACES="${PACKAGE}"
+ CONFLICTS="${PACKAGE}"
+ PROVIDES="${PACKAGE}, www-browser"
+ fi
+ gen_changelog
+ process_template "${SCRIPTDIR}/control.template" "${DEB_CONTROL}"
+ export DEB_HOST_ARCH="${ARCHITECTURE}"
+ if [ -f "${DEB_CONTROL}" ]; then
+ gen_control
+ fi
+ fakeroot dpkg-deb -Zlzma -b "${STAGEDIR}" .
+}
+
+# Remove temporary files and unwanted packaging output.
+cleanup() {
+ echo "Cleaning..."
+ rm -rf "${STAGEDIR}"
+ rm -rf "${TMPFILEDIR}"
+}
+
+usage() {
+ echo "usage: $(basename $0) [-c channel] [-a target_arch] [-o 'dir'] "
+ echo " [-b 'dir']"
+ echo "-c channel the package channel (trunk, asan, unstable, beta, stable)"
+ echo "-a arch package architecture (ia32 or x64)"
+ echo "-o dir package output directory [${OUTPUTDIR}]"
+ echo "-b dir build input directory [${BUILDDIR}]"
+ echo "-h this help message"
+}
+
+# Check that the channel name is one of the allowable ones.
+verify_channel() {
+ case $CHANNEL in
+ stable )
+ CHANNEL=stable
+ RELEASENOTES="http://googlechromereleases.blogspot.com/search/label/Stable%20updates"
+ ;;
+ unstable|dev|alpha )
+ CHANNEL=unstable
+ RELEASENOTES="http://googlechromereleases.blogspot.com/search/label/Dev%20updates"
+ ;;
+ testing|beta )
+ CHANNEL=beta
+ RELEASENOTES="http://googlechromereleases.blogspot.com/search/label/Beta%20updates"
+ ;;
+ trunk|asan )
+ # Setting this to empty will prevent it from updating any existing configs
+ # from release packages.
+ REPOCONFIG=""
+ RELEASENOTES="http://googlechromereleases.blogspot.com/"
+ ;;
+ * )
+ echo
+ echo "ERROR: '$CHANNEL' is not a valid channel type."
+ echo
+ exit 1
+ ;;
+ esac
+}
+
+process_opts() {
+ while getopts ":o:b:c:a:h" OPTNAME
+ do
+ case $OPTNAME in
+ o )
+ OUTPUTDIR=$(readlink -f "${OPTARG}")
+ mkdir -p "${OUTPUTDIR}"
+ ;;
+ b )
+ BUILDDIR=$(readlink -f "${OPTARG}")
+ ;;
+ c )
+ CHANNEL="$OPTARG"
+ ;;
+ a )
+ TARGETARCH="$OPTARG"
+ ;;
+ h )
+ usage
+ exit 0
+ ;;
+ \: )
+ echo "'-$OPTARG' needs an argument."
+ usage
+ exit 1
+ ;;
+ * )
+ echo "invalid command-line option: $OPTARG"
+ usage
+ exit 1
+ ;;
+ esac
+ done
+}
+
+#=========
+# MAIN
+#=========
+
+SCRIPTDIR=$(readlink -f "$(dirname "$0")")
+OUTPUTDIR="${PWD}"
+STAGEDIR=$(mktemp -d -t deb.build.XXXXXX) || exit 1
+TMPFILEDIR=$(mktemp -d -t deb.tmp.XXXXXX) || exit 1
+DEB_CHANGELOG="${TMPFILEDIR}/changelog"
+DEB_FILES="${TMPFILEDIR}/files"
+DEB_CONTROL="${TMPFILEDIR}/control"
+CHANNEL="trunk"
+# Default target architecture to same as build host.
+if [ "$(uname -m)" = "x86_64" ]; then
+ TARGETARCH="x64"
+else
+ TARGETARCH="ia32"
+fi
+
+# call cleanup() on exit
+trap cleanup 0
+process_opts "$@"
+if [ ! "$BUILDDIR" ]; then
+ BUILDDIR=$(readlink -f "${SCRIPTDIR}/../../../../../out/Release")
+fi
+
+source ${BUILDDIR}/installer/common/installer.include
+
+get_version_info
+VERSIONFULL="${VERSION}-${PACKAGE_RELEASE}"
+
+if [ "$CHROMIUM_BUILD" = "_google_chrome" ]; then
+ source "${BUILDDIR}/installer/common/google-chrome.info"
+else
+ source "${BUILDDIR}/installer/common/chromium-browser.info"
+fi
+eval $(sed -e "s/^\([^=]\+\)=\(.*\)$/export \1='\2'/" \
+ "${BUILDDIR}/installer/theme/BRANDING")
+
+REPOCONFIG="deb http://dl.google.com/linux/${PACKAGE#google-}/deb/ stable main"
+verify_channel
+
+# Some Debian packaging tools want these set.
+export DEBFULLNAME="${MAINTNAME}"
+export DEBEMAIL="${MAINTMAIL}"
+
+# We'd like to eliminate more of these deps by relying on the 'lsb' package, but
+# that brings in tons of unnecessary stuff, like an mta and rpm. Until that full
+# 'lsb' package is installed by default on DEB distros, we'll have to stick with
+# the LSB sub-packages, to avoid pulling in all that stuff that's not installed
+# by default.
+
+# Need a dummy debian/control file for dpkg-shlibdeps.
+DUMMY_STAGING_DIR="${TMPFILEDIR}/dummy_staging"
+mkdir "$DUMMY_STAGING_DIR"
+cd "$DUMMY_STAGING_DIR"
+mkdir debian
+touch debian/control
+
+# Generate the dependencies,
+# TODO(mmoss): This is a workaround for a problem where dpkg-shlibdeps was
+# resolving deps using some of our build output shlibs (i.e.
+# out/Release/lib.target/libfreetype.so.6), and was then failing with:
+# dpkg-shlibdeps: error: no dependency information found for ...
+# It's not clear if we ever want to look in LD_LIBRARY_PATH to resolve deps,
+# but it seems that we don't currently, so this is the most expediant fix.
+SAVE_LDLP=${LD_LIBRARY_PATH:-}
+unset LD_LIBRARY_PATH
+DPKG_SHLIB_DEPS=$(dpkg-shlibdeps -O "$BUILDDIR/chrome" 2> /dev/null | \
+ sed 's/^shlibs:Depends=//')
+if [ -n "$SAVE_LDLP" ]; then
+ LD_LIBRARY_PATH=$SAVE_LDLP
+fi
+
+# Format it nicely and save it for comparison.
+# The grep -v is for a duplicate libc6 dep caused by Lucid glibc silliness.
+echo "$DPKG_SHLIB_DEPS" | sed 's/, /\n/g' | \
+ grep -v '^libc6 (>= 2.3.6-6~)$' > actual
+
+# Compare the expected dependency list to the generate list.
+BAD_DIFF=0
+diff "$SCRIPTDIR/expected_deps" actual || BAD_DIFF=1
+if [ $BAD_DIFF -ne 0 ] && [ -z "${IGNORE_DEPS_CHANGES:-}" ]; then
+ echo
+ echo "ERROR: Shared library dependencies changed!"
+ echo "If this is intentional, please update:"
+ echo "chrome/installer/linux/debian/expected_deps"
+ echo
+ exit $BAD_DIFF
+fi
+rm -rf "$DUMMY_STAGING_DIR"
+
+# Additional dependencies not in the dpkg-shlibdeps output.
+# Pull a more recent version of NSS than required by runtime linking, for
+# security and stability updates in NSS.
+ADDITION_DEPS="ca-certificates, libcurl3, libnss3 (>= 3.14.3), \
+ lsb-base (>=3.2), xdg-utils (>= 1.0.2), wget"
+
+# Fix-up libnspr dependency due to renaming in Ubuntu (the old package still
+# exists, but it was moved to "universe" repository, which isn't installed by
+# default).
+DPKG_SHLIB_DEPS=$(sed \
+ 's/\(libnspr4-0d ([^)]*)\), /\1 | libnspr4 (>= 4.9.5-0ubuntu0), /g' \
+ <<< $DPKG_SHLIB_DEPS)
+
+# Fix-up libudev dependency because Ubuntu 13.04 has libudev1 instead of
+# libudev0.
+DPKG_SHLIB_DEPS=$(sed 's/\(libudev0 ([^)]*)\), /\1 | libudev1 (>= 198), /g' \
+ <<< $DPKG_SHLIB_DEPS)
+
+COMMON_DEPS="${DPKG_SHLIB_DEPS}, ${ADDITION_DEPS}"
+COMMON_PREDEPS="dpkg (>= 1.14.0)"
+
+
+# Make everything happen in the OUTPUTDIR.
+cd "${OUTPUTDIR}"
+
+case "$TARGETARCH" in
+ ia32 )
+ export ARCHITECTURE="i386"
+ stage_install_debian
+ ;;
+ x64 )
+ export ARCHITECTURE="amd64"
+ stage_install_debian
+ ;;
+ * )
+ echo
+ echo "ERROR: Don't know how to build DEBs for '$TARGETARCH'."
+ echo
+ exit 1
+ ;;
+esac
+
+do_package
Property changes on: chrome_linux/installer/debian/build.sh
___________________________________________________________________
Added: svn:executable
+ *
« no previous file with comments | « chrome_linux/installer/common/wrapper ('k') | chrome_linux/installer/debian/changelog.template » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698