Сага про Solaris 5.9, Oracle 10 и PHP 5.2.3.
Эта история является продолжением работы над славным и большим проектом. В честь которого я уже копал LDAP.
Поняв, что окончательно приложение будет крутиться на Solaris'е, я пришел к выводу, что и разработку лучще вести под этой славной операционной системой о чем смело заявил вышестоящим. С меня спросили конфигурацию сервера и количество свободного места. Долго раздумывая, я перечислил все модули для Apache и PHP, которые мне необходимы и привел примерную цифру всего этого софта в установленном виде плюс сам проект.
Решив, что скоро у меня будет свой серер под Solaris'ом, я продолжил ковырять LDAP и успел реализовать неплохую авторизацию. Правда с использованием mod_auth_sspi.so, который умеет крутиться только на виндовых серверах. А у меня будет Solaris. Но простота реализации мне очень понравилась.
Ждать пришлось не очень долго, и скоро мне прислали логин, пароль, имя сервера и имя папки. Подобное письмо вызвало у меня ряд вопросов. И меня отправили к специалисту. Специалист объяснил мне, чем коннектиться к серверу по SFTP (WinSCP) и показал как пользоваться PuTTY. Он же сказал мне, что root мне никогда не дадут, свой сервер тоже, и что он поднимал Apache с PHP под простой (не рутовой) учетной записью, и всё было номрально.
Так мне пришлось заняться чрезвычайно интересной задачей по поднятию сервера в маленькой локальной папочке на сервере под Solaris 5.9, где нет вообще ничего. Если искать в инете книги по Solaris, то вы нигде не найдете в них способ установки софта без прав админа. Я знаю про сырцы, но у меня не было binutils, g++ и кучи библиотек.
Зато мне рассказали про команду pkgtrans. После прочтения по ней manа, лично мне понятнее не стало. Рассказы о ленте и других потоковых накопитилях совершенно меня расстроили. Но команда оказалась единственной полезной, и если бы не она, мне не удалось бы осуществить задуманное.
Установка софта без прав root
Идем на www.sunfreeware.com (пакеты вообще без расширений) или на www.blastwave.org (пакеты с расширением pkg). Там лежат большие архивы собранного софта. Для кучи версий Solaris'а. Качаем то, что нам нужно, копируем себе в дирректорию (обозначим её для краткости $HOME), распаковываем командой gunzip pack_name распаковываем его. А дальше вступает pkgtrans. В той же дирректории пишем pkgtrans pack_name pack/ Эта комманда распакует наш пакет в поддиректорию $HOME/pack/SMCpack_name или pack/CSWpack_name, в зависимости от того, откуда качали файл. Теперь у нас есть автомат. Т.е. скомпилированный софт. Т.е. хотя бы gcc =).
Сборка софта для сборки сервера.
Я собирал сервер неделю. Возможно, столь большой срок связан с тем, что мне пришлось решать кучу проблем впервые. Обладая теперешними знаниями, я бы собрал его чуть быстрее.
Я не буду подробно описывать сборку всех пакетов, я просто приведу конфиги и то, что мне пришлось поставить для того, чтобы все заработало. Ну и расскажу о нескольких подводных камнях, которые я обходил порой пару дней.
Итак, у меня есть работающий GCC, т.е. оба компилятора и для C и для C++. Это уже хорошо. Теперь можно собрать binutils, в которых присутствуют необходимые для сборки инструменты. Единственный параметр, с которым я собирал был --prefix=/u01/users/php/tools. Т.е. я просил установить всё в папку tools, где у меня со временем образовалось почти полное дерево системы. Таким образом, собирая все инструменты в эту папку, я избавил себя от необходимости прописывать десятки путей в свой .profile. Важно прописать пути к этой папке до основных путей системы. Т.е. при задании переменных окружения надо писать export PATH=/u01/users/php/tools:$PATH.
После binutils, установим пакеты bison, flex, gawk, m4, make (все есть на gnu.org, кроме flex, он живет на flex.sourceforge.net). Эти пакеты необходимо собирать с тем же префиксом, что и binutils. Они собираются без проблем, насколько я помню. Чтобы понять что использует ваша система, когды вы говорите ей, допустим make, стоит набрать which make, и получите путь, откуда этот make запускается. Так стоит проверять, чтобы использовались нужные инструменты.
Сборка Apache 2.0.59
Собрать, как я уже говорил, мне необходимо работающий сервер Apache+PHP и связать его с Oracle. Я начал с Apache. Как с наиболее простого. По каким-то причинам Apache ветки 2.2 у меня собираться отказался. Поэтому я собирал проверенный Apache 2.0.59. Создаем простой файлик, куда пишем полный конфиг, делаем файлику chmod +x, или каждый раз пишем sh apache2_config. Вот содержимое файлика:
cd /u01/users/php/src/httpd-2.0.59
./configure \
--prefix=/u01/users/php/apache2 \
--enable-so \
--enable-mods-shared='rewrite mime-magic ssl vhost-alias' \
--disable-cgi \
--disable-autoindex \
--with-mpm=prefork \
--with-ssl=/u01/users/php/openssl \
Модулей не очень много. Для сборки Apache мне пришлось установить только собранный из сырцов OpenSSL. Хотя для сборки PHP, мне пришлось использовать скомпилированный openssl 0.9.7, потому что при сборке с текущим 0.9.8 выпадал ld, который под Solaris не очень стабилен. А заставить ПСС использовать GNU ld мне не удалось. Для этого пришлось бы пересобирать компилятор. Это мне не удалось. Вообщем, с Apache проблем особо не возникло.
Сборка PHP 5.2.3
Вот здесь начались танцы с бубном. Для начала приведу конфиг:
cd /u01/users/php/src/php-5.2.3/
./configure \
--prefix=/u01/users/php/php5 \
--with-apxs2=/u01/users/php/apache2/bin/apxs \
--enable-bcmath \
--enable-calendar \
--enable-exif \
--enable-mbstring \
--enable-soap \
--enable-sockets \
--with-gd=/u01/users/php/tools \
--with-jpeg-dir=/u01/users/php/tools \
--with-png-dir=/u01/users/php/libpng \
--with-iconv \
--with-libxml-dir=/u01/users/php/tools \
--with-xsl=/u01/users/php/tools \
--enable-zip \
--with-zlib \
--with-ldap=/u01/users/php/tools \
--with-openssl=/u01/users/php/pack/SMCosslg/reloc \
--enable-soap \
--with-mcrypt=/u01/users/php/libmcrypt \
--disable-ipv6 \
--with-oci8=instantclient,/u01/users/php/instantclient_10_2 \
--enable-pdo \
--with-pdo-oci=instantclient,/u01/users/php/instantclient_10_2,10.2.0.3 \
--without-pdo-sqlite \
--without-sqlite
В принципе из конфига видно, где я использовал собранные руками библиотеки, а где пакеты. Пробегусь быстро по интересным пунктам конфигурации.
Первые две строчки говорят куда собирать (предпочитаю отдельную папку и для Apache и для PHP, т.к их приходится пересобирать по много раз, и вычищать каждый раз папку tools было бы маразмом), и где лежит прежде собранный Apache. Всё просто. Дальнейшие несколько строк ничего интересного не представляют, эти модули включены в поставку PHP и собираются без проблем
Дальше начинается GD. Для сборки GD, надо сначала собрать libpng (без проблем) и libjpeg. Собрав libjpeg командой ./configure --prefix=/u01/users/php/tools, самое главное на забыть после команды make install, скомандовать make install-lib. Без этого, GD будет конфигурироваться, но не будет собираться (отняло примерно день, решение нашлось на каком-то форуме).Если нужна поддержка ttf или xpm, их тоже надо собирать. Мне они нужны не были. После этого сборка GD проходит гладко, и в конфиге мы указываем его, и пути к библиотекам jpeg и png.
Дальше идет iconv, xml и xslt, для них необходимо собрать библиотеки, соответственно iconv, libxml2 и libxslt. Здесь проблем нет. Не забываем про prefix, иначе make install не пройдет.
Теперь ldap, openssl и mcrypt. LDAP собирается (правда, он у меня попросил Berkeley DB, но это проблемой не считается =)), а вот openssl, как я уже говорил, мне пришлось использовать готовый. Т.к. PHP отказывался делать make, вызывая панику у ld. Это проблема новой версии 0.9.8 и архитектуры SPARC. С mcrypt проблем не было.
И вот начинается самое интересное. Oracle. Достаем мануал The Underground PHP and Oracle® Manual с оракловского сайта. Читаем. Идем на тот же оракловский сайт и качаем instant client под Solaris Sparc. Почему он в zip, я не знаю. Разкатываем архив в нашу папочку. Теперь у нас есть оракловый клиент. С ним-то мы и будем собирать PHP. Это стоило мне где-то трех дней. PHP спокойно конфигурировался с OCI8, но отказывлся конфигурировать PDO_OCI. А он мне был очень нужен. Проблема скрывалась в Sun'овском SH (шелле), который немного отлично ведет себя от обычных. Я решил проблему, прописав в конфигурационном файле #!bin/bash вместо #!bin/sh. У меня всё собралось. Эту проблему обещали исправить в PHP 5.2.4 (Тред по этой проблеме на phpClub).
Соединяемся с Oracle
В принципе на этом проблемы со сборкой закончились. Всё собралось, запустилось и заработало. Не хватало только соединиться с Oracle. Здесь меня тоже ожидали сюрпризы (дня два). Не смотря на всё, что написано в Подземелье ПХП и Оракла, они никак не соединялись. У меня в наличие было два файлика sqlnet.ora и ldap.ora, которые объясняли Ораклу где искать сервер, но не смотря на всякие TNS_ADMIN, Oracke Instant Client не видел сервер. И файлики, видимо тоже. Всё решилось довольно хитро. Обычно, если устанавливать на компьютер обычный оракловый клиент, эти файлики лежат в папочке $ORACLE_HOME/network/admin/. Это и есть ключ. Пришлось в папке instantclietn_10_2, которая жила у меня, сделать эту структуру подпапок. И уже в подпапку admin положить два файлика. И он их нашёл. Я не знаю, зачем так всё сложно. Но мне кажется, что без программерской лени тут не обошлось.
Первый этап саги окончен. Сервер работает. Связь с БД есть. Но что-то мне подсказывает, что пересобирать я буду и Apache и PHP. Тогда, если будет о чем написать - буду дописывать сюда.
1 комментарий:
Ответы практически на любой вопрос есть у нас. SEEXi.NET
Так же интерес можно проявить например к "[url=http://www.2nt.ru/go/teets.php]Кошачий отель [/url]"
А любителям [url=http://www.2nt.ru/go/geyi.php]гей видео[/url] подарок.
И безусловно лучшие [url=http://2nt.ru/go/znakom.php]бесплатные интим знакомства[/url]
Отправить комментарий