python-texttable: update to 1.3.1
[void-packages.git] / srcpkgs / base-files / files / vkpurge
blob88c53cd3a6d069f360f7d70d0bd7cd69c9951edc
1 #!/bin/sh
3 # A simple script to remove old kernel files/modules.
4 # Brought to you by yours truly Juan RP in the Public Domain.
6 : ${progname:=$(basename $0)}
8 case "$(xbps-uhelper arch)" in
9 aarch64*) KIMAGE="vmlinux";;
10 *) KIMAGE="vmlinuz";;
11 esac
13 usage()
15 cat <<_EOF
16 Usage: $progname <target> [<version>]
18 Targets:
19 list Lists old installed kernels.
20 rm <version...|all> Remove kernel <version> or all old kernels.
22 Example:
23 $ $progname list
24 $ $progname rm 4.9.81_1
25 _EOF
26 exit 1
29 list_kernels()
31 local k kpkg installed kver _f
33 for k in /boot/$KIMAGE-*; do
34 _f=$(basename $k)
35 kver=$(echo ${_f}|sed -e 's|-rc|rc|')
36 installed=$(xbps-query -o "$k" 2>/dev/null)
37 [ -n "$installed" ] && continue
38 kpkg="$(xbps-uhelper getpkgversion ${_f} 2>/dev/null)"
39 [ "$(uname -r)" = "$kpkg" ] && continue
40 [ -n "$kpkg" ] && echo "$kpkg"
41 done
44 run_hooks()
46 local dir="$1"
47 local kver="$2"
48 local d
50 for d in /etc/kernel.d/${dir}/*; do
51 [ ! -x "$d" ] && continue
52 echo "Running ${dir} kernel hook: $(basename $d)..."
53 $d kernel $kver
54 done
57 remove_kernel()
59 local rmkver="$1"
60 local installed f kfile
62 if [ ! -f /boot/$KIMAGE-${rmkver} -a ! -d /lib/modules/${rmkver} ]; then
63 echo "Kernel ${rmkver} not installed."
64 exit 0
67 installed=$(xbps-uhelper version "linux${rmkver%*.*}" 2>/dev/null)
68 if [ -n "$installed" -a "$installed" = "$rmkver" ]; then
69 echo "Kernel $rmkver is currently installed."
70 exit 0
73 # Execute pre-remove kernel hooks.
74 run_hooks pre-remove $rmkver
75 # Remove kernel files in /boot.
76 for f in config System.map $KIMAGE; do
77 kfile="/boot/${f}-${rmkver}"
78 [ ! -f "${kfile}" ] && continue
79 echo "Removing ${kfile}..."
80 rm -f ${kfile}
81 done
82 # Remove kernel modules
83 if [ -d "/lib/modules/${rmkver}" ]; then
84 echo "Removing /lib/modules/${rmkver}..."
85 rm -rf /lib/modules/${rmkver}
87 # Execute post-remove kernel hooks.
88 run_hooks post-remove $rmkver
89 # Remove kernel-headers.
90 if [ -d /usr/src/kernel-headers-${rmkver} ]; then
91 rm -rf /usr/src/kernel-headers-${rmkver}
93 # Remove debugging symbols.
94 dfile=/usr/lib/debug/boot/vmlinux-${rmkver}
95 if [ -f "${dfile}" ]; then
96 echo "Removing ${dfile}..."
97 rm -f ${dfile}
99 if [ -d /usr/lib/debug/usr/lib/modules/${rmkver} ]; then
100 echo "Removing /usr/lib/debug/usr/lib/modules/${rmkver}..."
101 rm -rf /usr/lib/debug/usr/lib/modules/${rmkver}
105 if [ "$1" = "list" ]; then
106 list_kernels
107 elif [ "$1" = "rm" ]; then
108 if [ "$(id -u)" -ne 0 ]; then
109 echo "You have to run this script as root!"
110 exit 1
113 if [ -z "$2" ]; then
114 usage
115 elif [ "$2" = "all" ]; then
116 kernels=$(list_kernels)
117 for k in ${kernels}; do
118 echo "Removing kernel $k files ..."
119 remove_kernel "$k"
120 done
121 else
122 shift
123 for k; do
124 echo "Removing kernel $k files ..."
125 remove_kernel "$k"
126 done
128 else
129 usage
132 exit 0