summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLeif Johansson <leifj@sunet.se>2015-08-05 12:01:44 +0200
committerLeif Johansson <leifj@sunet.se>2015-08-05 12:01:44 +0200
commitf1e64a3b0613860b96c1d911cd54cd9e05e96a0e (patch)
tree28867582cb5c77a4960a1decc45688be51932a41
parent231e6e2348dfa11a159017fd9d54ff1063f7ed78 (diff)
tool to purge kernelssunet-ops-2015-08-05-v01
-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