在最近一周左右的時間裡,當我讓自動更新程式從 UI 運行時,我收到了上述訊息。消息接著說:「這需要從未經身份驗證的來源安裝軟體包」。我讀到建議這樣做apt-upgrade
。但我沒有找到任何解釋為什麼這是預期的解決方案。
我想了解自動更新版本的過程,以了解為什麼它現在需要apt-upgrade
,然後再以這種方式接觸我原本非常穩定的系統。我不記得過去幾年我的系統有任何更新需要這樣做。
Ubuntu 14.04 LTS。
謝謝!
答案1
要理解為什麼會發生這種情況,首先應該了解 stock apt(即沒有設定任何優先順序的 apt)是如何運作的。假設您想使用 apt-upgrade 運行升級apt upgrade
(我假設這就是您所說的 apt-upgrade 的意思,因為我找不到任何有關 apt-upgrade 的信息apt-upgrade
):首先,apt 將檢查存儲庫中所有已安裝軟體的本地版本以及遠端版本,然後看看是否需要升級軟體包。為了進行演示,我們創建一個假設場景,其中 1 個套件sayhello
需要升級。
這是一個虛構的變更日誌:
sayhello 1.1 now depends on libhello (>= 1.0) to print "hello."
現在假設您的sources.list 中列出了兩個來源,一個是庫存Ubuntu 儲存庫,另一個是Jim's amazing taco repo
.
Jim 的儲存庫包含以下 3 個套件:
jimplayer 2.5 (No depends)
jimsbetterhello 1.0 (Depends on libhello (>= 2.0))
libhello 2.0 (No depends)
您不久前才使用此儲存庫來安裝 jimplayer,但後來 Jim 似乎決定將 jimsbetterhello 新增到儲存庫中。現在事情變得有趣了...
出於相容性原因,Ubuntu 的儲存庫仍然使用 libhello 1.5(因為某些軟體包尚無法在新的 libhello 版本上運行)
現在,當 apt 升級時sayhello
,它遇到了一個難題。有2個版本libhello
可以安裝!應該選擇哪一個呢?好吧,預設情況下 apt 會選擇最新版本的軟體包,doesn't conflict with other currently installed packages.
現在,通常這個過程對用戶來說是透明的,但是如果您沒有為第三方存儲庫添加GPG 密鑰,或者密鑰已更改或其他一些事情,即使您是sayhello
從預設的 Ubuntu 儲存庫安裝的,libhello 2.0 也將是一個不受信任的軟體包,並且 apt 會警告您這一點。這只是 apt 警告您這一點的眾多不同排列之一。這也可能是由於缺少僅在您新增的第三方儲存庫中可用的軟體包。最好的解決方法是將預設儲存庫設定為更高的優先級,並刪除任何不必要的第三方儲存庫,而不將其金鑰新增至受信任的鑰匙圈中。