@@ -60,18 +60,21 @@ if command -v dnf5 >/dev/null 2>&1; then
6060 HISTORY_CMD=" dnf5 history list"
6161 LIST_CMD=" dnf5 list --upgrades"
6262 SECURITY_SUPPORTED=1 # dnf5 supports security updates via check-upgrade --security
63+ YUM_CURRENT=" $( ls -lR /var/cache/libdnf5/ 2> /dev/null) "
6364# Check for regular dnf (Fedora 22+ up to 40, CentOS 8+)
6465elif command -v dnf > /dev/null 2>&1 ; then
6566 PKG_MGR=" dnf"
6667 HISTORY_CMD=" dnf history list"
6768 LIST_CMD=" dnf list updates"
6869 SECURITY_SUPPORTED=1
70+ YUM_CURRENT=" $( ls -lR /var/cache/dnf/ 2> /dev/null) "
6971# Fall back to yum (CentOS/RHEL 6-7)
7072elif command -v yum > /dev/null 2>&1 ; then
7173 PKG_MGR=" yum"
7274 HISTORY_CMD=" yum history list"
7375 LIST_CMD=" yum list updates"
7476 SECURITY_SUPPORTED=1
77+ YUM_CURRENT=" $( ls -lR /var/cache/yum/ 2> /dev/null) "
7578else
7679 echo " ERROR: No supported package manager found (yum, dnf, or dnf5)"
7780 exit 2
@@ -140,25 +143,14 @@ echo "<<<yum>>>"
140143# Update cached data if YUM fingerprint has changed OR machine has recently rebooted.
141144if [ " $YUM_CURRENT " != " $YUM_CACHED " ] || [ ! -s " $CACHE_RESULT_CHECK " ]
142145then
143- count=0
144- # Check for running package manager processes
145- while [ -n " $( pgrep -f " (python|/usr/bin/).*/(yum|dnf)" | head -1) " ]; do
146- if [ $count -eq 3 ]; then
147- echo " ERROR: Tried to run $PKG_MGR for 30 secs but another package manager instance was running"
148- exit 2
149- else
150- (( count++ ))
151- sleep 10
152- fi
153- done
154-
155146 # Check if reboot required for new kernel
156147 KERNEL_PACKAGE=$( rpm -qf --qf " %{NAME}" /boot/config-$( uname -r) )
157148 if [ -z " $KERNEL_PACKAGE " ]; then
158149 BOOT_REQUIRED=" no"
159150 else
160151 RUNNING_KERNEL=$( rpm -qf --qf " %{VERSION}-%{RELEASE}\n" /boot/config-$( uname -r) )
161- LATEST_KERNEL=$( rpm -q --qf " %{INSTALLTIME} %{VERSION}-%{RELEASE}\n" $KERNEL_PACKAGE | sort -nr | head -n1 | cut -d' ' -f2- )
152+ LATEST_KERNEL=$( rpm -q --last --qf " %{INSTALLTIME}\t%{VERSION}-%{RELEASE}\n" $KERNEL_PACKAGE | grep -v $KERNEL_PACKAGE | sort -r | head -n1 | awk ' { print $2 }' )
153+ LATEST_KERNEL=" ${LATEST_KERNEL% " ${LATEST_KERNEL##* [![:space:]]} " } " # remove tailing whitespace
162154
163155 if [[ " $RUNNING_KERNEL " == " $LATEST_KERNEL " ]]; then
164156 BOOT_REQUIRED=" no"
169161
170162 # Count available updates - different commands for different package managers
171163 if [ " $PKG_MGR " = " dnf5" ]; then
172- UPDATES=$( timeout 25s dnf5 list --upgrades 2> /dev/null | grep -E " ^[a-zA-Z]" | wc -l || echo " -1" )
164+ LOCKEDRE=$( dnf5 versionlock list | grep -o -P ' (?<=^Package name: ).+' | tr ' \n' ' |' | sed ' s/|/\\.|/g; s/|$//' )
165+ UPDATES=$( timeout 25s dnf5 list --upgrades 2> /dev/null | grep -E " ^[a-zA-Z]" | tail -n +2 | grep -v -P " $LOCKEDRE " | wc -l || echo " -1" )
173166 else
174167 UPDATES=$( timeout 25s $PKG_MGR -C --noplugins --quiet list updates 2> /dev/null | grep " \." | cut -d' ' -f1 | wc -l || echo " -1" )
175168 fi
0 commit comments