如何在 aptitude 中取消选择某种架构的包

Jem*_*ake 5 aptitude ubuntu debian

我正在将一些 Debian 机器从 i386 arch 升级到 amd64。这个过程相当简单:

  • 引导 amd64 内核
  • 对于支持多架构的库,请安装其 amd64 配套库
  • 手动安装 amd64 版本的 dpkg 和 apt
  • 开始安装 amd64 版本的软件包而不是 i386 版本的软件包

所有这一切都进行得相当顺利,我已经能够编写有帮助的脚本,但后来遇到了一个问题:当我运行 aptitude 时,它​​认为我仍然想安装所有内容的旧 i386 版本(除了amd64 版本)。所以,我的能力屏幕看起来像这样:

ii   iptables ...
pi   iptables:i386 ...
ii   iptraf ...
pi   iptraf:i386 ...
Run Code Online (Sandbox Code Playgroud)

因此,像 iptables:i386 这样的软件包将显示为“已清除,但标记为安装”。这导致了数百碰撞。到目前为止,我只是一一浏览并取消选择它们。我尝试使用“dpkg --set-selections”时运气不佳

所以,官方问题是:有人知道一个技巧来“取消安装标记”(在 aptitude 中)每个已经安装了 amd64 版本的软件包的 i386 版本吗?

Gra*_*eme 1

aptitude 的包操作存储在 中/var/lib/aptitude/pkgstates,这与任何dpkg状态都是分开的。在尝试以下操作之前,您可能需要备份上述文件,以防结果不理想并且您很难返回到原来的位置。以下应该执行您正在寻找的操作(请记住首先退出任何正在运行的 aptitude 实例并以 root 身份运行):

aptitude -F %p search '~ri386 ~ainstall' | cut -d : -f 1 >i386
aptitude -F %p search '~ramd64 ~i | ~ramd64 ~ainstall' | cut -d : -f 1 | sort >amd64
aptitude --schedule-only keep $(comm -13 amd64 i386 | sed 's/$/:i386/')
rm i386 amd64
Run Code Online (Sandbox Code Playgroud)

当您重新启动 GUI 时,希望您能找到所需的内容:)