mirror of
https://github.com/flatcar/scripts.git
synced 2025-09-24 23:21:17 +02:00
Factored out the code to copy an image and modify it for test
into mod_image_for_test.sh rather than slightly different versions of the same in image_to_usb.sh and image_to_vm.sh Added a function to get a test image into common.sh Added --inplace option to mod_image_for_test, which is the default, and preserves the original behaviour. But using --noinplace it will now do the copy for you. Found that chromiumos_image.bin appears throughout the scripts, so added it and the test variant to common.sh BUG=chromiumos-10126 TEST=run mod_image_for_test.sh with and without --noinplace run image_to_usb.sh and image_to_vm.sh with both options test on Seaboard that correct image is provided Really we should have automated testing for these scripts Change-Id: I5cfa91792c7fded35e7f4ca8f8f27c6b270817fb Review URL: http://codereview.chromium.org/5271010
This commit is contained in:
parent
b5ed3128ee
commit
4fc5227fac
57
common.sh
57
common.sh
@ -14,6 +14,14 @@
|
|||||||
# and dpkg-buildpackage
|
# and dpkg-buildpackage
|
||||||
NUM_JOBS=`grep -c "^processor" /proc/cpuinfo`
|
NUM_JOBS=`grep -c "^processor" /proc/cpuinfo`
|
||||||
|
|
||||||
|
# True if we have the 'pv' utility - also set up COMMON_PV_CAT for convenience
|
||||||
|
COMMON_PV_OK=1
|
||||||
|
COMMON_PV_CAT=pv
|
||||||
|
pv -V >/dev/null 2>&1 || COMMON_PV_OK=0
|
||||||
|
if [ $COMMON_PV_OK -eq 0 ]; then
|
||||||
|
COMMON_PV_CAT=cat
|
||||||
|
fi
|
||||||
|
|
||||||
# Store location of the calling script.
|
# Store location of the calling script.
|
||||||
TOP_SCRIPT_DIR="${TOP_SCRIPT_DIR:-$(dirname $0)}"
|
TOP_SCRIPT_DIR="${TOP_SCRIPT_DIR:-$(dirname $0)}"
|
||||||
|
|
||||||
@ -124,6 +132,12 @@ else
|
|||||||
INSIDE_CHROOT=0
|
INSIDE_CHROOT=0
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
# Standard filenames
|
||||||
|
CHROMEOS_IMAGE_NAME="chromiumos_image.bin"
|
||||||
|
CHROMEOS_TEST_IMAGE_NAME="chromiumos_test_image.bin"
|
||||||
|
|
||||||
|
|
||||||
# Directory locations inside the dev chroot
|
# Directory locations inside the dev chroot
|
||||||
CHROOT_TRUNK_DIR="/home/$USER/trunk"
|
CHROOT_TRUNK_DIR="/home/$USER/trunk"
|
||||||
|
|
||||||
@ -527,3 +541,46 @@ chroot_hacks_from_outside() {
|
|||||||
sudo bash -c "echo root ALL=\(ALL\) ALL >> \"${chroot_dir}/etc/sudoers\""
|
sudo bash -c "echo root ALL=\(ALL\) ALL >> \"${chroot_dir}/etc/sudoers\""
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# This function converts a chromiumos image into a test image, either
|
||||||
|
# in place or by copying to a new test image filename first. It honors
|
||||||
|
# the following flags (see mod_image_for_test.sh)
|
||||||
|
#
|
||||||
|
# --factory
|
||||||
|
# --factory_install
|
||||||
|
# --force_copy
|
||||||
|
#
|
||||||
|
# On entry, pass the directory containing the image, and the image filename
|
||||||
|
# On exit, it puts the pathname of the resulting test image into
|
||||||
|
# CHROMEOS_RETURN_VAL
|
||||||
|
# (yes this is ugly, but perhaps less ugly than the alternatives)
|
||||||
|
#
|
||||||
|
# Usage:
|
||||||
|
# SRC_IMAGE=$(prepare_test_image "directory" "imagefile")
|
||||||
|
prepare_test_image() {
|
||||||
|
# If we're asked to modify the image for test, then let's make a copy and
|
||||||
|
# modify that instead.
|
||||||
|
# Check for manufacturing image.
|
||||||
|
local args
|
||||||
|
|
||||||
|
if [ ${FLAGS_factory} -eq ${FLAGS_TRUE} ]; then
|
||||||
|
args="--factory"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Check for install shim.
|
||||||
|
if [ ${FLAGS_factory_install} -eq ${FLAGS_TRUE} ]; then
|
||||||
|
args="--factory_install"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Check for forcing copy of image
|
||||||
|
if [ ${FLAGS_force_copy} -eq ${FLAGS_TRUE} ]; then
|
||||||
|
args="${args} --force_copy"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Modify the image for test, creating a new test image
|
||||||
|
"${SCRIPTS_DIR}/mod_image_for_test.sh" --board=${FLAGS_board} \
|
||||||
|
--image="$1/$2" --noinplace ${args}
|
||||||
|
|
||||||
|
# From now on we use the just-created test image
|
||||||
|
CHROMEOS_RETURN_VAL="$1/${CHROMEOS_TEST_IMAGE_NAME}"
|
||||||
|
}
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
# Copyright (c) 2009 The Chromium OS Authors. All rights reserved.
|
# Copyright (c) 2010 The Chromium OS Authors. All rights reserved.
|
||||||
# Use of this source code is governed by a BSD-style license that can be
|
# Use of this source code is governed by a BSD-style license that can be
|
||||||
# found in the LICENSE file.
|
# found in the LICENSE file.
|
||||||
|
|
||||||
@ -18,7 +18,7 @@ get_default_board
|
|||||||
# Flags
|
# Flags
|
||||||
DEFINE_string board "${DEFAULT_BOARD}" "Board for which the image was built"
|
DEFINE_string board "${DEFAULT_BOARD}" "Board for which the image was built"
|
||||||
DEFINE_string from "" \
|
DEFINE_string from "" \
|
||||||
"Directory containing chromiumos_image.bin"
|
"Directory containing ${CHROMEOS_IMAGE_NAME}"
|
||||||
DEFINE_string to "/dev/sdX" "${DEFAULT_TO_HELP}"
|
DEFINE_string to "/dev/sdX" "${DEFAULT_TO_HELP}"
|
||||||
DEFINE_boolean yes ${FLAGS_FALSE} "Answer yes to all prompts" "y"
|
DEFINE_boolean yes ${FLAGS_FALSE} "Answer yes to all prompts" "y"
|
||||||
DEFINE_boolean force_copy ${FLAGS_FALSE} "Always rebuild test image"
|
DEFINE_boolean force_copy ${FLAGS_FALSE} "Always rebuild test image"
|
||||||
@ -31,8 +31,8 @@ DEFINE_boolean factory ${FLAGS_FALSE} \
|
|||||||
DEFINE_boolean copy_kernel ${FLAGS_FALSE} \
|
DEFINE_boolean copy_kernel ${FLAGS_FALSE} \
|
||||||
"Copy the kernel to the fourth partition."
|
"Copy the kernel to the fourth partition."
|
||||||
DEFINE_boolean test_image "${FLAGS_FALSE}" \
|
DEFINE_boolean test_image "${FLAGS_FALSE}" \
|
||||||
"Copies normal image to chromiumos_test_image.bin, modifies it for test."
|
"Copies normal image to ${CHROMEOS_TEST_IMAGE_NAME}, modifies it for test."
|
||||||
DEFINE_string image_name "chromiumos_image.bin" \
|
DEFINE_string image_name "${CHROMEOS_IMAGE_NAME}" \
|
||||||
"Base name of the image" i
|
"Base name of the image" i
|
||||||
DEFINE_string build_root "/build" \
|
DEFINE_string build_root "/build" \
|
||||||
"The root location for board sysroots."
|
"The root location for board sysroots."
|
||||||
@ -81,6 +81,8 @@ fi
|
|||||||
# We have a board name but no image set. Use image at default location
|
# We have a board name but no image set. Use image at default location
|
||||||
if [ -z "${FLAGS_from}" ]; then
|
if [ -z "${FLAGS_from}" ]; then
|
||||||
IMAGES_DIR="${DEFAULT_BUILD_ROOT}/images/${FLAGS_board}"
|
IMAGES_DIR="${DEFAULT_BUILD_ROOT}/images/${FLAGS_board}"
|
||||||
|
|
||||||
|
# Get latest image directory
|
||||||
FLAGS_from="${IMAGES_DIR}/$(ls -t ${IMAGES_DIR} 2>&-| head -1)"
|
FLAGS_from="${IMAGES_DIR}/$(ls -t ${IMAGES_DIR} 2>&-| head -1)"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
@ -131,9 +133,6 @@ if [ -b "${FLAGS_to}" ]; then
|
|||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Use this image as the source image to copy
|
|
||||||
SRC_IMAGE="${FLAGS_from}/${FLAGS_image_name}"
|
|
||||||
|
|
||||||
STATEFUL_DIR="${FLAGS_from}/stateful_partition"
|
STATEFUL_DIR="${FLAGS_from}/stateful_partition"
|
||||||
mkdir -p "${STATEFUL_DIR}"
|
mkdir -p "${STATEFUL_DIR}"
|
||||||
|
|
||||||
@ -147,41 +146,18 @@ function do_cleanup {
|
|||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
# If we're asked to modify the image for test, then let's make a copy and
|
|
||||||
# modify that instead.
|
|
||||||
if [ ${FLAGS_test_image} -eq ${FLAGS_TRUE} ] ; then
|
if [ ${FLAGS_test_image} -eq ${FLAGS_TRUE} ] ; then
|
||||||
if [ ! -f "${FLAGS_from}/chromiumos_test_image.bin" ] || \
|
# Make a test image - this returns the test filename in CHROMEOS_RETURN_VAL
|
||||||
[ ${FLAGS_force_copy} -eq ${FLAGS_TRUE} ] ; then
|
prepare_test_image "${FLAGS_from}" "${FLAGS_image_name}"
|
||||||
# Copy it.
|
SRC_IMAGE="${CHROMEOS_RETURN_VAL}"
|
||||||
echo "Creating test image from original..."
|
|
||||||
cp -f "${SRC_IMAGE}" "${FLAGS_from}/chromiumos_test_image.bin"
|
|
||||||
|
|
||||||
# Check for manufacturing image.
|
# No need to check with the user, as we are preserving the base image
|
||||||
if [ ${FLAGS_factory} -eq ${FLAGS_TRUE} ] ; then
|
FLAGS_yes="${FLAGS_TRUE}"
|
||||||
EXTRA_ARGS="--factory"
|
else
|
||||||
fi
|
# Use the standard image
|
||||||
|
SRC_IMAGE="${FLAGS_from}/${FLAGS_image_name}"
|
||||||
# Check for instqall shim.
|
|
||||||
if [ ${FLAGS_factory_install} -eq ${FLAGS_TRUE} ] ; then
|
|
||||||
EXTRA_ARGS="--factory_install"
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Modify it. Pass --yes so that mod_image_for_test.sh won't ask us if we
|
|
||||||
# really want to modify the image; the user gave their assent already with
|
|
||||||
# --test-image and the original image is going to be preserved.
|
|
||||||
"${SCRIPTS_DIR}/mod_image_for_test.sh" --image \
|
|
||||||
"${FLAGS_from}/chromiumos_test_image.bin" --board=${FLAGS_board} \
|
|
||||||
${EXTRA_ARGS} --yes
|
|
||||||
echo "Done with mod_image_for_test."
|
|
||||||
else
|
|
||||||
echo "Using cached test image."
|
|
||||||
fi
|
|
||||||
SRC_IMAGE="${FLAGS_from}/chromiumos_test_image.bin"
|
|
||||||
echo "Source test image is: ${SRC_IMAGE}"
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|
||||||
# Let's do it.
|
# Let's do it.
|
||||||
if [ -b "${FLAGS_to}" ]
|
if [ -b "${FLAGS_to}" ]
|
||||||
then
|
then
|
||||||
@ -235,15 +211,9 @@ then
|
|||||||
sleep 3
|
sleep 3
|
||||||
|
|
||||||
if [ ${FLAGS_install} -ne ${FLAGS_TRUE} ]; then
|
if [ ${FLAGS_install} -ne ${FLAGS_TRUE} ]; then
|
||||||
echo "Copying ${SRC_IMAGE} to ${FLAGS_to}..."
|
echo "Copying with dd ${SRC_IMAGE} to ${FLAGS_to}..."
|
||||||
if type pv >/dev/null 2>&1; then
|
sudo ${COMMON_PV_CAT} "${SRC_IMAGE}" |
|
||||||
# pv displays file size in k=1024 while dd uses k=1000.
|
sudo dd of="${FLAGS_to}" bs=4M oflag=sync status=noxfer
|
||||||
# To prevent confusion, we suppress the summary report from dd.
|
|
||||||
sudo pv -ptreb -B 4m "${SRC_IMAGE}" |
|
|
||||||
sudo dd of="${FLAGS_to}" bs=4M oflag=sync status=noxfer
|
|
||||||
else
|
|
||||||
sudo dd if="${SRC_IMAGE}" of="${FLAGS_to}" bs=4M oflag=sync
|
|
||||||
fi
|
|
||||||
sync
|
sync
|
||||||
else
|
else
|
||||||
if [ ${INSIDE_CHROOT} -ne 1 ]; then
|
if [ ${INSIDE_CHROOT} -ne 1 ]; then
|
||||||
@ -264,7 +234,7 @@ then
|
|||||||
else
|
else
|
||||||
# Output to a file, so just make a copy.
|
# Output to a file, so just make a copy.
|
||||||
echo "Copying ${SRC_IMAGE} to ${FLAGS_to}..."
|
echo "Copying ${SRC_IMAGE} to ${FLAGS_to}..."
|
||||||
cp -f "${SRC_IMAGE}" "${FLAGS_to}"
|
${COMMON_PV_CAT} "${SRC_IMAGE}" >"${FLAGS_to}"
|
||||||
|
|
||||||
echo "Done. To copy to a USB drive, do something like:"
|
echo "Done. To copy to a USB drive, do something like:"
|
||||||
echo " sudo dd if=${FLAGS_to} of=/dev/sdX bs=4M oflag=sync"
|
echo " sudo dd if=${FLAGS_to} of=/dev/sdX bs=4M oflag=sync"
|
||||||
|
@ -10,6 +10,8 @@
|
|||||||
# Load common constants. This should be the first executable line.
|
# Load common constants. This should be the first executable line.
|
||||||
# The path to common.sh should be relative to your script's location.
|
# The path to common.sh should be relative to your script's location.
|
||||||
. "$(dirname "$0")/common.sh"
|
. "$(dirname "$0")/common.sh"
|
||||||
|
|
||||||
|
# Load functions and constants for chromeos-install
|
||||||
. "$(dirname "$0")/chromeos-common.sh"
|
. "$(dirname "$0")/chromeos-common.sh"
|
||||||
. "$(dirname "$0")/lib/cros_vm_constants.sh"
|
. "$(dirname "$0")/lib/cros_vm_constants.sh"
|
||||||
|
|
||||||
@ -40,7 +42,7 @@ DEFINE_string state_image "" \
|
|||||||
DEFINE_integer statefulfs_size 2048 \
|
DEFINE_integer statefulfs_size 2048 \
|
||||||
"Stateful partition size in MBs."
|
"Stateful partition size in MBs."
|
||||||
DEFINE_boolean test_image "${FLAGS_FALSE}" \
|
DEFINE_boolean test_image "${FLAGS_FALSE}" \
|
||||||
"Copies normal image to chromiumos_test_image.bin, modifies it for test."
|
"Copies normal image to ${CHROMEOS_TEST_IMAGE_NAME}, modifies it for test."
|
||||||
DEFINE_string to "" \
|
DEFINE_string to "" \
|
||||||
"Destination folder for VM output file(s)"
|
"Destination folder for VM output file(s)"
|
||||||
DEFINE_string vbox_disk "${DEFAULT_VBOX_DISK}" \
|
DEFINE_string vbox_disk "${DEFAULT_VBOX_DISK}" \
|
||||||
@ -84,39 +86,13 @@ if [ -z "${FLAGS_to}" ] ; then
|
|||||||
FLAGS_to="${FLAGS_from}"
|
FLAGS_to="${FLAGS_from}"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Use this image as the source image to copy
|
|
||||||
SRC_IMAGE="${FLAGS_from}/chromiumos_image.bin"
|
|
||||||
|
|
||||||
# If we're asked to modify the image for test, then let's make a copy and
|
|
||||||
# modify that instead.
|
|
||||||
if [ ${FLAGS_test_image} -eq ${FLAGS_TRUE} ] ; then
|
if [ ${FLAGS_test_image} -eq ${FLAGS_TRUE} ] ; then
|
||||||
if [ ! -f "${FLAGS_from}/chromiumos_test_image.bin" ] || \
|
# Make a test image - this returns the test filename in CHROMEOS_RETURN_VAL
|
||||||
[ ${FLAGS_force_copy} -eq ${FLAGS_TRUE} ] ; then
|
prepare_test_image "${FLAGS_from}" "${CHROMEOS_IMAGE_NAME}"
|
||||||
# Copy it.
|
SRC_IMAGE="${CHROMEOS_RETURN_VAL}"
|
||||||
echo "Creating test image from original..."
|
else
|
||||||
cp -f "${SRC_IMAGE}" "${FLAGS_from}/chromiumos_test_image.bin"
|
# Use the standard image
|
||||||
|
SRC_IMAGE="${FLAGS_from}/${CHROMEOS_IMAGE_NAME}"
|
||||||
# Check for manufacturing image.
|
|
||||||
if [ ${FLAGS_factory} -eq ${FLAGS_TRUE} ] ; then
|
|
||||||
EXTRA_ARGS="--factory"
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Check for install shim.
|
|
||||||
if [ ${FLAGS_factory_install} -eq ${FLAGS_TRUE} ] ; then
|
|
||||||
EXTRA_ARGS="--factory_install"
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Modify it. Pass --yes so that mod_image_for_test.sh won't ask us if we
|
|
||||||
# really want to modify the image; the user gave their assent already with
|
|
||||||
# --test-image and the original image is going to be preserved.
|
|
||||||
"${SCRIPTS_DIR}/mod_image_for_test.sh" --board=${FLAGS_board} --image \
|
|
||||||
"${FLAGS_from}/chromiumos_test_image.bin" ${EXTRA_ARGS} --yes
|
|
||||||
echo "Done with mod_image_for_test."
|
|
||||||
else
|
|
||||||
echo "Using cached test image."
|
|
||||||
fi
|
|
||||||
SRC_IMAGE="${FLAGS_from}/chromiumos_test_image.bin"
|
|
||||||
echo "Source test image is: ${SRC_IMAGE}"
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Memory units are in MBs
|
# Memory units are in MBs
|
||||||
|
@ -33,6 +33,12 @@ DEFINE_boolean yes $FLAGS_FALSE "Answer yes to all prompts" y
|
|||||||
DEFINE_string build_root "/build" \
|
DEFINE_string build_root "/build" \
|
||||||
"The root location for board sysroots."
|
"The root location for board sysroots."
|
||||||
DEFINE_boolean fast ${DEFAULT_FAST} "Call many emerges in parallel"
|
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} \
|
||||||
|
if needed, and modified there"
|
||||||
|
DEFINE_boolean force_copy ${FLAGS_FALSE} \
|
||||||
|
"Always rebuild test image if --noinplace"
|
||||||
|
|
||||||
|
|
||||||
# Parse command line
|
# Parse command line
|
||||||
@ -56,7 +62,7 @@ fi
|
|||||||
# We have a board name but no image set. Use image at default location
|
# We have a board name but no image set. Use image at default location
|
||||||
if [ -z $FLAGS_image ] ; then
|
if [ -z $FLAGS_image ] ; then
|
||||||
IMAGES_DIR="${DEFAULT_BUILD_ROOT}/images/${FLAGS_board}"
|
IMAGES_DIR="${DEFAULT_BUILD_ROOT}/images/${FLAGS_board}"
|
||||||
FILENAME="chromiumos_image.bin"
|
FILENAME="${CHROMEOS_IMAGE_NAME}"
|
||||||
FLAGS_image="${IMAGES_DIR}/$(ls -t $IMAGES_DIR 2>&-| head -1)/${FILENAME}"
|
FLAGS_image="${IMAGES_DIR}/$(ls -t $IMAGES_DIR 2>&-| head -1)/${FILENAME}"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
@ -155,6 +161,25 @@ install_autotest() {
|
|||||||
|
|
||||||
# main process begins here.
|
# main process begins here.
|
||||||
|
|
||||||
|
IMAGE_DIR="$(dirname "${FLAGS_image}")"
|
||||||
|
|
||||||
|
# Copy the image to a test location if required
|
||||||
|
if [ ${FLAGS_inplace} -eq ${FLAGS_FALSE} ]; then
|
||||||
|
TEST_PATHNAME="${IMAGE_DIR}/${CHROMEOS_TEST_IMAGE_NAME}"
|
||||||
|
if [ ! -f "${TEST_PATHNAME}" ] || \
|
||||||
|
[ ${FLAGS_force_copy} -eq ${FLAGS_TRUE} ] ; then
|
||||||
|
echo "Creating test image from original..."
|
||||||
|
${COMMON_PV_CAT} "${FLAGS_image}" >"${TEST_PATHNAME}" \
|
||||||
|
|| die "Cannot copy ${FLAGS_image} to test image"
|
||||||
|
FLAGS_image="${TEST_PATHNAME}"
|
||||||
|
else
|
||||||
|
echo "Using cached test image"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# No need to confirm now, since we are not overwriting the main image
|
||||||
|
FLAGS_yes="$FLAGS_TRUE"
|
||||||
|
fi
|
||||||
|
|
||||||
# Make sure this is really what the user wants, before nuking the device
|
# Make sure this is really what the user wants, before nuking the device
|
||||||
if [ $FLAGS_yes -ne $FLAGS_TRUE ]; then
|
if [ $FLAGS_yes -ne $FLAGS_TRUE ]; then
|
||||||
read -p "Modifying image ${FLAGS_image} for test; are you sure (y/N)? " SURE
|
read -p "Modifying image ${FLAGS_image} for test; are you sure (y/N)? " SURE
|
||||||
|
Loading…
x
Reference in New Issue
Block a user