# the following variables are available in the template:
#
# $INTERFACE_     (interface for the terminalserver)
# $IP_            (ip for the terminalserver to bind)
# $NETMASK_       (network mask)
# $GW_            (gateway)
# $NAMESERVERS_   (nameservers for the nodes)
# $IPRANGE_FROM_  (user configured iprange, first ip)
# $IPRANGE_TO_    (user configured iprange, last ip)
# $NETWORK_       (first ip in this subnet)
# $OPTIONS_       (options for grml-terminalserver)
# $BOOT_ARGS_     (boot arguments for the nodes)
#
# NOTE:
# templates are shellscript fragments and will be sourced from the
# terminalserver
#
# GLOBAL_README_END

if [ "$(uname -m)" = "x86_64" ]; then
  if [ -r "${TFTPD_DATA_DIR_}"/grubx64.efi ] ; then
    echo "${TFTPD_DATA_DIR_}/grubx64.efi exists already, nothing to do."
  elif [ -r /usr/lib/grub/x86_64-efi-signed/grubnetx64.efi.signed ] ; then
    echo "Installing /usr/lib/grub/x86_64-efi-signed/grubnetx64.efi.signed as grubx64.efi for TFTP usage"
    cp /usr/lib/grub/x86_64-efi-signed/grubnetx64.efi.signed "${TFTPD_DATA_DIR_}"/grubx64.efi
  elif [ -r /usr/lib/grub/x86_64-efi/monolithic/grubnetx64.efi ] ; then
    echo "Installing /usr/lib/grub/x86_64-efi/monolithic/grubnetx64.efi as grubx64.efi for TFTP usage"
    cp /usr/lib/grub/x86_64-efi/monolithic/grubnetx64.efi "${TFTPD_DATA_DIR_}"/grubx64.efi
  else
    echo "WARN: No grubnetx64.efi for usage with PXE boot found, not setting up UEFI boot via GRUB."
    (( ret_=ret_+ $? ))
    return "$ret_"
  fi

  if [ -r "${TFTPD_DATA_DIR_}"/bootx64.efi ] ; then
    echo "${TFTPD_DATA_DIR_}/bootx64.efi exists already, nothing to do."
  elif [ -r /usr/lib/shim/shimx64.efi.signed ] ; then
    echo "Installing /usr/lib/shim/shimx64.efi.signed as bootx64.efi for TFTP usage"
    cp /usr/lib/shim/shimx64.efi.signed "${TFTPD_DATA_DIR_}"/bootx64.efi
  elif [ -r /usr/lib/shim/shimx64.efi ] ; then
    echo "Installing /usr/lib/shim/shimx64.efi as bootx64.efi for TFTP usage"
    cp /usr/lib/shim/shimx64.efi "${TFTPD_DATA_DIR_}"/bootx64.efi
  else
    echo "WARN: No shimx64.efi for usage with PXE boot found. Using GRUB directly as bootx64.efi."
    cp "${TFTPD_DATA_DIR_}"/grubx64.efi "${TFTPD_DATA_DIR_}"/bootx64.efi
  fi
fi
if [ "$(uname -m)" = "aarch64" ]; then
  if [ -r "${TFTPD_DATA_DIR_}"/grubaa64.efi ] ; then
    echo "${TFTPD_DATA_DIR_}/grubaa64.efi exists already, nothing to do."
  elif [ -r /usr/lib/grub/arm64-efi-signed/grubnetaa64.efi.signed ] ; then
    echo "Installing /usr/lib/grub/arm64-efi-signed/grubnetaa64.efi.signed as grubaa64.efi for TFTP usage"
    cp /usr/lib/grub/arm64-efi-signed/grubnetaa64.efi.signed "${TFTPD_DATA_DIR_}"/grubaa64.efi
  elif [ -r /usr/lib/grub/arm64-efi/monolithic/grubnetaa64.efi ] ; then
    echo "Installing /usr/lib/grub/arm64-efi/monolithic/grubnetaa64.efi as grubaa64.efi for TFTP usage"
    cp /usr/lib/grub/arm64-efi/monolithic/grubnetaa64.efi "${TFTPD_DATA_DIR_}"/grubaa64.efi
  else
    echo "WARN: No grubnetaa64.efi for usage with PXE boot found, not setting up UEFI boot via GRUB."
    (( ret_=ret_+ $? ))
    return "$ret_"
  fi

  if [ -r "${TFTPD_DATA_DIR_}"/bootaa64.efi ] ; then
    echo "${TFTPD_DATA_DIR_}/bootaa64.efi exists already, nothing to do."
  elif [ -r /usr/lib/shim/shimaa64.efi.signed ] ; then
    echo "Installing /usr/lib/shim/shimaa64.efi.signed as bootaa64.efi for TFTP usage"
    cp /usr/lib/shim/shimaa64.efi.signed "${TFTPD_DATA_DIR_}"/bootaa64.efi
  elif [ -r /usr/lib/shim/shimaa64.efi ] ; then
    echo "Installing /usr/lib/shim/shimaa64.efi as bootaa64.efi for TFTP usage"
    cp /usr/lib/shim/shimaa64.efi "${TFTPD_DATA_DIR_}"/bootaa64.efi
  else
    echo "WARN: No shimaa64.efi for usage with PXE boot found. Using GRUB directly as bootaa64.efi."
    cp "${TFTPD_DATA_DIR_}"/grubaa64.efi "${TFTPD_DATA_DIR_}"/bootaa64.efi
  fi
fi

if [ -r "${TFTPD_DATA_DIR_}"/grub/fonts/unicode.pf2 ] ; then
  echo "${TFTPD_DATA_DIR_}/grub/fonts/unicode.pf2 exists already, nothing to do."
elif [ -r /usr/share/grub/unicode.pf2 ] ; then
  echo "Installing /usr/share/grub/unicode.pf2 for TFTP usage"
  mkdir -p "${TFTPD_DATA_DIR_}"/grub/fonts/
  cp /usr/share/grub/unicode.pf2 "${TFTPD_DATA_DIR_}"/grub/fonts/
else
  echo "WARN: No unicode.pf2 for usage with PXE boot found."
fi

echo "Setting up GRUB configuration for PXE/UEFI usage"
mkdir -p "${TFTPD_DATA_DIR_}/grub/"
cat > "${TFTPD_DATA_DIR_}/grub/grub.cfg" << EOT
# GRUB PXE configuration file

# adjust according to your needs
#set timeout=300

insmod png
set gfxmode=auto
insmod gfxterm
terminal_output gfxterm

loadfont unicode

set menu_color_normal=white/black
set menu_color_highlight=black/yellow

# this needs some tuning, so not enabled by default
# set theme=/boot/grub/grml-theme/theme.txt
# export theme

EOT

# theme support requires e.g. icons/submenu.png within the theme directory,
# which we don't ship though, so not enabled by default
#mkdir -p "${TFTPD_DATA_DIR_}"/grub/themes/boot/grub
#ln -s "${TFTPD_DATA_DIR_}"/boot/grub/grml-theme "${TFTPD_DATA_DIR_}"/grub/themes/boot/grub/

for file in "${TFTPD_DATA_DIR_}"/boot/grub/*_default.cfg "${TFTPD_DATA_DIR_}"/boot/grub/*_options.cfg ; do
  filename="$(basename "${file}")"
  echo "source boot/grub/${filename}" >> "${TFTPD_DATA_DIR_}/grub/grub.cfg"
done

cat >> "${TFTPD_DATA_DIR_}/grub/grub.cfg" << EOT

menuentry "Boot OS of first partition on first disk" {
    set root=(hd0,1)
    chainloader +1
}
EOT

(( ret_=ret_+ $? ))
return "$ret_"
