среда, 21 сентября 2011 г.

Сборка пакетов с помощью tinderbox

Tinderbox - набор скриптов для сборки пакетов во FreeBSD. Обычно его используют майинейнеры портов для тестирования перед обновлением, кроме того tinderbox можно применять для централизованной сборки пакетов для нескольких однотипных машин.

1. Установка

Устанавливается tinderbox из портов:
make install clean -C /usr/ports/ports-mgmt/tinderbox
Обычно я указываю следующие опции:
===> The following configuration options are available for tinderbox-3.3_4:
     PGSQL=on "With pgsql"
     MYSQL=off "With mysql"
     CSUP=On (default) "Use csup for updates"
     CVSUP=off "Use cvsup for updates"
     WEBUI=on "Install web interface"
     APACHE=on "Use Apache for web interface"
     HIAWATHA=off "Use Hiawatha for web interface"
     LIGHTTPD=off "Use LightHTTPD for web interface"
     CHECK_FOR_ROOT=on "Check if ./tc is run by uid 0"
     LSOF=on "For killMountProcesses() when using nullfs"
===> Use 'make config' to modify these settings
В качестве базы ничто не мешает использовать mysql.

2. Конфигурирование
По умолчанию скрипт устанавливается в директорию /usr/local/tinderbox, а главный скрипт /usr/local/tinderbox/scripts/tc  (далее - просто ./tc).
Первым делом нужно создать базу данных и таблицы в ней. Можно сделать вручную, а можно командой ./tc Setup нужно будет ответить на ряд вопросов.
Если планируется использование веб-интрефейса, то необходимо также создать конфиг /usr/local/tinderbox/scripts/webui/inc_ds.php. У меня он выглядит так:

$DB_DRIVER = 'pgsql';
$DB_HOST = 'localhost';
$DB_NAME = 'tinderbox';
$DB_USER = 'tinder';
$DB_PASS = '';
?>
А также /usr/local/tinderbox/scripts/webui/inc_tinderbox.php. Этот файл лучше всего скопировать из inc_tinderbox.php.dist. В большинстве случаев там не требуется что-либо менять.
И последний конфигурационный файл /usr/local/tinderbox/scripts/tinderbox.ph, там нужно задать переменные $TINDERBOX_HOST и $TINDERBOX_URI.
После этого можно запустить инициализацию: ./tc Init.

3. Настройка Apache
Для вебинтерфейса нужно добавить следующие строки в конфиг апача:


    ServerName tb.home
    ServerAlias tb
    Alias /tb/logs/ "/usr/local/tinderbox/logs/"
    Alias /tb/packages/ "/usr/local/tinderbox/packages/"
    Alias /tb/errors/ "/usr/local/tinderbox/errors/"
    Alias /tb/wrkdirs/ "/usr/local/tinderbox/wrkdirs/"
    Alias /tb/ "/usr/local/tinderbox/scripts/webui/"



      Order allow,deny
      Allow from all
Вместо tb.home пишите с ServerName имя своего хоста

4. Использование
Прежде чем собирать пакеты необходимо создать джайлы (Jail) не путать с jail(8). В данном случае джаил - всего лишь версия FreeBSD. Например на машине с версией 8.2, можно создать джаил 7.4 и собирать пакеты для 7.4. Создание джайла делается следующей командой:
# /tc createJail -j 8.2 -d "FreeBSD 8.2" -t RELENG_8_2 -u CSUP
 Здесь создается джаил для версии 8.2, исходники которого будут получены с помощью csup. Имя джаил задается опцией -j и должно быть равно версии FreeBSD. Выполнение команды займет некоторое время.
Далее надо создать дерево портов. Для того, чтобы использовать порты из /usr/ports используйте следующую команду:
# /tc createPortsTree -p FreeBSD-ports -u NONE -m /usr/ports
 Здесь ключ -p задает имя дерева портов, -u режим обновления (NONE - не обновлять), -m путь к директории.
И последнее приготовление: требуется создать билд (Build). Билд - это комбинация дерева портов и ждайла. Создается следующей командой:
# ./tc createBuild -b 8.2-FreeBSD -j 8.2 -p FreeBSD-ports
 Теперь можно приступить непосредственно к сборке портов:
# ./tc tinderbuild -b 8.2-FreeBSD -nullfs shells/bash
 Эта команда соберет пакеты для bash и всех его зависимостей в директории /usr/local/tinderbox/packages/8.2-FreeBSD/Latest/. Флаг -nullfs указывает использовать nullfs для монтирования джайлов, без него необходимо настроить на машине nfs.
Для регулярно собираемых портов их можно добавить в базу tinderbox для последующего отслеживания:
# ./tc addPort -b 8.2-FreeBSD -d shells/bash
Команда добавит в базу bash и все его зависимости.
Пакеты будет доступны для скачивания по ссылке:
http://tb.home/tb/packages/8.2-FreeBSD/Latest/
 Чтобы pkg_add -r  использовал локальное зеркало нужно определить переменную PACKAGESITE. Например так:
# env PACKAGESITE='http://tb.home/tb/packages/8.2-FreeBSD.i386/Latest/' pkg_add -r bash
 Слэш в конце ссылки является обязательным.

1 комментарий: