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

Комментарии (5)


  1. jehy
    15.03.2018 23:55

    Не ради какого-то холивара, а искренне интересно — а зачем может потребоваться ламповый стек на солярисе?


    1. Nemets85 Автор
      16.03.2018 00:18

      Например для того, что бы сайт расположить (LAMP обычно для этого и используется), как в моем случае. Вы считаете что Solaris для этого не подходит?


      1. jehy
        16.03.2018 00:26

        Вот я как раз интересуюсь, почему он вам подошёл лучше, чем любой стандартный Linux дистрибутив. К сожалению, ни разу в жизни не встречал живого Соляриса.


        1. Nemets85 Автор
          16.03.2018 01:13
          +1

          Мне больше нравятся операционные системы(именно операционные системы, а не ПО, по с открытым исходным кодом это здорово) с закрытым исходным кодом. Разработка всего функционала ос происходит силами одних разработчиком. Файловая система zfs, в linux официально нельзя ее использовать(лицензия не позволяет), хотя прикрутить можно. Про приемущества zfs можно долго расказывать, ну и конечно зоны(у меня сайт находится внутри зоны, зона настроена по аналогии с моей прошлой публикацией, имет собственную сетевую подсистему, т.е. изолирована от моей сети). А, что самое главное все это идет из «коробки» от одного производителя(Oracle), настраивается очень просто и интуитивно понятно.


  1. Nemets85 Автор
    16.03.2018 01:10

    Именно поэтому Solaris подошел больше, чем ос с ядром linux