我已经将 apt 放在一个 debian 实例中作为包管理器,安装了许多包。我想在另一个没有互联网连接的系统上安装这些相同的软件包。有没有一种简单的方法来生成我已安装的按依赖项排序的软件包列表,获取软件包的 .deb 以便我可以安装在另一台计算机上?
我的目标还包括能够通过重新生成软件包列表和 .deb 文件并使用它来进行更新来更新另一台计算机。
答案1
获取已安装的软件包列表:
dpkg --get-selections '*' > /tmp/selections.txt
要在具有 Internet 访问权限的计算机上重新下载已安装的软件包:
apt-get clean awk '$2=="hold" || $2 == "install" {print $1}' /tmp/selections.txt | xargs -r apt-get -d -y reinstall
这会将所有已安装的软件包下载到/var/cache/apt/archives/
. xargs
此处使用是为了防止已安装的软件包列表太大而无法在一个命令行中容纳。
注意:运行apt-get clean
是可选的。它将删除.deb
中已有的所有文件/var/cache/apt/archives
。这样做只是为了最大限度地减少需要复制到非互联网计算机的软件包数量(例如,旧版本、已卸载的软件包等仍然存在于该目录中)。缺点是所有已安装的软件包都将再次下载,即使它们已经位于档案目录中。
复制
/tmp/selections.txt
到/tmp/
非互联网计算机上。将所有内容复制到
/var/cache/apt/archives
非互联网计算机上的同一目录中。方法并不重要——scp、rsync、USB 记忆棒、外部硬盘驱动器,等等。重要的是它们被复制到/var/cache/apt/archives
目标机器上。在目标(非互联网)机器上运行:
dpkg --set-selections < /tmp/selections.txt apt-get dist-upgrade
如果您想要apt-get dist-upgrade
卸载先前安装在目标计算机上但未安装在其他计算机上的软件包,请运行dpkg --clear-selections
前跑步dpkg --set-selections
。
dpkg
有关 、 和 选项的更多详细信息,--get-selections
请--set-selections
参阅手册页--clear-selections
。