Index: archive_build.sh |
diff --git a/archive_build.sh b/archive_build.sh |
index 7f7e53a3d48d8d942b4c5a0332a144ca47736e57..64a4ee4093a0f6c65b13f91726784e036a5f87e3 100755 |
--- a/archive_build.sh |
+++ b/archive_build.sh |
@@ -58,20 +58,26 @@ DEFAULT_USED= |
# Reset "default" FLAGS_from based on passed-in board if not set on cmd-line |
if [ "$FLAGS_from" = "$DEFAULT_FROM" ] |
then |
- FLAGS_from="${IMAGES_DIR}/$FLAGS_board/$(ls -t1 \ |
- $IMAGES_DIR/$FLAGS_board 2>&-| head -1)" |
+ # Keep the directory name of the current image set (*.bin). |
+ IMG_DIR="$(readlink ${IMAGES_DIR}/${FLAGS_board}/latest)" |
+ FLAGS_from="${IMAGES_DIR}/${FLAGS_board}/${IMG_DIR}" |
DEFAULT_USED=1 |
fi |
# Die on any errors. |
set -e |
-if [ -z $DEFAULT_USED ] && [ $FLAGS_test_mod -eq $FLAGS_TRUE ] |
+if [ -z $DEFAULT_USED ] |
then |
- echo "test_mod requires that the default from path be used." |
- echo "If non default behavior is desired, run mod_image_for_test manually" |
- echo "re-run archive build without test_mod" |
- exit 1 |
+ if [ $FLAGS_test_mod -eq $FLAGS_TRUE ] || \ |
+ [ $FLAGS_factory_install_mod -eq $FLAGS_TRUE ] || \ |
+ [ $FLAGS_factory_test_mod -eq $FLAGS_TRUE ] |
+ then |
+ echo "test_mod requires that the default from path be used." |
+ echo "If non default behavior is desired, run mod_image_for_test manually" |
+ echo "re-run archive build without test_mod" |
+ exit 1 |
+ fi |
fi |
if [ ! -d "$FLAGS_from" ] |
@@ -152,19 +158,12 @@ then |
"--factory" |
fi |
-if [ $FLAGS_factory_install_mod -eq $FLAGS_TRUE ] |
-then |
- echo "Modifying image for factory install" |
- do_chroot_mod "${FLAGS_from}/chromiumos_factory_install_image.bin" \ |
- "--factory_install" |
-fi |
- |
# Modify for recovery |
if [ $FLAGS_official_build -eq $FLAGS_TRUE ] |
then |
- BUILDVER=$(ls -t1 $IMAGES_DIR/$FLAGS_board 2>&-| head -1) |
- CHROOT_IMAGE_DIR=/home/$USER/trunk/src/build/images/$FLAGS_board/$BUILDVER |
- ./enter_chroot.sh -- ./mod_image_for_recovery.sh --board $FLAGS_board \ |
+ BUILDVER="$(readlink ${IMAGES_DIR}/${FLAGS_board}/latest)" |
+ CHROOT_IMAGE_DIR=/home/$USER/trunk/src/build/images/$FLAGS_board/$BUILDVER |
+ ./enter_chroot.sh -- ./mod_image_for_recovery.sh --board $FLAGS_board \ |
--image $CHROOT_IMAGE_DIR/chromiumos_base_image.bin |
fi |
@@ -173,6 +172,31 @@ if [ $FLAGS_test_mod -eq $FLAGS_TRUE ] ; then |
rm -f ${SRC_IMAGE} |
fi |
+# Build differently sized shims. Currently only factory install shim is |
+# supported, TODO(tgao): Add developer shim. |
+if [ $FLAGS_factory_install_mod -eq $FLAGS_TRUE ] |
+then |
+ echo "Building factory install shim." |
+ # HACK: The build system can't currently handle more than one image size |
+ # at a time. Therefor eit's necessary to do another round of build after |
+ # archiving the original build. This should be fixed in Chromite. |
+ |
+ # HACK: cbuild has a special case when running on chrome-bot that |
+ # zeroes out the current revision, which makes calling build_image directly |
+ # fail. You must explictly call replace and specify a unique name numerically |
+ # using build_attempt. |
+ ./enter_chroot.sh -- ./build_image --board $FLAGS_board --factory_install \ |
+ --replace --build_attempt 7 |
+ |
+ # Get the install shim dir: It is the newest build. |
+ # This is the output dir for the factory shim, the factory test and |
+ # release images will remain in IMG_DIR, defined previously. |
+ SHIM_DIR="$(readlink ${IMAGES_DIR}/${FLAGS_board}/latest)" |
+ |
+ echo "Factory image dir: ${IMG_DIR}" |
+ echo "Factory install shim dir: ${SHIM_DIR}" |
+fi |
+ |
# Zip the build |
echo "Compressing and archiving build..." |
cd "$FLAGS_from" |
@@ -182,8 +206,23 @@ zip -r "${ZIPFILE}" ${MANIFEST} |
if [ $FLAGS_factory_test_mod -eq $FLAGS_TRUE ] || \ |
[ $FLAGS_factory_install_mod -eq $FLAGS_TRUE ] |
then |
- FACTORY_MANIFEST=`ls | grep factory` |
- zip -r "${FACTORY_ZIPFILE}" ${FACTORY_MANIFEST} |
+ # We need to have directory structure for factory package, as |
+ # signing and packaging utilities need unpack_partitions.sh. |
+ echo "Compressing factory software" |
+ pushd .. |
+ [ -n "${SHIM_DIR}" ] && rm -f factory_shim && ln -s "${SHIM_DIR}" factory_shim |
+ [ -n "${IMG_DIR}" ] && rm -f factory_test && ln -s "${IMG_DIR}" factory_test |
+ |
+ # Restore "latest" status to the original image. |
+ # The "latest" symlink and latest timestamp are used extensively |
+ # throughout the build scripts rather than explicitly specifying an image. |
+ touch "${IMG_DIR}" |
+ [ -n "${IMG_DIR}" ] && rm -f latest && ln -s "${IMG_DIR}" latest |
+ FACTORY_MANIFEST=`find factory_shim factory_test -follow \ |
+ -type f | grep -E "(factory_image|factory_install|partition)"` |
+ zip "${FACTORY_ZIPFILE}" ${FACTORY_MANIFEST} |
+ echo "Zipped" |
+ popd |
chmod 644 "${FACTORY_ZIPFILE}" |
fi |
cd - |