mirror of
https://github.com/void-linux/void-packages.git
synced 2025-06-07 07:33:48 +02:00
base-files: vkpurge: add wildcard support
closes #4614 Co-authored-by: maxice8 <thinkabit.ukim@gmail.com> Co-authored-by: Duncaen <duncaen@voidlinux.org>
This commit is contained in:
parent
a7fadf0e0a
commit
f39996c2ff
3 changed files with 115 additions and 148 deletions
|
@ -3,135 +3,92 @@
|
||||||
# A simple script to remove old kernel files/modules.
|
# A simple script to remove old kernel files/modules.
|
||||||
# Brought to you by yours truly Juan RP in the Public Domain.
|
# Brought to you by yours truly Juan RP in the Public Domain.
|
||||||
#
|
#
|
||||||
: ${progname:=$(basename $0)}
|
: "${progname:="${0##*/}"}"
|
||||||
|
|
||||||
case "$(xbps-uhelper arch)" in
|
usage() {
|
||||||
aarch64*|ppc64*) KIMAGE="vmlinux";;
|
|
||||||
*) KIMAGE="vmlinuz";;
|
|
||||||
esac
|
|
||||||
|
|
||||||
usage()
|
|
||||||
{
|
|
||||||
cat <<_EOF
|
cat <<_EOF
|
||||||
Usage: $progname <target> [<version>]
|
Usage: $progname list [version ...]
|
||||||
|
$progname rm all
|
||||||
Targets:
|
$progname rm <version ...>
|
||||||
list Lists old installed kernels.
|
|
||||||
rm <version...|all> Remove kernel <version> or all old kernels.
|
|
||||||
|
|
||||||
Example:
|
|
||||||
$ $progname list
|
|
||||||
$ $progname rm 4.9.81_1
|
|
||||||
_EOF
|
_EOF
|
||||||
exit 1
|
exit 1
|
||||||
}
|
}
|
||||||
|
|
||||||
list_kernels()
|
list_kernels() {
|
||||||
{
|
running=$(uname -r)
|
||||||
local k kpkg installed kver _f
|
installed=$(xbps-query -o "/boot/vmlinu[xz]-*" 2>/dev/null | awk '{print $2}')
|
||||||
|
for arg; do
|
||||||
|
case "$arg" in
|
||||||
|
all) pattern="*" ;;
|
||||||
|
*) pattern=$arg ;;
|
||||||
|
esac
|
||||||
|
for k in /boot/vmlinu[xz]-*; do
|
||||||
|
case "$installed" in
|
||||||
|
*"$k"*) continue ;;
|
||||||
|
esac
|
||||||
|
kver=${k##*-}
|
||||||
|
case "$kver" in
|
||||||
|
"$running") ;;
|
||||||
|
$pattern) printf "%s\n" "$kver" ;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
done | sort -u
|
||||||
|
}
|
||||||
|
|
||||||
for k in /boot/$KIMAGE-*; do
|
run_hooks() {
|
||||||
_f=$(basename $k)
|
dir="$1"
|
||||||
kver=$(echo ${_f}|sed -e 's|-rc|rc|')
|
kver="$2"
|
||||||
installed=$(xbps-query -o "$k" 2>/dev/null)
|
for d in /etc/kernel.d/"${dir}"/*; do
|
||||||
[ -n "$installed" ] && continue
|
[ -x "$d" ] || continue
|
||||||
kpkg="$(xbps-uhelper getpkgversion ${_f} 2>/dev/null)"
|
printf "Running %s kernel hook: %s...\n" "$dir" "${d##*/}"
|
||||||
[ "$(uname -r)" = "$kpkg" ] && continue
|
"$d" kernel "$kver"
|
||||||
[ -n "$kpkg" ] && echo "$kpkg"
|
|
||||||
done
|
done
|
||||||
}
|
}
|
||||||
|
|
||||||
run_hooks()
|
remove_kernel() {
|
||||||
{
|
rmkver="$1"
|
||||||
local dir="$1"
|
|
||||||
local kver="$2"
|
|
||||||
local d
|
|
||||||
|
|
||||||
for d in /etc/kernel.d/${dir}/*; do
|
|
||||||
[ ! -x "$d" ] && continue
|
|
||||||
echo "Running ${dir} kernel hook: $(basename $d)..."
|
|
||||||
$d kernel $kver
|
|
||||||
done
|
|
||||||
}
|
|
||||||
|
|
||||||
remove_kernel()
|
|
||||||
{
|
|
||||||
local rmkver="$1"
|
|
||||||
local installed f kfile
|
|
||||||
|
|
||||||
if [ ! -f /boot/$KIMAGE-${rmkver} -a ! -d /lib/modules/${rmkver} ]; then
|
|
||||||
echo "Kernel ${rmkver} not installed."
|
|
||||||
exit 0
|
|
||||||
fi
|
|
||||||
|
|
||||||
installed=$(xbps-uhelper version "linux${rmkver%*.*}" 2>/dev/null)
|
|
||||||
if [ -n "$installed" -a "$installed" = "$rmkver" ]; then
|
|
||||||
echo "Kernel $rmkver is currently installed."
|
|
||||||
exit 0
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Execute pre-remove kernel hooks.
|
# Execute pre-remove kernel hooks.
|
||||||
run_hooks pre-remove $rmkver
|
run_hooks pre-remove "$rmkver"
|
||||||
# Remove kernel files in /boot.
|
|
||||||
for f in config System.map $KIMAGE; do
|
for f in \
|
||||||
kfile="/boot/${f}-${rmkver}"
|
/boot/config-"${rmkver}" \
|
||||||
[ ! -f "${kfile}" ] && continue
|
/boot/System.map-"${rmkver}" \
|
||||||
echo "Removing ${kfile}..."
|
/boot/vmlinu[xz]-"${rmkver}" \
|
||||||
rm -f ${kfile}
|
/usr/lib/modules/"${rmkver}"; do
|
||||||
|
[ -e "$f" ] || continue
|
||||||
|
printf "Removing %s...\n" "$f"
|
||||||
|
rm -rf "$f"
|
||||||
done
|
done
|
||||||
# Remove kernel modules
|
|
||||||
if [ -d "/lib/modules/${rmkver}" ]; then
|
|
||||||
echo "Removing /lib/modules/${rmkver}..."
|
|
||||||
rm -rf /lib/modules/${rmkver}
|
|
||||||
fi
|
|
||||||
# Execute post-remove kernel hooks.
|
# Execute post-remove kernel hooks.
|
||||||
run_hooks post-remove $rmkver
|
run_hooks post-remove "$rmkver"
|
||||||
# Remove kernel-headers.
|
|
||||||
if [ -d /usr/src/kernel-headers-${rmkver} ]; then
|
for f in \
|
||||||
rm -rf /usr/src/kernel-headers-${rmkver}
|
/usr/src/kernel-headers-"${rmkver}" \
|
||||||
fi
|
/usr/lib/debug/boot/vmlinu[xz]-"${rmkver}" \
|
||||||
# Remove debugging symbols.
|
/usr/lib/debug/usr/lib/modules/"${rmkver}" \
|
||||||
dfile=/usr/lib/debug/boot/vmlinux-${rmkver}
|
/boot/dtbs/dtbs-"${rmkver}"; do
|
||||||
if [ -f "${dfile}" ]; then
|
[ -e "$f" ] || continue
|
||||||
echo "Removing ${dfile}..."
|
printf "Removing %s...\n" "$f"
|
||||||
rm -f ${dfile}
|
rm -rf "$f"
|
||||||
fi
|
done
|
||||||
if [ -d /usr/lib/debug/usr/lib/modules/${rmkver} ]; then
|
|
||||||
echo "Removing /usr/lib/debug/usr/lib/modules/${rmkver}..."
|
|
||||||
rm -rf /usr/lib/debug/usr/lib/modules/${rmkver}
|
|
||||||
fi
|
|
||||||
# Remove dtb files
|
|
||||||
if [ -d "/boot/dtbs/dtbs-${rmkver}" ]; then
|
|
||||||
echo "Removing /boot/dtbs/dtbs-${rmkver}..."
|
|
||||||
rm -rf "/boot/dtbs/dtbs-${rmkver}"
|
|
||||||
fi
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if [ "$1" = "list" ]; then
|
case "$1" in
|
||||||
list_kernels
|
list) list_kernels "${2:-all}" ;;
|
||||||
elif [ "$1" = "rm" ]; then
|
rm)
|
||||||
if [ "$(id -u)" -ne 0 ]; then
|
[ -z "$2" ] && usage
|
||||||
echo "You have to run this script as root!"
|
if [ "$(id -u)" -ne 0 ]; then
|
||||||
exit 1
|
printf "You have to run this script as root!\n" >&2
|
||||||
fi
|
exit 1
|
||||||
|
fi
|
||||||
if [ -z "$2" ]; then
|
|
||||||
usage
|
|
||||||
elif [ "$2" = "all" ]; then
|
|
||||||
kernels=$(list_kernels)
|
|
||||||
for k in ${kernels}; do
|
|
||||||
echo "Removing kernel $k files ..."
|
|
||||||
remove_kernel "$k"
|
|
||||||
done
|
|
||||||
else
|
|
||||||
shift
|
shift
|
||||||
for k; do
|
for kver in $(list_kernels "$@"); do
|
||||||
echo "Removing kernel $k files ..."
|
printf "Removing kernel %s...\n" "$kver"
|
||||||
remove_kernel "$k"
|
remove_kernel "$kver"
|
||||||
done
|
done
|
||||||
fi
|
;;
|
||||||
else
|
*) usage ;;
|
||||||
usage
|
esac
|
||||||
fi
|
|
||||||
|
|
||||||
exit 0
|
exit 0
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
.Dd July 24, 2016
|
.Dd April 6, 2019
|
||||||
.Dt VKPURGE 8
|
.Dt VKPURGE 8
|
||||||
.Os
|
.Os
|
||||||
.Sh NAME
|
.Sh NAME
|
||||||
|
@ -7,52 +7,62 @@
|
||||||
.Sh SYNOPSIS
|
.Sh SYNOPSIS
|
||||||
.Nm
|
.Nm
|
||||||
.Cm list
|
.Cm list
|
||||||
|
.Op Ar version
|
||||||
|
.Nm
|
||||||
|
.Cm rm all
|
||||||
.Nm
|
.Nm
|
||||||
.Cm rm
|
.Cm rm
|
||||||
.Op Ar versions\ ... | Cm all
|
.Ar version ...
|
||||||
.Sh DESCRIPTION
|
.Sh DESCRIPTION
|
||||||
The
|
The
|
||||||
.Nm
|
.Nm
|
||||||
command is used to properly remove old or unwanted kernels from Void Linux
|
utility lists and removes removable kernel versions leaved
|
||||||
systems, by running the appropiate removal hooks and doing the removal.
|
behind by
|
||||||
.Ss Justification
|
|
||||||
.Xr xbps-install 1
|
.Xr xbps-install 1
|
||||||
will leave old kernels in place when the kernel package gets upgraded, and
|
and
|
||||||
.Xr xbps-remove 1
|
.Xr xbps-remove 1 .
|
||||||
will only be able to remove the latest kernel in a version,
|
.Nm
|
||||||
for example 4.3.4_4, but it would need to leave behind 4.3.4_3.
|
runs the appropriate removal hooks and deletes the kernel,
|
||||||
.Sh OPTIONS
|
modules and other miscellaneous files.
|
||||||
.Bl -tag -width Ds
|
.Pp
|
||||||
.It Ic list
|
.Nm
|
||||||
Provide a list of installed kernel versions.
|
only removes kernel versions that are:
|
||||||
.It Ic rm
|
.Bl -bullet -compact
|
||||||
Remove kernels.
|
.It
|
||||||
Must be followed by either a version number or the literal
|
not currently booted.
|
||||||
.Sq Ic all .
|
.It
|
||||||
|
not provided by any installed xbps package.
|
||||||
|
.El
|
||||||
|
.Pp
|
||||||
|
The
|
||||||
|
.Ar version
|
||||||
|
arguments support
|
||||||
|
.Xr sh 1
|
||||||
|
pattern matching.
|
||||||
|
.Pp
|
||||||
|
The following commands are available:
|
||||||
|
.Bl -tag -width 4n
|
||||||
|
.It Ic list Op Ar version
|
||||||
|
List removable kernel versions.
|
||||||
|
Optionally list only versions matching
|
||||||
|
.Ar version .
|
||||||
|
.It Ic rm all
|
||||||
|
Remove all removable kernel versions.
|
||||||
|
.It Ic rm Ar version ...
|
||||||
|
Remove all removable kernel versions matching
|
||||||
|
.Ar version .
|
||||||
.El
|
.El
|
||||||
.Sh EXIT STATUS
|
.Sh EXIT STATUS
|
||||||
.Nm
|
.Ex -std
|
||||||
exits with a 0 code unless the help text was printed.
|
|
||||||
Since there is no proper invocation to trigger a print of the help,
|
|
||||||
this can be summarized: if there was a proper invocation of
|
|
||||||
.Nm
|
|
||||||
then the command will exit 0.
|
|
||||||
Otherwise, the exit code is 1.
|
|
||||||
.Sh EXAMPLES
|
.Sh EXAMPLES
|
||||||
The following will list all installed kernels.
|
The following command lists installed kernels matching a pattern.
|
||||||
.Bd -literal -offset indent
|
.Bd -literal -offset indent
|
||||||
$ vkpurge list
|
$ vkpurge list '4.18.*'
|
||||||
.Ed
|
.Ed
|
||||||
.Pp
|
.Pp
|
||||||
The following command will delete the kernel version 2.6.39_2 with all
|
The following command will delete the kernel versions matching the pattern and a specified version.
|
||||||
kernel-specific files such as compiled modules.
|
|
||||||
.Bd -literal -offset indent
|
.Bd -literal -offset indent
|
||||||
# vkpurge rm 2.6.39_2
|
# vkpurge rm '2.6.*' 4.3.4_1
|
||||||
.Ed
|
|
||||||
.Pp
|
|
||||||
The following command will delete the kernels with version 2.6.39_2 and 4.3.4_1
|
|
||||||
.Bd -literal -offset indent
|
|
||||||
# vkpurge rm 2.6.39_2 4.3.4_1
|
|
||||||
.Ed
|
.Ed
|
||||||
.Sh SEE ALSO
|
.Sh SEE ALSO
|
||||||
.Xr xbps-install 1 ,
|
.Xr xbps-install 1 ,
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
# Template file for 'base-files'
|
# Template file for 'base-files'
|
||||||
pkgname=base-files
|
pkgname=base-files
|
||||||
version=0.140
|
version=0.140
|
||||||
revision=3
|
revision=4
|
||||||
bootstrap=yes
|
bootstrap=yes
|
||||||
depends="xbps-triggers"
|
depends="xbps-triggers"
|
||||||
short_desc="Void Linux base system files"
|
short_desc="Void Linux base system files"
|
||||||
|
|
Loading…
Add table
Reference in a new issue