При первом знакомстве с 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 не приговор, так как всегда можно собрать необходимый софт из исходного кода, а при необходимости внести некоторые изменения для получения максимальной эффективности ПО.
Автор: Сергей