Index: image_to_live.sh |
diff --git a/image_to_live.sh b/image_to_live.sh |
index 1903883deda864f95b65db58108a577ca6813755..a6b70bee90def1614300ace56faa3655a0e96cd6 100755 |
--- a/image_to_live.sh |
+++ b/image_to_live.sh |
@@ -24,8 +24,11 @@ DEFINE_integer devserver_port 8080 \ |
"Port to use for devserver" |
DEFINE_string update_url "" "Full url of an update image" |
+UPDATER_BIN='/usr/bin/update_engine_client' |
+UPDATER_IDLE='UPDATE_STATUS_IDLE' |
+UPDATER_NEED_REBOOT='UPDATE_STATUS_UPDATED_NEED_REBOOT' |
+ |
function kill_all_devservers { |
- echo "Killing dev server." |
# Using ! here to avoid exiting with set -e is insufficient, so use |
# || true instead. |
sudo pkill -f devserver\.py || true |
@@ -48,9 +51,10 @@ function start_dev_server { |
kill_all_devservers |
if [ ${FLAGS_verbose} -eq ${FLAGS_FALSE} ]; then |
./enter_chroot.sh "sudo ./start_devserver ${FLAGS_devserver_port} \ |
- > dev_server.log 2>&1" & |
+ --client_prefix=ChromeOSUpdateEngine > dev_server.log 2>&1" & |
else |
- ./enter_chroot.sh "sudo ./start_devserver ${FLAGS_devserver_port}" & |
+ ./enter_chroot.sh "sudo ./start_devserver ${FLAGS_devserver_port} \ |
+ --client_prefix=ChromeOSUpdateEngine &" |
fi |
echo -n "Waiting on devserver to start" |
until netstat -anp 2>&1 | grep 0.0.0.0:${FLAGS_devserver_port} > /dev/null |
@@ -65,7 +69,7 @@ function start_dev_server { |
# from the dev server and prepares the update. chromeos_startup finishes |
# the update on next boot. |
function copy_stateful_update { |
- echo "Starting stateful update." |
+ info "Starting stateful update." |
local dev_dir="$(dirname $0)/../platform/dev" |
# Copy over update script and run update. |
@@ -73,83 +77,55 @@ function copy_stateful_update { |
remote_sh "/tmp/stateful_update" |
} |
-function prepare_update_metadata { |
- remote_sh "mount -norw,remount /" |
- |
+function get_update_args { |
+ if [ -z ${1} ]; then |
+ die "No url provided for update." |
+ fi |
+ local update_args="--omaha_url ${1}" |
if [[ ${FLAGS_ignore_version} -eq ${FLAGS_TRUE} ]]; then |
- echo "Forcing update independent of the current version" |
- remote_sh "cat /etc/lsb-release |\ |
- grep -v CHROMEOS_RELEASE_VERSION > /etc/lsb-release~;\ |
- mv /etc/lsb-release~ /etc/lsb-release; \ |
- echo 'CHROMEOS_RELEASE_VERSION=0.0.0.0' >> /etc/lsb-release" |
+ info "Forcing update independent of the current version" |
+ update_args="--update ${update_args}" |
fi |
+ echo "${update_args}" |
+} |
+ |
+function get_devserver_url { |
+ local devserver_url="" |
if [ ${FLAGS_ignore_hostname} -eq ${FLAGS_TRUE} ]; then |
if [ -z ${FLAGS_update_url} ]; then |
devserver_url="http://$HOSTNAME:${FLAGS_devserver_port}/update" |
else |
devserver_url="${FLAGS_update_url}" |
fi |
- echo "Forcing update from ${devserver_url}" |
- remote_sh "cat /etc/lsb-release |\ |
- grep -v '^CHROMEOS_AUSERVER=' |\ |
- grep -v '^CHROMEOS_DEVSERVER=' > /etc/lsb-release~;\ |
- mv /etc/lsb-release~ /etc/lsb-release; \ |
- echo 'CHROMEOS_AUSERVER=${devserver_url}' >> \ |
- /etc/lsb-release; \ |
- echo 'CHROMEOS_DEVSERVER=${devserver_url}' >> /etc/lsb-release" |
fi |
+ echo "${devserver_url}" |
} |
-function run_auto_update { |
- echo "Starting update" |
- local update_file=/var/log/softwareupdate.log |
- # Clear it out so we don't see a prior run and make sure it |
- # exists so the first tail below can't fail if it races the |
- # memento updater first write and wins. |
- remote_sh "rm -f /tmp/memento_autoupdate_completed; rm -f ${update_file}; \ |
- touch ${update_file}; \ |
- /opt/google/memento_updater/memento_updater.sh --force_update < /dev/null\ |
- >&/dev/null&" |
- |
- local update_error |
- local output_file |
- local progress |
- |
- update_error=1 |
- output_file="${TMP}/output" |
- |
- while true; do |
- # The softwareupdate.log gets pretty bit with download progress |
- # lines so only look in the last 100 lines for status. |
- remote_sh "tail -100 ${update_file}" |
- echo "${REMOTE_OUT}" > "${output_file}" |
- progress=$(tail -4 "${output_file}" | grep 0K | head -1) |
- if [ -n "${progress}" ]; then |
- echo "Image fetching progress: ${progress}" |
- fi |
- if grep -q 'updatecheck status="noupdate"' "${output_file}"; then |
- echo "devserver is claiming there is no update available." |
- echo "Consider setting --ignore_version." |
- break |
- fi |
- if grep -q 'Autoupdate applied. You should now reboot' "${output_file}" |
- then |
- echo "Autoupdate was successful." |
- update_error=0 |
- fi |
- if grep -q 'Memento AutoUpdate terminating' "${output_file}"; then |
- break |
- fi |
- # Sleep for a while so that ssh handling doesn't slow down the install |
- sleep 2 |
- done |
+function get_update_status { |
+ remote_sh "${UPDATER_BIN} -status | |
+ grep CURRENT_OP | |
+ cut -f 2 -d =" |
+ echo "${REMOTE_OUT}" |
+} |
- return ${update_error} |
+function run_auto_update { |
+ local update_args="$(get_update_args "$(get_devserver_url)")" |
+ info "Starting update using args ${update_args}" |
+ remote_sh "${UPDATER_BIN} ${update_args}" |
+ |
+ local update_status="$(get_update_status)" |
+ if [ "${update_status}" = ${UPDATER_NEED_REBOOT} ]; then |
+ info "Autoupdate was successful." |
+ return 0 |
+ else |
+ warn "Autoupdate was unsuccessful. Status returned was ${update_status}." |
+ return 1 |
+ fi |
} |
function remote_reboot { |
- echo "Rebooting." |
+ info "Rebooting." |
remote_sh "touch /tmp/awaiting_reboot; reboot" |
local output_file |
output_file="${TMP}/output" |
@@ -159,13 +135,13 @@ function remote_reboot { |
# This may fail while the machine is down so generate output and a |
# boolean result to distinguish between down/timeout and real failure |
! remote_sh_allow_changed_host_key \ |
- "echo 0; [ -e /tmp/awaiting_reboot ] && echo '1'; true" |
+ "echo 0; [ -e /tmp/awaiting_reboot ] && echo '1'; true" |
echo "${REMOTE_OUT}" > "${output_file}" |
if grep -q "0" "${output_file}"; then |
if grep -q "1" "${output_file}"; then |
- echo "Not yet rebooted" |
+ info "Not yet rebooted" |
else |
- echo "Rebooted and responding" |
+ info "Rebooted and responding" |
break |
fi |
fi |
@@ -189,9 +165,9 @@ function main() { |
remote_access_init |
- if remote_sh [ -e /tmp/memento_autoupdate_completed ]; then |
- echo "Machine has been updated but not yet rebooted. Rebooting it now." |
- echo "Rerun this script if you still wish to update it." |
+ if [ "$(get_update_status)" = "${UPDATER_NEED_REBOOT}" ]; then |
+ warn "Machine has been updated but not yet rebooted. Rebooting it now." |
+ warn "Rerun this script if you still wish to update it." |
remote_reboot |
exit 1 |
fi |
@@ -201,15 +177,12 @@ function main() { |
start_dev_server |
fi |
- prepare_update_metadata |
- |
if ! run_auto_update; then |
- echo "Update was not successful." |
- exit 1 |
+ die "Update was not successful." |
fi |
if ! copy_stateful_update; then |
- echo "Stateful update was not successful." |
+ warn "Stateful update was not successful." |
fi |
remote_reboot |
@@ -220,12 +193,12 @@ function main() { |
grep -v "^${FLAGS_remote} " "${known_hosts}" > "${TMP}/new_known_hosts" |
cat "${TMP}/new_known_hosts" "${TMP_KNOWN_HOSTS}" > "${known_hosts}" |
chmod 0640 "${known_hosts}" |
- echo "New updated in ${known_hosts}, backup made." |
+ info "New updated in ${known_hosts}, backup made." |
fi |
remote_sh "grep ^CHROMEOS_RELEASE_DESCRIPTION= /etc/lsb-release" |
- local release_description=$(echo $REMOTE_OUT | cut -d '=' -f 2) |
- echo "Update was successful and rebooted to $release_description" |
+ local release_description=$(echo ${REMOTE_OUT} | cut -d '=' -f 2) |
+ info "Update was successful and rebooted to $release_description" |
return 0 |
} |