Advertisement
MNeill

EL8-to-EL9 package remediation

Oct 2nd, 2023 (edited)
339
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Bash 3.23 KB | Source Code | 0 0
  1. #!/bin/bash
  2.  
  3. function debug() {
  4.         if [[ "${DEBUG}" == "1" ]]; then
  5.                 echo -e "DEBUG:  ${*}"
  6.         fi
  7. }
  8.  
  9. # If you want debugging, invoke this script as "DEBUG=1 /path/to/this/script"
  10.  
  11. ARCH=`uname -i`
  12. SWAPPED=(); SKIPPED=(); ERASED=(); NOTERASED=()
  13.  
  14. echo -e "Initial packages to process: \e[1m`rpm -qa | egrep "el8" | wc -l`\e[0m"
  15. echo -e "Looking for 'el8' packages with \e[1;4m${ARCH}\e[0m and \e[1;4mnoarch\e[0m architectures" && sleep 4 && echo
  16.  
  17. for i in `rpm -qa | egrep "el8" | sed "s/\.${ARCH}//; s/\.noarch//"`; do
  18.    readarray -t aPkg < <(dnf info ${i} | egrep "^Name|^Version|^Release" | awk '{print $3}')
  19.    pkgBase="${aPkg[0]}" && echo "Processing ${pkgBase}..."
  20.    pCount=`dnf list "${pkgBase}*el9*" | grep -c ${pkgBase}`
  21.    debug "    Found ${pCount} el9 packages for ${pkgBase}"
  22.  
  23.    if [[ "${pCount}" == "0" ]]; then
  24.         echo "    Did not find an el9 package for ${pkgBase}, erasing..."
  25.         dnf erase -y -q --comment="${0}" ${pkgBase}
  26.         opcode=$?
  27.         if [[ "${opcode}" != "0" ]]; then
  28.                 echo "    Erase exited with ${opcode}, saving ${pkgBase} for reporting..."
  29.                 NOTERASED+=("${pkgBase}")
  30.         fi
  31.         ERASED+=("${pkgBase}")
  32.    elif [[ "${pCount}" > "1" ]]; then
  33.         echo "    Too many el9 packages for ${pkgBase} (${pCount}), recording for output later"
  34.         dnf list "${pkgBase}*el9*" | grep el9 | sed 's/^/        /'
  35.         SKIPPED+=("${pkgBase}")
  36.    else
  37.         pkgOld="${aPkg[0]}-${aPkg[1]}-${aPkg[2]}"
  38.         echo "    Base Name:      ${pkgBase}"
  39.         echo "    Old Install:    ${pkgOld}"
  40.  
  41.         newVer=`yum list "${pkgBase}*el9*" | grep \.el9 | awk '{print $2}' | head -1`
  42.         pkgNew=${pkgBase}-${newVer}
  43.         echo "    New Install:    ${pkgNew}"
  44.         dnf swap -y -q --comment="${0}" ${pkgOld} ${pkgNew} --allowerasing --nobest 2>&1 | egrep -v "Already downloaded"
  45.  
  46.         readarray CHANGED < <( dnf history info last| grep -A99999 "^Packages Altered" | grep -v "Packages Altered" | awk '{printf "%s %s\n", $1, $2}')
  47.         for aChange in "${CHANGED[@]}"; do
  48.                 cParse=(${aChange}); action=${cParse[0]}; pkg=${cParse[1]}
  49.                 case ${cParse[0]} in
  50.                         "Upgraded") SWAPPED+=("${pkg}") ;;
  51.                         "Downgraded") SWAPPED+=("${pkg}") ;;
  52.                         "Installed") SWAPPED+=("${pkg}") ;;
  53.                         "Reinstalled") SWAPPED+=("${pkg}") ;;
  54.                         "Skipped") SKIPPED+=("${pkg}") ;;
  55.                         "Removed") ERASED+=("${pkg}") ;;
  56.                         "Failed") NOTERASED+=("${pkg}") ;;
  57.                 esac
  58.         done
  59.    fi
  60.    echo; echo
  61. done
  62.  
  63.  
  64. echo "Packages swapped: "
  65. for pkgSwap in "${SWAPPED[@]}"; do
  66.         echo "${pkgSwap}"
  67. done | column -x
  68. echo
  69.  
  70. echo "Packages erased: "
  71. for pkgErase in "${ERASED[@]}"; do
  72.         echo "${pkgErase}"
  73. done | column -x
  74. echo
  75.  
  76. echo "Skipped packages: "
  77. for pkgSkip in "${SKIPPED[@]}"; do
  78.         echo "${pkgSkip}"
  79. done | column -x
  80. echo
  81.  
  82. echo "Packages not erased: "
  83. for pkgSkip in "${NOTERASED[@]}"; do
  84.                 echo "${pkgSkip}"
  85. done | column -x
  86. echo
  87.  
  88.  
  89. debug -e "Remaining packages to process: \e[1m`rpm -qa | egrep "el8|noarch" | wc -l`\e[0m"
  90.  
Tags: el9 upgrade
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement