gdebi vs dpkg: как gdebi автоматически получает недостающие зависимости? Могу ли я использовать gdebi для всех других установок пакетов.deb?
Недавно мне довелось переустановить свою 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
с помощью команды gdebi sudo 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 - версия программного обеспечения и т. д.?
Пожалуйста, объясните в терминах непрофессионала, чтобы я мог получить это.
3 ответа
Фактически 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.
Пример сценария:
Предположим, пакет с именем mother-package имеет самую высокую версию 2.0
в стандартных репозиториях Ubuntu, и этот mother-пакет зависит от пакета с именем child-package версии 2. Также предположим, что некоторые PPA предоставляют mother-package версии 3.0
который требует на child-package
из 3.0
оба они доступны через этот репозиторий PPA.
Проблема в том, что если вы сейчас скачаете mother-package-3.0.deb со страницы репозитория и попытаетесь установить его с gdebi
, ты (или gdebi
) провал.
Потому что, проверяя файл mother-package-3.0.deb, gdebi
знал, что эта мама-пакет нуждается в дочернем пакете версии 3.0
или выше, но он знает только местоположение версии 2.0
, Не знает, где взять версию 3.0
детского пакета от. Это ожидается потому, что вы не сообщили системе, где вы получили этот последний пакет. Другими словами, вы не настроили список репозитория для включения этого PPA.
Таким образом, очевидный ответ на этот вопрос зависит. Если в уже настроенных репозиториях можно найти необходимые зависимости, установка будет успешной. Но если нет, то он не сможет установить этот более высокий версионный пакет. Вот почему вам все еще нужны PPA, и это самый простой способ без ручного выполнения всех этих действий.
Вторая часть второго вопроса не имела для меня смысла.
У меня была такая же проблема с несколькими приложениями, среди которых был Skype, они зависят от внешних пакетов или библиотечных файлов, которые нужно устанавливать вручную.
Чтобы исправить проблему, я использовал:
sudo dpkg -i skype.deb
И затем, после того, как мне предложили ввести внешние библиотеки, как у вас в выводе, я набрал:
sudo apt-get install -f
Это загрузило необходимые пакеты и установило скайп все самостоятельно.
В каждом пакете.deb есть список зависимостей (с совместимым номером версии).
Я не читатель Python, но исходный код, кажется, звонит apt
чтобы получить этот список. Очевидно, что он должен быть рекурсивно спущен, чтобы найти зависимости зависимостей, но apt
очевидно, может сделать это также.
После того, как все зависимости разработаны и размещены в правильном порядке (некоторые зависимости должны быть установлены, прежде чем другие зависимости могут быть установлены), apt
просто попросить установить зависимости. Затем устанавливается пакет, который был задан в качестве аргумента Gdebi.
Зависимости и целевой пакет устанавливаются в две операции по двум причинам. Во-первых, формат apt-вызова для установки локального.deb отличается от apt-вызова для установки зависимостей из репозитория. Во-вторых, разделение вызовов гарантирует, что все зависимости установлены перед целевым пакетом.