如何获取安装在 debian 实例中的列表包作为另一台机器的离线安装

Eri*_*son 1 scripting packaging debian apt package-management

我已经将一个 debian 实例与 apt 作为安装了许多软件包的软件包管理器放在一起。我想在另一个没有互联网连接的系统上安装这些相同的软件包。有没有一种简单的方法来生成我已安装的软件包列表,按依赖项排序,获取软件包的 .deb 以便我可以在另一台计算机上安装?

我的目标也是能够通过重新生成包列表和 .deb 文件并使用它来进行更新来更新另一台计算机。

cas*_*cas 5

  1. 要获取已安装的软件包列表:

     dpkg --get-selections '*' > /tmp/selections.txt
    
    Run Code Online (Sandbox Code Playgroud)
  2. 要在可以访问 Internet 的计算机上重新下载已安装的软件包:

    apt-get clean
    awk '$2=="hold" || $2 == "install" {print $1}' /tmp/selections.txt | 
      xargs -r apt-get -d -y reinstall
    
    Run Code Online (Sandbox Code Playgroud)

这会将所有已安装的软件包下载到/var/cache/apt/archives/. xargs在这里使用,以防已安装的软件包列表太大而无法在一个命令行中显示。

注意:运行apt-get clean是可选的。它将删除所有.deb已经在/var/cache/apt/archives. 这样做只是为了最大限度地减少需要复制到非 Internet 机器的软件包数量(例如,该目录中仍然存在的旧版本、已卸载的软件包等)。缺点是所有已安装的软件包都将再次下载,即使它们已经在档案目录中。

  1. 复制/tmp/selections.txt/tmp/非互联网机器上。

  2. 将所有内容复制/var/cache/apt/archives到非 Internet 机器上的同一目录中。方法无关紧要 - scp、rsync、USB 记忆棒、外部硬盘驱动器等等。重要的是它们被复制到/var/cache/apt/archives目标机器上。

  3. 在目标(非互联网)机器上运行:

    dpkg --set-selections < /tmp/selections.txt
    apt-get dist-upgrade
    
    Run Code Online (Sandbox Code Playgroud)

如果要apt-get dist-upgrade卸载以前安装在目标机器上但未安装在另一台机器上的软件包,请在运行dpkg --clear-selections 之前运行dpkg --set-selections

有关、 和选项的dpkg更多详细信息--get-selections,请参阅手册页。--set-selections--clear-selections