blob: bfc241c5a69ae904a9b7a67a912aa53be2f97566 [file] [log] [blame]
Zdenek Behand7bfd862011-05-11 23:56:46 +02001#!/bin/bash
2
3# Copyright (c) 2010 The Chromium OS Authors. All rights reserved.
4# Use of this source code is governed by a BSD-style license that can be
5# found in the LICENSE file.
6
7# Performs an update of the chroot.
8
David James0b1baf62012-03-15 09:26:23 -07009. "$(dirname "$0")/common.sh" || exit 1
Zdenek Behand7bfd862011-05-11 23:56:46 +020010
11# Script must run inside the chroot
12assert_inside_chroot "$@"
13
Zdenek Behan308e9fd2011-05-12 22:25:47 +020014# Do not run as root
15assert_not_root_user
16
Zdenek Behand7bfd862011-05-11 23:56:46 +020017# Flags
18DEFINE_boolean usepkg $FLAGS_TRUE \
19 "Use binary packages to bootstrap."
20DEFINE_boolean fast ${DEFAULT_FAST} "Call many emerges in parallel"
21DEFINE_integer retries -1 \
22 "On build failure, the number of times to retry."
David James184e3902012-02-23 20:19:28 -080023DEFINE_integer jobs -1 \
24 "How many packages to build in parallel at maximum."
Zdenek Behand7bfd862011-05-11 23:56:46 +020025
26# Parse command line flags
27FLAGS "$@" || exit 1
28eval set -- "${FLAGS_ARGV}"
29
30# Only now can we die on error. shflags functions leak non-zero error codes,
31# so will die prematurely if 'set -e' is specified before now.
32set -e
33
J. Richard Barnettee80f6de2012-02-24 14:08:34 -080034. ${SCRIPTS_DIR}/sdk_lib/make_conf_util.sh
35
Zdenek Behan308e9fd2011-05-12 22:25:47 +020036# Run version hooks as pre-update
37${SCRIPTS_DIR}/run_chroot_version_hooks
38
J. Richard Barnettee80f6de2012-02-24 14:08:34 -080039# Create /etc/make.conf.host_setup. The file content is regenerated
40# from scratch every update. There are various reasons to do this:
41# + It's cheap, so this is an easy way to guarantee correct content
42# after an upgrade.
43# + Inside make_chroot.sh, we use a temporary version of the file
44# which must be updated before the script completes; that final
45# update happens here.
46# + If the repositories change to add or remove the private
47# overlay, the file may need to be regenerated.
48create_host_setup
David Jamese996baa2011-11-02 16:11:27 -070049
Zdenek Behand7bfd862011-05-11 23:56:46 +020050info "Updating chroot"
51
Mike Frysinger650bf872012-02-27 11:05:26 -050052EMERGE_FLAGS="-uNv --with-bdeps=y --select"
Zdenek Behan95626202011-05-12 05:54:19 +020053if [ "${FLAGS_usepkg}" -eq "${FLAGS_TRUE}" ]; then
54 EMERGE_FLAGS="${EMERGE_FLAGS} --getbinpkg"
David James0dccff32011-06-09 13:03:47 -070055
56 # Only update toolchain when binpkgs are available. Toolchain rollout
57 # process only takes place when the chromiumos sdk builder finishes
58 # a successful build.
59 EMERGE_FLAGS+=" --useoldpkg-atoms=sys-devel/binutils"
60 EMERGE_FLAGS+=" --useoldpkg-atoms=sys-devel/gcc"
61 EMERGE_FLAGS+=" --useoldpkg-atoms=sys-libs/glibc"
Zdenek Behan95626202011-05-12 05:54:19 +020062fi
Zdenek Behana29fb202011-05-12 05:21:14 +020063
David James184e3902012-02-23 20:19:28 -080064if [[ "${FLAGS_jobs}" -ne -1 ]]; then
65 EMERGE_FLAGS+=" --jobs=${FLAGS_jobs}"
66fi
67
Zdenek Behand7bfd862011-05-11 23:56:46 +020068# Perform an update of hard-host-depends and world in the chroot.
69EMERGE_CMD="emerge"
70if [ "${FLAGS_fast}" -eq "${FLAGS_TRUE}" ]; then
71 EMERGE_CMD="${GCLIENT_ROOT}/chromite/bin/parallel_emerge"
72fi
Zdenek Behan95626202011-05-12 05:54:19 +020073
Zdenek Behan4748e872011-10-11 03:23:11 +020074# In first pass, update portage and toolchains. Lagged updates of both
75# can cause serious issues later.
76CHOST="$(portageq envvar CHOST)"
77LATEST="$(gcc-config -l | grep "${CHOST}" | awk '{ print $2 }' | \
78 sort -V | tail -n 1 )"
79CURRENT="$(gcc-config -c)" || true # This fails if current profile is invalid.
80eretry sudo -E ${EMERGE_CMD} ${EMERGE_FLAGS} \
81 sys-devel/gcc sys-devel/binutils sys-libs/glibc sys-apps/portage
82# If the latest toolchain wasn't already selected before we updated, do nothing,
83# otherwise autoselect the latest. Also fix if the current profile is invalid.
84if [ "${LATEST}" = "${CURRENT}" ] || ! gcc-config -c &> /dev/null; then
85 LATEST="$(gcc-config -l | grep "${CHOST}" | awk '{ print $2 }' | \
86 sort -V | tail -n 1 )"
87 sudo gcc-config "${LATEST}"
88fi
89
90# Second pass, update everything else.
91EMERGE_FLAGS+=" --deep"
Zdenek Behana29fb202011-05-12 05:21:14 +020092eretry sudo -E ${EMERGE_CMD} ${EMERGE_FLAGS} \
93 chromeos-base/hard-host-depends world
Zdenek Behand7bfd862011-05-11 23:56:46 +020094
Zdenek Behan99fb7422011-10-17 01:12:34 +020095# Automatically discard all CONFIG_PROTECT'ed files. Those that are
96# protected should not be overwritten until the variable is changed.
97# Autodiscard is option "-9" followed by the "YES" confirmation.
98printf '%s\nYES\n' -9 | sudo etc-update
99
David Jamesd899f8d2011-08-17 05:22:52 -0700100# If the user still has old perl modules installed, update them.
101PERL_VERSIONS=$(find /usr/lib*/perl5/vendor_perl/ -maxdepth 1 -mindepth 1 \
102 -type d -printf '%P\n' | sort -u | wc -w)
103if [ "$PERL_VERSIONS" -gt 1 ] ; then
Mike Frysinger43a7f692012-02-28 16:20:47 -0500104 sudo perl-cleaner --all -- --quiet
David Jamesd899f8d2011-08-17 05:22:52 -0700105fi