mirror of
				https://github.com/Telecominfraproject/wlan-lanforge-scripts.git
				synced 2025-10-31 02:38:03 +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
	 Jed Reynolds
					Jed Reynolds