blob: ad71328c0d26032c9aa94ae6b31a3f15908f45ce [file] [log] [blame]
#!/bin/bash
# Copyright 2023 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.
#### CATEGORY=Software delivery
### make a Fuchsia installer image from a remote build host
## usage: fx mkinstaller-remote [<host> [<host_dir>]] <mkinstaller args>
## host Remote build host name; defaults to the last-used host.
## host_dir Fuchsia root dir on the remote build host; defaults to the last-used dir or ~/fuchsia.
##
## Use --help to get a full list of mkinstaller args.
set -e
source "$(cd "$(dirname "${BASH_SOURCE[0]}")" >/dev/null 2>&1 && pwd)"/../lib/vars.sh || exit $?
source "$(cd "$(dirname "${BASH_SOURCE[0]}")" >/dev/null 2>&1 && pwd)"/../lib/fx-remote.sh || exit $?
fx-config-read
# First scan for --help and if found just pass it directly and exit. This is
# necessary because next we're going to use --print-host-args-only to extract
# the host-related args, and trying to handle the --help case there is more
# complicated.
if echo "$@" | grep -w -q -- "--help"; then
fx-command-run mkinstaller "$@"
exit $?
fi
# Extract the |host| and |host_dir| args.
host_args=$(fx-command-run mkinstaller "$@" --print-host-args-only)
read host host_dir <<< ${host_args}
if cached=( $(load_remote_info "${host}") ); then
host="${cached[0]}"
host_dir="${cached[1]}"
fi
if [[ -z "${host}" ]]; then
fx-error "host must be specified"
fx-command-help
exit 1
fi
if [[ -z "${host_dir}" ]]; then
if ssh "${host}" ls "\${HOME}/fuchsia/.jiri_root/bin/fx" > /dev/null; then
host_dir="\${HOME}/fuchsia"
else
fx-error "failed to find \${HOME}/fuchsia on ${host}, please specify host dir"
fx-command-help
exit 1
fi
fi
save_remote_info "${host}" "${host_dir}"
# Create the image on the remote and grab the path from stdout.
if ! remote_path=$(ssh "${host}" \
"cd \"${host_dir}\" && \
.jiri_root/bin/fx mkinstaller $@ --temp-remote-image-only"); then
fx-error "failed to create image on ${host}"
fx-error "if due to unrecognized arguments, you may need to 'jiri update' one or both machines"
exit 1
fi
local_image_dir="${FUCHSIA_DIR}/out/fetched"
if ! mkdir -p ${local_image_dir}; then
fx-error "failed to create directory for the fetched installer image"
exit 1
fi
local_path="${local_image_dir}/installer.img"
fx-info "Copying installer image to local host"
rsync --compress --partial --progress "${host}:${remote_path}" "${local_path}"
# Clean up the remote temp dir.
remote_dir=$(dirname "${remote_path}")
ssh "${host}" rm -rf \"${remote_dir}\"
# Now write the image to the final requested location.
# We could just `dd` here, but mkinstaller has some safety-checks for the
# output path that we want to retain.
fx-command-run mkinstaller "$@" --from-image "${local_path}"