mirror of
https://github.com/flatcar/scripts.git
synced 2025-09-24 23:21:17 +02:00
build_image: incorporate mod_image_for_test
Incorporate mod_image_for_test.sh into build_image to simplify the user interface to the build system and to remove the redundant setup that occurs in both scripts. We're not porting the --force_copy, --inplace, or --yes flags, because the user is no longer passing in an existing image as input. BUG=chromium-os:12899 TEST=Run build_image w/ various flag combos, inspect output dir, and boot resulting images. Flags tested include: none, --test, --factory, --factory_install, --factory_install --test. Change-Id: Ie3b504b3c58fbe19f1ce351985e5f1043353766a Reviewed-on: http://gerrit.chromium.org/gerrit/2421 Tested-by: Vince Laviano <vlaviano@chromium.org> Reviewed-by: Anush Elangovan <anush@chromium.org>
This commit is contained in:
parent
0779f528f5
commit
6aebf31a00
170
build_image
170
build_image
@ -67,6 +67,12 @@ DEFINE_boolean statefuldev ${FLAGS_TRUE} \
|
|||||||
"Install development packages on stateful partition rather than the rootfs"
|
"Install development packages on stateful partition rather than the rootfs"
|
||||||
DEFINE_string to "" \
|
DEFINE_string to "" \
|
||||||
"The target image file or device"
|
"The target image file or device"
|
||||||
|
DEFINE_boolean test ${FLAGS_FALSE} \
|
||||||
|
"Modify the imnage for automated testing"
|
||||||
|
DEFINE_boolean factory ${FLAGS_FALSE} \
|
||||||
|
"Modify the image for manufacturing testing"
|
||||||
|
DEFINE_string qualdb "" \
|
||||||
|
"Location of qualified component file"
|
||||||
DEFINE_boolean factory_install ${FLAGS_FALSE} \
|
DEFINE_boolean factory_install ${FLAGS_FALSE} \
|
||||||
"Build a smaller image to overlay the factory install shim on; this argument \
|
"Build a smaller image to overlay the factory install shim on; this argument \
|
||||||
is also required in image_to_usb."
|
is also required in image_to_usb."
|
||||||
@ -141,16 +147,18 @@ check_blacklist() {
|
|||||||
|
|
||||||
check_blacklist
|
check_blacklist
|
||||||
|
|
||||||
# TODO(vlaviano): Validate command line flags. Check for conflicting flags and
|
# Look at flags to determine which image types we should build
|
||||||
# reconcile them if possible. Exit with an error message otherwise.
|
|
||||||
|
|
||||||
export INSTALL_MASK=""
|
|
||||||
if [ ${FLAGS_installmask} -eq ${FLAGS_TRUE} ] ; then
|
|
||||||
INSTALL_MASK="${DEFAULT_INSTALL_MASK}"
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Reduce the size of factory install shim.
|
|
||||||
if [ ${FLAGS_factory_install} -eq ${FLAGS_TRUE} ]; then
|
if [ ${FLAGS_factory_install} -eq ${FLAGS_TRUE} ]; then
|
||||||
|
if [ ${FLAGS_factory} -eq ${FLAGS_TRUE} ]; then
|
||||||
|
info "Incompatible flags: --factory and --factory_install cannot both be \
|
||||||
|
set to True. Resetting --factory to False."
|
||||||
|
FLAGS_factory=${FLAGS_FALSE}
|
||||||
|
fi
|
||||||
|
if [ ${FLAGS_test} -eq ${FLAGS_TRUE} ]; then
|
||||||
|
info "Incompatible flags: --test and --factory_install cannot both be \
|
||||||
|
set to True. Resetting --test to False."
|
||||||
|
FLAGS_test=${FLAGS_FALSE}
|
||||||
|
fi
|
||||||
# Disable --withdev flag when --factory_install is set to True. Otherwise, the
|
# Disable --withdev flag when --factory_install is set to True. Otherwise, the
|
||||||
# dev image produced will be based on install shim, rather than a pristine
|
# dev image produced will be based on install shim, rather than a pristine
|
||||||
# image
|
# image
|
||||||
@ -159,7 +167,29 @@ if [ ${FLAGS_factory_install} -eq ${FLAGS_TRUE} ]; then
|
|||||||
set to True. Resetting --withdev to False."
|
set to True. Resetting --withdev to False."
|
||||||
FLAGS_withdev=${FLAGS_FALSE}
|
FLAGS_withdev=${FLAGS_FALSE}
|
||||||
fi
|
fi
|
||||||
|
fi
|
||||||
|
if [ ${FLAGS_factory} -eq ${FLAGS_TRUE} ]; then
|
||||||
|
if [ ${FLAGS_test} -eq ${FLAGS_FALSE} ]; then
|
||||||
|
info "Incompatible flags: --factory implies --test. Resetting --test to \
|
||||||
|
True."
|
||||||
|
FLAGS_test=${FLAGS_TRUE}
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
if [ ${FLAGS_test} -eq ${FLAGS_TRUE} ]; then
|
||||||
|
if [ ${FLAGS_withdev} -eq ${FLAGS_FALSE} ]; then
|
||||||
|
info "Incompatible flags: --test implies --withdev. Resetting --withdev \
|
||||||
|
to True."
|
||||||
|
FLAGS_withdev=${FLAGS_TRUE}
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
export INSTALL_MASK=""
|
||||||
|
if [ ${FLAGS_installmask} -eq ${FLAGS_TRUE} ] ; then
|
||||||
|
INSTALL_MASK="${DEFAULT_INSTALL_MASK}"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Reduce the size of factory install shim.
|
||||||
|
if [ ${FLAGS_factory_install} -eq ${FLAGS_TRUE} ]; then
|
||||||
# TODO: Build a separated ebuild for the install shim to reduce size.
|
# TODO: Build a separated ebuild for the install shim to reduce size.
|
||||||
INSTALL_MASK="${INSTALL_MASK} ${FACTORY_INSTALL_MASK}"
|
INSTALL_MASK="${INSTALL_MASK} ${FACTORY_INSTALL_MASK}"
|
||||||
|
|
||||||
@ -256,6 +286,7 @@ OUTSIDE_OUTPUT_DIR="../build/images/${FLAGS_board}/${IMAGE_SUBDIR}"
|
|||||||
|
|
||||||
# If we are creating a developer image, also create a pristine image with a
|
# If we are creating a developer image, also create a pristine image with a
|
||||||
# different name.
|
# different name.
|
||||||
|
# TODO(vlaviano): fix all image names to match those in uploaded archive
|
||||||
DEVELOPER_IMAGE_NAME=
|
DEVELOPER_IMAGE_NAME=
|
||||||
PRISTINE_IMAGE_NAME=chromiumos_image.bin
|
PRISTINE_IMAGE_NAME=chromiumos_image.bin
|
||||||
if [ ${FLAGS_withdev} -eq ${FLAGS_TRUE} ]; then
|
if [ ${FLAGS_withdev} -eq ${FLAGS_TRUE} ]; then
|
||||||
@ -268,6 +299,8 @@ fi
|
|||||||
|
|
||||||
PRISTINE_IMG="${OUTPUT_DIR}/${PRISTINE_IMAGE_NAME}"
|
PRISTINE_IMG="${OUTPUT_DIR}/${PRISTINE_IMAGE_NAME}"
|
||||||
DEVELOPER_IMG="${OUTPUT_DIR}/${DEVELOPER_IMAGE_NAME}"
|
DEVELOPER_IMG="${OUTPUT_DIR}/${DEVELOPER_IMAGE_NAME}"
|
||||||
|
TEST_IMG="${OUTPUT_DIR}/${CHROMEOS_TEST_IMAGE_NAME}"
|
||||||
|
FACTORY_IMG="${OUTPUT_DIR}/${CHROMEOS_FACTORY_TEST_IMAGE_NAME}"
|
||||||
|
|
||||||
ROOT_FS_IMG="${OUTPUT_DIR}/rootfs.image"
|
ROOT_FS_IMG="${OUTPUT_DIR}/rootfs.image"
|
||||||
ROOT_FS_DIR="${OUTPUT_DIR}/rootfs"
|
ROOT_FS_DIR="${OUTPUT_DIR}/rootfs"
|
||||||
@ -727,6 +760,112 @@ generate_au_zip () {
|
|||||||
$lgenerateauzip $largs
|
$lgenerateauzip $largs
|
||||||
}
|
}
|
||||||
|
|
||||||
|
mod_image_for_test_cleanup() {
|
||||||
|
"${SCRIPTS_DIR}/mount_gpt_image.sh" -u -r "${ROOT_FS_DIR}" \
|
||||||
|
-s "${STATEFUL_FS_DIR}"
|
||||||
|
}
|
||||||
|
|
||||||
|
# Emerges chromeos-test onto the image.
|
||||||
|
emerge_chromeos_test() {
|
||||||
|
# Determine the root dir for test packages.
|
||||||
|
local root_dev_dir="${ROOT_FS_DIR}/usr/local"
|
||||||
|
|
||||||
|
emerge_to_image --root="${root_dev_dir}" chromeos-test
|
||||||
|
}
|
||||||
|
|
||||||
|
install_autotest_for_factory() {
|
||||||
|
local autotest_src="${FLAGS_build_root}/${FLAGS_board}/usr/local/autotest"
|
||||||
|
local stateful_root="${ROOT_FS_DIR}/usr/local"
|
||||||
|
local autotest_client="${stateful_root}/autotest"
|
||||||
|
|
||||||
|
echo "Install autotest into stateful partition from ${autotest_src}"
|
||||||
|
|
||||||
|
sudo mkdir -p "${autotest_client}"
|
||||||
|
|
||||||
|
# Remove excess files from stateful partition.
|
||||||
|
sudo rm -rf "${autotest_client}/"*
|
||||||
|
sudo rm -rf "${stateful_root}/autotest-pkgs"
|
||||||
|
sudo rm -rf "${stateful_root}/lib/icedtea6"
|
||||||
|
|
||||||
|
sudo rsync --delete --delete-excluded -auv \
|
||||||
|
--exclude=deps/realtimecomm_playground \
|
||||||
|
--exclude=tests/ltp \
|
||||||
|
--exclude=site_tests/graphics_O3DSelenium \
|
||||||
|
--exclude=site_tests/realtimecomm_GTalk\* \
|
||||||
|
--exclude=site_tests/platform_StackProtector \
|
||||||
|
--exclude=deps/chrome_test \
|
||||||
|
--exclude=site_tests/desktopui_BrowserTest \
|
||||||
|
--exclude=site_tests/desktopui_PageCyclerTests \
|
||||||
|
--exclude=site_tests/desktopui_UITest \
|
||||||
|
--exclude=.svn \
|
||||||
|
"${autotest_src}/client/"* "${autotest_client}"
|
||||||
|
|
||||||
|
sudo chmod 755 "${autotest_client}"
|
||||||
|
sudo chown -R 1000:1000 "${autotest_client}"
|
||||||
|
}
|
||||||
|
|
||||||
|
# convert a dev image into a test or factory test image
|
||||||
|
mod_image_for_test () {
|
||||||
|
local image_to_mod=$1
|
||||||
|
|
||||||
|
# Copy the image to a test location before modifying it
|
||||||
|
local test_pathname="${TEST_IMG}"
|
||||||
|
local typename="test"
|
||||||
|
if [ ${FLAGS_factory} -eq ${FLAGS_TRUE} ]; then
|
||||||
|
test_pathname="${FACTORY_IMG}"
|
||||||
|
typename="factory"
|
||||||
|
fi
|
||||||
|
echo "Creating ${typename} image from original..."
|
||||||
|
${COMMON_PV_CAT} ${image_to_mod} > ${test_pathname} ||
|
||||||
|
die "Cannot copy ${image_to_mod} to ${typename} image"
|
||||||
|
# Abort early if we can't find the image
|
||||||
|
if [ ! -f ${test_pathname} ] ; then
|
||||||
|
die "No image found at ${test_pathname} to modify"
|
||||||
|
fi
|
||||||
|
echo "Modifying image ${test_pathname} for ${typename}..."
|
||||||
|
|
||||||
|
local image_dir=$(dirname ${test_pathname})
|
||||||
|
local image_name=$(basename ${test_pathname})
|
||||||
|
|
||||||
|
trap mod_image_for_test_cleanup EXIT
|
||||||
|
|
||||||
|
# Mounts gpt image and sets up var, /usr/local and symlinks.
|
||||||
|
"${SCRIPTS_DIR}/mount_gpt_image.sh" -i "${image_name}" -f "${image_dir}" \
|
||||||
|
-r "${ROOT_FS_DIR}" -s "${STATEFUL_FS_DIR}"
|
||||||
|
|
||||||
|
emerge_chromeos_test
|
||||||
|
|
||||||
|
local mod_test_script="${SCRIPTS_DIR}/mod_for_test_scripts/test_setup.sh"
|
||||||
|
# Run test setup script to modify the image
|
||||||
|
sudo -E GCLIENT_ROOT="${GCLIENT_ROOT}" ROOT_FS_DIR="${ROOT_FS_DIR}" \
|
||||||
|
STATEFUL_DIR="${STATEFUL_FS_DIR}" ARCH="${ARCH}" "${mod_test_script}"
|
||||||
|
|
||||||
|
if [ ${FLAGS_factory} -eq ${FLAGS_TRUE} ]; then
|
||||||
|
emerge_to_image --root="${ROOT_FS_DIR}" factorytest-init
|
||||||
|
|
||||||
|
install_autotest_for_factory
|
||||||
|
|
||||||
|
local mod_factory_script
|
||||||
|
mod_factory_script="${SCRIPTS_DIR}/mod_for_factory_scripts/factory_setup.sh"
|
||||||
|
# Run factory setup script to modify the image
|
||||||
|
sudo -E GCLIENT_ROOT="${GCLIENT_ROOT}" ROOT_FS_DIR="${ROOT_FS_DIR}" \
|
||||||
|
QUALDB="${FLAGS_qualdb}" BOARD="${FLAGS_board}" "${mod_factory_script}"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Re-run ldconfig to fix /etc/ldconfig.so.cache.
|
||||||
|
sudo ldconfig -r "${ROOT_FS_DIR}"
|
||||||
|
|
||||||
|
mod_image_for_test_cleanup
|
||||||
|
|
||||||
|
# Now make it bootable with the flags from build_image
|
||||||
|
"${SCRIPTS_DIR}/bin/cros_make_image_bootable" "${image_dir}" "${image_name}" \
|
||||||
|
${crosbug12352_flag}
|
||||||
|
|
||||||
|
print_time_elapsed
|
||||||
|
|
||||||
|
trap - EXIT
|
||||||
|
}
|
||||||
|
|
||||||
# Create the output directory.
|
# Create the output directory.
|
||||||
mkdir -p "${OUTPUT_DIR}"
|
mkdir -p "${OUTPUT_DIR}"
|
||||||
mkdir -p "${ROOT_FS_DIR}"
|
mkdir -p "${ROOT_FS_DIR}"
|
||||||
@ -734,7 +873,8 @@ mkdir -p "${STATEFUL_FS_DIR}"
|
|||||||
mkdir -p "${ESP_FS_DIR}"
|
mkdir -p "${ESP_FS_DIR}"
|
||||||
|
|
||||||
# Preserve old images by copying them forward for --preserve.
|
# Preserve old images by copying them forward for --preserve.
|
||||||
if [[ $FLAGS_preserve -eq ${FLAGS_TRUE} ]] ; then
|
# TODO(vlaviano): Do we want --preserve to copy other image types also?
|
||||||
|
if [[ ${FLAGS_preserve} -eq ${FLAGS_TRUE} ]] ; then
|
||||||
if [[ -f ${PREVIOUS_DIR}/${PRISTINE_IMAGE_NAME} ]] ; then
|
if [[ -f ${PREVIOUS_DIR}/${PRISTINE_IMAGE_NAME} ]] ; then
|
||||||
# Copy forward pristine image, and associated files
|
# Copy forward pristine image, and associated files
|
||||||
cp ${PREVIOUS_DIR}/*.sh ${PREVIOUS_DIR}/config.txt ${OUTPUT_DIR}
|
cp ${PREVIOUS_DIR}/*.sh ${PREVIOUS_DIR}/config.txt ${OUTPUT_DIR}
|
||||||
@ -800,6 +940,11 @@ if [ ${FLAGS_withdev} -eq ${FLAGS_TRUE} ] ; then
|
|||||||
${crosbug12352_flag}
|
${crosbug12352_flag}
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
# Create a test or factory test image if desired
|
||||||
|
if [ ${FLAGS_test} -eq ${FLAGS_TRUE} ] ; then
|
||||||
|
mod_image_for_test ${DEVELOPER_IMG}
|
||||||
|
fi
|
||||||
|
|
||||||
# Clean up temporary files.
|
# Clean up temporary files.
|
||||||
rm -f "${ROOT_FS_IMG}" "${STATEFUL_FS_IMG}" "${OUTPUT_DIR}/vmlinuz.image" \
|
rm -f "${ROOT_FS_IMG}" "${STATEFUL_FS_IMG}" "${OUTPUT_DIR}/vmlinuz.image" \
|
||||||
"${ESP_FS_IMG}" "${OUTPUT_DIR}/vmlinuz_hd.vblock"
|
"${ESP_FS_IMG}" "${OUTPUT_DIR}/vmlinuz_hd.vblock"
|
||||||
@ -816,6 +961,11 @@ echo "Chromium OS image created as ${PRISTINE_IMAGE_NAME}"
|
|||||||
if [ ${FLAGS_withdev} -eq ${FLAGS_TRUE} ]; then
|
if [ ${FLAGS_withdev} -eq ${FLAGS_TRUE} ]; then
|
||||||
echo "Developer image created as ${DEVELOPER_IMAGE_NAME}"
|
echo "Developer image created as ${DEVELOPER_IMAGE_NAME}"
|
||||||
fi
|
fi
|
||||||
|
if [ ${FLAGS_factory} -eq ${FLAGS_TRUE} ]; then
|
||||||
|
echo "Factory test image created as ${CHROMEOS_FACTORY_TEST_IMAGE_NAME}"
|
||||||
|
elif [ ${FLAGS_test} -eq ${FLAGS_TRUE} ]; then
|
||||||
|
echo "Test image created as ${CHROMEOS_TEST_IMAGE_NAME}"
|
||||||
|
fi
|
||||||
|
|
||||||
print_time_elapsed
|
print_time_elapsed
|
||||||
|
|
||||||
|
@ -6,6 +6,19 @@
|
|||||||
|
|
||||||
# Script to modify a keyfob-based chromeos system image for testability.
|
# Script to modify a keyfob-based chromeos system image for testability.
|
||||||
|
|
||||||
|
# =============================================================================
|
||||||
|
# WARNING
|
||||||
|
#
|
||||||
|
# This script is deprecated and will be deleted soon. Its functionality has
|
||||||
|
# been incorporated into build_image (see the --test and --factory flags). See
|
||||||
|
# chromium-os issue 12899 for details.
|
||||||
|
#
|
||||||
|
# Until the deletion happens, if you are changing this file, please also update
|
||||||
|
# the corresponding code in build_image (see the mod_image_for_test function).
|
||||||
|
#
|
||||||
|
# TODO(vlaviano): delete this script.
|
||||||
|
# =============================================================================
|
||||||
|
|
||||||
# --- BEGIN COMMON.SH BOILERPLATE ---
|
# --- BEGIN COMMON.SH BOILERPLATE ---
|
||||||
# Load common CrOS utilities. Inside the chroot this file is installed in
|
# Load common CrOS utilities. Inside the chroot this file is installed in
|
||||||
# /usr/lib/crosutils. Outside the chroot we find it relative to the script's
|
# /usr/lib/crosutils. Outside the chroot we find it relative to the script's
|
||||||
|
Loading…
x
Reference in New Issue
Block a user