OLD | NEW |
1 #!/bin/sh | 1 #!/bin/sh |
2 # Copyright (c) 2010 The Chromium OS Authors. All rights reserved. | 2 # Copyright (c) 2010 The Chromium OS Authors. All rights reserved. |
3 # Use of this source code is governed by a BSD-style license that can be | 3 # Use of this source code is governed by a BSD-style license that can be |
4 # found in the LICENSE file. | 4 # found in the LICENSE file. |
5 | 5 |
6 # This script can be called to switch from kernel slot A / sda3 | 6 # This script can be called to switch from kernel slot A / sda3 |
7 # to kernel slot B / sda5 and vice versa. | 7 # to kernel slot B / sda5 and vice versa. |
8 | 8 |
9 ROOT_DEV=$(rootdev -s) | 9 ROOT_DEV=$(rootdev -s) |
10 OTHER_ROOT_DEV=$(echo $ROOT_DEV | tr '35' '53') | 10 OTHER_ROOT_DEV=$(echo $ROOT_DEV | tr '35' '53') |
11 | 11 |
12 if [ "${ROOT_DEV}" = "${OTHER_ROOT_DEV}" ] | 12 if [ "${ROOT_DEV}" = "${OTHER_ROOT_DEV}" ] |
13 then | 13 then |
14 echo "Not a normal rootfs partition (3 or 5): ${ROOT_DEV}" | 14 echo "Not a normal rootfs partition (3 or 5): ${ROOT_DEV}" |
15 exit 1 | 15 exit 1 |
16 fi | 16 fi |
17 | 17 |
18 DEV=${ROOT_DEV%[0-9]} | 18 DEV=${ROOT_DEV%[0-9]} |
19 # Note: this works only for single digit partition numbers. | 19 # Note: this works only for single digit partition numbers. |
20 ROOT_PART=$(echo "${ROOT_DEV}" | sed -e 's/^.*\([0-9]\)$/\1/') | 20 ROOT_PART=$(echo "${ROOT_DEV}" | sed -e 's/^.*\([0-9]\)$/\1/') |
| 21 OTHER_ROOT_PART=$(echo "${OTHER_ROOT_DEV}" | sed -e 's/^.*\([0-9]\)$/\1/') |
21 | 22 |
22 # Successfully being able to mount the other partition | 23 # Successfully being able to mount the other partition |
23 # and run postinst guarantees that there is a real partition there. | 24 # and run postinst guarantees that there is a real partition there. |
24 echo "Running postinst on $OTHER_ROOT_DEV" | 25 echo "Running postinst on $OTHER_ROOT_DEV" |
25 MOUNTPOINT=$(mktemp -d) | 26 MOUNTPOINT=$(mktemp -d) |
26 mkdir -p "$MOUNTPOINT" | 27 mkdir -p "$MOUNTPOINT" |
27 mount -o ro "$OTHER_ROOT_DEV" "$MOUNTPOINT" | 28 mount -o ro "$OTHER_ROOT_DEV" "$MOUNTPOINT" |
28 "$MOUNTPOINT"/postinst --noupdate_firmware "$OTHER_ROOT_DEV" | 29 "$MOUNTPOINT"/postinst --noupdate_firmware "$OTHER_ROOT_DEV" |
29 POSTINST_RETURN_CODE=$? | 30 POSTINST_RETURN_CODE=$? |
30 umount "$MOUNTPOINT" | 31 umount "$MOUNTPOINT" |
31 rmdir "$MOUNTPOINT" | 32 rmdir "$MOUNTPOINT" |
32 | 33 |
33 # Destroy this root partition if we've successfully switched. | 34 # Destroy this root partition if we've successfully switched. |
34 if [ "${POSTINST_RETURN_CODE}" = "0" ]; then | 35 if [ "${POSTINST_RETURN_CODE}" = "0" ]; then |
35 cgpt add -i "$((${ROOT_PART} - 1))" -P 0 -S 0 -T 0 "${DEV}" | 36 cgpt add -i "$((${ROOT_PART} - 1))" -P 0 -S 0 -T 0 "${DEV}" |
36 RC=$? | 37 if [ "$?" != "0" ]; then |
37 if [ "${RC}" != "0" ]; then | |
38 echo "Failed to run cgpt" | 38 echo "Failed to run cgpt" |
39 return 1 | 39 return 1 |
40 fi | 40 fi |
| 41 cgpt add -i "$((${OTHER_ROOT_PART} - 1))" -P 3 -S 1 -T 0 "${DEV}" |
| 42 if [ "$?" != "0" ]; then |
| 43 echo "Failed to run cgpt" |
| 44 return 1 |
| 45 fi |
41 fi | 46 fi |
42 | 47 |
43 exit $POSTINST_RETURN_CODE | 48 exit $POSTINST_RETURN_CODE |
OLD | NEW |