Установка модуля Image::Magick для Perl установленного в Perlbrew

После установки Perl в perlbrew, обычно дело идёт к установке модулей через CPAN. Но иногда сделать это невозможно, например модуль Image::Magick не получится устновить с CPAN. Обычно он устанавливается через пакетный менеджер операционной системы к системному Perl'у. Но в perlbrew так сделать тоже не получится...

you-cant-just-do-it

В таком случае не остаётся ничего другого, как установить молуль с исходников ImageMagick. Но в нашем случае нам нужно действовать акуратно...

Создадим дополнительные директории в нашем perlbrew.

$ cd /opt/perbrew
$ mkdir -p custom/build custom/dist

Директория /opt/perlbrew указана для примера. Теперь нужно скачать исходники ImageMagick. Заходим на страницу с архивами, берём самую свежую и кладём в /opt/perlbrew/custom/dist. Далее нужно исходники распаковать. Но для сборки нужно создать директорию под конкретную версию Perl. Нужно это для того, чтобы не пришлось чистить каталог сборки при установке Image::Magick к другой версии Perl.

$ cd build
$ mkdir perl-5.14-webdev
$ cd perl-5.14.webdev
$ tar -xvf ../../dist/ImageMagick-6.8.9-7.tar.xz
$ cd ImageMagick-6.8.9-7

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

LDFLAGS=-L/opt/perlbrew/perls/perl-5.14-webdev/lib/5.14.4/x86_64-linux-thread-multi/CORE \
    ./configure --prefix /opt/perlbrew/custom/perl-5.14-webdev/imagick \
    --with-perl=/opt/perlbrew/perls/perl-5.14-webdev/bin/perl \
    --enable-shared --with-threads

Краткое пояснение по путям и флагам:

LDFLAGS=-L(путь к Perl CORE) \
    ./configure --prefix (путь, где расположатся файлы ImageMagick) \
    --with-perl=(путь к главному бинарнику Perl) \
    --enable-shared --with-threads(или --without-threads в зависимости от флагов сборки Perl)

Это вручную слишком много писать, поэтому я предпочитаю это запихнуть в bash-скрипт. Далее собираем и устанавливаем:

$ make install

После установки мы получаем рабочий модуль Image::Magick в нашем Perl. Только для работы в ним необходимо добавить путь поиска библиотек ImageMagick в окружении.

$ export LD_LIBRARY_PATH="/opt/perlbrew/custom/perl-5.14-webdev/imagick/lib:$LD_LIBRARY_PATH"

Теперь с консоли мы можем запускать любые Perl-программы, которые используют Image::Magick.

Дополнение: Использование Image::Magick CGI-скриптами.

Тут нужно проделать тоже самое, о чём было написано выше, только средствами Веб-сервера. Например для Apache.

SetEnv LD_LIBRARY_PATH /opt/perlbrew/custom/perl-5.14-webdev/imagick/lib

Эту команду можно использовать в секции Directory или VirtualHost.

Использованные источники