vkpurge (2000B)
1#!/bin/sh 2# 3# A simple script to remove old kernel files/modules. 4# Brought to you by yours truly Juan RP in the Public Domain. 5# 6: "${progname:="${0##*/}"}" 7 8usage() { 9 cat <<_EOF 10Usage: $progname list [version ...] 11 $progname rm all 12 $progname rm <version ...> 13_EOF 14 exit 1 15} 16 17list_kernels() { 18 running=$(uname -r) 19 installed=$(xbps-query -o "/boot/vmlinu[xz]-*" 2>/dev/null | awk '{print $2}') 20 for arg; do 21 case "$arg" in 22 all) pattern="*" ;; 23 *) pattern=$arg ;; 24 esac 25 for k in /boot/vmlinu[xz]-*; do 26 case "$installed" in 27 *"$k"*) continue ;; 28 esac 29 kver=${k#*-} 30 case "$kver" in 31 "$running") ;; 32 "*") ;; # /boot isn't mounted -> no vmlinu[xz] 33 $pattern) printf "%s\n" "$kver" ;; 34 esac 35 done 36 done | sort -uV 37} 38 39run_hooks() { 40 dir="$1" 41 kver="$2" 42 43 for d in /etc/kernel.d/"${dir}"/*; do 44 [ -x "$d" ] || continue 45 printf "Running %s kernel hook: %s...\n" "$dir" "${d##*/}" 46 # Hooks assume they run from the root 47 (cd / && ROOTDIR=. "$d" kernel "$kver") 48 done 49} 50 51remove_kernel() { 52 rmkver="$1" 53 54 # Execute pre-remove kernel hooks. 55 run_hooks pre-remove "$rmkver" 56 57 for f in \ 58 /boot/config-"${rmkver}" \ 59 /boot/System.map-"${rmkver}" \ 60 /boot/vmlinu[xz]-"${rmkver}" \ 61 /usr/lib/modules/"${rmkver}"; do 62 [ -e "$f" ] || continue 63 printf "Removing %s...\n" "$f" 64 rm -rf "$f" 65 done 66 67 # Execute post-remove kernel hooks. 68 run_hooks post-remove "$rmkver" 69 70 for f in \ 71 /usr/src/kernel-headers-"${rmkver}" \ 72 /usr/lib/debug/boot/vmlinu[xz]-"${rmkver}" \ 73 /usr/lib/debug/usr/lib/modules/"${rmkver}" \ 74 /boot/dtbs/dtbs-"${rmkver}"; do 75 [ -e "$f" ] || continue 76 printf "Removing %s...\n" "$f" 77 rm -rf "$f" 78 done 79} 80 81case "$1" in 82 list) list_kernels "${2:-all}" ;; 83 rm) 84 [ -z "$2" ] && usage 85 if [ "$(id -u)" -ne 0 ]; then 86 printf "You have to run this script as root!\n" >&2 87 exit 1 88 fi 89 shift 90 for kver in $(list_kernels "$@"); do 91 printf "Removing kernel %s...\n" "$kver" 92 remove_kernel "$kver" 93 done 94 ;; 95 *) usage ;; 96esac 97exit 0