| 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 17 matching lines...) Expand all Loading... |
| 28 DEFINE_string output_root "${DEFAULT_BUILD_ROOT}/images" \ | 28 DEFINE_string output_root "${DEFAULT_BUILD_ROOT}/images" \ |
| 29 "Directory in which to place image result directories (named by version)" | 29 "Directory in which to place image result directories (named by version)" |
| 30 DEFINE_boolean replace $FLAGS_FALSE \ | 30 DEFINE_boolean replace $FLAGS_FALSE \ |
| 31 "Overwrite existing output, if any." | 31 "Overwrite existing output, if any." |
| 32 DEFINE_boolean withdev $FLAGS_TRUE \ | 32 DEFINE_boolean withdev $FLAGS_TRUE \ |
| 33 "Include useful developer friendly utilities in the image." | 33 "Include useful developer friendly utilities in the image." |
| 34 DEFINE_boolean installmask $FLAGS_TRUE \ | 34 DEFINE_boolean installmask $FLAGS_TRUE \ |
| 35 "Use INSTALL_MASK to shrink the resulting image." | 35 "Use INSTALL_MASK to shrink the resulting image." |
| 36 DEFINE_integer jobs -1 \ | 36 DEFINE_integer jobs -1 \ |
| 37 "How many packages to build in parallel at maximum." | 37 "How many packages to build in parallel at maximum." |
| 38 DEFINE_integer retries -1 \ | |
| 39 "On image mastering failure, the number of times to retry" | |
| 40 DEFINE_boolean statefuldev $FLAGS_FALSE \ | 38 DEFINE_boolean statefuldev $FLAGS_FALSE \ |
| 41 "Install development packages on stateful partition rather than the rootfs" | 39 "Install development packages on stateful partition rather than the rootfs" |
| 42 DEFINE_string to "" \ | 40 DEFINE_string to "" \ |
| 43 "The target image file or device" | 41 "The target image file or device" |
| 44 DEFINE_boolean withtest $FLAGS_FALSE \ | 42 DEFINE_boolean withtest $FLAGS_FALSE \ |
| 45 "Include packages required for testing and prepare image for testing" | 43 "Include packages required for testing and prepare image for testing" |
| 46 DEFINE_string factory_server "" \ | 44 DEFINE_string factory_server "" \ |
| 47 "Build a factory install image pointing to given server." | 45 "Build a factory install image pointing to given server." |
| 48 | 46 |
| 49 # Parse command line. | 47 # Parse command line. |
| (...skipping 228 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 278 sudo cp -a "${BOARD_ROOT}"/lib/libgcc_s.so* "${ROOT_FS_DIR}/lib" | 276 sudo cp -a "${BOARD_ROOT}"/lib/libgcc_s.so* "${ROOT_FS_DIR}/lib" |
| 279 sudo cp -a "${BOARD_ROOT}"/usr/lib/libstdc++.so* "${ROOT_FS_DIR}/usr/lib" | 277 sudo cp -a "${BOARD_ROOT}"/usr/lib/libstdc++.so* "${ROOT_FS_DIR}/usr/lib" |
| 280 | 278 |
| 281 INSTALL_MASK="" | 279 INSTALL_MASK="" |
| 282 if [[ $FLAGS_installmask -eq ${FLAGS_TRUE} ]] ; then | 280 if [[ $FLAGS_installmask -eq ${FLAGS_TRUE} ]] ; then |
| 283 INSTALL_MASK="$DEFAULT_INSTALL_MASK" | 281 INSTALL_MASK="$DEFAULT_INSTALL_MASK" |
| 284 fi | 282 fi |
| 285 | 283 |
| 286 if [[ $FLAGS_jobs -ne -1 ]]; then | 284 if [[ $FLAGS_jobs -ne -1 ]]; then |
| 287 EMERGE_JOBS="--jobs=$FLAGS_jobs" | 285 EMERGE_JOBS="--jobs=$FLAGS_jobs" |
| 288 if [[ $FLAGS_retries -eq -1 ]]; then | |
| 289 # The jobs flag can be flaky. Retry once by default, | |
| 290 # without the jobs flag. | |
| 291 FLAGS_retries=1 | |
| 292 fi | |
| 293 fi | 286 fi |
| 294 | 287 |
| 295 # Prepare stateful partition with some pre-created directories | 288 # Prepare stateful partition with some pre-created directories |
| 296 sudo mkdir -p "${DEV_IMAGE_ROOT}" | 289 sudo mkdir -p "${DEV_IMAGE_ROOT}" |
| 297 sudo mkdir -p "${STATEFUL_DIR}/var" | 290 sudo mkdir -p "${STATEFUL_DIR}/var" |
| 298 | 291 |
| 299 # Create symlinks so that /usr/local/usr based directories are symlinked to | 292 # Create symlinks so that /usr/local/usr based directories are symlinked to |
| 300 # /usr/local/ directories e.g. /usr/local/usr/bin -> /usr/local/bin, etc. | 293 # /usr/local/ directories e.g. /usr/local/usr/bin -> /usr/local/bin, etc. |
| 301 setup_symlinks_on_root "${DEV_IMAGE_ROOT}" "${STATEFUL_DIR}/var" | 294 setup_symlinks_on_root "${DEV_IMAGE_ROOT}" "${STATEFUL_DIR}/var" |
| 302 | 295 |
| 303 # Perform binding rather than symlinking because directories must exist | 296 # Perform binding rather than symlinking because directories must exist |
| 304 # on rootfs so that we can bind at run-time since rootfs is read-only | 297 # on rootfs so that we can bind at run-time since rootfs is read-only |
| 305 echo "Binding directories from stateful partition onto the rootfs" | 298 echo "Binding directories from stateful partition onto the rootfs" |
| 306 sudo mkdir -p "${ROOT_FS_DIR}/usr/local" | 299 sudo mkdir -p "${ROOT_FS_DIR}/usr/local" |
| 307 sudo mount --bind "${DEV_IMAGE_ROOT}" "${ROOT_FS_DIR}/usr/local" | 300 sudo mount --bind "${DEV_IMAGE_ROOT}" "${ROOT_FS_DIR}/usr/local" |
| 308 sudo mkdir -p "${ROOT_FS_DIR}/var" | 301 sudo mkdir -p "${ROOT_FS_DIR}/var" |
| 309 sudo mount --bind "${STATEFUL_DIR}/var" "${ROOT_FS_DIR}/var" | 302 sudo mount --bind "${STATEFUL_DIR}/var" "${ROOT_FS_DIR}/var" |
| 310 | 303 |
| 311 # We "emerge --root=$ROOT_FS_DIR --root-deps=rdeps --usepkgonly" all of the | 304 # We "emerge --root=$ROOT_FS_DIR --root-deps=rdeps --usepkgonly" all of the |
| 312 # runtime packages for chrome os. This builds up a chrome os image from binary | 305 # runtime packages for chrome os. This builds up a chrome os image from binary |
| 313 # packages with runtime dependencies only. We use INSTALL_MASK to trim the | 306 # packages with runtime dependencies only. We use INSTALL_MASK to trim the |
| 314 # image size as much as possible. | 307 # image size as much as possible. |
| 315 eretry sudo INSTALL_MASK="$INSTALL_MASK" emerge-${BOARD} \ | 308 sudo INSTALL_MASK="$INSTALL_MASK" emerge-${BOARD} \ |
| 316 --root="$ROOT_FS_DIR" --root-deps=rdeps \ | 309 --root="$ROOT_FS_DIR" --root-deps=rdeps \ |
| 317 --usepkgonly chromeos $EMERGE_JOBS | 310 --usepkgonly chromeos $EMERGE_JOBS |
| 318 | 311 |
| 319 # Determine the root dir for development packages. | 312 # Determine the root dir for development packages. |
| 320 ROOT_DEV_DIR="$ROOT_FS_DIR" | 313 ROOT_DEV_DIR="$ROOT_FS_DIR" |
| 321 [ $FLAGS_statefuldev -eq $FLAGS_TRUE ] && ROOT_DEV_DIR="$ROOT_FS_DIR/usr/local" | 314 [ $FLAGS_statefuldev -eq $FLAGS_TRUE ] && ROOT_DEV_DIR="$ROOT_FS_DIR/usr/local" |
| 322 | 315 |
| 323 # Install development packages. | 316 # Install development packages. |
| 324 if [[ $FLAGS_withdev -eq $FLAGS_TRUE ]] ; then | 317 if [[ $FLAGS_withdev -eq $FLAGS_TRUE ]] ; then |
| 325 eretry sudo INSTALL_MASK="$INSTALL_MASK" emerge-${BOARD} \ | 318 sudo INSTALL_MASK="$INSTALL_MASK" emerge-${BOARD} \ |
| 326 --root="$ROOT_DEV_DIR" --root-deps=rdeps \ | 319 --root="$ROOT_DEV_DIR" --root-deps=rdeps \ |
| 327 --usepkgonly chromeos-dev $EMERGE_JOBS | 320 --usepkgonly chromeos-dev $EMERGE_JOBS |
| 328 | 321 |
| 329 # TODO(sosa@chromium.org) - Re-hide under statefuldev after switch | 322 # TODO(sosa@chromium.org) - Re-hide under statefuldev after switch |
| 330 # Flag will mount /usr/local on target device | 323 # Flag will mount /usr/local on target device |
| 331 sudo mkdir -p "$ROOT_FS_DIR/root" | 324 sudo mkdir -p "$ROOT_FS_DIR/root" |
| 332 sudo touch "$ROOT_FS_DIR/root/.dev_mode" | 325 sudo touch "$ROOT_FS_DIR/root/.dev_mode" |
| 333 | 326 |
| 334 # The ldd tool is a useful shell script but lives in glibc; just copy it. | 327 # The ldd tool is a useful shell script but lives in glibc; just copy it. |
| 335 sudo cp -a "$(which ldd)" "${ROOT_DEV_DIR}/usr/bin" | 328 sudo cp -a "$(which ldd)" "${ROOT_DEV_DIR}/usr/bin" |
| 336 fi | 329 fi |
| 337 | 330 |
| 338 if [ -n "$FLAGS_factory_server" ]; then | 331 if [ -n "$FLAGS_factory_server" ]; then |
| 339 eretry sudo INSTALL_MASK="$INSTALL_MASK" emerge-${BOARD} \ | 332 sudo INSTALL_MASK="$INSTALL_MASK" emerge-${BOARD} \ |
| 340 --root="$ROOT_DEV_DIR" --root-deps=rdeps \ | 333 --root="$ROOT_DEV_DIR" --root-deps=rdeps \ |
| 341 --usepkgonly chromeos-factoryinstall $EMERGE_JOBS | 334 --usepkgonly chromeos-factoryinstall $EMERGE_JOBS |
| 342 fi | 335 fi |
| 343 | 336 |
| 344 # Install packages required for testing. | 337 # Install packages required for testing. |
| 345 if [[ $FLAGS_withtest -eq $FLAGS_TRUE ]] ; then | 338 if [[ $FLAGS_withtest -eq $FLAGS_TRUE ]] ; then |
| 346 eretry sudo INSTALL_MASK="$INSTALL_MASK" emerge-${BOARD} \ | 339 sudo INSTALL_MASK="$INSTALL_MASK" emerge-${BOARD} \ |
| 347 --root="$ROOT_DEV_DIR" --root-deps=rdeps \ | 340 --root="$ROOT_DEV_DIR" --root-deps=rdeps \ |
| 348 --usepkgonly chromeos-test $EMERGE_JOBS | 341 --usepkgonly chromeos-test $EMERGE_JOBS |
| 349 fi | 342 fi |
| 350 | 343 |
| 351 # Perform any customizations on the root file system that are needed. | 344 # Perform any customizations on the root file system that are needed. |
| 352 EXTRA_CUSTOMIZE_ROOTFS_FLAGS="" | 345 EXTRA_CUSTOMIZE_ROOTFS_FLAGS="" |
| 353 if [ $FLAGS_withdev -eq $FLAGS_TRUE ]; then | 346 if [ $FLAGS_withdev -eq $FLAGS_TRUE ]; then |
| 354 EXTRA_CUSTOMIZE_ROOTFS_FLAGS="--withdev" | 347 EXTRA_CUSTOMIZE_ROOTFS_FLAGS="--withdev" |
| 355 fi | 348 fi |
| 356 if [ -n "$FLAGS_factory_server" ]; then | 349 if [ -n "$FLAGS_factory_server" ]; then |
| (...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 438 | 431 |
| 439 OUTSIDE_OUTPUT_DIR="../build/images/${FLAGS_board}/${IMAGE_SUBDIR}" | 432 OUTSIDE_OUTPUT_DIR="../build/images/${FLAGS_board}/${IMAGE_SUBDIR}" |
| 440 echo "Done. Image created in ${OUTPUT_DIR}" | 433 echo "Done. Image created in ${OUTPUT_DIR}" |
| 441 echo "To copy to USB keyfob, OUTSIDE the chroot, do something like:" | 434 echo "To copy to USB keyfob, OUTSIDE the chroot, do something like:" |
| 442 echo " ./image_to_usb.sh --from=${OUTSIDE_OUTPUT_DIR} --to=/dev/sdb" | 435 echo " ./image_to_usb.sh --from=${OUTSIDE_OUTPUT_DIR} --to=/dev/sdb" |
| 443 echo "To convert to VMWare image, OUTSIDE the chroot, do something like:" | 436 echo "To convert to VMWare image, OUTSIDE the chroot, do something like:" |
| 444 echo " ./image_to_vmware.sh --from=${OUTSIDE_OUTPUT_DIR}" | 437 echo " ./image_to_vmware.sh --from=${OUTSIDE_OUTPUT_DIR}" |
| 445 echo "from the scripts directory where you entered the chroot." | 438 echo "from the scripts directory where you entered the chroot." |
| 446 | 439 |
| 447 trap - EXIT | 440 trap - EXIT |
| OLD | NEW |