| 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.
|
|
|