update-kernel/remove-old-kernels
2016-01-23 10:56:45 +07:00

75 lines
2.1 KiB
Bash
Executable File

#!/bin/sh
# Copyright (C) 2008 Vladimir V. Kamarzin <vvk@altlinux.org>
#
# 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 <<EOF
Usage: $PROG [options]
Valid options are:
-f, --force non-interactive kernel removal (default is interactive)
-n, --dry-run just simulate removal
-h, --help show this text and exit
EOF
exit 1
}
#parse command line options
TEMP=`getopt -n $PROG -o f,n,h -l force,dry-run,help -- "$@"` || show_help
eval set -- "$TEMP"
while :; do
case "$1" in
--) shift; break
;;
-f|--force) force="-y"
;;
-n|--dry-run) dryrun="--no-remove"
;;
-h|--help) show_help
esac
shift
done
if [ -n "$force" -a -n "$dryrun" ]; then
show_usage '--force and --dry-run are mutually exclusive options.'
fi
flavour_version_release="$(uname -r | awk -F- '{print $2"-"$3"-"$1"-"$4}')"
old_kernels="$(rpm -qa | fgrep kernel-image | fgrep -v $flavour_version_release | tr '\n' ' ')"
# calculate arguments for apt
for kernel in $old_kernels
do
apt_args_list="$apt_args_list $(rpm -q --queryformat '%{NAME}#%{EPOCH}:%{VERSION}-%{RELEASE}\n' $kernel \
| sed -e "s,(none):,,g")"
done
# 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