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

Side by Side Diff: build_image

Issue 3305010: Use --usepkgonly in build_image to ensure no accidental builds of packages. (Closed) Base URL: http://git.chromium.org/git/crosutils.git
Patch Set: Verify no changes 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 | Annotate | Revision Log
« 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 12 matching lines...) Expand all
23 23
24 # Flags. 24 # Flags.
25 DEFINE_string board "${DEFAULT_BOARD}" \ 25 DEFINE_string board "${DEFAULT_BOARD}" \
26 "The board to build an image for." 26 "The board to build an image for."
27 DEFINE_string build_root "/build" \ 27 DEFINE_string build_root "/build" \
28 "The root location for board sysroots." 28 "The root location for board sysroots."
29 DEFINE_integer build_attempt 1 \ 29 DEFINE_integer build_attempt 1 \
30 "The build attempt for this image build." 30 "The build attempt for this image build."
31 DEFINE_string output_root "${DEFAULT_BUILD_ROOT}/images" \ 31 DEFINE_string output_root "${DEFAULT_BUILD_ROOT}/images" \
32 "Directory in which to place image result directories (named by version)" 32 "Directory in which to place image result directories (named by version)"
33 DEFINE_boolean eclean ${FLAGS_TRUE} \
34 "Perform eclean-<board> -d as part of this script to remove obsolete packages"
33 DEFINE_boolean replace ${FLAGS_FALSE} \ 35 DEFINE_boolean replace ${FLAGS_FALSE} \
34 "Overwrite existing output, if any." 36 "Overwrite existing output, if any."
35 DEFINE_boolean withdev ${FLAGS_TRUE} \ 37 DEFINE_boolean withdev ${FLAGS_TRUE} \
36 "Include useful developer friendly utilities in the image." 38 "Include useful developer friendly utilities in the image."
37 DEFINE_boolean installmask ${FLAGS_TRUE} \ 39 DEFINE_boolean installmask ${FLAGS_TRUE} \
38 "Use INSTALL_MASK to shrink the resulting image." 40 "Use INSTALL_MASK to shrink the resulting image."
39 DEFINE_integer jobs -1 \ 41 DEFINE_integer jobs -1 \
40 "How many packages to build in parallel at maximum." 42 "How many packages to build in parallel at maximum."
41 DEFINE_boolean statefuldev ${FLAGS_TRUE} \ 43 DEFINE_boolean statefuldev ${FLAGS_TRUE} \
42 "Install development packages on stateful partition rather than the rootfs" 44 "Install development packages on stateful partition rather than the rootfs"
(...skipping 334 matching lines...) Expand 10 before | Expand all | Expand 10 after
377 -s "${STATEFUL_FS_DIR}" -e "${ESP_FS_DIR}" 379 -s "${STATEFUL_FS_DIR}" -e "${ESP_FS_DIR}"
378 380
379 # Determine the root dir for developer packages. 381 # Determine the root dir for developer packages.
380 local root_dev_dir="${ROOT_FS_DIR}" 382 local root_dev_dir="${ROOT_FS_DIR}"
381 [ ${FLAGS_statefuldev} -eq ${FLAGS_TRUE} ] && \ 383 [ ${FLAGS_statefuldev} -eq ${FLAGS_TRUE} ] && \
382 root_dev_dir="${ROOT_FS_DIR}/usr/local" 384 root_dev_dir="${ROOT_FS_DIR}/usr/local"
383 385
384 # Install developer packages described in chromeos-dev. 386 # Install developer packages described in chromeos-dev.
385 sudo INSTALL_MASK="${INSTALL_MASK}" ${EMERGE_BOARD_CMD} \ 387 sudo INSTALL_MASK="${INSTALL_MASK}" ${EMERGE_BOARD_CMD} \
386 --root="${root_dev_dir}" --root-deps=rdeps \ 388 --root="${root_dev_dir}" --root-deps=rdeps \
387 --usepkg -uDNv chromeos-dev ${EMERGE_JOBS} 389 --usepkgonly -uDNv chromeos-dev ${EMERGE_JOBS}
388 390
389 if [[ $FLAGS_preserve -eq ${FLAGS_TRUE} ]] ; then 391 if [[ $FLAGS_preserve -eq ${FLAGS_TRUE} ]] ; then
390 # Clean out unused packages 392 # Clean out unused packages
391 sudo INSTALL_MASK="${INSTALL_MASK}" ${EMERGE_BOARD_CMD} \ 393 sudo INSTALL_MASK="${INSTALL_MASK}" ${EMERGE_BOARD_CMD} \
392 --root="${ROOT_FS_DIR}" --root-deps=rdeps \ 394 --root="${ROOT_FS_DIR}" --root-deps=rdeps \
393 --usepkg --depclean ${EMERGE_JOBS} 395 --usepkgonly --depclean ${EMERGE_JOBS}
394 fi 396 fi
395 397
396 # Re-run ldconfig to fix /etc/ldconfig.so.cache. 398 # Re-run ldconfig to fix /etc/ldconfig.so.cache.
397 sudo /sbin/ldconfig -r "${ROOT_FS_DIR}" 399 sudo /sbin/ldconfig -r "${ROOT_FS_DIR}"
398 400
399 # Mark the image as a developer image (input to chromeos_startup). 401 # Mark the image as a developer image (input to chromeos_startup).
400 sudo mkdir -p "${ROOT_FS_DIR}/root" 402 sudo mkdir -p "${ROOT_FS_DIR}/root"
401 sudo touch "${ROOT_FS_DIR}/root/.dev_mode" 403 sudo touch "${ROOT_FS_DIR}/root/.dev_mode"
402 404
403 # Additional changes to developer image. 405 # Additional changes to developer image.
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
446 # Create stateful partition of the same size as the rootfs. 448 # Create stateful partition of the same size as the rootfs.
447 trap "mount_gpt_cleanup" EXIT 449 trap "mount_gpt_cleanup" EXIT
448 450
449 ${SCRIPTS_DIR}/mount_gpt_image.sh --from "${OUTPUT_DIR}" \ 451 ${SCRIPTS_DIR}/mount_gpt_image.sh --from "${OUTPUT_DIR}" \
450 --image "${image_name}" -r "${ROOT_FS_DIR}" \ 452 --image "${image_name}" -r "${ROOT_FS_DIR}" \
451 -s "${STATEFUL_FS_DIR}" -e "${ESP_FS_DIR}" 453 -s "${STATEFUL_FS_DIR}" -e "${ESP_FS_DIR}"
452 454
453 # Emerge updated packages, exactly like when creating base image 455 # Emerge updated packages, exactly like when creating base image
454 sudo USE="${EXTRA_USE}" INSTALL_MASK="${INSTALL_MASK}" ${EMERGE_BOARD_CMD} \ 456 sudo USE="${EXTRA_USE}" INSTALL_MASK="${INSTALL_MASK}" ${EMERGE_BOARD_CMD} \
455 --root="${ROOT_FS_DIR}" --root-deps=rdeps \ 457 --root="${ROOT_FS_DIR}" --root-deps=rdeps \
456 --usepkg -uDNv chromeos ${EXTRA_PACKAGES} ${EMERGE_JOBS} 458 --usepkgonly -uDNv chromeos ${EXTRA_PACKAGES} ${EMERGE_JOBS}
457 459
458 # Clean out unused packages 460 # Clean out unused packages
459 sudo INSTALL_MASK="${INSTALL_MASK}" ${EMERGE_BOARD_CMD} \ 461 sudo INSTALL_MASK="${INSTALL_MASK}" ${EMERGE_BOARD_CMD} \
460 --root="${ROOT_FS_DIR}" --root-deps=rdeps \ 462 --root="${ROOT_FS_DIR}" --root-deps=rdeps \
461 --usepkg --depclean ${EMERGE_JOBS} 463 --usepkgonly --depclean ${EMERGE_JOBS}
462 464
463 trap - EXIT 465 trap - EXIT
464 ${SCRIPTS_DIR}/mount_gpt_image.sh -u -r "${ROOT_FS_DIR}" \ 466 ${SCRIPTS_DIR}/mount_gpt_image.sh -u -r "${ROOT_FS_DIR}" \
465 -s "${STATEFUL_FS_DIR}" -e "${ESP_FS_DIR}" 467 -s "${STATEFUL_FS_DIR}" -e "${ESP_FS_DIR}"
466 } 468 }
467 469
468 create_base_image() { 470 create_base_image() {
469 local image_name=$1 471 local image_name=$1
470 472
471 trap "cleanup && delete_prompt" EXIT 473 trap "cleanup && delete_prompt" EXIT
(...skipping 106 matching lines...) Expand 10 before | Expand all | Expand 10 after
578 580
579 # Perform binding rather than symlinking because directories must exist 581 # Perform binding rather than symlinking because directories must exist
580 # on rootfs so that we can bind at run-time since rootfs is read-only. 582 # on rootfs so that we can bind at run-time since rootfs is read-only.
581 echo "Binding directories from stateful partition onto the rootfs" 583 echo "Binding directories from stateful partition onto the rootfs"
582 sudo mkdir -p "${ROOT_FS_DIR}/usr/local" 584 sudo mkdir -p "${ROOT_FS_DIR}/usr/local"
583 sudo mount --bind "${DEV_IMAGE_ROOT}" "${ROOT_FS_DIR}/usr/local" 585 sudo mount --bind "${DEV_IMAGE_ROOT}" "${ROOT_FS_DIR}/usr/local"
584 sudo mkdir -p "${ROOT_FS_DIR}/var" 586 sudo mkdir -p "${ROOT_FS_DIR}/var"
585 sudo mount --bind "${STATEFUL_FS_DIR}/var" "${ROOT_FS_DIR}/var" 587 sudo mount --bind "${STATEFUL_FS_DIR}/var" "${ROOT_FS_DIR}/var"
586 sudo mkdir -p "${ROOT_FS_DIR}/dev" 588 sudo mkdir -p "${ROOT_FS_DIR}/dev"
587 589
588 # We "emerge --root=${ROOT_FS_DIR} --root-deps=rdeps --usepkg" all of the 590 # We "emerge --root=${ROOT_FS_DIR} --root-deps=rdeps --usepkgonly" all of the
589 # runtime packages for chrome os. This builds up a chrome os image from 591 # runtime packages for chrome os. This builds up a chrome os image from
590 # binary packages with runtime dependencies only. We use INSTALL_MASK to 592 # binary packages with runtime dependencies only. We use INSTALL_MASK to
591 # trim the image size as much as possible. 593 # trim the image size as much as possible.
592 sudo USE="${EXTRA_USE}" INSTALL_MASK="${INSTALL_MASK}" ${EMERGE_BOARD_CMD} \ 594 sudo USE="${EXTRA_USE}" INSTALL_MASK="${INSTALL_MASK}" ${EMERGE_BOARD_CMD} \
593 --root="${ROOT_FS_DIR}" --root-deps=rdeps \ 595 --root="${ROOT_FS_DIR}" --root-deps=rdeps \
594 --usepkg chromeos ${EXTRA_PACKAGES} ${EMERGE_JOBS} 596 --usepkgonly chromeos ${EXTRA_PACKAGES} ${EMERGE_JOBS}
595 597
596 # Perform any customizations on the root file system that are needed. 598 # Perform any customizations on the root file system that are needed.
597 "${SCRIPTS_DIR}/customize_rootfs" \ 599 "${SCRIPTS_DIR}/customize_rootfs" \
598 --root="${ROOT_FS_DIR}" \ 600 --root="${ROOT_FS_DIR}" \
599 --target="${ARCH}" \ 601 --target="${ARCH}" \
600 --board="${BOARD}" 602 --board="${BOARD}"
601 603
602 # Populates the root filesystem with legacy bootloader templates 604 # Populates the root filesystem with legacy bootloader templates
603 # appropriate for the platform. The autoupdater and installer will 605 # appropriate for the platform. The autoupdater and installer will
604 # use those templates to update the legacy boot partition (12/ESP) 606 # use those templates to update the legacy boot partition (12/ESP)
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after
673 cp ${PREVIOUS_DIR}/${PRISTINE_IMAGE_NAME} ${OUTPUT_DIR} 675 cp ${PREVIOUS_DIR}/${PRISTINE_IMAGE_NAME} ${OUTPUT_DIR}
674 676
675 # Copy forward the developer image, if we already copied forward the base. 677 # Copy forward the developer image, if we already copied forward the base.
676 if [[ ${FLAGS_withdev} -eq ${FLAGS_TRUE} ]] && \ 678 if [[ ${FLAGS_withdev} -eq ${FLAGS_TRUE} ]] && \
677 [[ -f ${PREVIOUS_DIR}/${DEVELOPER_IMAGE_NAME} ]] ; then 679 [[ -f ${PREVIOUS_DIR}/${DEVELOPER_IMAGE_NAME} ]] ; then
678 cp ${PREVIOUS_DIR}/${DEVELOPER_IMAGE_NAME} ${OUTPUT_DIR} 680 cp ${PREVIOUS_DIR}/${DEVELOPER_IMAGE_NAME} ${OUTPUT_DIR}
679 fi 681 fi
680 fi 682 fi
681 fi 683 fi
682 684
685 # Perform an eclean to remove packages which are not installed
686 if [[ "${FLAGS_eclean}" -eq "${FLAGS_TRUE}" ]]; then
687 eclean-${FLAGS_board} -d packages
688 fi
689
683 # Create the boot.desc file which stores the build-time configuration 690 # Create the boot.desc file which stores the build-time configuration
684 # information needed for making the image bootable after creation with 691 # information needed for making the image bootable after creation with
685 # cros_make_image_bootable. 692 # cros_make_image_bootable.
686 create_boot_desc 693 create_boot_desc
687 694
688 if [[ -f ${PRISTINE_IMG} ]] ; then 695 if [[ -f ${PRISTINE_IMG} ]] ; then
689 update_base_packages ${PRISTINE_IMAGE_NAME} 696 update_base_packages ${PRISTINE_IMAGE_NAME}
690 else 697 else
691 create_base_image ${PRISTINE_IMAGE_NAME} 698 create_base_image ${PRISTINE_IMAGE_NAME}
692 fi 699 fi
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
743 echo "Developer image created as ${DEVELOPER_IMAGE_NAME}" 750 echo "Developer image created as ${DEVELOPER_IMAGE_NAME}"
744 fi 751 fi
745 752
746 print_time_elapsed 753 print_time_elapsed
747 754
748 echo "To copy to USB keyfob, OUTSIDE the chroot, do something like:" 755 echo "To copy to USB keyfob, OUTSIDE the chroot, do something like:"
749 echo " ./image_to_usb.sh --from=${OUTSIDE_OUTPUT_DIR} --to=/dev/sdX" 756 echo " ./image_to_usb.sh --from=${OUTSIDE_OUTPUT_DIR} --to=/dev/sdX"
750 echo "To convert to VMWare image, INSIDE the chroot, do something like:" 757 echo "To convert to VMWare image, INSIDE the chroot, do something like:"
751 echo " ./image_to_vm.sh --from=${OUTSIDE_OUTPUT_DIR} --board=${BOARD}" 758 echo " ./image_to_vm.sh --from=${OUTSIDE_OUTPUT_DIR} --board=${BOARD}"
752 echo "from the scripts directory where you entered the chroot." 759 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