diff --git a/mod_image_for_recovery.sh b/mod_image_for_recovery.sh index faa240c3cd..7d4066a86c 100755 --- a/mod_image_for_recovery.sh +++ b/mod_image_for_recovery.sh @@ -8,35 +8,50 @@ . "$(dirname "$0")/common.sh" +# Load functions and constants for chromeos-install +. "$(dirname "$0")/chromeos-common.sh" + # Script must be run inside the chroot. restart_in_chroot_if_needed $* -DEFINE_string image_dir "" \ - "Directory to pristine/base image." -DEFINE_string image_name "chromiumos_image.bin" \ - "Name of Chrome OS image to modify." +get_default_board + +DEFINE_string board "$DEFAULT_BOARD" "Board for which the image was built" +DEFINE_string image "" "Location of the rootfs raw image file" # Parse command line FLAGS "$@" || exit 1 eval set -- "${FLAGS_ARGV}" +# No board, no default and no image set then we can't find the image +if [ -z $FLAGS_image ] && [ -z $FLAGS_board ] ; then + setup_board_warning + die "mod_image_for_recovery failed. No board set and no image set" +fi + +# We have a board name but no image set. Use image at default location +if [ -z $FLAGS_image ] ; then + IMAGES_DIR="${DEFAULT_BUILD_ROOT}/images/${FLAGS_board}" + FILENAME="chromiumos_image.bin" + FLAGS_image="${IMAGES_DIR}/$(ls -t $IMAGES_DIR 2>&-| head -1)/${FILENAME}" +fi + +# Turn path into an absolute path. +FLAGS_image=$(eval readlink -f ${FLAGS_image}) + +# Abort early if we can't find the image +if [ ! -f $FLAGS_image ] ; then + echo "No image found at $FLAGS_image" + exit 1 +fi + set -e -if [ -z $FLAGS_image_dir ] || [ ! -d $FLAGS_image_dir ]; then - echo "Error: invalid flag --image_dir" - exit 1 -fi - -SRC_PATH="${FLAGS_image_dir}/${FLAGS_image_name}" -if [ -z $FLAGS_image_name ] || [ ! -f $SRC_PATH ]; then - echo "Error: invalid flag --image_name" - exit 1 -fi - # Constants -OUTPUT_DIR=$FLAGS_image_dir -ROOT_FS_DIR="${OUTPUT_DIR}/rootfs" -STATEFUL_FS_DIR="${OUTPUT_DIR}/stateful_partition" +IMAGE_DIR="$(dirname "$FLAGS_image")" +IMAGE_NAME="$(basename "$FLAGS_image")" +ROOT_FS_DIR="$IMAGE_DIR/rootfs" +STATEFUL_DIR="$IMAGE_DIR/stateful_partition" RECOVERY_IMAGE="recovery_image.bin" mount_gpt_cleanup() { @@ -49,24 +64,24 @@ update_recovery_packages() { echo "Modifying image ${image_name} for recovery use" - trap "mount_gpt_cleanup \"${ROOT_FS_DIR}\" \"${STATEFUL_FS_DIR}\"" EXIT + trap "mount_gpt_cleanup \"${ROOT_FS_DIR}\" \"${STATEFUL_DIR}\"" EXIT - ${SCRIPTS_DIR}/mount_gpt_image.sh --from "${OUTPUT_DIR}" \ + ${SCRIPTS_DIR}/mount_gpt_image.sh --from "${IMAGE_DIR}" \ --image "$( basename ${image_name} )" -r "${ROOT_FS_DIR}" \ - -s "${STATEFUL_FS_DIR}" + -s "${STATEFUL_DIR}" # Mark the image as a recovery image (needed for recovery boot) - sudo touch "${STATEFUL_FS_DIR}/.recovery" + sudo touch "${STATEFUL_DIR}/.recovery" trap - EXIT ${SCRIPTS_DIR}/mount_gpt_image.sh -u -r "${ROOT_FS_DIR}" \ - -s "${STATEFUL_FS_DIR}" + -s "${STATEFUL_DIR}" } # Main -DST_PATH="${OUTPUT_DIR}/${RECOVERY_IMAGE}" -echo "Making a copy of original image ${SRC_PATH}" -cp $SRC_PATH $DST_PATH +DST_PATH="${IMAGE_DIR}/${RECOVERY_IMAGE}" +echo "Making a copy of original image ${FLAGS_image}" +cp $FLAGS_image $DST_PATH update_recovery_packages $DST_PATH echo "Recovery image created at ${DST_PATH}"