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
чтобы перечислить эти пакеты.