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?


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

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


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.


Pragmatyczny. Dziwię się jednak, że ta informacja nie jest dostępna za pośrednictwem żadnego interfejsu użytkownika dpkg.
— gotgenes


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


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.


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.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.