在软件安装教程中,他们总是有一长串依赖关系。 他们如何find这些依赖关系?
例如,我开始使用新的Ubuntu服务器,按照指示安装rvm。 它们提供了如下内容:
sudo apt-get install git-core libreadline5 libncurses5-dev libreadline5-dev build-essential zlib1g-dev libssl-dev libpcre3-dev libxml2-dev libxslt-dev;
我只是想了解他们如何find所有这些依赖关系。 复制和粘贴作品,但我认为更重要的是理解它。
通常情况下会为你做。 如果你尝试安装一个没有满足依赖的二进制包,apt会告诉你哪些是缺less的,并要求你安装它们的权限。
大多数源代码发行版在README文件中告诉你什么是-dev依赖关系。
每个软件包都附带一个自己的依赖列表。 对于Ubuntu使用的debs ,你可以这样做:
[andys@daedalus ~]$ apt-cache depends git-core git-core Depends: git
程序包的依赖关系是在程序包生成时指定的。 它们中的一些是由包维护者 (负责构build包的人员)手动指定的,另一些在包构build时自动确定。 如果你下载一个Debian源码包,并查看debian/control文件,你会看到一些像Depends: , Conflicts: , Replaces:等行。
所以,回到这个例子 – git-core只依赖于一个包,它是git 。 git可能是某种types的元数据包,它依次具有一大堆的依赖关系,以确保安装所有需要运行git的包,而不仅仅是为了满足一个包的依赖性。 如果我们看一下git包:
[andys@daedalus ~]$ apt-cache depends git git Depends: libc6 Depends: libcurl3-gnutls <...snip...> Suggests: git-cvs Suggests: git-svn Suggests: git-email <...snip...> Recommends: rsync <...snip...> Conflicts: git-core <...snip...> Breaks: stgit Breaks: stgit-contrib Replaces: <cogito> Replaces: git-core
你会看到git本身有更多的依赖关系。 使事情进一步复杂化,除了需要安装另一个软件包之外,还有其他不同的依赖项。
git与git-core发生冲突。 在我的盒子里, git-core软件包被标记为过时 ,这可能是为什么在这里列出的。 git , stgit和stgit-contrib包就会被认为是中断的。 git-core包在这里再次出现。 也有“软”依赖types,如推荐和build议 ,这是你正在安装的软件包不需要 ,但build议或build议 ,顾名思义。 再看一下这个例子,build议的和推荐的包是git的附加组件,或者是不直接相关的工具,这些工具将使得它更容易使用。
把所有这些放在一起,你使用的包pipe理器将从你要求它安装的包(或者包)开始,并且将查找它的依赖关系,以及这些包的依赖关系,等等。 它还将检查是否发生冲突,中断或replace请求的软件包或其依赖项的软件包。 一旦find了满足您的原始请求的方式,它会很快乐,然后继续安装。
不同的软件包pipe理者有不同的方式来执行这种依赖关系parsing 例如, apt-get , aptitude和dselect ,基本上都是做同样的事情,但是他们做决定的方式是不一样的。 你可能会发现aptitude和dselect会很高兴地给你提供一个安装包的方法,而apt-get不能。
如果您有兴趣了解有关Debian软件包的更多信息,请参阅Debian New Maintainers'Guide(Debian新维护者指南) ,该指南覆盖了一些debs的内容。