Как позволить `dpkg -i` установить для меня зависимости?

Скажем, у меня есть foo-1.2.3.deb, который зависит от perl и python, однако, команда запуска:

dpkg -i ./foo-1.2.3.deb

не будет устанавливать эти зависимости. Поэтому я должен apt-get install perl python от руки.

Как заставить dpkg -i автоматически установить эти зависимости для меня?

293
задан 17.05.2020, 00:38

10 ответов

После использования dpkg выполнение следующей команды помогло мне установить необходимые зависимости:

sudo apt-get -f install

В целом ваш терминал должен выглядеть следующим образом:

$ sudo dpkg -i package_with_unsatisfied_dependencies.deb
dpkg: dependency problems prevent ... 
[additional messages]

$ sudo apt-get -f install
[apt messages]
Setting up [dependency]...
Setting up package_with_unsatisfied_dependencies...

[ 119] Обратите внимание на строку о Setting up package_with_unsatisfied_dependencies. Это исправляет (и завершает) установку package_with_unsatisfied_dependencies.deb.

0
ответ дан 17.05.2020, 00:39
  • 1
    @ysth не, не делайте dpkg -i --force; тот будет установка силы поврежденный пакет! Выполнение dpkg/without/--force сделает необходимую запись в базе данных пакета так, чтобы apt-get -f install сделал правильную вещь. – Vladimir Kornea 17.05.2020, 00:39
  • 2
    @Lotharyx: Я can' t пробуют его прямо сейчас, но я didn' t думают dpkg без силы (который перестал работать из-за недостающих зависимостей), сделал бы запись в базе данных пакета – David Russell 17.05.2020, 00:39
  • 3
    Следующие работы над Ubuntu 14.04: sudo dpkg -i package.deb; sudo apt-get -f install; sudo dpkg -i package.deb. Первое dpkg -i выполненные зависимости от меток, apt-get -f install установки потребовали зависимостей и второго dpkg -i успешно установки пакет. Обратите внимание, что apt-get install -f полностью различная команда. – Matthew Clark 17.05.2020, 00:40
  • 4
    После выполнения sudo apt-get -f install мой пакет и it' s зависимости были все установлены. Выполнение sudo dpkg -i my_package.deb является ненужным и просто установит пакет снова. – cdmckay 17.05.2020, 00:40
  • 5
    Я должен работать sudo dpkg -i mypackage.deb снова? – jolt 17.05.2020, 00:41

Вы можете установить gdebi-core, который является версией программы установки пакета GDebi для командной строки с 10.04 и более ранних версий. В более новых версиях Ubuntu для установки дэбов используется Центр программного обеспечения, который не имеет эквивалента командной строки.

Чтобы установить пакет deb с помощью gdebi, просто запустите:

sudo gdebi my_package_1.0.deb
0
ответ дан 17.05.2020, 00:39

начиная с apt 1.1 (доступно в Xenial (16.04), stretch) apt install также позволяет локальные файлы:

sudo apt install ./foo-1.2.3.deb

Так проще и чище.

См. объявление о выпуске

.
0
ответ дан 17.05.2020, 00:39
  • 1
    Команда didn' t работа для меня, но apt ./install foo-1.2.3.deb работал. – Nikhil Dinesh 17.05.2020, 00:40
  • 2
    @BillyS извините, что услышали, что это, didn’t работают на Вас, но без версии дистрибутива Вы используете и какие ошибки Вы получили это, не является действенным вообще. – Community 17.05.2020, 00:41
  • 3
    It' s во время это доступно – Andrew 17.05.2020, 00:41
  • 4
    Это решение не работало. Все, что произошло, было списком ошибок. – Biff MaGriff 17.05.2020, 00:41
  • 5
    Исправленный команда, комментарии выше упомянули предыдущую версию ответа, который пропустил необходимое ./ или путь – Matthew Clark 17.05.2020, 00:42

В качестве альтернативы gdebi-gtk вы можете использовать Ubuntu Software Center.

Дважды щелкните пакет, и кнопка установки должна быть доступна.

0
ответ дан 17.05.2020, 00:40

У dpkg нет поддержки зависимостей. Есть способ обойти это, но это потребует от вас создания локальной базы данных (и, таким образом, вы уже будете знать зависимости), и она считается устаревшей (...).

Это должна быть командная строка? (установка на сервер?) Если так, взгляните также на apt-get -f, но будьте осторожны: решение зависимостей после установки может привести к поломке системы.

gdebi (GUI-интерфейс) раньше был в состоянии сделать это, но был заменен на USC.

Как вы скачали .deb. Некоторые из новых возможностей 11.04 - это обработка .deb, загруженного с веб-сайта: он становится открытым в USC, поэтому установщик разрешает зависимости.

РЕДАКТИРОВАТЬ на основе комментария Эндрю: sudo gdebi foo-1.2.3.deb сделали бы трюк !!

0
ответ дан 17.05.2020, 00:41
  • 1
    gdebi может все еще использоваться для этого. Центр программного обеспечения является теперь просто приложением по умолчанию. Кроме того, как Chen Xiao-Long отмечает, gdebi может также использоваться на командной строке. – Luis Cuellar 17.05.2020, 00:41
  • 2
    охладитесь! тогда вопрос имеет ответ, потому что gdebi может использоваться на командной строке также, это кажется. – Mohammed Irfan Mayan 17.05.2020, 00:42
  • 3
    Это должно быть принятым ответом. – Sebastien Lorber 17.05.2020, 00:42

Гдеби

gdebi устанавливает пакет deb и его зависимости. Чтобы использовать его, запустите:

sudo gdebi package.deb

В более новых версиях Ubuntu он по умолчанию не установлен, поэтому вам нужно будет установить его из репозиториев.

См. man gdebi для полного списка опций.

gdebi - это командная строка, эквивалентная графическому инструменту с тем же именем, который по умолчанию включался в Ubuntu. Команда для графического инструмента - gdebi-gtk и имеет аналогичную функциональность:

gdebi-gtk

0
ответ дан 17.05.2020, 00:41
  • 1
    шоу привычки gdebi-gtk потребовало deps (версия, которую я имею здесь, по крайней мере, и это похоже на ошибку), но командная строка будет! Если у нас есть другая машина с пакетами, мы можем использовать dpkg-repack на ней на основе такого списка deps:) – B-Dog 17.05.2020, 00:42

Я только что столкнулся с этой проблемой. При вызове apt-get install -f не будет установлено рекомендуемых зависимостей! Единственный обходной путь для этого - создать локальный репозиторий и добавить его в /etc/apt/sources.list, т.е. :

apt-ftparchive packages . > Packages && gzip < Packages > Packages.gz
sudo echo "deb file://$PWD /" >> /etc/apt/sources.list
sudo apt-get update
.
0
ответ дан 17.05.2020, 00:42

запуск

sudo apt-get install -f

после установки пакета с помощью dpkg может разрешить нарушенные зависимости (по крайней мере, man apt-get скажет так ...). Я буду обновлять, когда я проверю это.

0
ответ дан 17.05.2020, 00:43
  • 1
    apt-get -f install работы, но apt-get install -f не то же. – Benjamin 17.05.2020, 00:43
  • 2
    Я должен работать sudo dpkg -i mypackage.deb снова? – Stanislav Parkhomenko 17.05.2020, 00:44

На самом деле ответ таков: dpkg менеджер пакетов не может устанавливать зависимости «из коробки». Вы сделали снимок man dpkg и выяснили это. Поэтому вам нужно использовать такие инструменты, как apt, apt-get, aptitude, ..., основанные на dpkg.

Я бы сказал, что точно такой же случай для менеджера пакетов rpm в другом полушарии Linux. rmp не предназначен для установки на основе зависимостей. Он может устанавливать отдельные пакеты, и для установки зависимостей, которые вы используете yum, urpmi, up2date, все они основаны на RPM.

Как уже отмечалось, существует небольшая опасность установки пакетов непосредственно с dpkg, потому что позднее разрешение проблем может привести к поломке системы, как обрисовал @Rinzwind.

0
ответ дан 17.05.2020, 00:44

Вы можете создать файл dpkg-dep-inst со следующим содержанием.

#!/bin/bash

DEBIAN_FILE1=$1
dpkg -i $DEBIAN_FILE1 || apt-get --fix-broken install

Я полагаю, вы создали файл в своей домашней папке. Сделайте его исполняемым с помощью chmod +x dpkg-dep-inst и переместите его в /usr/local/bin с помощью sudo cp dpkg-dep-inst /usr/local/bin.

Теперь вы можете установить пакет debian с зависимостями автоматически с помощью:

sudo dpkg-dep-inst foo-1.2.3.deb
0
ответ дан 17.05.2020, 00:44
  • 1
    Используйте apt-get --yes --fix-broken install и сделайте фиксацию автоматической. – CodeNepal 17.05.2020, 00:44
  • 2
    @ysth нет, не в целом. – CodeNepal 17.05.2020, 00:45