gdebi vs dpkg: W jaki sposób gdebi automatycznie brakuje zależności? Czy mogę używać gdebi do wszystkich innych instalacji pakietów .deb?

15

Ostatnio zdarzyło mi się ponownie instalować moje Ubuntu w Lubuntu 15.04. Więc szukałem instalacji Skype'a i dostałem ten fajny samouczek .

To było naprawdę fajnie. Pobrał stąd oficjalny pakiet skype deb

Ponieważ jeszcze nie gdebizainstalowałem, zainstalowałem za pomocąsudo su -c apt-get install gdebi

Następnie zainstalowany skype-ubuntu-precise_4.3.0.37-1_i386.debprzy użyciu polecenia gdebisudo su -c gdebi skype-ubuntu*4*.deb

Wow, gdebi zrobił dla mnie wszystko, co było bezproblemowe bez użycia tradycyjnego ręcznego dodawania linków Apt PPA, co prawdopodobnie zepsuje również moje aktualizacje systemu / instalacje oprogramowania.

Ale jeśli spróbuję zainstalować go za pomocą 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

Tyle problemów z zależnościami. Och, właśnie przejrzałem GDebi i wikipedię

GDebi to narzędzie APT, które może być używane w wierszu poleceń i GUI. [44] GDebi może zainstalować lokalny plik .deb za pomocą wiersza polecenia, takiego jak polecenie dpkg, ale z dostępem do repozytoriów w celu rozwiązania zależności

Zastanawiam się

(1) W jaki sposób gdebi instaluje pakiety .deb z Zależnościami bez użycia łączy Apt PPA dodanych ręcznie w plikach konfiguracyjnych?

(2) Czy mogę użyć tej samej komendy gdebi ( sudo su -c gdebi my.deb), aby zainstalować wszystkie inne pakiety .deb bez dodawania Apt PPA, czy muszę zmienić format w taki sposób: sudo su -c my*n*.debgdzie n to wersja oprogramowania itp.?

Proszę wyjaśnij to w sposób laicki, abym mógł go zdobyć.

użytkownik879
źródło

Odpowiedzi:

10

W rzeczywistości gdebijest to tylko front-end dpkgz dodatkową funkcjonalnością, która może sprawdzać pakiety zależności w repozytoriach i może instalować je w jednej operacji, podczas gdy dpkg -iwymaga dwóch operacji ręcznie (później apt-get -f install).

Pytanie 1:

1) Jak to robi gdebi? zainstalować pakiety .deb z zależnościami bez użycia łączy PPT PPT dodanych ręcznie w plikach konfiguracyjnych?

Będąc dpkginterfejsem, może korzystać ze wszystkich funkcji dpkg. Ponieważ każdy .debplik pakietu zawiera (pod warunkiem, że nie są uszkodzone) metadane dotyczące tego pliku deb (takie jak nazwa pakietu, opiekun, zależności itp.), Może łatwo sprawdzić zależność tego pliku.

Na przykład możesz sprawdzić metadane pliku .deb za pomocą dpkg --info package-name.deb

Następnie wykorzystuje te informacje do budowy mapy zależności i oznaczenia dostępnych lokalnie plików .deb jako już pobranych oraz pobrania innych .debplików z Internetu.

Pamiętaj, że te potrzebne dodatkowe pakiety muszą być dostępne (w odpowiedniej wersji) w co najmniej jednym repozytorium skonfigurowanym w systemie.

Następnie zaczyna wyglądać normalna instalacja apt. Różnica polega na tym, że nie pobiera ponownie głównego pliku .deb

Pytanie 2:

(2) Czy mogę użyć tej samej komendy gdebi ( sudo su -c gdebi my.deb), aby zainstalować wszystkie inne pakiety deb bez dodawania PPA? czy muszę zmienić format, sudo su -c myn.debgdzie n to wersja oprogramowania itp.?

Umowy PPA istnieją z jakiegoś powodu. Głównym powodem jest to, że dostarczają najnowsze wersje pakietów. I ten pakiet o wyższej wersji zwykle zależy również od wyższych wersji sub-pakietów, które zwykle są obsługiwane z PPA, a nie ze standardowego repozytorium Ubuntu.

Przykładowy scenariusz:

Załóżmy, że pakiet o nazwie matka-pakiet ma najwyższą wersję 2.0standardowych repozytoriów Ubuntu, a ten pakiet-matka zależy od pakietu o nazwie pakiet-dziecko wersji 2. Załóżmy również, że niektóre PPA zapewnia pakiet-matka wersji, 3.0która wymaga child-packagejednego z 3.0, oba są dostępne za pośrednictwem tego repozytorium PPA.

Problem polega na tym, że jeśli teraz pobierzesz pakiet matka-pakiet-3.0.deb ze strony repozytorium i spróbujesz go zainstalować gdebi, nie gdebipowiedzie się.

Ponieważ sprawdzając plik matka-pakiet-3.0.deb , gdebiwiedziałem, że ten pakiet-matka potrzebuje pakietu-dziecka wersji 3.0lub wyższej, ale zna tylko lokalizację wersji 2.0. Nie wie, skąd pobrać wersję 3.0pakietu potomnego . Jest to oczekiwane, ponieważ nie powiedziałeś systemowi, skąd masz ten najnowszy pakiet dla matki . Innymi słowy, nie skonfigurowałeś listy repozytoriów w celu uwzględnienia tego PPA.

Oczywista odpowiedź na to pytanie brzmi: to zależy . Jeśli niezbędne zależności można znaleźć w już skonfigurowanych repozytoriach, instalacja zakończy się powodzeniem . Ale jeśli nie, to instalacja tego pakietu z wyższą wersją nie powiedzie się. Dlatego nadal potrzebujesz PPA i jest to najłatwiejszy sposób bez ręcznego wykonywania tych wszystkich czynności.

Druga część drugiego pytania nie miała dla mnie sensu .

Anwar
źródło
5

Miałem ten sam problem z kilkoma aplikacjami, przy czym skype jest jedną z nich, zależą one od zewnętrznych pakietów lub plików bibliotek, które należy zainstalować ręcznie.

Aby rozwiązać problem, którego użyłem:

sudo dpkg -i skype.deb

A potem, po pojawieniu się monitu o biblioteki zewnętrzne, takie jak masz w danych wyjściowych, wpisałem:

sudo apt-get install -f

Spowodowało to samo pobranie wymaganych pakietów i zainstalowanie skype.

Moithil Biswas
źródło
2

W każdym pakiecie .deb znajduje się lista zależności (z kompatybilnym numerem wersji).

Nie jestem czytnikiem Python, ale kod źródłowy wydaje się wywoływać, aptaby uzyskać tę listę. Oczywiście trzeba rekurencyjnie zejść, aby znaleźć zależności między nimi, ale aptoczywiście może to zrobić.

Gdy wszystkie zależności zostaną opracowane i ułożone we właściwej kolejności (niektóre zależności muszą zostać zainstalowane, zanim można będzie zainstalować inne zależności), aptnależy po prostu poprosić o zainstalowanie zależności. Następnie instalowany jest pakiet podany jako argument dla Gdebi.

Zależności i pakiet docelowy są instalowane w dwóch operacjach z dwóch powodów. Po pierwsze format wywołania apt w celu zainstalowania lokalnego pliku .deb jest inny niż wywołanie apt w celu zainstalowania zależności z repozytorium. Po drugie, oddzielenie wywołań zapewnia, że ​​wszystkie zależności są instalowane przed pakietem docelowym.

James
źródło