{{tag>kernel }} ====== Alte Kernel löschen ====== Bei Updates wird immer wieder mal ein neuer Kernel installiert, alte Kernel werden aber nicht automatisch entfernt. Dies ist vor allem dann ärgerlich, wenn ''/boot'' auf einer eigenen Partition liegt, die durch die alten Kernel vollläuft. Das Skript ''purge-old-kernels'' ist dazu gedacht, hier aufzuräumen. Standardmäßig wird der aktuell verwendete und ein weiterer Kernel behalten, alle anderen Kernel werden samt der zugehörigen Header und etwaiger Extensions gelöscht. Im Skript kann man einstellen, ob man ''aptitude'' oder ''apt-get'' verwenden möchte. Optionen sind: purge-old-kernels -s Es wird nur angezeigt, was passieren würde, wenn man das ''-s'' weglässt. purge-old-kernels --keep 4 Es werden vier Kernel behalten (der aktuell laufende und weitere drei). Und hier ist das Skript: #!/bin/bash # # purge-old-kernels - remove old kernel packages # Copyright (C) 2012 Dustin Kirkland # # Authors: Dustin Kirkland # Kees Cook # # Minor modifications by Jörg Richter # # # 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 # aptitude or apt-get? APT="aptitude" #APT="apt-get" # NOTE: This script will ALWAYS keep the currently running kernel # NOTE: Default is to keep 2 more, user overrides with --keep N KEEP=2 SIMULATE="0" # NOTE: Any unrecognized option will be passed straight through to apt-get/aptitude APT_OPTS= while [ ! -z "$1" ]; do case "$1" in --keep) # User specified the number of kernels to keep KEEP="$2" shift 2 ;; -s) # User specified the number of kernels to keep SIMULATE="1" shift 1 ;; *) APT_OPTS="$APT_OPTS $1" shift 1 ;; esac done # Build our list of kernel packages to purge # Original code, keeps non-generic linux-headers #CANDIDATES=$(ls -tr /boot/vmlinuz-* | head -n -${KEEP} | grep -v "$(uname -r)$" | cut -d- -f2- | awk '{print "linux-image-" $0 " linux-image-extra-" $0 " linux-headers-" $0 " linux-headers-" ${0}}' ) CANDIDATES="" for v in $(ls -tr /boot/vmlinuz-* | head -n -${KEEP} | grep -v "$(uname -r)$" | cut -d- -f2-); do CANDIDATES="$CANDIDATES linux-image-$v linux-image-extra-$v linux-headers-$v linux-headers-${v%-generic}" done 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 if [ "$SIMULATE" = "1" ]; then echo "$APT $APT_OPTS purge $PURGE" else $APT $APT_OPTS purge $PURGE fi