mirror of
https://github.com/flatcar/scripts.git
synced 2025-11-25 04:21:54 +01:00
Fix race condition by using different symlinks for factory images.
Both the tests and archive_build read and write the latest symlink.
This CL fixes a race condition in archive_build by moving away from
using the latest symlink in archive_build.
BUG=chromium-os:18967
TEST=Run release cbuildbot archive_build on x86-mario-release.
Verify it completes successfully and that latest symlink
is unchanged now.
Change-Id: Ia32d20903f3ef74e360944fbabdd9834c0edb99a
Reviewed-on: http://gerrit.chromium.org/gerrit/5746
Reviewed-by: David James <davidjames@chromium.org>
Tested-by: David James <davidjames@chromium.org>
This commit is contained in:
parent
f984f20a3f
commit
4dd4c54ccb
@ -154,10 +154,12 @@ echo "archive to file: $ZIPFILE"
|
|||||||
mkdir -p "$OUTDIR"
|
mkdir -p "$OUTDIR"
|
||||||
|
|
||||||
# Modify image for test if flag set.
|
# Modify image for test if flag set.
|
||||||
|
CHROOT_IMAGE_DIR=$(reinterpret_path_for_chroot "$FLAGS_from")
|
||||||
if [ $FLAGS_test_mod -eq $FLAGS_TRUE ]; then
|
if [ $FLAGS_test_mod -eq $FLAGS_TRUE ]; then
|
||||||
echo "Modifying image for test"
|
echo "Modifying image for test"
|
||||||
./enter_chroot.sh $CHROOT_ENV -- ./mod_image_for_test.sh \
|
./enter_chroot.sh $CHROOT_ENV -- ./mod_image_for_test.sh \
|
||||||
--board $FLAGS_board --noinplace --yes
|
--board $FLAGS_board --noinplace --yes \
|
||||||
|
--image $CHROOT_IMAGE_DIR/$CHROMEOS_IMAGE_NAME
|
||||||
|
|
||||||
pushd "${FLAGS_chroot}/build/${FLAGS_board}/usr/local"
|
pushd "${FLAGS_chroot}/build/${FLAGS_board}/usr/local"
|
||||||
echo "Archiving autotest build artifacts"
|
echo "Archiving autotest build artifacts"
|
||||||
@ -172,8 +174,6 @@ fi
|
|||||||
|
|
||||||
# Modify for recovery
|
# Modify for recovery
|
||||||
if [ $FLAGS_official_build -eq $FLAGS_TRUE ]; then
|
if [ $FLAGS_official_build -eq $FLAGS_TRUE ]; then
|
||||||
BUILDVER="$(readlink ${IMAGES_DIR}/${FLAGS_board}/latest)"
|
|
||||||
CHROOT_IMAGE_DIR=/home/$USER/trunk/src/build/images/$FLAGS_board/$BUILDVER
|
|
||||||
./enter_chroot.sh $CHROOT_ENV -- ./mod_image_for_recovery.sh \
|
./enter_chroot.sh $CHROOT_ENV -- ./mod_image_for_recovery.sh \
|
||||||
--board $FLAGS_board --image $CHROOT_IMAGE_DIR/chromiumos_base_image.bin
|
--board $FLAGS_board --image $CHROOT_IMAGE_DIR/chromiumos_base_image.bin
|
||||||
fi
|
fi
|
||||||
@ -194,17 +194,8 @@ if [ $FLAGS_factory_test_mod -eq $FLAGS_TRUE ]; then
|
|||||||
# fail. You must explictly call replace and specify a unique name numerically
|
# fail. You must explictly call replace and specify a unique name numerically
|
||||||
# using build_attempt.
|
# using build_attempt.
|
||||||
./enter_chroot.sh $CHROOT_ENV -- ./build_image --board $FLAGS_board \
|
./enter_chroot.sh $CHROOT_ENV -- ./build_image --board $FLAGS_board \
|
||||||
--replace --noenable_rootfs_verification --build_attempt 4
|
--replace --noenable_rootfs_verification --build_attempt 4 \
|
||||||
|
--symlink factory_test --factory --test
|
||||||
./enter_chroot.sh $CHROOT_ENV -- ./mod_image_for_test.sh \
|
|
||||||
--board $FLAGS_board --yes --noinplace --factory
|
|
||||||
|
|
||||||
# Get the factory test 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.
|
|
||||||
FACTORY_DIR="$(readlink ${IMAGES_DIR}/${FLAGS_board}/latest)"
|
|
||||||
|
|
||||||
echo "Factory image dir: ${FACTORY_DIR}"
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Build differently sized shims. Currently only factory install shim is
|
# Build differently sized shims. Currently only factory install shim is
|
||||||
@ -220,22 +211,20 @@ if [ $FLAGS_factory_install_mod -eq $FLAGS_TRUE ]; then
|
|||||||
# fail. You must explictly call replace and specify a unique name numerically
|
# fail. You must explictly call replace and specify a unique name numerically
|
||||||
# using build_attempt.
|
# using build_attempt.
|
||||||
./enter_chroot.sh $CHROOT_ENV -- ./build_image --board $FLAGS_board \
|
./enter_chroot.sh $CHROOT_ENV -- ./build_image --board $FLAGS_board \
|
||||||
--factory_install --replace --build_attempt 7
|
--factory_install --replace --build_attempt 7 --symlink factory_shim
|
||||||
|
|
||||||
# Get the install shim dir: It is the newest build.
|
# Get the install shim dir: It is the newest factory_shim build.
|
||||||
# This is the output dir for the factory shim, the factory test and
|
SHIM_DIR="${IMAGES_DIR}/${FLAGS_board}/factory_shim"
|
||||||
# release images will remain in IMG_DIR, defined previously.
|
CHROOT_SHIM_DIR=$(reinterpret_path_for_chroot "${SHIM_DIR}")
|
||||||
SHIM_DIR="$(readlink ${IMAGES_DIR}/${FLAGS_board}/latest)"
|
|
||||||
|
|
||||||
# For ARM we should creat a netboot image.
|
# For ARM we should creat a netboot image.
|
||||||
# Only ARM has "uimg" uboot format kernels.
|
# Only ARM has "uimg" uboot format kernels.
|
||||||
# TODO(anush): We should have build infrastructure that can directly
|
# TODO(anush): We should have build infrastructure that can directly
|
||||||
# query architecture.
|
# query architecture.
|
||||||
if [ -f "${SYSROOT}/boot/vmlinux.uimg" ]; then
|
if [ -f "${SYSROOT}/boot/vmlinux.uimg" ]; then
|
||||||
./enter_chroot.sh $CHROOT_ENV -- ./make_netboot.sh --board $FLAGS_board
|
./enter_chroot.sh $CHROOT_ENV -- ./make_netboot.sh --board $FLAGS_board \
|
||||||
|
--image "$CHROOT_SHIM_DIR/factory_install_shim.bin"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
echo "Factory install shim dir: ${SHIM_DIR}"
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Zip the build
|
# Zip the build
|
||||||
@ -251,16 +240,7 @@ if [ $FLAGS_factory_test_mod -eq $FLAGS_TRUE ] || \
|
|||||||
# signing and packaging utilities need unpack_partitions.sh.
|
# signing and packaging utilities need unpack_partitions.sh.
|
||||||
echo "Compressing factory software"
|
echo "Compressing factory software"
|
||||||
pushd ..
|
pushd ..
|
||||||
[ -n "${SHIM_DIR}" ] && rm -f factory_shim && \
|
|
||||||
ln -s "${SHIM_DIR}" factory_shim
|
|
||||||
[ -n "${FACTORY_DIR}" ] && rm -f factory_test && \
|
|
||||||
ln -s "${FACTORY_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 |
|
FACTORY_MANIFEST=$(find factory_shim factory_test -follow -type f |
|
||||||
grep -E "(factory_image|factory_install|partition|netboot|hwid)")
|
grep -E "(factory_image|factory_install|partition|netboot|hwid)")
|
||||||
rm -f "${FACTORY_ZIPFILE}"
|
rm -f "${FACTORY_ZIPFILE}"
|
||||||
|
|||||||
@ -68,6 +68,8 @@ DEFINE_string verity_algorithm "sha1" \
|
|||||||
"Cryptographic hash algorithm used for kernel vboot. Default : sha1"
|
"Cryptographic hash algorithm used for kernel vboot. Default : sha1"
|
||||||
DEFINE_boolean standard_backdoor ${FLAGS_TRUE} \
|
DEFINE_boolean standard_backdoor ${FLAGS_TRUE} \
|
||||||
"Install standard backdoor credentials for testing"
|
"Install standard backdoor credentials for testing"
|
||||||
|
DEFINE_string symlink "latest" \
|
||||||
|
"Symlink name to use for this image."
|
||||||
|
|
||||||
# TODO(clchiou): Remove this flag after buildbot is fixed
|
# TODO(clchiou): Remove this flag after buildbot is fixed
|
||||||
DEFINE_boolean crosbug12352_arm_kernel_signing ${FLAGS_TRUE} \
|
DEFINE_boolean crosbug12352_arm_kernel_signing ${FLAGS_TRUE} \
|
||||||
@ -811,9 +813,10 @@ rmdir "${ROOT_FS_DIR}" "${STATEFUL_FS_DIR}" "${ESP_FS_DIR}"
|
|||||||
|
|
||||||
# Generating AU generator zip file to run outside chroot
|
# Generating AU generator zip file to run outside chroot
|
||||||
generate_au_zip || echo "Failed generating AU zip file - ignoring Error..."
|
generate_au_zip || echo "Failed generating AU zip file - ignoring Error..."
|
||||||
# Create a 'latest' link
|
|
||||||
rm -f ${FLAGS_output_root}/${BOARD}/latest
|
# Create a named symlink.
|
||||||
ln -s $(basename ${OUTPUT_DIR}) ${FLAGS_output_root}/${BOARD}/latest
|
LINK_NAME="${FLAGS_output_root}/${BOARD}/${FLAGS_symlink}"
|
||||||
|
ln -sfT $(basename ${OUTPUT_DIR}) ${LINK_NAME}
|
||||||
|
|
||||||
echo "Done. Image created in ${OUTPUT_DIR}"
|
echo "Done. Image created in ${OUTPUT_DIR}"
|
||||||
echo "Chromium OS image created as ${PRISTINE_IMAGE_NAME}"
|
echo "Chromium OS image created as ${PRISTINE_IMAGE_NAME}"
|
||||||
|
|||||||
@ -42,6 +42,7 @@ get_default_board
|
|||||||
|
|
||||||
DEFINE_string board "${DEFAULT_BOARD}" \
|
DEFINE_string board "${DEFAULT_BOARD}" \
|
||||||
"The board to build an image for."
|
"The board to build an image for."
|
||||||
|
DEFINE_string image "" "Path to the image to use"
|
||||||
|
|
||||||
# Parse command line.
|
# Parse command line.
|
||||||
FLAGS "$@" || exit 1
|
FLAGS "$@" || exit 1
|
||||||
@ -52,10 +53,15 @@ set -e
|
|||||||
SYSROOT="${GCLIENT_ROOT}/chroot/build/${FLAGS_board}"
|
SYSROOT="${GCLIENT_ROOT}/chroot/build/${FLAGS_board}"
|
||||||
# build_image artifact output.
|
# build_image artifact output.
|
||||||
IMAGES_DIR="${CHROOT_TRUNK_DIR}/src/build/images"
|
IMAGES_DIR="${CHROOT_TRUNK_DIR}/src/build/images"
|
||||||
# Canonical install shim name.
|
|
||||||
INSTALL_SHIM="factory_install_shim.bin"
|
|
||||||
|
|
||||||
cd ${IMAGES_DIR}/${FLAGS_board}/latest
|
if [ -n "${FLAGS_image}" ]; then
|
||||||
|
cd $(dirname "${FLAGS_image}")
|
||||||
|
INSTALL_SHIM=$(basename "${FLAGS_image}")
|
||||||
|
else
|
||||||
|
cd ${IMAGES_DIR}/${FLAGS_board}/latest
|
||||||
|
# Canonical install shim name.
|
||||||
|
INSTALL_SHIM="factory_install_shim.bin"
|
||||||
|
fi
|
||||||
|
|
||||||
if [ ! -f "${INSTALL_SHIM}" ]; then
|
if [ ! -f "${INSTALL_SHIM}" ]; then
|
||||||
echo "Cannot locate ${INSTALL_SHIM}, nothing to netbootify!"
|
echo "Cannot locate ${INSTALL_SHIM}, nothing to netbootify!"
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user