
В репозитории Ubuntu, когда приложение или библиотека зависят от некоторых других, установка через apt-get автоматически загрузит и установит зависимости в первую очередь. Устанавливает ли этот способ из бинарных установочных файлов, таких как .deb
?
При установке приложения или библиотеки путем сборки их исходного кода ./configure
будет указано, какие зависимости отсутствуют, и я сначала вручную установлю их.
При установке приложения из запущенного .deb
файла, загруженного с таких сайтов, как Ubuntu ppa, я не помню, чтобы мне приходилось обрабатывать зависимости. .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
эти отсутствующие пакеты.