我刚刚从头开始重新安装了 Ubuntu MATE 15.10。我已按照此答案保存已安装软件包的列表并将其恢复到新安装的系统上。
但是,当我这样做时
sudo dpkg --set-selections < packages-backup.list
我收到一长串错误消息,如下所示:
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
最后
dpkg: warning: found unknown packages; this might mean the available database is outdated, and needs to be updated through a frontend method
所以我跑了sudo apt-get update
又跑,dpkg
但我一直收到同样的错误。
对于列表中的每个包,我似乎都会收到此错误消息,包括相当不起眼的包,例如默认内核或 sqlite。此外,我没有在之前的设置中添加任何额外的 PPA,因此来自非默认存储库的包在这里不会成为问题。
作为测试,我尝试使用 安装其中一个“有sudo apt-get install
问题的”软件包,它可以正常工作。
这里出了什么问题?
这些警告可以安全地忽略,因为它们只涉及
dpkg
数据库。实际安装是使用 APT 完成的,它不使用此数据库。当您
dpkg
以这种方式使用时,您需要使用dselect-upgrade
以应用标记的更改。从 man dpkg:
尝试这个:
之后可以执行:
此方法不需要
dselect
包从 apt 缓存更新 dpkg 数据库:
或带根的单线:
在 Debian/Ubuntu/Mint 的最新版本中,
dpkg
需要可用的软件包在其“可用”数据库中dpkg --set-selections
才能工作。示例序列:
dpkg --get-selections > installed.dselect
sudo apt update
apt-cache dumpavail | sudo dpkg --merge-avail
sudo dpkg --set-selections < installed.dselect
sudo apt-get dselect-upgrade
第三个命令填充 dpkg 的“avail”数据库。在设置要安装的附加包的选择之前运行它很重要。
这需要 dpkg v1.17.7 及更高版本。请参阅问:为什么 ''dpkg --set-selections'' 不记录未知包的选择?在 Debian wiki 上了解更多详细信息。
以下脚本对我来说是一种解决方法。注意 linux-images 和 linux-headers。如果您的 dpkglist.txt 中有很多这样的内容,那么您可能希望使用 grep -v 命令过滤掉这些内容,例如
通过 apt-get 从 dpkglist.txt 安装和卸载软件包的脚本