如何列出重新创建一组已安装软件包所需的最小 Debian 软件包集?
题
有没有办法让 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
查找特定包的依赖关系(请参阅 这一页 例如用法和输出)。
程序概要
- 循环访问包列表 由 Dannysauer 的代码返回
- 称呼
apt-rdepends
在各个 - 从输出中显示的列表中删除所有包
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
是否行得通呢?是否可以以某种方式改进?