/usr/ports/UPDATING
2013-06-12
Affects: users of lang/perl* and any port that depends on it
Author: az@FreeBSD.org
Reason:
lang/perl5.12 has been upgraded from version 5.12.4 to 5.12.5
lang/perl5.14 has been upgraded from version 5.14.2 to 5.14.4
lang/perl5.16 has been upgraded from version 5.16.2 to 5.16.3
The directory structure where Perl is installed has also been modified:
"major.minor" is now used instead of "major.minor.patchlevel".
The "perl-after-upgrade" script has been removed.
Please rebuild all Perl ports and all ports that depend on it:
# portmaster -r perl
or
# portupgrade -rf perl
or
# pkg install -fR perl
Что это значит?
1) Изменилась структура каталогов
Было 5.10.1, стало просто 5.16, поэтому при обновлении nginx например можно поймать
/usr/local/etc/rc.d/nginx reload
Performing sanity check on nginx configuration:
Can't locate nginx.pm in @INC (@INC contains: /usr/local/lib/perl5/5.10.1/BSDPAN /usr/local/lib/perl5/site_perl/5.10.1/mach /usr/local/lib/perl5/site_perl/5.10.1 /usr/local/lib/perl5/5.10.1/mach /usr/local/lib/perl5/5.10.1 .).
BEGIN failed--compilation aborted.
nginx: [alert] perl_parse() failed: 2
nginx: configuration file /usr/local/etc/nginx/nginx.conf test failed
Тогда как сам модуль теперь оказывается в
/usr/local/lib/perl5/site_perl/5.10/mach/nginx.pm
Совсем простое решение:
cd /usr/local/lib/perl5/site_perl/5.10/
cp -rp 5.10/* 5.10.1/
rm -rf 5.10
ln -s 5.10.1 5.10
Или вариант чуть сложнее
cd /usr/ports
svn diff -c 320679 Mk/bsd.perl.mk > ~/patch-r320679
patch -R < ~/patch-r320679
после этого пересобрать nginx
1а) Ну и как следствие, больше нету perl-after-upgrade
2) 5.8 и 5.10 убраны полностью (в марте еще)
поэтому для установки этих версий лучше использовать App::perlbrew + Carton для модулей, и зафиксировать версии модулей.
3) Как всегда, проблемы с переходом версий
3а) пока ничего не обновляли
Хоть и указано делать что-то типа portmaster -r perl, можно получить не ту версию которую хотели, поэтому будет правильнее сначала сделать
cd /usr/ports/lang/perl5.16 (например)
make
echo 'pkg_deinstall -f perl > ~/perl-up 2>&1' | sh
это универсальная конструкция, потому что например csh не умеет 2>&1 и штатно этого не сделать.
Хотя можно перед удалением просто
pkg_info -a -q -o | egrep "/p5-" > ~/perl-up
Эти варианты будут работать даже после ручного обновления перла, до этого можно еще сделать
pkg_info -Rq perl-\*
покажет все зависимости, и все эти пакеты надо будет пересобрать.
Можно попробовать в /etc/make.conf заменить версию перла на нужную, и после этого сделать portmaster -r perl
Есть ещё вариант
portmaster -o lang/perl5.16 lang/perl5.10
но у меня -о вызывает вечно какие-нибудь проблемы.
3б) если уже обновили lang/perl
pkg_info | grep "^p5-" | awk '{print $1}' | xargs portmaster -D
В любом случае нужно быть готовым к тому, что работы займут несколько часов и что-нибудь может сломаться.
Комментариев нет:
Отправить комментарий