On Fri, Feb 29, 2008 at 12:38:24AM +0300, Alexey Gladkov wrote: > Alexey Tourbin wrote: > > От инсталлятора (в случае оптимизации зависимостей) требуется лишь, > > чтобы он инсталлировал в два этапа: сначала установка rpm (или хотя > > бы coreutils + /bin/sh); а потом установка всего остального. То есть > > инициализация минимального conforming чрута должна быть отделена > > Есть репозиторий N как по нему вычислить состав conforming чрута ? > Или это жёстко запитый список пакетов ? ... если второе, то это как-то > некузяво. > Предлагается ставить пакеты для conforming чрута через rpm2cpio ? Conforming chroot -- это в котором заведомо есть /bin/sh и некоторые команды из coreutils (в частности, /bin/rm, далее cat mv cp mkdir ln). Такой чрут является "conforming", потому что он соответствует спецификации SUSv3 -- в нём заведомо работают некоторые самые базовые UNIX программы. Если мы исходим из того, что установка любого пакета происходит в conforming chroot, тогда некоторые самые частые зависимости можно оптимизировать (удалить). Если же исходить из того, что установка любого сколь угодно сложно пакета происходит в потеницально пустой чрут, то базовые зависимости удалять нельзя, потому что это может дать неправильный порядок установки пакетов (и соответственно падение в скриптлетах). Допустим, мы ставим в *пустой* чрут пакет openoffice.org. Если в нём оптимизирована (удалена) зависимость на /bin/sh, то rpm имеет право ставить пакет openoffice.org ВПЕРЁД пакет sh (и даже вообще не ставить пакет sh, если все зависимости на /bin/sh были удалены). При этом %post-скрипт в openoffice.org обломится, потому что пакет sh с /bin/sh ещё не успел поставиться (или вовсе не собирался ставиться). Поэтому в инсталляторе желательно разделить стадию инициализации conforming чрута и последующую стадию установки дополнительных пакетов. Состав conforming чрута вычисляется как замыкание зависимостей пакета rpm. Впрочем, ldv не уверен, что пакет rpm должен в *любой* системе присутствовать (иными словами, в принципе возможны мини-чруты, с которым "внешний" rpm общается со своей базой rpmdb только посредством 'rpm --root'). В таком случае содержимое минимального conforming чрута можно вычислять как замыкание coreutils и sh. Всё что меньше этого заведомо не conforming. Более развязано (то есть менее строго), для инициализации conforming чрута специально существует пакет basesystem. То есть с натяжкой можно считать, что в любой рабочей среде установлен пакет basesystem. Конечно, так лучше не считать, когда мы находимся в "шаре" с диаметром в пределах basesystem.