| Index: src/scripts/build_image
|
| diff --git a/src/scripts/build_image b/src/scripts/build_image
|
| index 4d05786608181c5e2010e8b5b558341d39a7b7e5..63558805f7127ab4cbc99d8dfc5ef1b98996ceb8 100755
|
| --- a/src/scripts/build_image
|
| +++ b/src/scripts/build_image
|
| @@ -87,6 +87,12 @@ if [ "$FLAGS_withdev" -eq "$FLAGS_TRUE" ]; then
|
| PRISTINE_IMAGE_NAME=chromiumos_base_image.bin
|
| DEVELOPER_IMAGE_NAME=chromiumos_image.bin
|
| fi
|
| +
|
| +# If we are creating a recovery image, rename pristine image
|
| +if [ "$FLAGS_recovery" -eq "$FLAGS_TRUE" ]; then
|
| + PRISTINE_IMAGE_NAME=recovery_image.bin
|
| +fi
|
| +
|
| OUTPUT_IMG=${FLAGS_to:-${OUTPUT_DIR}/${PRISTINE_IMAGE_NAME}}
|
|
|
| BOARD="${FLAGS_board}"
|
| @@ -193,71 +199,88 @@ developer_cleanup() {
|
| delete_prompt
|
| }
|
|
|
| -# Creates a new image based on $OUTPUT_IMG with additional developer packages.
|
| -create_developer_image() {
|
| +# Creates a modified image based on $OUTPUT_IMG with additional packages.
|
| +create_mod_image() {
|
| + local image_type=$1
|
| local root_fs_dir="${OUTPUT_DIR}/rootfs_dev"
|
| local root_fs_img="${OUTPUT_DIR}/rootfs_dev.image"
|
| - local output_img="${OUTPUT_DIR}/${DEVELOPER_IMAGE_NAME}"
|
| + local image_to_mount=${DEVELOPER_IMAGE_NAME}
|
| + local output_img="${OUTPUT_DIR}/${image_to_mount}"
|
|
|
| # Create stateful partition of the same size as the rootfs.
|
| local stateful_img="$OUTPUT_DIR/stateful_partition_dev.image"
|
| local stateful_dir="$OUTPUT_DIR/stateful_partition_dev"
|
| + local file_to_touch=".dev_mode"
|
|
|
| trap "developer_cleanup \"$root_fs_dir\" \"$stateful_dir\"" EXIT
|
|
|
| - # Mount a new copy of the base image.
|
| - echo "Creating developer image from base image $OUTPUT_IMG"
|
| - cp "$OUTPUT_IMG" "$output_img"
|
| - $SCRIPTS_DIR/mount_gpt_image.sh --from "$OUTPUT_DIR" \
|
| - --image "$DEVELOPER_IMAGE_NAME" -r "$root_fs_dir" -s "$stateful_dir"
|
| -
|
| - # Determine the root dir for developer packages.
|
| - local root_dev_dir="$root_fs_dir"
|
| - [ $FLAGS_statefuldev -eq $FLAGS_TRUE ] && \
|
| - root_dev_dir="$root_fs_dir/usr/local"
|
| + if [ "$image_type" == "dev" ]; then
|
| + # Mount a new copy of the base image.
|
| + echo "Creating developer image from base image $OUTPUT_IMG"
|
| + cp "$OUTPUT_IMG" "$output_img"
|
| + elif [ "$image_type" == "recovery" ]; then
|
| + image_to_mount=$PRISTINE_IMAGE_NAME
|
| + file_to_touch=".recovery_installer"
|
| + fi
|
|
|
| - # Install developer packages described in chromeos-dev.
|
| - sudo INSTALL_MASK="$INSTALL_MASK" emerge-${BOARD} \
|
| - --root="$root_dev_dir" --root-deps=rdeps \
|
| - --usepkgonly chromeos-dev $EMERGE_JOBS
|
| + $SCRIPTS_DIR/mount_gpt_image.sh --from "$OUTPUT_DIR" \
|
| + --image "$image_to_mount" -r "$root_fs_dir" -s "$stateful_dir"
|
| +
|
| + if [ "$image_type" == "dev" ]; then
|
| + # Determine the root dir for developer packages.
|
| + local root_dev_dir="$root_fs_dir"
|
| + [ $FLAGS_statefuldev -eq $FLAGS_TRUE ] && \
|
| + root_dev_dir="$root_fs_dir/usr/local"
|
| +
|
| + # Install developer packages described in chromeos-dev.
|
| + sudo INSTALL_MASK="$INSTALL_MASK" emerge-${BOARD} \
|
| + --root="$root_dev_dir" --root-deps=rdeps \
|
| + --usepkgonly chromeos-dev $EMERGE_JOBS
|
| + elif [ "$image_type" == "recovery" ]; then
|
| + # Install recovery installer
|
| + sudo emerge-${BOARD} --root=$root_fs_dir --usepkgonly \
|
| + --root-deps=rdeps --nodeps chromeos-recovery
|
| + fi
|
|
|
| # Re-run ldconfig to fix /etc/ldconfig.so.cache.
|
| sudo /sbin/ldconfig -r "$root_fs_dir"
|
|
|
| # Mark the image as a developer image (input to chromeos_startup).
|
| sudo mkdir -p "$root_fs_dir/root"
|
| - sudo touch "$root_fs_dir/root/.dev_mode"
|
| -
|
| - # Additional changes to developer image.
|
| -
|
| - # The ldd tool is a useful shell script but lives in glibc; just copy it.
|
| - sudo cp -a "$(which ldd)" "${root_dev_dir}/usr/bin"
|
| -
|
| - # TODO: Temporarily create fake xterm symlink until we do proper xinitrc
|
| - local aterm="$root_fs_dir/usr/local/bin/aterm"
|
| - if [[ -f "${aterm}" ]]; then
|
| - sudo chmod 0755 "$aterm"
|
| - sudo ln -s aterm "${root_fs_dir}/usr/local/bin/xterm"
|
| - fi
|
| -
|
| - # If vim is installed, then a vi symlink would probably help.
|
| - if [[ -x "${root_fs_dir}/usr/local/bin/vim" ]]; then
|
| - sudo ln -sf vim "${root_fs_dir}/usr/local/bin/vi"
|
| - fi
|
| -
|
| - # Check that the image has been correctly created. Only do it if not
|
| - # building a factory install image, as the INSTALL_MASK for it will
|
| - # make test_image fail.
|
| - if [[ $FLAGS_factory_install -eq ${FLAGS_FALSE} ]] ; then
|
| - "${SCRIPTS_DIR}/test_image" \
|
| - --root="$root_fs_dir" \
|
| - --target="$ARCH"
|
| + sudo touch "$root_fs_dir/root/$file_to_touch"
|
| +
|
| + if [ "$image_type" == "dev" ]; then
|
| + # Additional changes to developer image.
|
| +
|
| + # The ldd tool is a useful shell script but lives in glibc; just copy it.
|
| + sudo cp -a "$(which ldd)" "${root_dev_dir}/usr/bin"
|
| +
|
| + # TODO: Temporarily create fake xterm symlink until we do proper xinitrc
|
| + local aterm="$root_fs_dir/usr/local/bin/aterm"
|
| + if [[ -f "${aterm}" ]]; then
|
| + sudo chmod 0755 "$aterm"
|
| + sudo ln -s aterm "${root_fs_dir}/usr/local/bin/xterm"
|
| + fi
|
| +
|
| + # If vim is installed, then a vi symlink would probably help.
|
| + if [[ -x "${root_fs_dir}/usr/local/bin/vim" ]]; then
|
| + sudo ln -sf vim "${root_fs_dir}/usr/local/bin/vi"
|
| + fi
|
| +
|
| + # Check that the image has been correctly created. Only do it if not
|
| + # building a factory install image, as the INSTALL_MASK for it will
|
| + # make test_image fail.
|
| + if [[ $FLAGS_factory_install -eq ${FLAGS_FALSE} ]] ; then
|
| + "${SCRIPTS_DIR}/test_image" \
|
| + --root="$root_fs_dir" \
|
| + --target="$ARCH"
|
| + fi
|
| + echo "Developer image built and stored at $output_img"
|
| fi
|
|
|
| trap - EXIT
|
| $SCRIPTS_DIR/mount_gpt_image.sh -u -r "$root_fs_dir" -s "$stateful_dir"
|
| sudo rm -rf "$root_fs_dir" "$stateful_dir"
|
| - echo "Developer image built and stored at $output_img"
|
| }
|
|
|
| # ${DEV_IMAGE_ROOT} specifies the location of where developer packages will
|
| @@ -518,8 +541,12 @@ rmdir "${ROOT_FS_DIR}" "${STATEFUL_DIR}" "${ESP_DIR}"
|
|
|
| OUTSIDE_OUTPUT_DIR="../build/images/${FLAGS_board}/${IMAGE_SUBDIR}"
|
|
|
| +# Create a recovery image based on the chromium os base image
|
| +[ "$FLAGS_recovery" -eq "$FLAGS_TRUE" ] && create_mod_image "recovery"
|
| +trap - EXIT
|
| +
|
| # Create a developer image based on the chromium os base image
|
| -[ "$FLAGS_withdev" -eq "$FLAGS_TRUE" ] && create_developer_image
|
| +[ "$FLAGS_withdev" -eq "$FLAGS_TRUE" ] && create_mod_image "dev"
|
| trap - EXIT
|
|
|
| # be quiet again
|
| @@ -527,6 +554,9 @@ set +x
|
|
|
| echo "Done. Image created in ${OUTPUT_DIR}"
|
| echo "Chromium OS image created as $PRISTINE_IMAGE_NAME"
|
| +if [ "$FLAGS_recovery" -eq "$FLAGS_TRUE" ]; then
|
| + echo "Recovery image created as $PRISTINE_IMAGE_NAME"
|
| +fi
|
| if [ "$FLAGS_withdev" -eq "$FLAGS_TRUE" ]; then
|
| echo "Developer image created as $DEVELOPER_IMAGE_NAME"
|
| fi
|
|
|