4

В системе, использующей Zypper для управления пакетами (в моем случае openSuse), как получить список всех установленных пакетов, которые не связаны с текущим включенным репозиторием?

Реальная проблема: при обновлении дистрибутивов (например, с openSuse 12.1 до 12.2) я отключаю все нестандартные репозитории, которые я включил. Часто я добавлял их только для получения новой версии определенного инструмента, но эта новая версия по умолчанию включена в обновленный дистрибутив. Хотя иногда из репозитория устанавливались дополнительные пакеты, но я не знаю, как их обнаружить. Система работает, но эти пакеты никогда не будут обновляться, так как я удалил предоставляющий репозиторий после обновления.

2 ответа2

3

Это немного о том, чтобы возиться с запросами молнии.

1) Найдите установленные пакеты из non-opensuse-distribution-repositories:

zypper search -s | grep "i |" | grep -vi "| patch" | grep -vi "| opensuse" > list1.txt

2) Найти пакеты, которые доступны в репозиториях opensuse (независимо от того, установлены они или нет):

zypper search -s | grep "v |" | grep -vi "| patch" | grep -i "| opensuse" > list2.txt

3) Определите пакеты из списка1, которые не представлены в списке2:

cat list1.txt | cut -d " " -f3 | cut -d " " -f1 | while read line
do
    if [ "$(cat list2.txt | grep -i $line)" = "" ]; then
        echo "$line"
    fi
done

Это как бы решает проблему (протестировано на openSUSE 11.3).

1

Параметр pa , вероятно, более уместен:

zypper pa -i

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

zypper pa -i -r openSUSE-12.1

оттуда вы можете использовать стратегии, предложенные @ernestopheles, чтобы найти те, которые соответствуют вашим потребностям.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .