LINUX.ORG.RU

Как отобразить @system?

 , ,


0

1

Привет всем интересующимся!

Часто встречаются рекомендации: «обнови @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. Удручает низкая производительность скрипта на виртуальных пакетах.


В @world входит все, что вы установили ручками через emerge. Зависимости от этих пакетов в world не входят. То, что ставили с -1, тоже. Валяется в /var/lib/portage/world

Список пакетов @system задается системным профилем. Так что смотрите свой профиль, езжайте в /usr/portage/profiles и изучайте. Не забудьте, что профили наследуются, и если в вашем профиле вы какой-то пакет не нашли, а он цепляется по @system - смотрите родителей.

l0stparadise ★★★★★
()
Последнее исправление: l0stparadise (всего исправлений: 1)
Ответ на: комментарий от pS

Тогда я не понимаю вашей проблемы. emerge -ep @system показывает профиль и зависимости, emerge -ep0 @system дает голый профиль, без зависимостей. Что вам еще надо?

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

Я спросил зачем тебе это нужно. Экономия 10 секунд? Или какой-то иной глубокий философский дроч?

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

Тогда я не понимаю вашей проблемы.

Допустим, ответом может быть: «Вот эти пакеты я помещу в stage3».

Что вам еще надо?

Найти, например, штатное решение задачи.

pS
() автор топика
Ответ на: комментарий от pS

Хотя там тоже много ручной работы

Лучше глянь эту статью

Капитан Очевидность в моем лице намекает, что eix в вышеприведенной статье будет быстрее emerge

Pinkbyte ★★★★★
()
Последнее исправление: Pinkbyte (всего исправлений: 1)
Ответ на: комментарий от l0stparadise

emerge -ep0 @system дает голый профиль

Но там полно виртуальных пакетов и нет их обеспечения в виде того, что ты выбрал при установке/развитии системы. (пример — virtual/pager). А пересобираться будут именно _виртуальные_ пакеты.

pS
() автор топика
Ответ на: комментарий от pS

Нет, я пытаюсь понять, что же ты хотел сделать. Не получить некий список, а именно что хотел потом с этим списком делать. Когда пойму, то может что и посоветую.

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

Спс. Действительно _очень_ быстро по сравнению с emerge -qep. Но результат по виртуальным пакетам тот же. Я же хотел на место (или вместе с ним) виртуального пакета поместить реального представителя — того, что у меня отвечает на зависимости из виртуала.

pS
() автор топика
Ответ на: комментарий от imul

Когда пойму, то может что и посоветую.

Зачем? Считай just for fun.

pS
() автор топика
Ответ на: комментарий от pS

emerge -pe @system | grep -v «] virtual/»
Выхлоп нужно ещё обработать awk.

Я же хотел на место (или вместе с ним) виртуального пакета поместить реального представителя

Но, для чего? Реальный представитель это зависимость для виртуального, он итак будет в списке. Просто не собирай виртуальные. Но, на них тратится несколько секунд, в чём смысл экономии на спичках на фоне сборки gcc?

imul ★★★★★
()
Последнее исправление: imul (всего исправлений: 1)
Ответ на: комментарий от pS

то есть виртуальные не хочешь отображать что ли?

emerge -p @system | sed 1,4d | cut -d' ' -f9 | sort | grep -v 'virtual/'


как я писал выше, вывод через eix не отображает в списке app-sys/baselayout, но если хочется через него, то

eix -c --system | cut -d' ' -f2 | sort | sed 1d | grep -v 'virtual/'

А, ещё нужно чтобы отобрзил, что он вместо виртуал влепит?

grem ★★★★★
()
Последнее исправление: grem (всего исправлений: 2)
Ответ на: комментарий от imul

Верно, но это просто список и я планировал его с опцией -O (без зависимостей) и, к тому же, с --exclude gcc --exclude glibc и т.п. Это реальный юзкейс.

И зачем тут awk? Список и так простой.

pS
() автор топика
Ответ на: комментарий от pS

к тому же, с --exclude gcc --exclude glibc и т.п

Зачем пересобирать @system без пересборки gcc, binutils, glibc?

И зачем тут awk?

Ну вон выше с cut вариант показали. А с awk и xargs можно просто забабахать однострочник, перебирающий @system с указанием конкретных версий у пакетов, с эксклюдами и -O. Можно даже ещё и с -b. Чтобы потом иметь готовую базу пакетов на случай быстрого восстановления по -K.
Но, смысл сего действа мне за пределами джастфофанства и набивания руки в скриптописательстве кажется слишком туманным.

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

Круто печёшь однострочники!

Но возьми мой скрипт и сравни с выводом твоих примеров. А baselayout и через мой скрипт отображается.

pS
() автор топика
Ответ на: комментарий от imul

Зачем пересобирать @system без пересборки gcc, binutils, glibc?

Затем, что были собраны _перед_ этим.

Ну вон выше с cut вариант показали. А с awk и xargs можно просто забабахать однострочник, перебирающий @system с указанием конкретных версий у пакетов, с эксклюдами и -O. Можно даже ещё и с -b. Чтобы потом иметь готовую базу пакетов на случай быстрого восстановления по -K.
Но, смысл сего действа мне за пределами джастфофанства и набивания руки в скриптописательстве кажется слишком туманным.

Скрипт ты не пробовал (Ъ!). Там всё есть без awk. То есть мне awk, которого я не касался года 4, освежать нет необходимости. Идея с бинарными пакетами хороша, особенно при последующей пересборке мира, где-то я уже это видел. В целом, спасибо за общение, напомнил про бинарники.

pS
() автор топика
Ответ на: комментарий от imul

Реальный представитель это зависимость для виртуального, он итак будет в списке.

Забыл написать: это неправда. Проверь сам, если есть желание: (почти) только виртуалы без зависимостей. Есть пара исключений, для этого я в скрипт вставлял sort и uniq.

pS
() автор топика
Ответ на: комментарий от pS

Затем, что были собраны _перед_ этим.

Не нашёл этого в стартпосте. Ну неважно. Эксклюднуть не проблема.

Там всё есть без awk.

Авэканенавистничество какое-то. :D Там освежать только '{ print «=» $4 }'

emerge -bO $(emerge -pe @system | grep -v "] virtual/" | awk '/\[ebuild/{ print "=" $4 }' | xargs) --exclude gcc --exclude glibc -pv[br]

Если список какой надо, то можно повторить без -pv

imul ★★★★★
()
Последнее исправление: imul (всего исправлений: 1)
Ответ на: комментарий от pS

Забыл написать: это неправда.

Ну, ок. Поверю на слово. Хотя, по идее без -O зависимости должны быть.

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

Затем, что были собраны _перед_ этим.

Не нашёл этого в стартпосте. Ну неважно. Эксклюднуть не проблема.

Изначально список должен быть полным. Что с ним делать потом - вопрос времени.

Авэканенавистничество какое-то.

Нет-нет! Просто мне кажется избыточным инструментом для этого. Вкусовщина, только и всего.

pS
() автор топика
Ответ на: комментарий от imul

Хотя, по идее без -O зависимости должны быть.

С опцией -e зависимостей на самом деле _очень_ много, с -eO нет :-). Но это для системы, где я наставил кучу флагов. Сегодня испытывал — набралось ~300 пакетов. Я же хотел прикинуть, как выглядит сет без зависимостей, в своём естественном виде. Это может пригодиться для освежающей быстрой сборки только необходимых пакетов в районе старта развёртывания. Допустим, пересобрал я такой урезанный мир, а потом подбираю по одному пакету с минимумом обвеса. Профит тут в том, что не надо долго ждать.

В общем, не знаю, может этот опыт кому-нибудь пригодится. Мне хотелось, что бы дело решалось парой ключей в emerge и/или eix, ну да ладно. [/thread]

pS
() автор топика
Последнее исправление: pS (всего исправлений: 1)
Ответ на: комментарий от Pinkbyte

/usr/portage/profiles/base/packages

Вот и не надо делать emerge -qepO (наверное, надо проверить позже). Всё совпадает.

pS
() автор топика
Ответ на: комментарий от Pinkbyte

Не только base/packages форсирует базовые пакеты, есть ещё 1-2файла. Точнее не скажу, тк генту качать лень.

anonymous
()
Ответ на: комментарий от pS

Анонимус выше прав - профили наследуют друг друга, в base/packages - далеко не всё, только общие пакеты, которые наследуются большинством профилей

Pinkbyte ★★★★★
()
Последнее исправление: Pinkbyte (всего исправлений: 1)
Ответ на: комментарий от Pinkbyte

Подскажи, пожалуйста, где про каскадные профили хорошо написано, а то я не очень понимаю, как там играть в иерархию. Одновременно возникли вопросы: в профиле дальше от корня может (должен ?) лежать файл packages и, насколько я понял, некоторые пакеты могут быть выкинуты (замаскированы)?

pS
() автор топика
Ответ на: комментарий от pS

Подскажи, пожалуйста, где про каскадные профили хорошо написано

Где написано хорошо - не подскажу. Подскажу где подробно

в профиле дальше от корня может (должен ?) лежать файл packages и, насколько я понял, некоторые пакеты могут быть выкинуты (замаскированы)?

Ты не путай замаскированный пакет и часть сета. За маскировку отвечают файлы *.mask(package.mask, package.use.mask и т.д.), за состав самого профиля и сета system - packages

Структура т.н. локального профиля(/etc/portage/profile) сейчас вроде такая же как и в обычных профилях(раньше, года 4 назад были некоторые отличия, сейчас это всё уже должны были причесать, в вышеописанном PMS об этом вроде сказано)

Pinkbyte ★★★★★
()
Последнее исправление: Pinkbyte (всего исправлений: 1)
Ответ на: комментарий от Pinkbyte

Спасибо, пошёл разбираться.

pS
() автор топика
Ответ на: комментарий от Pinkbyte

Когда тебе напомнили то ты конечно уже вспомнил что сам знаешь. А вот сам вспомнить и упомянуть в разговоре это забыл.

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

То, что я не упомянул об очевидной для меня(очевидной в силу того, что я с этим каждый день работаю) и неочевидной для остальных вещи меня конечно не красит. Но давайте, уважаемый anonymous, не будем делать поспешных предположений о том кто, чего и сколько знает. Я никогда не скрывал, если я чего-то не знаю, гуглится это легко.

Я упоминал, например, что спрашивать меня по потрохам ядра практически бесполезно - те пара патчей, что я пилил для сторонних модулей, на глубину познаний не тянут от слова совсем.

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

Как-то неверно ты понимаешь. Состав сета сыстем точно также будет зависеть от юзов. Урежь юзы и будет у тебя минимальный сет. В любом случае, если у тебя где-то что-то накрылось, то тебе будет нужен не только сам пакет, но и его зависимости. Имхо проще для этого слить свежий стейж. Там как раз необходимый минимум для бутстрапа. Но, не буду настаивать. Джента тем и хороша, что каждый в ней дрочит как хочет.

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

Состав сета сыстем точно также будет зависеть от юзов

А вот Pinkbyte выше считает иначе. И понятно — состав stage3 определён для заданной архитектуры и default-профиля из /usr/portage/profiles.

pS
() автор топика
Ответ на: комментарий от imul

Если спрашиваешь, то значит нет.

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