Як дізнатися, з якого репозиторію Ubuntu або Debian входить пакет?


168

У системі на базі Debian, включаючи Ubuntu, як можна визначити, з якого сховища буде завантажений пакет, не починаючи фактично завантаження? aptitude showі apt-cache infoпокаже розділ (наприклад, метапакет, база, графіка), але не сховище, до якого належить пакет (наприклад, http://ppa.launchpad.net/mactel-support/ppa/ubuntu або http: // us .archive.ubuntu.com / ubuntu / ).

Під час встановлення пакета фактичне сховище з'являється під час завантаження (воно роздруковується у виході "завантаження з ..." з apt та подібних програм), але як можна отримати інформацію про сховище, що містить пакет (або конкретний версія пакета) без завантаження та встановлення спочатку?

Крім того, як можна визначити джерело сховища для вже встановленого пакета?


1
я вважаю це одним із недоліків Apt; просто не просто сказати, з якого сховища надається певний пакет в інструментах інсталятора пакета.
шарлатаний кіхот

Відповіді:


203

Я бігаю 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

Це означає, що є три wajigпакети:

  • Той, який встановлено ( /var/lib/dpkg/status)

  • Той, який доступний з локального сховища ( file:/home/wena/.repo_bin/)

  • Той, який доступний у віддаленому сховищі ( ftp://ftp.is.co.za/debian), який також має таку ж версію ( 2.0.47 ), що і той, що знаходиться у локальному сховищі


Крім того, apt-cache madison <package name>буде відображатися аналогічна інформація у табличному форматі.

 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

Але це не показує, звідки взявся встановлений пакет, чи не так?
Adobe

2
@Adobe У моєму випадку 2.1версія недоступна в жодному сховищі. Це місцева побудова.
thepang

2
Яка ознака встановленого пакета? ***або /var/lib/dpkg/status?
SuB

Може, і те й інше? Не впевнений.
thepang

Якщо пакет не встановлено, apt-cache policyкаже: Installed: (none).
Джон Макгі

28

Ага! Мабуть, належної aptкоманди немає apt-cache info, а натомість 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:Лінія надає інформацію сховища після /var/lib/apt/lists/.

Є звіт про помилку, який aptitudeне може відображати джерело сховища , але, здається, на даний момент ця функція все ще є у списку бажань.


Ця ознака вміння все ще залишається в списку 8 років потому, і я не знаю, чому ця відповідь ( apt-cache showpkg) не позначена як правильна.
Csaba Toth

8

Це працює для мене (показує, де знаходиться пакет 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

Ви можете застосувати додаткову фільтрацію для перевірки версій тощо, якщо є кілька версій.


Прагматичний. Я здивований, що ця інформація недоступна через будь-який з передніх кінців dpkg, хоча.
gotgenes


8

Цікаво, чому ніхто не згадав aptitude. Я ним користуюся постійно.

Здатність:

  • постачається за замовчуванням з багатьма дистрибутивами на базі Debian. Можна встановити на інші (наприклад, Ubuntu) черезsudo apt install aptitude
  • не потребує адміністративних привілеїв (принаймні для команди нижче)
  • має гарний ncursesграфічний інтерфейс (але більшість часу використовується без нього)
  • забезпечує дійсно гарний вихід. Щоб показати версії пакетів, використовуйте aptitude versionsкоманду:

    me@wheezy:~$ aptitude versions kde-standard
    Package kde-standard:                        
    i A 5:77+deb7u1     stable              500
    p A 5:84            testing,unstable    130
    
  • не має суперкорових сил

Буква перед кожним рядком вказує стан пакету, i встановлюється, і p очищається (або ніколи не встановлюється), стабільний , тестуючий та нестабільний - це визначення сховища, число в кінці є пріоритетним значенням .

Одне застереження щодо останніх версій придатності варто згадати тут: за замовчуванням він показує всі пакунки, що містять ім’я, яке ви шукаєте, тому використовуйте магію регулярних виразів, щоб шукати, наприклад, суворе ім'я aptitude versions ^kde-workspace$.


1
Хороша команда, але вона не перераховує сховище відповідно до запиту.
bjhend

Насправді це і є .
TranslucentCloud

Ви не розумієте. Можна встановити додаткові PPA. Важливо знати, чи є пакет із такого PPA. Власне кажучи, саме це я зараз намагаюся з’ясувати - якщо це так, я можу зняти PPA, знижуючи ризик виникнення проблем.
reinierpost

Так, ви маєте рацію, versionsви можете просто перевірити влучні значення закріплення даних пакетів, а не пов'язані з ними репости. Це все ще корисно, якщо ви знаєте всі свої репости та як вони закріплені.
TranslucentCloud

6

На жаль, ця інформація не записується під час встановлення пакета. Ви можете зробити гідну здогадку, якщо сховище все ще знаходиться у списку джерел, а сховище все ще має пакет:

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

apt-cache showpkg показує дані з бази даних сховища (не те, що встановлено), тож це інша форма тієї самої інформації з grep.

Навіть синаптик не може сказати (на екрані "Походження"), якщо вимкнути сховище та оновити.


2

Або, надихнувшись Sunny, ви можете спробувати:

# 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

пс. не на 100% точний.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.