null

Переопределение опций сборки для портов

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

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

Частично эту проблему можно решать используя общий репозиторий для /var/db/ports, таким образом можно один раз настроить каждый отдельный порт на одной системе, а на остальных системах будут использоваться уже сохранённые настройки. Это удобно до тех пор, пока на всех системах опции для портов идентичные. А что делать, если на некоторых из них необходимо использовать какие-то другие настройки?

Раньше эта проблема решалась с использованием примерно таких костылей в /etc/make.conf:

.if ${.CURDIR} == "/usr/ports/devel/subversion"
WITH_MOD_DAV_SVN=yes
.endif

Но с наступлением optionsng данное решение не работает. Согласно документации для /etc/make.conf существуют опции:

OPTIONS_SET=SOME_OPTIONS
OPTIONS_UNSET=SOME_OPTIONS
uniquename_SET=SOME_OPTIONS
uniquename_UNSET=SOME_OPTIONS
	

Но если конфигурирование порта уже было выполнено, то они не работают. Что же делать?

Решение появилось в портах 29 апреля в r316825, за что большое спасибо Baptiste Daroussin, и теперь доступны форсированные опции:

OPTIONS_SET_FORCE=SOME_OPTIONS
OPTIONS_UNSET_FORCE=SOME_OPTIONS
uniquename_SET_FORCE=SOME_OPTIONS
uniquename_UNSET_FORCE=SOME_OPTIONS

которые переопределяют настройки в любом случае.

Таким образом, если на конкретной машине для subversion необходимо разрешить сборку модуля для apache, то в /etc/make.conf необходимо добавить:

subversion_SET_FORCE=MOD_DAV_SVN

А если мы хотим гарантированно отключить использование HAL для всех портов, то пригодится такая строка:

OPTIONS_UNSET_FORCE=HAL

P.S. Для получения uniquename можно воспользоваться командой:

make -C /usr/ports/path_to/port -VUNIQUENAME

 

Коротко о себе:

Работаю в компании Tune-IT и тьютором кафедры Вычислительной техники в СПбГУИТМО.

Очень люблю команду cat, core solaris и IPv6.

Ещё на эту же тему:

SSLH: Запускаем SSH, OpenVPN, HTTPS, Socks5 и MTProto-proxy на 443 порту
Запускаем OpenVPN, HTTPS, SSH и Socks5 на одном порту
Порт BigBlueButton для FreeBSD
Портирование OpenIPMI на FreeBSD
Резервное копирование мобильного телефона
Просмотр IPTV через WiFi
Создание собственного VFS модуля для Samba
Интеграция JasperReports в проект на Spring Boot и JSF (PrimeFaces)
Блог
FreeBSD: jumbo frame на агрегированных интерфейсах