OLD | NEW |
1 #!/bin/bash | 1 #!/bin/bash |
2 | 2 |
3 # Copyright (c) 2009 The Chromium OS Authors. All rights reserved. | 3 # Copyright (c) 2009 The Chromium OS Authors. All rights reserved. |
4 # Use of this source code is governed by a BSD-style license that can be | 4 # Use of this source code is governed by a BSD-style license that can be |
5 # found in the LICENSE file. | 5 # found in the LICENSE file. |
6 | 6 |
7 # This is the autoupdater for Memento. When called it consults Omaha to see | 7 # This is the autoupdater for Memento. When called it consults Omaha to see |
8 # if there's an update available. If so, it downloads it to the other | 8 # if there's an update available. If so, it downloads it to the other |
9 # partition on the Memento USB stick, then alters the MBR and partitions | 9 # partition on the Memento USB stick, then alters the MBR and partitions |
10 # as needed so the next reboot will boot into the newly installed partition. | 10 # as needed so the next reboot will boot into the newly installed partition. |
(...skipping 128 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
139 INSTALL_DEV="${FLAGS_dst_partition}" | 139 INSTALL_DEV="${FLAGS_dst_partition}" |
140 else | 140 else |
141 INSTALL_DEV=$(echo $LOCAL_DEV | tr '35' '53') | 141 INSTALL_DEV=$(echo $LOCAL_DEV | tr '35' '53') |
142 fi | 142 fi |
143 NEW_PART_NUM=${INSTALL_DEV##*/*[a-z]} | 143 NEW_PART_NUM=${INSTALL_DEV##*/*[a-z]} |
144 # The kernel needs to be installed to its own partition. We'll handle that in | 144 # The kernel needs to be installed to its own partition. We'll handle that in |
145 # the postinst script (from the new rootfs). partitions 2&3 are image A, | 145 # the postinst script (from the new rootfs). partitions 2&3 are image A, |
146 # partitions 4&5 are image B. | 146 # partitions 4&5 are image B. |
147 KINSTALL_DEV=$(echo $INSTALL_DEV | tr '35' '24') | 147 KINSTALL_DEV=$(echo $INSTALL_DEV | tr '35' '24') |
148 | 148 |
| 149 if [ "$KINSTALL_DEV" = "$INSTALL_DEV" ]; then |
| 150 log "kernel install partition the same as rootfs install partition!" |
| 151 log " (${KINSTALL_DEV})" |
| 152 exit 1 |
| 153 fi |
| 154 |
149 # Find whole disk device. | 155 # Find whole disk device. |
150 ROOT_DEV=${INSTALL_DEV%%[0-9]*} | 156 ROOT_DEV=${INSTALL_DEV%%[0-9]*} |
151 | 157 |
152 # Do some device sanity checks. | 158 # Do some device sanity checks. |
153 if ! expr match "$LOCAL_DEV" '^/dev/[a-z][a-z]*[12345]$' > /dev/null | 159 if ! expr match "$LOCAL_DEV" '^/dev/[a-z][a-z]*[12345]$' > /dev/null |
154 then | 160 then |
155 log "didnt find good local device. local: $LOCAL_DEV install: $INSTALL_DEV" | 161 log "didnt find good local device. local: $LOCAL_DEV install: $INSTALL_DEV" |
156 exit 1 | 162 exit 1 |
157 fi | 163 fi |
158 if ! expr match "$INSTALL_DEV" '^/dev/[a-z][a-z]*[12345]$' > /dev/null | 164 if ! expr match "$INSTALL_DEV" '^/dev/[a-z][a-z]*[12345]$' > /dev/null |
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
190 # wget - fetch file, send to stdout | 196 # wget - fetch file, send to stdout |
191 # tee - save a copy off to device, also send to stdout | 197 # tee - save a copy off to device, also send to stdout |
192 # openssl - calculate the sha1 hash of stdin, send checksum to stdout | 198 # openssl - calculate the sha1 hash of stdin, send checksum to stdout |
193 # tr - convert trailing newline to a space | 199 # tr - convert trailing newline to a space |
194 # pipestatus - append return codes for all prior commands. should all be 0 | 200 # pipestatus - append return codes for all prior commands. should all be 0 |
195 | 201 |
196 CHECKSUM_FILE="/tmp/memento_autoupdate_checksum" | 202 CHECKSUM_FILE="/tmp/memento_autoupdate_checksum" |
197 RETURNED_CODES=$(wget -O - --load-cookies <(echo "$COOKIES") \ | 203 RETURNED_CODES=$(wget -O - --load-cookies <(echo "$COOKIES") \ |
198 "$IMG_URL" 2>> "$MEMENTO_AU_LOG" | \ | 204 "$IMG_URL" 2>> "$MEMENTO_AU_LOG" | \ |
199 tee >(openssl sha1 -binary | openssl base64 > "$CHECKSUM_FILE") | \ | 205 tee >(openssl sha1 -binary | openssl base64 > "$CHECKSUM_FILE") | \ |
200 gzip -d > "$INSTALL_DEV" ; echo ${PIPESTATUS[*]}) | 206 gzip -d | $(dirname "$0")/split_write "$KINSTALL_DEV" "$INSTALL_DEV" ; \ |
| 207 echo ${PIPESTATUS[*]}) |
201 | 208 |
202 EXPECTED_CODES="0 0 0" | 209 EXPECTED_CODES="0 0 0 0" |
203 CALCULATED_CS=$(cat "$CHECKSUM_FILE") | 210 CALCULATED_CS=$(cat "$CHECKSUM_FILE") |
204 rm -f "$CHECKSUM_FILE" | 211 rm -f "$CHECKSUM_FILE" |
205 | 212 |
206 if [[ ("$CALCULATED_CS" == "$CHECKSUM") && \ | 213 if [[ ("$CALCULATED_CS" == "$CHECKSUM") && \ |
207 ("$RETURNED_CODES" == "$EXPECTED_CODES") ]] | 214 ("$RETURNED_CODES" == "$EXPECTED_CODES") ]] |
208 then | 215 then |
209 # wonderful | 216 # wonderful |
210 log download success | 217 log download success |
211 else | 218 else |
212 # either checksum mismatch or ran out of space. | 219 # either checksum mismatch or ran out of space. |
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
257 version_number_greater_than "$APP_VERSION" "$NEW_VERSION" | 264 version_number_greater_than "$APP_VERSION" "$NEW_VERSION" |
258 then | 265 then |
259 log "Can't upgrade to older version: " "$NEW_VERSION" | 266 log "Can't upgrade to older version: " "$NEW_VERSION" |
260 umount "$MOUNTPOINT" | 267 umount "$MOUNTPOINT" |
261 rmdir "$MOUNTPOINT" | 268 rmdir "$MOUNTPOINT" |
262 exit 1 | 269 exit 1 |
263 fi | 270 fi |
264 fi | 271 fi |
265 fi | 272 fi |
266 | 273 |
267 "$MOUNTPOINT"/postinst "$INSTALL_DEV" "$KINSTALL_DEV" 2>&1 | \ | 274 "$MOUNTPOINT"/postinst "$INSTALL_DEV" 2>&1 | cat >> "$MEMENTO_AU_LOG" |
268 cat >> "$MEMENTO_AU_LOG" | |
269 [ "${PIPESTATUS[*]}" = "0 0" ] | 275 [ "${PIPESTATUS[*]}" = "0 0" ] |
270 POSTINST_RETURN_CODE=$? | 276 POSTINST_RETURN_CODE=$? |
271 umount "$MOUNTPOINT" | 277 umount "$MOUNTPOINT" |
272 rmdir "$MOUNTPOINT" | 278 rmdir "$MOUNTPOINT" |
273 | 279 |
274 # $1 is return code, $2 is command | 280 # $1 is return code, $2 is command |
275 function abort_update_if_cmd_failed_long { | 281 function abort_update_if_cmd_failed_long { |
276 if [ "$1" -ne "0" ] | 282 if [ "$1" -ne "0" ] |
277 then | 283 then |
278 log "$2 failed with error code $1 . aborting update" | 284 log "$2 failed with error code $1 . aborting update" |
(...skipping 30 matching lines...) Expand all Loading... |
309 abort_update_if_cmd_failed | 315 abort_update_if_cmd_failed |
310 | 316 |
311 if [ -z "${FLAGS_dst_partition}" ]; then | 317 if [ -z "${FLAGS_dst_partition}" ]; then |
312 # mark update as complete so we don't try to update again | 318 # mark update as complete so we don't try to update again |
313 touch "$UPDATED_COMPLETED_FILE" | 319 touch "$UPDATED_COMPLETED_FILE" |
314 fi | 320 fi |
315 | 321 |
316 # tell user to reboot | 322 # tell user to reboot |
317 log Autoupdate applied. You should now reboot | 323 log Autoupdate applied. You should now reboot |
318 echo UPDATED | 324 echo UPDATED |
OLD | NEW |