|  | #!/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 "$@" |