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

Side by Side Diff: build_image

Issue 2813029: recovery installer: fix build_gpt and build_image (Closed) Base URL: ssh://git@chromiumos-git/crosutils.git
Patch Set: minor fix per review comment Created 10 years, 6 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 | « build_gpt.sh ('k') | mod_image_for_recovery.sh » ('j') | 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 26 matching lines...) Expand all
37 "How many packages to build in parallel at maximum." 37 "How many packages to build in parallel at maximum."
38 DEFINE_boolean statefuldev ${FLAGS_TRUE} \ 38 DEFINE_boolean statefuldev ${FLAGS_TRUE} \
39 "Install development packages on stateful partition rather than the rootfs" 39 "Install development packages on stateful partition rather than the rootfs"
40 DEFINE_string to "" \ 40 DEFINE_string to "" \
41 "The target image file or device" 41 "The target image file or device"
42 DEFINE_boolean factory_install ${FLAGS_FALSE} \ 42 DEFINE_boolean factory_install ${FLAGS_FALSE} \
43 "Build a smaller image to overlay the factory install shim on; this argument \ 43 "Build a smaller image to overlay the factory install shim on; this argument \
44 is also required in image_to_usb." 44 is also required in image_to_usb."
45 DEFINE_string arm_extra_bootargs "" \ 45 DEFINE_string arm_extra_bootargs "" \
46 "Additional command line options to pass to the ARM kernel." 46 "Additional command line options to pass to the ARM kernel."
47 DEFINE_boolean recovery ${FLAGS_FALSE} \
48 "Build a recovery image. Default: False."
49 DEFINE_integer rootfs_partition_size 1024 \ 47 DEFINE_integer rootfs_partition_size 1024 \
50 "rootfs parition size in MBs." 48 "rootfs parition size in MBs."
51 DEFINE_integer rootfs_size 720 \ 49 DEFINE_integer rootfs_size 720 \
52 "rootfs filesystem size in MBs." 50 "rootfs filesystem size in MBs."
53 51
54 # Parse command line. 52 # Parse command line.
55 FLAGS "$@" || exit 1 53 FLAGS "$@" || exit 1
56 eval set -- "${FLAGS_ARGV}" 54 eval set -- "${FLAGS_ARGV}"
57 55
58 # Only now can we die on error. shflags functions leak non-zero error codes, 56 # Only now can we die on error. shflags functions leak non-zero error codes,
(...skipping 30 matching lines...) Expand all
89 87
90 # If we are creating a developer image, also create a pristine image with a 88 # If we are creating a developer image, also create a pristine image with a
91 # different name. 89 # different name.
92 DEVELOPER_IMAGE_NAME= 90 DEVELOPER_IMAGE_NAME=
93 PRISTINE_IMAGE_NAME=chromiumos_image.bin 91 PRISTINE_IMAGE_NAME=chromiumos_image.bin
94 if [ "${FLAGS_withdev}" -eq "${FLAGS_TRUE}" ]; then 92 if [ "${FLAGS_withdev}" -eq "${FLAGS_TRUE}" ]; then
95 PRISTINE_IMAGE_NAME=chromiumos_base_image.bin 93 PRISTINE_IMAGE_NAME=chromiumos_base_image.bin
96 DEVELOPER_IMAGE_NAME=chromiumos_image.bin 94 DEVELOPER_IMAGE_NAME=chromiumos_image.bin
97 fi 95 fi
98 96
99 # If we are creating a recovery image, rename pristine image.
100 if [ "${FLAGS_recovery}" -eq "${FLAGS_TRUE}" ]; then
101 PRISTINE_IMAGE_NAME=recovery_image.bin
102 fi
103
104 OUTPUT_IMG=${FLAGS_to:-${OUTPUT_DIR}/${PRISTINE_IMAGE_NAME}} 97 OUTPUT_IMG=${FLAGS_to:-${OUTPUT_DIR}/${PRISTINE_IMAGE_NAME}}
105 98
106 BOARD="${FLAGS_board}" 99 BOARD="${FLAGS_board}"
107 BOARD_ROOT="${FLAGS_build_root}/${BOARD}" 100 BOARD_ROOT="${FLAGS_build_root}/${BOARD}"
108 101
109 ROOT_FS_IMG="${OUTPUT_DIR}/rootfs.image" 102 ROOT_FS_IMG="${OUTPUT_DIR}/rootfs.image"
110 ROOT_FS_DIR="${OUTPUT_DIR}/rootfs" 103 ROOT_FS_DIR="${OUTPUT_DIR}/rootfs"
111 104
112 STATEFUL_FS_IMG="${OUTPUT_DIR}/stateful_partition.image" 105 STATEFUL_FS_IMG="${OUTPUT_DIR}/stateful_partition.image"
113 STATEFUL_FS_DIR="${OUTPUT_DIR}/stateful_partition" 106 STATEFUL_FS_DIR="${OUTPUT_DIR}/stateful_partition"
(...skipping 162 matching lines...) Expand 10 before | Expand all | Expand 10 after
276 "${SCRIPTS_DIR}/test_image" \ 269 "${SCRIPTS_DIR}/test_image" \
277 --root="${ROOT_FS_DIR}" \ 270 --root="${ROOT_FS_DIR}" \
278 --target="${ARCH}" 271 --target="${ARCH}"
279 fi 272 fi
280 echo "Developer image built and stored at ${image_name}" 273 echo "Developer image built and stored at ${image_name}"
281 274
282 trap - EXIT 275 trap - EXIT
283 ${SCRIPTS_DIR}/mount_gpt_image.sh -u -r "${ROOT_FS_DIR}" -s "${STATEFUL_FS_DIR }" 276 ${SCRIPTS_DIR}/mount_gpt_image.sh -u -r "${ROOT_FS_DIR}" -s "${STATEFUL_FS_DIR }"
284 } 277 }
285 278
286
287 # Modifies an existing image to add recovery packages
288 update_recovery_packages() {
289 local image_name=$1
290
291 echo "Adding recovery packages to ${image_name}"
292
293 # Create stateful partition of the same size as the rootfs.
294 trap "mount_gpt_cleanup \"${ROOT_FS_DIR}\" \"${STATEFUL_FS_DIR}\"" EXIT
295
296 ${SCRIPTS_DIR}/mount_gpt_image.sh --from "${OUTPUT_DIR}" \
297 --image "$( basename ${image_name} )" -r "${ROOT_FS_DIR}" \
298 -s "${STATEFUL_FS_DIR}"
299
300 # Install recovery installer.
301 sudo ${EMERGE_BOARD_CMD} --root=${ROOT_FS_DIR} --usepkg \
302 --root-deps=rdeps --nodeps chromeos-recovery
303
304 # Re-run ldconfig to fix /etc/ldconfig.so.cache.
305 sudo /sbin/ldconfig -r "${ROOT_FS_DIR}"
306
307 # Mark the image as a developer image (input to chromeos_startup).
308 sudo mkdir -p "${ROOT_FS_DIR}/root"
309 sudo touch "${ROOT_FS_DIR}/root/.recovery_installer"
310
311 trap - EXIT
312 ${SCRIPTS_DIR}/mount_gpt_image.sh -u -r "${ROOT_FS_DIR}" -s "${STATEFUL_FS_DIR }"
313 }
314
315 create_base_image() { 279 create_base_image() {
316 280
317 trap "cleanup && delete_prompt" EXIT 281 trap "cleanup && delete_prompt" EXIT
318 282
319 # Create and format the root file system. 283 # Create and format the root file system.
320 284
321 # Check for loop device before creating image. 285 # Check for loop device before creating image.
322 LOOP_DEV=$(sudo losetup -f) 286 LOOP_DEV=$(sudo losetup -f)
323 if [ -z "${LOOP_DEV}" ] ; then 287 if [ -z "${LOOP_DEV}" ] ; then
324 echo "No free loop device. Free up a loop device or reboot. exiting. " 288 echo "No free loop device. Free up a loop device or reboot. exiting. "
(...skipping 167 matching lines...) Expand 10 before | Expand all | Expand 10 after
492 # Clean up symlinks so they work on a running target rooted at "/". 456 # Clean up symlinks so they work on a running target rooted at "/".
493 # Here development packages are rooted at /usr/local. However, do not 457 # Here development packages are rooted at /usr/local. However, do not
494 # create /usr/local or /var on host (already exist on target). 458 # create /usr/local or /var on host (already exist on target).
495 setup_symlinks_on_root "/usr/local" "/var" "${STATEFUL_FS_DIR}" 459 setup_symlinks_on_root "/usr/local" "/var" "${STATEFUL_FS_DIR}"
496 460
497 # Cleanup loop devices. 461 # Cleanup loop devices.
498 cleanup 462 cleanup
499 463
500 trap delete_prompt EXIT 464 trap delete_prompt EXIT
501 465
502 RECOVERY="--norecovery"
503 if [[ ${FLAGS_recovery} -eq ${FLAGS_TRUE} ]]; then
504 RECOVERY="--recovery"
505 fi
506
507 # Create the GPT-formatted image. 466 # Create the GPT-formatted image.
508 ${SCRIPTS_DIR}/build_gpt.sh \ 467 ${SCRIPTS_DIR}/build_gpt.sh \
509 --arch=${ARCH} \ 468 --arch=${ARCH} \
510 --board=${FLAGS_board} \ 469 --board=${FLAGS_board} \
511 --arm_extra_bootargs="${FLAGS_arm_extra_bootargs}" \ 470 --arm_extra_bootargs="${FLAGS_arm_extra_bootargs}" \
512 --rootfs_partition_size=${FLAGS_rootfs_partition_size} \ 471 --rootfs_partition_size=${FLAGS_rootfs_partition_size} \
513 ${RECOVERY} \
514 "${OUTPUT_DIR}" \ 472 "${OUTPUT_DIR}" \
515 "${OUTPUT_IMG}" 473 "${OUTPUT_IMG}"
516 } 474 }
517 475
518 # Create the output directory. 476 # Create the output directory.
519 mkdir -p "${OUTPUT_DIR}" 477 mkdir -p "${OUTPUT_DIR}"
520 mkdir -p "${ROOT_FS_DIR}" 478 mkdir -p "${ROOT_FS_DIR}"
521 mkdir -p "${STATEFUL_FS_DIR}" 479 mkdir -p "${STATEFUL_FS_DIR}"
522 mkdir -p "${ESP_FS_DIR}" 480 mkdir -p "${ESP_FS_DIR}"
523 481
524 create_base_image ${OUTPUT_DIR}/${PRISTINE_IMAGE_NAME} 482 create_base_image ${OUTPUT_DIR}/${PRISTINE_IMAGE_NAME}
525 483
526 # Create a recovery image based on the chromium os base image.
527 if [ "${FLAGS_recovery}" -eq "${FLAGS_TRUE}" ] ; then
528 update_recovery_packages ${OUTPUT_DIR}/${PRISTINE_IMAGE_NAME}
529 fi
530 trap - EXIT
531
532
533 # Create a developer image based on the chromium os base image. 484 # Create a developer image based on the chromium os base image.
534 if [ "${FLAGS_withdev}" -eq "${FLAGS_TRUE}" ] ; then 485 if [ "${FLAGS_withdev}" -eq "${FLAGS_TRUE}" ] ; then
535 echo "Creating developer image from base image ${OUTPUT_IMG}" 486 echo "Creating developer image from base image ${OUTPUT_IMG}"
536 cp ${OUTPUT_DIR}/${PRISTINE_IMAGE_NAME} ${OUTPUT_DIR}/${DEVELOPER_IMAGE_NAME} 487 cp ${OUTPUT_DIR}/${PRISTINE_IMAGE_NAME} ${OUTPUT_DIR}/${DEVELOPER_IMAGE_NAME}
537 update_dev_packages ${OUTPUT_DIR}/${DEVELOPER_IMAGE_NAME} 488 update_dev_packages ${OUTPUT_DIR}/${DEVELOPER_IMAGE_NAME}
538 fi 489 fi
539 490
540 trap - EXIT 491 trap - EXIT
541 492
542 # FIXME: only signing things for x86 right now. 493 # FIXME: only signing things for x86 right now.
543 if [[ "${ARCH}" = "x86" ]]; then 494 if [[ "${ARCH}" = "x86" ]]; then
544 # Verify the final image. 495 # Verify the final image.
545 # key_alg8.vbpubk is generated by build_kernel_image.sh --keep_work 496 # key_alg8.vbpubk is generated by build_kernel_image.sh --keep_work
546 load_kernel_test "${OUTPUT_IMG}" "${OUTPUT_DIR}/key_alg8.vbpubk" 497 load_kernel_test "${OUTPUT_IMG}" "${OUTPUT_DIR}/key_alg8.vbpubk"
547 fi 498 fi
548 499
549 # Clean up temporary files. 500 # Clean up temporary files.
550 rm -f "${ROOT_FS_IMG}" "${STATEFUL_FS_IMG}" "${OUTPUT_DIR}/vmlinuz.image" \ 501 rm -f "${ROOT_FS_IMG}" "${STATEFUL_FS_IMG}" "${OUTPUT_DIR}/vmlinuz.image" \
551 "${ESP_FS_IMG}" "${OUTPUT_DIR}/data4_sign8.keyblock" \ 502 "${ESP_FS_IMG}" "${OUTPUT_DIR}/data4_sign8.keyblock" \
552 "${OUTPUT_DIR}/key_alg4.vbpubk" "${OUTPUT_DIR}/key_alg8.vbpubk" 503 "${OUTPUT_DIR}/key_alg4.vbpubk" "${OUTPUT_DIR}/key_alg8.vbpubk"
553 rmdir "${ROOT_FS_DIR}" "${STATEFUL_FS_DIR}" "${ESP_FS_DIR}" 504 rmdir "${ROOT_FS_DIR}" "${STATEFUL_FS_DIR}" "${ESP_FS_DIR}"
554 505
555 echo "Done. Image created in ${OUTPUT_DIR}" 506 echo "Done. Image created in ${OUTPUT_DIR}"
556 echo "Chromium OS image created as ${PRISTINE_IMAGE_NAME}" 507 echo "Chromium OS image created as ${PRISTINE_IMAGE_NAME}"
557 if [ "${FLAGS_recovery}" -eq "${FLAGS_TRUE}" ]; then
558 echo "Recovery image created as ${PRISTINE_IMAGE_NAME}"
559 fi
560 if [ "${FLAGS_withdev}" -eq "${FLAGS_TRUE}" ]; then 508 if [ "${FLAGS_withdev}" -eq "${FLAGS_TRUE}" ]; then
561 echo "Developer image created as ${DEVELOPER_IMAGE_NAME}" 509 echo "Developer image created as ${DEVELOPER_IMAGE_NAME}"
562 fi 510 fi
563 511
564 print_time_elapsed 512 print_time_elapsed
565 513
566 echo "To copy to USB keyfob, OUTSIDE the chroot, do something like:" 514 echo "To copy to USB keyfob, OUTSIDE the chroot, do something like:"
567 echo " ./image_to_usb.sh --from=${OUTSIDE_OUTPUT_DIR} --to=/dev/sdX" 515 echo " ./image_to_usb.sh --from=${OUTSIDE_OUTPUT_DIR} --to=/dev/sdX"
568 echo "To convert to VMWare image, OUTSIDE the chroot, do something like:" 516 echo "To convert to VMWare image, OUTSIDE the chroot, do something like:"
569 echo " ./image_to_vmware.sh --from=${OUTSIDE_OUTPUT_DIR}" 517 echo " ./image_to_vmware.sh --from=${OUTSIDE_OUTPUT_DIR}"
570 echo "from the scripts directory where you entered the chroot." 518 echo "from the scripts directory where you entered the chroot."
OLDNEW
« no previous file with comments | « build_gpt.sh ('k') | mod_image_for_recovery.sh » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698