Шпаргалка - сборка пакетов для систем FreeBSD

Постановка задачи

Требуется настроить систему сборки пакетов для различных версий системы FreeBSD для бинарного обновления пакетов на текущих рабочих системах. Преимущества перед сборкой из портов:

  • можно заранее протестировать сборку пакетов, в случае краха сборки целевой сервер не пострадает
  • есть «слабые» сервера, на которых сборка из портов займет длительное время
  • на идентичных серверах сборка, настройка options производится один раз непосредственно на сервере сборке пакетов

Выбор инструмента

poudriere полностью отвечает требованиям, описанным в постановке задачи.

poudriere оперирует следующими элементами:

  • jail - создает jail под различные версии и архитектуры (amd64/i386)
  • ports - создает дерево портов, их количество не ограничено
  • options - выполняет настройку конфигураций для сборки в ранее созданном дереве портов
  • bulk - сборка пакетов в указанном jail, используя ранее созданное дерево портов

Установка poudriere

portmaster ports-mgmt/poudriere

Настройка poudriere

Мой конфиг /usr/local/etc/poudriere.conf

NO_ZFS=yes
FREEBSD_HOST=ftp://ftp.freebsd.org/
RESOLV_CONF=/etc/resolv.conf
BASEFS=/usr/local/poudriere
USE_PORTLINT=no
USE_TMPFS=yes
DISTFILES_CACHE=/usr/ports/distfiles
CHECK_CHANGED_OPTIONS=verbose
CHECK_CHANGED_DEPS=yes
PARALLEL_JOBS=4
WRKDIR_ARCHIVE_FORMAT=txz
NOLINUX=yes
PKG_REPO_SIGNING_KEY=/etc/ssl/keys/fbsdu.key

Создадим ключи для проверки целостности наших пакетов

mkdir -m 700 /etc/ssl/keys/
cd /etc/ssl/keys/
openssl genrsa -out fbsdu.key 2048
chmod 0400 fbsdu.key
openssl rsa -in fbsdu.key -out fbsdu.pub -pubout

Создадим jail

poudriere jail -c -j brick -v 9.2-RELEASE -a amd64

Создадим дерево портов

poudriere ports -c -p brick

Настроим конфигурации сборки портов

mkdir -p /usr/local/etc/poudriere.d/buildlists
poudriere options -cf /usr/local/etc/poudriere.d/buildlists/brick

Файл /usr/local/etc/poudriere.d/buildlists/brick содержит список портов, для которых требуется собрать пакеты. Зависимости подтянутся автоматически. С рабочей системы, для которой требуется собрать пакеты, можно получить список установленных пакетов командой:

portmaster --list-origins | sort -d 

Соберем пакеты, создадим репозиторий

poudriere bulk -f /usr/local/etc/poudriere.d/buildlists/brick -p brick -j brick

После успешной сборки мы получим репозиторий в формате pkgng, доступный в /usr/local/poudriere/data/packages/brick-brick/

Полезно использовать свой make.conf для сборки пакетов, для этого создайте файл /usr/local/etc/poudriere.d/brick-make.conf
Мой /usr/local/etc/poudriere.d/brick-make.conf содержит:

## default for all
OPTIONS_UNSET=ALTQ GAMES INET6 INET6_SUPPORT PROFILE X11 NLS QT4 QT5 GTK1 GTK2 GTK3

## default versions
DEFAULT_VERSIONS=   php=53

## Ports
MASTER_SITE_OVERRIDE?=${MASTER_SITE_BACKUP}
MASTER_SITE_PERL_CPAN=ftp://cpan.tomsk.ru/modules/by-module/%SUBDIR%/
MASTER_SITE_OVERRIDE = http://bsd.d4m.in/

## pkg
WITH_PKGNG=YES
WITH_BDB_VER=5

## php
DEFAULT_PHP_VER?=53

Действия по расписанию

Обновление портов, сборку новых пакетов можно автоматизировать, добавив следующие команды в крон:

poudriere ports -p brick -u
poudriere bulk /usr/local/etc/poudriere.d/buildlists/brick -p brick -j brick

Настройка репозитория для целевых машин

Пакеты для целевых машин будут доставляться по протоколу http, для этого необходимо поднять и настроить веб-сервер на системе сборки пакетов. Будем считать, что веб-сервер у нас уже поднят и каталог /usr/local/poudriere/data/packages/brick-brick/ доступен по адресу http://fbsdu/brick-brick/

Выполним на целевых машинах

Скопируйте по защищенному каналу (sftp/scp) открытый ключ /etc/ssl/keys/fbsdu.pub с сервера сборки пакетов на целевые машины в /usr/local/etc/pkg/repos/fbsdu.pub

mkdir -p /usr/local/etc/pkg/repos
chown root:wheel /usr/local/etc/pkg/repos/fbsdu.pub
chmod 0400 /usr/local/etc/pkg/repos/fbsdu.pub

Создадим файл /usr/local/etc/pkg/repos/fbsdu.conf

fbsdu: {
  url: http://fbsdu/brick-brick/
  enabled: true,
  signature_type: "pubkey",
  pubkey: "/usr/local/etc/pkg/repos/fbsdu.pub"
}

Обновим настройки

pkg update

Обновим все пакеты, доступные из нашего репозитория

pkg upgrade

Ссылки

Комментарии

 
blog/2014/09/10-шпаргалка_-_сборка_пакетов_для_систем_freebsd.txt · Последние изменения: 2014/10/06 13:14 — Антон Бугреев · []