問題1
問題
我在rk3588 ubuntu20.04安裝相關環境的時候經常出現下面類似的問題,如何系統的解決
The following packages have unmet dependencies :
openssh-server : Depends: openssh-client (= 1:8.2p1-4ubuntu0.13) but 1:8.2p1-4ubuntu0.11 is to be installed
Recommends: ncurses term but it is not going to be installed
E: Unable to correct problems, you have held broken packages.
答案
你這個問題本質上是 APT 依賴沖突 / 軟件包版本不匹配,
在 RK3588 上用 Ubuntu 20.04 會更容易出現這種情況,因為:
- 你可能混用了官方 apt 源 + 廠商(比如 Radxa、FriendlyElec、Firefly)自帶的源,版本號不一致。
- 有些包版本被 “鎖定” 或 “掛起”,APT 不會自動升級它們。
- 交叉依賴導致 APT 無法找到一個可用的版本組合(比如 openssh-server 要 0.13 版本,系統里卻固定了 0.11 版本的 openssh-client)。
系統性解決方案
1. 檢查并清理“掛起”的包
dpkg --get-selections | grep hold
如果有包被 hold,可以解鎖:
sudo apt-mark unhold 包名
2. 讓 apt 重新整理依賴
sudo apt --fix-broken install
sudo apt update
sudo apt full-upgrade
--fix-broken
會嘗試修復不完整的安裝,full-upgrade
會允許 apt 替換/升級沖突的包。
3. 確認 apt 源版本一致
查看當前 apt 源:
cat /etc/apt/sources.list
ls /etc/apt/sources.list.d/
建議:
- 不要混合使用多個不同發行方的源(尤其是 arm64 架構上)
- 如果廠商提供了定制源,優先用它
- 如果要用 Ubuntu 官方源,所有條目都要指向同一個版本(比如 focal 20.04)
4. 手動指定版本安裝
如果某個包依賴沖突,可以明確指定版本:
sudo apt install openssh-server=1:8.2p1-4ubuntu0.13 openssh-client=1:8.2p1-4ubuntu0.13
這樣 apt 會一次性把它們匹配到相同版本。
5. 強制覆蓋沖突版本(謹慎)
有些時候 apt 死活解決不了,可以用:
sudo apt install -f
sudo dpkg -i --force-overwrite /var/cache/apt/archives/xxx.deb
但這樣可能引入運行時問題,建議只在確認庫 ABI 沒變的情況下用。
6. 徹底重建依賴樹(終極方案)
如果系統依賴亂到不行:
sudo apt remove --purge 包名
sudo apt autoremove --purge
sudo apt clean
sudo apt update
sudo apt install 包名
甚至可以 直接重新刷新所有包到官方狀態:
sudo apt install --reinstall $(dpkg --get-selections | grep install | cut -f1)
(這會花很久時間,并且會下載所有包)
💡 總結:
- 先解鎖 hold 包 → 修復 broken → 確保源一致 → 必要時手動對齊版本
- RK3588 的 Ubuntu 20.04 最好用廠商提供的 apt 源,否則某些包版本對不上
我可以幫你做一個 RK3588 apt 依賴修復腳本,自動檢測 hold 包、沖突版本、源不一致,并一次性修復。這樣你就不會每次安裝都卡在依賴地獄里。
要我幫你寫嗎?這樣以后遇到這種 apt 報錯可以一鍵解決。