Как настроить систему сборки Poudriere для создания пакетов для ваших серверов FreeBSD

Вступление

Система портов является одним из величайших преимуществ FreeBSD для пользователей, которым нужна гибкость и контроль над своим программным обеспечением. Это позволяет администраторам легко создавать и поддерживать установки на основе исходного кода, используя надежную и предсказуемую систему.

Хотя преимущества этой функции велики, некоторые из наиболее распространенных жалоб на администрирование на основе портов касаются времени и ресурсов, необходимых для компиляции каждого компонента программного обеспечения. Это становится еще более серьезной проблемой, если вы управляете большим количеством серверов, каждый из которых компилирует свои порты. В то время как пакеты FreeBSD предоставляют альтернативу, ускоряющую установку, она жертвует управлением, предоставляемым портами.

Чтобы устранить эту проблему, администраторы могут использовать приложение под названием * poudriere * для создания и поддержки пользовательских пакетов. Технически созданный для сборки пакетов для различных архитектур, + poudriere + часто используется как среда сборки пакетов для создания и размещения пакетов для всей инфраструктуры серверов FreeBSD.

Используя + poudriere +, администраторы могут настраивать программное обеспечение по мере необходимости, используя систему портов и компилировать пакеты для легкой установки и управления программным обеспечением. Любое количество серверов FreeBSD может использовать хост с + poudriere +, установленным в качестве источника пакета, что позволяет им быстро и легко загружать и устанавливать настроенные предварительно скомпилированные исполняемые файлы.

В этом руководстве мы покажем, как настроить сервер с + poudriere + в качестве машины для сборки. Затем мы можем использовать этот сервер в качестве хранилища для пакетов для любых дополнительных серверов. Хотя эта настройка может быть полезна для одного сервера, реальный прирост эффективности виден, когда дополнительные серверы начинают использовать тот же хост `+ poudriere + 'в качестве источника пакета.

Поскольку создание портов является ресурсоемким процессом, возможно, стоит установить его в более мощной системе, чем обычно.

Установите необходимое программное обеспечение для управления портами

Для начала мы установим все необходимые порты.

Как всегда, перед началом любых задач, связанных с портами, мы обновим наше дерево портов, чтобы убедиться, что ссылки в файловой системе свежие:

sudo portsnap fetch update

После обновления дерева портов мы можем начать установку программного обеспечения. Во-первых, нам нужно установить + poudriere + сам. Это находится в категории + ports-mgmt + дерева портов. Для сборки и установки перейдите в этот каталог и используйте + make + для компиляции и установки:

cd /usr/ports/ports-mgmt/poudriere
sudo make install clean

Не стесняйтесь выбирать любой из представленных вариантов. Для стандартной сборки ничего не нужно.

Далее, если он еще не установлен, нам нужно установить порт + portmaster +. Мы будем использовать это, чтобы легко сгенерировать на нашем компьютере список программного обеспечения, которое мы хотим построить + poudriere +. Это также в категории + ports-mgmt +:

cd /usr/ports/ports-mgmt/portmaster
sudo make install clean

Наконец, мы также хотим установить веб-сервер. Это будет служить двум целям. Во-первых, это будет метод, с помощью которого наши машины смогут загружать пакеты, которые мы собираем. Во-вторых, + poudriere + предоставляет веб-интерфейс, чтобы мы могли отслеживать процесс сборки и отслеживать журналы.

Для этого руководства мы будем использовать + nginx в качестве вашего веб-сервера. Это находится в категории + www + дерева портов:

cd /usr/ports/www/nginx
sudo make install clean

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

Когда вы закончите компиляцию и установку программного обеспечения, обязательно переоцените свой PATH, если вы используете оболочки + tcsh + или + csh + по умолчанию:

rehash

Теперь, когда наше программное обеспечение установлено, мы можем приступить к настройке каждого из наших компонентов.

Создать сертификат SSL и ключ

Когда мы собираем пакеты с помощью + poudriere +, мы хотим иметь возможность подписывать их закрытым ключом. Это гарантирует всем нашим компьютерам, что созданные пакеты являются законными и что никто не перехватывает соединение со сборочной машиной для обслуживания вредоносных пакетов.

Для начала мы создадим структуру каталогов для нашего ключа и сертификата. Поскольку все наши дополнительные настройки программного обеспечения находятся в каталоге + / usr / local / etc +, а другое программное обеспечение использует расположение + / usr / local / etc / ssl +, именно здесь мы будем размещать наши файлы.

Мы гарантируем, что у нас есть каталог + ssl, который содержит два подкаталога, называемые` + keys` и + certs +. Мы можем сделать это одной командой, набрав:

sudo mkdir -p /usr/local/etc/ssl/{keys,certs}

Наш закрытый ключ, который должен храниться в секрете, будет помещен в каталог + keys +. Это будет использоваться для подписи пакетов, которые мы будем создавать. Сохранение этой безопасности важно для обеспечения того, чтобы наши пакеты не были подделаны. Мы можем заблокировать каталог, чтобы пользователи без прав root или + sudo + не могли взаимодействовать с каталогом или его содержимым:

sudo chmod 0600 /usr/local/etc/ssl/keys

Каталог + certs + будет содержать наш общедоступный сертификат, созданный с помощью ключа. Таким образом, мы можем оставить разрешения по умолчанию для этого каталога.

Затем мы сгенерируем 4096-битный ключ с именем + poudriere.key + и поместим его в каталог + keys +, набрав:

sudo openssl genrsa -out /usr/local/etc/ssl/keys/poudriere.key 4096

После того, как ключ сгенерирован, мы можем создать открытый сертификат из него, набрав:

sudo openssl rsa -in /usr/local/etc/ssl/keys/poudriere.key -pubout -out /usr/local/etc/ssl/certs/poudriere.cert

Теперь у нас есть компоненты SSL, которые нам нужны для подписи пакетов и проверки подписей. Позже мы настроим наших клиентов на использование сгенерированного сертификата для проверки пакета.

Конфигурирование Poudriere

Теперь, когда у нас есть наш SSL-сертификат и ключ, мы можем начать настраивать + poudriere +.

Основной файл конфигурации находится по адресу + / usr / local / etc / poudriere.conf +. Откройте этот файл с привилегиями + sudo + в вашем текстовом редакторе:

sudo vi /usr/local/etc/poudriere.conf

Файл конфигурации + poudriere + очень хорошо прокомментирован и содержит большинство настроек, которые нам нужно предварительно определить. Мы сделаем несколько конкретных изменений, но оставим большинство из них нетронутыми.

Если ваш сервер FreeBSD работает на DigitalOcean, файловой системой будет UFS. В + poudriere + есть специфичные для ZFS опции, которые мы не должны устанавливать. Чтобы указать, что мы используем UFS, мы должны установить флаг + NO_ZFS + на «да». Найдите и раскомментируйте эту опцию в файле:

NO_ZFS=yes

Если, с другой стороны, ваш сервер использует ZFS, вы можете настроить + poudriere + для использования определенного пула, установив опцию + ZPOOL +. В этом пуле вы можете указать корень, который + poudriere + будет использовать для пакетов, журналов и т. Д. с опцией + ZROOTFS +. Обратите внимание, что эти две опции * не следует * устанавливать, если для опции + NO_ZFS + установлено значение “yes:

NO_ZFS=yes
ZPOOL=
ZROOTFS=

При сборке программного обеспечения + poudriere + использует тип тюрьмы, чтобы отделить систему сборки от основной операционной системы. Затем мы должны заполнить действительный хост, с которого сборочная машина может загрузить программное обеспечение, необходимое для тюрем. Это настраивается с помощью опции + FREEBSD_HOST +.

Эта опция уже должна присутствовать, хотя в настоящее время она не установлена ​​на допустимый хост. Вы можете изменить это на расположение + ftp: // ftp.freebsd.org + по умолчанию или использовать более близкое зеркало, если вы знаете одно из них:

FREEBSD_HOST=

Далее, мы хотим быть уверены, что ваш каталог данных в корне + poudriere установлен правильно. Это контролируется с помощью опции + POUDRIERE_DATA + и должно быть установлено по умолчанию, но мы раскомментируем эту опцию просто для уверенности:

POUDRIERE_DATA=${BASEFS}/data

Следующие параметры, которые мы должны раскомментировать, это параметры + CHECK_CHANGED_OPTIONS + и + CHECK_CHANGED_DEPS +. Первый параметр сообщает + poudriere + о необходимости перекомпилировать пакеты, когда параметры для него изменились. Второй параметр сообщает + poudriere + о необходимости перекомпилировать пакеты, когда зависимости изменились с момента последней компиляции.

Обе эти опции существуют в той форме, в которой мы хотим их видеть в файле конфигурации. Нам нужно только раскомментировать их:

CHECK_CHANGED_OPTIONS=verbose
CHECK_CHANGED_DEPS=yes

Далее мы укажем + poudriere + на ключ SSL, который мы создали, чтобы он мог подписывать пакеты при сборке. Опция, используемая для указания этого, называется + PKG_REPO_SIGNING_KEY +. Раскомментируйте эту опцию и измените путь, чтобы отразить местоположение ключа SSL, который вы создали ранее:

PKG_REPO_SIGNING_KEY=

Наконец, мы можем установить строку + URL_BASE + для имени домена или IP-адреса, по которому ваш сервер может быть доступен. Это будет использоваться + poudriere + для создания ссылок в его выводе, по которым можно щелкнуть. Вы должны включить протокол и завершить значение косой чертой:

URL_BASE=http:///

Когда вы закончите вносить изменения, сохраните и закройте файл.

Создание среды сборки

Далее нам нужно на самом деле построить нашу среду сборки. Как упоминалось ранее, + poudriere + будет создавать порты в изолированной среде с использованием джейлов.

Нам нужно будет создать вашу тюрьму и + poudriere установить FreeBSD внутри. Можно иметь несколько джейлов, каждая с разной версией FreeBSD. Заключенные в тюрьму версии FreeBSD должны быть такими же или старше, чем версия, на которой работает сам сервер. В этом руководстве мы сосредоточимся на одной тюрьме, которая отражает архитектуру и версию хост-системы FreeBSD.

Мы должны выбрать описательное имя для тюрьмы, которую мы создаем. Это важно, поскольку он будет использоваться в нашей конфигурации хранилища на клиентах, что может быть очень важно при сборке для разных версий FreeBSD. Страницы + man + также инструктируют вас избегать использования точек в имени из-за некоторых взаимодействий с другими инструментами. Например, в этом руководстве мы работаем на FreeBSD 10.1 в 64-битной архитектуре, поэтому будем называть это «freebsd_10-1x64».

Мы указываем имя для нашей тюрьмы с помощью + -j + и указываем версию FreeBSD для установки с помощью опции + -v +. Вы можете найти формат поддерживаемых выпусков в столбце «Релизы» таблицы на странице this. Если вы используете + -CURRENT + или + -STABLE + вместо выпуска, вы можете использовать формат, найденный на странице this (например, `+ 11- ТОК + `).

Для наших целей наша команда jail construction будет выглядеть так:

sudo poudriere jail -c -j freebsd_10-1x64 -v 10.1-RELEASE

Это займет некоторое время, поэтому будьте терпеливы. Когда вы закончите, вы можете увидеть установленную тюрьму, набрав:

poudriere jail -l
JAILNAME        VERSION         ARCH  METHOD TIMESTAMP           PATH
freebsd_10-1x64 10.1-RELEASE-p3 amd64 ftp    2015-01-06 20:43:48 /usr/local/poudriere/jails/freebsd_10-1x64

После того, как вы создали джейл, нам нужно будет установить дерево портов. Можно поддерживать несколько деревьев портов для удовлетворения различных потребностей разработки. Мы будем устанавливать единственное дерево портов, которое может использовать наша тюрьма.

Мы можем использовать флаг + -p + для именования нашего дерева портов. Мы будем называть наше дерево «ГОЛОВА», так как оно точно суммирует использование этого дерева («голова» или самая современная точка дерева). Мы будем регулярно обновлять его, чтобы соответствовать самой последней версии доступного дерева портов:

sudo poudriere ports -c -p HEAD

Опять же, эта процедура займет некоторое время, потому что все дерево портов должно быть извлечено и извлечено. Когда он закончится, мы можем просмотреть наше дерево портов, набрав:

poudriere ports -l

После завершения этого шага у нас теперь есть структуры для компиляции наших портов и сборки пакетов. Затем мы можем начать собирать наш список портов для создания и настройки параметров, которые мы хотим для каждой части программного обеспечения.

Создание списка построения портов и настройка параметров порта

При компиляции с помощью + poudriere + мы указываем порты, которые мы хотим построить, при вызове команды сборки. Можно указать порты индивидуально, но это не очень хорошее решение для долгосрочного управления. Вместо этого мы будем создавать список портов, которые мы можем передать непосредственно команде.

Файл create должен перечислить категорию порта, за которой следует косая черта и имя порта, чтобы отразить его расположение в дереве портов, например:

/
/
/

. . .

Любые необходимые зависимости также будут создаваться автоматически, поэтому не беспокойтесь о отслеживании всего дерева зависимостей портов, которые вы хотите установить. Вы можете создать этот файл вручную, но если в вашей базовой системе уже собрано большинство программного обеспечения, вы можете использовать + portmaster +, чтобы создать этот список для вас.

Прежде чем сделать это, обычно рекомендуется удалить ненужные зависимости из вашей системы, чтобы сохранить список портов как можно более чистым. Вы можете сделать это, набрав:

sudo pkg autoremove

После этого мы можем получить список программного обеспечения, которое мы явно установили в нашей системе сборки, используя + portmaster +. Команда + portmaster + может вывести список явно установленных портов (не зависимостей) в правильном формате, используя опцию + - list-originins +.

Мы можем направить этот вывод в + sort +, чтобы расположить в алфавитном порядке список, чтобы упростить поиск элементов. Мы можем вывести результаты в файл в каталоге + / usr / local / etc / poudriere.d +. Мы назовем этот файл + port-list +:

portmaster --list-origins | sort -d | sudo tee /usr/local/etc/poudriere.d/port-list

Просмотрите список. Если есть какие-либо порты, которые вы не хотите включать, удалите связанную с ними линию. Это также возможность добавить дополнительные порты, которые могут вам понадобиться.

Если вы используете определенные опции + make.conf для создания своих портов, вы можете создать файл` + cmake.conf` для каждой тюрьмы в вашем каталоге + / usr / local / etc / poudriere.d +. Например, для нашей тюрьмы мы можем создать файл + make.conf + с таким именем:

sudo vi /usr/local/etc/poudriere.d/-make.conf

Внутри вы можете поместить любые параметры, которые вы хотели бы использовать при построении ваших портов. Например, если вы не хотите создавать какую-либо документацию, примеры, поддержку родного языка или поддержку X11, вы можете установить:

OPTIONS_UNSET+= DOCS NLS X11 EXAMPLES

После этого мы можем настроить каждый из наших портов, который будет создавать файлы с выбранными нами параметрами.

Если вы настроили свои порты в вашей хост-системе, вы можете скопировать конфигурации в + poudriere +, чтобы использовать эти настройки. Для этого создайте новый каталог в каталоге + / usr / local / etc / poudriere.d +, названный в честь вашей тюрьмы, с добавлением + -options + в конце. Для нашего руководства мы можем сделать это, набрав:

sudo mkdir /usr/local/etc/poudriere.d/-options

Теперь вы можете скопировать параметры, которые вы уже использовали в вашей хост-системе, набрав:

sudo cp -r /var/db/ports/* /usr/local/etc/poudriere.d/-options

Если вы выполните вышеуказанный шаг, у вас будет базовая линия для параметров, которые мы будем настраивать, но многие из ваших зависимостей все равно необходимо будет настроить.

Вы можете настроить все, что еще не было настроено, используя команду + options +. Мы должны передать как дерево портов, которое мы создали (используя опцию + -p +), так и тюрьму, для которой мы устанавливаем эти опции (используя опцию + -j +). Мы также должны указать список портов, которые мы хотим настроить, используя опцию + -f +.

Наша команда будет выглядеть так:

sudo poudriere options -j freebsd_10-1x64 -p HEAD -f /usr/local/etc/poudriere.d/port-list

Вы увидите диалоговое окно для каждого из портов в списке и любых зависимостей, у которых нет соответствующих опций, установленных в каталоге + -options +. Спецификации в вашем файле + make.conf + будут предварительно выбраны на экранах выбора. Выберите все параметры, которые вы хотели бы использовать.

Если в будущем вы захотите перенастроить параметры для ваших портов, вы можете повторно запустить указанную выше команду с параметром + -c +. Это покажет вам все доступные параметры конфигурации, независимо от того, делали ли вы выбор в прошлом:

sudo poudriere options -c -j freebsd_10-1x64 -p HEAD -f /usr/local/etc/poudriere.d/port-list

Строительство портов

Теперь мы наконец готовы начать строить порты.

Последнее, что нам нужно сделать, это убедиться, что и наша тюрьма, и дерево портов обновлены. Это, вероятно, не будет проблемой при первом построении портов, так как мы только что создали дерево портов и тюрьму, но хорошо иметь привычку делать это каждый раз, когда вы запускаете сборку.

Чтобы обновить свою тюрьму, введите:

sudo poudriere jail -u -j freebsd_10-1x64

Чтобы обновить дерево портов, введите:

sudo poudriere ports -u -p HEAD

Как только это будет завершено, мы можем начать процесс массовой сборки.

  • Примечание *: это может быть очень длительный процесс. Если вы подключены к вашему серверу через SSH, мы рекомендуем вам установить + screen + и начать сеанс:

cd /usr/ports/sysutils/screen
sudo make install clean

rehash
screen

Чтобы начать сборку, нам просто нужно использовать команду + bulk + и указать все наши отдельные части, которые мы настраивали. Если вы использовали значения из этого руководства, команда будет выглядеть следующим образом:

sudo poudriere bulk -j freebsd_10-1x64 -p HEAD -f /usr/local/etc/poudriere.d/port-list

Это запустит несколько рабочих (в зависимости от вашего файла + poudriere.conf + или количества доступных процессоров) и начнет сборку портов.

В любое время в процессе сборки вы можете получить информацию о ходе выполнения, удерживая клавишу + CTRL + и нажимая + t +:

CTRL-t

Определенные части процесса будут производить больше продукции, чем другие.

Если вам нужно отойти в сторону, вы можете отсоединить сеанс экрана, нажав + CTRL + с помощью + a +, чтобы переместить элемент управления на + screen +, а затем клавишу + d +, чтобы отсоединить сеанс:

CTRL-a d

Если вы хотите вернуться к сеансу, вы можете набрать:

screen -x

Настройка Nginx для обслуживания внешнего интерфейса и репозитория

Пока ваши пакеты собираются, мы можем воспользоваться возможностью настроить Nginx. Откройте другой терминал, отсоедините сеанс + screen, как показано выше, или запустите новое окно` + screen`, набрав + CTRL-a c + (вы можете переключаться между окнами, набирая + CTRL-a n + и ` + CTRL-a p + `).

Веб-сервер будет использоваться для двух разных целей:

  • Он будет служить действительным хранилищем пакетов, которое другие хосты могут использовать для загрузки ваших пользовательских скомпилированных пакетов.

  • Он будет обслуживать веб-интерфейс + poudriere +, который можно использовать для мониторинга процесса сборки.

Мы установили Nginx в начале этого руководства, но не настроили его.

Для начала включите службу, добавив строку + nginx_enable =" YES "+ в файл + / etc / rc.conf +. Это запустит сервер при загрузке и позволит нам использовать обычные команды + service + для управления процессом:

sudo sh -c "echo 'nginx_enable="YES"' >> /etc/rc.conf"

Теперь мы можем настроить файл конфигурации по умолчанию. Откройте его с привилегиями + sudo + в вашем текстовом редакторе:

sudo vi /usr/local/etc/nginx/nginx.conf

В этом файле мы удалим все из блока + server {} + и заменим его собственной конфигурацией. Убедитесь, что вы оставляете соответствующие фигурные скобки («\ {» и «}»), чтобы убедиться, что ваш файл действителен.

В контексте + server + мы можем настроить некоторые основные директивы, чтобы позволить нашему веб-серверу реагировать на обычный HTTP-трафик через порт 80 и отвечать на доменное имя или IP-адрес нашего сервера. Мы также установим корневой каталог документов сервера в веб-каталог + poudriere +, находящийся в + / usr / local / share / poudriere / html +. Измените значение директивы + server_name + ниже, чтобы оно соответствовало доменному имени или IP-адресу вашего сервера:

# http context

. . .

   server {
       listen 80 default;
       server_name ;
       root /usr/local/share/poudriere/html;
   }

}

Далее мы добавим два блока + location.

Хотя базовая директива + root +, которую мы определили выше, будет обрабатывать большую часть веб-интерфейса, нам нужно сообщить Nginx, в каком каталоге мы храним журналы и реальные данные. Для этого Poudriere будет использовать конечную точку + / data +. Все наши журналы записываются в определенный каталог, поэтому мы можем включить директиву + autoindex + для этого местоположения, чтобы мы могли просматривать список журналов.

В конце наш первый блок + location + будет выглядеть так:

# http context

. . .

   server {
       listen 80 default;
       server_name ;
       root /usr/local/share/poudriere/html;

       location /data {
           alias /usr/local/poudriere/data/logs/bulk;
           autoindex on;
       }
   }
}

Это должно заставить наш веб-интерфейс работать правильно (после дополнительной модификации файла + mime.types +, которую мы сделаем через минуту). Затем нам нужно добавить наш второй блок местоположения, который будет использоваться для обслуживания реальных пакетов, которые мы собирали.

Пакеты снова будут храниться в каталоге в + / usr / local / poudriere +, на этот раз в + data / packages +. Мы можем сделать это доступным в расположении + / packages +. Опять же, мы можем включить + autoindex + для просмотра содержимого каталога, что позволяет нам также просматривать файлы в веб-браузере.

После завершения этой последней модификации блок + server + должен выглядеть следующим образом:

#http context

. . .

   server {
       listen 80 default;
       server_name ;
       root /usr/local/share/poudriere/html;

       location /data {
           alias /usr/local/poudriere/data/logs/bulk;
           autoindex on;
       }

       location /packages {
           root /usr/local/poudriere/data;
           autoindex on;
       }
   }
}

Сохраните и закройте файл, когда вы закончите.

Далее мы сделаем одну небольшую модификацию нашего файла + mime.types. С текущими настройками, если вы нажмете на журнал в веб-браузере, он загрузит файл вместо того, чтобы отображать его в виде простого текста. Мы можем изменить это поведение, помечая файлы, оканчивающиеся на + .log +, как простые текстовые файлы.

Откройте файл Nginx + mime.types + с привилегиями sudo в текстовом редакторе:

sudo vi /usr/local/etc/nginx/mime.types

Найдите запись, которая определяет тип содержимого + text / plain + и добавьте + log + в конец текущего списка типов файлов, разделенных пробелом:

. . .

text/mathml                         mml;
text/plain                          txt ;
text/vnd.sun.j2me.app-descriptor    jad;

. . .

Сохраните и закройте файл, когда вы закончите.

Теперь проверьте синтаксис ваших файлов конфигурации, набрав:

sudo service nginx configtest

Если у вас есть какие-либо ошибки, исправьте их, прежде чем продолжить. Если тест конфигурации не сообщает о синтаксических ошибках, запустите Nginx, набрав:

sudo service nginx start

Если у вас включен брандмауэр, не забудьте настроить правила, чтобы разрешить трафик на порт 80 и перезапустить службу.

Теперь вы можете просмотреть веб-интерфейс + poudriere +, перейдя к доменному имени или IP-адресу вашего сервера в веб-браузере:

http://

Вы должны увидеть главную страницу + poudriere +:

изображение: https: //assets.digitalocean.com/articles/freebsd_poudriere/main.png [Poudriere главная страница]

Если вы щелкнете по ссылке, вы сможете увидеть процесс или результаты построения вашего порта. Вы также должны быть в состоянии просмотреть журналы любой сборки, которая завершилась.

Если вы хотите просмотреть свои скомпилированные пакеты в браузере, они должны быть доступны через иерархию, начинающуюся с + / packages +:

изображение: https: //assets.digitalocean.com/articles/freebsd_poudriere/packages.png [репозиторий пакетов Poudriere]

Возможно, вам придется подождать, пока сборка не будет завершена, чтобы увидеть пакеты. Щелкнув по ссылкам, вы увидите скомпилированные пакеты, которые вы создали с помощью команды массового построения + poudriere +.

Настройка клиентов пакета

Теперь, когда у вас собраны пакеты и настроен репозиторий для обслуживания ваших пакетов, вы можете настроить своих клиентов на использование вашего сервера в качестве источника их пакетов.

Настройка сервера сборки на использование собственного репо пакета

Мы можем начать с настройки сервера сборки на использование пакетов, которые он собирал.

Во-первых, нам нужно создать каталог для файлов конфигурации нашего репозитория:

sudo mkdir -p /usr/local/etc/pkg/repos

Внутри этого каталога мы можем создать наш файл конфигурации репозитория. Он должен заканчиваться на + .conf +, поэтому мы назовем его + poudriere.conf +, чтобы отразить его назначение:

sudo vi /usr/local/etc/pkg/repos/poudriere.conf

Мы еще раз определим имя репозитория как + poudriere +. Внутри определения мы укажем место на диске, где хранятся наши пакеты. Это должен быть каталог, который объединяет ваше имя тюрьмы и имя дерева портов с тире. Проверьте свою файловую систему, чтобы быть уверенным. Мы также настроим проверку подписи наших пакетов, указав на сертификат, который мы создали.

В конце ваш файл должен выглядеть примерно так:

poudriere: {
   url: "file:///usr/local/poudriere/data/packages/",
   mirror_type: "srv",
   signature_type: "pubkey",
   pubkey: "/usr/local/etc/ssl/certs/poudriere.cert",
   enabled: yes
}

На данный момент вам нужно принять решение. Если вы хотите prefer ваши скомпилированные пакеты и использовать пакеты, предоставленные основными репозиториями FreeBSD, вы можете установить здесь приоритет, сказав, что он предпочитает пакеты из этого репозитория. Это заставит наш локальный репозиторий иметь приоритет над официальными репозиториями.

Имейте в виду, что смешивание пакетов таким способом может иметь некоторые сложные последствия. Если официальные репозитории имеют версию пакета, которая выше, чем версия вашего локального репозитория, ваш скомпилированный пакет может быть заменен универсальным из официальных репозиториев (пока вы не перекомпилируете с помощью + poudriere + и не переустановите с помощью + pkg +). Кроме того, официальные пакеты могут предполагать, что зависимые пакеты построены определенным образом и могут не работать при смешивании с вашими пользовательскими пакетами.

Если вы решите смешать эти два источника пакетов, будьте готовы тщательно проверять каждую установку, чтобы убедиться, что вы случайно не вызываете нежелательное поведение.

Чтобы смешать пакеты, добавьте настройку «+ priority +» в определение своего репозитория, указав, что локальное хранилище имеет более высокий приоритет:

poudriere: {
   url: "file:///usr/local/poudriere/data/packages/",
   mirror_type: "srv",
   signature_type: "pubkey",
   pubkey: "/usr/local/etc/ssl/certs/poudriere.cert",
   enabled: yes,
   priority: 100
}

Сохраните и закройте файл, когда вы закончите.

Если вы выбрали * only * для установки пакетов, которые вы создали сами (более безопасный маршрут), вы можете пропустить настройку приоритета, но вы захотите отключить репозитории по умолчанию. Вы можете сделать это, создав другой файл репо, который переопределяет файл репозитория по умолчанию и отключает его:

sudo vi /usr/local/etc/pkg/repos/freebsd.conf

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

FreeBSD: {
   enabled: no
}

Сохраните и закройте файл, когда вы закончите.

Независимо от вашего выбора конфигурации, теперь вы должны быть готовы использовать свой репозиторий. Обновите список пакетов, набрав:

sudo pkg update

Теперь ваш сервер может использовать команду + pkg + для установки пакетов из вашего локального репозитория.

Настройка удаленных клиентов для использования репозитория вашего компьютера сборки

Одна из наиболее веских причин для установки + poudriere + на машине для сборки - это использование этого хоста в качестве хранилища для многих других машин. Все, что нам нужно сделать, чтобы сделать эту работу, это загрузить общедоступный сертификат SSL с нашего компьютера сборки и настроить аналогичное определение хранилища.

Чтобы подключиться к нашему хосту сборки с наших клиентских компьютеров, вы должны запустить агент SSH на своем * локальном компьютере *, чтобы сохранить учетные данные ключа SSH.

OpenSSL поставляется с агентом SSH, который можно запустить, набрав на домашнем компьютере:

eval $(ssh-agent)

Далее вам нужно добавить свой SSH-ключ, набрав:

ssh-add

После этого вы можете переслать свои локальные учетные данные SSH на клиентские компьютеры при подключении с помощью флага + -A +. Это позволит вам получить доступ к любому компьютеру с вашего клиентского компьютера, как если бы вы обращались к нему с вашего домашнего компьютера:

ssh -A @

Когда вы находитесь на удаленном клиентском компьютере, первым шагом является создание структуры каталогов (если она не существует) для хранения сертификата. Мы продолжим и создадим каталог для ключей, чтобы мы могли использовать его для будущих задач:

sudo mkdir -p /usr/local/etc/ssl/{keys,certs}

Теперь мы можем подключиться к нашей машине сборки с помощью SSH и передать файл сертификата обратно на нашу клиентскую машину. Поскольку мы перенаправили свои учетные данные SSH, мы должны иметь возможность сделать это без запроса пароля:

ssh freebsd@ 'cat /usr/local/etc/ssl/certs/poudriere.cert' | sudo tee /usr/local/etc/ssl/certs/poudriere.cert

Эта команда подключится к машине сборки с вашего клиентского компьютера, используя ваши локальные учетные данные SSH. После подключения он отобразит содержимое файла сертификата и направит его через туннель SSH обратно на удаленный клиентский компьютер. Оттуда мы используем комбинацию + sudo tee + для записи сертификата в наш каталог.

Как только это будет завершено, мы можем создать структуру каталогов нашего репозитория так же, как мы это делали на самой машине сборки:

sudo mkdir -p /usr/local/etc/pkg/repos

Теперь мы можем создать файл репозитория, очень похожий на тот, который мы использовали на сборочной машине:

sudo vi /usr/local/etc/pkg/repos/poudriere.conf

Различия заключаются в расположении URL и типе зеркала. Опять же, мы можем либо смешать пакеты, либо использовать только наши скомпилированные пакеты. То же самое относится и к источникам смесительной упаковки.

Если вы хотите смешать ваши пользовательские пакеты с пакетами официальных репозиториев, ваш файл должен выглядеть примерно так:

poudriere: {
   url: "http:///packages//",
   mirror_type: "http",
   signature_type: "pubkey",
   pubkey: "/usr/local/etc/ssl/certs/poudriere.cert",
   enabled: yes,
   priority: 100
}

Если вы хотите использовать только ваши скомпилированные пакеты, ваш файл должен выглядеть примерно так:

poudriere: {
   url: "http:///packages//",
   mirror_type: "http",
   signature_type: "pubkey",
   pubkey: "/usr/local/etc/ssl/certs/poudriere.cert",
   enabled: yes

Кроме того, если вы используете только свои собственные пакеты, не забудьте создать еще один файл конфигурации репозитория, чтобы переопределить конфигурацию репозитория FreeBSD по умолчанию:

sudo vi /usr/local/etc/pkg/repos/freebsd.conf

Поместите в файл следующее содержимое, чтобы отключить официальные репозитории:

FreeBSD: {
   enabled: no
}

После того, как вы закончите, обновите базу данных + pkg +, чтобы начать использовать ваши скомпилированные пакеты:

sudo pkg update

Эту процедуру можно повторить на любом количестве клиентских компьютеров FreeBSD.

Восстановление ваших пакетов, когда доступны обновления

Теперь у вас должна быть запущена вся установка + poudriere +. Однако вам потребуется время от времени перестраивать свои пакеты, когда новые обновления становятся доступными, особенно если они связаны с безопасностью.

К счастью, процедура восстановления пакетов довольно проста. Во-первых, вы должны обновить вашу FreeBSD-джейл так, чтобы ваши пакеты были собраны под новейшую операционную систему. Вы можете сделать это, набрав:

sudo poudriere jail -u -j freebsd_10-1x64

Затем вы должны обновить дерево портов, чтобы последняя версия каждого порта была доступна для вашей тюрьмы. Вы можете сделать это, набрав:

sudo poudriere ports -u -p HEAD

После обновления джейла и дерева портов вы можете изменить список портов, если есть какие-либо изменения, которые вы хотите внести:

sudo vi /usr/local/etc/poudriere.d/port-list

Если вам нужно настроить какие-либо параметры + make.conf +, вы можете сделать это, отредактировав файл, связанный с вашей сборкой:

sudo vi /usr/local/etc/poudriere.d/-make.conf

Вы можете проверить наличие новых опций для ваших портов, набрав это:

sudo poudriere options -j freebsd_10-1x64 -p HEAD -f /usr/local/etc/poudriere.d/port-list

Если вы хотите вместо этого просмотреть all опций для ваших портов, вы можете добавить флаг + -c +. Это может быть полезно при устранении неполадок при сборке или во время выполнения:

sudo poudriere options -c -j freebsd_10-1x64 -p HEAD -f /usr/local/etc/poudriere.d/port-list

После того, как вы выполнили вышеуказанные подготовительные действия, вы можете перекомпилировать любые порты, которые были изменены или были обновлены, набрав:

sudo poudriere bulk -j freebsd_10-1x64 -p HEAD -f /usr/local/etc/poudriere.d/port-list

Не стесняйтесь следить за прогрессом в веб-интерфейсе. После компиляции новых пакетов вы можете обновить пакеты на каждом компьютере, набрав:

sudo pkg upgrade

Это позволит вам довольно легко обновить ваши пользовательские пакеты во всей инфраструктуре FreeBSD.

Заключение

В этом руководстве мы рассмотрели, как настроить + poudriere + для компиляции и упаковки пользовательского набора портов как для нашей машины сборки, так и для внешних клиентов. На первый взгляд, этот процесс может показаться длительным, но его довольно просто контролировать, если он запущен и запущен.

Используя + poudriere +, вы можете использовать обе дополнительные системы управления программным обеспечением FreeBSD. Для многих пользователей это лучшее из обоих миров. Система сборки + poudriere + позволяет вам настраивать программное обеспечение по своему усмотрению на одной машине, используя быструю систему + pkg + для реальной установки и управления.

Related