Zypper: Как вывести список установленных пакетов, которых нет в репо

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

Реальная проблема: при обновлении дистрибутивов (например, с openSuse 12.1 до 12.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).

Опция pa вероятно, более уместно:

zypper pa -i

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

zypper pa -i -r openSUSE-12.1

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

В более поздних версиях openSUSE вы можете использовать

      zypper pa --orphaned

чтобы перечислить эти пакеты.

Другие вопросы по тегам