Оптимизация сборки по размеру

Всех приветствую. Есть задача создать сборку определённого функционала и минимального размера. Оптимизация самого процеса компиляции не даёт желаемого выигрыша. USE-флаги тоже не всегда применимы, допустим доки не нужны, а флага doc у пакета вобще нет. Пришла мысль поработать как-то с зависимостями. Возник вопрос. Возможно ли компилить как полагается с зависимостями DEPEND, но пакеты этих зависимостей в итоговую корневую систему не включать (а включать только RDEPEND)? С Gentoo я совсем недавно работаю и отличия между этими переменными так и не нашёл - в обоих случаях происходит установка пакетов в корневую систему. А хотелось бы чтобы устанавливались только зависимости времени выполнения.
Может быть в связи с задачей у кого-то ещё есть какие-то мысли?
Заранее спасибо.

пробовал читать "emerge

пробовал читать "emerge --help"?
есть же куча флагов для emerge - можно собирать без зависимостей,
можно собирать, но не устанавливать...

* не устанавливать doc и пр. можно если в /etc/make.conf добавить FEATURES="noman nodoc noinfo"

Для чего это нужно?

Смотря какие цели преследуются.
Есть такой проверенный вариант.

Можно собрать Linux на базе Gentoo, но для дальнейшего внесения изменений потребуется Большой_Брат.
Вкратце алгоритм такой.
Есть хостовая машина. На ней производится сборка и хранится непорезаная версия для дальнейшей модификации.
Сборка пакетов (исключая такие как portage, gcc и тп) ведется с установленным ROOT=/куда_надо
После установки всего желаемого (ядро можно забрать из системы простым копированием) при помощи tar делается промежуточная копия, а затем она очищается от ненужных для компиляции /usr/include, и тп (по желанию в том числе и документации)
Эта сборка архивируется tar-ом и разворачивается на желаемый носитель.
Там настраивается отдельно установленный загрузчик и всё ... микроскопическая система готова
(менее 100Mб получается консольный сервер с желаемым набором ПО и возможностью за несколько минут обновить или изменить функционал)

Спасибо за ответ, таким

Спасибо за ответ, таким способом уже пробовал, при этом мусор в системе остаётся и приходится пофайлово всё вычищать, далее методом проб и ошибок проверять работоспособность (для бинарников можно ldd применить, ито она проверяет только объявленные зависимости, а если библиотека прикручивается динамически, тут придётся кучу всего перерыть). Файлы заголовков весят прилично, их естестенно убить, доки тоже складываются все в одну директорию - труда не составляет. Но хочется ещё! Пример: для компиляции могут использоваться n-библиотек, при этом для работы надо n-m, как сделать так чтобы при ROOT="mydir" emerge <пакеты> в mydir усановились только необходимые n-m а остальные использовались только на этапе компиляции.
По поводу первого ответного поста... Да доки читал, флаги они полезны, но всё равно к ответу на поставленный вопрос всё это не приводит. Может и есть какой-то хитрый ключ или способ, который поможет с минимальными усилиями скомпановать runtime зависимости без зависимостей этапа компиляции, но я его не нашёл. Тем не менее спасибо :)

собирай свой stage4 -

собирай свой stage4 - компилируешь, собираешь в бинарники (emerge --buildpkg), а затем собираешь из этих пакетов систему (emerge --usepkg)
почитай http://en.gentoo-wiki.com/wiki/Light_Install и пр.
например можно урезать дерево портеджей: http://en.gentoo-wiki.com/wiki/Tiny_Portage_Tree

Сам сейчас собираю систему,

Сам сейчас собираю систему, которую потом распространю на все используемые компьютеры. Полно ненужных зависимостей. Например, всякие *toys и *games. Ну и не используемые лично мной программы - те, которые очевидно множно не ставить. Но emerge их ставит.

Я вижу несколько путей:
1) делаем emerge, потом делаем emerge --unmerge для списка ненужного.
+ ненужные пакеты всё же удалены;
- их пришлось всё-таки скачать и собрать;
- ближайший emerge world установит всё опять.
2) делаем emerge -pv, кладём список пакетов в файл list.txt (лишние сообщения отфильтровать sed`ом). Из файла вручную выковыриваем все ненужные пакеты, а потом ставим их по порядку: for i in `cat list.txt`; do emerge --nodeps $i; done
+ не устанавливаются ненужные пакеты, не нужно скачивать;
- ближайший emerge world установит всё опять.
3) в portage-2.2, как я вычитал, есть возможность редактировать и создавать свои наборы. Я ещё не пробовал, но надеюсь, что можно будет отредактировать устанавливаемый набор с тем, чтобы не ставить лишних пакетов. А вообще, пользовательские наборы для меня давно желательная функция. Я хотел сделать набор для работы, набор для мультимедиа, набор для internet и т.д. Пока это достижимо по п.2.

По portage. Хотелось всё же иметь когда-то давно обсуждаемый USE="-games". И ещё что-то вроде /etc/portage/packages.ignore (по аналогии с /etc/portage/package.use и т.д.)

$BOC(\pi, e)$

.

eugene_b написал(а):
По portage. Хотелось всё же иметь когда-то давно обсуждаемый USE="-games". И ещё что-то вроде /etc/portage/packages.ignore (по аналогии с /etc/portage/package.use и т.д.)

В своё время успешно разрулил посредством прописывания ненужного, но требуемого по зависимостям в /etc/portage/package.provided.
Сейчас проверил и был изрядно удивлён не обнаружив этого файла в текущей версии man portage.

:wq
--
Live free or die

Да... я читал про этот файл,

Да... я читал про этот файл, но не обратил внимание - спутала фраза "Useful for porting to non-Linux systems".
Сейчас у меня portage-2.1.***, в man'e этот файл упоминатся. НО - не помогает, только что пробовал. Не понимаю, почему. Прописал всё правильно, source /etc/profile сделал. Жаль - это то, что нужно.

Нет, разобрался. В /etc/portage - не помогает (???). Но помогает, если в /etc/make.profile. И ещё момент - для пакетов нужно указывать версию - иначе ругается. Это снижает ценность данной возможности - версии постоянно обновляются.
Но в принципе, это решение моей проблемы, гораздо лучшее, чем п. 2, о котором я писал.

$BOC(\pi, e)$

Поставил portage-2.2_rc23.

Поставил portage-2.2_rc23. Там в man'е package.provided есть. Так что, наверное, прикол в том, что portage не просматривает /etc/portage на предмет поиска этого файла (??!). Остаётся редактировать /etc/make.profile/package.provided, хотя это и невелено делать. Зато помогает.

А по версиям в man'е написано: "Portage will not attempt to update a package that is listed here unless another package explicity requires a version that is newer than what has been listed". Таким образом, остаётся возможность указать нереально новую версию пакета, и он не будет обновлятся ! (наверное, буду пробовать).

Сейчас система у меня собирается "по полной" - пусть, всё уже скачано. Потом eix`ом посмотрю смысл пакетов, emerge -t - иерархию, составлю список ненужных, удалю их emerge --unmerge $i и занесу в package.provided (с большой версией, если это, конечно будет работать)

И ещё. Anarchist - спасибо большое за подсказку. Иногда читаешь доки, вроде всё понятно, а смысл не доходит. Бестолковый я, наверное, стал.

PS. "Так что, наверное, прикол в том, что portage не просматривает /etc/portage на предмет поиска этого файла (??!)" - нет, я понимаю, что в man'е /etc/portage/package.provided нет, но ведь это же и правда нелогично!

$BOC(\pi, e)$

Внимательнее читайте man

Внимательнее читайте man portage.
Файл package.provided должен быть в /etc/portage/profile/, а не в /etc/portage.

Ну да,

Ну да, да:
"/etc/portage/profile/ site specific overrides of /etc/make.profile/"

$BOC(\pi, e)$

Померяемся святостью? ;)

Dimanish написал(а):
Внимательнее читайте man portage.
Файл package.provided должен быть в /etc/portage/profile/, а не в /etc/portage.

Дык, я говорю не про /etc/portage/profile/ (куда, ЕМНИП, ручками лезть не рекомендуют), а про /etc/portage/.
В котором у меня в своё время package.provided вполне себе работал.

:wq
--
Live free or die

Anarchist Цитата:Дык, я

Anarchist

Цитата:
Дык, я говорю не про /etc/portage/profile/ (куда, ЕМНИП, ручками лезть не рекомендуют), а про /etc/portage/.

Можно ссылку кто не рекомендует туда лезть и по какой причине?
Как раз лезть в /etc/make.profile я бы не стал, т.к. этот каталог является симлинком на используемый профиль и его содержимое может измениться при emerge --sync. /etc/portage/profile в этом плане надёжнее.

Цитата:
В котором у меня в своё время package.provided вполне себе работал.

Тоже припонимаю, что файл размещался раньше в /etc/portage. Видимо решили поменять местоположение, почему — не знаю...

Более поздние версии в

Более поздние версии в package.provided указывать действительно можно - работает. Конец *геймзам и *тойзам !!!

$BOC(\pi, e)$

Есть мысль, что борящимся с

Есть мысль, что борющимся с *games и *toys стоит ознакомиться с выводом eix -p kde\*meta, а не собирать целиком KDE целиком (-:Е

Текстовый редактор vi имеет два режима работы: в первом он пищит, а во втором — всё портит.

Настройки просмотра комментариев

Выберите нужный метод показа комментариев и нажмите "Сохранить установки".