gdebi vs dpkg: как gdebi автоматически получает недостающие зависимости? Могу ли я использовать gdebi для всех остальных установок пакетов .deb?

15

Недавно мне довелось переустановить Ubuntu в Lubuntu 15.04. Так что я искал установку Skype и получил это хорошее руководство .

Это было действительно круто. Он скачал официальный пакет Skype Deb здесь

Поскольку я еще не gdebiустановил, я установил с помощьюsudo su -c apt-get install gdebi

Затем устанавливается skype-ubuntu-precise_4.3.0.37-1_i386.debс помощью команды gdebisudo su -c gdebi skype-ubuntu*4*.deb

Ничего себе, gdebi сделал все для меня, что без лишних хлопот без традиционного добавления ссылок на Apt PPA, которое, вероятно, также нарушит мои обновления системы / установки программного обеспечения ..

Но если я попытаюсь установить его с помощью dpkg -i

dpkg -i skype-ubuntu-precise_4.3.0.37-1_i386.deb
Selecting previously unselected package skype.
(Reading database ... 86449 files and directories currently installed.)
Preparing to unpack skype-ubuntu-precise_4.3.0.37-1_i386.deb ...
Unpacking skype (4.3.0.37-1) ...
dpkg: dependency problems prevent configuration of skype:
 skype depends on libc6 (>= 2.3.6-6~).
 skype depends on libc6 (>= 2.7).
 skype depends on libgcc1 (>= 1:4.1.1).
 skype depends on libqt4-dbus (>= 4:4.5.3).
 skype depends on libqt4-network (>= 4:4.8.0).
 skype depends on libqt4-xml (>= 4:4.5.3).
 skype depends on libqtcore4 (>= 4:4.7.0~beta1).
 skype depends on libqtgui4 (>= 4:4.8.0).
 skype depends on libqtwebkit4 (>= 2.2~2011week36).
 skype depends on libstdc++6 (>= 4.2.1).
 skype depends on libx11-6.
 skype depends on libxext6.
 skype depends on libxss1.
 skype depends on libxv1.
 skype depends on libssl1.0.0.
 skype depends on libpulse0.
 skype depends on libasound2-plugins.

dpkg: error processing package skype (--install):
 dependency problems - leaving unconfigured
Processing triggers for hicolor-icon-theme (0.13-1) ...
Processing triggers for mime-support (3.55ubuntu1.1) ...
Processing triggers for desktop-file-utils (0.22-1ubuntu2) ...
Processing triggers for dbus (1.8.8-1ubuntu2.1) ...
Errors were encountered while processing:
 skype

Так много проблем с зависимостями. О, я просто погуглил GDebi и в Википедии есть

GDebi - это инструмент APT, который можно использовать в командной строке и в графическом интерфейсе. [44] GDebi может установить локальный файл .deb через командную строку, например, команду dpkg, но с доступом к репозиториям для разрешения зависимостей.

Мое удивление

(1) Как gdebi устанавливает пакеты .deb с зависимостями без использования ссылок Apt PPA, добавленных вручную в файлы конфигурации?

(2) Могу ли я использовать ту же команду gdebi ( sudo su -c gdebi my.deb) для установки всех других пакетов .deb без добавления Apt PPA, или мне нужно изменить формат следующим образом: sudo su -c my*n*.debгде n - версия программного обеспечения и т. Д.?

Пожалуйста, объясните в терминах непрофессионала, чтобы я мог получить это.

user879
источник

Ответы:

10

На самом деле gdebiэто всего лишь интерфейс к dpkgдополнительным функциям, который может проверять наличие пакетов зависимостей в репозиториях и устанавливать их за одну операцию, при этом dpkg -iтребуются две операции вручную (позже apt-get -f install).

Вопрос 1:

1) Как это сделать? установить пакеты .deb с зависимостями без использования ссылок Apt PPA, добавленных вручную в файлы конфигурации?

Будучи dpkgинтерфейсом, он может использовать все функциональные возможности dpkg. Поскольку каждый .debфайл пакета содержит (при условии, что они не повреждены) метаданные об этом файле deb (например, имя пакета, сопровождающий, зависимости и т. Д.), Он может легко проверить зависимость этого файла.

Например, вы можете проверить метаданные файла .deb, используя dpkg --info package-name.deb

Затем он использует эту информацию для построения карты зависимостей и пометки локально доступных файлов .deb как уже загруженных и загрузки других .debфайлов из Интернета.

Обратите внимание, что необходимые дополнительные пакеты должны быть доступны (с правильной версией) как минимум в одном из репозиториев, которые настроены в системе.

Затем это продолжается как обычная установка. Разница в том, что он не загружает повторно основной файл .deb

Вопрос 2:

(2) Могу ли я использовать ту же команду gdebi ( sudo su -c gdebi my.deb) для установки всех других пакетов deb без добавления PPA? или мне нужно изменить формат, sudo su -c myn.debгде n - версия программного обеспечения и т. д.?

PPA существует по причине. Основная причина в том, что они предоставляют последние версии пакетов. И этот пакет с более высокой версией обычно зависит также от более высоких версий подпакетов, которые обычно обслуживаются из PPA, а не из стандартного репозитория Ubuntu.

Пример сценария:

Предположим, пакет с именем матери пакет имеет самую высокую версию 2.0в репозиториях Ubuntu Standard, и эта мать-пакет зависит от пакета с именем ребенка-пакет версии 2. Предположим также, некоторые из PPA обеспечивает мать-пакет версии , 3.0которая требует от child-packageиз 3.0оба они доступны через этот репозиторий PPA.

Проблема в том, что если вы сейчас загрузите mother-package-3.0.deb со страницы репозитория и попытаетесь установить его с gdebi, вы (или gdebi) потерпите неудачу.

Потому что, проверяя файл mother-package-3.0.deb , мы gdebiзнали, что для этого mother-пакета требуется дочерний пакет версии 3.0или выше, но он знает только местоположение версии 2.0. Он не знает , где для извлечения версии 3.0из детского-пакета из. Это ожидается потому, что вы не сообщили системе, где вы получили этот последний пакет . Другими словами, вы не настроили список репозитория для включения этого PPA.

Таким образом, Очевидный ответ на этот вопрос: Это зависит . Если в уже настроенных репозиториях можно найти необходимые зависимости, установка будет успешной . Но если нет, то он не сможет установить этот более высокий версионный пакет. Вот почему вам все еще нужны PPA, и это самый простой способ без ручного выполнения всех этих действий.

Вторая часть второго вопроса не имела для меня смысла .

Анвар
источник
5

У меня была такая же проблема с несколькими приложениями, среди которых был Skype, они зависят от внешних пакетов или библиотечных файлов, которые необходимо установить вручную.

Чтобы исправить проблему, я использовал:

sudo dpkg -i skype.deb

И затем, после того, как мне предложили ввести внешние библиотеки, как у вас в выводе, я набрал:

sudo apt-get install -f

Это загрузило необходимые пакеты и установило скайп все отдельно.

Моитил Бисвас
источник
2

В каждом пакете .deb есть список зависимостей (с совместимым номером версии).

Я не читатель Python, но исходный код, кажется, требует, aptчтобы получить этот список. Очевидно, что он должен быть рекурсивно спущен, чтобы найти зависимости зависимостей, но, aptочевидно, может сделать это также.

После того, как все зависимости разработаны и размещены в правильном порядке (некоторые зависимости должны быть установлены, прежде чем другие зависимости могут быть установлены), aptпросто запрашивается установка зависимостей. Затем устанавливается пакет, который был задан в качестве аргумента Gdebi.

Зависимости и целевой пакет устанавливаются в две операции по двум причинам. Во-первых, формат apt-вызова для установки локального .deb отличается от apt-вызова для установки зависимостей из репозитория. Во-вторых, разделение вызовов гарантирует, что все зависимости установлены перед целевым пакетом.

Джеймс
источник