51 lines
1.6 KiB
Django/Jinja
Executable File
51 lines
1.6 KiB
Django/Jinja
Executable File
#!/bin/bash
|
|
|
|
# kernel-cleanup.sh - Remove obsolete packages and config files
|
|
# {{ ansible_managed }}
|
|
|
|
# Determine the active running kernel
|
|
RUNNING_KERNEL="$( uname -v | awk '{ print $4 }' )"
|
|
|
|
# Determine the list of installed kernels (latest first)
|
|
INSTALLED_KERNEL_PACKAGES=( $( dpkg -l | grep 'linux-image-[0-9]' | awk '{ print $2 }' | sort -Vr ) )
|
|
NUM_INSTALLED=${{ '{#' }}INSTALLED_KERNEL_PACKAGES[@]}
|
|
|
|
if [[ ${NUM_INSTALLED} -le 1 ]]; then
|
|
echo "A single kernel is installed, aborting cleanly."
|
|
exit 0
|
|
fi
|
|
|
|
LATEST_KERNEL_PACKAGE="${INSTALLED_KERNEL_PACKAGES[0]}"
|
|
LATEST_KERNEL="$( dpkg -l | grep "${LATEST_KERNEL_PACKAGE}" | awk '{ print $3 }' )"
|
|
if [[ ${LATEST_KERNEL} == ${RUNNING_KERNEL} ]]; then
|
|
force=""
|
|
else
|
|
force="--allow-remove-essential"
|
|
fi
|
|
|
|
# Remove the latest kernel from the array
|
|
NUM_REMOVABLE=$(( ${NUM_INSTALLED} - 1 ))
|
|
REMOVABLE_KERNEL_PACKAGES=( ${INSTALLED_KERNEL_PACKAGES[@]:1} )
|
|
|
|
# Override the "linux-check-removal" script
|
|
mv /usr/bin/linux-check-removal /usr/bin/linux-check-removal.orig
|
|
echo -e '#!/bin/sh\necho "Overriding default linux-check-removal script!"\nexit 0' > /usr/bin/linux-check-removal
|
|
chmod +x /usr/bin/linux-check-removal
|
|
|
|
# Remove the packages
|
|
echo "Removing: ${REMOVABLE_KERNEL_PACKAGES[@]}"
|
|
apt-get purge --yes ${force} ${REMOVABLE_KERNEL_PACKAGES[@]}
|
|
|
|
# Restore the "linux-check-removal" script
|
|
mv /usr/bin/linux-check-removal.orig /usr/bin/linux-check-removal
|
|
|
|
# Make sure there is still a valid kernel installed (just in case something broke)
|
|
if [[ $( dpkg -l | grep 'linux-image-[0-9]' | wc -l ) -lt 1 ]]; then
|
|
echo "WARNING: NO KERNEL IS INSTALLED. THROWING ERROR AND ABORTING."
|
|
exit 1
|
|
fi
|
|
|
|
update-grub
|
|
|
|
exit 0
|