Ubuntu

安裝軟體時如何找到依賴項?

  • December 20, 2010

在軟體安裝教程中,它們總是有一長串依賴項。他們如何找到這些依賴關係?

例如,我從一個全新的 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;

我只是想了解他們如何找到所有這些依賴項。複製和粘貼工作,但我認為理解它更重要。

通常apt會為您做到這一點。如果您嘗試安裝具有未滿足依賴項的二進制包,apt 會告訴您缺少哪些依賴項,並詢問您是否允許安裝它們。

大多數原始碼發行版會在 README 文件中告訴您 -dev 依賴項是什麼。

每個包都帶有一個自己的依賴項列表。對於Ubuntu 使用的debs,您可以執行以下操作:-

[andys@daedalus ~]$ apt-cache depends git-core
git-core
 Depends: git

包的依賴關係是在建構包時指定的。其中一些是由包維護者(負責建構包的人)手動指定的,還有一些是在建構包時自動確定的。如果您下載 Debian 原始碼包,並查看debian/control文件,您會看到許多行,如Depends:Conflicts:Replaces:等。

因此,回到範例 -git-core僅依賴於一個包,即git. git可能是某種元包,它又具有大量依賴項,以確保安裝了執行 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包被標記為obsolete,這可能就是這裡列出的原因。
  • Breaks - 這個包破壞了另一個包,並且安裝它 - 儘管可能不需要您解除安裝將被破壞的包 - 將導致該包安裝的軟體出現問題。同樣,看看我們的範例,一旦安裝, stgitandstgit-contrib包將被視為損壞。git
  • 替換- 這個包替換了另一個包,這意味著另一個包已經過時並且可能可以被解除安裝。git-core包裹再次出現在這裡。

還有一些“軟”依賴類型,例如RecommendsSuggests,它們不是您正在安裝的軟體包所必需的,但正如其名稱所暗示的那樣,是推薦或**建議的。**再一次,看這個例子,建議和推薦的包是 git 的附加組件,或者是不直接相關的工具,這將使使用它更容易。

將所有這些放在一起,您使用的包管理器將從您要求它安裝的包(或多個包)開始,並將查找它的依賴項,然後查找這些包的任何依賴項,依此類推。它還將檢查與請求的包或其依賴項發生衝突、中斷或替換的包。一旦它很高興它找到了一種可以滿足您原始請求的方法,它就會繼續安裝。

不同的包管理器有不同的方法來解決這種依賴關係。和apt-get,例如,基本上都做同樣的事情,但他們做出決定的方式不同。您可能會發現並樂意為您提供一種安裝軟體包的方法,而不能。aptitude``dselect``aptitude``dselect``apt-get

如果您有興趣了解有關 Debian 軟體包的更多資訊,請查看Debian 新維護者指南,其中介紹了 debs 的一些內容。

引用自:https://serverfault.com/questions/214260