#!/bin/bash

# kernel-cleanup
# Removes intermediate installed kernels that will never be booted
# and which take up valuable space on the root partition

set -o errexit
#set -o xtrace

# Determine the list of installed kernel versions (latest is always last)
INSTALLED_KERNELS=( $( dpkg --list | grep 'linux-image-[0-9]' | grep '^ii\|^rc' | awk '{ print $3 }' | sed 's/\+.*$//' | sort --version-sort ) )

if [[ ${#INSTALLED_KERNELS[@]} -le 1 ]]; then
    echo "Only one kernel is installed, aborting."
    exit 0
fi

LATEST_KERNEL="${INSTALLED_KERNELS[-1]}"
RUNNING_KERNEL="$( uname --kernel-version | awk '{ print $4 }' | sed 's/\+.*$//' )"

declare -a INTERMEDIATE_KERNELS
for KERNEL in ${INSTALLED_KERNELS[@]}; do
    if [[ ${KERNEL} == ${LATEST_KERNEL} ]]; then
        continue
    elif [[ ${KERNEL} == ${RUNNING_KERNEL} ]]; then
        continue
    else
        INTERMEDIATE_KERNELS+=( ${KERNEL} )
    fi
done

if [[ ${#INTERMEDIATE_KERNELS[@]} -eq 0 ]]; then
    echo "No intermediate kernels installed, aborting."
    exit 0
fi

declare -a PURGE_PACKAGES
for KERNEL in ${INTERMEDIATE_KERNELS[@]}; do
    PURGE_PACKAGES+=( $( dpkg --list | grep 'linux-image-[0-9]' | grep '^ii\|^rc' | grep "${KERNEL}" | awk '{ print $2 }' ) )
done

# Remove the packages
echo "Removing: ${PURGE_PACKAGES[@]}"
apt-get purge --yes ${PURGE_PACKAGES[@]}

exit 0

# vim: cindent:shiftwidth=4:tabstop=4:expandtab
