Index: src/platform/installer/chromeos-postinst |
diff --git a/src/platform/installer/chromeos-postinst b/src/platform/installer/chromeos-postinst |
index 456e7572200ca0a799f3627006ce65d5e1bc9b23..58cb5f3b19094e3f72746f293d56611473acbc27 100755 |
--- a/src/platform/installer/chromeos-postinst |
+++ b/src/platform/installer/chromeos-postinst |
@@ -13,11 +13,33 @@ |
INSTALL_ROOT=`dirname "$0"` |
INSTALL_DEV="$1" |
POSTCOMMIT="$2" |
+# Find whole disk device. |
+ROOT_DEV=${INSTALL_DEV%%[0-9]*} |
+NEW_PART_NUM=${INSTALL_DEV##*/*[a-z]} |
+ |
+case ${NEW_PART_NUM} in |
+ "3" ) |
+ BOOT_SLOT="A" |
+ ;; |
+ "5" ) |
+ BOOT_SLOT="B" |
+ ;; |
+ * ) |
+ # Not a valid boot location. |
+ echo "Not a valid target parition number: ${NEW_PART_NUM}" |
+ exit 1 |
+ ;; |
+esac |
if [ "$POSTCOMMIT" != "--postcommit" ]; then |
# Pre-commit. Returning an error here will prevent ever booting into the |
# installed system. |
+ echo "Postinst running" |
+ echo " Set boot target to ${INSTALL_DEV}: \ |
+Partition ${NEW_PART_NUM}, Slot ${BOOT_SLOT}" |
+ |
+ echo "Updating /boot/extlinux.conf target" |
# If the mount-point is read-write, update the bootloader |
# Only update extlinux.conf if $1 is non-empty |
if [ -n "$INSTALL_DEV" ]; then |
@@ -28,6 +50,27 @@ if [ "$POSTCOMMIT" != "--postcommit" ]; then |
"$INSTALL_ROOT"/boot/extlinux.conf || true |
fi |
+ echo "Updating grub target for EFI BIOS" |
+ # Set up grub.cfg |
+ ${INSTALL_ROOT}/usr/sbin/chromeos-setimage ${BOOT_SLOT} \ |
+ --dst=${ROOT_DEV} --run_as_root |
+ |
+ # Set up gpt boot selection for legacy devices. |
+ # flush linux caches; seems to be necessary |
+ sync |
+ echo 3 > /proc/sys/vm/drop_caches |
+ |
+ echo "Updating gpt PMBR target for legacy BIOS" |
+ # Configure the PMBR to boot the new image. |
+ # TODO(wfrichar): The current gpt tool requires a -b arg to specify the PMBR |
+ # bootcode. We don't want to change the code, so we have to extract it, then |
+ # put it back. We'll fix this RSN. |
+ |
+ # IMPORTANT NOTE: postinst is run by the previoulsy installed image |
+ # rather than the new image. So changes here need to be backwards compatible |
+ # with the old image's gpt binaries. |
+ dd if=${ROOT_DEV} bs=512 count=1 of=/tmp/oldpmbr.bin |
+ gpt -S boot -i $NEW_PART_NUM -b /tmp/oldpmbr.bin ${ROOT_DEV} 2>&1 |
else |
# Post-commit. At this point an unexpected reboot may boot the installed |
# system, but returning an error here will cause the updater to try to |