Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(3855)

Unified Diff: build_image

Issue 2857020: Added --preserve option and logic. (Closed) Base URL: ssh://git@chromiumos-git/crosutils.git
Patch Set: Resolve conflicts Created 10 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | get_latest_image.sh » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: build_image
diff --git a/build_image b/build_image
index 77ce152c931bf9e79e7c5d35cafb75e6ac3aca5c..2313d3ce5058ce07f212c3656cd49e51bd393404 100755
--- a/build_image
+++ b/build_image
@@ -48,6 +48,9 @@ DEFINE_integer rootfs_partition_size 1024 \
"rootfs parition size in MBs."
DEFINE_integer rootfs_size 720 \
"rootfs filesystem size in MBs."
+DEFINE_boolean preserve ${FLAGS_FALSE} \
+ "Attempt to preserve the previous build image if one can be found (unstable, \
+kernel/firmware not updated)"
# Parse command line.
FLAGS "$@" || exit 1
@@ -94,7 +97,8 @@ if [ "${FLAGS_withdev}" -eq "${FLAGS_TRUE}" ]; then
DEVELOPER_IMAGE_NAME=chromiumos_image.bin
fi
-OUTPUT_IMG=${FLAGS_to:-${OUTPUT_DIR}/${PRISTINE_IMAGE_NAME}}
+PRISTINE_IMG="${OUTPUT_DIR}/${PRISTINE_IMAGE_NAME}"
+DEVELOPER_IMG="${OUTPUT_DIR}/${DEVELOPER_IMAGE_NAME}"
BOARD="${FLAGS_board}"
BOARD_ROOT="${FLAGS_build_root}/${BOARD}"
@@ -168,6 +172,9 @@ if [[ -e "${OUTPUT_DIR}" ]]; then
fi
fi
+# Find previous build, if any...
+PREVIOUS_DIR=$($SCRIPTS_DIR/get_latest_image.sh --board="$BOARD")
+
cleanup_rootfs_loop() {
sudo umount -d "${ROOT_FS_DIR}"
}
@@ -232,7 +239,7 @@ update_dev_packages() {
trap "mount_gpt_cleanup \"${ROOT_FS_DIR}\" \"${STATEFUL_FS_DIR}\"" EXIT
${SCRIPTS_DIR}/mount_gpt_image.sh --from "${OUTPUT_DIR}" \
- --image "$( basename ${image_name} )" -r "${ROOT_FS_DIR}" \
+ --image "${image_name}" -r "${ROOT_FS_DIR}" \
-s "${STATEFUL_FS_DIR}"
# Determine the root dir for developer packages.
@@ -243,7 +250,14 @@ update_dev_packages() {
# Install developer packages described in chromeos-dev.
sudo INSTALL_MASK="${INSTALL_MASK}" ${EMERGE_BOARD_CMD} \
--root="${root_dev_dir}" --root-deps=rdeps \
- --usepkg chromeos-dev ${EMERGE_JOBS}
+ --usepkg -uDNv chromeos-dev ${EMERGE_JOBS}
+
+ if [[ $FLAGS_preserve -eq ${FLAGS_TRUE} ]] ; then
+ # Clean out unused packages
+ sudo INSTALL_MASK="${INSTALL_MASK}" ${EMERGE_BOARD_CMD} \
+ --root="${ROOT_FS_DIR}" --root-deps=rdeps \
+ --usepkg --depclean ${EMERGE_JOBS}
+ fi
# Re-run ldconfig to fix /etc/ldconfig.so.cache.
sudo /sbin/ldconfig -r "${ROOT_FS_DIR}"
@@ -276,10 +290,40 @@ update_dev_packages() {
${SCRIPTS_DIR}/mount_gpt_image.sh -u -r "${ROOT_FS_DIR}" -s "${STATEFUL_FS_DIR}"
}
+# Update the base package on an existing image.
+update_base_packages() {
+ local image_name=$1
+
+ echo "Updating base packages on ${image_name}"
+
+ # Create stateful partition of the same size as the rootfs.
+ trap "mount_gpt_cleanup \"${ROOT_FS_DIR}\" \"${STATEFUL_FS_DIR}\"" EXIT
+
+ ${SCRIPTS_DIR}/mount_gpt_image.sh --from "${OUTPUT_DIR}" \
+ --image "${image_name}" -r "${ROOT_FS_DIR}" \
+ -s "${STATEFUL_FS_DIR}"
+
+ # Emerge updated packages, exactly like when creating base image
+ sudo INSTALL_MASK="${INSTALL_MASK}" ${EMERGE_BOARD_CMD} \
+ --root="${ROOT_FS_DIR}" --root-deps=rdeps \
+ --usepkg -uDNv chromeos ${EMERGE_JOBS}
+
+ # Clean out unused packages
+ sudo INSTALL_MASK="${INSTALL_MASK}" ${EMERGE_BOARD_CMD} \
+ --root="${ROOT_FS_DIR}" --root-deps=rdeps \
+ --usepkg --depclean ${EMERGE_JOBS}
+
+ trap - EXIT
+ ${SCRIPTS_DIR}/mount_gpt_image.sh -u -r "${ROOT_FS_DIR}" -s "${STATEFUL_FS_DIR}"
+}
+
create_base_image() {
+ local image_name=$1
trap "cleanup && delete_prompt" EXIT
+ UUID=$(uuidgen)
+
# Create and format the root file system.
# Check for loop device before creating image.
@@ -302,7 +346,6 @@ create_base_image() {
sudo mkfs.ext3 "${LOOP_DEV}"
# Tune and mount rootfs.
- UUID=$(uuidgen)
DISK_LABEL="C-KEYFOB"
sudo tune2fs -L "${DISK_LABEL}" -U "${UUID}" -c 0 -i 0 "${LOOP_DEV}"
sudo mount "${LOOP_DEV}" "${ROOT_FS_DIR}"
@@ -470,7 +513,16 @@ EOF
--arm_extra_bootargs="${FLAGS_arm_extra_bootargs}" \
--rootfs_partition_size=${FLAGS_rootfs_partition_size} \
"${OUTPUT_DIR}" \
- "${OUTPUT_IMG}"
+ "${OUTPUT_DIR}/${image_name}"
+
+ trap - EXIT
+
+ # FIXME: only signing things for x86 right now.
+ if [[ "${ARCH}" = "x86" ]]; then
+ # Verify the final image.
+ load_kernel_test "${OUTPUT_DIR}/${image_name}" \
+ "${OUTPUT_DIR}/key_alg8.vbpubk"
+ fi
}
# Create the output directory.
@@ -479,22 +531,35 @@ mkdir -p "${ROOT_FS_DIR}"
mkdir -p "${STATEFUL_FS_DIR}"
mkdir -p "${ESP_FS_DIR}"
-create_base_image ${OUTPUT_DIR}/${PRISTINE_IMAGE_NAME}
+# Preserve old images by copying them forward for --preserve.
+if [[ $FLAGS_preserve -eq ${FLAGS_TRUE} ]] ; then
+ if [[ -f ${PREVIOUS_DIR}/${PRISTINE_IMAGE_NAME} ]] ; then
+ # Copy forward pristine image, and associated files
+ cp ${PREVIOUS_DIR}/*.sh ${PREVIOUS_DIR}/config.txt ${OUTPUT_DIR}
+ cp ${PREVIOUS_DIR}/${PRISTINE_IMAGE_NAME} ${OUTPUT_DIR}
+
+ # Copy forward the developer image, if we already copied forward the base.
+ if [[ ${FLAGS_withdev} -eq ${FLAGS_TRUE} ]] && \
+ [[ -f ${PREVIOUS_DIR}/${DEVELOPER_IMAGE_NAME} ]] ; then
+ cp ${PREVIOUS_DIR}/${DEVELOPER_IMAGE_NAME} ${OUTPUT_DIR}
+ fi
+ fi
+fi
-# Create a developer image based on the chromium os base image.
-if [ "${FLAGS_withdev}" -eq "${FLAGS_TRUE}" ] ; then
- echo "Creating developer image from base image ${OUTPUT_IMG}"
- cp ${OUTPUT_DIR}/${PRISTINE_IMAGE_NAME} ${OUTPUT_DIR}/${DEVELOPER_IMAGE_NAME}
- update_dev_packages ${OUTPUT_DIR}/${DEVELOPER_IMAGE_NAME}
+if [[ -f ${PRISTINE_IMG} ]] ; then
+ update_base_packages ${PRISTINE_IMAGE_NAME}
+else
+ create_base_image ${PRISTINE_IMAGE_NAME}
fi
-trap - EXIT
+# Create a developer image based on the chromium os base image.
+if [ "${FLAGS_withdev}" -eq "${FLAGS_TRUE}" ] ; then
+ if [[ ! -f ${DEVELOPER_IMG} ]] ; then
+ echo "Creating developer image from base image ${PRISTINE_IMAGE_NAME}"
+ cp ${PRISTINE_IMG} ${DEVELOPER_IMG}
+ fi
-# FIXME: only signing things for x86 right now.
-if [[ "${ARCH}" = "x86" ]]; then
- # Verify the final image.
- # key_alg8.vbpubk is generated by build_kernel_image.sh --keep_work
- load_kernel_test "${OUTPUT_IMG}" "${OUTPUT_DIR}/key_alg8.vbpubk"
+ update_dev_packages ${DEVELOPER_IMAGE_NAME}
fi
# Clean up temporary files.
« no previous file with comments | « no previous file | get_latest_image.sh » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698