Понадобилось мне однажды установить perl-модуль DBD::ODBC. Хотя в перле я разбираюсь как свинья в апельсинах, тем не менее я знаю о существовании единого репозитория CPAN. В то же время я понимаю боль управления зависимостями и плюшки, которые нам приносят системы управления пакетами. В портах gentoo DBD-ODBC не оказалось. Гугление по данному вопросу наводит на проекты g-cpan и cpanplus.

Будем использовать g-cpan.

Ставим.

sudo emerge -av --quiet g-cpan

Создаём оверлей, в который g-cpan будет класть генерируемые ebuild.

sudo mkdir -p /usr/local/portage-overlays/gcpan/metadata
echo 'masters = gentoo' | sudo tee -a /usr/local/portage-overlays/gcpan/metadata/layout.conf

Добавляем переменные окружения:

echo 'PORTDIR_OVERLAY="/usr/local/portage-overlays/gcpan ${PORTDIR_OVERLAY}"' | sudo tee -a /etc/portage/make.conf
echo 'GCPAN_OVERLAY=/usr/local/portage-overlays/gcpan' | sudo tee -a /etc/portage/make.conf

Не знаю уж почему, но мой g-cpan не захотел выгребать эти переменные из make.conf, пришлось указать через переменные окружения:

sudo PORTDIR=/usr/portage PORTDIR_OVERLAY=/usr/local/portage-overlays/gcpan GCPAN_OVERLAY=/usr/local/portage-overlays/gcpan g-cpan -gv DBD::ODBC

Как водится с первого раза не получилось. Сказав, что есть зависимость от DBI, который должен быть собран, g-cpan остановился. Ок, поставим DBI вручную:

sudo emerge -av --quiet -1 DBI

Вот теперь получилось. В оверлее gcpan появились perl-gcpan/DBD-ODBC и perl-gcpan/Test-Version.

Добавляем в /etc/portage/package.keywords.

# required by perl-gcpan/Test-Version-1.004001::x-gcpan
# required by perl-gcpan/DBD-ODBC-1.50::x-gcpan
# required by DBD-ODBC (argument)
=dev-lang/io-2011.09.12-r2 ~amd64
# required by perl-gcpan/Test-Version-1.004001::x-gcpan
# required by perl-gcpan/DBD-ODBC-1.50::x-gcpan
# required by DBD-ODBC (argument)
=dev-perl/File-Find-Rule-Perl-1.130.0 ~amd64

Устанавливаем DBD-ODBC.

sudo einstall -av --quiet DBD-ODBC

Стойте! Нам же нужна версия с Юникодом. Для этого Makefile.PL должен быть передан параметр -u. Генерируемый G-CPAN ebuild наследует eclass perl-module. В исходнике видна переменная myconf, значение которой передаётся прямо Makefile.PL на этапе src_configure(). Таким образом в полученном достаточно немножечко поменять полученный ebuild, чтобы передать параметр -u - добавить строчку

myconf="-u"
  • ???
  • ???
  • PROFIT!!!

Comments

comments powered by Disqus