blob: f522ff0bdc7f6965e61dd4fb471157a7ede97185 [file] [log] [blame]
Zdenek Behand7bfd862011-05-11 23:56:46 +02001#!/bin/bash
2
Matt Tennant0a9d32d2012-07-30 16:51:37 -07003# Copyright (c) 2012 The Chromium OS Authors. All rights reserved.
Zdenek Behand7bfd862011-05-11 23:56:46 +02004# Use of this source code is governed by a BSD-style license that can be
5# found in the LICENSE file.
6
Zdenek Behand7bfd862011-05-11 23:56:46 +02007
David James0b1baf62012-03-15 09:26:23 -07008. "$(dirname "$0")/common.sh" || exit 1
Zdenek Behand7bfd862011-05-11 23:56:46 +02009
10# Script must run inside the chroot
11assert_inside_chroot "$@"
12
Zdenek Behan308e9fd2011-05-12 22:25:47 +020013# Do not run as root
14assert_not_root_user
15
David James855afb72012-03-14 20:04:59 -070016# Developer-visible flags.
Zdenek Behand7bfd862011-05-11 23:56:46 +020017DEFINE_boolean usepkg $FLAGS_TRUE \
18 "Use binary packages to bootstrap."
David James855afb72012-03-14 20:04:59 -070019
20FLAGS_HELP="usage: $(basename $0) [flags]
21Performs an update of the chroot. This script is called as part of
22build_packages, so there is typically no need to call this script directly.
23"
24show_help_if_requested "$@"
25
26# The following options are advanced options, only available to those willing
27# to read the source code. They are not shown in help output, since they are
28# not needed for the typical developer workflow.
Zdenek Behand7bfd862011-05-11 23:56:46 +020029DEFINE_boolean fast ${DEFAULT_FAST} "Call many emerges in parallel"
David James184e3902012-02-23 20:19:28 -080030DEFINE_integer jobs -1 \
31 "How many packages to build in parallel at maximum."
Zdenek Behan2fbd5af2012-03-12 19:38:50 +010032DEFINE_boolean skip_toolchain_update $FLAGS_FALSE \
33 "Don't update the toolchains."
Mike Frysinger7f2ebbd2012-06-01 21:41:27 -040034DEFINE_string toolchain_boards "" \
35 "Extra toolchains to setup for the specified boards."
Zdenek Behand7bfd862011-05-11 23:56:46 +020036
37# Parse command line flags
38FLAGS "$@" || exit 1
39eval set -- "${FLAGS_ARGV}"
40
41# Only now can we die on error. shflags functions leak non-zero error codes,
Brian Harring7f175a52012-03-02 05:37:00 -080042# so will die prematurely if 'switch_to_strict_mode' is specified before now.
43switch_to_strict_mode
Zdenek Behand7bfd862011-05-11 23:56:46 +020044
J. Richard Barnettee80f6de2012-02-24 14:08:34 -080045. ${SCRIPTS_DIR}/sdk_lib/make_conf_util.sh
46
Zdenek Behan308e9fd2011-05-12 22:25:47 +020047# Run version hooks as pre-update
48${SCRIPTS_DIR}/run_chroot_version_hooks
49
J. Richard Barnettee80f6de2012-02-24 14:08:34 -080050# Create /etc/make.conf.host_setup. The file content is regenerated
51# from scratch every update. There are various reasons to do this:
52# + It's cheap, so this is an easy way to guarantee correct content
53# after an upgrade.
54# + Inside make_chroot.sh, we use a temporary version of the file
55# which must be updated before the script completes; that final
56# update happens here.
57# + If the repositories change to add or remove the private
58# overlay, the file may need to be regenerated.
59create_host_setup
David Jamese996baa2011-11-02 16:11:27 -070060
Zdenek Behand7bfd862011-05-11 23:56:46 +020061info "Updating chroot"
62
Chris Masonebbccc242014-02-08 16:23:53 -080063sudo_clear_shadow_locks /
64
Mike Frysinger650bf872012-02-27 11:05:26 -050065EMERGE_FLAGS="-uNv --with-bdeps=y --select"
Zdenek Behan95626202011-05-12 05:54:19 +020066if [ "${FLAGS_usepkg}" -eq "${FLAGS_TRUE}" ]; then
67 EMERGE_FLAGS="${EMERGE_FLAGS} --getbinpkg"
David James0dccff32011-06-09 13:03:47 -070068
69 # Only update toolchain when binpkgs are available. Toolchain rollout
70 # process only takes place when the chromiumos sdk builder finishes
71 # a successful build.
72 EMERGE_FLAGS+=" --useoldpkg-atoms=sys-devel/binutils"
73 EMERGE_FLAGS+=" --useoldpkg-atoms=sys-devel/gcc"
74 EMERGE_FLAGS+=" --useoldpkg-atoms=sys-libs/glibc"
Zdenek Behan95626202011-05-12 05:54:19 +020075fi
Zdenek Behana29fb202011-05-12 05:21:14 +020076
David James184e3902012-02-23 20:19:28 -080077if [[ "${FLAGS_jobs}" -ne -1 ]]; then
78 EMERGE_FLAGS+=" --jobs=${FLAGS_jobs}"
79fi
80
Mike Frysinger0bf12792014-03-22 01:46:42 -040081# Perform an update of all the sdk packages in the chroot.
Zdenek Behand7bfd862011-05-11 23:56:46 +020082EMERGE_CMD="emerge"
David James85dd1402012-06-07 14:55:46 -070083CHROMITE_BIN="${GCLIENT_ROOT}/chromite/bin"
Zdenek Behand7bfd862011-05-11 23:56:46 +020084if [ "${FLAGS_fast}" -eq "${FLAGS_TRUE}" ]; then
David James85dd1402012-06-07 14:55:46 -070085 EMERGE_CMD="${CHROMITE_BIN}/parallel_emerge"
Zdenek Behand7bfd862011-05-11 23:56:46 +020086fi
Zdenek Behan95626202011-05-12 05:54:19 +020087
Zdenek Behan4748e872011-10-11 03:23:11 +020088# In first pass, update portage and toolchains. Lagged updates of both
89# can cause serious issues later.
Zdenek Behan2fbd5af2012-03-12 19:38:50 +010090if [ "${FLAGS_skip_toolchain_update}" -eq "${FLAGS_FALSE}" ]; then
Zdenek Behan42184b42012-05-30 19:42:31 +020091 # First update crossdev.
92 sudo -E ${EMERGE_CMD} ${EMERGE_FLAGS} crossdev
93
Mike Frysinger5e2e2732012-08-22 17:18:36 -040094 TOOLCHAIN_FLAGS=( "--include-boards=${FLAGS_toolchain_boards}" )
Zdenek Behan2fbd5af2012-03-12 19:38:50 +010095 # This should really only be skipped while bootstrapping.
96 if [ "${FLAGS_usepkg}" -eq "${FLAGS_FALSE}" ]; then
Mike Frysinger5e2e2732012-08-22 17:18:36 -040097 TOOLCHAIN_FLAGS+=( --nousepkg )
Zdenek Behan2fbd5af2012-03-12 19:38:50 +010098 fi
99 # Expand the path before sudo, as root doesn't have the same path magic.
Ahmad Sharif89b8a8b2012-09-21 20:12:45 -0700100 sudo -E $(type -p cros_setup_toolchains) "${TOOLCHAIN_FLAGS[@]}"
Zdenek Behan4748e872011-10-11 03:23:11 +0200101fi
102
David James85dd1402012-06-07 14:55:46 -0700103# Build cros_workon packages when they are changed.
104for pkg in $("${CHROMITE_BIN}/cros_list_modified_packages" --host); do
105 EMERGE_FLAGS+=" --reinstall-atoms=${pkg} --usepkg-exclude=${pkg}"
106done
107
Zdenek Behan4748e872011-10-11 03:23:11 +0200108# Second pass, update everything else.
109EMERGE_FLAGS+=" --deep"
Mike Frysinger0bf12792014-03-22 01:46:42 -0400110sudo -E ${EMERGE_CMD} ${EMERGE_FLAGS} virtual/target-sdk world
Zdenek Behand7bfd862011-05-11 23:56:46 +0200111
Zdenek Behan99fb7422011-10-17 01:12:34 +0200112# Automatically discard all CONFIG_PROTECT'ed files. Those that are
113# protected should not be overwritten until the variable is changed.
114# Autodiscard is option "-9" followed by the "YES" confirmation.
115printf '%s\nYES\n' -9 | sudo etc-update
116
David Jamesd899f8d2011-08-17 05:22:52 -0700117# If the user still has old perl modules installed, update them.
118PERL_VERSIONS=$(find /usr/lib*/perl5/vendor_perl/ -maxdepth 1 -mindepth 1 \
119 -type d -printf '%P\n' | sort -u | wc -w)
120if [ "$PERL_VERSIONS" -gt 1 ] ; then
Mike Frysingerae030a32014-10-05 20:54:45 -0400121 # Some perl packages might not exist anymore due to the upgrade, so unmerge
122 # any that no longer exist.
123 info "Looking for outdated perl packages"
124 pkgs=()
125 for pkg in $(qlist -IC dev-perl/ perl-core/ virtual/perl-); do
126 equery which ${pkg} >/dev/null || pkgs+=( "${pkg}" )
127 done
128 if [[ ${#pkgs[@]} -gt 0 ]]; then
129 sudo qmerge -Uyq "${pkgs[@]}"
130 fi
Mike Frysinger27cb1542013-03-27 22:11:44 -0400131 sudo perl-cleaner --all -- --quiet
David Jamesd899f8d2011-08-17 05:22:52 -0700132fi
Matt Tennant0a9d32d2012-07-30 16:51:37 -0700133
134command_completed