apt-get 清除做工不错,资质还是有的标记为已安装并重新安装它们

apt-get 清除做工不错,资质还是有的标记为已安装并重新安装它们

我创建了一个红宝石帮助删除多年来积累并占用磁盘空间的旧内核。 (我的笔记本电脑上有 19 个内核,还有一个小型 SSD...)

我想使用 apt-get 或 dpkg 作为卸载程序,因为有些人不会安装 aptitude,而且我不希望 gem 的用户必须安装任何东西。

问题来了,当一些用户确实用于aptitude其他用途。设想:

  1. 用户使用我的 gem 成功地apt-get purge获得了内核包。
  2. 用户aptitude出于任何原因以交互模式启动,
  3. 用户立即按“g”键(下载/安装/删除 Pkg)而不标记任何更改,-->
  4. aptitude重新下载并重新安装已清除的软件包apt-get

目前,gem 用于apt-get purge <packages>清除内核包。 (在这里看到的.) 我也尝试过dpkg --purge <packages>,但结果是一样的,aptitude 仍然想重新安装它们。

我已经阅读了整个aptitude手册并用谷歌搜索了很多东西,没有骰子。

或许如果我能找到它的位置,我可以以编程方式管理 的aptitude标记/未标记包列表(尽管我更喜欢更干净的解决方案。)我认为它不是,/var/lib/dpkg/status否则就不会有差异?

dpkg-query 将包显示statusNot并将desired状态显示为Unknown

deKernel$ dpkg-query -l linux-image-3.2.0-39-generic
Desired=Unknown/Install/Remove/Purge/Hold
| Status=Not/Inst/Conf-files/Unpacked/halF-conf/Half-inst/trig-aWait/Trig-pend
|/ Err?=(none)/Reinst-required (Status,Err: uppercase=bad)
||/ Name                                       Version                                    Description
+++-==========================================-==========================================-====================================================================================================
un  linux-image-3.2.0-39-generic               <none>                                     (no description available)
deKernel$

可以进入 aptitude 并手动取消标记这些内核包,问题就会消失,但这显然是不切实际的。

答案1

aptitude有它自己的包状态数据库/var/lib/aptitude/pkgstates,不幸的是它似乎没有记录。它为每个包存储一个像这样的块:

Package: bash
Architecture: amd64
Unseen: no
State: 1
Dselect-State: 1
Remove-Reason: 0

我相信状态1意味着installed,白色状态3意味着not installed。我的系统上还有一些状态为 4 的软件包,但我不明白这意味着什么。

dpkg我相信您的问题是数据库/var/lib/dpkg/statusaptitude数据库之间不一致的结果/var/lib/aptitude/pkgstates。根据这个帖子 pkgstates应该反映“用户对软件包的‘预期’状态”,因此 aptitude 可能认为用户希望安装这些软件包,即使 apt-get 刚刚删除了它们。

看来解决您的问题的最佳解决方案是按照 Tripleee 的建议进行操作:aptitude如果已安装,则使用它,如果未安装,则回退到apt-get.

相关内容