mirror of
https://github.com/flatcar/scripts.git
synced 2026-05-04 11:51:14 +02:00
Added --preserve option and logic.
Other changes: - Added update_base_packages() method. - Fix a get_latest_image.sh problem when the image does not already exist. - Cleanup method invocations, and remove OUTPUT_IMG global variable. - Add kernel testing logic back (it was accidentally deleted in an earlier patch.) TEST=Built regular image. Updated old image to contain new packages. BUG=none Patch by: Don Garrett <dgarrett@chromium.org> (Tweaked by me to address review feedback.) Review URL: http://codereview.chromium.org/2857020
This commit is contained in:
parent
40551cd9ca
commit
868d7bb6b9
103
build_image
103
build_image
@ -48,6 +48,9 @@ DEFINE_integer rootfs_partition_size 1024 \
|
||||
"rootfs parition size in MBs."
|
||||
DEFINE_integer rootfs_size 720 \
|
||||
"rootfs filesystem size in MBs."
|
||||
DEFINE_boolean preserve ${FLAGS_FALSE} \
|
||||
"Attempt to preserve the previous build image if one can be found (unstable, \
|
||||
kernel/firmware not updated)"
|
||||
|
||||
# Parse command line.
|
||||
FLAGS "$@" || exit 1
|
||||
@ -94,7 +97,8 @@ if [ "${FLAGS_withdev}" -eq "${FLAGS_TRUE}" ]; then
|
||||
DEVELOPER_IMAGE_NAME=chromiumos_image.bin
|
||||
fi
|
||||
|
||||
OUTPUT_IMG=${FLAGS_to:-${OUTPUT_DIR}/${PRISTINE_IMAGE_NAME}}
|
||||
PRISTINE_IMG="${OUTPUT_DIR}/${PRISTINE_IMAGE_NAME}"
|
||||
DEVELOPER_IMG="${OUTPUT_DIR}/${DEVELOPER_IMAGE_NAME}"
|
||||
|
||||
BOARD="${FLAGS_board}"
|
||||
BOARD_ROOT="${FLAGS_build_root}/${BOARD}"
|
||||
@ -168,6 +172,9 @@ if [[ -e "${OUTPUT_DIR}" ]]; then
|
||||
fi
|
||||
fi
|
||||
|
||||
# Find previous build, if any...
|
||||
PREVIOUS_DIR=$($SCRIPTS_DIR/get_latest_image.sh --board="$BOARD")
|
||||
|
||||
cleanup_rootfs_loop() {
|
||||
sudo umount -d "${ROOT_FS_DIR}"
|
||||
}
|
||||
@ -232,7 +239,7 @@ update_dev_packages() {
|
||||
trap "mount_gpt_cleanup \"${ROOT_FS_DIR}\" \"${STATEFUL_FS_DIR}\"" EXIT
|
||||
|
||||
${SCRIPTS_DIR}/mount_gpt_image.sh --from "${OUTPUT_DIR}" \
|
||||
--image "$( basename ${image_name} )" -r "${ROOT_FS_DIR}" \
|
||||
--image "${image_name}" -r "${ROOT_FS_DIR}" \
|
||||
-s "${STATEFUL_FS_DIR}"
|
||||
|
||||
# Determine the root dir for developer packages.
|
||||
@ -243,7 +250,14 @@ update_dev_packages() {
|
||||
# Install developer packages described in chromeos-dev.
|
||||
sudo INSTALL_MASK="${INSTALL_MASK}" ${EMERGE_BOARD_CMD} \
|
||||
--root="${root_dev_dir}" --root-deps=rdeps \
|
||||
--usepkg chromeos-dev ${EMERGE_JOBS}
|
||||
--usepkg -uDNv chromeos-dev ${EMERGE_JOBS}
|
||||
|
||||
if [[ $FLAGS_preserve -eq ${FLAGS_TRUE} ]] ; then
|
||||
# Clean out unused packages
|
||||
sudo INSTALL_MASK="${INSTALL_MASK}" ${EMERGE_BOARD_CMD} \
|
||||
--root="${ROOT_FS_DIR}" --root-deps=rdeps \
|
||||
--usepkg --depclean ${EMERGE_JOBS}
|
||||
fi
|
||||
|
||||
# Re-run ldconfig to fix /etc/ldconfig.so.cache.
|
||||
sudo /sbin/ldconfig -r "${ROOT_FS_DIR}"
|
||||
@ -273,13 +287,45 @@ update_dev_packages() {
|
||||
echo "Developer image built and stored at ${image_name}"
|
||||
|
||||
trap - EXIT
|
||||
${SCRIPTS_DIR}/mount_gpt_image.sh -u -r "${ROOT_FS_DIR}" -s "${STATEFUL_FS_DIR}"
|
||||
${SCRIPTS_DIR}/mount_gpt_image.sh -u -r "${ROOT_FS_DIR}" \
|
||||
-s "${STATEFUL_FS_DIR}"
|
||||
}
|
||||
|
||||
# Update the base package on an existing image.
|
||||
update_base_packages() {
|
||||
local image_name=$1
|
||||
|
||||
echo "Updating base packages on ${image_name}"
|
||||
|
||||
# Create stateful partition of the same size as the rootfs.
|
||||
trap "mount_gpt_cleanup \"${ROOT_FS_DIR}\" \"${STATEFUL_FS_DIR}\"" EXIT
|
||||
|
||||
${SCRIPTS_DIR}/mount_gpt_image.sh --from "${OUTPUT_DIR}" \
|
||||
--image "${image_name}" -r "${ROOT_FS_DIR}" \
|
||||
-s "${STATEFUL_FS_DIR}"
|
||||
|
||||
# Emerge updated packages, exactly like when creating base image
|
||||
sudo INSTALL_MASK="${INSTALL_MASK}" ${EMERGE_BOARD_CMD} \
|
||||
--root="${ROOT_FS_DIR}" --root-deps=rdeps \
|
||||
--usepkg -uDNv chromeos ${EMERGE_JOBS}
|
||||
|
||||
# Clean out unused packages
|
||||
sudo INSTALL_MASK="${INSTALL_MASK}" ${EMERGE_BOARD_CMD} \
|
||||
--root="${ROOT_FS_DIR}" --root-deps=rdeps \
|
||||
--usepkg --depclean ${EMERGE_JOBS}
|
||||
|
||||
trap - EXIT
|
||||
${SCRIPTS_DIR}/mount_gpt_image.sh -u -r "${ROOT_FS_DIR}" \
|
||||
-s "${STATEFUL_FS_DIR}"
|
||||
}
|
||||
|
||||
create_base_image() {
|
||||
local image_name=$1
|
||||
|
||||
trap "cleanup && delete_prompt" EXIT
|
||||
|
||||
UUID=$(uuidgen)
|
||||
|
||||
# Create and format the root file system.
|
||||
|
||||
# Check for loop device before creating image.
|
||||
@ -302,7 +348,6 @@ create_base_image() {
|
||||
sudo mkfs.ext3 "${LOOP_DEV}"
|
||||
|
||||
# Tune and mount rootfs.
|
||||
UUID=$(uuidgen)
|
||||
DISK_LABEL="C-KEYFOB"
|
||||
sudo tune2fs -L "${DISK_LABEL}" -U "${UUID}" -c 0 -i 0 "${LOOP_DEV}"
|
||||
sudo mount "${LOOP_DEV}" "${ROOT_FS_DIR}"
|
||||
@ -470,7 +515,16 @@ EOF
|
||||
--arm_extra_bootargs="${FLAGS_arm_extra_bootargs}" \
|
||||
--rootfs_partition_size=${FLAGS_rootfs_partition_size} \
|
||||
"${OUTPUT_DIR}" \
|
||||
"${OUTPUT_IMG}"
|
||||
"${OUTPUT_DIR}/${image_name}"
|
||||
|
||||
trap - EXIT
|
||||
|
||||
# FIXME: only signing things for x86 right now.
|
||||
if [[ "${ARCH}" = "x86" ]]; then
|
||||
# Verify the final image.
|
||||
load_kernel_test "${OUTPUT_DIR}/${image_name}" \
|
||||
"${OUTPUT_DIR}/key_alg8.vbpubk"
|
||||
fi
|
||||
}
|
||||
|
||||
# Create the output directory.
|
||||
@ -479,22 +533,35 @@ mkdir -p "${ROOT_FS_DIR}"
|
||||
mkdir -p "${STATEFUL_FS_DIR}"
|
||||
mkdir -p "${ESP_FS_DIR}"
|
||||
|
||||
create_base_image ${OUTPUT_DIR}/${PRISTINE_IMAGE_NAME}
|
||||
# Preserve old images by copying them forward for --preserve.
|
||||
if [[ $FLAGS_preserve -eq ${FLAGS_TRUE} ]] ; then
|
||||
if [[ -f ${PREVIOUS_DIR}/${PRISTINE_IMAGE_NAME} ]] ; then
|
||||
# Copy forward pristine image, and associated files
|
||||
cp ${PREVIOUS_DIR}/*.sh ${PREVIOUS_DIR}/config.txt ${OUTPUT_DIR}
|
||||
cp ${PREVIOUS_DIR}/${PRISTINE_IMAGE_NAME} ${OUTPUT_DIR}
|
||||
|
||||
# Copy forward the developer image, if we already copied forward the base.
|
||||
if [[ ${FLAGS_withdev} -eq ${FLAGS_TRUE} ]] && \
|
||||
[[ -f ${PREVIOUS_DIR}/${DEVELOPER_IMAGE_NAME} ]] ; then
|
||||
cp ${PREVIOUS_DIR}/${DEVELOPER_IMAGE_NAME} ${OUTPUT_DIR}
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
||||
if [[ -f ${PRISTINE_IMG} ]] ; then
|
||||
update_base_packages ${PRISTINE_IMAGE_NAME}
|
||||
else
|
||||
create_base_image ${PRISTINE_IMAGE_NAME}
|
||||
fi
|
||||
|
||||
# Create a developer image based on the chromium os base image.
|
||||
if [ "${FLAGS_withdev}" -eq "${FLAGS_TRUE}" ] ; then
|
||||
echo "Creating developer image from base image ${OUTPUT_IMG}"
|
||||
cp ${OUTPUT_DIR}/${PRISTINE_IMAGE_NAME} ${OUTPUT_DIR}/${DEVELOPER_IMAGE_NAME}
|
||||
update_dev_packages ${OUTPUT_DIR}/${DEVELOPER_IMAGE_NAME}
|
||||
fi
|
||||
if [[ ! -f ${DEVELOPER_IMG} ]] ; then
|
||||
echo "Creating developer image from base image ${PRISTINE_IMAGE_NAME}"
|
||||
cp ${PRISTINE_IMG} ${DEVELOPER_IMG}
|
||||
fi
|
||||
|
||||
trap - EXIT
|
||||
|
||||
# FIXME: only signing things for x86 right now.
|
||||
if [[ "${ARCH}" = "x86" ]]; then
|
||||
# Verify the final image.
|
||||
# key_alg8.vbpubk is generated by build_kernel_image.sh --keep_work
|
||||
load_kernel_test "${OUTPUT_IMG}" "${OUTPUT_DIR}/key_alg8.vbpubk"
|
||||
update_dev_packages ${DEVELOPER_IMAGE_NAME}
|
||||
fi
|
||||
|
||||
# Clean up temporary files.
|
||||
|
||||
@ -26,6 +26,10 @@ if [ -z "$FLAGS_board" ] ; then
|
||||
fi
|
||||
|
||||
IMAGES_DIR="${DEFAULT_BUILD_ROOT}/images/${FLAGS_board}"
|
||||
|
||||
# If there are no images, return nothing
|
||||
[ -d $IMAGES_DIR ] || exit 0
|
||||
|
||||
# Default to the most recent image
|
||||
DEFAULT_FROM="${IMAGES_DIR}/`ls -t $IMAGES_DIR | head -1`"
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user