#!/bin/sh # Copyright (C) 2008 Vladimir V. Kamarzin # # Remove all kernels except current # # This file 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; either version 2 of the License, or # (at your option) any later version. # # 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, write to the Free Software # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. . shell-error . shell-args show_help() { cat </dev/null) if [ -n "$current_kernel_package" ] ; then current_kernel_pkgname=$(rpmquery --queryformat "%{NAME}-%{SERIAL}:%{VERSION}-%{RELEASE}\n" -q $current_kernel_package) echo $current_kernel_pkgname | grep -q "(none)" && current_kernel_pkgname=$(rpmquery --queryformat "%{NAME}-%{VERSION}-%{RELEASE}\n" -q $current_kernel_package) else current_kernel_pkgname="UNKNOWN" fi echo "Running kernel version: $current_kernel_pkgname" ####### # set kernel flavour. if not defined with -t option, use current current_kernel_flavour="$(uname -r | cut -d "-" -f2,3)" kernel_flavour="${kernel_flavour:-$current_kernel_flavour}" echo "Checking for installed kernel packages..." flavour_version_release="$(uname -r | awk -F- '{print $2"-"$3"-"$1"-"$4}')" old_kernels="$(rpm -qa | fgrep kernel-image-$kernel_flavour | fgrep -v $flavour_version_release | sort | tr '\n' ' ')" echo "For removing:" # calculate arguments for apt for kernel in $old_kernels do if [ "$current_kernel_flavour" = "$kernel_flavour" ] ; then comparever="$(rpmevrcmp "$current_kernel_package" "$kernel")" [ "$comparever" -lt 0 ] && continue fi echo " $kernel" apt_args_list="$apt_args_list $(rpm -q --queryformat '%{NAME}#%{EPOCH}:%{VERSION}-%{RELEASE}\n' $kernel \ | sed -e "s,(none):,,g")" done echo # use sudo(1) if running as unprivileged user [ "$UID" = "0" ] && SUDO= || SUDO=sudo $SUDO apt-get $force $dryrun remove $apt_args_list # Mask non-zero apt exit code on dry run: if [ -n "$dryrun" ]; then exit 0 fi