我有一个 Ubuntu 20.04 服务器,用于一个仍然需要特定旧 Java 版本 (8u252-b09) 的应用程序。任何 271 及更高版本的版本都会破坏该应用程序。
我使用 apt-mark 来保存包:
$ sudo apt-mark showhold
openjdk-8-jre-headless
但是当我检查新的软件包时,它仍然显示为可升级:
$ sudo apt update
...
$ sudo apt list --upgradable
Listing... Done
openjdk-8-jre-headless/focal-updates,focal-security 8u352...
如果现在运行它似乎apt upgrade
会升级到新的包并破坏应用程序。
我陷入了困境:我必须更新服务器(还有另一个待处理的重要安全更新),但我不能破坏应用程序。我知道我也可以一次手动更新其他可用包,但这在服务器的整个生命周期中会很繁琐,而且很可能有人最终会犯错误,只做基本的apt upgrade
。
我如何确定这个包不会升级?
答案1
apt list --upgradable
当有新版本可用时,会列出被阻止的软件包。
这些软件包不会被升级,apt upgrade
因为它们被标记为保留。将软件包标记为保留的意思是防止自动安装、删除或升级软件包。请参阅man apt-mark
:
PREVENT CHANGES FOR A PACKAGE
hold
hold is used to mark a package as held back, which will prevent the package from
being automatically installed, upgraded or removed.
如果您对此不确定,可以使用-s
或--simulate
选项运行升级命令:
apt upgrade -s
将显示被保留的软件包将不会被升级。