15 March 2018

Связка Apache PHP MySQL в Solaris 11.3

System administrationPHP*nixServer AdministrationApache
При первом знакомстве с Solaris единственным для меня недостатком был тот факт, что пакеты которые возможно установить являются довольно устарелыми, но к счастью актуальные версии можно собрать из исходного кода. В данной публикации пойдёт речь о сборке apache и php из исходного кода(mysql можно скачать в виде готового пакета с сайта mysql.com). На момент написания данной публикации актуальная версия apache была 2.4.29, а php 7.2.3.

Сборка


Первым делом необходимо установить пакет gcc-48:

pkg install gcc-48

Также необходимо определить некоторые переменные для дальнейшей компиляции(сборка будет происходить 64-х битных версий):

export CPP="/usr/gcc/4.8/bin/gcc -E"
export CC="/usr/gcc/4.8/bin/gcc"
export CFLAGS="-m64 -std=gnu99 -fPIC -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64"
export LDFLAGS="-m64 -L/usr/lib -R/usr/lib"
export CXXFLAGS="-m64"

После перезагрузки системы данные значения необходимо заново добавить(если ещё не закончили собирать необходимые пакеты).

Загрузим необходимые архивы с исходным кодом(все действия происходят в корне файловой системы):

wget http://php.net/distributions/php-7.2.3.tar.bz2
wget http://apache-mirror.rbc.ru/pub/apache//httpd/httpd-2.4.29.tar.bz2
wget http://mirror.linux-ia64.org/apache//apr/apr-1.6.3.tar.bz2
wget http://mirror.linux-ia64.org/apache//apr/apr-util-1.6.1.tar.bz2
wget https://cdn.mysql.com//Downloads/MySQL-5.6/mysql-5.6.39-solaris11-x86_64.pkg.gz

Распакуем:

tar -xvf apr-1.6.3.tar.bz2
tar -xvf apr-util-1.6.1.tar.bz2
tar -xvf httpd-2.4.29.tar.bz2
tar -xvf php-7.2.3.tar.bz2
gzip -d mysql-5.6.39-solaris11-x86_64.pkg.gz

Переименуем каталоги и пакет mysql для большего удобства:

mv mysql-5.6.39-solaris11-x86_64.pkg mysql.pkg
mv apr-1.6.3 apr
mv apr-util-1.6.1 apr-util
mv httpd-2.4.29 apache
mv php-7.2.3 php

Для корректной сборки apache также необходимо собрать два дополнительных пакета apr и apr-util, можно конечно использовать те которые имеются в составе Solaris, но в этом случаи необходимо внести значительные изменения в скрипт libtool. Первым делом соберём apr, перейдите в каталог /apr и выполните последовательно команды для конфигурации, сборки, и установки(сборку и установку необходимо производить gnu версией make). Установка будет произведена в каталог /opt, если Вам привычней производить установку в каталог /usr/local, то в этом случаи необходимо отредактировать параметр --prefix, а также указывать корректные пути при последующей сборке apache и php:

cd /apr
./configure --prefix=/opt/apr
gmake
gmake install

Далее необходимо собрать apr-util, а также указать в какую папку установлен apr:

cd /apr-util
./configure  --prefix=/opt/apr-util --with-apr=/opt/apr
gmake
gmake install

Последним штрихом в установке apr будет небольшое редактирование libtool, который находиться в каталоге /opt/apr/build-1, в данном скрипте необходимо отредактировать одну строку:

export_symbols_cmds="\$NM \$libobjs \$convenience | \$global_symbol_pipe | \$SED 's/.* //' | sort | uniq > \$export_symbols"

Данную строку необходимо изменить, как указано ниже(удалить \$global_symbol_pipe):

export_symbols_cmds="\$NM \$libobjs \$convenience | \$SED 's/.* //' | sort | uniq > \$export_symbols"

После данных манипуляций apache соберётся без проблем(главное указать каталог с apr и apr-util). Будет собрана «многопоточная» версия apache:

cd /apache
./configure --prefix=/opt/apache24 --with-apr=/opt/apr --with-apr-util=/opt/apr-util --with-mpm=worker
gmake
gmake install

Осталось только собрать php:

cd /php
./configure   --prefix=/opt/php \
              --with-config-file-path=/opt/php/lib \
              --with-apxs2=/opt/apache24/bin/apxs  \
	      --with-config-file-scan-dir=/opt/php \
              --without-pgsql \
              --with-zlib \
              --with-zlib-dir=/usr/include \
              --with-iconv-dir=/usr/include \
              --with-pcre-dir=/usr/include \
              --with-gettext=/usr/include \
              --with-libxml-dir=/usr/include/libxml2/libxml \
              --with-curl \
              --with-openssl \
              --with-openssl-dir=/usr/include \
              --with-gd \
              --with-freetype-dir=/usr/include \
              --with-xpm-dir=/usr/include \
              --with-jpeg-dir=/usr/include \
              --with-png-dir=/usr/include \
              --with-gnu-ld \
	      --with-mhash \
              --enable-shared \
	      --with-mysqli=mysqlnd \
              --enable-zip \
              --enable-ftp \
              --enable-mysqlnd \
	      --enable-opcache \
	      --disable-cli \
	      --disable-ipv6
gmake 
gmake install

Если Вы производите сборку не в глобальной зоне, то Вам необходимо скопировать некоторые зависимости для корректного запуска модуля php, в примере ниже указаны файлы которые необходимо скопировать(путь до зоны укажите тот который используете Вы):

cp /usr/lib/amd64/libX11.so.4 /zones/zone1/root/usr/lib/amd64/libX11.so.4
cp /usr/lib/amd64/libXpm.so.4 /zones/zone1/root/usr/lib/amd64/libXpm.so.4
cp /usr/lib/amd64/libjpeg.so.62 /zones/zone1/root/usr/lib/amd64/libjpeg.so.62
cp /usr/lib/amd64/libXext.so.0 /zones/zone1/root/usr/lib/amd64/libXext.so.0
cp /usr/lib/amd64/libxcb.so.1 /zones/zone1/root/usr/lib/amd64/libxcb.so.1
cp /usr/lib/amd64/libXau.so.6 /zones/zone1/root/usr/lib/amd64/libXau.so.6
cp /usr/lib/amd64/libXevie.so.1 /zones/zone1/root/usr/lib/amd64/libXevie.so.1
cp /usr/lib/amd64/libXss.so.1 /zones/zone1/root/usr/lib/amd64/libXss.so.1
cp /usr/lib/amd64/libXdmcp.so.6 /zones/zone1/root/usr/lib/amd64/libXdmcp.so.6

Если Вам необходимо что то добавить дополнительно, то в этом случаи можно посмотреть все параметры сборки с помощью команды:

./configure --help

Последним штрихом будет установка mysql:

pkgadd -d /mysql.pkg

Конфигурирование


Осталось только добавить mysql и apache в автозапуск, настроить apache на обработку php, а также настроить mysql на корректный запуск. Для того чтобы apache корректно обрабатывал php скрипты необходимо выполнить следующею команду, данная команда добавит строку AddHandler application/x-httpd-php .php в httpd.conf:

echo "AddHandler application/x-httpd-php .php" >> /opt/apache24/conf/httpd.conf

А также изменить параметр:

DirectoryIndex index.html

на

DirectoryIndex index.php

или на

DirectoryIndex index.html index.php

Следующим шагом активируем расширение для оптимизации «опкодов»(данное расширение может увеличить скорость генерации страниц в несколько раз), для этого необходимо создать файл:

touch /opt/php/ext-10-opcache.ini

А также добавить в данный файл строку zend_extension=opcache.so:

echo "zend_extension=opcache.so" >> /opt/php/ext-10-opcache.ini

Также, при необходимости, можно создать файл php.ini в каталоге /opt/php, так как php ищет файлы конфигурации именно в данном каталоге.

Для корректного запуска mysql необходимо создать каталог mysql в папке /etc, а также скопировать в данную папку файл my.cnf, а также добавить строку которая указывает имя пользователя от которого необходимо запускать mysql(root):

mkdir /etc/mysql
cp /opt/mysql/mysql/my.cnf /etc/mysql/my.cnf
echo "user = root" >> /etc/mysql/my.cnf

После данных манипуляций необходимо запустить mysql командой:

/etc/init.d/mysql start

После установки mysql в корне файловой системы создаётся файл(.mysql_secret) с паролем по умолчанию, данный пароль используем что-бы выполнить скрипт mysql_secure_installation, в котором можно сменить данный пароль, удалить тестовые базы, удалить тестового пользователя:

/opt/mysql/mysql/bin/mysql_secure_installation

Если по каким-то причинам установщик не создал ссылку на клиент версию mysql в папке /usr/bin(запускать «mysql-client» можно будет из любого места(mysql -p -r)), то необходимо это сделать вручную:

ln -s /opt/mysql/mysql/bin/mysql /usr/bin/mysql

Осталось только добавить mysql и apache в автозапуск(level 3), а также настроить автоматическое отключение служб на level 0. Для этого создайте ссылки в двух каталогах:

ln /etc/init.d/mysql /etc/rc0.d/Kmysql
ln /opt/apache24/bin/apachectl /etc/rc0.d/Kapache

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

ln /etc/init.d/mysql /etc/rc3.d/Smysql
ln /opt/apache24/bin/apachectl /etc/rc3.d/Sapache

Для большего удобства можно создать символьную ссылку на apchectl в каталоге /usr/bin:

ln -s /opt/apache24/bin/apachectl /usr/bin/apachectl

Запустите apache:

apachectl start

Вывод


Как видно из данной публикации отсутствие актуальных версий ПО на ос Solaris не приговор, так как всегда можно собрать необходимый софт из исходного кода, а при необходимости внести некоторые изменения для получения максимальной эффективности ПО.
Tags:solarisapachephpсистемное администрированиеисходный кодсборка из исходников
Hubs: System administration PHP *nix Server Administration Apache
+4
3.1k 12
Comments 7
Popular right now
Комплексное обучение PHP
January 11, 202120,000 ₽Loftschool
Backend разработчик на PHP
January 17, 202150,000 ₽OTUS
MS SQL Server Developer
March 10, 202135,000 ₽OTUS
Основы web-программирования. HTML, CSS, PHP
November 30, 202031,578 ₽Учебный центр Softline
PHP. Уровень 1. Основы создания сайтов
November 30, 202015,990 ₽Специалист.ру