我有一个更新系统的脚本:
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
没有升级任何东西。
我在 Google 上搜索了这个问题,但没有找到。如果能得到任何帮助,我将不胜感激。
提前谢谢,抱歉我的英语不好
答案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。不是 -updates,不是 -backports,不是 PPA,不是第三方存储库。因此,一些非安全软件包可能无法安装。您可以更改此设置。
现在查看日志的第 7 行 ( All upgrades installed
):这是您确认第 5 行列出的所有软件包均已成功升级,并且无人值守升级已释放 apt 锁并终止当天的操作。如果出现问题或故障,或者 UU 仍在运行,则您将看不到此行。
您可以看到,如果我在 06:35 运行手动升级sudo apt update
,那么会有很多软件包需要升级。但如果我sudo apt upgrade
在 06:38 运行,则不会升级任何软件包...因为无人值守升级已经完成了。
答案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'