Jak stwierdzić z jakiego repozytorium Ubuntu lub Debian pochodzi pakiet?

168

Jak w systemie opartym na Debianie, w tym Ubuntu, można stwierdzić, z którego repozytorium zostanie pobrany pakiet, bez faktycznego rozpoczęcia pobierania? aptitude showi apt-cache infopokaże sekcję (np. metapakiet, podstawa, grafika), ale nie repozytorium, do którego należy pakiet (np. http://ppa.launchpad.net/mactel-support/ppa/ubuntu lub http: // us .archive.ubuntu.com / ubuntu / ).

Podczas instalowania pakietu rzeczywiste repozytorium pojawia się podczas pobierania (jest drukowane w danych wyjściowych „pobieranie z ...” z apt i podobnych programów), ale jak można uzyskać informacje o repozytorium zawierającym pakiet (lub określony wersja pakietu) bez uprzedniego pobrania i zainstalowania?

Ponadto, w jaki sposób można określić repozytorium źródłowe dla pakietu, który jest już zainstalowany?

gotgenes
źródło
1
uważam to za jeden z braków Apt; po prostu nie jest łatwo stwierdzić, z którego repozytorium zapewnia określony pakiet w narzędziach do instalowania pakietów.
quack quixote

Odpowiedzi:

203

Biegam apt-cache policy <package name>:

$ apt-cache policy wajig
wajig:
  Installed: 2.1
  Candidate: 2.1
  Version table:
 *** 2.1 0
        100 /var/lib/dpkg/status
     2.0.47 0
        500 file:/home/wena/.repo_bin/ squeeze/main i386 Packages
        500 ftp://ftp.is.co.za/debian/ squeeze/main i386 Packages

Oznacza to, że istnieją trzy wajigpakiety:

  • Ten, który jest zainstalowany ( /var/lib/dpkg/status)

  • Jeden dostępny z lokalnego repozytorium ( file:/home/wena/.repo_bin/)

  • Jeden dostępny ze zdalnego repozytorium ( ftp://ftp.is.co.za/debian), który również ma tę samą wersję ( 2.0.47 ) co ta w lokalnym repozytorium


Dodatkowo apt-cache madison <package name>wyświetli podobne informacje w formacie tabelarycznym.

 wajig |        2.2 | mirror://mirrors.ubuntu.com/mirrors.txt/ precise/universe amd64 Packages
 wajig |        2.2 | mirror://mirrors.ubuntu.com/mirrors.txt/ precise/universe Sources
tshepang
źródło
Ale nie pokazuje, skąd pochodzi zainstalowany pakiet, prawda?
Adobe
2
@Adobe W moim przypadku 2.1wersja nie jest dostępna z żadnego repozytorium. Jest zbudowany lokalnie.
tshepang
2
Co to jest znak zainstalowanego pakietu? ***czy /var/lib/dpkg/status?
SuB,
Może obydwa? Niepewny.
tshepang,
Gdy pakiet nie jest zainstalowany, apt-cache policymówi: Installed: (none).
John McGehee,
28

Aha! Najwyraźniej właściwym aptpoleceniem nie jest apt-cache info, ale zamiast tego apt-cache showpkg.

$ apt-cache showpkg linux-generic
Package: linux-generic
Versions: 
2.6.31.19.32 (/var/lib/apt/lists/us.archive.ubuntu.com_ubuntu_dists_karmic-updates_main_binary-amd64_Packages) (/var/lib/apt/lists/security.ubuntu.com_ubuntu_dists_karmic-security_main_binary-amd64_Packages) (/var/lib/dpkg/status)
 Description Language: 
                 File: /var/lib/apt/lists/us.archive.ubuntu.com_ubuntu_dists_karmic-updates_main_binary-amd64_Packages
                  MD5: 5d722da329763b9342d322f5a140005c

2.6.31.14.27 (/var/lib/apt/lists/us.archive.ubuntu.com_ubuntu_dists_karmic_main_binary-amd64_Packages)
 Description Language: 
                 File: /var/lib/apt/lists/us.archive.ubuntu.com_ubuntu_dists_karmic_main_binary-amd64_Packages
                  MD5: 5d722da329763b9342d322f5a140005c


Reverse Depends: 
Dependencies: 
2.6.31.19.32 - linux-image-generic (5 2.6.31.19.32) 
2.6.31.14.27 - linux-image-generic (5 2.6.31.14.27) 
Provides: 
2.6.31.19.32 - 
2.6.31.14.27 - 
Reverse Provides: 

File:Linia stanowi repozytorium informacji po /var/lib/apt/lists/.

Istnieje raport o błędzie, który aptitudenie może wyświetlić repozytorium źródłowego , ale wydaje się, że obecnie funkcja ta wciąż znajduje się na liście życzeń.

gotgenes
źródło
Ta funkcja umiejętności znajduje się jeszcze na liście 8 lat później i nie wiem, dlaczego ta odpowiedź ( apt-cache showpkg) nie jest oznaczona jako poprawna.
Csaba Toth
8

To działa dla mnie (pokazuje, gdzie jest pakiet 2vcard):

$ grep 2vcard /var/lib/apt/lists/* | grep "Filename:"

/var/lib/apt/lists/us.archive.ubuntu.com_ubuntu_dists_karmic_universe_binary-i386_Packages:Filename: pool/universe/2/2vcard/2vcard_0.5-3_all.deb

Możesz zastosować dodatkowe filtrowanie, aby sprawdzić wersje itp., Jeśli dostępnych jest wiele wersji.

Słoneczny
źródło
Pragmatyczny. Dziwię się jednak, że ta informacja nie jest dostępna za pośrednictwem żadnego interfejsu użytkownika dpkg.
gotgenes
@got Jest dostępny: superuser.com/questions/106794/…
tshepang
8

Zastanawiam się, dlaczego nikt nie wspomniał aptitude. Używam tego cały czas.

Aptitude to:

  • dostarczane domyślnie z wieloma dystrybucjami opartymi na Debianie. Może być zainstalowany na innym (np. Ubuntu) przezsudo apt install aptitude
  • nie wymaga uprawnień administracyjnych (przynajmniej dla polecenia poniżej)
  • ma ładny ncursesGUI (ale bez niego większość czasu)
  • zapewnia naprawdę ładną wydajność. Aby wyświetlić wersje pakietów, użyj aptitude versionspolecenia:

    me@wheezy:~$ aptitude versions kde-standard
    Package kde-standard:                        
    i A 5:77+deb7u1     stable              500
    p A 5:84            testing,unstable    130
    
  • nie ma super krowich mocy

Litera przed każdym ciągiem oznacza status pakietu, i jest zainstalowany, a p jest czyszczony (lub nigdy nie jest instalowany), stabilne , testujące i niestabilne są definicjami repozytorium, liczba na końcu jest priorytetem pin .

Warto wspomnieć o jednym zastrzeżeniu dotyczącym najnowszych wersji aptitude: domyślnie pokazuje on wszystkie pakiety, które zawierają szukaną nazwę, więc użyj na przykład magii wyrażeń regularnych , aby na przykład wyszukać według ścisłej nazwy aptitude versions ^kde-workspace$.

TranslucentCloud
źródło
1
Ładne polecenie, ale nie wyświetla repozytorium zgodnie z żądaniem.
bjhend
Właściwie to robi .
TranslucentCloud,
Nie rozumiesz Można zainstalować dodatkowe umowy PPA. Ważne jest, aby wiedzieć, czy paczka pochodzi z takiej umowy PPA. W rzeczywistości właśnie to próbuję teraz rozgryźć - jeśli tak, mogę usunąć PPA, zmniejszając ryzyko problemów.
reinierpost
Tak, masz rację, versionsmożesz po prostu sprawdzić apt przypinające wartości podanych pakietów, a nie powiązane repozytorium. Jest to jednak przydatne, jeśli znasz wszystkie repozytorium i sposób ich przypięcia.
TranslucentCloud,
6

Niestety ta informacja nie jest rejestrowana podczas instalacji pakietu. Możesz zgadnąć, czy repozytorium nadal znajduje się na liście źródeł, a repozytorium nadal ma pakiet:

grep -l PKG /var/lib/apt/lists/*

apt-cache showpkg pokazuje dane z bazy danych repozytorium (nie to, co jest zainstalowane), więc jest to kolejna forma tych samych informacji z grep.

Nawet synaptic nie może powiedzieć (na ekranie Origin), jeśli wyłączysz repozytorium i zaktualizujesz.

kanaka
źródło
2

Lub, zainspirowany Sunny, możesz spróbować:

# list installed restricted packages
for i in `dpkg --get-selections | awk '{ print $1 }'`; do egrep -lRI "^Filename: .*/${i}_[^/]+.deb" /var/lib/apt/lists/ | grep -q 'restricted' && echo $i; done

# list installed multiverse packages
for i in `dpkg --get-selections | awk '{ print $1 }'`; do egrep -lRI "^Filename: .*/${i}_[^/]+.deb" /var/lib/apt/lists/ | grep -q 'multiverse' && echo $i; done

ps. nie w 100% dokładne.

Tim
źródło