mirror of
https://github.com/Telecominfraproject/wlan-lanforge-scripts.git
synced 2025-11-01 03:07:56 +00:00
check_large_files: removes oldest Fedora kernels
This commit is contained in:
@@ -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=()
|
||||||
|
|||||||
Reference in New Issue
Block a user