有没有办法让 dpkg、apt-get 或 aptitude 生成需要在第二台计算机上安装的软件包列表,以复制第一台计算机上安装的软件包?

IE。如果我安装了一个普通的 Ubuntu 服务器,在安装时选择了 sshd 选项,然后安装了 build-essential 我希望输出看起来像这样:

#ubuntu 9.10 server
openssh-sshd
build-essential

据我所知,所有可用的包装工具都会在盒子上生成详细的包装列表。我对 openssh libs、ld、gcc 以及 sshd 和 build-essential 引入的所有其他软件包不感兴趣,因为它们将在我安装 sshd 和 build-essential 时安装。

我只想查看需要安装的软件包列表,以便在另一台计算机上重新创建当前的软件包集。

这可能吗?

有帮助吗?

解决方案

deborphan,排序的。它建立每个包的系统中的一个列表,计算出什么要看是什么,并打印出来没有任何依赖关系的软件包。默认情况下只打印库(可以很容易找到其他的包安装的,不再需要的库,故名)。它做你想要的东西,大多选择。我运行它像:

deborphan -anp required --no-show-section

-a指定所有的包(不只是库),点击 -n忽略“建议”或“建议”相关性检查(即只是“依赖”),点击 -p required列出所有的包,尽管优先点击 --no-show-section并不表示它是为哪个Debian的一部分,只是一个很好的格式设置功能你可以建立一个列表中找到有用的。

现在,它就会错过包,因为有些软件包的循环依赖。但是,这些往往是相当罕见的,所以它应该让你足够接近。

其他提示

dannysauer 发布的代码是一个开始。一旦获得包含依赖项的包列表,您就可以使用 apt-rdepends 查找特定包的依赖关系(请参阅 这一页 例如用法和输出)。

程序概要

  1. 循环访问包列表 由 Dannysauer 的代码返回
  2. 称呼 apt-rdepends 在各个
  3. 从输出中显示的列表中删除所有包 apt-rdepends

所以,你想要的是显式安装包的列表(比如说,Ubuntu的桌面和OpenSSH),而不是自动的依赖?我还不能肯定,但我认为这是dpkg --get-selections做什么。所以,你可以做

dpkg --get-selections > file

然后,另一台计算机上,使用相同的“文件”,并运行

dpkg --set-selections  < file
apt-get dselect-upgrade

我不的绝对肯定的那些命令只是做手动选择的套餐,虽然,我目前从任何基于Debian的系统客场核实。 :)

了解这个什么:

#!/bin/bash

packages=$(dpkg --get-selections | grep '[[:space:]]install$' | awk '{print $1}')

for pkg in $packages
do
    nr_lines=$(apt-cache -i rdepends $pkg | wc -l )
    if [ "$nr_lines" = "2" ]
    then
        echo $pkg
    fi
done

是否行得通呢?是否可以以某种方式改进?

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top