diff --git a/devshell/boot b/devshell/boot
deleted file mode 100755
index 77ac489..0000000
--- a/devshell/boot
+++ /dev/null
@@ -1,214 +0,0 @@
-#!/bin/bash
-# Copyright 2017 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.
-
-### (deprecated; use "fx pave" or "fx netboot")
-
-## (deprecated; use "fx pave" or "fx netboot")
-##
-## usage: fx boot [--netboot] [--force-pave]
-##                [--artifacts <dir>]
-##                [--sign-tool <path_to_sign_tool>]
-##                [--bootloader <path_to_prebuilt_bootloader>]
-##                [<type>] -- [bootserver arguments]
-##   <type>        see "--help" for list (default: x64 for x64 / arm64 for arm64)
-##   --netboot     Boot from ramdisk containing FVM
-##   --force-pave  Force the target device to pave to persistent storage
-##   --sign-tool   Optional executable to sign kernel images.
-##   --bootloader  Flash the bootloader in addition to other partitions. Only
-##                 works with a limited number of device types.
-##
-## If <type> is omitted, a guess is made based on $FUCHSIA_ARCH. For x64, all
-## x64 images will be supplied (resulting in an FVM pave). For arm64 the default
-## <type> is netboot.
-
-set -e
-
-source "$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"/lib/image_build_vars.sh
-
-declare -a disks=()
-fuchsia_dir="${FUCHSIA_BUILD_DIR}"
-zircon_tools="${ZIRCON_TOOLS_DIR}"
-force_pave=false
-
-usage() {
-    fx-command-help
-    echo
-    echo "Additional bootserver arguments:"
-    exec "${ZIRCON_TOOLS_DIR}/bootserver" --help
-}
-
-echo >&2
-echo >&2 "------ DEPRECATION NOTICE ------"
-echo >&2 "  fx boot is deprecated"
-echo >&2
-echo >&2 "use \"fx serve\" for most workflows"
-echo >&2
-echo >&2 "use \"fx pave\" for solely paving"
-echo >&2 "use \"fx netboot\" for solely netbooting"
-echo >&2
-echo >&2 "note: \"astro --force pave\" is no longer needed"
-echo >&2 "------ DEPRECATION NOTICE ------"
-echo >&2
-sleep 5
-
-
-netboot=false
-bootserver_extra=()
-sign_tool=""
-machine_type=
-while [[ $# -gt 0 ]]; do
-  case "$1" in
-  -h|--help)
-    usage
-    ;;
-  --netboot)
-    netboot=true
-    machine_type="netboot"
-    ;;
-  --force-pave)
-    force_pave=true
-    ;;
-  --sign-tool)
-    shift
-    sign_tool="$1"
-    ;;
-  --bootloader)
-    shift
-    disks=("${disks[@]}" --bootloader "${1}")
-    ;;
-  --)
-    shift
-    while [[ $# -gt 0 ]]; do
-      bootserver_extra=("${bootserver_extra[@]}" "$1")
-      shift
-    done
-    break
-    ;;
-  -*)
-    echo >&2 "error: unknown flag: " "$1"
-    echo >&2
-    echo >&2 "You may be intending to pass this to bootserver."
-    echo >&2 "Bootserver flags must be passed at the end of all other flags, e.g."
-    echo >&2 "  fx boot -- -1"
-    echo >&2
-    echo >&2 "See \`fx boot --help\` for more information."
-    exit 1
-    ;;
-  *)
-    if [[ -n "$machine_type" ]]; then
-      echo >&2 "error: machine type already set (to $machine_type), argument \"$1\" not understood"
-      echo >&2
-      usage
-      exit 1
-    fi
-    machine_type="$1"
-    ;;
-  esac
-  shift
-done
-
-if $force_pave; then
-  case "${machine_type}" in
-    ram|netboot|zedboot)
-      echo >&2 "error: Cannot force paving while targeting ${machine_type}"
-      exit 1
-    ;;
-  esac
-fi
-
-add_fvm=true
-ramdisk="${fuchsia_dir}/${IMAGE_BOOT_RAM}"
-
-case "${machine_type}" in
-  help)
-    usage
-  ;;
-  zedboot)
-    ramdisk="${fuchsia_dir}/${IMAGE_ZEDBOOT_ZBI}"
-    disks=()
-    add_fvm=false
-  ;;
-  ram|netboot)
-    ramdisk="${fuchsia_dir}/${IMAGE_NETBOOT_RAM}"
-    disks=()
-    add_fvm=false
-  ;;
-  cros|pixel|vboot|efi|acer|nuc)
-    disks=("${disks[@]}" --efi "${fuchsia_dir}/${IMAGE_ESP_RAW}")
-    disks=("${disks[@]}" --kernc "${fuchsia_dir}/${IMAGE_ZIRCON_VBOOT}")
-  ;;
-  arm|arm64)
-    disks=("${disks[@]}" --zircona "${fuchsia_dir}/${IMAGE_ZIRCONA_ZBI}"
-      --zirconr "${fuchsia_dir}/${IMAGE_ZIRCONR_ZBI}")
-  ;;
-  gauss)
-    if [[ -z "$IMAGE_ZIRCONA_SIGNEDZBI" || -z "$IMAGE_ZIRCONR_SIGNEDZBI" ]]; then
-      if [[ ! -z "${sign_tool}" ]]; then
-        GAUSS_SIGN_TOOL="${sign_tool}"
-      elif [[ -z "${GAUSS_SIGN_TOOL}" ]]; then
-        echo "Sign tool is required." >&2
-        usage
-      fi
-      "${GAUSS_SIGN_TOOL}" -z "${fuchsia_dir}/${IMAGE_ZIRCONA_ZBI}" \
-                          -o "${fuchsia_dir}/${IMAGE_ZIRCONA_ZBI}.gauss.signed"
-      export IMAGE_ZIRCONA_SIGNEDZBI="${IMAGE_ZIRCONA_ZBI}.gauss.signed"
-      "${GAUSS_SIGN_TOOL}" -z "${fuchsia_dir}/${IMAGE_ZIRCONR_ZBI}" \
-                          -o "${fuchsia_dir}/${IMAGE_ZIRCONR_ZBI}.gauss.signed"
-      export IMAGE_ZIRCONR_SIGNEDZBI="${IMAGE_ZIRCONR_ZBI}.gauss.signed"
-    fi
-    disks=("${disks[@]}" --zircona "${fuchsia_dir}/${IMAGE_ZIRCONA_SIGNEDZBI}" \
-                         --zirconr "${fuchsia_dir}/${IMAGE_ZIRCONR_SIGNEDZBI}")
-    add_fvm=$force_pave
-  ;;
-  astro)
-    if [[ -z "$IMAGE_ZIRCONA_SIGNEDZBI" || -z "$IMAGE_ZIRCONR_SIGNEDZBI" ]]; then
-      if [[ ! -z "${sign_tool}" ]]; then
-        ASTRO_SIGN_TOOL="${sign_tool}"
-      elif [[ -z "${ASTRO_SIGN_TOOL}" ]]; then
-        echo "Sign tool is required." >&2
-        usage
-      fi
-      "${ASTRO_SIGN_TOOL}" -z "${fuchsia_dir}/${IMAGE_ZIRCONA_ZBI}" \
-                          -o "${fuchsia_dir}/${IMAGE_ZIRCONA_ZBI}.astro.signed"
-      export IMAGE_ZIRCONA_SIGNEDZBI="${IMAGE_ZIRCONA_ZBI}.astro.signed"
-      "${ASTRO_SIGN_TOOL}" -z "${fuchsia_dir}/${IMAGE_ZIRCONR_ZBI}" \
-                          -o "${fuchsia_dir}/${IMAGE_ZIRCONR_ZBI}.astro.signed"
-      export IMAGE_ZIRCONR_SIGNEDZBI="${IMAGE_ZIRCONR_ZBI}.astro.signed"
-    fi
-    disks=("${disks[@]}" --zircona "${fuchsia_dir}/${IMAGE_ZIRCONA_SIGNEDZBI}"\
-                         --zirconb "${fuchsia_dir}/${IMAGE_ZIRCONR_SIGNEDZBI}"\
-                         --zirconr "${fuchsia_dir}/${IMAGE_ZIRCONR_SIGNEDZBI}")
-    add_fvm=$force_pave
-  ;;
-  ""|*)
-    if [[ -n "$machine_type" ]]; then
-      echo >&2 "Unknown machine type: \"$machine_type\", using ${FUCHSIA_ARCH}"
-    fi
-
-    if [[ "$FUCHSIA_ARCH" == "x64" ]]; then
-      machine_type="x64"
-      disks=("${disks[@]}" --efi "${fuchsia_dir}/${IMAGE_ESP_RAW}" \
-        --kernc "${fuchsia_dir}/${IMAGE_ZIRCON_VBOOT}")
-    else
-      machine_type="arm64"
-      disks=("${disks[@]}" --zircona "${fuchsia_dir}/${IMAGE_ZIRCONA_ZBI}"
-        --zirconr "${fuchsia_dir}/${IMAGE_ZIRCONR_ZBI}")
-    fi
-esac
-
-if $add_fvm; then
-  disks=("${disks[@]}" --fvm "${fuchsia_dir}/${IMAGE_FVM_SPARSE}")
-fi
-
-name="$(get-device-name)"
-if [[ -n "${name}" ]]; then
-  device_args=("-n" "${name}")
-fi
-
-exec "${zircon_tools}/bootserver" \
-  "${device_args[@]}" \
-  "${disks[@]}" \
-  "${ramdisk}" \
-  "${bootserver_extra[@]}"
