Как я могу проверить список зависимостей для пакета deb


94

Как я могу проверить список зависимостей для пакета deb. Я использую Ubuntu 11.10, и я скопировал все пакеты deb из var/cache/apt/archives. Я хочу отформатировать свой компьютер и переустановить только выбранные приложения. Также, как я могу получить список установленных пакетов и зависимостей.


По второму вопросу см. Askubuntu.com/questions/17823/…
htorque

Для получения полного списка установленных пакетов используйтеdpkg --get-selections | sed -n 's/[[:space:]]install$//p'
Tino

Ответы:


73

В дополнение к dpkgметоду, вы можете проверить зависимости пакетов в репозитории:

apt-cache depends package-name

РЕДАКТИРОВАТЬ Обновлено с рекомендацией @ Тино. Комментарий @ Tigran больше не применяется.


3
Примечание: это работает, только если пакет уже установлен.
Тигран Салуев

@TigranSaluev Обратите внимание, что dpkg -I packageработает только для установленных пакетов. apt-cacheработает для всех пакетов, которые известны после того, как вы сделали apt-get update.
Тино

1
apt-cache depends packageв этом случае это лучший способ, поскольку showpkgон не показывает, является ли зависимость рекомендацией, конфликтом и т. д., поэтому это немного озадачивает. Для сценария, который в dependsсочетании с showpkgувидеть см. Unix.stackexchange.com/a/362866/23450
Тино

100

Это покажет вам всю информацию о пакете:

dpkg -I package.deb

Это больше не работает в Ubuntu 14.04:dpkg -I splunkforwarder-6.3.3-f44afce176d0-linux-2.6-amd64.deb new debian package, version 2.0. size 15881308 bytes: control archive=3104 bytes. 153 bytes, 5 lines control 6058 bytes, 207 lines * postinst #!/bin/bash 2912 bytes, 93 lines * preinst #!/bin/bash Package: splunkforwarder Version: 6.3.3 Maintainer: Splunk Inc. <info@splunk.com> Architecture: amd64 Description: Splunk The platform for machine data.
Крейг С. Андерсон

@ CraigS.Anderson Запуск 14.04 здесь, и он отлично работает в моем случае. Должен быть принят ответ ИМХО.
magic_al

Не забудьте поставить /var/cache/apt/archives/перед именем пакета и использовать табуляцию, чтобы найти полное имя пакета с версией, например dpkg -I /var/cache/apt/archives/elasticsearch_2.4.4_all.deb.
Джейсон Р. Кумбс

1
Я не вижу никакой информации о зависимости
Ник

Вы можете добавить, что пакет можно получить без (пере) его установки (что, вероятно, является популярным вариантом использования) с помощью sudo apt-get install --reinstall --download-only [package name].
Карл Рихтер

2

apt-cache depends [Package-Name]будет работать так же. Хотя, если вы поставили .debпакет из-за пределов вашего списка источников, такие вещи apt-cache showpkg [Package-Name] && apt-cache depends [Package-Name]могут показывать устаревшую информацию или могут не синхронизироваться с фактическим установленным пакетом, следовательно, dpkg -I [Package-Name]будут работать лучше в этом случае.


2

Для 14.04 и позже:

dpkgбольше нет, -Iи вы должны использовать dpkg-debдля отображения информации о пакете, включая зависимости:

dpkg-deb -I package.deb

1
Привет, Фабби, у dpkg в настоящее время нет опции -I. Протестировано на Ubuntu 12.04 и 16.04. Вместо этого вы должны использовать dpkg-deb.
Руп Нараян

Комментарий отозван; ответ уточнен и проголосовал
Fabby

0

Вот некоторая неаккуратная и, возможно, не очень охватывающая постобработка, которую вы можете сделать для dpkg -Iвывода, чтобы получить элементы зависимости в виде списка:

Конденсированный для компьютеров

# dpkg -I package.deb | python -c "import sys, re; t=re.split(r'\n(?= ?[\w]+:)|:', sys.stdin.read()); print '\n'.join([i.strip() for i in {key.strip(): value.strip() for key, value in zip(t[::2], t[1::2])}['Depends'].split(',')])"
#

Расширен для людей:

dpkg -I package.deb | python -c "
    import sys, re;
    # Split keys and values into pairs (zipped together later)
    t=re.split(
        r'\n(?= ?[\w]+:)|:', 
        sys.stdin.read()
    ); 
    # Newline separate each dependency
    print '\n'.join([
        # Trim each dependency value
        i.strip() for i in {
            # Build assoc array from package metadata
            key.strip(): value.strip() 
            for key, value in zip(t[::2], t[1::2])
        }['Depends'].split(',')
    ])
"

Это отобразит пакеты, которые зависят от 'foo.deb' и еще не установлены: dpkg -I foo.deb | для i в $ (awk -F ',' '/ Зависит: / {gsub (/: /, ","); для (i = 2; i <= NF; i ++) {gsub (/. * $ /, "", $ (i)); printf ("% s \ n", $ (i));}} '); do dpkg -s $ i &> / dev / null || echo $ i; сделано | tr '\ n' ''
Грегори Бурд

@GregoryBurd, не стесняйтесь редактировать мой ответ / psot все, что вам нравится, по этой причине я разместил его в вики сообщества ^ u ^
ThorSummoner

Когда я запускаю эту команду наasticsearch, она выдает libc6\nadduser\n Installed-Size\n. То есть, похоже, что он соответствует не только строке Depends.
Джейсон Р. Кумбс

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.