blob: aef1a9042e1209b9ecdc853604fcb3f5d3c70f91 [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.
#### CATEGORY=Software delivery
### run bootserver for netbooting
## usage: fx netboot [-h|--help] [--no-build] [bootserver flags]
##
## --no-build Do not build netboot.zbi before starting server
##
## bootserver flags:
## Not all flags will be supported. Internally this script takes control over
## all positional arguments, the -1, -n and some other arguments. Configuration
## oriented flags such as -b and -w should work.
set -e
source "$(cd "$(dirname "${BASH_SOURCE[0]}")" >/dev/null 2>&1 && pwd)"/lib/image_build_vars.sh || exit $?
build=true
while [[ $# -ge 1 ]]; do
case "$1" in
-h|--help)
fx-command-help
echo >&2
echo >&2 "Bootserver help follows (for bootserver flags):"
echo >&2
"${FUCHSIA_BUILD_DIR}/netboot.sh" --help
;;
--no-build)
build=false
;;
*)
break
esac
shift
done
name_args=()
name="$(get-device-name)" || exit $?
if [[ -n "$name" ]]; then
name_args+=("-n" "${name}")
fi
if "$build"; then
fx-command-run build "${IMAGE_NETBOOT_ZBI}" netboot.sh
fi
netboot_script="${FUCHSIA_BUILD_DIR}/netboot.sh"
if [[ ! -x "${netboot_script}" ]]; then
fx-error "netboot script does not exist or is not executable: ${netboot_script}"
fx-error "Hint: try using \"--netboot\" in the \"fx set\" command."
exit 1
fi
authkeys_path="$(get-ssh-authkeys)" || {
fx-error "Cannot continue without a valid authorized keys file."
exit 1
}
tmpdir="${FUCHSIA_BUILD_DIR}.netboot.tmp"
mkdir "${tmpdir}"
trap 'rm -rf "${tmpdir}"' EXIT
# The script uses the ${IMAGE_NETBOOT_ZBI} relative path, relative to its own
# location. So copy the script into a temporary location next to the location
# where we'll write the temporary copy of ${IMAGE_NETBOOT_ZBI}.
cp "${netboot_script}" "${tmpdir}"
# XXX(raggi): the following is quite undesirable, as it takes internal
# dependencies on the build, but at present the ssh-key fixup below is hard to
# achieve otherwise.
mkdir "${tmpdir}/host_x64"
cp "${HOST_OUT_DIR}/bootserver" "${tmpdir}/host_x64/bootserver"
# Make a temporary image that adds in the ~/.ssh/fuchsia_authorized_keys file.
# Netboot doesn't require special compression. fxbug.dev/43305 for more info.
fx-zbi-default-compression \
-o "${tmpdir}/${IMAGE_NETBOOT_ZBI}" \
"${FUCHSIA_BUILD_DIR}/${IMAGE_NETBOOT_ZBI}" \
"--entry=data/ssh/authorized_keys=${authkeys_path}"
# Now run the copied script, which will use the temporary ZBI.
"${tmpdir}/netboot.sh" "${name_args[@]}" -1 "$@"