LINUX.ORG.RU

Сделаем world чище!


0

1

Решил написать скрипт, который бы сравнивал выхлоп от emerge -NuDpv system с тем же, от world и показывал “пересечение” пакетов, т.е. именно те пакеты, которые уже есть в system, но зачем-то упомянуты в world. В итоге я застопорился на регулярке для обрасывания версии и с тем, как всё таки сравнить выхлоп с world. То, что ниже просто фильтрует emerge -NuDav system (без учёта [blocks]) до состояния списка /var/lib/portage/world.

emerge -NuDpv system &> buf ; grep ebuild buf | sed 's/^[^[].*//g' | grep -v ^$ | sed -e 's/\[ebuild[a-zA-Z\ ]*\]\ [^/]*\/\([^\ ]*\)\ .*/\1/g'

То же самое, только в несколько строчек

emerge -NuDpv system &> buf 
# вырезаем до строк, содержаих "ebuild"
grep ebuild buf | \
# убираем строки, которые начинаются не с квадратной скобочки и затем убираем образовавшиеся пустые строки 
sed 's/^[^[].*//g' | grep -v ^$ | \
# собссно вычленяем имя пакета
sed -e 's/\[ebuild[a-zA-Z\ ]*\]\ [^/]*\/\([^\ ]*\)\ .*/\1/g'
Если кому интересно, можно продолжить.

Deleted

Извините за вопрос... А зачем?
Сделайте emerge -pve system
По список этих пакетов подкастрируйте файл мира.
Одноразовая же операция, если каждый день не вертеть кучу юз-флагов туда-сюда.

Lumi ★★★★★
()

Поздравляю, это уже 3-й велосипед, хотя предыдущие еще искали лишние записи в /etc/portage/*

xorik ★★★★★
()
Ответ на: комментарий от Deleted

Для каждой строки соотв. паттерну между первыми «//» выполняем выражение в скобках «{}»; в первой замене не указан паттерн, она производится по предыдущему паттерну, дальше всё ясно.

anon_666
()
Ответ на: комментарий от Lumi

М. Да незачем в принципе. Это читая http://gentoo.theserverside.ru/book/ar19.html подумал и заигрался в эту мысль. Позже конечно вспомнил, что если пересобирать мир только по большим праздникам, вроде смены минорной версии gcc, то можно обойтись сборкой из бинарных пакетов, а там уже без разницы, попадаются пакеты из system в world или нет.

У меня есть ещё скрипт, который выравнивает package.use в две колонки, но я пока боюсь его использовать из-за того, что версии пакетов кое-как называются, а-ля blabla11-bla-12p-5.0.0-r1 или вроде того. Есть человеческий способ быстро узнать имя пакета, не ковыряя его ebuild?

Deleted
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.