| 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 444 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 455 | 455 |
| 456 menuentry "local image B" { | 456 menuentry "local image B" { |
| 457 linux $grubpartB/boot/vmlinuz quiet console=tty2 init=/sbin/init boot=local ro
otwait root=/dev/$linuxpartB ro noresume noswap i915.modeset=1 loglevel=1 cros_e
fi | 457 linux $grubpartB/boot/vmlinuz quiet console=tty2 init=/sbin/init boot=local ro
otwait root=/dev/$linuxpartB ro noresume noswap i915.modeset=1 loglevel=1 cros_e
fi |
| 458 } | 458 } |
| 459 | 459 |
| 460 menuentry "Alternate USB Boot" { | 460 menuentry "Alternate USB Boot" { |
| 461 linux (hd0,3)/boot/vmlinuz quiet console=tty2 init=/sbin/init boot=local rootw
ait root=/dev/sdb3 ro noresume noswap i915.modeset=1 loglevel=1 cros_efi | 461 linux (hd0,3)/boot/vmlinuz quiet console=tty2 init=/sbin/init boot=local rootw
ait root=/dev/sdb3 ro noresume noswap i915.modeset=1 loglevel=1 cros_efi |
| 462 } | 462 } |
| 463 | 463 |
| 464 EOF | 464 EOF |
| 465 # TODO(wad) add baseline syslinux files to ESP and install the syslinux loader |
| 465 | 466 |
| 466 # FIXME: At the moment, we're working on signed images for x86 only. ARM will | 467 # Builds the kernel partition image. The temporary files are kept around |
| 467 # support this before shipping, but at the moment they don't. | 468 # so that we can perform a load_kernel_test later on the final image. |
| 468 if [[ "${ARCH}" = "x86" ]]; then | 469 # TODO(wad) add dm-verity boot args (--boot_args, --root) |
| 469 | 470 ${SCRIPTS_DIR}/build_kernel_image.sh \ |
| 470 # Legacy BIOS will use the kernel in the rootfs (via syslinux), as will | 471 --arch="${ARCH}" \ |
| 471 # standard EFI BIOS (via grub, from the EFI System Partition). Chrome OS | 472 --to="${OUTPUT_DIR}/vmlinuz.image" \ |
| 472 # BIOS will use a separate signed kernel partition, which we'll create now. | 473 --vmlinuz="${ROOT_FS_DIR}/boot/vmlinuz" \ |
| 473 # FIXME: remove serial output, debugging messages. | 474 --working_dir="${OUTPUT_DIR}" \ |
| 474 cat <<'EOF' > "${OUTPUT_DIR}/config.txt" | 475 --keep_work \ |
| 475 earlyprintk=serial,ttyS0,115200 | 476 --keys_dir="${SRC_ROOT}/platform/vboot_reference/tests/testkeys" |
| 476 console=ttyS0,115200 | |
| 477 init=/sbin/init | |
| 478 add_efi_memmap | |
| 479 gpt | |
| 480 boot=local | |
| 481 rootwait | |
| 482 root=/dev/sd%D%P | |
| 483 ro | |
| 484 noresume | |
| 485 noswap | |
| 486 i915.modeset=1 | |
| 487 loglevel=7 | |
| 488 cros_secure | |
| 489 EOF | |
| 490 | |
| 491 # FIXME: We need to specify the real keys and certs here! | |
| 492 SIG_DIR="${SRC_ROOT}/platform/vboot_reference/tests/testkeys" | |
| 493 | |
| 494 # Wrap the public keys with VbPublicKey headers. | |
| 495 vbutil_key --pack \ | |
| 496 --in "${SIG_DIR}/key_rsa2048.keyb" \ | |
| 497 --version 1 --algorithm 4 \ | |
| 498 --out "${OUTPUT_DIR}/key_alg4.vbpubk" | |
| 499 | |
| 500 vbutil_key --pack \ | |
| 501 --in "${SIG_DIR}/key_rsa4096.keyb" \ | |
| 502 --version 1 --algorithm 8 \ | |
| 503 --out "${OUTPUT_DIR}/key_alg8.vbpubk" | |
| 504 | |
| 505 vbutil_keyblock --pack "${OUTPUT_DIR}/data4_sign8.keyblock" \ | |
| 506 --datapubkey "${OUTPUT_DIR}/key_alg4.vbpubk" \ | |
| 507 --signprivate "${SIG_DIR}/key_rsa4096.pem" \ | |
| 508 --algorithm 8 --flags 3 | |
| 509 | |
| 510 # Verify the keyblock. | |
| 511 vbutil_keyblock --unpack "${OUTPUT_DIR}/data4_sign8.keyblock" \ | |
| 512 --signpubkey "${OUTPUT_DIR}/key_alg8.vbpubk" | |
| 513 | |
| 514 # Sign the kernel: | |
| 515 vbutil_kernel --pack "${OUTPUT_DIR}/vmlinuz.image" \ | |
| 516 --keyblock "${OUTPUT_DIR}/data4_sign8.keyblock" \ | |
| 517 --signprivate "${SIG_DIR}/key_rsa2048.pem" \ | |
| 518 --version 1 \ | |
| 519 --config "${OUTPUT_DIR}/config.txt" \ | |
| 520 --bootloader /lib64/bootstub/bootstub.efi \ | |
| 521 --vmlinuz "${ROOT_FS_DIR}/boot/vmlinuz" | |
| 522 | |
| 523 # And verify it. | |
| 524 vbutil_kernel --verify "${OUTPUT_DIR}/vmlinuz.image" \ | |
| 525 --signpubkey "${OUTPUT_DIR}/key_alg8.vbpubk" | |
| 526 | |
| 527 else | |
| 528 # FIXME: For now, ARM just uses the unsigned kernel by itself. | |
| 529 cp -f "${ROOT_FS_DIR}/boot/vmlinuz" "${OUTPUT_DIR}/vmlinuz.image" | |
| 530 fi | |
| 531 | |
| 532 | 477 |
| 533 # Perform any customizations on the root file system that are needed. | 478 # Perform any customizations on the root file system that are needed. |
| 534 "${SCRIPTS_DIR}/customize_rootfs" \ | 479 "${SCRIPTS_DIR}/customize_rootfs" \ |
| 535 --root="${ROOT_FS_DIR}" \ | 480 --root="${ROOT_FS_DIR}" \ |
| 536 --target="${ARCH}" \ | 481 --target="${ARCH}" \ |
| 537 --board="${BOARD}" | 482 --board="${BOARD}" |
| 538 | 483 |
| 539 # Don't test the factory install shim. | 484 # Don't test the factory install shim. |
| 540 if [[ ${FLAGS_factory_install} -eq ${FLAGS_FALSE} ]] ; then | 485 if [[ ${FLAGS_factory_install} -eq ${FLAGS_FALSE} ]] ; then |
| 541 # Check that the image has been correctly created. | 486 # Check that the image has been correctly created. |
| (...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 590 echo "Creating developer image from base image ${OUTPUT_IMG}" | 535 echo "Creating developer image from base image ${OUTPUT_IMG}" |
| 591 cp ${OUTPUT_DIR}/${PRISTINE_IMAGE_NAME} ${OUTPUT_DIR}/${DEVELOPER_IMAGE_NAME} | 536 cp ${OUTPUT_DIR}/${PRISTINE_IMAGE_NAME} ${OUTPUT_DIR}/${DEVELOPER_IMAGE_NAME} |
| 592 update_dev_packages ${OUTPUT_DIR}/${DEVELOPER_IMAGE_NAME} | 537 update_dev_packages ${OUTPUT_DIR}/${DEVELOPER_IMAGE_NAME} |
| 593 fi | 538 fi |
| 594 | 539 |
| 595 trap - EXIT | 540 trap - EXIT |
| 596 | 541 |
| 597 # FIXME: only signing things for x86 right now. | 542 # FIXME: only signing things for x86 right now. |
| 598 if [[ "${ARCH}" = "x86" ]]; then | 543 if [[ "${ARCH}" = "x86" ]]; then |
| 599 # Verify the final image. | 544 # Verify the final image. |
| 545 # key_alg8.vbpubk is generated by build_kernel_image.sh --keep_work |
| 600 load_kernel_test "${OUTPUT_IMG}" "${OUTPUT_DIR}/key_alg8.vbpubk" | 546 load_kernel_test "${OUTPUT_IMG}" "${OUTPUT_DIR}/key_alg8.vbpubk" |
| 601 fi | 547 fi |
| 602 | 548 |
| 603 # Clean up temporary files. | 549 # Clean up temporary files. |
| 604 rm -f "${ROOT_FS_IMG}" "${STATEFUL_FS_IMG}" "${OUTPUT_DIR}/vmlinuz.image" \ | 550 rm -f "${ROOT_FS_IMG}" "${STATEFUL_FS_IMG}" "${OUTPUT_DIR}/vmlinuz.image" \ |
| 605 "${ESP_FS_IMG}" "${OUTPUT_DIR}/data4_sign8.keyblock" \ | 551 "${ESP_FS_IMG}" "${OUTPUT_DIR}/data4_sign8.keyblock" \ |
| 606 "${OUTPUT_DIR}/key_alg4.vbpubk" "${OUTPUT_DIR}/key_alg8.vbpubk" | 552 "${OUTPUT_DIR}/key_alg4.vbpubk" "${OUTPUT_DIR}/key_alg8.vbpubk" |
| 607 rmdir "${ROOT_FS_DIR}" "${STATEFUL_FS_DIR}" "${ESP_FS_DIR}" | 553 rmdir "${ROOT_FS_DIR}" "${STATEFUL_FS_DIR}" "${ESP_FS_DIR}" |
| 608 | 554 |
| 609 echo "Done. Image created in ${OUTPUT_DIR}" | 555 echo "Done. Image created in ${OUTPUT_DIR}" |
| 610 echo "Chromium OS image created as ${PRISTINE_IMAGE_NAME}" | 556 echo "Chromium OS image created as ${PRISTINE_IMAGE_NAME}" |
| 611 if [ "${FLAGS_recovery}" -eq "${FLAGS_TRUE}" ]; then | 557 if [ "${FLAGS_recovery}" -eq "${FLAGS_TRUE}" ]; then |
| 612 echo "Recovery image created as ${PRISTINE_IMAGE_NAME}" | 558 echo "Recovery image created as ${PRISTINE_IMAGE_NAME}" |
| 613 fi | 559 fi |
| 614 if [ "${FLAGS_withdev}" -eq "${FLAGS_TRUE}" ]; then | 560 if [ "${FLAGS_withdev}" -eq "${FLAGS_TRUE}" ]; then |
| 615 echo "Developer image created as ${DEVELOPER_IMAGE_NAME}" | 561 echo "Developer image created as ${DEVELOPER_IMAGE_NAME}" |
| 616 fi | 562 fi |
| 617 | 563 |
| 618 print_time_elapsed | 564 print_time_elapsed |
| 619 | 565 |
| 620 echo "To copy to USB keyfob, OUTSIDE the chroot, do something like:" | 566 echo "To copy to USB keyfob, OUTSIDE the chroot, do something like:" |
| 621 echo " ./image_to_usb.sh --from=${OUTSIDE_OUTPUT_DIR} --to=/dev/sdX" | 567 echo " ./image_to_usb.sh --from=${OUTSIDE_OUTPUT_DIR} --to=/dev/sdX" |
| 622 echo "To convert to VMWare image, OUTSIDE the chroot, do something like:" | 568 echo "To convert to VMWare image, OUTSIDE the chroot, do something like:" |
| 623 echo " ./image_to_vmware.sh --from=${OUTSIDE_OUTPUT_DIR}" | 569 echo " ./image_to_vmware.sh --from=${OUTSIDE_OUTPUT_DIR}" |
| 624 echo "from the scripts directory where you entered the chroot." | 570 echo "from the scripts directory where you entered the chroot." |
| OLD | NEW |