blob: bae1873e4aba1648f0fd7c5196523c00c0097fd6 [file] [log] [blame]
# Copyright (c) 2014 The Chromium OS Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
# --board=[board]
# This script builds a factory toolkit, which is a self-extracting shellball,
# and can be installed onto a device running test image.
SCRIPT_ROOT=$(dirname "$(readlink -f "$0")")
. "${SCRIPT_ROOT}/" || exit 1
# Script must be run inside the chroot.
restart_in_chroot_if_needed "$@"
DEFINE_string board "${DEFAULT_BOARD}" \
"The board to build a factory toolkit for."
DEFINE_string output_dir "" "Path to the folder to store the factory toolkit."
DEFINE_string version "" \
"The version tag to be included in the identification string."
cleanup() {
sudo rm -rf "${temp_pack_root}"
main() {
# Parse command line.
FLAGS "$@" || exit 1
eval set -- "${FLAGS_ARGV}"
trap cleanup EXIT
# Must specify a board
if [[ -z "${FLAGS_board}" ]]; then
die "No board specified. Use the --board option."
local default_dir="${CHROOT_TRUNK_DIR}/src/build/images/${FLAGS_board}/latest"
if [[ -n "${FLAGS_output_dir}" ]]; then
local output_dir="${FLAGS_output_dir}"
local output_dir="${default_dir}"
echo "Building into directory ${output_dir}"
if [[ ! -d "${output_dir}" ]]; then
die \
"Output directory '${output_dir}' does not exist." \
"Check the --board or --output_dir options and that the image is built."
cd "${output_dir}"
temp_pack_root="$(mktemp -d toolkit_XXXXXX)"
if [[ ! -d "${temp_pack_root}" ]]; then
die "Failed to create temporary directory."
emerge-${FLAGS_board} --root="${temp_pack_root}" --nodeps --usepkgonly -v \
chromeos-factory chromeos-factory-board autotest-factory-install
sudo USE="static" INSTALL_MASK="/usr/bin/ghost" \
emerge --root="${temp_pack_root}" --nodeps -v chromeos-factory-overlord
# /var/cache is not part of installed files but generated by emerge itself.
# Since chromeos-factory-overlord is emerge with root permission, we need
# to remove this to avoid error.
sudo rm -rf "${temp_pack_root}"/var/cache
local factory_repo="${CHROOT_TRUNK_DIR}/src/platform/factory"
local repo_status_script="${factory_repo}/py/toolkit/"
if [[ -x "${repo_status_script}" ]]; then
"${repo_status_script}" -b "${FLAGS_board}" >"${temp_pack_root}/REPO_STATUS"
# Include 'makeself' in the toolkit
local makeself_path="$(readlink -f $(which makeself))"
local makeself_header_path="$(dirname "${makeself_path}")/"
cp -L "${makeself_path}" "${makeself_header_path}" "${temp_pack_root}"
# Include a VERSION tag in the toolkit
if [[ -n "${FLAGS_version}" ]]; then
local id_str="${FLAGS_board} Factory Toolkit ${FLAGS_version}"
local timestamp="$(date "+%Y-%m-%dT%H:%M:%S")"
local builder="$(whoami)@$(hostname)"
local id_str="${FLAGS_board} Factory Toolkit ${timestamp} ${builder}"
local version_tag="usr/local/factory/TOOLKIT_VERSION"
echo "${id_str}" | sudo_clobber "${temp_pack_root}/${version_tag}"
ln -s "${version_tag}" "${temp_pack_root}/VERSION"
local output_toolkit="${output_dir}/"
"${temp_pack_root}/usr/local/factory/py/toolkit/" \
--pack-into "${output_toolkit}"
main "$@"