`apt full-upgrade` 如何确定删除一个软件包以便升级另一个软件包?

`apt full-upgrade` 如何确定删除一个软件包以便升级另一个软件包?

我们有安装了 debian 的 raspberry pi 系统,其源代码来自 bullseye、bullseye-backports、raspberrypi 以及我们自己的私有存储库。在我们的私有存储库中,我们预编译了 zfs-modules,这样我们就不必在每个 raspberrypi 盒子上重新编译 zfs-dkms。

执行时apt full-upgrade,如果软件包“raspberrypi-kernel”的升级可用,但相应的 zfs 模块软件包“zfs-modules-raspi-arm64”尚不可用,则apt full-upgrade选择删除 zfs 模块软件包。相反,它应该保留 raspberrypi-kernel 的软件包更新。

我尝试过固定。我尝试过 mark-auto/mark-manual。保留软件包“zfs-modules-raspi-arm64”是可行的,但也会阻止正常apt upgrade操作。

问题是:如何告诉apt full-upgrade,仅当不需要删除 zfs-modules-raspi-arm64 时才应该升级 raspberrypi-kernel?

或者换句话说:apt full-upgrade对于冲突,deos 如何选择是保留一个包还是删除另一个包?

我的软件包依赖项(缩短):

Package: raspberrypi-kernel
Version: 1:1.20230405-1

Package: raspberrypi-kernel
Version: 1:1.20230317-1

Package: zfs-modules-raspi-arm64
Version: 2.1.9-2~~1.20230317-1
Provides: zfs-modules
Depends: raspberrypi-kernel(=1:1.20230317-1)
Conflicts: zfs-modules

apt-full-upgrade 将删除 zfs-modules-raspi-arm64 以升级 raspberrypi-kernel。但我希望 apt-full-upgrade 保留 raspberrypi-kernel,直到针对新内核版本编译的 zfs-modules-raspi-arm64 版本可用。

答案1

简而言之apt full-upgrade明确要求不惜一切代价升级所有软件包。apt upgrade仅用于升级那些不与任何其他已安装软件包冲突(不需要删除)的软件包。

  • apt full-upgradeapt-get dist-upgrade升级所有软件包,即使它们需要安装额外的软件包或删除冲突的软件包。
  • apt upgradeapt-get --with-new-pkgs upgrade升级所有不需要删除任何已安装软件包的软件包。需要删除的软件包将被跳过,并发出一些通知。
  • apt-get upgrade升级所有不需要安装任何附加软件包或删除任何冲突软件包的软件包。不要问我为什么apt和之间apt-get存在这种不一致。

请参阅这两个命令的 Debian 手册页:

据我所知,防止删除 的唯一方法apt full-upgrade是同时使用 和apt-mark hold两个包。否则,如果即将应用未保留包的升级,而另一个包没有可用的升级,APT 将失败:由于定义的冲突,您请求了不可能的操作。但我明白,与仅使用 相比,这对您来说并不是一个实用的解决方案apt upgrade

我不知道 APT 固定如何能在这里提供帮助,这更多的是关于从哪个存储库中获取哪个包,而不是解决版本冲突,特别是当它们必须随着持续的版本增量而持久时。


有点跳出思维定式,不严格受限于您的问题,而是受限于您的目标:将内核包托管在您的私有存储库中,并始终在那里与匹配的 ZFS 模块包一起更新,怎么样?通过 APT 固定,您可以阻止archive.raspberrypi.org考虑任何内核升级。

相关内容