From f1e64a3b0613860b96c1d911cd54cd9e05e96a0e Mon Sep 17 00:00:00 2001 From: Leif Johansson Date: Wed, 5 Aug 2015 12:01:44 +0200 Subject: tool to purge kernels --- global/overlay/usr/local/sbin/purge-old-kernels | 58 +++++++++++++++++++++++++ 1 file changed, 58 insertions(+) create mode 100755 global/overlay/usr/local/sbin/purge-old-kernels (limited to 'global/overlay/usr/local/sbin') 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 +# +# Authors: Dustin Kirkland +# Kees Cook +# +# 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 . + +# 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 -- cgit v1.1