在 Ubuntu 存储库中,当应用程序或库依赖于其他应用程序或库时,通过 apt-get 安装将首先自动下载并安装依赖项。这种方式是否从二进制安装文件安装,例如.deb
?
当通过构建源代码来安装应用程序或库时,./configure
会告诉我缺少哪些依赖项,我将首先手动安装它们。
当通过运行从 Ubuntu ppa 等网站下载的文件来安装应用程序时.deb
,我不记得必须处理依赖项。.deb
文件的内容中是否包含依赖项,或者它是否自动下载并安装依赖项?
答案1
当您通过 和 从存储库获取包列表时apt-get update
,您/var/lib/apt
将/var/lib/dpkg
在表单中找到所有包的信息
Package: apt
Priority: important
Section: admin
Installed-Size: 3462
Maintainer: APT Development Team <[email protected]>
Architecture: i386
Version: 1.3.1
Replaces: apt-utils (<< 1.3~exp2~)
Depends: adduser, gpgv | gpgv2 | gpgv1, debian-archive-keyring, init-system-helpers (>= 1.18~), libapt-pkg5.0 (>= 1.3~rc2), libc6 (>= 2.15), libgcc1 (>= 1:4.2), libstdc++6 (>= 5.2)
Recommends: gnupg | gnupg2 | gnupg1
Suggests: apt-doc, aptitude | synaptic | wajig, dpkg-dev (>= 1.17.2), powermgmt-base, python-apt
Breaks: apt-utils (<< 1.3~exp2~)
Filename: pool/main/a/apt/apt_1.3.1_i386.deb
Size: 1208426
MD5sum: 9d35afa0f8220cabf0c837f8073569c2
Description: commandline package manager
Description-md5: 9fb97a88cb7383934ef963352b53b4a7
Tag: admin::package-management, devel::lang:ruby, hardware::storage,
hardware::storage:cd, implemented-in::c++, implemented-in::perl,
implemented-in::ruby, interface::commandline, network::client,
protocol::ftp, protocol::http, protocol::ipv6, role::program,
scope::application, scope::utility, sound::player, suite::debian,
use::downloading, use::organizing, use::searching, works-with::audio,
works-with::software:package, works-with::text
SHA256: 9111e4e9ffe3f3dd3c62c4e67485d3495c15bf5d24f4f1c532db4430b389eb19
debian/control
此信息也作为每个.deb
包中的文件存在。如您所见,它包含一行Depends: ...
列出所有依赖项。根据这些依赖关系apt-get
递归计算需要安装的所有包。
创建包时,包维护者会添加此信息(尽管有一些工具可以帮助完成此操作),类似于您自己编译包时手动添加包的方式。
答案2
.deb
首先打包该文件的人遵循的过程类似于您描述的手动安装过程。当他们这样做时(如果他们正确地完成了工作),他们还在源包的debian/control
文件中添加了有关所需依赖项的信息。
apt-get
和其他dpkg
前端确实只对.deb
包和关联的包数据库以及有关这些包的元信息进行操作。有时您想创建一个.deb
本地生成的软件包,以便整个链能够正常工作,并且您可以获得自动依赖项安装等的好处。
答案3
当您尝试安装(使用dpkg -i
)某些*.deb
缺少(不满足)依赖项的包时,您会收到一条错误消息,指出缺少的包。然后您可以apt-get install
或aptitude install
这些丢失的软件包。