Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2632)

Unified Diff: src/platform/installer/chromeos-postinst

Issue 2132008: Update factory installer, factory test (Closed) Base URL: ssh://git@chromiumos-git/chromeos
Patch Set: integrate autupdate server changes Created 10 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « src/platform/init/chromeos_startup ('k') | src/platform/installer/chromeos-setimage » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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
« no previous file with comments | « src/platform/init/chromeos_startup ('k') | src/platform/installer/chromeos-setimage » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698