check_large_files: removes oldest Fedora kernels

This commit is contained in:
Jed Reynolds
2021-01-04 22:00:51 -08:00
parent 13dc5ed016
commit 7849a629c7

View File

@@ -177,32 +177,57 @@ declare -A cleaners_map=(
) )
kernel_to_relnum() { kernel_to_relnum() {
#set -euxv
local hunks=() local hunks=()
#echo "KERNEL RELNUM:[$1]" # 1>&2 echo "KERNEL RELNUM:[$1]"
IFS="." read -ra hunks <<< "$1" local my1="${1/*[^0-9+]-/}" # Dang, this is not intuitive to a PCRE user
#1>&2 echo "KERNEL [$1] REGEX:[$my1]"
if [[ $my1 =~ ^[^0-9] ]]; then
1>&2 echo "BAD SERIES: [$1]"
exit 1
fi
IFS="." read -ra hunks <<< "$my1"
IFS= IFS=
local tmpstr local tmpstr
local max_width=8 local max_width=8
local last_len=0 local last_len=0
local diff_len=0
local expandos=() local expandos=()
for i in 0 1 2; do for i in 0 1 2; do
if (( $i < 2 )); then if (( $i < 2 )); then
#1>&2 echo "HUNK $i: [${hunks[$i]}]"
expandos+=( $(( 100 + ${hunks[$i]} )) ) expandos+=( $(( 100 + ${hunks[$i]} )) )
else else
tmpstr="0000000000000${hunks[i]}" tmpstr="00000000${hunks[i]}"
last_len=$(( ${#tmpstr} - $max_width )) last_len=$(( ${#tmpstr} - $max_width ))
expandos+=( ${tmpstr:$last_len:${#tmpstr}} ) expandos+=( ${tmpstr:$last_len:${#tmpstr}} )
#1>&2 echo "TRIMMED ${tmpstr:$last_len:${#tmpstr}}" #1>&2 echo "TRIMMED ${tmpstr:$last_len:${#tmpstr}}"
fi fi
done done
#local relnum="${expandos[0]}${expandos[1]}${expandos[2]}"
echo "${expandos[0]}${expandos[1]}${expandos[2]}" set +x
#1>&2 echo "EXPANDO: ${expandos[0]}${expandos[1]}${expandos[2]}"
echo "k${expandos[0]}${expandos[1]}${expandos[2]}"
} }
clean_old_kernels() { clean_old_kernels() {
note "Cleaning old kernels..." echo ""
echo ""
note "Cleaning old CT kernels..."
sleep 2
local f
for f in "${removable_packages[@]}"; do
echo "$f\*"
done | xargs /usr/bin/rpm -hve
for f in "${removable_kernels[@]}"; do
echo "r m $f"
done
for f in "${removable_libmod_dirs[@]}"; do
echo "r m /lib/modules/$f"
done
echo ""
echo ""
} }
clean_core_files() { clean_core_files() {
@@ -311,15 +336,18 @@ clean_var_tmp() {
kernel_files=() # temp kernel_files=() # temp
lib_module_dirs=() # temp lib_module_dirs=() # temp
declare -a kernel_sort_names declare -a kernel_sort_names
declare -a pkg_sort_names
declare -a libmod_sort_names declare -a libmod_sort_names
removable_kernels=() # these are for CT kernels removable_kernels=() # these are for CT kernels
removable_libmod_dirs=() # these are for CT kernels removable_libmod_dirs=() # these are for CT kernels
removable_packages=() # these are for Fedora kernels removable_packages=() # these are for Fedora kernels
removable_pkg_series=()
survey_kernel_files() { survey_kernel_files() {
removable_kernels=() removable_kernels=()
removable_libmod_dirs=() removable_libmod_dirs=()
removable_packages=() removable_packages=()
kernel_sort_names=() kernel_sort_names=()
declare -A pkg_sort_names=()
libmod_sort_names=() libmod_sort_names=()
note "Surveying Kernel files" note "Surveying Kernel files"
mapfile -t kernel_files < <(find /boot -maxdepth 1 -type f -a \( \ mapfile -t kernel_files < <(find /boot -maxdepth 1 -type f -a \( \
@@ -327,7 +355,7 @@ survey_kernel_files() {
2>/dev/null | grep -v rescue | sort) 2>/dev/null | grep -v rescue | sort)
mapfile -t lib_module_dirs < <(find /lib/modules -mindepth 1 -maxdepth 1 -type d 2>/dev/null | sort) mapfile -t lib_module_dirs < <(find /lib/modules -mindepth 1 -maxdepth 1 -type d 2>/dev/null | sort)
local booted=`uname -r` local booted=`uname -r`
local could_remove=()
local g local g
debug "** You are running kernel $booted **" debug "** You are running kernel $booted **"
@@ -336,7 +364,6 @@ survey_kernel_files() {
[[ $f =~ *.fc*.x86_64 ]] || continue [[ $f =~ *.fc*.x86_64 ]] || continue
f=${f#/boot/init*-} f=${f#/boot/init*-}
f=${f%.img} f=${f%.img}
#f=${f%.fc*}
if [[ $f =~ $booted ]]; then if [[ $f =~ $booted ]]; then
debug "ignoring CT kernel $f" debug "ignoring CT kernel $f"
@@ -360,11 +387,15 @@ survey_kernel_files() {
f=${f#/lib/modules/} f=${f#/lib/modules/}
#f=${f%.img} #f=${f%.img}
#f=${f%.fc*} #f=${f%.fc*}
if [[ $f =~ $booted ]] || [[ $f =~ *.fc*.x86_64 ]]; then if [[ $f =~ $booted ]]; then
debug "Ignoring booted or Fedora module directory $f" debug "Ignoring booted module directory $f"
continue
elif [[ $f = *.fc??.x86_64 ]]; then
debug "Ignoring Fedora module directory $f"
continue
else else
g=$( kernel_to_relnum $f ) g=$( kernel_to_relnum $f )
# debug "f[$f] g[$g] booted [$booted]" debug "MODULE f[$f] g[$g] booted [$booted]"
# removable_libmod_dirs+=($f) # removable_libmod_dirs+=($f)
libmod_sort_names[$g]="$f" libmod_sort_names[$g]="$f"
fi fi
@@ -387,57 +418,78 @@ survey_kernel_files() {
local pkg local pkg
local k_pkgs=() local k_pkgs=()
local selected_k=() #local k_ver=()
local k_series=() removable_pkg_series=()
# need to avoid most recent fedora kernel # need to avoid most recent fedora kernel
if [ ! -x /usr/bin/rpm ]; then if [ ! -x /usr/bin/rpm ]; then
note "Does not appear to be an rpm system." note "Does not appear to be an rpm system."
return 0 return 0
fi fi
local ur=$( uname -r ) local ur=$( uname -r )
local current_relnum=$( kernel_to_relnum $ur ) #local current_relnum=$( kernel_to_relnum $ur )
local kern_pkgs=( $( rpm -qa 'kernel*' | sort ) ) local kern_pkgs=( $( rpm -qa 'kernel*' | sort ) )
local pkg local ser
local zpkg
declare -A pkg_to_ser
for pkg in "${kern_pkgs[@]}"; do for pkg in "${kern_pkgs[@]}"; do
if [[ $pkg = kernel-tools-* ]] \ if [[ $pkg = kernel-tools-* ]] \
|| [[ $pkg = kernel-headers-* ]] \ || [[ $pkg = kernel-headers-* ]] \
|| [[ $pkg = kernel-devel-* ]] ; then || [[ $pkg = kernel-devel-* ]] ; then
continue continue
fi fi
if [[ $pkg =~ $booted ]]; then
debug "avoiding current kernel [$pkg]"
continue
fi
k_pkgs+=( $pkg ) k_pkgs+=( $pkg )
done done
for pkg in "${k_pkgs[@]}"; do
pkg=${pkg##kernel-modules-extra-}
pkg=${pkg##kernel-modules-}
pkg=${pkg##kernel-core-}
pkg=${pkg%.fc??.x86_64}
kernel_series=$( kernel_to_relnum ${pkg##kernel-} )
#debug "K SER: $kernel_series" for pkg in "${k_pkgs[@]}"; do
if contains k_series $kernel_series; then zpkg="$pkg"
zpkg=${pkg##kernel-modules-extra-}
zpkg=${pkg##kernel-modules-}
zpkg=${pkg##kernel-core-}
zpkg=${pkg%.fc??.x86_64}
if [[ $zpkg =~ $booted ]]; then
#echo "ignoring k pkg $zpkg cuz $booted"
continue continue
elif [[ x$current_relnum = x$kernel_series ]]; then
debug "avoiding current kernel [$kernel_series]"
else
k_series+=($kernel_series)
kernel_sort_names[$kernel_series]="$pkg"
fi fi
kernel_series=$( kernel_to_relnum ${zpkg##kernel-} )
#1>&2 echo "....... ....... Kernel series[$kernel_series]"
pkg_to_ser[$pkg]="$kernel_series"
pkg_sort_names[$kernel_series]=1
done done
IFS=$'\n' k_series=($(sort <<<"${k_series[*]}" | uniq)); unset IFS
while read ser; do while read ser; do
# debug "series [$ser] pkg [${kernel_sort_names[$ser]}]" debug " can remove series [$ser] "
removable_pkgs+=("${kernel_sort_names[$ser]}") removable_pkg_series+=($ser)
done < <( printf "%s\n" "${!kernel_sort_names[@]}" | sort | head -n -1) done < <( printf "%s\n" "${!pkg_sort_names[@]}" | sort | head -n -1)
# for ser in "${!pkg_sort_names[@]}"; do
# debug " can remove series [$ser] "
# #removable_pkg_series+=($ser)
# done
for pkg in "${k_pkgs[@]}"; do
pkg=${pkg%.fc??.x86_64}
ser=$( kernel_to_relnum $pkg )
# echo " $pkg -> $ser"
for zpkg in "${removable_pkg_series[@]}"; do
#debug " $zser ~~ $ser ~~ $pkg"
if (( $ser == $zpkg )); then
# echo " removable: $ser, $zpkg >> $pkg"
removable_packages+=($pkg)
#else
# echo " no"
fi
done
done
set +x set +x
if (( ${#selected_k[@]} < 1 )); then
note "No kernels selected for removal"
fi
if (( $quiet < 1 )); then if (( $quiet < 1 )); then
if (( ${#removable_pkgs[@]} > 0 )); then if (( ${#removable_packages[@]} > 0 )); then
printf "Would remove packages %s\n" "${removable_pkgs[@]}" printf "Would remove packages %s\n" "${removable_packages[@]}"
fi fi
if (( ${#removable_kernels[@]} > 0 )); then if (( ${#removable_kernels[@]} > 0 )); then
printf "Would remove CT Kernels %s\n" "${removable_kernels[@]}" printf "Would remove CT Kernels %s\n" "${removable_kernels[@]}"
@@ -446,7 +498,7 @@ survey_kernel_files() {
printf "Would remove CT modules %s\n" "${removable_libmod_dirs[@]}" printf "Would remove CT modules %s\n" "${removable_libmod_dirs[@]}"
fi fi
fi fi
} } # ~survey_kernel_files
# Find core files # Find core files
core_files=() core_files=()