| Index: src/scripts/build_image
|
| diff --git a/src/scripts/build_image b/src/scripts/build_image
|
| index 272ed424d9e3a336746b727a3363b7ce550676eb..4723ed22be3729f442f2a452b1ad9a2b98f2f789 100755
|
| --- a/src/scripts/build_image
|
| +++ b/src/scripts/build_image
|
| @@ -67,7 +67,16 @@ IMAGE_SUBDIR="${CHROMEOS_VERSION_STRING}-a${FLAGS_build_attempt}"
|
| OUTPUT_DIR="${FLAGS_output_root}/${FLAGS_board}/${IMAGE_SUBDIR}"
|
| ROOT_FS_DIR="${OUTPUT_DIR}/rootfs"
|
| ROOT_FS_IMG="${OUTPUT_DIR}/rootfs.image"
|
| -OUTPUT_IMG=${FLAGS_to:-${OUTPUT_DIR}/chromiumos_image.bin}
|
| +
|
| +# If we are creating a developer image, also create a pristine image with a
|
| +# different name.
|
| +DEVELOPER_IMAGE_NAME=
|
| +PRISTINE_IMAGE_NAME=chromiumos_image.bin
|
| +if [ "$FLAGS_withdev" -eq "$FLAGS_TRUE" ]; then
|
| + PRISTINE_IMAGE_NAME=chromiumos_base_image.bin
|
| + DEVELOPER_IMAGE_NAME=chromiumos_image.bin
|
| +fi
|
| +OUTPUT_IMG=${FLAGS_to:-${OUTPUT_DIR}/${PRISTINE_IMAGE_NAME}}
|
|
|
| BOARD="${FLAGS_board}"
|
| BOARD_ROOT="${FLAGS_build_root}/${BOARD}"
|
| @@ -163,6 +172,68 @@ delete_prompt() {
|
| fi
|
| }
|
|
|
| +# $1 - Directory where developer rootfs is mounted.
|
| +# $2 - Directory where developer stateful_partition is mounted.
|
| +developer_cleanup() {
|
| + "$SCRIPTS_DIR/mount_gpt_image.sh" -u -r "$1" -s "$2"
|
| + delete_prompt
|
| +}
|
| +
|
| +# Creates a new image based on $OUTPUT_IMG with additional developer packages.
|
| +create_developer_image() {
|
| + 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}"
|
| +
|
| + # 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"
|
| +
|
| + 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"
|
| +
|
| + # 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
|
| +
|
| + # 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"
|
| +
|
| + # 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.
|
| + "${SCRIPTS_DIR}/test_image" \
|
| + --root="$root_fs_dir" \
|
| + --target="$ARCH"
|
| +
|
| + trap - EXIT
|
| + $SCRIPTS_DIR/mount_gpt_image.sh -u -r "$root_fs_dir" -s "$stateful_dir"
|
| + echo "Developer image built and stored at $output_img"
|
| +}
|
| +
|
| # ${DEV_IMAGE_ROOT} specifies the location of where developer packages will
|
| # be installed on the stateful dir. On a Chromium OS system, this will
|
| # translate to /usr/local
|
| @@ -302,24 +373,6 @@ sudo INSTALL_MASK="$INSTALL_MASK" emerge-${BOARD} \
|
| --root="$ROOT_FS_DIR" --root-deps=rdeps \
|
| --usepkgonly chromeos $EMERGE_JOBS
|
|
|
| -# Determine the root dir for development packages.
|
| -ROOT_DEV_DIR="$ROOT_FS_DIR"
|
| -[ $FLAGS_statefuldev -eq $FLAGS_TRUE ] && ROOT_DEV_DIR="$ROOT_FS_DIR/usr/local"
|
| -
|
| -# Install development packages.
|
| -if [[ $FLAGS_withdev -eq $FLAGS_TRUE ]] ; then
|
| - sudo INSTALL_MASK="$INSTALL_MASK" emerge-${BOARD} \
|
| - --root="$ROOT_DEV_DIR" --root-deps=rdeps \
|
| - --usepkgonly chromeos-dev $EMERGE_JOBS
|
| -
|
| - # TODO(sosa@chromium.org) - Re-hide under statefuldev after switch
|
| - # Flag will mount /usr/local on target device
|
| - sudo mkdir -p "$ROOT_FS_DIR/root"
|
| -
|
| - # 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"
|
| -fi
|
| -
|
| # Extract the kernel from the root filesystem for use by the GPT image. Legacy
|
| # BIOS will use the kernel in the rootfs (via syslinux), Chrome OS BIOS will
|
| # use the kernel partition.
|
| @@ -361,15 +414,6 @@ menuentry "local image B" {
|
|
|
| EOF
|
|
|
| -# By default, dev mode should be activated for either development builds or
|
| -# test builds.
|
| -if [[ $FLAGS_withdev -eq $FLAGS_TRUE ]] ; then
|
| - sudo touch "$ROOT_FS_DIR/root/.dev_mode"
|
| -
|
| - # Re-run ldconfig to fix /etc/ldconfig.so.cache.
|
| - sudo /sbin/ldconfig -r "$ROOT_FS_DIR"
|
| -fi
|
| -
|
| # Perform any customizations on the root file system that are needed.
|
| "${SCRIPTS_DIR}/customize_rootfs" \
|
| --root="$ROOT_FS_DIR" \
|
| @@ -408,11 +452,18 @@ rm -f "${ROOT_FS_IMG}" "${STATEFUL_IMG}" "${OUTPUT_DIR}/vmlinuz.image" \
|
| rmdir "${ROOT_FS_DIR}" "${STATEFUL_DIR}" "${ESP_DIR}"
|
|
|
| OUTSIDE_OUTPUT_DIR="../build/images/${FLAGS_board}/${IMAGE_SUBDIR}"
|
| +
|
| +# Create a developer image based on the chromium os base image
|
| +[ "$FLAGS_withdev" -eq "$FLAGS_TRUE" ] && create_developer_image
|
| +trap - EXIT
|
| +
|
| echo "Done. Image created in ${OUTPUT_DIR}"
|
| +echo "Chromium OS image created as $PRISTINE_IMAGE_NAME"
|
| +if [ "$FLAGS_withdev" -eq "$FLAGS_TRUE" ]; then
|
| + echo "Developer image created as $DEVELOPER_IMAGE_NAME"
|
| +fi
|
| echo "To copy to USB keyfob, OUTSIDE the chroot, do something like:"
|
| echo " ./image_to_usb.sh --from=${OUTSIDE_OUTPUT_DIR} --to=/dev/sdX"
|
| echo "To convert to VMWare image, OUTSIDE the chroot, do something like:"
|
| echo " ./image_to_vmware.sh --from=${OUTSIDE_OUTPUT_DIR}"
|
| echo "from the scripts directory where you entered the chroot."
|
| -
|
| -trap - EXIT
|
|
|