| Index: build_image
|
| diff --git a/build_image b/build_image
|
| index 971f0a155553e4169ed66d7e7a5f87ff94637411..0042b5dcb9c0edfb4a1f827ca0190bd10c175b1c 100755
|
| --- a/build_image
|
| +++ b/build_image
|
| @@ -144,6 +144,8 @@ OEM_FS_DIR="${OUTPUT_DIR}/partner_partition"
|
| ESP_FS_IMG=${OUTPUT_DIR}/esp.image
|
| ESP_FS_DIR=${OUTPUT_DIR}/esp
|
|
|
| +DEVKEYSDIR="/usr/share/vboot/devkeys"
|
| +
|
| LOOP_DEV=
|
| STATEFUL_LOOP_DEV=
|
| OEM_LOOP_DEV=
|
| @@ -173,6 +175,10 @@ if [[ ${FLAGS_jobs} -ne -1 ]]; then
|
| EMERGE_JOBS="--jobs=${FLAGS_jobs}"
|
| fi
|
|
|
| +if [[ ${FLAGS_enable_rootfs_verification} -eq ${FLAGS_TRUE} ]]; then
|
| + enable_rootfs_verification_flag="--enable_rootfs_verification"
|
| +fi
|
| +
|
| # Figure out ARCH from the given toolchain.
|
| # TODO: Move to common.sh as a function after scripts are switched over.
|
| TC_ARCH=$(echo "${CHOST}" | awk -F'-' '{ print $1 }')
|
| @@ -280,134 +286,27 @@ mount_gpt_cleanup() {
|
| delete_prompt
|
| }
|
|
|
| -make_image_bootable() {
|
| - local image_name="$1"
|
| - cros_root=/dev/sd%D%P
|
| - if [[ "${ARCH}" = "arm" ]]; then
|
| - # TODO(wad) assumed like in build_gpt for now.
|
| - cros_root=/dev/mmcblk1p3
|
| - fi
|
| - if [[ ${FLAGS_enable_rootfs_verification} -eq ${FLAGS_TRUE} ]]; then
|
| - cros_root=/dev/dm-0
|
| - fi
|
| -
|
| - # TODO(wad) mount the root fs to LOOP_DEV from the image
|
| - trap "mount_gpt_cleanup" EXIT
|
| - ${SCRIPTS_DIR}/mount_gpt_image.sh --from "${OUTPUT_DIR}" \
|
| - --image "${image_name}" -r "${ROOT_FS_DIR}" \
|
| - -s "${STATEFUL_FS_DIR}"
|
| -
|
| - # The rootfs should never be mounted rw again after this point without
|
| - # re-calling make_image_bootable.
|
| - sudo mount -o remount,ro "${ROOT_FS_DIR}"
|
| - root_dev=$(mount | grep -- "on ${ROOT_FS_DIR} type" | cut -f1 -d' ' | tail -1)
|
| -
|
| - DEVKEYSDIR="/usr/share/vboot/devkeys"
|
| -
|
| - # Builds the kernel partition image. The temporary files are kept around
|
| - # so that we can perform a load_kernel_test later on the final image.
|
| - ${SCRIPTS_DIR}/build_kernel_image.sh \
|
| - --arch="${ARCH}" \
|
| - --to="${OUTPUT_DIR}/vmlinuz.image" \
|
| - --hd_vblock="${OUTPUT_DIR}/vmlinuz_hd.vblock" \
|
| - --vmlinuz="${OUTPUT_DIR}/boot/vmlinuz" \
|
| - --working_dir="${OUTPUT_DIR}" \
|
| - --keep_work \
|
| - --rootfs_image=${root_dev} \
|
| - --rootfs_hash=${ROOT_FS_HASH} \
|
| - --verity_hash_alg=${FLAGS_verity_algorithm} \
|
| - --verity_tree_depth=${FLAGS_verity_depth} \
|
| - --verity_max_ios=${FLAGS_verity_max_ios} \
|
| - --verity_error_behavior=${FLAGS_verity_error_behavior} \
|
| - --root=${cros_root} \
|
| - --keys_dir="${DEVKEYSDIR}"
|
| -
|
| - local rootfs_hash_size=$(stat -c '%s' ${ROOT_FS_HASH})
|
| - info "Appending rootfs.hash (${rootfs_hash_size} bytes) to the root fs"
|
| - if [[ ${rootfs_hash_size} -gt $((FLAGS_rootfs_hash_pad * 1024 * 1024)) ]]
|
| - then
|
| - die "--rootfs_hash_pad reserves less than the needed ${rootfs_hash_size}"
|
| - fi
|
| - # Unfortunately, mount_gpt_image uses mount and not losetup to create the
|
| - # loop devices. This means that they are not the correct size. We have to
|
| - # write directly to the image to append the hash tree data.
|
| - local hash_offset="$(partoffset ${OUTPUT_DIR}/${image_name} 3)"
|
| - hash_offset=$((hash_offset + ((1024 * 1024 * ${FLAGS_rootfs_size}) / 512)))
|
| - sudo dd bs=512 \
|
| - seek=${hash_offset} \
|
| - if="${ROOT_FS_HASH}" \
|
| - of="${OUTPUT_DIR}/${image_name}" \
|
| - conv=notrunc
|
| - # We don't need to keep the file around anymore.
|
| - sudo rm "${ROOT_FS_HASH}"
|
| -
|
| - # Move the verification block needed for the hard disk install to the
|
| - # stateful partition. Mount stateful fs, copy file, and umount fs.
|
| - # In original CL: http://codereview.chromium.org/2868044, this was done in
|
| - # create_base_image(). However, it could break the build if it is a clean
|
| - # build because vmlinuz_hd.vblock hasn't been created by build_kernel_image.sh
|
| - if [[ "${ARCH}" = "x86" ]]; then
|
| - sudo cp "${OUTPUT_DIR}/vmlinuz_hd.vblock" "${STATEFUL_FS_DIR}"
|
| - fi
|
| -
|
| - # START_KERN_A is set by the first call to install the gpt.
|
| - local koffset="$(partoffset ${OUTPUT_DIR}/${image_name} 2)"
|
| - sudo dd if="${OUTPUT_DIR}/vmlinuz.image" of="${OUTPUT_DIR}/${image_name}" \
|
| - conv=notrunc bs=512 seek=${koffset}
|
| -
|
| - # Update the bootloaders. For legacy/efi x86, the EFI system partition
|
| - # will be updated and for arm, the mbr will be updated (for u-boot).
|
| - local kernel_part=
|
| - local bootloader_to=
|
| - local bootloader_to_flags=
|
| - local usb_disk="${FLAGS_usb_disk}"
|
| -
|
| - if [[ "${ARCH}" = "x86" ]]; then
|
| - # x86 should update the esp in place in the image.
|
| - bootloader_to="${OUTPUT_DIR}/${image_name}"
|
| - local esp_offset="$(partoffset ${OUTPUT_DIR}/${image_name} 12)"
|
| - esp_offset=$((esp_offset * 512)) # sectors to bytes
|
| - local esp_size="$(partsize ${OUTPUT_DIR}/${image_name} 12)"
|
| - esp_size=$((esp_size * 512)) # sectors to bytes
|
| - bootloader_to_flags="--to_offset=${esp_offset} --to_size=${esp_size}"
|
| - # Use the kernel partition to acquire configuration flags.
|
| - kernel_part="--kernel_partition='${OUTPUT_DIR}/vmlinuz.image'"
|
| - # Install syslinux on the EFI System Partition.
|
| - kernel_part="${kernel_part} --install_syslinux"
|
| - elif [[ "${ARCH}" = "arm" ]]; then
|
| - # TODO(wad) mmcblk1p3 is hardcoded for arm for now!
|
| - usb_disk="/dev/mmcblk1p3"
|
| - # ARM doesn't support using the kernel image for kernel cmdline flags yet.
|
| - kernel_part="--kernel_cmdline=\"${FLAGS_arm_extra_bootargs}\" "
|
| - # TODO(wad) Integrate dmtable extraction into the arm build
|
| - # E.g. $(cat ${OUTPUT_DIR}/boot.config | tr -s '\n' ' ')"
|
| - local kpart_offset="--kernel_partition_offset=${koffset}"
|
| - local kpart_size="--kernel_partition_sectors="
|
| - kpart_size="${kpart_size}$(partsize ${OUTPUT_DIR}/${image_name} 2)"
|
| - kernel_part="${kernel_part} ${kpart_size} ${kpart_offset}"
|
| - info "Using addition bootloader arguments: ${kernel_part}"
|
| - bootloader_to="${OUTPUT_DIR}/arm.mbr"
|
| - fi
|
| -
|
| - # Update partition 12 / legacy bootloaders and arm.
|
| - ${SCRIPTS_DIR}/update_bootloaders.sh \
|
| - --arch=${ARCH} \
|
| - --to="${bootloader_to}" \
|
| - --from="${OUTPUT_DIR}"/boot \
|
| - --vmlinuz="${OUTPUT_DIR}"/boot/vmlinuz \
|
| - --usb_disk="${usb_disk}" \
|
| - ${bootloader_to_flags} \
|
| - $kernel_part
|
| -
|
| - if [[ "${ARCH}" == "arm" ]]; then
|
| - sudo dd bs=1 conv=notrunc if="${bootloader_to}" \
|
| - of="${OUTPUT_DIR}/${image_name}"
|
| - sudo rm "${bootloader_to}"
|
| - fi
|
| -
|
| - trap - EXIT
|
| - ${SCRIPTS_DIR}/mount_gpt_image.sh -u -r "${ROOT_FS_DIR}" \
|
| - -s "${STATEFUL_FS_DIR}"
|
| +# Takes no arguments and populates the configuration for
|
| +# cros_make_image_bootable.
|
| +create_boot_desc() {
|
| + cat <<EOF > ${OUTPUT_DIR}/boot.desc
|
| + --arch="${ARCH}"
|
| + --output_dir="${OUTPUT_DIR}"
|
| + --rootfs_size="${FLAGS_rootfs_size}"
|
| + --rootfs_hash_pad="${FLAGS_rootfs_hash_pad}"
|
| + --rootfs_hash="${ROOT_FS_HASH}"
|
| + --rootfs_mountpoint="${ROOT_FS_DIR}"
|
| + --statefulfs_mountpoint="${STATEFUL_FS_DIR}"
|
| + --espfs_mountpoint="${ESP_FS_DIR}"
|
| + --verity_error_behavior="${FLAGS_verity_error_behavior}"
|
| + --verity_depth="${FLAGS_verity_depth}"
|
| + --verity_max_ios="${FLAGS_verity_max_ios}"
|
| + --verity_algorithm="${FLAGS_verity_algorithm}"
|
| + --keys_dir="${DEVKEYSDIR}"
|
| + --usb_disk="${FLAGS_usb_disk}"
|
| + --nocleanup_dirs
|
| + ${enable_rootfs_verification_flag}
|
| +EOF
|
| }
|
|
|
| # Modifies an existing image to add development packages
|
| @@ -662,13 +561,6 @@ create_base_image() {
|
| --install \
|
| ${enable_rootfs_verification}
|
|
|
| - # Create a working copy so we don't need the rootfs mounted
|
| - sudo mkdir -p "${OUTPUT_DIR}"/boot
|
| - # This will include any built files dropped in /boot as well.
|
| - # Like the current vmlinuz.
|
| - sudo cp -r "${ROOT_FS_DIR}"/boot/. "${OUTPUT_DIR}"/boot/
|
| - sudo chmod -R a+r "${OUTPUT_DIR}"/boot/
|
| -
|
| # Don't test the factory install shim.
|
| if [[ ${FLAGS_factory_install} -eq ${FLAGS_FALSE} ]] ; then
|
| # Check that the image has been correctly created.
|
| @@ -682,7 +574,7 @@ create_base_image() {
|
| # create /usr/local or /var on host (already exist on target).
|
| setup_symlinks_on_root "/usr/local" "/var" "${STATEFUL_FS_DIR}"
|
|
|
| - # make_image_bootable will clobber vmlinuz.image for x86.
|
| + # cros_make_image_bootable will clobber vmlinuz.image for x86.
|
| # Until then, just copy the kernel to vmlinuz.image. It is
|
| # expected in build_gpt.sh and needed by ARM until it supports the
|
| # full, signed kernel partition format.
|
| @@ -720,7 +612,6 @@ if [[ $FLAGS_preserve -eq ${FLAGS_TRUE} ]] ; 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}
|
| - cp -r ${PREVIOUS_DIR}/boot ${OUTPUT_DIR}/boot
|
|
|
| # Copy forward the developer image, if we already copied forward the base.
|
| if [[ ${FLAGS_withdev} -eq ${FLAGS_TRUE} ]] && \
|
| @@ -730,12 +621,18 @@ if [[ $FLAGS_preserve -eq ${FLAGS_TRUE} ]] ; then
|
| fi
|
| fi
|
|
|
| +# Create the boot.desc file which stores the build-time configuration
|
| +# information needed for making the image bootable after creation with
|
| +# cros_make_image_bootable.
|
| +create_boot_desc
|
| +
|
| if [[ -f ${PRISTINE_IMG} ]] ; then
|
| update_base_packages ${PRISTINE_IMAGE_NAME}
|
| else
|
| create_base_image ${PRISTINE_IMAGE_NAME}
|
| fi
|
| -make_image_bootable ${PRISTINE_IMAGE_NAME}
|
| +${SCRIPTS_DIR}/bin/cros_make_image_bootable "${OUTPUT_DIR}" \
|
| + "${PRISTINE_IMAGE_NAME}"
|
|
|
| # FIXME: only signing things for x86 right now.
|
| if [[ "${ARCH}" = "x86" ]]; then
|
| @@ -752,7 +649,8 @@ if [ "${FLAGS_withdev}" -eq "${FLAGS_TRUE}" ] ; then
|
| fi
|
|
|
| update_dev_packages ${DEVELOPER_IMAGE_NAME}
|
| - make_image_bootable ${DEVELOPER_IMAGE_NAME}
|
| + ${SCRIPTS_DIR}/bin/cros_make_image_bootable "${OUTPUT_DIR}" \
|
| + "${DEVELOPER_IMAGE_NAME}"
|
| fi
|
|
|
| # Clean up temporary files.
|
|
|