安裝軟體時如何找到依賴項?
在軟體安裝教程中,它們總是有一長串依賴項。他們如何找到這些依賴關係?
例如,我從一個全新的 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 - 這個包破壞了另一個包,並且安裝它 - 儘管可能不需要您解除安裝將被破壞的包 - 將導致該包安裝的軟體出現問題。同樣,看看我們的範例,一旦安裝,
stgit
andstgit-contrib
包將被視為損壞。git
- 替換- 這個包替換了另一個包,這意味著另一個包已經過時並且可能可以被解除安裝。
git-core
包裹再次出現在這裡。還有一些“軟”依賴類型,例如Recommends和Suggests,它們不是您正在安裝的軟體包所必需的,但正如其名稱所暗示的那樣,是推薦或**建議的。**再一次,看這個例子,建議和推薦的包是 git 的附加組件,或者是不直接相關的工具,這將使使用它更容易。
將所有這些放在一起,您使用的包管理器將從您要求它安裝的包(或多個包)開始,並將查找它的依賴項,然後查找這些包的任何依賴項,依此類推。它還將檢查與請求的包或其依賴項發生衝突、中斷或替換的包。一旦它很高興它找到了一種可以滿足您原始請求的方法,它就會繼續安裝。
不同的包管理器有不同的方法來解決這種依賴關係。和
apt-get
,例如,基本上都做同樣的事情,但他們做出決定的方式不同。您可能會發現並樂意為您提供一種安裝軟體包的方法,而不能。aptitude``dselect``aptitude``dselect``apt-get
如果您有興趣了解有關 Debian 軟體包的更多資訊,請查看Debian 新維護者指南,其中介紹了 debs 的一些內容。