| OLD | NEW |
| 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 28 matching lines...) Expand all Loading... |
| 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 \ | 47 DEFINE_boolean recovery $FLAGS_FALSE \ |
| 48 "Build a recovery image. Default: False." | 48 "Build a recovery image. Default: False." |
| 49 DEFINE_integer rootfs_partition_size 1024 \ |
| 50 "rootfs parition size in MBs." |
| 51 DEFINE_integer rootfs_size 720 \ |
| 52 "rootfs filesystem size in MBs." |
| 49 | 53 |
| 50 # Parse command line. | 54 # Parse command line. |
| 51 FLAGS "$@" || exit 1 | 55 FLAGS "$@" || exit 1 |
| 52 eval set -- "${FLAGS_ARGV}" | 56 eval set -- "${FLAGS_ARGV}" |
| 53 | 57 |
| 54 # Only now can we die on error. shflags functions leak non-zero error codes, | 58 # Only now can we die on error. shflags functions leak non-zero error codes, |
| 55 # so will die prematurely if 'set -e' is specified before now. | 59 # so will die prematurely if 'set -e' is specified before now. |
| 56 set -e | 60 set -e |
| 57 | 61 |
| 58 if [ -z "$FLAGS_board" ] ; then | 62 if [ -z "$FLAGS_board" ] ; then |
| 59 error "--board is required." | 63 error "--board is required." |
| 60 exit 1 | 64 exit 1 |
| 61 fi | 65 fi |
| 62 | 66 |
| 67 if [ "$FLAGS_rootfs_size" -gt "$FLAGS_rootfs_partition_size" ] ; then |
| 68 error "rootfs (${FLAGS_rootfs_size} MB) is bigger than partition (${FLAGS_root
fs_partition_size} MB)." |
| 69 exit 1 |
| 70 fi |
| 71 |
| 63 # Determine build version. | 72 # Determine build version. |
| 64 . "${SCRIPTS_DIR}/chromeos_version.sh" | 73 . "${SCRIPTS_DIR}/chromeos_version.sh" |
| 65 | 74 |
| 66 # Use canonical path since some tools (e.g. mount) do not like symlinks. | 75 # Use canonical path since some tools (e.g. mount) do not like symlinks. |
| 67 # Append build attempt to output directory. | 76 # Append build attempt to output directory. |
| 68 IMAGE_SUBDIR="${CHROMEOS_VERSION_STRING}-a${FLAGS_build_attempt}" | 77 IMAGE_SUBDIR="${CHROMEOS_VERSION_STRING}-a${FLAGS_build_attempt}" |
| 69 OUTPUT_DIR="${FLAGS_output_root}/${FLAGS_board}/${IMAGE_SUBDIR}" | 78 OUTPUT_DIR="${FLAGS_output_root}/${FLAGS_board}/${IMAGE_SUBDIR}" |
| 70 ROOT_FS_DIR="${OUTPUT_DIR}/rootfs" | 79 ROOT_FS_DIR="${OUTPUT_DIR}/rootfs" |
| 71 ROOT_FS_IMG="${OUTPUT_DIR}/rootfs.image" | 80 ROOT_FS_IMG="${OUTPUT_DIR}/rootfs.image" |
| 72 | 81 |
| (...skipping 194 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 267 if [ -z "$LOOP_DEV" ] ; then | 276 if [ -z "$LOOP_DEV" ] ; then |
| 268 echo "No free loop device. Free up a loop device or reboot. exiting. " | 277 echo "No free loop device. Free up a loop device or reboot. exiting. " |
| 269 exit 1 | 278 exit 1 |
| 270 fi | 279 fi |
| 271 | 280 |
| 272 # Create root file system disk image to fit on a 1GB memory stick. | 281 # Create root file system disk image to fit on a 1GB memory stick. |
| 273 # 1 GB in hard-drive-manufacturer-speak is 10^9, not 2^30. 950MB < 10^9 bytes. | 282 # 1 GB in hard-drive-manufacturer-speak is 10^9, not 2^30. 950MB < 10^9 bytes. |
| 274 if [[ $FLAGS_factory_install -eq ${FLAGS_TRUE} ]] ; then | 283 if [[ $FLAGS_factory_install -eq ${FLAGS_TRUE} ]] ; then |
| 275 ROOT_SIZE_BYTES=$((1024 * 1024 * 300)) | 284 ROOT_SIZE_BYTES=$((1024 * 1024 * 300)) |
| 276 else | 285 else |
| 277 ROOT_SIZE_BYTES=$((1024 * 1024 * 720)) | 286 ROOT_SIZE_BYTES=$((1024 * 1024 * ${FLAGS_rootfs_size})) |
| 278 fi | 287 fi |
| 279 | 288 |
| 280 dd if=/dev/zero of="$ROOT_FS_IMG" bs=1 count=1 seek=$((ROOT_SIZE_BYTES - 1)) | 289 dd if=/dev/zero of="$ROOT_FS_IMG" bs=1 count=1 seek=$((ROOT_SIZE_BYTES - 1)) |
| 281 sudo losetup "$LOOP_DEV" "$ROOT_FS_IMG" | 290 sudo losetup "$LOOP_DEV" "$ROOT_FS_IMG" |
| 282 sudo mkfs.ext3 "$LOOP_DEV" | 291 sudo mkfs.ext3 "$LOOP_DEV" |
| 283 | 292 |
| 284 # Tune and mount rootfs. | 293 # Tune and mount rootfs. |
| 285 UUID=$(uuidgen) | 294 UUID=$(uuidgen) |
| 286 DISK_LABEL="C-KEYFOB" | 295 DISK_LABEL="C-KEYFOB" |
| 287 sudo tune2fs -L "$DISK_LABEL" -U "$UUID" -c 0 -i 0 "$LOOP_DEV" | 296 sudo tune2fs -L "$DISK_LABEL" -U "$UUID" -c 0 -i 0 "$LOOP_DEV" |
| (...skipping 202 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 490 RECOVERY="--norecovery" | 499 RECOVERY="--norecovery" |
| 491 if [[ ${FLAGS_recovery} -eq $FLAGS_TRUE ]]; then | 500 if [[ ${FLAGS_recovery} -eq $FLAGS_TRUE ]]; then |
| 492 RECOVERY="--recovery" | 501 RECOVERY="--recovery" |
| 493 fi | 502 fi |
| 494 | 503 |
| 495 # Create the GPT-formatted image | 504 # Create the GPT-formatted image |
| 496 ${SCRIPTS_DIR}/build_gpt.sh \ | 505 ${SCRIPTS_DIR}/build_gpt.sh \ |
| 497 --arch=${ARCH} \ | 506 --arch=${ARCH} \ |
| 498 --board=${FLAGS_board} \ | 507 --board=${FLAGS_board} \ |
| 499 --arm_extra_bootargs="${FLAGS_arm_extra_bootargs}" \ | 508 --arm_extra_bootargs="${FLAGS_arm_extra_bootargs}" \ |
| 509 --rootfs_partition_size=${FLAGS_rootfs_partition_size} \ |
| 500 ${RECOVERY} \ | 510 ${RECOVERY} \ |
| 501 "${OUTPUT_DIR}" \ | 511 "${OUTPUT_DIR}" \ |
| 502 "${OUTPUT_IMG}" | 512 "${OUTPUT_IMG}" |
| 503 | 513 |
| 504 # Clean up temporary files. | 514 # Clean up temporary files. |
| 505 rm -f "${ROOT_FS_IMG}" "${STATEFUL_IMG}" "${OUTPUT_DIR}/vmlinuz.image" \ | 515 rm -f "${ROOT_FS_IMG}" "${STATEFUL_IMG}" "${OUTPUT_DIR}/vmlinuz.image" \ |
| 506 "${ESP_IMG}" | 516 "${ESP_IMG}" |
| 507 rmdir "${ROOT_FS_DIR}" "${STATEFUL_DIR}" "${ESP_DIR}" | 517 rmdir "${ROOT_FS_DIR}" "${STATEFUL_DIR}" "${ESP_DIR}" |
| 508 | 518 |
| 509 OUTSIDE_OUTPUT_DIR="../build/images/${FLAGS_board}/${IMAGE_SUBDIR}" | 519 OUTSIDE_OUTPUT_DIR="../build/images/${FLAGS_board}/${IMAGE_SUBDIR}" |
| 510 | 520 |
| 511 # Create a developer image based on the chromium os base image | 521 # Create a developer image based on the chromium os base image |
| 512 [ "$FLAGS_withdev" -eq "$FLAGS_TRUE" ] && create_developer_image | 522 [ "$FLAGS_withdev" -eq "$FLAGS_TRUE" ] && create_developer_image |
| 513 trap - EXIT | 523 trap - EXIT |
| 514 | 524 |
| 515 # be quiet again | 525 # be quiet again |
| 516 set +x | 526 set +x |
| 517 | 527 |
| 518 echo "Done. Image created in ${OUTPUT_DIR}" | 528 echo "Done. Image created in ${OUTPUT_DIR}" |
| 519 echo "Chromium OS image created as $PRISTINE_IMAGE_NAME" | 529 echo "Chromium OS image created as $PRISTINE_IMAGE_NAME" |
| 520 if [ "$FLAGS_withdev" -eq "$FLAGS_TRUE" ]; then | 530 if [ "$FLAGS_withdev" -eq "$FLAGS_TRUE" ]; then |
| 521 echo "Developer image created as $DEVELOPER_IMAGE_NAME" | 531 echo "Developer image created as $DEVELOPER_IMAGE_NAME" |
| 522 fi | 532 fi |
| 523 echo "To copy to USB keyfob, OUTSIDE the chroot, do something like:" | 533 echo "To copy to USB keyfob, OUTSIDE the chroot, do something like:" |
| 524 echo " ./image_to_usb.sh --from=${OUTSIDE_OUTPUT_DIR} --to=/dev/sdX" | 534 echo " ./image_to_usb.sh --from=${OUTSIDE_OUTPUT_DIR} --to=/dev/sdX" |
| 525 echo "To convert to VMWare image, OUTSIDE the chroot, do something like:" | 535 echo "To convert to VMWare image, OUTSIDE the chroot, do something like:" |
| 526 echo " ./image_to_vmware.sh --from=${OUTSIDE_OUTPUT_DIR}" | 536 echo " ./image_to_vmware.sh --from=${OUTSIDE_OUTPUT_DIR}" |
| 527 echo "from the scripts directory where you entered the chroot." | 537 echo "from the scripts directory where you entered the chroot." |
| OLD | NEW |