Привет всем интересующимся!
Часто встречаются рекомендации: «обнови @system», «обнови @world». Как это понимать? Какие реально пакеты входят в @system и @world? Задавшись этими вопросами, я попытался воссоздать содержание системных сетов для актуального состояния системы Gentoo.
Легко проверить, что при запросе emerge -1ea @system
, возможно, потребуется пересобрать сотни пакетов, связанных со stage3 (ввиду развития системы use-флагов). С другой стороны, команда emerge -1eaO @system
вынуждает учитывать виртуальные пакеты, не имеющие явного влияния на код.
Я давно заприметил служебную программу portageq (справка portageq --help
). В частности, она позволяет получить информацию о соответствии обычного пакета виртуальному: portageq expand_virtual / =virtual/...
, причём обычный пакет соответствует выбранному в данной системе представлению виртуала. Команда portageq match / пакет
подбирает наилучшее соответствие версии к пакету.
В результате возник скрипт на баше, принимающий в качестве параметра сет (с лидирующим «@»):
#!/bin/bash
echo "$(emerge -1qepO $1 | sed 's/\[[^]]\+] //')" | while read PKG
do
if [ -z "$(grep '^virtual/' <<< $PKG)" ]
then
echo $PKG
else
portageq match / $(portageq expand_virtual / "=$PKG")
fi
done | sort | uniq
P.S. Удручает низкая производительность скрипта на виртуальных пакетах.