#!/bin/bash

# shellcheck disable=SC1091,SC2086,SC2162,SC2181

. /etc/default/openmediavault
. /usr/share/openmediavault/scripts/helper-functions

export DEBIAN_FRONTEND=noninteractive

distro="$(lsb_release --codename --short)"
pvekey="/usr/share/keyrings/proxmox-archive-keyring.gpg"
pverepo="/etc/apt/sources.list.d/pvekernel.sources"
pverepoold="/etc/apt/sources.list.d/pvekernel.list"
repourl=${OMV_PROXMOX_APT_REPOSITORY_URL:-"http://download.proxmox.com/debian/pve"}
keyurl=${OMV_PROXMOX_KEY_REPOSITORY_URL:-"https://enterprise.proxmox.com/debian/proxmox-archive-keyring-${distro}.gpg"}
repo="pve-no-subscription"


# only 64 bit amd/intel supported
case "$(/usr/bin/arch)" in
  *amd64*|*x86_64*)
    echo "Supported kernel found"
    ;;
  *)
    echo "Unsupported kernel and/or processor"
    exit 1
    ;;
esac

kernelinput="${1}"
if [[ "${kernelinput}" =~ ^[6-7]\.[0-9]{1,2}$ ]]; then
  kernelversion="${kernelinput}"
else
  kernelversion="6.17"
  echo "Invalid kernel version specified.  Using ${kernelversion}"
fi

# delete old .list file
rm -fv "${pverepoold}"

# add repo sources file
cat > "${pverepo}" << EOF
Types: deb
URIs: ${repourl}
Suites: ${distro}
Components: ${repo}
Signed-By: ${pvekey}
EOF

wget --quiet --output-document=- "${keyurl}" | gpg --dearmor > "${pvekey}"
chmod 644 ${pverepo} ${pvekey}
apt-get update

# remove conflicting firmware packages
apt-get --yes purge firmware-linux-free firmware-amd-graphics \
                    firmware-ath9k-htc firmware-cavium \
                    firmware-siano firmware-netronome
if [ $? -gt 0 ]; then
  echo "Failed to remove firmware packages.  Exiting..."
  exit 3
fi

# create dkms dir and set no-autoinstall
mkdir -p /etc/dkms
touch /etc/dkms/no-autoinstall

# install kernel and headers
apt-get --yes --fix-missing install proxmox-kernel-${kernelversion} proxmox-headers-${kernelversion}
if [ $? -gt 0 ]; then
  echo "Failed to install Proxmox kernel.  Exiting..."
  rm -f /etc/dkms/no-autoinstall
  exit 4
fi

# cleanup no-autoinstall
rm -f /etc/dkms/no-autoinstall

# boot the newest kernel of the installed proxmox series by default
omv-kernelfamily set "pve-${kernelversion}"
update-grub

# mark zfs module dirty to ensure the omv-zfs-provider-pve is installed
zfs=$(dpkg -l | awk '$2 == "openmediavault-zfs" { print $1 }')
if [ "${zfs}" = "ii" ]; then
  echo "Marking zfs saltstack module dirty."
  omv_module_set_dirty zfs
fi

echo "Please reboot to use the new kernel."

exit 0
