summaryrefslogtreecommitdiff
path: root/global
diff options
context:
space:
mode:
Diffstat (limited to 'global')
-rwxr-xr-xglobal/overlay/usr/local/sbin/purge-old-kernels58
1 files changed, 58 insertions, 0 deletions
diff --git a/global/overlay/usr/local/sbin/purge-old-kernels b/global/overlay/usr/local/sbin/purge-old-kernels
new file mode 100755
index 0000000..675f810
--- /dev/null
+++ b/global/overlay/usr/local/sbin/purge-old-kernels
@@ -0,0 +1,58 @@
+#!/bin/sh
+#
+# purge-old-kernels - remove old kernel packages
+# Copyright (C) 2012 Dustin Kirkland <kirkland@ubuntu.com>
+#
+# Authors: Dustin Kirkland <kirkland@ubuntu.com>
+# Kees Cook <kees@ubuntu.com>
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, version 3 of the License.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+# Ensure we're running as root
+if [ "$(id -u)" != 0 ]; then
+ echo "ERROR: This script must run as root. Hint..." 1>&2
+ echo " sudo $0 $@" 1>&2
+ exit 1
+fi
+
+# NOTE: This script will ALWAYS keep the currently running kernel
+# NOTE: Default is to keep 2 more, user overrides with --keep N
+KEEP=2
+# NOTE: Any unrecognized option will be passed straight through to apt-get
+APT_OPTS=
+while [ ! -z "$1" ]; do
+ case "$1" in
+ --keep)
+ # User specified the number of kernels to keep
+ KEEP="$2"
+ shift 2
+ ;;
+ *)
+ APT_OPTS="$APT_OPTS $1"
+ shift 1
+ ;;
+ esac
+done
+
+# Build our list of kernel packages to purge
+CANDIDATES=$(ls -tr /boot/vmlinuz-* | head -n -${KEEP} | grep -v "$(uname -r)$" | cut -d- -f2- | awk '{print "linux-image-" $0 " linux-headers-" $0}' )
+for c in $CANDIDATES; do
+ dpkg-query -s "$c" >/dev/null 2>&1 && PURGE="$PURGE $c"
+done
+
+if [ -z "$PURGE" ]; then
+ echo "No kernels are eligible for removal"
+ exit 0
+fi
+
+apt-get $APT_OPTS remove --purge $PURGE