Skip to content

Instantly share code, notes, and snippets.

@RPDiep
Last active March 4, 2016 15:07
Show Gist options
  • Save RPDiep/0ed30b2014615bef8a07 to your computer and use it in GitHub Desktop.
Save RPDiep/0ed30b2014615bef8a07 to your computer and use it in GitHub Desktop.
Ubuntu Kernel Cleanup

Ubuntu Kernel Cleanup

General

This script is used to remove old kernels cluttering /boot on Ubuntu systems. The following kernels are preserved:

  • The running kernel
  • The latest kernel from each major version

This means that, if for example linux-image-server and linux-image-generic-lts-quantal are installed on an Ubuntu Precise system, the running kernel, the latest 3.2.0 kernel and the latest 3.5.0 kernel are preserved. All other kernels and header files are purged.

Install

  • Copy kernel-cleanup to /usr/local/sbin and make it executable
  • Copy kernel-cleanup_dpkg-hook to /etc/apt/apt.conf.d/98-kernel-cleanup
#!/bin/bash
### FUNCTIONS ###
getcurrentkernel() {
uname -r
}
getcurrentmajorkernel() {
uname -r | grep -oE '[0-9]+\.[0-9]+\.[0-9]+-[0-9]+'
}
getinstalledmajorkernels() {
dpkg -l | grep -oE '^ii linux-image-[0-9]+\.[0-9]+\.[0-9]+' | grep -oE '[0-9]+\.[0-9]+\.[0-9]+' | sort | uniq
}
getlatestversion() {
dpkg -l | grep -E "^ii linux-image-$1" | awk 'END{print $2}' | grep -oE '[0-9]+\.[0-9]+\.[0-9]+-[0-9]+'
}
getexcludelist() {
excludelist=$(getcurrentmajorkernel)
for kver in $(getinstalledmajorkernels)
do
excludelist+="|"$(getlatestversion ${kver})
done
echo ${excludelist}
}
getremovelist() {
removelist=$(dpkg -l | awk /'^(ii|rc) linux-(image|headers)-([a-z]+-)?[0-9]+\.[0-9]+\.[0-9]+/ {print $2}' | grep -vE $(getexcludelist))
echo ${removelist}
}
disablegrubhook() {
[ -d /etc/kernel.bak ] || mkdir /etc/kernel.bak
[ -f /etc/kernel/postrm.d/zz-update-grub ] && mv -f /etc/kernel/postrm.d/zz-update-grub /etc/kernel.bak
[ -f /etc/kernel-img.conf ] && mv -f /etc/kernel-img.conf /etc/kernel.bak && sed 's/^\(postrm_hook = update-grub\)$/#\1/' /etc/kernel.bak/kernel-img.conf > /etc/kernel-img.conf
}
enablegrubhook() {
[ -f /etc/kernel.bak/zz-update-grub -a ! -f /etc/kernel/postrm.d/zz-update-grub ] && mv /etc/kernel.bak/zz-update-grub /etc/kernel/postrm.d
[ -f /etc/kernel.bak/kernel-img.conf ] && mv -f /etc/kernel.bak/kernel-img.conf /etc/kernel-img.conf
rm -fr /etc/kernel.bak
}
### MAIN SCRIPT ###
removelist=$(getremovelist)
[[ -z ${removelist} ]] && exit 0
echo "Cleanup of old kernels ..."
disablegrubhook
echo ${removelist} | xargs dpkg -P
enablegrubhook
update-grub
DPkg::Post-Invoke {"/usr/local/sbin/kernel-cleanup"}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment