32 分鐘閱讀

近期幫我的桌機從 Fedora 41 升級到 Fedora 42,這是我第二次升級 Fedora 41。第一次是協助 Intel 125H 微電腦(內顯)升級,過程很順利,因此這次操作稍微輕忽。

這兩次升級的主要差異在於:

  1. 桌機有安裝 Nvidia 官方驅動。

  2. 這次使用手機 USB 網路分享,升級重開機後,疑似未自動連上網路,導致升級過程中部分套件未能完整更新。

升級後進入系統時,畫面只有白屏,並顯示「系統有錯誤,請聯絡管理員」,無法進入登入畫面,也無法進行任何操作(0716修正) 應該能進tty模式。

0716新增 應是安裝Nvidia專用驅動後,系統衝突,連白畫面都無法到達,所以透過Grub

透過 Grub,在對應 kernel 的 linux 行加入 nomodeset 3,強制以文字模式啟動,進入 TTY 修復模式。

一開始懷疑是 Nvidia 驅動與新版 GNOME 相容性問題,嘗試過移除與重裝官方及 Rpmfusion 驅動,但無法解決,系統依然無法進入圖形介面。

進一步檢查發現,cat /etc/os-release 顯示已為 Fedora 42,但系統內部仍有不少套件維持在 41 版本(例如 GNOME 與某些核心元件)。
這種版本混雜,導致 GNOME 啟動時崩潰,無法進入桌面,只能進 TTY 模式維修。

操作紀錄

由於先前曾誤刪 NetworkManager,導致開機時網路完全沒啟動,網卡也沒拿到 IP。

網路完全沒啟動,網卡沒 IP

修復步驟(臨時手動啟用網卡)

  1. 啟動網卡
    先透過ip addr找到網卡 如enp6s0
    sudo ip link set enp6s0 up
    
  2. 手動分配 IP(路由器所在網段)
    sudo ip addr add 192.168.1.123/24 dev enp6s0
    sudo ip route add default via 192.168.1.1
    

    (這邊 192.168.1.1 家 or 公司的閘道器,通常是路由器 IP)

  3. 設置 DNS 解析(臨時)
    echo "nameserver 8.8.8.8" | sudo tee /etc/resolv.conf
    
  4. 測試網路是否通
    ping -c 3 8.8.8.8
    ping -c 3 mirrors.fedoraproject.org
    

處理套件同步與衝突

使用 dnf distro-sync 同步時,遇到多個套件依賴衝突或版本錯誤。

目前解法為:

  • 先移除出錯套件
        sudo dnf remove <出錯套件>
    
    • 先將有問題(如升級衝突、版本錯誤或殘留)的套件移除,讓依賴樹恢復乾淨,避免後續操作又被同一個問題卡住。
  • 再安裝必要套件
      sudo dnf install <必要套件>
    
    • 重新安裝所需的核心/重要套件,確保使用的是新版本並補齊所有依賴。
  • 重複執行 distro-sync,直到全部同步完成。必要時可加上 --allowerasing 參數強制排除有衝突的舊套件。

補充建議

  • 網路連線不穩或升級途中網路中斷,是造成系統版本混雜的主因,升級時建議全程使用穩定的有線網路,並確認所有套件都已完整升級。

  • 針對無法同步或依賴衝突,建議每次遇到報錯時,先確認錯誤訊息,針對特定套件移除再安裝,並多次重複同步,直到不再出現衝突。

目前持續Debug中

20240716 終於升版成功

總結以下幾點問題

一、Fedora 系統版本升級

我原先使用

sudo dnf system-upgrade download --releasever=42
sudo dnf system-upgrade reboot

但後來因 Fedora 42 已採用新工具(dnf5)

sudo dnf5 offline upgrade --releasever=42
sudo dnf5 offline reboot

但因為沒有正確完成離線升級步驟,導致系統套件版本部分仍停留在 Fedora 41,發生嚴重相依性衝突。

有可能是因為發現指令的修改 讓我reboot並未打在 upgrade後,造成升級錯誤 這要追蹤紀錄

二、NVIDIA 專有驅動重新安裝

升級後,原本的 NVIDIA 驅動 (run file: 570.153.02) 無法正常運作,畫面黑屏

進入 TTY (Ctrl+Alt+F3)

sudo ./NVIDIA-Linux-x86_64-570.153.02.run

安裝失敗或成功但啟動畫面仍然異常(可能 Wayland 衝突)

編輯 /etc/gdm/custom.conf,設置 強制使用 Xorg 而非 Wayland

WaylandEnable=false
DefaultSession=gnome-xorg.desktop

安裝了 NVIDIA .run 專有驅動
嘗試強制用 X11 (WaylandEnable=false) 但反而完全黑畫面,連 tty 都進不去

通常表示:.run 驅動與 kernel 模組或 framebuffer 設定發生衝突,導致整個顯示系統(包含 TTY)也壞了

開機進 GRUB,編輯 kernel 參數,按e編輯

nomodeset:避免驅動初始化 framebuffer,能避免黑畫面
3:強制進入 runlevel 3(multi-user.target),不載入 GUI

卸載NVIDIA驅動後,終於能進指令模式

三、系統升級問題排查與修復

GPU問題解決後,系統仍異常

嘗試了許多操作

  • 清理 repo 快取,重建 dnf metadata
    sudo dnf clean all
    sudo dnf makecache
    
  • 多個libicu 衝突
  • 因為 libicu 套件衝突(版本混亂,Fedora 41 與 42 混合)
sudo dnf remove libicu\* libtiny\*
sudo dnf install libicu libicu-devel

  • 使用 distro-sync 同步套件
    sudo dnf distro-sync --releasever=42 --allowerasing --skip-broken -y
    

    用以強制同步系統套件到 Fedora 42,過程中遇到許多受保護的套件無法同步。

  • 強制手動移除 Fedora 41 套件資料庫記錄
sudo rpm -e --justdb --nodeps grub2-tools-minimal selinux-policy selinux-policy-targeted

此步驟是為了解決嚴重的相依性循環

四、網路問題處理 (DNS & NetworkManager)

因無法同步我一度移除 NetworkManager,導致網路中斷與無 DNS

  • 手動恢復網路連線
sudo ip link set dev enp6s0 up
sudo ip addr add 192.168.50.199/24 dev enp6s0
sudo ip route add default via 192.168.50.1
echo 'nameserver 8.8.8.8' | sudo tee /etc/resolv.conf
  • 測試 DNS 和網路連通性
ping 8.8.8.8
nslookup mirrors.fedoraproject.org
  • 修正 DNS 解析異常 (IPv6 precedence issue)
echo 'precedence ::ffff:0:0/96 100' | sudo tee -a /etc/gai.conf

後來發現修改這個nslookup還是無法解析host

  • 最終透過修改 /etc/nsswitch.conf
從
hosts: myhostname mdns4_minimal [NOTFOUND=return] resolve [!UNAVAIL=return] dns files
修正為
hosts: files dns

問題根源是nsswitch.conf 配置異常

  • 重新安裝 NetworkManager
sudo dnf install NetworkManager -y
sudo systemctl enable --now NetworkManager

網路與 DNS 終於正常運作

五、EFI 與 GRUB2 問題處理

系統載入新內核

# 找出 grub.cfg 位置
sudo find /boot -name "grub.cfg"
# 重新生成 grub.cfg  位置若有更動 os 會提示
sudo grub2-mkconfig -o  新位置

六、安裝 GNOME 桌面環境並啟用 GDM

# 安裝 GNOME 桌面環境
sudo dnf-3 groupinstall "GNOME Desktop Environment" -y
# 啟用 GDM(圖形登入管理)
sudo systemctl set-default graphical.target
sudo systemctl enable --now gdm

sudo reboot

使用dnf(連結到dnf5)碰上語法已異動,修正為dnf-3

  • dnf-3 是 Fedora 傳統的 dnf 版本,通常穩定度高。
  • 在升級災難發生後,使用 dnf-3 通常能有效避開 dnf5 的問題,提供更穩定的套件解析

關鍵指令


# Fedora 離線升級
sudo dnf5 offline upgrade --releasever=42
# rpm 強制清空舊資料庫
sudo rpm -e --justdb --nodeps $(rpm -qa | grep fc41)
# DNS/nsswitch.conf 修正
# /etc/nsswitch.conf:
hosts: files dns
# 強制指定 IPv4 DNS
echo 'nameserver 8.8.8.8' | sudo tee /etc/resolv.conf
# GNOME 桌面重裝
sudo dnf-3 groupinstall "GNOME Desktop Environment" -y
sudo systemctl enable --now gdm

這次問題與操作的總結

階段 問題原因 修復方法與使用指令
升級 Fedora 41→42 套件下載不完全或 repo 配置錯誤 使用 dnf system-upgradednf5 offline 方法;但最終因 repo 衝突導致混亂
NVIDIA 驅動衝突 專有驅動與新內核衝突 使用 NVIDIA 官方 run 檔安裝,設置 WaylandEnable=false 強制用 Xorg
網路、DNS 異常 NetworkManager 誤刪、 /etc/nsswitch.conf 配置錯誤 手動設置網路 (ip addr add)、強制 IPv4 (/etc/gai.conf)、修改 /etc/nsswitch.conffiles dns 修正 DNS
套件相依性災難 大量 Fedora 41 與 Fedora 42 混合相依性衝突 使用 rpm -e --justdb --nodeps 清空 rpm 資料庫內所有 Fedora 41 舊版套件
GRUB、EFI啟動問題 多個 grub.cfg 路徑混亂、grub 未更新 使用 grub2-mkconfig 更新 grub 啟動設定
GNOME 桌面缺失 升級後桌面環境損壞或移除 使用 dnf-3 groupinstall "GNOME Desktop Environment" 重新安裝 GNOME

標籤:

更新時間: