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

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 "${FUCHSIA_BUILD_DIR}/host_x64/bootserver" "${tmpdir}/host_x64/bootserver"

# Make a temporary image that adds in the .ssh/authorized_keys file.
fx-zbi \
  -o "${tmpdir}/${IMAGE_NETBOOT_ZBI}" \
  "${FUCHSIA_BUILD_DIR}/${IMAGE_NETBOOT_ZBI}" \
  "--entry=data/ssh/authorized_keys=${FUCHSIA_DIR}/.ssh/authorized_keys"

# Now run the copied script, which will use the temporary ZBI.
"${tmpdir}/netboot.sh" "${name_args[@]}" -1 "$@"
