Як дозволити `dpkg -i` встановити залежності для мене?


324

Скажіть, у мене від цього foo-1.2.3.debзалежить perlі python, однак, працює команда:

dpkg -i ./foo-1.2.3.deb

не встановить ці залежності. Тож треба apt-get install perl pythonвручну.

Як змусити dpkg -iвстановити ці залежності для мене автоматично?



5
@ pd12: Ура за кругові посилання! :-D
Девід Фоерстер

хе, я вирішив зв’язати обидва і подивитись, який із модників обрати.
pd12

Відповіді:


416

Після використання 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...

Зауважте рядок про Setting up package_with_unsatisfied_dependencies. Це виправляє (і завершує) встановлення package_with_unsatisfied_dependencies.deb.


8
Чи варто бігати sudo dpkg -i mypackage.debзнову?
Мухаммед Гелбана

23
Після запуску sudo apt-get -f installмого пакету і його залежності були встановлені всі. Запуск sudo dpkg -i my_package.debзайвий і просто встановити пакет ще раз.
Gus E

5
Після роботи на 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це зовсім інша команда.
Мікко Ранталайнен

1
@ysth ні, не робіть dpkg -i --force; це змусить встановити зламаний пакет! Запуск dpkg/ без / --forceзробить необхідний запис у базі даних пакетів, щоб apt-get -f installзробити все правильно.
Брайан А. Геннінг

@Lotharyx: Я зараз не можу спробувати, але я не думав, що dpkg без сили (що виходить з ладу через відсутність залежності) зробить запис у базі даних пакетів
ysth

111

Ви можете встановити gdebi-core, що є версією командного рядка інсталятора пакета GDebi з 10.04 і раніше. У нових версіях Ubuntu Програмний центр використовується для встановлення налагоджень, у яких немає еквівалента командного рядка.

Щоб встановити пакет дебюту за допомогою gdebi, просто запустіть:

sudo gdebi my_package_1.0.deb

64

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

sudo apt install ./foo-1.2.3.deb

Так набагато простіше і чистіше.

Дивіться повідомлення про реліз


4
Пора ця пора доступна
Майк

Це рішення не спрацювало. Все, що сталося, - це список помилок.
Біллі S

@BillyS вибачте, що це не працювало для вас, але без розширеної версії, яку ви використовуєте, і які помилки ви отримали, це взагалі не підлягає дії.
texthell

Команда не працювала для мене, але apt ./install foo-1.2.3.debпрацювала.
Cenk Alti

1
Виправлено команду, коментарі вище згадували попередню версію відповіді, яка пропустила потрібне ./або шлях
Zanna

38

Гдебі

gdebiвстановлює пакет deb та його залежності. Щоб використовувати його, виконайте:

sudo gdebi package.deb

У нових версіях Ubuntu це не встановлено за замовчуванням, тому вам потрібно буде встановити його з сховищ.

Дивіться man gdebiповний список варіантів.

gdebiце командний рядок, еквівалентний графічному інструменту з тим же ім'ям, який раніше за замовчуванням включався в Ubuntu. Команда для графічного інструменту є gdebi-gtkі має аналогічну функціональність:

gdebi-gtk


гдеbi-gtk не буде показувати потрібні deps (версія у мене тут принаймні, і це виглядає як помилка), але командний рядок буде! Якщо у нас є інша машина з пакетами, ми можемо використовувати dpkg-repackїї на основі такого списку депсів :)
Водолій Сила

21

біг

sudo apt-get install -f

після встановлення пакету з dpkg можливо вирішити непрацездатні строки (принаймні, людина влучно скажемо так ...). Я буду оновити, коли я перевірю це.


Чи варто бігати sudo dpkg -i mypackage.debзнову?
Мухаммед Гельбана

3
apt-get -f installпрацює, але apt-get install -fне те саме.
200_успіх

9

dpkg не підтримує залежність. Існує спосіб її подолання, але це вимагатиме від вас створити локальну базу даних (і, таким чином, ви б уже знали залежності), і це вважається застарілим (...).

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

гдеbi (gui frontend) раніше міг це робити, але його замінили USC.

Як ви завантажили .deb. Деякі з нових функцій 11.04 - це обробка файлу .deb, завантаженого з веб-сайту: він відкривається в USC, тож залежність буде вирішена установщиком.

EDIT на основі коментаря andrew: sudo gdebi foo-1.2.3.deb зробив би трюк !!


гдеби досі можна використовувати для цього. Програмний центр зараз лише додаток за замовчуванням. Крім того, як зазначає Чен Сяо-Лонг, gdebi також може використовуватися в командному рядку.
andrewsomething

круто! то на запитання є відповідь, тому що gdebi може бути використаний і в командному рядку.
Rinzwind

Це має бути прийнятою відповіддю.
prosti

3

Як альтернативу gdebi-gtkможна використовувати програмний центр Ubuntu.

Двічі клацніть на упаковці, і кнопка встановлення повинна бути доступною.


3

Ви можете створити файл 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

1
Використовуйте apt-get --yes --fix-broken installта зробіть фіксацію автоматичною.
Лукас

@ysth Ні, не взагалі.
BuZZ-dEE

1

Я просто зіткнувся з цією проблемою. Виклик 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

Насправді відповідь полягає в тому, що dpkgменеджер пакунків не може встановити залежності поза коробкою. Ви кулачок man dpkgі дізналися це. Таким чином , ви повинні використовувати такі інструменти , як apt, apt-get, aptitude, ..., на основі dpkg.

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

Як зазначалося, існує невелика небезпека при встановленні пакетів dpkgбезпосередньо, оскільки пізніше розв’язання роздільної здатності може залежати від зламаної системи, як зазначено @Rinzwind.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.