#!/bin/bash

set -u -e

export PATH='/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin'

booted_kernel_version=$(dpkg-query -s linux-image-$(uname -r)|awk '/^Version:/ {print $2}')
latest_kernel_version=0
installed_kernel_pkgs=$(dpkg -l|grep -o -P "linux-(image-.*-(generic|virtual|aws)|(headers|modules)-\d)[^ ]*")
require_reboot=false
[ -f /var/run/reboot-required ] && require_reboot=true

declare -A version2pkg

for pkg in $installed_kernel_pkgs; do
    version=$(dpkg-query -s $pkg|awk '/^Version:/ {print $2}')
    # latest kernel version should be determined only from the linux-image packages to avoid confusion
    # if some other kernel related package with newer version was accidentally installed
    [[ "$pkg" =~ ^linux-image ]] && dpkg --compare-versions $version gt $latest_kernel_version && latest_kernel_version=$version
    version2pkg[$version]+="$pkg "
done

unset version2pkg[$latest_kernel_version]
unset version2pkg[$booted_kernel_version]

[ "${#version2pkg[@]}" == "0" ] && exit

pkgs_to_purge=()

for pkg in ${version2pkg[@]}; do
    pkgs_to_purge+=($pkg)
done

echo "Removing unused kernels and headers: ${pkgs_to_purge[@]}"
apt-get purge -y ${pkgs_to_purge[@]}
$require_reboot || rm -f /var/run/reboot-required
