LINUX.ORG.RU

[gentoo] emerge/install


0

1

Дефолтно сборка ебилда и тп происходят в /var/tmp/portage/bla-bla-bla, туда же происходит установка, после чего установленное копируется в реальное дерево системы, и /var/tmp/portage/bla-bla-bla удаляется.
Допустим, есть система, где все размещено на одном достаточно небольшом разделе. Возможно ли стадию копирования заменить созданием хардлинков для файлов, или это чем-то череповато?

★★★★★

а смысл? если места на разделе мало, добавь памяти гиг до трёх, подмонтируй tmpfs: mount -t tmpfs tmpfs -o size=${SIZE},nr_inodes=1M /var/tmp/portage, и собирай туда. Оно ещё и быстрее будет, если процессор с интегрированным контроллером памяти.

по emerge foobar происходит: ebuild foobar compile install merge , где compile разворачивается в fetch unpack setup configure compile&& touch ${WORKDIR}/../../.{fetched,unpacked,setuped,configured,compiled}; в фазе fetch скачиваются исходники, в фазе unpack распаковываются, в setup запускается aclocal/autoconf/automake, в configure, внезапно, запускается ./configure --enable-{IUSE+} --disable-{IUSE-}; в compile — cd ${WORKDIR} && make

install разворачивается в cd ${WORKDIR} && make DESTDIR=${WORKDIR}/../../image — собирается в image то, что будет копироваться в корень ( $ROOT в emerge или paludis, то есть можно например собрать для mingw или для embedded, перекрыв этот SYSROOT).
merge == qmerge clean, сливается в настоящее дерево и удаляется собранное.

Есть хуки на фазы. Например, вот: http://blog.flameeyes.eu/2010/05/12/gentoo-failed-us-again — хук на lafilefixer чтобы запускать его для каждого собранного пакета.

Аналогично, то что тебе нужно — поставить хук на фазу qmerge, вместо копирования сделать жёсткие ссылки. То есть, дописать в /etc/portage/bashrc функцию pkg_preinst () {... }, где по аналогии с хуком на lafilefixer, вместо ... нужно вписать создание хардлинков. Или, pkg_postinst — в общем, хук должен вызываться после install до(или вместо) qmerge фазы.
Не уверен, можно ли перекрыть вместо, чтобы не вызывалось старое qmerge.
Тогда нужно курить маны в направлении default_pkg_preinst или helpers вроде dohard, doins и т.п.

см. доку: /usr/share/doc/portage-2.2.0_alpha9/html/index.html

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

>а смысл?

В условиях ограниченных дискового пространства и памяти: небольшое ускорение, уменьшение фрагментации, меньшее насилие над накопителем(актуально в случае ssd/flash).

По остальному тексту: спасибо, изучу.

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

В условиях ограниченных дискового пространства и памяти лучше использовать сторонний buildhost.

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

>В условиях ограниченных дискового пространства и памяти лучше использовать сторонний buildhost.

Много чего можно, но меня в конкретном теоретическом случае заинтересовала возможность уменьшения оверхеда.

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