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 у нас будут все наши пакеты.