使用 dpkg --set-selections 还原时“包不在数据库中”

use*_*408 12 package-management dpkg

我刚刚从头重新安装了 Ubuntu MATE 15.10。我已按照此答案保存已安装软件包的列表并将其还原到新安装的系统上。

但是,当我这样做时

sudo dpkg --set-selections < packages-backup.list
Run Code Online (Sandbox Code Playgroud)

我收到一长串错误消息,如下所示:

dpkg: warning: package not in database at line 1417: sqlite3
dpkg: warning: package not in database at line 1417: sqliteman
dpkg: warning: package not in database at line 1417: sqliteman-doc
Run Code Online (Sandbox Code Playgroud)

最后

dpkg: warning: found unknown packages; this might mean the available database is outdated, and needs to be updated through a frontend method
Run Code Online (Sandbox Code Playgroud)

所以我跑了sudo apt-get update又跑,dpkg但我一直收到同样的错误。

对于列表中的每个包,我似乎都会收到此错误消息,包括相当不起眼的包,例如默认内核或 sqlite。此外,我没有在我之前的设置中添加任何额外的 PPA,因此来自非默认存储库的包不会成为这里的问题。

作为测试,我尝试使用 安装其中一个“违规”软件包sudo apt-get install,该软件包没有任何问题。

这里出了什么问题?

phi*_*lsf 7

这些警告可以安全地忽略,因为它们只涉及dpkg数据库。实际安装是通过 APT 完成的,它不使用这个数据库。

当您dpkg以这种方式使用时,您需要使用dselect-upgrade标记来应用更改。

sudo apt-get dselect-upgrade
Run Code Online (Sandbox Code Playgroud)

从人dpkg

请注意,如果您不使用 dselect 而使用基于 APT 的前端,则此文件几乎没有用:APT 有自己的系统来跟踪可用包。


小智 6

尝试这个:

sudo apt-get install dselect && sudo dselect update
Run Code Online (Sandbox Code Playgroud)

之后就可以执行:

sudo dpkg --set-selections < packages-backup.list
Run Code Online (Sandbox Code Playgroud)