Установка и настройка tinderbox

Tinderbox - набор скриптов для сборки пакетов во FreeBSD.

Ttinderbox можно применять для централизованной сборки пакетов для нескольких однотипных машин.

1. Установка

#pkg install tinderbox

нам нужны опции mysql и apache

2. Конфигурирование

По умолчанию скрипт устанавливается в директорию /usr/local/tinderbox, сами скрипты лежат в /usr/local/tinderbox/scripts

Сначала необходимо создать базу данных и таблицы для tinderbox. Воспользуемся командой ./tc Setup, тут нужно будет ответить на пару вопросов.

Баги: при вызове команды может ругаться на версии perl, php, mysql. Тут проще погрепать по коду скриптов и поправить требования к версиям.

Для веб-интрефейса необходимо создать конфиг /usr/local/tinderbox/scripts/webui/inc_ds.php.

Переименуйте и подредактируйте файлы с расширением .dist, dist надо убрать. У меня они выглядят так:

Идем в /usr/local/tinderbox/scripts

# cat ds.ph

$DB_DRIVER = 'mysql';

$DB_HOST = 'localhost';

$DB_NAME = 'tinderbox';

$DB_USER = 'tinderbox';

$DB_PASS = 'tinderbox';

$DBI_TYPE = 'database';

 

# cat tinderbox.ph

# Configurable options

$TINDERBOX_HOST = 'http://tinderbox-ng.infra.local.ru';

$TINDERBOX_URI = '/tb';

$SUBJECT = 'Example Tinderbox:';

$SENDER = 'Этот адрес электронной почты защищен от спам-ботов. У вас должен быть включен JavaScript для просмотра. ';

$SMTP_HOST = 'mail.example.com';

 

# These should probably be left alone

$LOGS_URI = $TINDERBOX_URI . '/logs';

$SHOWBUILD_URI = $TINDERBOX_URI . '/index.php?action=list_buildports&build=';

$SHOWPORT_URI = $TINDERBOX_URI . '/index.php?action=describe_port&id=';

 

 

# cat webui/inc_ds.php

<?php

$DB_DRIVER = 'mysql';

$DB_HOST = 'localhost';

$DB_NAME = 'tinderbox';

$DB_USER = 'tinderbox';

$DB_PASS = 'tinderbox';

?>

 

# cat webui/inc_tinderbox.php

<?php

# Configurable options

# page title

$tinderbox_name = 'tinderbox-ng.infra.local.ru';

# used in page header

$tinderbox_title = 'Tinderbox-ng.infra.local.ru';

 

# reload interval for "Current And Latest Builds" page while no port is

# building in miliseconds

$reload_interval_latest='300000';

# reload interval for "Current And Latest Builds" page while a port is building

# in miliseconds

$reload_interval_current='60000';

# Define number of shown ports per page

#$list_limit_nr='1000';

 

$wwwrootdir = dirname( __FILE__ );

$rootdir = realpath( $wwwrootdir . '/../..' );

$protocol = isset( $_SERVER['HTTPS'] ) ? 'https' : 'http';

$host = $_SERVER['SERVER_NAME'];

$wwwrooturi = $protocol . '://' . $host;

if ( $_SERVER['SERVER_PORT'] != 80 )

$wwwrooturi .= ':' . $_SERVER['SERVER_PORT'];

$wwwrooturi .= dirname( $_SERVER['SCRIPT_NAME'] );

# Comment out the next line, and uncomment the line after it to enable

# the paefchen frontend template.

#$template_dir = 'default';

$template_dir = 'paefchen';

 

# These should probably be left alone

$pkguri = $wwwrooturi.'/packages';

$pkgdir = $rootdir.'/packages';

$loguri = $wwwrooturi.'/logs';

$logdir = $rootdir.'/logs';

$errorloguri = $wwwrooturi.'/errors';

$errorlogdir = $rootdir.'/errors';

$wrkuri = $wwwrooturi.'/wrkdirs';

$wrkdir = $rootdir.'/wrkdirs';

$templatesdir = $wwwrootdir.'/templates/'.$template_dir;

$templatesuri = $wwwrooturi.'/templates/'.$template_dir;

#$with_timer = 1;

#$with_meminfo = 1;

?>

Инициализируем Tinderbox:

#./tc init

Включаем NFS сервер добавив в /etc/exports "/usr/local/tinderbox -alldirs -maproot=0:0 localhost" (без кавычек)

В /etc/rc.conf

nfs_client_enable="YES"

nfs_server_flags="-u -t -n 20"

rpcbind_enable="YES"

nfs_server_enable="YES"

nfs_reserved_port_only="YES"

 

3. Настройка Apache

# cat /usr/local/etc/apache24/extra/httpd-vhosts.conf

# Virtual Hosts

#

# Required modules: mod_log_config

 

<VirtualHost *:80>

    ServerName tinderbox-ng.infra.local.ru

    AddType application/x-httpd-php .php

    DirectoryIndex index.php

    DocumentRoot /usr/local/tinderbox/scripts/webui/

    Alias /logs "/usr/local/tinderbox/logs/"

    Alias /packages "/usr/local/tinderbox/packages"

    Alias /errors "/usr/local/tinderbox/errors/"

    Alias /wrkdirs/ "/usr/local/tinderbox/wrkdirs/"

    Alias / "/usr/local/tinderbox/scripts/webui/"

    <Directory "/usr/local/tinderbox/">

        Options FollowSymLinks

        Options +Indexes

        AllowOverride all

        Allow from all

        Require all granted

    </Directory>

#/usr/local/tinderbox/scripts/webui/

        <Directory "/usr/local/tinderbox/scripts/webui/">

        Options FollowSymLinks

        AllowOverride all

        Allow from all

        Require all granted

        </Directory>

    <FilesMatch "\.php$">

    SetHandler application/x-httpd-php

    </FilesMatch>

    <FilesMatch "\.phps$">

    SetHandler application/x-httpd-php-source

    </FilesMatch>

</VirtualHost> 

 

4. Использование

Для использования пакетного менеджера pkg, необходимо добавить переменную WITH_PKGNG=yes в /etc/make.conf.

Прежде чем собирать пакеты необходимо создать джайлы (Jail) не путать с jail. В данном случае джаил - это версия FreeBSD. Создание джайла делается командой:

#./tc createJail -j 10.2 -d "FreeBSD 10.2-RELEASE" -D base/release/10.2.0 -u SVN -H svn.FreeBSD.org -P https

ИЛИ ТАК

#./tc createJail -j 10.2 -d "FreeBSD 10.2-RELEASE" -t 10.2-RELEASE -u LFTP -H ftp.freebsd.org

Далее надо создать дерево портов

#./tc createPortsTree -p FreeBSD-ports-test10 -d "FreeBSD ports tree" -u SVN -P https -H svn.FreeBSD.org -D ports/head -w http://svnweb.FreeBSD.org/ports/

И последнее требуется создать билд (Build). Билд - это комбинация дерева портов и джайла:

#./tc createBuild -b corp-resolvers-bind998 -j 10.2 -p FreeBSD-ports-test10

Для регулярно собираемых портов их можно добавить в базу tinderbox для последующего отслеживания:

#./tc addPort -b corp-resolvers-bind998 -d misc/project-rc-bind

Теперь можно приступить непосредственно к сборке портов:

#./tc tinderbuild -b corp-resolvers-bind998 misc/project-rc-bind &

После того, как метапакет будет собран в директории packages/corp-resolvers-bind998 у нас будут все наши пакеты.

unix-way