XAMPP for Linux: установка модуля Imagick

/ Просмотров: 2838
Метки: ,

В одном из комментов к циклу постов о XAMPP был поднят вопрос об установке модуля Imagick.
Проблема оказалась не столько сложной, сколько стрёмной, так что даже сейчас, после трех удачных попыток на разных ОСях, я чувствую себя не экспертом, а обезьяной, которая научилась, нажимая определенную комбинацию кнопок, получать банан.
Но свой банан я таки получаю, и поэтому решил поделиться своим опытом с другими, гм, юзерами, находящимися на той же ступени развития, что и я. Не пропадать же ему (опыту) даром.

Вводная

Описываемый метод основан на посте юзера lderdziuk, опубликованном на форуме Apache Friends.
Однако там скорее дана схема, чем подробное описание, а опыт показывает, что в процессе реализации этой, в общем-то простой, схемы возникают разные затруднения. Поэтому я попытался изложить установку модуля как можно подробнее.

Метод был опробован на XAMPP 1.7.7 на операционных системах LinuxMint 16 Cinnamon, LinuxMint 17 Cinnamon RC и Matuntu-Tahr. Однако я решил описать процесс на "чистой", свежеустановленной LinuxMint 17 Cinnamon v2 с минимальным количеством дополнительного ПО "не из коробки".

Note: Имейте ввиду: установка модуля Imagick потянет за собой не менее чем ~ 70 новых пакетов общим объемом более 70 Мб и потребует прилично места на жестком диске, в наихудшем случае порядка 100 - 150 Мб. Поэтому данная операция рекомендуется только тем, кому этот модуль действительно нужен, например, работающим с такими CMS, как Drupal 7, TYPO3 и т.п.
Внимание! lderdziuk предупреждает, что наличие в системе Apache и(или) PHP помимо XAMPP может вызвать серьезные затруднения. Я бы добавил, что в этом случае затруднения возможны не только с установкой модулей.

Подготовка

Шаг первый

Создаем директорию /opt/lampp/include/php.

Шаг второй

Идем сюда или сюда и берем архив с php точно той же версии, какая стоит в нашем установленном XAMPP (у меня, на XAMPP 1.7.7, это php 5.3.8).

Шаг третий

Распаковываем архив с php в созданную директорию /opt/lampp/include/php (т.е. кладем туда не папку php-5.3.8, а ее содержимое).
Здесь первый стрёмный нюанс:

Владелец и группа Показать

Шаг четвертый

Устанавливаем в систему imagemagick.
Я предпочел ставить его из реп (Синаптиком), он потащил за собой еще 4 пакета.
Кое-где советуют ставить его из сырцов, но это как правило юзеры других ОСей. Хотите еще больше адреналина – пробуйте сами.

Удовлетворение зависимостей

Как показал опыт, это ключевой момент всей затеи. Если конфигурирование php или собственно установка модуля Imagick будут прерываться с ошибкой – внимательно читайте вывод в терминале и ищите, "какого им еще надо".
Совет: чтобы не "спалиться", случайно закрыв терминал с выводом, очень советую сохранять этот вывод (с помощью tee, например,
sudo ./configure | tee ~/configure_php
или хотя бы просто копируя вывод и вставляя его в gedit).
Ниже список пакетов, оказавшийся достаточным для решение поставленной задачи, (напоминаю, речь о LinuxMint 17 Cinnamon):
libxml2-dev
autoconf
autotools-dev
re2c
bison
build-essential (тянет dpkg-dev, g++, g++-4.8, libc-dev-bin, libc6-dev,libstdc++-4.8-dev)
libmagickwand-dev (Внимание! этот пакет потянет за собой более 60 пакетов общим весом около 62 Мб! Убедитесь, что среди них есть libmagickcore-dev)
Note: Здесь второй стрёмный момент. Пакет re2c, и даже autotools-dev, возможно, не являются необходимыми (хотите – проверяйте сами); с другой стороны, неизвестно, не нужно ли было бы (для будущей функциональности) установить еще некоторые пакеты, например flex. Во всём этом я еще не до конца разобрался, и тут даже не очень помогает документация, точнее, она может значительно отличаться в зависимости от версии XAMPP и соответственно php. И это даже не учитывая особенностей вашей операционной системы и ее пакетного состава "из коробки"...

Собственно установка

Конфигурируем php

Переходим в директорию /opt/lampp/include/php и командуем
sudo ./configure
Если всё нормально и всего достаточно, будет большой вывод в терминале (его, кстати, тоже неплохо сохранить в отдельный файл), который закончится информацией о лицензии в аккуратной рамочке и строкой "Thank you for using PHP." Если до этого не доходит – см. совет в предыдущей главке.

Устанавливаем модуль Imagick

Переходим в /opt/lampp/bin и командуем
sudo ./pecl install Imagick
Тут через несколько строк вывод остановится, запрашивая вас, что делать:
Please provide the prefix of Imagemagick installation [autodetect] :
Я нажал энтер, надеясь, что autodetect у софтины в порядке. Дальше пойдет опять оочень большой вывод, строк 570 примерно, и его-то сохранить, мне кажется, даже еще важнее, чем предыдущий. Если всё нормально, вывод завершится такими словами, проливающими бальзам на нашу измученную душу:
Build process completed successfully
Installing '/opt/lampp/include/php/ext/imagick/php_imagick_shared.h'
Installing '/opt/lampp/include/php/ext/imagick/php_imagick.h'
Installing '/opt/lampp/include/php/ext/imagick/php_imagick_defs.h'
Installing '/opt/lampp/lib/php/extensions/no-debug-non-zts-20090626/imagick.so'
install ok: channel://pecl.php.net/imagick-3.1.2
configuration option "php_ini" is not set to php.ini location
You should add "extension=imagick.so" to php.ini
Остался

Последний штрих

В файл /opt/lampp/etc/php.ini записываем (где-то в начале тысячных строк, например, сразу за строкой extension="ncurses.so" строку
extension="imagick.so"
Запускаем XAMPP, открываем phpinfo() и любуемся:

Модуль установлен

Послесловие. Модуль Xdebug

Теперь, уяснив себе, как получить наш банан, мы можем устанавливать и другие модули (теоретически). Я проверил это, установив модуль Xdebug той же командой
sudo /opt/lampp/bin/pecl install xdebug
Записал, как велел мне установщик, строку zend_extension="xdebug.so" в /opt/lampp/etc/php.ini, но... модуля не увидел. Тогда перезапустил XAMPP в терминале, и шило сразу вылезло из мешка:
Starting XAMPP for Linux 1.7.7...
Failed loading xdebug.so: xdebug.so: cannot open shared object file: No such file or directory
XAMPP: Starting Apache with SSL (and PHP5)...
XAMPP: Starting MySQL...
XAMPP: Starting ProFTPD...
XAMPP for Linux started.
Вот оно что, оказывается! XAMPP не видит пути к модулю. Но поскольку мы, конечно же, сохранили вывод терминала при установке, в самом конце обнаруживаем строчку:
Installing '/opt/lampp/lib/php/extensions/no-debug-non-zts-20090626/xdebug.so'
Переписываем в php.ini строку с полным путем:
zend_extension="/opt/lampp/lib/php/extensions/no-debug-non-zts-20090626/xdebug.so"
перезапускаем XAMPP и видим в phpinfo() наш искомый модуль:

Модуль Xdebug установлен

По-моему, неплохо, а!?

Послесловие №2

Вы, конечно, заметили, что выше описана установка модулей на XAMPP 1.7.7 (поскольку он у меня рабочий). Потихоньку меня стала мучать совесть: а как будет с новыми версиями XAMPP, которые наверняка понадобятся многим юзерам?

Процесс был воспроизведен на актуальной версии XAMPP 1.8.3-4 и прошел без проблем. Более того, выяснилось, что установка developer-файлов избавляет от возни с распаковкой⁄конфигурированием php, остается установить imagemagick, libmagickwand-dev, libmagickcore-dev и всю ту страсть, что они потянут, и затем установить модуль той же самой командой

sudo /opt/lampp/bin/pecl install Imagick
или
sudo /opt/lampp/bin/pecl install xdebug
В общем, дилемма между установкой developer-файлов или отдельного php в /opt/lampp/include/php упирается в размер: первое займет гораздо больше места на диске, но зато предоставит дополнительные фишки и бонусы, которые могут пригодиться в будущем.
Решайте сами.


Оставьте комментарий

Комментарий будет опубликован после проверки

(обязательно)