Poudriere (фр. пороховая бочка) – удобное средство для полной автоматизации репозитория FreeBSD. Работает как с pkg_* так и с pkgng. Все пакеты poudriere собирает во временных клетках, что бы не навредить целевой системе. Работает только на мастер-серверах из-за использования jail. Из дополнительных возможностей – возможность поддерживать одновременно репозитории для разных версий и архитектур FreeBSD.
Установка
Устанавливается из портов. Особых замечаний нет, всё происходит по-умолчанию.
# cd /usr/ports/ports-mgmt/poudriere
# Make install clean
Настройка
Директории pouriere. Их две, первая /usr/local/poudriere содержит данные (клетки, порты, откомпилированные пакеты) вторая – настройки и /usr/local/etc/poudriere.d. Далее настраиваем основной конфиг /usr/local/etc/poudriere.conf. Он хорошо закомментирован, однако лучше я напишу несколько пояснений.
NO_ZFS=yes # Не использовать ZFS - да, не использовать
FREEBSD_HOST=http://ftp.freebsd.org # Пакеты берём отсюда
RESOLV_CONF=/etc/resolv.conf # Файл resolv
BASEFS=/usr/local/poudriere # Папка с данными
USE_PORTLINT=no Использовать portlint или нет
USE_TMPFS=yes # Использовать tmpfs
DISTFILES_CACHE=/usr/ports/distfiles # Кеш дистфайлов
CHECK_CHANGED_OPTIONS=verbose # проверять изменены ли опции сборки пакетов (если да, то будет пересборка пакета при изменении опций)
CHECK_CHANGED_DEPS=yes # проверять изменялись ли зависимости пакета
PKG_REPO_SIGNING_KEY=/etc/ssl/keys/repo.key # Ключик. Можно и без него
PREPARE_PARALLEL_JOBS=4 # Число параллельных операций (сборок, билдеров)
NOLINUX=yes # Без Linux
Алгоритм работы poudriere примерно такой: создаётся отдельное дерево портов, и клетка. Далее происходит сборка пакетов в соответствии с выбранным портом. Если порт не указан, то будет использоваться по-умолчанию.
Создаём дерево портов и клетку
Как сказано выше, пакеты собираются в клетках с указанием дерева портов. Имена клетки и портов обязательно должны совпадать, будьте внимательны при их создании! Если в будущем при сборке не указывать название дерева портов, то сборка будет происходить из стандартных портов poudriere. По этому, если они ещё не созданы, их будет необходимо создать.
Создание дерева портов
Ключ -c означает создать, -p имя порта
# poudriere ports -c -p FreeBSD-10.1
Создадим дерево портов по-умолчанию:
# poudriere ports -c -p default
Используется в том случае, если мы начнём сборку, не указав специализированные порты.
Создание клетки
Ключ -c означает создать, -j означает имя клетки, -v – версия FreeBSD, -a – архитектуру
# poudriere jail -c -j FreeBSD-10.1 -v 10.1-RELEASE -a amd64
Настройка собираемых пакетов
Poudriere позволяет делать сборку как всего дерева портов, так и по отдельности. Все порты нам пока не нужны (однако далее я всё-таки напишу как это сделать).
Что собирать
Соберём только то, что нам необходимо для работы. Для этого создадим файл
# touch /usr/local/etc/poudriere.d/pkglist.txt
И на каждой новой строчке вставим имена необходимых пакетов. Например, правильное содержание файла:
www/apache24
www/nginx
www/mod_php56
lang/php56
lang/php56-extensions
devel/pcre
devel/apr1
shells/bash
То есть, правильный формат файла – порт/имя_пакета . Никакие другие параметры вписывать нельзя.
Настройка опций компиляции
Само собой, опции компиляции по-умолчанию много кому не подойдёт. Для этого у Poudriere предусмотрена специальная утилита, которая позволяет задавать параметры сборки на каждый пакет. Сделать это необходимо один раз, после чего в папке /usr/local/etc/poudriere.d/ появится папка options, которая будет содержать параметры компиляции для каждого собираемого порта (будущего пакета). Если этого не делать, то компиляция может происходить каждый раз. Нам же нужно, что бы это происходило только тогда, когда обновился порт для определённого пакета.
Для того, что бы задать параметр сборки для отдельного пакета. При выполнении команды, описанной ниже, появится диалоговое псевдо-графическое окно, аналогичное make config. Для этого нужно выполнить:
# poudriere options -c lang/php56-extensions
Однако, мы имеем файл со списком пакетов, и задавать вручную на каждый пакет опции командой не совсем удобно. Для этого, укажем для poudriere options файл, и нам будет предложено ввести параметры сборки для каждого указанного в файле пакета. Параметр -c означает предлагать ввести параметры в любом случае, даже если они уже заданы.
# poudriere options -сf /usr/local/etc/poudriere.d/pkglist.txt
Обновление портов и сама сборка пакетов
Если все предыдущие шаги выполнены успешны, можно начинать сборку пакетов. Каждый раз перед этой процедурой рекомендую обновлять порты. Делается это в специальной изолированной среде и не может навредить целевой системе. Тоже самое касается и непосредственной компиляции пакетов.
Обновим порты. Параметр -p означает название дерева портов, -u – update
# poudriere ports -p FreeBSD-10.1 -u
Начнём сборку пакетов. Опция -f означает, что мы будем собирать пакеты, указанные в нашем файле, который мы подготовили в предыдущих шагах. Параметр -p означает имя дерева портов, -j имя джейла. Имена клетки и портов обязательно должны совпадать, будьте внимательны при их создании!
poudriere bulk -f /usr/local/etc/poudriere.d/pkglist.txt -p FreeBSD-10.1 -j FreeBSD-10.1
После выполнения этой команды начнётся сборка. За её прогрессом можно наблюдать из консоли, вывод достаточно информативен. Если не хватает информации, и хочется больше – можно нажать сочетание клавиш Ctrl+t. После отработки команды, poudriere выдаст небольшой отчёт о количестве собранных пакетов, о пакетах с ошибками, если они есть и прочую необходимую информацию.
Когда сборка закончится, все пакеты будут доступны в папках /usr/local/poudriere/data/packages/{имя клетки которая была создана для сборки в poudriere }. Папка будет в точности повторять структуру официального репозитория FreeBSD, и включать необходимые для клиентов файлы – meta.txz, packagesite.txz и другие. Эти файлы будут генерироваться при каждой сборке. Для обновления клиентов вполне достаточно сделать эту папку видимой из веб сервера, настроив autoindex в Apache или nginx. При использовании опции -f <file> пакеты будут собираться при условии, если они не были до этого собраны, или если обновилось соответствующая ветка порта. Можно использовать параметр -c который будет собирать пакеты в любом случае, однако по непонятной причине очень часто после использования опции -c при сборке, в следующий раз будет пересобираться весь список пакетов. По этому пользоваться опцией я рекомендую с осторожностью.
Настройка веб-интерфейса
Poudriere по умолчанию содержит удобный и функциональный веб-интерфейс, который будет удобно для контроля сборки пакетов, просмотра статуса, и выгрузки ошибок. Для его настройки не нужно ничего качать, настраивать и конфигурировать – нужно просто настроить конфиг для веб-сервера. Не нужен даже php, система работает на html + динамической выгрузке данных из json. Работающий пример можно посмотреть тут: http://poudriere.ls1.ru/
Конфиг для nginx:
server {
listen 192.168.102.250:80;
server_name poudriere.ls1.ru;
# Point to the web-fronted
location / {
root /usr/local/share/poudriere/html/;
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/local/www/nginx-dist;
}
# This location is used by the web-interface
location /data {
alias /usr/local/poudriere/data/logs/bulk;
autoindex on;
}
# Use this as the base URL to serve packages via http
location /packages {
root /usr/local/poudriere/data/;
index index.html;
}
}
Автоматизировать процесс
Поскольку все пакеты заранее сконфигурированы, то сборку можно автоматизировать, добавив задание в /etc/crontab на обновление и сборку портов:
0 0 * * * root /usr/local/bin/poudriere ports -p FreeBSD-10.1 -u
0 0 * * * root /usr/local/bin/poudriere bulk -f /usr/local/etc/poudriere.d/pkglist.txt -p FreeBSD-10.1 -j FreeBSD-10.1
Полезные команды и опции
Poudriere хоть и работает с jail, но jls тут бесполезен. Для просмотра имеющихся джейлов для сборки пакетов, можно ввести команду:
# poudriere jail -l
Аналогично для просмотра портов:
# poudriere ports -l
Как обновляться
Для настройки репозитория на конечной системе (пока только 10.1):
# ee /etc/pkg/FreeBSD.conf
FreeBSD: {
url: http://mirror.ls1.ru
enabled: true,
}
После этого сделать:
# pkg upgrade
Или если не хочется отвечать на вопрос, можно сделать автоматически:
# env ASSUME_ALWAYS_YES=YES /usr/sbin/pkg bootstrap
Система полностью готова к работе с репозиторием, можно ставить и обновлять из него пакеты.
Recent Comments