Unable to upgrade linux-firmware error unpacking rpm scriptlet stuck in infinite loop

When I do ‘sudo dnf update -y’ on Rocky Linux 8.10 Minimal, it gets stuck on updating linux-firmware.
Looks like on the other VMs or Docker images, the update goes well. Not sure what the issue is.

cat /etc/os-release
NAME="Rocky Linux"
VERSION="8.10 (Green Obsidian)"
ID="rocky"
ID_LIKE="rhel centos fedora"
VERSION_ID="8.10"
PLATFORM_ID="platform:el8"
PRETTY_NAME="Rocky Linux 8.10 (Green Obsidian)"
ANSI_COLOR="0;32"
LOGO="fedora-logo-icon"
CPE_NAME="cpe:/o:rocky:rocky:8:GA"
HOME_URL="https://rockylinux.org/"
BUG_REPORT_URL="https://bugs.rockylinux.org/"
SUPPORT_END="2029-05-31"
ROCKY_SUPPORT_PRODUCT="Rocky-Linux-8"
ROCKY_SUPPORT_PRODUCT_VERSION="8.10"
REDHAT_SUPPORT_PRODUCT="Rocky Linux"
REDHAT_SUPPORT_PRODUCT_VERSION="8.10"
sudo rpm -qa | grep linux-fir
linux-firmware-20241014-125.git06bad2f1.el8_10.noarch
sudo dnf update -y
from the log
linux-firmware                       noarch         20250626-131.gitb05fabcd.el8_10                     baseos                   529 M
from strace of the update process
r
rename("/usr/lib/firmware/nvidia/ad103.rpmmoved", "/usr/lib/firmware/nvidia/ad103.rpmmoved.30942594") = -1 ENOENT (No such file or director
rename("/usr/lib/firmware/nvidia/ad103.rpmmoved", "/usr/lib/firmware/nvidia/ad103.rpmmoved.30942595") = -1 ENOENT (No such file or director
rename("/usr/lib/firmware/nvidia/ad103.rpmmoved", "/usr/lib/firmware/nvidia/ad103.rpmmoved.30942596") = -1 ENOENT (No such file or director
rename("/usr/lib/firmware/nvidia/ad103.rpmmoved", "/usr/lib/firmware/nvidia/ad103.rpmmoved.30942597") = -1 ENOENT (No such file or director
rename("/usr/lib/firmware/nvidia/ad103.rpmmoved", "/usr/lib/firmware/nvidia/ad103.rpmmoved.30942598") = -1 ENOENT (No such file or director
rename("/usr/lib/firmware/nvidia/ad103.rpmmoved", "/usr/lib/firmware/nvidia/ad103.rpmmoved.30942599") = -1 ENOENT (No such file or director
rename("/usr/lib/firmware/nvidia/ad103.rpmmoved", "/usr/lib/firmware/nvidia/ad103.rpmmoved.30942600") = -1 ENOENT (No such file or director
rename("/usr/lib/firmware/nvidia/ad103.rpmmoved", "/usr/lib/firmware/nvidia/ad103.rpmmoved.30942601") = -1 ENOENT (No such file or director
rename("/usr/lib/firmware/nvidia/ad103.rpmmoved", "/usr/lib/firmware/nvidia/ad103.rpmmoved.30942602") = -1 ENOENT (No such file or director
rename("/usr/lib/firmware/nvidia/ad103.rpmmoved", "/usr/lib/firmware/nvidia/ad103.rpmmoved.30942603") = -1 ENOENT (No such file or director
rename("/usr/lib/firmware/nvidia/ad103.rpmmoved", "/usr/lib/firmware/nvidia/ad103.rpmmoved.30942604") = -1 ENOENT (No such file or director
rename("/usr/lib/firmware/nvidia/ad103.rpmmoved", "/usr/lib/firmware/nvidia/ad103.rpmmoved.30942605") = -1 ENOENT (No such file or director
rename("/usr/lib/firmware/nvidia/ad103.rpmmoved", "/usr/lib/firmware/nvidia/ad103.rpmmoved.30942606") = -1 ENOENT (No such file or director
rename("/usr/lib/firmware/nvidia/ad103.rpmmoved", "/usr/lib/firmware/nvidia/ad103.rpmmoved.30942607") = -1 ENOENT (No such file or director
r

Diff from the spec file

diff linux-firmware-20250515-130.git9f8e520f.el8_10/linux-firmware.spec linux-firmware-20250626-131.gitb05fabcd.el8_10/linux-firmware.spec
1c1
< %global checkout 9f8e520f
---
> %global checkout b05fabcd
3c3
< %global firmware_release 130
---
> %global firmware_release 131
9c9
< Version:      20250515
---
> Version:      20250626
323c323
<       linux-firmware.files
---
>       linux-firmware.{files,dirs}
437a438,492
> # workaround for directory->symlink changes
> %pretrans -n linux-firmware -p <lua>
> path = "/usr/lib/firmware/nvidia/ad103"
> st = posix.stat(path)
> if st and st.type == "directory" then
>   status = os.rename(path, path .. ".rpmmoved")
>   if not status then
>     suffix = 0
>     while not status do
>       suffix = suffix + 1
>       status = os.rename(path .. ".rpmmoved", path .. ".rpmmoved." .. suffix)
>     end
>     os.rename(path, path .. ".rpmmoved")
>   end
> end
> path = "/usr/lib/firmware/nvidia/ad104"
> st = posix.stat(path)
> if st and st.type == "directory" then
>   status = os.rename(path, path .. ".rpmmoved")
>   if not status then
>     suffix = 0
>     while not status do
>       suffix = suffix + 1
>       status = os.rename(path .. ".rpmmoved", path .. ".rpmmoved." .. suffix)
>     end
>     os.rename(path, path .. ".rpmmoved")
>   end
> end
> path = "/usr/lib/firmware/nvidia/ad106"
> st = posix.stat(path)
> if st and st.type == "directory" then
>   status = os.rename(path, path .. ".rpmmoved")
>   if not status then
>     suffix = 0
>     while not status do
>       suffix = suffix + 1
>       status = os.rename(path .. ".rpmmoved", path .. ".rpmmoved." .. suffix)
>     end
>     os.rename(path, path .. ".rpmmoved")
>   end
> end
> path = "/usr/lib/firmware/nvidia/ad107"
> st = posix.stat(path)
> if st and st.type == "directory" then
>   status = os.rename(path, path .. ".rpmmoved")
>   if not status then
>     suffix = 0
>     while not status do
>       suffix = suffix + 1
>       status = os.rename(path .. ".rpmmoved", path .. ".rpmmoved." .. suffix)
>     end
>     os.rename(path, path .. ".rpmmoved")
>   end
> end
>

So, the problem in the script

Yes - related to this, I’ve found that trying to downgrade from the rocky linux 9.6 script for linux-firmware-20250604-151.2.el9_6 to -20240905-146.el9 gives errors complaining of conflicting files e.g. /usr/lib/firmware/nvidia/ad103/gsp which is used in both packages, but for some reason it can’t tell that it’s OK because it will remove one version and replace it with the other.

This topic was automatically closed 60 days after the last reply. New replies are no longer allowed.