Jak pozwolić, aby `dpkg -i` instalował dla mnie zależności?

324

Powiedzmy, że mam, foo-1.2.3.debco zależy od, perla pythonjednak uruchomienie polecenia:

dpkg -i ./foo-1.2.3.deb

nie zainstaluje tych zależności. Więc muszę apt-get install perl pythonręcznie.

Jak dpkg -iautomatycznie zainstalować te zależności dla mnie?

Xiè Jìléi
źródło
5
@ pd12: Brawo dla okólników! :-D
David Foerster
heh, postanowiłem połączyć oba i zobaczyć, który wybierze mod.
pd12

Odpowiedzi:

416

Po użyciu dpkguruchomienie następującego polecenia pomogło mi zainstalować wymagane zależności:

sudo apt-get -f install

Podsumowując, twój terminal powinien wyglądać tak:

$ 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...

Zwróć uwagę na linię Setting up package_with_unsatisfied_dependencies. To naprawia (i kończy) instalację package_with_unsatisfied_dependencies.deb.

Arindom
źródło
8
Czy powinienem sudo dpkg -i mypackage.debznów biegać ?
Muhammad Gelbana
23
Po uruchomieniu sudo apt-get -f installmojego pakietu i jego zależności zostały zainstalowane. Uruchomienie sudo dpkg -i my_package.debjest niepotrzebne i po prostu ponownie zainstaluje pakiet.
Gus E
5
Następujące prace nad Ubuntu 14.04: sudo dpkg -i package.deb; sudo apt-get -f install; sudo dpkg -i package.deb. Pierwsze dpkg -iuruchomienie oznacza zależności, apt-get -f installinstaluje wymagane zależności, a drugie dpkg -ipomyślnie instaluje pakiet. Zauważ, że apt-get install -fjest to zupełnie inne polecenie.
Mikko Rantalainen 21.04.16
1
@ysth nie, nie rób dpkg -i --force; wymusi zainstalowanie uszkodzonego pakietu! Uruchomienie dpkg/ bez / --forcespowoduje wprowadzenie koniecznego wpisu do bazy danych pakietu, apt-get -f installaby zrobić to dobrze.
Brian A. Henning,
@Lotharyx: Nie mogę spróbować go teraz, ale ja nie sądzę dpkg bez użycia siły (który nie działa z powodu brakujących zależnościach) by dokonać wpisu w bazie danych pakiet
ysth
111

Możesz zainstalować gdebi-core, czyli wersję instalatora pakietu GDebi z linii poleceń od 10.04 i wcześniejszych. W nowszych wersjach Ubuntu Centrum Oprogramowania służy do instalowania debów, które nie mają odpowiednika w linii poleceń.

Aby zainstalować pakiet deb za pomocą gdebi, po prostu uruchom:

sudo gdebi my_package_1.0.deb
Andrew Gunnerson
źródło
64

począwszy od apt 1.1 (dostępny w Xenial (16.04), stretch) apt installpozwala także na lokalne pliki:

sudo apt install ./foo-1.2.3.deb

O wiele prostsze i czystsze.

Zobacz ogłoszenie o wydaniu

Skorupa
źródło
4
Najwyższy czas, aby było to możliwe
Mike
To rozwiązanie nie działa. Wszystko, co się wydarzyło, to lista błędów.
Billy S
@BillyS Przykro nam, że to nie działało, ale bez używanej wersji dystrybucyjnej i ewentualnych błędów nie można w ogóle wykonać działania.
tekstowe
Polecenie nie działało dla mnie, ale apt ./install foo-1.2.3.debdziałało.
Cenk Alti
1
Poprawiono polecenie, powyższe komentarze odnosiły się do poprzedniej wersji odpowiedzi, w której brakowało niezbędnej ./ścieżki lub ścieżki
Zanna
38

Gdebi

gdebiinstaluje pakiet deb i jego zależności. Aby go użyć, uruchom:

sudo gdebi package.deb

W nowszych wersjach Ubuntu nie jest to instalowane domyślnie, więc musisz zainstalować go z repozytoriów.

Zobacz man gdebipełną listę opcji.

gdebijest wierszem poleceń równoważnym narzędziu graficznemu o tej samej nazwie, które było domyślnie dołączane do Ubuntu. Polecenie narzędzia graficznego ma gdebi-gtki ma podobną funkcjonalność:

gdebi-gtk

dv3500ea
źródło
gdebi-gtk nie pokaże wymaganych deps (przynajmniej wersja, którą tu mam i wygląda jak błąd), ale wiersz poleceń to zrobi! Jeśli mamy inną maszynę z pakietami, możemy dpkg-repackz niej korzystać na podstawie takiej listy deps :)
Aquarius Power
21

bieganie

sudo apt-get install -f

po zainstalowaniu pakietu z dpkg może rozwiązać zepsute zależności (przynajmniej tak mówi apt-get ...). Zła aktualizacja, kiedy to sprawdzę.

Denwerko
źródło
Czy powinienem sudo dpkg -i mypackage.debznów biegać ?
Muhammad Gelbana
3
apt-get -f installdziała, ale apt-get install -fto nie to samo.
200_sukces
9

dpkg nie obsługuje zależności. Jest na to sposób, ale wymagałoby to utworzenia lokalnej bazy danych (a tym samym znajomości zależności) i uznano by ją za przestarzałą (...).

Czy to musi być wiersz poleceń? (instalacja serwera?) Jeśli tak, to spójrz, apt-get -fale bądź ostrożny: rozwiązywanie zależności po instalacji może doprowadzić do uszkodzenia systemu.

gdebi (interfejs GUI) był w stanie to zrobić, ale został zastąpiony przez USC.

Jak pobrałeś .deb. Niektóre z nowych funkcji 11.04 to obsługa pliku .deb pobranego ze strony internetowej: w USC jest on uruchamiany, więc instalator rozwiąże zależności.

EDYCJA na podstawie komentarza Andrzeja: sudo gdebi foo-1.2.3.deb zrobiłaby to!

Rinzwind
źródło
gdebi może być nadal używany do tego. Centrum oprogramowania jest teraz tylko domyślną aplikacją. Ponadto, jak zauważa Chen Xiao-Long, gdebi może być również używany w wierszu poleceń.
andrewsomething
chłodny! to pytanie ma odpowiedź, ponieważ gdebi może być również użyte w linii poleceń.
Rinzwind
To powinna być zaakceptowana odpowiedź.
prosti
3

Jako alternatywę gdebi-gtkmożesz użyć Centrum oprogramowania Ubuntu.

Kliknij dwukrotnie pakiet, a przycisk instalacji powinien być dostępny.

Henrique
źródło
3

Możesz utworzyć plik dpkg-dep-insto następującej treści.

#!/bin/bash

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

Zakładam, że utworzyłeś plik w swoim folderze domowym. Zrób to z wykonywalny chmod +x dpkg-dep-insti przenieść go do /usr/local/binz sudo cp dpkg-dep-inst /usr/local/bin.

Teraz możesz automatycznie zainstalować pakiet debian z zależnościami za pomocą:

sudo dpkg-dep-inst foo-1.2.3.deb
BuZZ-dEE
źródło
1
Użyj apt-get --yes --fix-broken installi ustaw automatyczne mocowanie.
Lucas
@ysth Nie, nie ogólnie.
BuZZ-dEE,
1

Właśnie natrafiłem na ten problem. Wywołanie nieapt-get install -f spowoduje jednak zainstalowania zalecanych zależności! Jedynym obejściem tego byłoby utworzenie lokalnego repozytorium i dodanie /etc/apt/sources.list, tj .:

apt-ftparchive packages . > Packages && gzip < Packages > Packages.gz
sudo echo "deb file://$PWD /" >> /etc/apt/sources.list
sudo apt-get update
Alex Kläser
źródło
0

Właściwie odpowiedź jest taka, że dpkgmenedżer pakietów nie może zainstalować zależności po wyjęciu z pudełka. Cam się man dpkgi to odkryłeś. Więc trzeba używać narzędzi, takich jak apt, apt-get, aptitude, ..., na podstawie dpkg.

Powiedziałbym, że to samo dotyczy rpmmenedżera pakietów na drugiej półkuli Linuksa. rmpnie jest przeznaczony do instalacji opartych na zależnościach. Można go zainstalować pojedyncze pakiety, a dla instalacji zależności użyć yum, urpmi, up2datesą one oparte na RPM.

Jak wspomniano, istnieje niewielkie niebezpieczeństwo instalowania pakietów dpkgbezpośrednio, ponieważ późniejsze rozwiązanie problemu zależności może skończyć się uszkodzeniem systemu, jak wskazano w @Rinzwind.

prosti
źródło