| #!/bin/bash |
| |
| # Copyright (c) 2011 The Chromium OS Authors. All rights reserved. |
| # Use of this source code is governed by a BSD-style license that can be |
| # found in the LICENSE file. |
| |
| # Script to take an archived build result and prepare a factory bundle. |
| |
| # --- BEGIN COMMON.SH BOILERPLATE --- |
| # Load common CrOS utilities. Inside the chroot this file is installed in |
| # /usr/lib/crosutils. Outside the chroot we find it relative to the script's |
| # location. |
| find_common_sh() { |
| local common_paths=(/usr/lib/crosutils $(dirname "$(readlink -f "$0")")) |
| local path |
| |
| SCRIPT_ROOT= |
| for path in "${common_paths[@]}"; do |
| if [ -r "${path}/common.sh" ]; then |
| SCRIPT_ROOT=${path} |
| break |
| fi |
| done |
| } |
| |
| find_common_sh |
| . "${SCRIPT_ROOT}/common.sh" || { echo "Unable to load common.sh"; exit 1; } |
| # --- END COMMON.SH BOILERPLATE --- |
| |
| # Flags |
| DEFINE_string factory_test "" "Directory with factory test image." |
| DEFINE_string factory_install "" "Directory with factory install image." |
| DEFINE_string scripts "" "Directory with factory setup scripts." |
| DEFINE_string devserver "" "Directory with mini-omaha files." |
| DEFINE_string bin "" "Directory with binary programs (ex: cgpt)." |
| DEFINE_string output "factory.zip" "Output zip archive file path." |
| DEFINE_boolean fast $FLAGS_FALSE "Build faster (lower compression rate)." |
| |
| # Parse command line |
| FLAGS "$@" || exit 1 |
| eval set -- "${FLAGS_ARGV}" |
| set -e |
| |
| STAGE_DIR="" |
| |
| clean_up() { |
| [ -z "$STAGE_DIR" ] || rm -rf "$STAGE_DIR" || true |
| } |
| |
| # Builds the factory bundle |
| build_factory_bundle() { |
| local stage_dir="$(mktemp -d --tmpdir)" |
| local output="$(readlink -f "$FLAGS_output")" |
| local level="-9" |
| STAGE_DIR="$stage_dir" |
| rm -f "$output" |
| |
| if [ "$FLAGS_fast" = "$FLAGS_TRUE" ]; then |
| level='-1' |
| fi |
| |
| (cd "$stage_dir" |
| ln -s "$FLAGS_factory_test" factory_test |
| ln -s "$FLAGS_factory_install" install_shim |
| ln -s "$FLAGS_scripts" scripts |
| ln -s "$FLAGS_devserver" dev |
| ln -s "$FLAGS_bin" bin |
| if [ -e "factory_test/hwid" ]; then |
| ln -s factory_test/hwid hwid |
| fi |
| |
| # Archive file resources. |
| zip $level -db -dd "$output" \ |
| bin/cgpt \ |
| dev/autoupdate.py \ |
| dev/buildutil.py \ |
| dev/devserver.py \ |
| dev/static \ |
| factory_test/*factory_image* \ |
| factory_test/*partition* \ |
| hwid/hwid* \ |
| install_shim/*factory_install* \ |
| install_shim/*partition* \ |
| install_shim/netboot/* \ |
| scripts/chromeos-common.sh \ |
| scripts/common.sh \ |
| scripts/lib/cros_image_common.sh \ |
| scripts/lib/shflags/shflags \ |
| scripts/make_factory_package.sh \ |
| scripts/make_universal_factory_shim.sh \ |
| scripts/mk_memento_images.sh \ |
| # End of resource list |
| |
| # Adds symlinks as script helpers |
| ln -s . platform |
| ln -s . src |
| zip --grow --symlinks "$output" platform src |
| ) |
| } |
| |
| normalize_directory_param() { |
| local param="$1" |
| local value="$(eval "echo \$FLAGS_$param")" |
| |
| if [ -z "$value" ]; then |
| die "Need directory parameter: --$param" |
| elif [ ! -d "$(readlink -f "$value")" ]; then |
| die "--$param: '$value' is not a directory." |
| else |
| eval "FLAGS_$param=\"$(readlink -f "$value")\"" |
| fi |
| } |
| |
| main() { |
| local param |
| for param in factory_test \ |
| factory_install \ |
| scripts \ |
| devserver \ |
| bin; do |
| normalize_directory_param "$param" |
| done |
| [ -n "$FLAGS_output" ] || die "Need output file name: --output" |
| build_factory_bundle |
| info "Done. Factory bundle created: $FLAGS_output" |
| } |
| |
| trap clean_up EXIT |
| main "$@" |