Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(123)

Side by Side Diff: build_image

Issue 3140028: Better build_image for factory install (Closed) Base URL: ssh://gitrw.chromium.org/crosutils.git
Patch Set: add quotes Created 10 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 #!/bin/bash 1 #!/bin/bash
2 2
3 # Copyright (c) 2009 The Chromium OS Authors. All rights reserved. 3 # Copyright (c) 2009 The Chromium OS Authors. All rights reserved.
4 # Use of this source code is governed by a BSD-style license that can be 4 # Use of this source code is governed by a BSD-style license that can be
5 # found in the LICENSE file. 5 # found in the LICENSE file.
6 6
7 # Script to build a bootable keyfob-based chromeos system image from within 7 # Script to build a bootable keyfob-based chromeos system image from within
8 # a chromiumos setup. This assumes that all needed packages have been built into 8 # a chromiumos setup. This assumes that all needed packages have been built into
9 # the given target's root with binary packages turned on. This script will 9 # the given target's root with binary packages turned on. This script will
10 # build the Chrome OS image using only pre-built binary packages. 10 # build the Chrome OS image using only pre-built binary packages.
(...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after
89 # Only now can we die on error. shflags functions leak non-zero error codes, 89 # Only now can we die on error. shflags functions leak non-zero error codes,
90 # so will die prematurely if 'set -e' is specified before now. 90 # so will die prematurely if 'set -e' is specified before now.
91 set -e 91 set -e
92 92
93 if [ -z "${FLAGS_board}" ] ; then 93 if [ -z "${FLAGS_board}" ] ; then
94 error "--board is required." 94 error "--board is required."
95 exit 1 95 exit 1
96 fi 96 fi
97 97
98 # Verify user didn't specify incompatible flags for dev install shim 98 # Verify user didn't specify incompatible flags for dev install shim
99 if [ ${FLAGS_factory_install} -eq ${FLAGS_TRUE} ] && 99 if [ "${FLAGS_factory_install}" -eq "${FLAGS_TRUE}" ] &&
100 [ ${FLAGS_dev_install} -eq ${FLAGS_TRUE} ] ; then 100 [ "${FLAGS_dev_install}" -eq "${FLAGS_TRUE}" ] ; then
101 error "Incompatible flags: --factory_install and --dev_install cannot be \ 101 die "Incompatible flags: --factory_install and --dev_install cannot be \
102 both set to True. Please specify one or none." 102 both set to True. Please specify one or none."
103 exit 1
104 fi 103 fi
105 104
106 INSTALL_MASK="" 105 INSTALL_MASK=""
107 if [ ${FLAGS_installmask} -eq ${FLAGS_TRUE} ] ; then 106 if [ "${FLAGS_installmask}" -eq "${FLAGS_TRUE}" ] ; then
108 INSTALL_MASK="${DEFAULT_INSTALL_MASK}" 107 INSTALL_MASK="${DEFAULT_INSTALL_MASK}"
109 fi 108 fi
110 109
111 # Reduce the size of factory install shim. 110 # Reduce the size of factory install shim.
112 if [ ${FLAGS_factory_install} -eq ${FLAGS_TRUE} ] || 111 if [ "${FLAGS_factory_install}" -eq "${FLAGS_TRUE}" ] ||
113 [ ${FLAGS_dev_install} -eq ${FLAGS_TRUE} ] ; then 112 [ "${FLAGS_dev_install}" -eq "${FLAGS_TRUE}" ] ; then
114 # Disable --withdev flag when --*_install is set to True. Otherwise, the 113 # Disable --withdev flag when --*_install is set to True. Otherwise, the
115 # dev image produced will be based on install shim, rather than a pristine 114 # dev image produced will be based on install shim, rather than a pristine
116 # image 115 # image
117 if [ ${FLAGS_withdev} -eq ${FLAGS_TRUE} ]; then 116 if [ "${FLAGS_withdev}" -eq "${FLAGS_TRUE}" ]; then
118 info "Incompatible flags: --withdev and --dev_install or --factory_install \ 117 info "Incompatible flags: --withdev and --dev_install or --factory_install \
119 cannot be both set to True. Reset --withdev to False." 118 cannot be both set to True. Reset --withdev to False."
120 FLAGS_withdev=${FLAGS_FALSE} 119 FLAGS_withdev=${FLAGS_FALSE}
121 fi 120 fi
122 121
123 # TODO: Build a separated ebuild for the install shim to reduce size. 122 # TODO: Build a separated ebuild for the install shim to reduce size.
124 INSTALL_MASK="${INSTALL_MASK} ${FACTORY_INSTALL_MASK}" 123 INSTALL_MASK="${INSTALL_MASK} ${FACTORY_INSTALL_MASK}"
125 124
126 info "Fixing the rootfs size at 300 MiB for install shim" 125 info "Fixing the rootfs size at 300 MiB for install shim"
127 FLAGS_rootfs_size=280 126 FLAGS_rootfs_size=280
(...skipping 10 matching lines...) Expand all
138 137
139 EMERGE_BOARD_CMD="emerge-${FLAGS_board}" 138 EMERGE_BOARD_CMD="emerge-${FLAGS_board}"
140 if [ "${FLAGS_fast}" -eq "${FLAGS_TRUE}" ]; then 139 if [ "${FLAGS_fast}" -eq "${FLAGS_TRUE}" ]; then
141 echo "Using alternate emerge" 140 echo "Using alternate emerge"
142 EMERGE_BOARD_CMD="${SCRIPTS_DIR}/parallel_emerge --board=${FLAGS_board}" 141 EMERGE_BOARD_CMD="${SCRIPTS_DIR}/parallel_emerge --board=${FLAGS_board}"
143 fi 142 fi
144 143
145 # Determine build version. 144 # Determine build version.
146 . "${SCRIPTS_DIR}/chromeos_version.sh" 145 . "${SCRIPTS_DIR}/chromeos_version.sh"
147 146
147 # Configure extra USE or packages for this type of build.
148 EXTRA_PACKAGES=""
149 EXTRA_USE=""
150 if [ "${FLAGS_factory_install}" -eq "${FLAGS_TRUE}" ] ; then
151 # Factory install needs to have the kernel initrmafs enabled,
152 # and the factory installer added.
153 EXTRA_PACKAGES="chromeos-base/chromeos-factoryinstall"
154 EXTRA_USE="initramfs"
155 fi
156
157 # Freshen kernel with correct USE flags. This is a noop if we have
158 # the right kernel prebuilt. Factory install uses USE="initramfs".
159 # We don't allow building from source with the image as a target,
160 # and it's not possible to store prebuilts for the same package
161 # with different use flags.
162 USE="${EXTRA_USE}" emerge-${FLAGS_board} \
163 -uNDvg --binpkg-respect-use=y kernel
164
148 # Use canonical path since some tools (e.g. mount) do not like symlinks. 165 # Use canonical path since some tools (e.g. mount) do not like symlinks.
149 # Append build attempt to output directory. 166 # Append build attempt to output directory.
150 IMAGE_SUBDIR="${CHROMEOS_VERSION_STRING}-a${FLAGS_build_attempt}" 167 IMAGE_SUBDIR="${CHROMEOS_VERSION_STRING}-a${FLAGS_build_attempt}"
151 OUTPUT_DIR="${FLAGS_output_root}/${FLAGS_board}/${IMAGE_SUBDIR}" 168 OUTPUT_DIR="${FLAGS_output_root}/${FLAGS_board}/${IMAGE_SUBDIR}"
152 169
153 OUTSIDE_OUTPUT_DIR="../build/images/${FLAGS_board}/${IMAGE_SUBDIR}" 170 OUTSIDE_OUTPUT_DIR="../build/images/${FLAGS_board}/${IMAGE_SUBDIR}"
154 171
155 # If we are creating a developer image, also create a pristine image with a 172 # If we are creating a developer image, also create a pristine image with a
156 # different name. 173 # different name.
157 DEVELOPER_IMAGE_NAME= 174 DEVELOPER_IMAGE_NAME=
(...skipping 269 matching lines...) Expand 10 before | Expand all | Expand 10 after
427 echo "Updating base packages on ${image_name}" 444 echo "Updating base packages on ${image_name}"
428 445
429 # Create stateful partition of the same size as the rootfs. 446 # Create stateful partition of the same size as the rootfs.
430 trap "mount_gpt_cleanup" EXIT 447 trap "mount_gpt_cleanup" EXIT
431 448
432 ${SCRIPTS_DIR}/mount_gpt_image.sh --from "${OUTPUT_DIR}" \ 449 ${SCRIPTS_DIR}/mount_gpt_image.sh --from "${OUTPUT_DIR}" \
433 --image "${image_name}" -r "${ROOT_FS_DIR}" \ 450 --image "${image_name}" -r "${ROOT_FS_DIR}" \
434 -s "${STATEFUL_FS_DIR}" -e "${ESP_FS_DIR}" 451 -s "${STATEFUL_FS_DIR}" -e "${ESP_FS_DIR}"
435 452
436 # Emerge updated packages, exactly like when creating base image 453 # Emerge updated packages, exactly like when creating base image
437 sudo INSTALL_MASK="${INSTALL_MASK}" ${EMERGE_BOARD_CMD} \ 454 sudo USE="${EXTRA_USE}" INSTALL_MASK="${INSTALL_MASK}" ${EMERGE_BOARD_CMD} \
438 --root="${ROOT_FS_DIR}" --root-deps=rdeps \ 455 --root="${ROOT_FS_DIR}" --root-deps=rdeps \
439 --usepkg -uDNv chromeos ${EMERGE_JOBS} 456 --usepkg -uDNv chromeos ${EXTRA_PACKAGES} ${EMERGE_JOBS}
440 457
441 # Clean out unused packages 458 # Clean out unused packages
442 sudo INSTALL_MASK="${INSTALL_MASK}" ${EMERGE_BOARD_CMD} \ 459 sudo INSTALL_MASK="${INSTALL_MASK}" ${EMERGE_BOARD_CMD} \
443 --root="${ROOT_FS_DIR}" --root-deps=rdeps \ 460 --root="${ROOT_FS_DIR}" --root-deps=rdeps \
444 --usepkg --depclean ${EMERGE_JOBS} 461 --usepkg --depclean ${EMERGE_JOBS}
445 462
446 trap - EXIT 463 trap - EXIT
447 ${SCRIPTS_DIR}/mount_gpt_image.sh -u -r "${ROOT_FS_DIR}" \ 464 ${SCRIPTS_DIR}/mount_gpt_image.sh -u -r "${ROOT_FS_DIR}" \
448 -s "${STATEFUL_FS_DIR}" -e "${ESP_FS_DIR}" 465 -s "${STATEFUL_FS_DIR}" -e "${ESP_FS_DIR}"
449 } 466 }
(...skipping 115 matching lines...) Expand 10 before | Expand all | Expand 10 after
565 sudo mkdir -p "${ROOT_FS_DIR}/usr/local" 582 sudo mkdir -p "${ROOT_FS_DIR}/usr/local"
566 sudo mount --bind "${DEV_IMAGE_ROOT}" "${ROOT_FS_DIR}/usr/local" 583 sudo mount --bind "${DEV_IMAGE_ROOT}" "${ROOT_FS_DIR}/usr/local"
567 sudo mkdir -p "${ROOT_FS_DIR}/var" 584 sudo mkdir -p "${ROOT_FS_DIR}/var"
568 sudo mount --bind "${STATEFUL_FS_DIR}/var" "${ROOT_FS_DIR}/var" 585 sudo mount --bind "${STATEFUL_FS_DIR}/var" "${ROOT_FS_DIR}/var"
569 sudo mkdir -p "${ROOT_FS_DIR}/dev" 586 sudo mkdir -p "${ROOT_FS_DIR}/dev"
570 587
571 # We "emerge --root=${ROOT_FS_DIR} --root-deps=rdeps --usepkg" all of the 588 # We "emerge --root=${ROOT_FS_DIR} --root-deps=rdeps --usepkg" all of the
572 # runtime packages for chrome os. This builds up a chrome os image from 589 # runtime packages for chrome os. This builds up a chrome os image from
573 # binary packages with runtime dependencies only. We use INSTALL_MASK to 590 # binary packages with runtime dependencies only. We use INSTALL_MASK to
574 # trim the image size as much as possible. 591 # trim the image size as much as possible.
575 sudo INSTALL_MASK="${INSTALL_MASK}" ${EMERGE_BOARD_CMD} \ 592 sudo USE="${EXTRA_USE}" INSTALL_MASK="${INSTALL_MASK}" ${EMERGE_BOARD_CMD} \
576 --root="${ROOT_FS_DIR}" --root-deps=rdeps \ 593 --root="${ROOT_FS_DIR}" --root-deps=rdeps \
577 --usepkg chromeos ${EMERGE_JOBS} 594 --usepkg chromeos ${EXTRA_PACKAGES} ${EMERGE_JOBS}
578 595
579 # Perform any customizations on the root file system that are needed. 596 # Perform any customizations on the root file system that are needed.
580 "${SCRIPTS_DIR}/customize_rootfs" \ 597 "${SCRIPTS_DIR}/customize_rootfs" \
581 --root="${ROOT_FS_DIR}" \ 598 --root="${ROOT_FS_DIR}" \
582 --target="${ARCH}" \ 599 --target="${ARCH}" \
583 --board="${BOARD}" 600 --board="${BOARD}"
584 601
585 # Populates the root filesystem with legacy bootloader templates 602 # Populates the root filesystem with legacy bootloader templates
586 # appropriate for the platform. The autoupdater and installer will 603 # appropriate for the platform. The autoupdater and installer will
587 # use those templates to update the legacy boot partition (12/ESP) 604 # use those templates to update the legacy boot partition (12/ESP)
(...skipping 134 matching lines...) Expand 10 before | Expand all | Expand 10 after
722 echo "Developer image created as ${DEVELOPER_IMAGE_NAME}" 739 echo "Developer image created as ${DEVELOPER_IMAGE_NAME}"
723 fi 740 fi
724 741
725 print_time_elapsed 742 print_time_elapsed
726 743
727 echo "To copy to USB keyfob, OUTSIDE the chroot, do something like:" 744 echo "To copy to USB keyfob, OUTSIDE the chroot, do something like:"
728 echo " ./image_to_usb.sh --from=${OUTSIDE_OUTPUT_DIR} --to=/dev/sdX" 745 echo " ./image_to_usb.sh --from=${OUTSIDE_OUTPUT_DIR} --to=/dev/sdX"
729 echo "To convert to VMWare image, INSIDE the chroot, do something like:" 746 echo "To convert to VMWare image, INSIDE the chroot, do something like:"
730 echo " ./image_to_vm.sh --from=${OUTSIDE_OUTPUT_DIR} --board=${BOARD}" 747 echo " ./image_to_vm.sh --from=${OUTSIDE_OUTPUT_DIR} --board=${BOARD}"
731 echo "from the scripts directory where you entered the chroot." 748 echo "from the scripts directory where you entered the chroot."
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698