从 dpkg --set-selections '*' 恢复所有数据和依赖项

从 dpkg --set-selections '*' 恢复所有数据和依赖项

所以我可以在一台机器上运行:

dpkg --get-selections '*' > selection.txt

在另一台机器上:

dpkg --set-selections < selection.txt

... 然后是以下任一项:

aptitude install
apt-get -u dselect-upgrade

...安装这些软件包。

但是,似乎有些信息在此过程中丢失了,例如某个包(例如xyz)是否已自动安装为另一个包的依赖项(abc)。您可以看到,每当您执行类似 的操作时apt-get --purge remove abc。在原始计算机上,您会收到通知,该包xyz已作为依赖项安装abc,您可以使用apt-get autoremove它来摆脱它。

现在我知道了deborphandebfoster,但是对于手头的(简单)任务来说,使用它们很麻烦。

似乎如上所示的保存和恢复选择不足以恢复已安装包的细微依赖关系。

有没有办法备份包管理的完整元数据集,然后将其全部恢复?

答案1

备份:

apt-mark showauto > pkgs_auto.lst
apt-mark showmanual > pkgs_manual.lst

恢复:

sudo apt-mark auto $(cat pkgs_auto.lst)
sudo apt-mark manual $(cat pkgs_manual.lst)

答案2

这个问题的选定答案是不完整的,并且不起作用(或不再起作用)。痛苦的解决方法是使用 bash for 循环来解析输出 *.lst 文件并将它们提供给apt install。不过,这是一个糟糕的选择,因此这里就不举例说明了。

更好的选择是使用apt-clone,如这个答案在 Unix & Linux Stackexchange 上。这会创建一个小文件(对于我的系统来说大约 100K 或更少)。据称,它将毫不费力地克隆软件包。

因此,简而言之,在原始机器上:

apt-clone clone `uname -n`

然后,在要克隆的机器上,复制克隆文件并运行:

apt-clone restore original-machine-name.apt-clone.tar.gz

我把这个答案包含在这里,因为这个页面在最初的网络搜索中出现了,但其他答案却没有。这种方法看起来更简单。

相关内容