Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/bin/bash
- function debug() {
- if [[ "${DEBUG}" == "1" ]]; then
- echo -e "DEBUG: ${*}"
- fi
- }
- # If you want debugging, invoke this script as "DEBUG=1 /path/to/this/script"
- ARCH=`uname -i`
- SWAPPED=(); SKIPPED=(); ERASED=(); NOTERASED=()
- echo -e "Initial packages to process: \e[1m`rpm -qa | egrep "el8" | wc -l`\e[0m"
- echo -e "Looking for 'el8' packages with \e[1;4m${ARCH}\e[0m and \e[1;4mnoarch\e[0m architectures" && sleep 4 && echo
- for i in `rpm -qa | egrep "el8" | sed "s/\.${ARCH}//; s/\.noarch//"`; do
- readarray -t aPkg < <(dnf info ${i} | egrep "^Name|^Version|^Release" | awk '{print $3}')
- pkgBase="${aPkg[0]}" && echo "Processing ${pkgBase}..."
- pCount=`dnf list "${pkgBase}*el9*" | grep -c ${pkgBase}`
- debug " Found ${pCount} el9 packages for ${pkgBase}"
- if [[ "${pCount}" == "0" ]]; then
- echo " Did not find an el9 package for ${pkgBase}, erasing..."
- dnf erase -y -q --comment="${0}" ${pkgBase}
- opcode=$?
- if [[ "${opcode}" != "0" ]]; then
- echo " Erase exited with ${opcode}, saving ${pkgBase} for reporting..."
- NOTERASED+=("${pkgBase}")
- fi
- ERASED+=("${pkgBase}")
- elif [[ "${pCount}" > "1" ]]; then
- echo " Too many el9 packages for ${pkgBase} (${pCount}), recording for output later"
- dnf list "${pkgBase}*el9*" | grep el9 | sed 's/^/ /'
- SKIPPED+=("${pkgBase}")
- else
- pkgOld="${aPkg[0]}-${aPkg[1]}-${aPkg[2]}"
- echo " Base Name: ${pkgBase}"
- echo " Old Install: ${pkgOld}"
- newVer=`yum list "${pkgBase}*el9*" | grep \.el9 | awk '{print $2}' | head -1`
- pkgNew=${pkgBase}-${newVer}
- echo " New Install: ${pkgNew}"
- dnf swap -y -q --comment="${0}" ${pkgOld} ${pkgNew} --allowerasing --nobest 2>&1 | egrep -v "Already downloaded"
- readarray CHANGED < <( dnf history info last| grep -A99999 "^Packages Altered" | grep -v "Packages Altered" | awk '{printf "%s %s\n", $1, $2}')
- for aChange in "${CHANGED[@]}"; do
- cParse=(${aChange}); action=${cParse[0]}; pkg=${cParse[1]}
- case ${cParse[0]} in
- "Upgraded") SWAPPED+=("${pkg}") ;;
- "Downgraded") SWAPPED+=("${pkg}") ;;
- "Installed") SWAPPED+=("${pkg}") ;;
- "Reinstalled") SWAPPED+=("${pkg}") ;;
- "Skipped") SKIPPED+=("${pkg}") ;;
- "Removed") ERASED+=("${pkg}") ;;
- "Failed") NOTERASED+=("${pkg}") ;;
- esac
- done
- fi
- echo; echo
- done
- echo "Packages swapped: "
- for pkgSwap in "${SWAPPED[@]}"; do
- echo "${pkgSwap}"
- done | column -x
- echo
- echo "Packages erased: "
- for pkgErase in "${ERASED[@]}"; do
- echo "${pkgErase}"
- done | column -x
- echo
- echo "Skipped packages: "
- for pkgSkip in "${SKIPPED[@]}"; do
- echo "${pkgSkip}"
- done | column -x
- echo
- echo "Packages not erased: "
- for pkgSkip in "${NOTERASED[@]}"; do
- echo "${pkgSkip}"
- done | column -x
- echo
- debug -e "Remaining packages to process: \e[1m`rpm -qa | egrep "el8|noarch" | wc -l`\e[0m"
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement