Модули Perl в Debian

Установка модуля из репозитория

Многие модули уже имеются в репозитории и для их использования достаточно установить в систему недостающий пакет. Имя пакета получается из имени модуля по следующим правилам:

  • переводим имя модуля в нижний регистр,
  • заменяем двойные двоеточия на знаки минуса,
  • дописываем слева от получившегося текст "lib",
  • дописываем справа от получившегося текст "-perl".

Например, модуль DBI находится в пакете libdbi-perl, а модуль HTML::Template - в пакете libhtml-template-perl.

Установка модуля при помощи dh-make-perl

Для установки CPAN-модулей в систему в виде deb-пакетов можно воспользоваться утилитой dh-make-perl. Для начала установим её:

# apt-get install dh-make-perl

Пример установки модуля:

# dh-make-perl --install --cpan Text::Xslate

или

# cpan2deb Text::Xslate

Если в процессе сборки возникли ошибки, нужно проверить, почему они произошли. Возможны разные варианты:

  • отсутствие зависимостей, необходимых для сборки или для работы модуля,
  • ошибка скачивания тарболла с исходниками модуля,
  • отсутствие файла с лицензией.

Сборка пакетов с модулем при помощи dh-make-perl

Для сборки двоичных пакетов можно воспользоваться командой следующего вида:

$ dh-make-perl --build --cpan Net::SSH::Expect

Аналогичная команда для сборки пакетов с исходными текстами выглядит следующим образом:

$ dh-make-perl --build-source --cpan Net::SSH::Expect

Отсутствие необходимых зависимостей

Нужно установить необходимые зависимости из репозитория Debian или при помощи dh-make-perl.

Ошибка при скачивании модуля

Если dh-make-perl не смог скачать тарболл с модулем, нужно скачать его с metacpan.org, распаковать и собрать:

# wget http://cpan.metacpan.org/authors/id/G/GF/GFUJI/Data-MessagePack-0.48.tar.gz
# tar xzvf Data-MessagePack-0.48.tar.gz
# dh-make-perl Data-MessagePack-0.48/
# cd Data-MessagePack-0.48/
# dpkg-buildpackage -us -uc -b -rfakeroot

Отсутствие файла с лицензией

Если в процессе сборки не найдена лицензия, нужно создать файл с лицензией в каталоге с исходниками модуля под одним из следующих имён:

  • COPYING
  • LICENSE
  • LICENCE

Внутрь файла можно вписать текст соответствующего раздела из файла README.

Весь процесс сборки похож на предыдущий случай:

# wget http://cpan.metacpan.org/authors/id/G/GF/GFUJI/Data-MessagePack-0.48.tar.gz
# tar xzvf Data-MessagePack-0.48.tar.gz
# dh-make-perl Data-MessagePack-0.48/
# cd Data-MessagePack-0.48/
# cp README LICENSE
# vim LICENSE
# dpkg-buildpackage -us -uc -b -rfakeroot

Зависимости с завышенной версией

Может случиться так, что в системе отсутствует модуль необходимой версии, а устанавливать более свежую версию нежелательно. Если это произошло, нужно отредактировать в файле debian/control описание зависимостей модуля. Если модуль поставляется с качественными тестами, которые после сборки модуль успешно прошёл, можно с высокой степенью уверенности утверждать, что модуль удалось обмануть и он будет работать.

Процесс сборки модуля в этом случае может выглядеть так:

# wget http://cpan.metacpan.org/authors/id/G/GF/GFUJI/Data-MessagePack-0.48.tar.gz
# tar xzvf Data-MessagePack-0.48.tar.gz
# dh-make-perl Data-MessagePack-0.48/
# cd Data-MessagePack-0.48/
# vim debian/control
# dpkg-buildpackage -us -uc -b -rfakeroot

На деле для сборки модуля Data::MessagePack потребовались исправления всех указанных типов.

Каталог без версии в конце имени

Если у каталога, из которого собирается модуль, в конце имени нет номера версии, сборка оканчивается ошибкой:

--- Done
fatal: pathspec 'My-List-Utils' did not match any files
add My-List-Utils: command returned error: 128

Для решения проблемы можно собрать модуль следующим образом:

# dh-make-perl Data-MessagePack/ --packagename libdata-messagepack-perl --build

После сборки пакета ошибка повторится, но тем не менее пакет всё-таки будет сгенерирован.

Отсутствие файла META

В каталоге с модулем должен быть файл с именем META и расширением .yml или .json. Если модуль использует систему сборки ExtUtils::MakeMaker (с файлом Makefile.PL), то для его создания нужно выполнить предварительную сборку модуля при помощи команды:

# perl Makefile.PL

Получившийся файл MYMETA.yml нужно переименовать в META.yml, при необходимости отредактировать и включить его в список в файле MANIFEST.