blob: 89b5e9bf0091cce42d28e28fded2b1d40f1df48e [file] [log] [blame]
#!/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 "$@"