Сборка пакетов с модулями Perl

Материал из Rosalab Wiki
Версия от 08:33, 22 сентября 2018; D uragan (обсуждение | вклад)

Это снимок страницы. Он включает старые, но не удалённые версии шаблонов и изображений.
Перейти к: навигация, поиск

В мире существует огромное множество модулей для языка 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.

Для надежности, следует попробовать собрать пакет уже на ABF - это позволяет выявить ошибки, которые можно пропустить при локальной сборке. Для этого необходимо перейти на страничку вашего проекта, нажать "New Build" и в появившемся окне слева отметить галочками репозитории main и contrib для платформы rosa2016.1 (последней на момент написания этой странички, если есть платформа поновее типа rosa2019.1 - то надо выбирать ее).

Более подробная информация о правилах оформления модулей Perl приведена на странице Perl policy.