На FreeBSD 9.0 при попытке очистки каталога с портами – вдруг оказалось, что утилита make
уже не работает:
# portsclean -C Unknown modifier 't' Unknown modifier 't' Unknown modifier 't' Unknown modifier 't' Unknown modifier 't' "/usr/ports/Mk/bsd.sites.mk", line 958: Malformed conditional (!empty(_PERL_CPAN_ID) && ${_PERL_CPAN_FLAG:tl} == "cpan") Unknown modifier 't' "Mk/bsd.port.mk", line 2929: Unclosed conditional/for loop "Mk/bsd.port.mk", line 2929: Unexpected end of file in for loop. "Mk/bsd.port.mk", line 6711: Unclosed conditional/for loop "Mk/bsd.port.mk", line 6711: Unexpected end of file in for loop. 1 open conditional: at line 1179 (evaluated to true) make: fatal errors encountered -- cannot continue /usr/local/lib/ruby/site_ruby/1.9/pkgtools/portsdb.rb:237:in `join': can't convert nil into String (TypeError) from /usr/local/lib/ruby/site_ruby/1.9/pkgtools/portsdb.rb:237:in `index_file' from /usr/local/lib/ruby/site_ruby/1.9/pkgtools/portsdb.rb:247:in `db_dir=' from /usr/local/lib/ruby/site_ruby/1.9/pkgtools/portsdb.rb:167:in `setup' from /usr/local/lib/ruby/site_ruby/1.9/pkgtools/pkgtools.rb:242:in `init_pkgtools_global' from /usr/local/sbin/portsclean:134:in `block in main' from /usr/local/lib/ruby/1.9/optparse.rb:882:in `initialize' from /usr/local/sbin/portsclean:70:in `new' from /usr/local/sbin/portsclean:70:in `main' from /usr/local/sbin/portsclean:727:in `<main>'
Одно из решений – установка утилиты bmake
– не помогло, но стоит озвучить и его.
Устанавливаем пакет (т.к. из портов ничего установить нельзя):
# pkg_add -r bmake
В случае возникновения ошибки при поиске пакета – решение в статье Error: Unable to get ftp://ftp.freebsd.org/pub/FreeBSD/ports/i386/packages-9.0-release/.
Делаем резервную копию старого make
:
# mv /usr/bin/make /usr/bin/make.old
И создаём линк с утилиты bmake
на make
:
# ln /usr/local/bin/bmake /usr/bin/make
Но тут тоже получилась ошибка:
# portsclean -C /usr/bin/make: Undefined symbol "_ThreadRuneLocale"/usr/local/lib/ruby/site_ruby/1.9/pkgtools/portsdb.rb:237:in `join': can't convert nil into String (TypeError) from /usr/local/lib/ruby/site_ruby/1.9/pkgtools/portsdb.rb:237:in `index_file' from /usr/local/lib/ruby/site_ruby/1.9/pkgtools/portsdb.rb:247:in `db_dir=' from /usr/local/lib/ruby/site_ruby/1.9/pkgtools/portsdb.rb:167:in `setup' from /usr/local/lib/ruby/site_ruby/1.9/pkgtools/pkgtools.rb:242:in `init_pkgtools_global' from /usr/local/sbin/portsclean:134:in `block in main' from /usr/local/lib/ruby/1.9/optparse.rb:882:in `initialize' from /usr/local/sbin/portsclean:70:in `new' from /usr/local/sbin/portsclean:70:in `main' from /usr/local/sbin/portsclean:727:in `<main>'
Решение которое действительно помогло – установка на другой машине FreeBSD 9.2 (или использовать имеющуюся, в данном случае она была), и копирование с неё новой make
.
Удаляем симлинк:
# unlink /usr/bin/make
Со второй машины копируем:
# scp /usr/bin/make [email protected]:/home/setevoy Password: make 100% 397KB 396.9KB/s 00:00
Копируем её в каталог /usr/bin
:
# mv /home/setevoy/make /usr/bin/make
После этого – всё заработало:
# portsclean -C Cleaning out /usr/ports/*/*/work... done.
Но вообще – конечно, надо обновлять систему: FreeBSD: обновление 8.2 RELEASE до 8.3 RELEASE