更新套件時新舊版本的檔案發生衝突

 在系統更新的時候,有時發現很奇怪的檔案衝突,例如同一個套件新舊版本的檔案發生衝突。原本該是被更新的檔案,卻被系統告知要安裝新版本中的檔案被舊版本套件中的檔案互相衝突。

以這次遇到的 glib-networking 為例:

錯誤:處理事項測試錯誤:                                                       
glib-networking-2.68.3-1.fc34.i686 安裝的檔案 /usr/share/doc/glib-networking/NEWS 與來自軟體包 glib-networking-2.68.2-1.fc34.x86_64 的檔案產生衝突
glib-networking-2.68.3-1.fc34.i686 安裝的檔案 /usr/share/locale/hr/LC_MESSAGES/glib-networking.mo 與來自軟體包 glib-networking-2.68.2-1.fc34.x86_64 的檔
案產生衝突 

在更新的過程中,系統告知版本 2.68.3-1 的 /usr/share/doc/glib-networking/NEWS 和 /usr/share/locale/hr/LC_MESSAGES/glib-networking.mo 兩個檔案與版本 2.68.2-1 的檔案發生衝突。照理說這些檔案應該是直接要被更新的才對,而不是出現這樣的錯誤訊息。

這時候可以先利用 rpm 指令檢查一下系統中是不是安裝了多個版本 glib-networking

$ rpm -qa | grep -i glib-networking
glib-networking-2.68.2-1.fc34.x86_64
glib-networking-2.68.2-1.fc34.i686
glib-networking-2.68.3-1.fc34.x86_64

可以看到不知道為什麼 2.68.3-1 已經安裝進來了,但 2.68.2-1 卻同時有 i686 和 x86_64 的兩組套件,可以直接把舊版本的 2.68.2-1 兩組套件移除後,再重新更新一次試看看。

$ sudo dnf remove glib-networking-2.68.2-1.fc34.i686
$ sudo dnf remove glib-networking-2.68.2-1.fc34.x86_64

如果並沒有安裝多個版本的問題,可以試試將其移除後再進行系統更新,最後再安裝回來,應該就可以解決這個問題。

Fedora 33 升級到 34 遇到問題

Fedora 33 升級到 34 的詳細步驟可參考以下文章 https://www.putorius.net/upgrade-to-fedora-34.html

升級流程所用到的指令如下

# 切換到 root
sudo -s

# 先將現行系統更新到最新
dnf --refresh upgrade

# 安裝 dnf 系統升級套件
dnf install dnf-plugin-system-upgrade --best

# 下載升級到 fedora 34 所需要的套件檔案
dnf system-upgrade download --refresh --releasever=34

# 重開機準備開始升級
dnf system-upgrade reboot

在準備升級的過程中遇到以下的錯誤訊息

錯誤:
 問題: rdma-core-35.0-1.fc33.i686 has inferior architecture
  - rdma-core-35.0-1.fc33.x86_64 不屬於 distupgrade 軟體庫
  - 安裝的軟體包有問題 rdma-core-35.0-1.fc33.i686
(請試試加上「--skip-broken」以跳過無法安裝的軟體包)

先依照訊息健議使用 --skip-broken 來處理

$ dnf system-upgrade download --refresh --releasever=34 --skip-broken
錯誤:
 問題: rdma-core-35.0-1.fc33.i686 has inferior architecture
  - rdma-core-35.0-1.fc33.x86_64 不屬於 distupgrade 軟體庫
  - 安裝的軟體包有問題 rdma-core-35.0-1.fc33.i686

依之前的慣例來看,可以透過先將有問題的套件移除,等升級完成後再另外裝回來,可以解決大部份的問題。所以試著用 dnf 將其移除:

$ dnf remove rdma-core --skip-broken
錯誤:
 問題: rdma-core-35.0-1.fc33.i686 has inferior architecture
  - rdma-core-35.0-1.fc33.x86_64 不屬於 distupgrade 軟體庫
  - 安裝的軟體包有問題 rdma-core-35.0-1.fc33.i686

似乎並不能解決問題,無法使用 dnf 將其移除,google 了類似的錯誤訊息後,在 https://bugzilla.redhat.com/show_bug.cgi?id=1956631 發現類似的問題,論壇提到解決方法是先將 rdma-core 透過 rpm 的方式移除後再進行升級

# 搜尋後發現系統裡居然有兩個 rdma-core 的套件,於是先使用 rpm 將兩個都進行移除
$ rpm -e --nodeps rdma-core-35.0-1.fc33.x86_64
$ rpm -e --nodeps rdma-core-35.0-1.fc33.i686
# 重新開始下載系統升級套件
$ dnf system-upgrade download --refresh --releasever=34

接下來就一路順利升級到 fedora 34 了。

dnf upgrade fails with Error: GPG check FAILED

 OS: Fedora 36 今天在做  dnf  更新的時候,突然有很多 package 都出現簽章問題無法更新。類似如下的錯誤訊息 .... is not signed. ...... is not signed. ......... is not...