pkg_comp для сборки пакетов NetBSD в chroot
Эта статья - копия статьи на opennet.ru перевода Михаила Сгибнева:
http://www.opennet.ru/base/sys/pkg_comp_netbsd.txt.html
Вещь полезная и нужная. К тому же - оригинала уже нет по той ссылке, что указана на опеннете.
Так что - запостим себе в копилку.
Итак, pkg_comp для сборки пакетов NetBSD
В этой статье приводится краткое(но детальное) обьяснение, как использовать утилиту pkg_comp для сборки пакетов NetBSD в песочнице chroot не затрагивая уже установленные пакеты. Другими словами, вы можете собрать искомое, не удаляя зависимости в процессе сборки.
С помощью общественности я установил pkg_comp и теперь могу собирать пакеты, не затрагивая уже установленные. pkg_comp устанавливает chroot среду с полной инсталляцией NetBSD, именно туда помещаются пакеты и собираются бинарные файлы.
Вот что необходимо, для того, чтобы использовать pkg_comp:
- Система с установленной NetBSD. Возможно, есть способ кросс-платформенной сборки пакетов, но я не пробовал.
- Поддержка ядром файловой системы NULLFS. Она необходима для монтирования "реального" каталога пакетов внутрь chroot.
- Актуальный pkgsrc
- Релиз NetBSD или текущий снапшот, если вы не собираетесь собирать пакеты для X, то наличие X11 не обязательно.
- Установленный pkg_comp(обнаружить его можно в pkgsrc/pkgtools/pkg_comp)
- Файл конфигурации pkg_comp.
Так, теперь вкратце опишем, что необходимо сделать для приведения pkg_comp в рабочее состояние. Обратите внимание, что это работало у меня, возможно вы столкнетесь с проблемами.
Если вы устанавливаете пакеты, используя su, то создайте каталог pkg_comp в ~root и поместите в него файл default.conf. Если Вы используете sudo, помещаете файл в ~/pkg_comp, вместо ~root/pkg_comp. Этот файл будет содержать пути, такие как адрес песочницы.
Мой ~dive/pkg_comp/default.conf выглядит следующим образом:
DESTDIR=/var/chroot/pkgcomp
DISTRIBDIR=/nb/releasedir/i386
REAL_PKGSRC=/nb/pkgcomp_stuff/pkgsrc
Если вы не будете собирать пакеты, требующие X, то в этом же файле можно указать параметр "SETS_X11=no", если же вы используете X 4.x, то укажите следующую строку:
SETS_X11="xbase.tgz xcomp.tgz xetc.tgz xfont.tgz xserver.tgz"
В противном случае pkg_comp будет падать, ища старую версию X (xcontrib.tgz).
DESTDIR указывает на местоположение chroot песочницы, DISTRIBDIR указывает на местоположение релиза NetBSD(там можно найти binary/sets/base.tgz и др.) и REAL_PKGSRC указывает на местоположение дерева pkgsrc, которое Вы хотите использовать вместе с pkg_comp.
Начиная с этого момента я предполагаю, что вы используете sudo, как и я. Команды достаточно просты для адаптации под su или непосредственный вход как root.
Вам необходимо выполнить следующие команды:
- sudo pkg_comp makeroot (это создаст песочницу chroot, извлечет необходимые наборы и установит pkgtools/digest)
- sudo vi DESTDIR/etc/mk.conf (отредактируйте этот файл необходмым вам образом), если вы хотите собирать бинарные пакеты, то вам понадобятся эти два параметра:
DEPENDS_TARGET=package
UPDATE_TARGET=package
Это гарантирует, что пакеты, собранные с помощью pkg_comp, будут добавлены как бинарные в /usr/pkgsrc/packages.
В принципе, это все, что касается сборки пакетов с pkg_comp - хотя Вы могли бы, конечно, захотеть использовать кое-что типа pkg_chk, чтобы формировать тонны пакетов сразу в chroot. Сделать это можно войдя в chroot (sudo pkg_comp chroot), установив pkgtools/pkg_chk, отредактировав файл конфигурации (также в chroot), с указанием путей pkgsrc по одному в строке и затем выполнить pkg_chk -a -k -C /path/to/packagelist.
Вы можете теперь собирать индивидуальные пакеты (или мета пакеты) с помощью команды sudo pkg_comp build category/package. Например, sudo pkg_comp build shells/tcsh соберет бинарный пакет tcsh, находящийся в /usr/pkgsrc/packages/shells. Для того, чтобы добавить бинарный пакет в систему, используюте pkg_add /path/to/package.tar.gz