diff --git a/srcpkgs/base-files/files/vkpurge b/srcpkgs/base-files/files/vkpurge index 6ca17f060ef..97fc88fa635 100644 --- a/srcpkgs/base-files/files/vkpurge +++ b/srcpkgs/base-files/files/vkpurge @@ -3,135 +3,92 @@ # A simple script to remove old kernel files/modules. # Brought to you by yours truly Juan RP in the Public Domain. # -: ${progname:=$(basename $0)} +: "${progname:="${0##*/}"}" -case "$(xbps-uhelper arch)" in - aarch64*|ppc64*) KIMAGE="vmlinux";; - *) KIMAGE="vmlinuz";; -esac - -usage() -{ +usage() { cat <<_EOF -Usage: $progname [] - -Targets: - list Lists old installed kernels. - rm Remove kernel or all old kernels. - -Example: - $ $progname list - $ $progname rm 4.9.81_1 +Usage: $progname list [version ...] + $progname rm all + $progname rm _EOF exit 1 } -list_kernels() -{ - local k kpkg installed kver _f +list_kernels() { + running=$(uname -r) + 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 - _f=$(basename $k) - kver=$(echo ${_f}|sed -e 's|-rc|rc|') - installed=$(xbps-query -o "$k" 2>/dev/null) - [ -n "$installed" ] && continue - kpkg="$(xbps-uhelper getpkgversion ${_f} 2>/dev/null)" - [ "$(uname -r)" = "$kpkg" ] && continue - [ -n "$kpkg" ] && echo "$kpkg" +run_hooks() { + dir="$1" + kver="$2" + for d in /etc/kernel.d/"${dir}"/*; do + [ -x "$d" ] || continue + printf "Running %s kernel hook: %s...\n" "$dir" "${d##*/}" + "$d" kernel "$kver" done } -run_hooks() -{ - 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 +remove_kernel() { + rmkver="$1" # Execute pre-remove kernel hooks. - run_hooks pre-remove $rmkver - # Remove kernel files in /boot. - for f in config System.map $KIMAGE; do - kfile="/boot/${f}-${rmkver}" - [ ! -f "${kfile}" ] && continue - echo "Removing ${kfile}..." - rm -f ${kfile} + run_hooks pre-remove "$rmkver" + + for f in \ + /boot/config-"${rmkver}" \ + /boot/System.map-"${rmkver}" \ + /boot/vmlinu[xz]-"${rmkver}" \ + /usr/lib/modules/"${rmkver}"; do + [ -e "$f" ] || continue + printf "Removing %s...\n" "$f" + rm -rf "$f" 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. - run_hooks post-remove $rmkver - # Remove kernel-headers. - if [ -d /usr/src/kernel-headers-${rmkver} ]; then - rm -rf /usr/src/kernel-headers-${rmkver} - fi - # Remove debugging symbols. - dfile=/usr/lib/debug/boot/vmlinux-${rmkver} - if [ -f "${dfile}" ]; then - echo "Removing ${dfile}..." - rm -f ${dfile} - fi - 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 + run_hooks post-remove "$rmkver" + + for f in \ + /usr/src/kernel-headers-"${rmkver}" \ + /usr/lib/debug/boot/vmlinu[xz]-"${rmkver}" \ + /usr/lib/debug/usr/lib/modules/"${rmkver}" \ + /boot/dtbs/dtbs-"${rmkver}"; do + [ -e "$f" ] || continue + printf "Removing %s...\n" "$f" + rm -rf "$f" + done } -if [ "$1" = "list" ]; then - list_kernels -elif [ "$1" = "rm" ]; then - if [ "$(id -u)" -ne 0 ]; then - echo "You have to run this script as root!" - 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 +case "$1" in + list) list_kernels "${2:-all}" ;; + rm) + [ -z "$2" ] && usage + if [ "$(id -u)" -ne 0 ]; then + printf "You have to run this script as root!\n" >&2 + exit 1 + fi shift - for k; do - echo "Removing kernel $k files ..." - remove_kernel "$k" + for kver in $(list_kernels "$@"); do + printf "Removing kernel %s...\n" "$kver" + remove_kernel "$kver" done - fi -else - usage -fi - + ;; + *) usage ;; +esac exit 0 diff --git a/srcpkgs/base-files/files/vkpurge.8 b/srcpkgs/base-files/files/vkpurge.8 index fcd56a055b8..a4a1814a427 100644 --- a/srcpkgs/base-files/files/vkpurge.8 +++ b/srcpkgs/base-files/files/vkpurge.8 @@ -1,4 +1,4 @@ -.Dd July 24, 2016 +.Dd April 6, 2019 .Dt VKPURGE 8 .Os .Sh NAME @@ -7,52 +7,62 @@ .Sh SYNOPSIS .Nm .Cm list +.Op Ar version +.Nm +.Cm rm all .Nm .Cm rm -.Op Ar versions\ ... | Cm all +.Ar version ... .Sh DESCRIPTION The .Nm -command is used to properly remove old or unwanted kernels from Void Linux -systems, by running the appropiate removal hooks and doing the removal. -.Ss Justification +utility lists and removes removable kernel versions leaved +behind by .Xr xbps-install 1 -will leave old kernels in place when the kernel package gets upgraded, and -.Xr xbps-remove 1 -will only be able to remove the latest kernel in a version, -for example 4.3.4_4, but it would need to leave behind 4.3.4_3. -.Sh OPTIONS -.Bl -tag -width Ds -.It Ic list -Provide a list of installed kernel versions. -.It Ic rm -Remove kernels. -Must be followed by either a version number or the literal -.Sq Ic all . +and +.Xr xbps-remove 1 . +.Nm +runs the appropriate removal hooks and deletes the kernel, +modules and other miscellaneous files. +.Pp +.Nm +only removes kernel versions that are: +.Bl -bullet -compact +.It +not currently booted. +.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 .Sh EXIT STATUS -.Nm -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. +.Ex -std .Sh EXAMPLES -The following will list all installed kernels. +The following command lists installed kernels matching a pattern. .Bd -literal -offset indent -$ vkpurge list +$ vkpurge list '4.18.*' .Ed .Pp -The following command will delete the kernel version 2.6.39_2 with all -kernel-specific files such as compiled modules. +The following command will delete the kernel versions matching the pattern and a specified version. .Bd -literal -offset indent -# vkpurge rm 2.6.39_2 -.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 +# vkpurge rm '2.6.*' 4.3.4_1 .Ed .Sh SEE ALSO .Xr xbps-install 1 , diff --git a/srcpkgs/base-files/template b/srcpkgs/base-files/template index 18ba0a452ca..93a5ea85646 100644 --- a/srcpkgs/base-files/template +++ b/srcpkgs/base-files/template @@ -1,7 +1,7 @@ # Template file for 'base-files' pkgname=base-files version=0.140 -revision=3 +revision=4 bootstrap=yes depends="xbps-triggers" short_desc="Void Linux base system files"