blob: a9e2deb9114267c78bf2faadd53c5db42a72d9c1 [file] [log] [blame]
#!/bin/bash
# Copyright 2018 The Fuchsia Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
### register dev host as target's update source
## usage: fx add-update-source [--name=NAME] [--device=hostname] [--remove-localhost]
##
## Configure target device to use the dev host as its update source.
## Register a new update source using the dev host's address as seen from a
## target fuchsia device. Also, if requested, remove any "localhost" update
## source that requires an active ssh tunnel.
source "$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"/lib/vars.sh
fx-config-read
function usage {
fx-command-help add-update-source
}
function main {
fx-standard-switches "$@"
set -- "${FX_ARGV[@]}"
source_name="devhost"
device_name=""
device_arg=""
remove_localhost=false
while [[ $# -ne 0 ]]; do
case "$1" in
--name)
source_name="$2"
shift
;;
-d|--device)
device_name="$2"
device_arg="-d $2"
shift
;;
--remove-localhost)
remove_localhost=true
;;
*)
echo >&2 "Unrecognized option: $1"
usage
exit 1
esac
shift
done
if ! [[ -x "$(command -v shasum)" ]]; then
echo >&2 "'shasum' binary not found"
exit 1
fi
device_addr="$(fx-command-run netaddr --local $device_name)"
if [[ $? -ne 0 || -z "${device_addr}" ]]; then
echo >&2 "Unable to determine host's IP. Is the target up?"
exit 1
fi
# Strip interface name suffix.
device_addr="${device_addr%%%*}"
repository_dir="${FUCHSIA_BUILD_DIR}/amber-files/repository"
if [[ ! -d "${repository_dir}" ]]; then
echo >&2 "Amber repository does not exist. Please build first."
exit 1
fi
config_dir="${repository_dir}/devhost"
mkdir -p "${config_dir}"
config_path="${config_dir}/config.json"
config_url="http://[${device_addr}]:8083/devhost/config.json"
"${FUCHSIA_DIR}/scripts/generate-update-source-config.py" \
--build-dir="${FUCHSIA_BUILD_DIR}" \
--name="${source_name}" \
--repo-url="http://[${device_addr}]:8083" \
--blobs-url="http://[${device_addr}]:8083/blobs" \
--output "${config_path}" \
|| exit $?
config_hash=$(shasum -a 256 $config_path | cut -f1 -d' ')
fx-command-run shell $device_arg amber_ctl add_src \
-f "${config_url}" \
-h "${config_hash}"
err=$?
if [[ $err -ne 0 ]]; then
echo >&2 "Unable to register update source."
if [[ $err -eq 2 ]]; then
# The GET request failed.
echo >&2 " - Is 'fx serve' or 'fx serve-updates' running?"
echo >&2 " - Can the target reach the development host on tcp port 8083?"
fi
exit 1
fi
if $remove_localhost; then
fx-command-run shell $device_arg amber_ctl rm_src -n localhost 2>/dev/null || true
fi
}
main "$@"