![多次運行 apt update 導致無法升級](https://rvso.com/image/913200/%E5%A4%9A%E6%AC%A1%E9%81%8B%E8%A1%8C%20apt%20update%20%E5%B0%8E%E8%87%B4%E7%84%A1%E6%B3%95%E5%8D%87%E7%B4%9A.png)
我有一個更新系統的腳本:
sudo apt update && sudo apt upgrade && sudo apt autoremove
有時它會拋出一個錯誤,指出升級已鎖定,因此無法升級可升級的軟體包。當我再次運行腳本時,當時apt update
沒有顯示任何要升級的內容,而當它是時候不運行apt upgrade
升級時,因為「沒有任何內容」要升級。如何升級第一個中列出的軟體包apt update
?
真實案例:現在我有 Firefox 67.0.3(版本 67.0.4 可用),第一個apt update
顯示它有更新。無法升級,現在當我apt update
再次運行時,沒有列出 Firefox 的升級,也apt upgrade
沒有升級任何內容。
我在谷歌搜尋這個問題但沒有成功。我將不勝感激任何形式的幫助。
預先感謝,並對我的英語感到抱歉
答案1
最可能的原因是您偶爾在執行腳本的同時執行無人值守升級。
透過查看無人值守升級日誌可以輕鬆檢查。
以下是今天早些時候我的無人值守升級日誌的範例:
$ grep 2019-06-21 /var/log/unattended-upgrades/unattended-upgrades.log
2019-06-21 06:35:25,971 INFO Initial blacklist :
2019-06-21 06:35:25,986 INFO Initial whitelist:
2019-06-21 06:35:25,986 INFO Starting unattended upgrades script
2019-06-21 06:35:25,986 INFO Allowed origins are: o=Ubuntu,a=disco, o=Ubuntu,a=disco-security, o=UbuntuESM,a=disco,
2019-06-21 06:36:00,248 INFO Packages that will be upgraded: bind9-host intel-microcode libbind9-161 libdns-export1104 libdns1104 libirs161 libisc-export1100 libisc1100 libisccc161 libisccfg163 liblwres161 libpq5
2019-06-21 06:36:00,248 INFO Writing dpkg log to /var/log/unattended-upgrades/unattended-upgrades-dpkg.log
2019-06-21 06:37:18,374 INFO All upgrades installed
看一下日誌的第 5 行 ( Packages that will be upgraded:...
):該清單是直接從 apt 中拉取的。它是幾乎您從 獲得的相同清單sudo apt update
。無人值守升級的預設設定是僅使用 -security pocket。不是更新,不是向後移植,不是 PPA,不是第三方儲存庫。所以一些非安全的套件可能不會安裝。您可以更改此設定。
現在看看日誌的第 7 行 ( All upgrades installed
):這是您對第 5 行列出的所有軟體包均已成功升級的肯定確認,並且無人值守升級已釋放 apt 鎖定並在當天終止。如果出現問題或故障,或者 UU 仍在工作,那麼您將不會看到此行。
您可以看到,如果我在 06:35 運行手冊sudo apt update
,就會有很多軟體包需要升級。但如果我在 06:38 運行sudo apt upgrade
,則不會升級任何軟體包...因為無人值守升級已經這樣做了。
答案2
我敢打賭,每當 sudo apt update 完成時,Ubuntu 軟體更新都會阻礙。您應該打開軟體更新設定並確保將其設定為所有“從不”選項。我不認為這會抑制彈出窗口,但它應該會阻止它嘗試自動升級和鎖定檔案。
為了修復 Firefox,我會運行sudo apt install --reinstall firefox
並查看是否可以解決問題。如果它抱怨鎖,您通常可以使用 刪除它sudo rm /var/lib/dpkg/lock
。
順便說一句,對於您的腳本,您可以使用以下命令來加速它sudo -- sh -c 'apt update; apt upgrade --autoremove -y'