Некоторые замечания перед началом
Так как сборка портов требовательна к ресурсам, то рекомендую выбрать компьютер с миниальными следующими характеристиками:
8-ми ядреный процессор (poudriere может работь в несколько потоков)
32 Гб ОЗУ (сборка будет в TMPFS)
HDD минимум 500 Гб (не SSD) для непосредственно сборки портов. Очень хорошо показала себя конфигурация где на SSD установлена вся система, а на HDD идёт сборка. Можно и на SSD собирать, но эту увеличит его износ и уменьшит время жизни.
Я сделал проще: раздел / — на SSD, а разделы swap и /var — на HDD. То есть, всё что требует скорости — на SSD, всё объёмное — на HDD
Сборка портов занимает время. Лучше всего ставить этот процесс на ночь, а утром неприятно удивиться, что он ещё незакончен.
Предварительная настройка системы
В файл /etc/fstab добавляем строку для подключения файловой системы работающей в оперативной памяти (TMPFS):
obj /usr/obj tmpfs rw 0 0
Монтируем её
mount -a
Проверяем. должно получиться что-то типа:

Где в последней строке видно, что TMPFS подмонтировалась.
Затем создаём файл make.conf и в него добавляем строки:
WRKDIRPREFIX=/usr/obj
DISTDIR = /var/ports/distfiles
options TMPFS
options NULLFS # For poudriere
options PROCFS # For poudriere
options PSEUDOFS # For poudriere
options FDESCFS # For poudriere
options COMPAT_FREEBSD11 # For RustПересобираем ядро, ставим его и перезагружаемся.
Получение портов
Свежую версию портов можно скачать по адресу https://download.freebsd.org/ports/ports/ports.tar.xz
Непосредственно в консоли:
root@pkgs: cd /var
root@pkgs: fetch https://download.freebsd.org/ports/ports/ports.tar.xz
root@pkgs: tar -xvf ports.tar.xz
В результате в каталоге /var появиться папка ports
Установка Poudriere
Ставится из портов и находится в /var/ports/ports-mgmt/poudriere
Ставится стандратно: make install clean
Вместе с нужной системой будет поставлен программный пакет git. Минимальная конфигурация для его нормальной работы такова:

После завершения установки удаляете каталог ports и скачиваете свежую версию командой:
git clone https://git.FreeBSD.org/ports.git /var/ports (процесс довольно долгий)
Затем ставите portmaster, которая находится в каталоге /var/ports/ports-mgmt/portmaster/
Запускаете обновление пакетов из свежеполученных портов командой:
portmaster -ad
В дальнейшем вы можете в файл /etc/crontab добавить строку:
0 4 * * * root git -C /var/ports pull
И каждый день в 4 утра порты будут обновляться. Ну или можете делать это сами командой git -C /var/ports pull
Все порты свежие, можно начинать.
Настройка poudriere
Файл настроек находится в каталоге /usr/local/etc и называется poudriere.conf и выглядит примерно так:
NO_ZFS=yes
FREEBSD_HOST=http://ftp.freebsd.org
RESOLV_CONF=/etc/resolv.conf
BASEFS=/var/poudriere
USE_PORTLINT=no
USE_TMPFS=all
TMPFS_BLACKLIST="rust, grafana, llvm17"
TMPFS_BLACKLIST_TMPDIR=${BASEFS}/data/cache/tmp
DISTFILES_CACHE=/var/ports/distfiles
URL_BASE=http://pkgs.fbsd.site/poudriere
HTML_TRACK_REMAINING=yes
CHECK_CHANGED_OPTIONS=verbose
CHECK_CHANGED_DEPS=yes
NOLINUX=yes
KEEP_OLD_PACKAGES=no
BUILDER_HOSTNAME=pkgs.fbsd.site
PRESERVE_TIMESTAMP=yesИз интересного здесь:
USE_TMPFS=all— собирать пакеты в TMPFS
TMPFS_BLACKLIST="rust, grafana, llvm17" — чтобы собрать эти пакеты нужно больше 32 гб оперативки, так что они собираются как обычно.
Теперь переходим в каталог /usr/local/etc/poudriere.d и создаём там файл make.conf в который добавляем строки:
DEFAULT_VERSIONS+= mysql=9.1 php=8.4 gcc=15 postgresql=17
OPTIONS_SET+=NCURSES OPTIMIZED_CFLAGS THREADS
OPTIONS_UNSET+=BASH BRACKETEDPASTE BROTLI DEBUG DICT DOCS DOXYGEN DTRACE EXAMPLES FONTCONFIG GUI HELP INFO \
IPV6 JIT LMDB MAN MAN3 MANPAGES NLS NTLM PERL_64BITINT PORTS_READLINE PROXY SFTP SMB SUBSHELL TEST TIFF X11 ZSHГде:
DEFAULT_VERSIONS+= версии зависимых пакетов которые используются при сборке нужных нам пакетов. Например, если при сборке порта zabbix7-server вы укажете базу mysql, он соберет mysql8.4. А если указано mysql=9.1 то именно эта версия и будет собрана.
OPTIONS_SET+= опции портов, которые будут отмечены при выполнеии команды make configure. И неважно, отмечена по умолчанию эта опция или нет.
OPTIONS_UNSET+= противоположна опции OPTIONS_SET+=
Создание окружения для сборки нужных нам портов
Для начала нужно создать jail (виртуалку с FreeBSD, в которой и будут собираться порты). Это делается командой:
poudriere jail -c -j default -v 14.3-RELEASE -a amd64
где: ключ -c — создать; -j — имя клетки; -v — версия FreeBSD устанавливаемой в клетку, -a — архитектура. Скачивание, распаковка и установка занимают какое-то время.
В последующем вы периодически будуте запускать команду poudriere jail -u -j default для обновления клетки.
Затем нужно создать дерево портов командой poudriere ports -c -p default. Порты также скачаются и распакаются за какое-то время и будут находиться в каталоге /var/poudriere/ports и называться этот каталог default-default. Его можно удалить и сделать ссылку на основной каталог с портами. Делается это командой ln -s /var/ports /var/poudriere/ports/default-default
Этим вы съэкономите место и время (вы ведь помните, что порты мы настроили на обновление в 4 утра).
Затем в каталоге /usr/local/etc/poudriere.d/ вы создаёте файл default.pkglist и в него записываете все порты, что вам нужно собрать. Синтаксис вот такой:
misc/mc # этот пакет потянет python3.11 ...
net-mgmt/zabbix7-frontend # этот пакет потянет за собой зависимости php84 ...
www/nginx
...
И другие нужные вам программы
Пример файла со списком пакетов для сборки
#Databases
databases/mysql81-server
# Emulators. Здесь мы собираем пакет qemu-guest-agent для связи виртуальной машины с Proxmox
emulators/qemu@guestagent
# Finance
finance/nextcloud-cospend
Командой poudriere options -p default -f /usr/local/etc/poudriere.d/default.pkglist вы задаёте параметры сборки на каждый порт (аналог make config).
Командой poudriere options -c -p default security/samhain вы задаёте параметры сборки на порт samhain и порты от которых он зависит.
Командой poudriere bulk -f /usr/local/etc/poudriere.d/default.pkglist -p default -j default вы запускаете процесс сборки пакетов.
Настройка Nginx
В файл nginx.conf добавьте
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
tcp_nopush on;
keepalive_timeout 30;
server {
listen 80 default_server;
server_name pkgs.fbsd.site;
autoindex on;
location / {
location /packages {
root /var/poudriere/data/packages;
}
root /usr/local/share/poudriere/html;
}
location /data {
alias /var/poudriere/data/logs/bulk;
}
}
Настройка клиентского хоста
Для загрузки пакетов с вашего сервера в файле /etc/pkg/FreeBSD.conf закомментируйте все строки и добавьте:
myrepo: {
url: "http://pkgs.fbsd.site/",
mirror_type: "none",
enabled: yes
}
затем введите команду:
pkg update
Если в ответ увидите
pkg: Repository FreeBSD has a wrong packagesite, need to re-create database
Unable to update repository FreeBSD
Error updating repositories!
то введите:
pkg-static bootstrap -f
Система предложит скачать и установить пакет для управления пакетами заново. Соглашайтесь. Затем снова:
pkg update
pkg upgrade
Система обновит имеющиеся пакеты до последних версий.
И несколько команд для использования:
pkg search vim — собрать пакет vim.
pkg install editors/vim
