perl & freebsd ports
2014-09-09 14:39Столкнулся с необходимостью поставить дополнительный модуль Perl (и не один) на FreeBSD-9, на которую perl-5.14.2 был установлен до 12.06.2013. До того момента Perl в FreeBSD использовал структуру каталогов, в которой пути включали в себя его версию в формате "major.minor.patchlevel", а после стал использовать формат "major.minor" (см. запись 20130612 в /usr/ports/UPDATING).
Кроме того, 20131120 в портовых версиях Perl включили поддержку тредов по умолчанию, а 20140214 дефолтную версию сменили с 5.14 на 5.16. После этого просто так не доставить модуль ни пакетом (пакеты собраны для тредового 5.16 вместо бестредового 5.14), ни из портов - структура каталогов несовместима. Либо пересобирать весь боевой jail, в котором кроме целевых приложений, работающих с Perl и PHP, ничего больше и нету - и тратить кучу времени на разборки с новыми версиями ВСЕГО, обрабатывая всё напильником заново. Либо вручную обеспечить совместимость портов со старой структурой каталогов, после чего все перловые модули из портов устанавливаются легко и непринужденно.
Для этого нужно сделать всего две вещи:
- Добавить в
/etc/make.confвыделенные строки:# added by use.perl 2013-03-15 15:52:49 PERL_VERSION= 5.14.2 SITE_PERL_REL= lib/perl5/site_perl/${PERL_VERSION} MANPAGES+= ${PREFIX}/lib/perl5/${PERL_VERSION} MANDIRS+= ${PREFIX}/lib/perl5/${PERL_VERSION} MAN3PREFIX= ${PREFIX}/lib/perl5/${PERL_VERSION} - Пропатчить
/usr/ports/Mk/Uses/perl5.mk:--- perl5.mk.orig 2014-09-08 09:34:29.000000000 +0400 +++ perl5.mk 2014-09-08 12:21:51.000000000 +0400 @@ -155,7 +155,7 @@ PLIST_SUB+= PERL_VERSION=${PERL_VERSION} \ PERL_VER=${PERL_VER} \ PERL_ARCH=${PERL_ARCH} \ - PERL5_MAN3=lib/perl5/${PERL_VER}/man/man3 \ + PERL5_MAN3=lib/perl5/${PERL_VERSION}/man/man3 \ SITE_PERL=${SITE_PERL_REL}
Совершенно непонятно, что мешало portmgr@ оставить этот слой совместимости и не заставлять народ всё переставлять без необходимости.