Jak zainstalować plik deb, przez dpkg -i lub przez apt?

600

Mam pakiet deb do instalacji.

Mam zainstalować przez dpkg -i my.deb, czy przez apt?

Czy obaj dobrze poradzą sobie z problemem zależności oprogramowania?

Jeśli przez apt, jak mogę zainstalować z deb przez apt?

Tim
źródło
Możesz użyć, aptitudektóry usuwa również niepotrzebne pakiety.
Ramesh
2
Polecam nie używać bezpośrednio dpkg. W przypadku pojedynczego debu przejdź do gdebi, aw przypadku wielu debów przejdź do lokalnego repozytorium APT .
Pandya,
5
dlaczego ......... @ Pandya
Tim
2
@Tim, ponieważ dpkgnie rozwiązuje zależności.
Pandya
1
@Tim gdebi identyfikuje brakujące zależności, może pobrać i zainstalować (używając apt), może zainstalować i skonfigurować (używając dpkg).
Pandya

Odpowiedzi:

769

Kiedy aptinstalujesz pakiet, używa go pod maską dpkg. Kiedy instalujesz pakiet za pomocą apt, najpierw tworzy listę wszystkich zależności i pobiera go z repozytorium.

Po zakończeniu pobierania wywołuje dpkginstalację wszystkich tych plików, spełniając wszystkie zależności.

Więc jeśli masz .debplik:

  • Możesz go zainstalować za pomocą:

    sudo dpkg -i /path/to/deb/file
    sudo apt-get install -f
    
  • Możesz go zainstalować za pomocą sudo apt install ./name.deb(lub sudo apt install /path/to/package/name.deb).

    W starszych apt-getwersjach musisz najpierw przenieść plik deb do /var/cache/apt/archives/katalogu. W obu przypadkach po wykonaniu tego polecenia automatycznie pobierze swoje zależności.

  • Zainstaluj gdebii otwórz plik .deb, używając go ( kliknij prawym przyciskiem myszy -> Otwórz za pomocą ). Zainstaluje pakiet .deb ze wszystkimi jego zależnościami.

    ( Uwaga : APT utrzymuje indeks pakietów, który jest bazą danych dostępnych pakietów dostępnych w repozytorium zdefiniowanych w /etc/apt/sources.listpliku i /etc/apt/sources.list.dkatalogu. Wszystkie te metody nie spełnią zależności oprogramowania, jeśli zależności wymagane przez deb nie są obecne w indeksie pakietu .)


sudo apt-get install -fPo co używać posudo dpkg -i /path/to/deb/file (wspomniane w pierwszej metodzie)?

Od man apt-get:

 -f, --fix-broken
           Fix; attempt to correct a system with broken dependencies in place.

Kiedy dpkginstaluje pakiet, a zależność pakietu nie jest spełniona, pozostawia pakiet w stanie „nieskonfigurowanym”, a pakiet uważa się za uszkodzony.

sudo apt-get install -f polecenie próbuje naprawić ten uszkodzony pakiet, instalując brakującą zależność.

g_p
źródło
2
@Tim, apt-get służy do instalowania pakietów z repozytorium. Utrzymuje listę pakietów, a także odpowiedni adres repozytorium. Po prostu przeniesienie pliku .dev, którego nie ma na liście pakietów apt, w katalogu / var / cache / apt / archives nie będzie działać. Ponieważ za każdym razem, gdy próbujesz zainstalować ten pakiet za pomocą apt-get, szuka on swojego repozytorium, które nie jest obecne. W tym celu musisz utworzyć lokalne repozytorium, które moim zdaniem jest bezużyteczne.
g_p
1
@ g_p dziękuję! jestem trochę zdezorientowany w powyższej odpowiedzi. piszesz: „(zadziała, jeśli pakiet .deb jest obecny na liście pakietów apt)” - nie rozumiem o co tu chodzi. Jak można się upewnić, że pakiet .deb znajduje się na liście pakietów apt?
BKSpurgeon
1
@BKSpurgeon, dodałem informacje bitowe w swojej odpowiedzi. Aby dowiedzieć się, czy pakiet jest obecny w indeksie, czy nie działa apt-cache search <package name>. Możesz także użyć apt-cache policy <package name>, który dostarczy również dodatkowych informacji.
g_p
1
Czy te metody nadal wykonują sprawdzanie podpisów zwykle wykonywane przez apt? A może w ten sposób można zainstalować zmodyfikowany plik .deb?
Boann,
8
Nowoczesne apt-get może być użyte do zainstalowania pakietu po prostu za pomocą apt-get install /path/to/package/name.deb. Byłoby fajnie, gdyby autor tej odpowiedzi postanowił to zintegrować. Jeśli nie, dodam tę odpowiedź, kiedy będę miał wystarczająco dużo przedstawicieli
Sam Hartman,
91

Zainstaluj foo.debplik za pomocą dpkg -i foo.deb. Jeśli występują błędy z nierozwiązanymi zależnościami, uruchom apt-get install -fpóźniej.

ihor_dvoretskyi
źródło
Unable to locate packagePróbowałem w ten sposób i byłem zaskoczony. Użyłem jak w Windows tylko nazwy pakietu po przejściu do folderu archiwum. Powinien być ./<file name>dla Uniksa, jeśli znajduje się w bieżącym folderze lub pełnej ścieżce. To znaczy, jeśli debnie ma go w folderze PATH.
Aleksiej Martianow
60

Oto najlepszy sposób instalacji .debpliku na Ubuntu w wierszu poleceń:

sudo gdebi skype.deb

Jeśli jeszcze tego nie zrobiłeś gdebi, zainstaluj za pomocą sudo apt install gdebi-core.

Dlaczego gdebi

gdebiwyszuka wszystkie zależności .debpliku i zainstaluje je przed próbą zainstalowania .debpliku. Uważam to za znacznie lepsze niż sudo dpkg -i skype.deb && sudo apt install -f. Ten ostatni jest zbyt chętny do usunięcia zależności w niektórych sytuacjach. Na przykład, kiedy próbowałem zainstalować Skype, próbowałem usunąć 96 (!) Pakietów, w tym pakietów takich jak compizi unity! gdebidał wyraźniejszy komunikat o błędzie:

 $ sudo gdebi skype.deb
 Cannot install 'libqtgui:i386'

(Nawiasem mówiąc, oto rozwiązanie tego konkretnego problemu ).

Flimm
źródło
działało świetnie dzięki! btw, może być tak, że próba usunięcia dotyczyła tych pakietów przejściowych / tymczasowych? lub myślisz, że to naprawdę złamałoby system?
Aquarius Power,
Koleś napotkałem problem z twoim rozwiązaniem. Próbowałem zainstalować Rstudio. Automatycznie znalazła dla mnie starą wersję R. Korzystając z rozwiązania @g_p, mogłem zainstalować tylko Rstudio.
Dr_Hope
39

Możesz zainstalować lokalny pakiet .deb poprzez:

sudo apt install ./foo.deb

Należy podać lokalną ścieżkę względną lub bezwzględną ( ./jeśli w bieżącym foo.debkatalogu ), w przeciwnym razie będzie ona szukać w zdalnych repozytoriach i zakończy się niepowodzeniem.

wisbucky
źródło
2
To powinno być oznaczone jako poprawna odpowiedź.
Rael Gugelmin Cunha
@RaelGugelminCunha niepoprawna w 100%. sudo apt install libstdc ++ 6_8-20180414-1ubuntu2_amd64.deb apt: błąd podczas ładowania bibliotek współdzielonych: /usr/lib/x86_64-linux-gnu/libstdc++.so.6: nieprawidłowy nagłówek ELF
mvladk
2
@mvladk Proszę zwrócić uwagę na składnię: brakuje pliku ./przed debplikiem.
Rael Gugelmin Cunha
Absolutnie najlepsza / najprostsza odpowiedź.
gerardw
15

Wcześniej sprawdź zależności dpkg -I my.debi .apt-get installdpkg -i my.deb

Może być można skopiować my.debin /var/cache/apt/archivesi zainstalować go bezpośrednio apt-get, ale nigdy nie próbowałem. Nie działa apt-geti dpkgszukają pakietów wymienionych w archiwach.

Alex
źródło
Dzięki. masz na myśli apt-get install my.debprzez pierwsze zdanie apt-get install? Czy należy zainstalować z pliku deb? Dlaczego dpkg -i my.debpo tym potrzebujemy ?
Tim
Zawsze instalowałem lokalne .debs dpkg -i, rozumiem, że aptnie ma opcji, aby je zainstalować, oprócz katalogu, w /var/cache/...którym są pobierane (mogę się mylić)
Alex
Wygląda na to apt-get install ./my.deb, że coś zrobi, ponieważ generuje wiele rzeczy. Co to robi?
Tim
Robi za dużo :-) nie działa, patrz @Igor_Dvoretskyi odpowiedź jest po prostu idealna, zapomniałem-f
Alex
5

Najprostszą odpowiedzią byłoby użycie dpkg przez uruchomienie dpkg -i packagename.deb. Następnie możesz go odinstalować, uruchamiając dpkg -r packagename.deb.
apt-getjest instalatorem wyższego poziomu opartym na programie dpkg i jako taki możesz apt-get install packagename.deb.
Przydałoby się dodać go do katalogu apt-get archives ( /var/cache/apt/archives), aby można było odwołać się do niego jako pakietu z zależnościami, a nie jako samodzielne archiwum .deb.
Ponadto, dodając go do katalogu archiwów apt-get, masz możliwość korzystania z zależności apt-get install packagename. Umożliwi to zainstalowanie go z dowolnymi ręcznie dodanymi zależnościami zamiast samodzielnego systemu opartego na archiwum dpkg.

Ciekawy...
źródło
5

Nowoczesne apt-get może być użyte do zainstalowania pakietu po prostu za pomocą apt-get install /path/to/package/name.deb.

(należy wykonać jako edycję na najwyższą odpowiedź, ale została ona odrzucona - patrz https://unix.stackexchange.com/posts/159114/edit )

Mateusz Konieczny
źródło
To nie zadziałałoapt 1.0.9.8.4 for amd64 compiled on Dec 11 2016 09:48:19
Bruno Bronosky
-3

To jest bardzo proste, jeśli chcę zainstalować Chrome.

Zainstaluj plik Chrome jako:

dpkg -i googlechrome.deb.

Czasami istnieje ryzyko wystąpienia błędów zależności, takich jak:

dpkg: dependency problems prevent configuration of google-chrome-stable:
google-chrome-stable depends on libappindicator1; however:
Package libappindicator1 is not installed.

Aby rozwiązać powyższe problemy, musisz dodać zależności; wydać następujące polecenie:

apt-get install -f

Po wydaniu powyższego polecenia zależności zostaną dodane do twojego komputera i .debplik pakietu Debian ( ) zostanie zainstalowany.

Pavan vadrevu
źródło