После сборки пакетов в tinderbox хочется инсталироваться с собственного репозитория pkg repository.
Для начала рассмотрим создание метапакета из собственного порта, а затем как создать свой репозиторий pkg.
Метапакет позволит нам установить кучу пакетов одной командой установки этого метапакета.
Наш метапорт:
# cd /usr/local/tinderbox # cat portstrees/FreeBSD-ports-test10/ports/misc/project-rc-bind/Makefile # NO_BUILD= YES BUILD_DEPENDS= BUILD_DEPENDS+= \ RUN_DEPENDS= DEPENDS= ${PORTSDIR}/net-mgmt/nagios-plugins # Essential software do-install: .include <bsd.port.mk> |
Поясню немного что есть что:
RUN_DEPENDS
В этой переменной перечисляются выполнимые файлы или файлы, от которых зависит работа порта. Это список пар вида path:dir[:target], где path - это имя программы или файла, а dir - каталог, в котором можно найти порт в случае, если его нет в системе, и target - это цель, которую нужно вызвать в этом каталоге. Если path начинается со слэша (/), он воспринимается как файл и его существование проверяется командой test -e; в противном случае предполагается, что это выполнимый файл и для определения того, имеется ли программа в пути поиска пользователя, используется команда which -s.
Например,
RUN_DEPENDS= ${LOCALBASE}/etc/innd:${PORTSDIR}/news/inn \
wish8.0:${PORTSDIR}/x11-toolkits/tk80
проверит, существует ли файл или каталог /usr/local/etc/innd и построит и установит его из подкаталога news/inn дерева портов, если он не будет найден. Он также проверит, имеется ли выполнимый файл с именем wish8.0 в вашем пути поиска, перейдет в подкаталог x11-toolkits/tk80 вашего дерева портов для его построения и установки, если он не будет найден.
BUILD_DEPENDS
В этой переменной перечисляются выполнимые или обычные файлы, которые требуются порту для его построения. Как и RUN_DEPENDS, это список пар path:dir[:target] Например,
BUILD_DEPENDS=unzip:${PORTSDIR}/archivers/unzip
будет проверять наличие выполнимого фала с именем unzip и перейдет в подкаталог archivers/unzip вашего дерева портов для его построения и установки, если последний не будет найден.
DEPENDS
Если имеется зависимость, которая не подпадает ни под одну из вышеперечисленных четырех категорий, или ваш порт требует наличия исходных текстов другого порта в распакованном виде кроме того, что этот порт должен быть установлен, то воспользуйтесь этой переменной. Это список пар dir[:target], потому что, в отличие от предыдущих случаев, ничего не проверяется. Часть target может быть опущена, если она совпадает с DEPENDS_TARGET.
Теперь можно собрать метапакет из порта. Как это сделать подробно указано в статье Установка и настройка tinderbox
Итак, метапакет собран. Остается сделать свой репозиторий, подписать пакеты и распространить пакеты на целевую машину.
Я использую 4096-битный RSA ключ для подписания репозитория пакетов. Ключ создается с помощью команды OpenSSL:
# openssl genrsa -out pkg.key 4096 |
Затем создаем из сгенерированного ключа сертификат для распространения среди машин, использующих репозиторий:
# openssl rsa -in pkg.key -pubout > pkg.cert |
Имя файла сертификата, в моем случае pkg.cert, должно совпадать с именем файла, установленное как PUBKEY в /usr/local/etc/pkg.conf
Затем пакеты сборки Tinderbox подписываем с закрытым ключом RSA:
# pkg repo /usr/local/tinderbox/packages/corp-resolvers-bind998/All/ /path/to/pkg.key |
Готово. Идем на машину клиент:
Правим pkg.conf и обновляем информацию о репозитории пакетов:
# cat /etc/pkg/FreeBSD.conf FreeBSD: { url: "http://tinderbox-ng.infra.local.ru//packages/corp-resolvers-bind998/", mirror_type: "srv", enabled: yes } # pkg update # pkg upgrade # pkg install пакет |