Выражаю особую благодарность Морозову Алексею и Александре (aka Pandora) за правку, дополнения и багрепорт статьи
Введение
Все чаще и чаще приходится сталкиваться с тем, что новые приложение требуют решения на 64 битных платформах, но к сожалению, так сложилось, по крайней мере для Solaris, что все пакеты которые выкладываются 32-х разрядные(в частности sunfreeware.com все пакеты 32-х разрядные). Поэтому пришлость долго компилить все зависимости и утилиты вручную.
Что имеем
- Sun Solaris 10 5/08 - Cервер на SPARC архитектуре
Установки компиляции и переменные, которые будут использоваться
export CC=gcc export CFLAGS="-des -Duse64bitall" export LDFLAGS="-mcpu=v9 -m64" export LDDLFLAGS="-mcpu=v9 -m64" -тип процессора и опция 64-х разрядной компиляции export BAP=/future_apache_directory - куда будем устанавливать апач export PREFIX=/future_packets_directory - куда будут помещатся скомпилинные зависимости export SOURCE=/source_path - директория где содержаться наши сырцы
Установка Apache
Для начала мы должны опредилится, что нам требуется от Apache, мне нужно что бы он поддерживал Kerberos, LDAP, балансировку и проксирование. Поэтому зависимости Apache сводятся к следующему списку
expat, libiconv, openldap, zlib, openssl, libgcc, gcc, kerberos
К сожалению только два пакета, это libgcc и gcc, содержат в себе 64 битные версии библиотек, поэтому компилить их не надо, - хоть немного счастья
ZLIB
gmake distclean ./configure --prefix=/PREFIX/zlib gmake gmake install
EXPAT
gmake distclean ./configure \ --prefix=/PREFIX/expat_path \ --enable-shared \ --disable-static gmake gmake install
LIBICONV
gmake distclean ./configure \ --prefix=/PREFIX/libiconv_path \ --enable-shared \ --disable-static gmake gmake install
OPENLDAP
gmake distclean ./configure \ --prefix=/PREFIX/ldap_path \ --enable-syslog \ --with-tls-openssl \ --without-cyrus-sasl gmake gmake install
KERBEROS
Я использовал исходники кербероса от MIT (http://web.mit.edu/Kerberos/dist)
gmake distclean ./configure \ --prefix=/PREFIX/krb_path\ --without-krb4 \ --enable-maintainer-made \ --sysconfdir=/etc/krb5 \ --with-krb5 \ --with-ldap gmake gmake install
Ну вот мы и подошли к компиляции Апача
Для начала нужно скомпилить две утилиты, которые находятся в дистрибутиве Апача
cd SOURCE/apache/srclib
Утилита arp
cd srclib/apr gmake distclean ./configure --prefix=$BAP --enable-threads gmake gmake install
Утилита arp-util
cd ../apr-util gmake distclean ./configure --prefix=$BAP \ --with-ldap \ --with-ldap-lib=/PREFIX/ldap/lib \ --with-ldap-include=/PREFIX/ldap/include \ --with-iconv=/PREFIX/iconv \ --with-expat=/PREFIX/expat \ --with-apr=$BAP gmake gmake install
Теперь конфигурируем и собираем апач
cd ../../ gmake distclean ./configure \ --enable-maintainer-mode \ --prefix=$BAP \ --disable-auth-digest \ --without-perl \ --with-z=/PREFIX/zlib \ --with-iconv=/PREFIX/iconv \ --with-expat=/PREFIX/expat \ --with-apr=$BAP \ --with-apr-util=$BAP \ --with-ssl=/PREFIX/ssl \ --enable-ldap \ --enable-proxy \ --enable-proxy-connect \ --enable-proxy-ftp \ --enable-proxy-http \ --enable-proxy-balancer \ --enable-ssl \ --enable-authnz-ldap \ --enable-krb5=/PREFIX/kerberos \ --enable-modules="all" \ --enable-mods-shared="all" gmake gmake install Ура Апач скомпилирован, но нужно сделать еще один шаг, точнее нужно скомпилить модуль апача для работы с керберосом
KERBEROS for APACHE (http://modauthkerb.sourceforge.net/install.html)
gmake distclean ./configure \ --prefix=/PREFIX/kerberos\ --without-krb4 \ --with-apache=$BAP \ --with-krb5 gmake gmake install
Настройка Апач + Kerberos + LDAP
в http.conf
# KERBEROS KrbMethodK4Passwd off #выключаем авторизацию кербероса 4 KrbAuthoritative On - если не прошла проверка авторизации то запретить доступ(если опция ставится в офф, то управление передается следующему модулю)
AuthName "Kerberos Login" AuthType Kerberos Krb5Keytab /usr/local/proxy/conf/http_keytab.keytab - о кейтабах чуть ниже) KrbServiceName "HTTP/FULL_NAME_SERVER@DOMAIN_SERVER_NAME" - имя сервиса в домене KrbAuthRealm DOMAIN_SERVER_NAME KrbMethodNegotiate On -включение прозрачной авторизации KrbDelegateBasic On KrbSaveCredentials On KrbVerifyKDC Off
# END KERBEROS
# LDAP
AuthzLDAPAuthoritative On AuthLDAPURL "ldap://domain_ip_address:389/DC=DOMAIN,DC=RU?userPrincipalName?sub?(objectClass=*)" NONE
Если используете модуль NTLM то используйте вместо userPrincipalName sAMAccountName AuthLDAPURL "ldap://domain_ip_address:389/DC=DOMAIN,DC=RU?sAMAccountName?sub?(objectClass=*)" NONE AuthLDAPBindDN "CN=user,OU=Support,OU=Organization Structure,DC=domain,DC=ru" - полное имя юзера для подключения к домену AuthLDAPBindPassword password - пароль оного юзера AuthLDAPGroupAttributeIsDN on AuthLDAPGroupAttribute member
#Require valid-user Require ldap-group CN=group,DC=domain,DC=ru - проверка принадлежности к группе # END LDAP
Создание кейтабов
Все приведенные команды выполняются на контролерре домена(у меня он Windows)
кейтаб для хоста
ktpass -princ host/FULL_NAME_SERVER@DOMAIN_SERVER_NAME -mapuser host@DOMAIN_NAME \ -crypto DES-CBC-MD5 -ptype KRB5_NT_PRINCIPAL -mapop set +desonly -pass passwd -out c:\host.keytab
кейтаб для сервиса
ktpass -princ HTTP/FULL_NAME_SERVER@DOMAIN_NAME -mapuser http@DOMAIN__NAME \ -crypto DES-CBC-MD5 -ptype KRB5_NT_PRINCIPAL -mapop set +desonly -pass passwd -out c:\http.keytab
добавляем сервис
setspn.exe -A HTTP/FULL_NAME_SERVER@DOMAIN_NAME http
так же требуется создания юзера с минимальными правами для подключения LDAP
в krb5.conf
[logging] default = FILE:/var/log/krb5libs.log kdc = FILE:/var/log/krb5kdc.log krb = SYSLOG:INFO:DAEMON krb = FILE:/usr/local/proxy/logs/krb.log admin_server = FILE:/var/log/kadmind.log
[libdefaults] ticket_lifetime = 24000 default_realm = DOMAIN_NAME - обязательно большими буквами dns_lookup_realm = false dns_lookup_kdc = false
[realms] DOMAIN.RU = { kdc = first_dc.DOMAIN_NAME kdc = second_dc.DOMAIN_NAME admin_server = first_dc.DOMAIN_NAME default_domain = DOMAIN_NAME }
[domain_realm] .domaim.ru = DOMAIN_NAME domain.ru = DOMAIN_NAME
[appdefaults] pam = { debug = false ticket_lifetime = 36000 renew_lifetime = 36000 forwardable = true krb4_convert = false }
#[kdc] # profile = /var/kerberos/krb5kdc/kdc.conf
в ldap.conf
# # LDAP Defaults #
# See ldap.conf(5) for details # This file should be world readable but not world writable.
#BASE dc=example, dc=com #URI ldap://ldap.example.com ldap://ldap-master.example.com:666
#SIZELIMIT 12 #TIMELIMIT 15 #DEREF never BASE DC=DOMAIN,DC=RU URI ldap://domain_ip_address
REFERRALS off
searchmode:OS ldapservers:omain_ip_address binddn:CN=user,CN=Users,DC=DOMAIN,DC=RU bindpwd:password userbasedn:CN=Users,DC=DOMAIN,DC=RU
Все на этом на этом авторизация работает, переходим к сборке PHP
Установка PHP
Если для апача было не много зависимостей, то PHP его в этом дела опережает на порядок, нам снова нужно определится с зависимостями. Мне нужно что бы PHP работал с oracle, графикой(GD), xml и перенаправлял запросы(CURL), поэтому список зависимостей следующий
<b>expat, oracle, zlib, libiconv, curl, png, jpeg, freetype, xml2, gd</b>
Компиляцию некоторых пакетов описана выше, поэтому описывать их не буду
CURL
./configure \ --prefix=/PREFIX/curl \ --with-iconv=/PREFIX/iconv \ --with-zlib=/PREFIX/zlib \ --enable-shared \ --disable-static gmake gmake install
FREETYPE2
gmake distclean ./configure \ --prefix=/PREFIX/freetype \ --enable-shared \ --disable-static gmake gmake install
PNG
gmake distclean ./configure \ --prefix=/PREFIX/png \ --enable-shared \ --disable-static gmake gmake install
JPEG
gmake distclean ./configure \ --prefix=/PREFIXjpeg \ --enable-shared \ --disable-static gmake gmake install
XML
./configure \ --prefix=/PREFIX/xml2 \ --with-iconv=/PREFIX/iconv \ --with-zlib=/PREFIX/zlib \ --enable-shared \ --disable-static gmake gmake install
GPG (графика)
gmake distclean ./configure \ --prefix=/PREFIX/gp \ --with-free-type=/PREFIX/freetype \ --with-jpeg=/PREFIX/jpeg \ --with-png=/PREFIX/png \ --without-x \ --without-xpm gmake gmake install
Теперь можно переходить к сборке PHP
./configure \ --with-apxs2=$BAP/bin/apxs \ --with-config-file-path=$BAP/conf \ --prefix=/PREFIX/php \ --with-zlib=/PREFIX/z \ --with-zlib-dir=/PREFIX/z \ --with-iconv=/PREFIX/iconv \ --disable-dba \(убрать если есть oci8) --with-curl=/PREFIX/curl \ --with-png-dir=/PREFIX/png \ --with-jpeg-dir=/PREFIX/jpeg \ --with-freetype-dir=/PREFIX/freetype \ --with-libxml-dir=/PREFIX/xml2 \ --with-ttf \ --with-oci8=/PREFIX/oracle \ --enable-gd-native-ttf \ --enable-gd-jis-conv \ --with-gd 2>&1 | tee configure.log make && make install
Все PHP собран, теперь осталось только скопировать модуль php в директорию апача и подключить. Настройки PHP, виртуальных хостов я рассматривать не буду, об этом и так много статей написано.
PS с керберосом бывают проблемы в плане обнаружения библиотек, будьте внимательны и прописывайте LD_LIBRARY_PATH
Спасибо за внимание. Надеюсь эта статья поможет страждущим:)
|