flatcar-scripts/mod_image_for_test.sh
Gilad Arnold dd59d7e9a6 image_to_usb.sh: do not require chromiumos_image.bin when --test_image is used.
The recent changes to image_to_usb.sh assumed that chromiumos_image.bin
is always used for generating a test image. This wasn't the case before
these changes were applied, where a preexisting test image would have
sufficed.  This fix eliminates image autodetection entirely when
--test_image it used and falls back to the old behavior: if a test image
exists, it will use it; otherwise, it will generate it from the image
specified by --image_name, or from the default chromiumos_image.bin.

This is not to say that I like this behavior: it is subtle, may lead to
errors (e.g. using a stale test image whereas the user assumes a new one
should be generated), and inconsistent with other behaviors (e.g.
installing a recovery image, where no image generation takes place at
all).  I believe that long term we should eliminate the generation of
test images from image_to_usb.sh and have users invoke the necessary
scripts (like mod_image_for_test.sh) explicitly.

BUG=chromium-os:26239
TEST=Ran script with different combinations of --test_image,
--image_name and image files present.

Change-Id: Ib2491a7e45e23eb51ced6ef31d3f129ec7863a25
Reviewed-on: https://gerrit.chromium.org/gerrit/15764
Reviewed-by: Richard Barnette <jrbarnette@chromium.org>
Commit-Ready: Gilad Arnold <garnold@chromium.org>
Tested-by: Gilad Arnold <garnold@chromium.org>
2012-02-14 13:08:17 -08:00

110 lines
3.6 KiB
Bash
Executable File

#!/bin/bash
# Copyright (c) 2011 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.
# Script to modify a keyfob-based chromeos system image for testability.
#
# N.B. This script duplicates function provided by
# "build_image --test"; that command option is the preferred
# command line interface for creating a test image. Please don't
# add features (options, command line syntax, whatever) to this
# script, unless it's necessary to maintain compatibility with
# "build_image".
#
# TODO(vlaviano): delete this script.
SCRIPT_ROOT=$(dirname "$0")
. "${SCRIPT_ROOT}/build_library/build_common.sh" || exit 1
DEFINE_string board "$DEFAULT_BOARD" "Board for which the image was built" b
DEFINE_boolean factory $FLAGS_FALSE \
"Modify the image for manufacturing testing" f
DEFINE_string image "" "Location of the rootfs raw image file" i
DEFINE_integer jobs -1 \
"How many packages to build in parallel at maximum." j
DEFINE_boolean yes $FLAGS_FALSE "Answer yes to all prompts" y
DEFINE_string build_root "/build" \
"The root location for board sysroots."
DEFINE_boolean fast $DEFAULT_FAST "Call many emerges in parallel"
DEFINE_boolean inplace $FLAGS_TRUE \
"Modify/overwrite the image $CHROMEOS_IMAGE_NAME in place. \
Otherwise the image will be copied to $CHROMEOS_TEST_IMAGE_NAME \
(or $CHROMEOS_FACTORY_TEST_IMAGE_NAME for --factory) if needed, and \
modified there"
DEFINE_boolean force_copy $FLAGS_FALSE \
"Always rebuild test image if --noinplace"
DEFINE_boolean standard_backdoor ${FLAGS_TRUE} \
"Install standard backdoor credentials for testing"
# Parse command line
FLAGS "$@" || exit 1
eval set -- "$FLAGS_ARGV"
# Only now can we die on error. shflags functions leak non-zero error codes,
# so will die prematurely if 'set -e' is specified before now.
set -e
. "${BUILD_LIBRARY_DIR}/board_options.sh" || exit 1
. "${BUILD_LIBRARY_DIR}/mount_gpt_util.sh" || exit 1
. "${BUILD_LIBRARY_DIR}/test_image_util.sh" || exit 1
# No image was provided. Use the standard latest image
if [ -z "$FLAGS_image" ]; then
IMAGES_DIR="$($SCRIPT_ROOT/get_latest_image.sh --board=$BOARD)"
FLAGS_image="$IMAGES_DIR/$CHROMEOS_IMAGE_NAME"
fi
# Turn path into an absolute path.
FLAGS_image=$(eval readlink -f "$FLAGS_image")
# Setting for build scripts.
BUILD_DIR="$(dirname "$FLAGS_image")"
ROOT_FS_DIR="${BUILD_DIR}/rootfs"
STATEFUL_FS_DIR="${BUILD_DIR}/stateful_partition"
# Copy the image to a test location if required
if [ $FLAGS_inplace -eq $FLAGS_FALSE ]; then
if [ $FLAGS_factory -eq $FLAGS_TRUE ]; then
TEST_PATHNAME="$BUILD_DIR/$CHROMEOS_FACTORY_TEST_IMAGE_NAME"
else
TEST_PATHNAME="$BUILD_DIR/$CHROMEOS_TEST_IMAGE_NAME"
fi
if [ ! -f "$TEST_PATHNAME" -o $FLAGS_force_copy -eq $FLAGS_TRUE ]; then
copy_image $(basename "$FLAGS_image") $(basename "$TEST_PATHNAME")
FLAGS_image="$TEST_PATHNAME"
else
echo "Using cached $(basename "${TEST_PATHNAME}")"
exit
fi
# No need to confirm now, since we are not overwriting the main image
FLAGS_yes=$FLAGS_TRUE
fi
# Abort early if we can't find the image
if [ ! -f "$FLAGS_image" ]; then
echo "No image found at $FLAGS_image"
exit 1
fi
# Make sure this is really what the user wants, before nuking the device
if [ $FLAGS_yes -ne $FLAGS_TRUE ]; then
read -p "Modifying image $FLAGS_image for test; are you sure (y/N)? " SURE
SURE="${SURE:0:1}" # Get just the first character
if [ "$SURE" != "y" ]; then
echo "Ok, better safe than sorry."
exit 1
fi
else
echo "Modifying image $FLAGS_image for test..."
fi
mod_image_for_test $(basename "$FLAGS_image")
print_time_elapsed