Устанавливаем Staticperl. Часть 1.

Предисловие

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

Что такое staticperl?

Возможно вы уже имели дело с различными системами сборки программ, написанных на Perl в единый исполняемый файл (exe или elf), таких как PAR или платное решение от ActiveState PerlApp из поставки Perl Dev Kit. Марк Леманн (Marc Lehmann) написал свою реализацию и выпустил ее под именем staticperl. Данный проект не планировался для полной замены существующих реализаций, а просто является тем инструментом, который подходит под нужды Марка.

В настоящий момент staticperl работает под ОС GNU/Linux, FreeBSD и Windows/Cygwin. Я использую его лишь на GNU/Linux и FreeBSD.

В двух словах, staticperl создает исполняемый бинарный файл под вашу ОС. Внутри такого файла располагаются сам Perl, необходимые модули и файлы, а также программа, которая запускается при старте. Линковка с внешними библиотеками может быть как динамическая, так и статическая.

Программа staticperl представляет собой shell-скрипт, который автоматизирует сборку Perl. Иными словами, на выходе вы получите собранный на вашей системе Perl, расположенный в отдельной директории, необходимые модули будут слинкованны вместе с полученным бинарным файлом perl. А дополнительные модули будут так же устанавливаться в эту директорию, и, при необходимости, так же линковаться с полученным бинарным файлом.

Зачем он нужен?

Это может быть полезно в тех случаях, когда вам необходимо быстро запустить скрипт Perl на другой машине, где не установлены сторонние модули, а возможно даже и сторонние библиотеки, которые изпользуются модулями. В целом, опыт показал, что такая схема работает, задачи решаются быстро и не несет серьезных проблем в большинстве случаев.

Естественно, вас никто не принуждает отказываться от вашей текущей инфраструктуры, построенной с использованием Chief, Ansible, локально развернутых зеркал CPAN и т.п. Приложение staticperl может быть как дополнением к существуещей инфраструктуре, так и плановой заменой, и просто быть инструментом, который пригодится в необычных ситуациях.

Общие ощущения от использования staticperl

Обычно о хорошем плохого не пишут. Я не стану делать исключения, просто хочу сказать, что не смотря на то, что staticperl работает и выполняет возложенные на него обязательства, вам придется столкнуться с проблемами установки определенных модулей. Этот важный момент может определить полезность данного инструмента. Как бы там ни было, по личному опыту, большинство трудностей можно преодалеть, и я расскажу вам как это сделать позднее.

Сама проблема установки модулей никак не связана с использованием модулей. Просто на текущий момент известные системы сборок Module::Build и ExtUtils::MakeMaker имеют определенные проблемы при работе с Perl, собранным staticperl. К счастью, большинство проблем ExtUtils::MakeMaker уже исправлены и включены в скрипт staticperl.

Подготовка

ОС и окружение

Прежде чем начать устанавливать и изучать staticperl, необходимо выяснить несколько важных вопросов связанных с типом ОС, набором используемых модулей Perl и установленных на ПК библиотек. Дело в том, что staticperl, как было сказано ранее создан и развивается одним разработчиком, Марком Лемманом. Поэтому в этой программе, как и любом ПО, имеются ошибки и недоработки. Вполне вероятно, что что-то не срастется, не отчаивайтесь. Ниже я дам свои рекомендации, которые помогут вам окончательно определиться.

Начнем, с выбора ОС. Как я уже сказал, я работаю в основном с GNU/Linux, FreeBSD, поэтому рекомендую их. Для ознакомления подойдет Debian Wheezy, практически любая Fedora 14+ или FreeBSD 9+.

Следующим важным моментом является выбор компилятора Си и стандартной библиотеки. Не смотря на то, что сам Perl, в том числе Perl, собранный staticperl почти не зависит от этих вопросов, рекомендую остановиться на GCC и GNU libc (eglibc). Это также может сэкономить время при установке XS модулей, которые не были хорошо протестированны и отлажены для других компиляторов или библиотеки libc.

Мой личный опыт показал, что staticperl хорошо собирает Perl и с Clang, и с uClibc, musl. Тем не менее, некоторые модули из CPAN имеют проблемы с ними, а установка модуля заканчивается на этапе сборки. Если вы программист с хорошими знаниями по Си/Си++, вполне вероятно, что исправить проблему не составит большого труда.

Итого:

  • ОС – GNU/Linux
  • C compiler – GCC
  • Lib C – GNU libc / eglibc

ПО

Кроме компилятора и стандартной библиотеки Си, нам потребуется установить как минимум дополнительные средства для сборки программ, make, а также библиотеки и заголовочные файлы для модулей, например, для Net::SSLeay потребуется установить пакет openssl-devel (libssl-dev, в зависимости от выбранного дистрибутива). Установка дополнительных пакетов не является обязательной, вы можете пропустить этот шаг до того момента, когда вам потребуется установить модуль, нуждающийся в них.

Установка

Итак, у вас имеется все необходимое, перейдем к установке, читайте об этом в следующей статье Устанавливаем staticperl. Часть 2.