void-packages

Void Source Packages
git clone git://ezup.dev/void-packages.git
Log | Files | Refs | README | LICENSE

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