Сборка пакетов с модулями Perl
В мире существует огромное множество модулей для языка Perl, большинство которых находится на сайте CPAN. Чтобы упростить установку этих модуле в РОСЕ, они оформляются в виде пакетов rpm - в таком случае их можно поставить через стандартный менеджер пакетов.
Для автоматического создания пакетов с модулями Perl используется утилита cpan2dist с бэкендом CPANPLUS-Dist-Mdv. Утилита сама находит и скачивает архив с исходным кодом, формирует spec-файл с инструкциями сборки и пытается собрать пакет.
Перед запуском утилиты необходимо создать все требуемые ей директории:
$ mkdir -p ~/rpmbuild/RPMS ~/rpmbuild/SOURCES ~/rpmbuild/SPECS ~/rpmbuild/SRPMS ~/rpmbuild/tmp
Пакет для модуля Foo::Bar создается следующей командой:
$ cpan2dist --format CPANPLUS::Dist::Mdv Foo::Bar
Если повезет, то все соберется сразу и в результате у вас будет лежать собранный пакет, а также пакет src.rpm - ~/rpmbuild/SRPMS/perl-Foo-Bar-<version>.src.rpm.
Получившийся в результате пакет необходимо попробовать установить с помощью urpmi:
$ urpmi --test ~/rpmbuild/RPMS/<pkg_arch>/perl-Foo-Bar-<version>.rpm
Здесь <pkg_arch> может принимать значение i586, x86_64 или noarch – это зависит от архитектуры вашей системы и от того, помечен ли пакет как независимый от архитектуры (это определяется наличием конструкции "BuildArch: noarch" в spec-файле). Посмотрите на вывод rpmbuild – он выводит пути к собранным пакетам. Если urpmi сообщит, что не может установить зависимость типа perl(A::B), то вам нужно также озаботиться созданием пакета для модуля A::B. Для сборки нашего модуля он не нужен, но вот для его работы понадобится.
Если все ok, то на основе пакета src.rpm (~/rpmbuild/SRPMS/perl-Foo-Bar-<version>.src.rpm) необходимо сделать проект на ABF в своем репозитории.
Если вызов cpan2dist завершился с ошибкой, то необходимо с этой ошибкой разбираться. Типичная причина ошибки - необходимость для сборки других модулей, которых еще нет в репозиториях РОСы. В таком случае вы получите сообщение, что urpmi не смог установить зависимость типа perl(C::D). В таком случае надо сначала создать пакет с модулем C::D, установить его в систему и попробовать снова запустить cpan2dist.