有些软件包会冲突,因此不可能一次安装所有可用的软件包。对于给定系统,可以安装的软件包数量最大是多少?暴力尝试错误的方法是:
- 列出每个软件包名称的列表,例如
dglob -a > list
- 从中制作子列表
slist1 slist2 slist3 ...
,其中包含每个可能的软件包组合。在我的系统上,dglob -a | wc -l
返回 91327,这将需要一个不可行的巨大数字 (1.467×10^27492) 的文件。 - 对每个列表运行
apt-get install
,并删除产生冲突的列表。rm
- 按行数排序剩余列表,并显示最长的列表。
wc -l slist* | head -n -1 | sort -g | tail -1
。
这种方法简单易行,但资源消耗太大,因此也许还有一些更可行的方法。
从这些问题中可以得出各种相关问题,例如:
给定一个软件包'foo',如何找到最大数量的可安装软件包,而不会与'foo'产生冲突?
对于所有可能的软件包,哪个具有最小的这种最大值(使其成为最“爱争吵”的软件包)?
(注意:该问题适用于Debian、Red Hat和任何具有映射软件包冲突的打包系统的发行版或操作系统。任何适用平台的答案都是有效的。)
背景信息:
Debian有数万个软件包。从debian-goodies软件包中使用dglob
方便快捷地获取软件包计数:
# show how many packages installed and available on the current system
echo $(dglob | wc -l) packages installed of \
$(dglob -a | wc -l) packages.
示例输出,(两个数字都可能在更新和升级后周期性波动,并且在不同系统之间会有所变化):
5107 packages installed of 91327 packages.
数字5107当然不是最大值,但一定存在一个最大值。