#!/bin/bash
|
|
# Common code to build a host image on GCE
|
|
# INTERNAL_extra_source may be set to a directory containing the source for
|
# extra package to build.
|
|
# INTERNAL_IP can be set to --internal-ip run on a GCE instance
|
# The instance will need --scope compute-rw
|
|
source "${ANDROID_BUILD_TOP}/external/shflags/src/shflags"
|
|
DEFINE_string build_instance \
|
"${USER}-build" "Instance name to create for the build" "i"
|
DEFINE_string build_user cuttlefish_crosvm_builder \
|
"User name to use on GCE when doing the build"
|
DEFINE_string project "$(gcloud config get-value project)" "Project to use" "p"
|
DEFINE_string source_image_family debian-9 "Image familty to use as the base" \
|
"s"
|
DEFINE_string source_image_project debian-cloud \
|
"Project holding the base image" "m"
|
DEFINE_string zone "$(gcloud config get-value compute/zone)" "Zone to use" "z"
|
|
SSH_FLAGS=(${INTERNAL_IP})
|
|
wait_for_instance() {
|
alive=""
|
while [[ -z "${alive}" ]]; do
|
sleep 5
|
alive="$(gcloud compute ssh "${SSH_FLAGS[@]}" "$@" -- uptime || true)"
|
done
|
}
|
|
main() {
|
set -o errexit
|
set -x
|
fail=0
|
source_files=(rebuild_gce.sh)
|
if [[ -z "${FLAGS_project}" ]]; then
|
echo Must specify project 1>&2
|
fail=1
|
fi
|
if [[ -z "${FLAGS_zone}" ]]; then
|
echo Must specify zone 1>&2
|
fail=1
|
fi
|
if [[ "${fail}" -ne 0 ]]; then
|
exit "${fail}"
|
fi
|
project_zone_flags=(--project="${FLAGS_project}" --zone="${FLAGS_zone}")
|
delete_instances=("${FLAGS_build_instance}")
|
gcloud compute instances delete -q \
|
"${project_zone_flags[@]}" \
|
"${delete_instances[@]}" || \
|
echo Not running
|
gcloud compute instances create \
|
"${project_zone_flags[@]}" \
|
--machine-type=n1-standard-4 \
|
--image-family="${FLAGS_source_image_family}" \
|
--image-project="${FLAGS_source_image_project}" \
|
"${FLAGS_build_instance}"
|
wait_for_instance "${FLAGS_build_instance}"
|
# beta for the --internal-ip flag that may be passed via SSH_FLAGS
|
gcloud beta compute scp "${SSH_FLAGS[@]}" \
|
"${project_zone_flags[@]}" \
|
"${source_files[@]}" \
|
"${FLAGS_build_user}@${FLAGS_build_instance}:"
|
gcloud compute ssh "${SSH_FLAGS[@]}" \
|
"${project_zone_flags[@]}" \
|
"${FLAGS_build_user}@${FLAGS_build_instance}" -- \
|
./rebuild_gce.sh
|
gcloud beta compute scp --recurse "${SSH_FLAGS[@]}" \
|
"${project_zone_flags[@]}" \
|
"${FLAGS_build_user}@${FLAGS_build_instance}":x86_64 \
|
"${ANDROID_BUILD_TOP}/device/google/cuttlefish_vmm"
|
gcloud compute disks describe \
|
"${project_zone_flags[@]}" "${FLAGS_build_instance}" | \
|
grep ^sourceImage: > x86_64/builder_image.txt
|
exit 0
|
gcloud compute instances delete -q \
|
"${project_zone_flags[@]}" \
|
"${FLAGS_build_instance}"
|
}
|
|
FLAGS "$@" || exit 1
|
main "${FLAGS_ARGV[@]}"
|