如何从一台电脑获取软件包列表并安装到另一台电脑上?

我想将PC1上通过apt install安装的所有软件包都安装到PC2上。虽然这是针对Debian的,但我认为由于Debian和Ubuntu共享相同的软件包系统,解决方案应该是一样的。如何操作呢?

你在引用哪个Ubuntu版本?你使用的是哪个软件包管理器? - Zeiss Ikon
@ZeissIkon 包管理器是 apt。版本并不重要,在问题的背景下,我们可以使用一些通用的最新版本。 - xakepp35
3一个更加“合适”的地方来询问是https://unix.stackexchange.com。 - DK Bose
@WinEunuuchs2Unix 的回答可供参考,但问题以另一种格式发布。我不想将我的“整个旧系统迁移到新笔记本电脑”,而是想在多台(数百台)相同的工作站上部署一些软件(所有二进制文件/库已在参考机器上安装)。 - xakepp35
@xakepp35 导出已安装应用程序列表并读取该列表以在其他设备上安装的基本原则仍然适用。通常情况下,即使问题的措辞不同,也会将其标记为重复,因为可以使用重复问题的答案。 - WinEunuuchs2Unix
1个回答

首先,确保PC2上的/etc/apt/sources.list/etc/apt/sources.list.d与PC1上的相同。
然后,在PC1上执行以下操作:
dpkg --get-selections > installed-packages
apt-key exportall > repo-keys

将文件installed-packagesrepo-keys传输到PC2,并执行。
sudo apt-get install dselect
sudo apt-key add repo-keys
sudo dpkg --set-selections < installed-packages
sudo apt-get dselect-upgrade -y

如果您没有从PPA安装任何软件包,则可以跳过repo-keys命令。

免责声明:这在几年前曾经有效,但我最近没有尝试过。


如果通过dpkg -i super_private_nda_package.deb离线安装了一些软件包,会发生什么情况呢?整个安装会失败吗?还是只有那些被跳过的软件包会失败?或者是那些带有依赖关系的软件包会失败? - xakepp35
我相信super_private_nda_package最终也会出现在installed-packages中。 - Jos
我的意思是 dselect-upgrade 命令,当它确定 super_private 不存在时,会失败吗?还是它会跳过此部分并安装其他所有内容?遇到错误时有几种可能的行为:回滚整个操作(就像命令从未发生过一样),在错误处停止(安装 surer_ 之前的每个软件包,之后的软件包不安装),或忽略错误(安装每个软件包,但不包括 super_ 及其依赖项)。 - xakepp35
1在PC2上,apt-get dselect-upgrade基本上是一个apt install [软件包列表...]的命令,它会检查是否能找到所有提及的软件包。如果找不到,它将停止并不会安装任何东西。 - Jos
如果列表中的某个软件包“不存在”(无论是sources.list不同,还是软件包是离线下载并手动安装的),那么就不会安装任何东西,对吗? - xakepp35
我这么认为,是的。 - Jos