freebsd unknown modifier t

Ошибка после обновления портов

FreeBSD No Responses

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

Пытался поставить mc, а в ответ получил:

cd /usr/ports/misc/mc && make install clean

Unknown modifier ‘u’

Unknown modifier ‘u’

Variable NO_OPTIONS is recursive.

Решение выглядит следующим образом.

Отредактируйте файл /usr/ports/Mk/bsd.options.mk (и , если необходимо другие файлы в /usr/ports/Mk/)удалив все

«:u» (case sensitive, without quotes) из этих файлов.

Если вдруг при установке порта начали валится ошибки

Unknown modifier ‘t’
Unknown modifier ‘t’
«/usr/ports/Mk/bsd.port.mk», line 1775: Malformed conditional (defined(USE_LDCONFIG) && $ == «yes»)
Unknown modifier ‘t’
Unknown modifier ‘t’
Unknown modifier ‘t’
«/usr/ports/Mk/bsd.sites.mk», line 957: Malformed conditional (!empty(_PERL_CPAN_ )
Unknown modifier ‘t’
Unknown modifier ‘t’
«/usr/ports/Mk/bsd.port.mk», line 2929: Unclosed conditional/for loop
«/usr/ports/Mk/bsd.port.mk», line 2929: Unexpected end of file in for loop.
«/usr/ports/Mk/bsd.port.mk», line 6708: Unclosed conditional/for loop
«/usr/ports/Mk/bsd.port.mk», line 6708: Unexpected end of file in for loop.
make: fatal errors encountered — cannot continue

то скорее всего у вас слишком старая ОС и слишком новые порты. Выход напрашивается очевидный — обновить ОС. Но не всегда это возможно, а установить что-то хочется, причём свежее да и из портов. Есть один грязный хак (успешно протестирован в боевых условиях только 1 раз. ), который позволяет собирать новые порты на очень старой ОС.

Тестовый стенд: FreeBSD 7.4 amd64 Release

Причина кроется в обновлении мета-файлов в папке /usr/port/Mk именно 20.01.2014. Поэтому, если вы хотите собирать новые порты на старой ОС, очень важно иметь все файлы из этой папки до указанной даты. Любые новые файлы, датированные позже 20.01.2014 в папке /usr/port/Mk будут генерировать разного рода ошибки и не давать собираться НИКАКИМ портам. Скорее всего у вас они уже затёрлить новыми. Тогда выход один — искать машину со старой ОС и вытягивать нужные файлы оттуда. Я собственно так и сделал. После этого никаких ошибок не появлялось и порты успешно собрались:

Примечание.

Но такое помогает не всегда. Вот еще пару советов, которые нашёл в сети:

a) https://svnweb.freebsd.org/ports?view=revision&revision=352986
b)

В 8.3 достаточно обновить make, взяв sources от 8.4, и перейти на pkg.
В шестерке, насколько я понимаю, глухой номер (bad system call).
В семерке возможно, но непросто: https://raw.githubusercontent.com/yaneurabeya/scratch/master/docs/cheatsheets/freebsd

«/usr/ports/Mk/bsd.port.mk» Malformed conditional : 1 комментарий

Хм. Достаточно заменить в двух или трёх файлах иерархии /usr/port/Mk подстановки переменных «:tl» на «:L», а «:tu» на «:U». Подробности смотрите man make, например, для FreeBSD 8.3(и ниже) и FreeBSD 8.4 (и выше).

После 5 мая многие могли в очередной раз столкнуться с багами портов, а именно:
# make
Unknown modifier ‘t’

«/usr/ports/Mk/bsd.port.mk», line 1767: Malformed conditional (defined(USE_RC_SUBR) && $ != «YES»)
Unknown modifier ‘t’

Unknown modifier ‘t’

Unknown modifier ‘t’

«/usr/ports/Mk/bsd.sites.mk», line 957: Malformed conditional (!empty(_PERL_CPAN_ )
Unknown modifier ‘t’

«/usr/ports/Mk/bsd.port.mk», line 2929: Unclosed conditional/for loop
«/usr/ports/Mk/bsd.port.mk», line 2929: Unexpected end of file in for loop.

«/usr/ports/Mk/bsd.port.mk», line 6708: Unclosed conditional/for loop
«/usr/ports/Mk/bsd.port.mk», line 6708: Unexpected end of file in for loop.

make: fatal errors encountered — cannot continue

Это связано с обновлением makefile-ов на новый синтаксис, который не понимает не совсем актуальный make
Решения 3:
1) наиболее правильный. Обновить систему до актуальной версии, то есть 8.4, 9.2.
7 и более ранние в пролёте.
2) поставить bmake, откатив порты через portdowngrade до апреля (если оно стояло), через pkg install bmake (если использовался pkgng) или собрать на другой машине пакет с ним
потом заменить системный make
# mv /usr/bin/make /usr/bin/make.old
# ln /usr/local/bin/bmake /usr/bin/make
3) поддерживать всю систему пакетов самому

Есть ещё 4 метод — перейти на линукс, там нет портов и проблем с ними 🙂

Оцените статью