Harden build_image to not lose loopback devices.

Review URL: http://codereview.chromium.org/1794007
This commit is contained in:
Chris Sosa 2010-04-29 14:02:35 -07:00
parent 5d8ed6de6a
commit bde8c1bccc

View File

@ -115,23 +115,17 @@ fi
mkdir -p "$OUTPUT_DIR"
cleanup_rootfs_loop() {
sudo umount "$LOOP_DEV"
sleep 1 # in case $LOOP_DEV is in use.
sudo losetup -d "$LOOP_DEV"
sudo umount -d "$ROOT_FS_DIR"
}
cleanup_stateful_fs_loop() {
sudo umount "${ROOT_FS_DIR}/usr/local"
sudo umount "${ROOT_FS_DIR}/var"
sudo umount "${STATEFUL_DIR}"
sleep 1 # follows from cleanup_root_fs_loop.
sudo losetup -d "$STATEFUL_LOOP_DEV"
sudo umount -d "${STATEFUL_DIR}"
}
cleanup_esp_loop() {
sudo umount "$ESP_DIR"
sleep 1
sudo losetup -d "$ESP_LOOP_DEV"
sudo umount -d "$ESP_DIR"
}
cleanup() {
@ -154,6 +148,20 @@ cleanup() {
set -e
}
delete_prompt() {
echo "An error occurred in your build so your latest output directory" \
"is invalid."
read -p "Would you like to delete the output directory (y/N)? " SURE
SURE="${SURE:0:1}" # Get just the first character
if [ "${SURE}" == "y" ] ; then
sudo rm -rf "$OUTPUT_DIR"
echo "Deleted $OUTPUT_DIR"
else
echo "Not deleting $OUTPUT_DIR. Note dev server updates will not work" \
"until you successfully build another image or delete this directory"
fi
}
# ${DEV_IMAGE_ROOT} specifies the location of where developer packages will
# be installed on the stateful dir. On a Chromium OS system, this will
# translate to /usr/local
@ -187,7 +195,7 @@ setup_symlinks_on_root() {
sudo ln -s "${2}" "${DEV_IMAGE_ROOT}/var"
}
trap cleanup EXIT
trap "cleanup && delete_prompt" EXIT
mkdir -p "$ROOT_FS_DIR"
@ -428,6 +436,8 @@ setup_symlinks_on_root "/usr/local" "/var"
# Cleanup loop devices.
cleanup
trap delete_prompt EXIT
# Create the GPT-formatted image
${SCRIPTS_DIR}/build_gpt.sh \
--arch=${ARCH} --board=${FLAGS_board} "${OUTPUT_DIR}" "${OUTPUT_IMG}"