| Index: image_to_live.sh
|
| diff --git a/image_to_live.sh b/image_to_live.sh
|
| index f2b0c0556b62cd16df90c259dde8bc6f016fb1bd..b08d0c9501fd2f8f4a2626e00e604f517066244e 100755
|
| --- a/image_to_live.sh
|
| +++ b/image_to_live.sh
|
| @@ -25,6 +25,7 @@ DEFINE_boolean update_known_hosts ${FLAGS_FALSE} \
|
| "Update your known_hosts with the new remote instance's key."
|
| DEFINE_string update_log "update_engine.log" \
|
| "Path to log for the update_engine."
|
| +DEFINE_boolean verify ${FLAGS_TRUE} "Verify image on device after update."
|
|
|
| # Flags for devserver.
|
| DEFINE_string archive_dir "" \
|
| @@ -33,17 +34,21 @@ DEFINE_integer devserver_port 8080 \
|
| "Port to use for devserver."
|
| DEFINE_string image "" \
|
| "Update with this image path that is in this source checkout." i
|
| +DEFINE_boolean update_stateful ${FLAGS_TRUE} \
|
| + "Perform update of stateful partition e.g. /var /usr/local."
|
| DEFINE_string update_url "" "Full url of an update image."
|
|
|
| # Flags for stateful update.
|
| DEFINE_string stateful_update_flag "" \
|
| "Flag to pass to stateful update e.g. old, clean, etc." s
|
|
|
| -UPDATER_BIN='/usr/bin/update_engine_client'
|
| -UPDATER_IDLE='UPDATE_STATUS_IDLE'
|
| -UPDATER_NEED_REBOOT='UPDATE_STATUS_UPDATED_NEED_REBOOT'
|
| -UPDATER_UPDATE_CHECK='UPDATE_STATUS_CHECKING_FOR_UPDATE'
|
| -UPDATER_DOWNLOADING='UPDATE_STATUS_DOWNLOADING'
|
| +UPDATER_BIN="/usr/bin/update_engine_client"
|
| +UPDATER_IDLE="UPDATE_STATUS_IDLE"
|
| +UPDATER_NEED_REBOOT="UPDATE_STATUS_UPDATED_NEED_REBOOT"
|
| +UPDATER_UPDATE_CHECK="UPDATE_STATUS_CHECKING_FOR_UPDATE"
|
| +UPDATER_DOWNLOADING="UPDATE_STATUS_DOWNLOADING"
|
| +
|
| +IMAGE_PATH=""
|
|
|
| function kill_all_devservers {
|
| # Using ! here to avoid exiting with set -e is insufficient, so use
|
| @@ -89,9 +94,12 @@ function start_dev_server {
|
| if [ -n "${FLAGS_image}" ]; then
|
| devserver_flags="${devserver_flags} \
|
| --image $(reinterpret_path_for_chroot ${FLAGS_image})"
|
| + IMAGE_PATH="${FLAGS_image}"
|
| +
|
| elif [ -n "${FLAGS_archive_dir}" ]; then
|
| devserver_flags="${devserver_flags} \
|
| --archive_dir $(reinterpret_path_for_chroot ${FLAGS_archive_dir}) -t"
|
| + IMAGE_PATH="${FLAGS_archive_dir}/chromiumos_test_image.bin"
|
| fi
|
|
|
| info "Starting devserver with flags ${devserver_flags}"
|
| @@ -258,6 +266,31 @@ function remote_reboot {
|
| done
|
| }
|
|
|
| +function verify_image {
|
| + info "Verifying image."
|
| + "${SCRIPTS_DIR}/mount_gpt_image.sh" --from "$(dirname ${IMAGE_PATH})" \
|
| + --image "$(basename ${IMAGE_PATH})" \
|
| + --read_only
|
| +
|
| + local lsb_release=$(cat /tmp/m/etc/lsb-release)
|
| + info "Verifying image with release:"
|
| + echo ${lsb_release}
|
| +
|
| + "${SCRIPTS_DIR}/mount_gpt_image.sh" --unmount
|
| +
|
| + remote_sh "cat /etc/lsb-release"
|
| + info "Remote image reports:"
|
| + echo ${REMOTE_OUT}
|
| +
|
| + if [ "${lsb_release}" = "${REMOTE_OUT}" ]; then
|
| + info "Update was successful and image verified as ${lsb_release}."
|
| + return 0
|
| + else
|
| + warn "Image verification failed."
|
| + return 1
|
| + fi
|
| +}
|
| +
|
| function main() {
|
| assert_outside_chroot
|
|
|
| @@ -268,6 +301,12 @@ function main() {
|
|
|
| set -e
|
|
|
| + if [ ${FLAGS_verify} -eq ${FLAGS_TRUE} ] && \
|
| + [ -n "${FLAGS_update_url}" ]; then
|
| + warn "Verify is not compatible with setting an update url."
|
| + FLAGS_verify=${FLAGS_FALSE}
|
| + fi
|
| +
|
| trap cleanup EXIT
|
|
|
| TMP=$(mktemp -d /tmp/image_to_live.XXXX)
|
| @@ -284,11 +323,12 @@ function main() {
|
| start_dev_server
|
| fi
|
|
|
| - if [ "${FLAGS_update}" -eq "${FLAGS_TRUE}" ] && ! run_auto_update; then
|
| + if [ ${FLAGS_update} -eq ${FLAGS_TRUE} ] && ! run_auto_update; then
|
| die "Update was not successful."
|
| fi
|
|
|
| - if ! run_stateful_update; then
|
| + if [ ${FLAGS_update_stateful} -eq ${FLAGS_TRUE} ] && \
|
| + ! run_stateful_update; then
|
| warn "Stateful update was not successful."
|
| fi
|
|
|
| @@ -304,10 +344,14 @@ function main() {
|
| fi
|
|
|
| remote_sh "grep ^CHROMEOS_RELEASE_DESCRIPTION= /etc/lsb-release"
|
| - local release_description=$(echo ${REMOTE_OUT} | cut -d '=' -f 2)
|
| - info "Update was successful and rebooted to $release_description"
|
| + if [ ${FLAGS_verify} -eq ${FLAGS_TRUE} ]; then
|
| + verify_image
|
| + else
|
| + local release_description=$(echo ${REMOTE_OUT} | cut -d '=' -f 2)
|
| + info "Update was successful and rebooted to $release_description"
|
| + fi
|
|
|
| - return 0
|
| + exit 0
|
| }
|
|
|
| main $@
|
|
|