Eri*_*son 1 scripting packaging debian apt package-management
我已经将一个 debian 实例与 apt 作为安装了许多软件包的软件包管理器放在一起。我想在另一个没有互联网连接的系统上安装这些相同的软件包。有没有一种简单的方法来生成我已安装的软件包列表,按依赖项排序,获取软件包的 .deb 以便我可以在另一台计算机上安装?
我的目标也是能够通过重新生成包列表和 .deb 文件并使用它来进行更新来更新另一台计算机。
要获取已安装的软件包列表:
dpkg --get-selections '*' > /tmp/selections.txt
Run Code Online (Sandbox Code Playgroud)要在可以访问 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 机器的软件包数量(例如,该目录中仍然存在的旧版本、已卸载的软件包等)。缺点是所有已安装的软件包都将再次下载,即使它们已经在档案目录中。
复制/tmp/selections.txt到/tmp/非互联网机器上。
将所有内容复制/var/cache/apt/archives到非 Internet 机器上的同一目录中。方法无关紧要 - scp、rsync、USB 记忆棒、外部硬盘驱动器等等。重要的是它们被复制到/var/cache/apt/archives目标机器上。
在目标(非互联网)机器上运行:
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
| 归档时间: |
|
| 查看次数: |
532 次 |
| 最近记录: |