Как бинарные установочные файлы обрабатывают зависимости?

Как бинарные установочные файлы обрабатывают зависимости?

В репозитории 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эти отсутствующие пакеты.

Связанный контент