Solaris

Solaris 10 + Apache 2.0.59 + PHP 5.2.2 + Oracle 10g 연동

알 수 없는 사용자 2008. 2. 24.
728x90
보통 PHP의 개발환경으로 리눅스를 기반으로 하기 마련인데, 얼마전에 솔라리스 10기반으로 설치해볼 기회가 있어서 설치 후 정리해봅니다. 생각보다 상당히 까다로웠던 기억이 나네요.

특히 Oracle 10g와의 연동부분에서 많이 해매었습니다. 왜냐하면 Oracle 9i까지는 OCI를 설치하면 오라클 설치디렉토리 내에 OCI라는 폴더가 생기는데 Oracle 10g 클라이언트의 유닉스버전은 그게 아니더군요. 웃긴건 윈도우용 Oracle 10g 클라이언트는 OCI라는 폴더가 또 생기더라는...

기본 환경은 다음과 같습니다.

Server: Web Server * 2, Database Server * 1
OS: SunSparc Solaris 10
Web Server: Apache 2.0.59
Script Language: PHP 5.2.2
Database: Oracle 10g Database Server

데이터베이스 서버는 별도로 이미 구축되어 있으며, 웹 서버 2대는 클러스터로 구축해서 만일의 경우를 대비하는 것입니다. 서버 장비에 대한 것은 깊은 지식이 없으므로 일단 패스~

웹서버 한대에 위의 환경을 구축하는 것을 기준으로 합니다.(오라클은 클라이언트가 이미 설치되어 있다고 가정합니다.) 그리고 오라클과의 연동을 위해서는 패키지 형식은 현재 지원이 안되고 컴파일 형식으로 설치를 진행해야 합니다.

1. 사전준비
우선 필요한 패키지를 다운로드 받아야 합니다. 솔라리스 관련 패키지는 http://www.sunfreeware.com에서 모두 받을 수 있습니다. 필요한 패키지는 다음과 같습니다.

libgcc: gcc를 설치하기 위해 필요
libiconv: gcc, apache를 설치하기 위해 필요
gcc: php를 컴파일하기 위해 필요
make: 보통은 운영체제 설치시 설치해줍니다. 설치 안되어 있다면 설치해야 php를 컴파일할 수 있습니다.
indent: flex를 설치하기 위해 필요
flex: php를 설치하기 위해 필요
autoconf: bison을 설치하기 위해 필요
m4: php, bison을 설치하기 위해 필요
bison: php를 설치하기 위해 필요
perl: php, automake를 설치하기 위해 필요
automake: php를 설치하기 위해 필요
gzip: php를 설치하기 위해 필요
tar: php를 설치하기 위해 필요. 보통은 운영체제시 기본으로 설치합니다.
GNU sed: php를 설치하기 위해 필요
expat: Apache를 설치하기 위해 필요
gdbm: Apache를 설치하기 위해 필요
db-4.2.52.NC: Apache를 설치하기 위해 필요
openssl: Apache를 설치하기 위해 필요


위의 패키지들이 설치되어 있는지 반드시 확인해보시길 바랍니다.(pkginfo 명령어) 설치되어 있으면 지나치고 설치안되어있으면 설치해줘야 합니다. 라이브러리들을 설치하는데는 반드시 순서가 있습니다. 즉, 특정 라이브러리를 설치하기 위해서는 다른 라이브러리가 먼저 설치되어야 할 경우들이 많습니다. 그런 사항은 위의 사이트에 잘 나와있으니 참조하시길 바랍니다.

2. Apache 2.0.59 설치
우선 Apache를 설치합니다. 요즈음은 동적 모듈 방식(DSO)으로 설치를 많이하는 추세이니 여기서도 동적 모듈을 이용하도록 설치합니다. 패키지형식은 모두 동적모듈방식입니다.

# gzip -d apache-2.0.59-sol10-sparc-local.gz
# pkgadd -d apache-2.0.59-sol10-sparc-local

vi /usr/local/apache/conf/httpd.conf  이파일 설정

#Group #-1 --> Group nogroup 으로 변경

3. Oracle 10g 설치 확인
Oracle 10g 클라이언트가 사전에 설치되어 있어야 합니다. 특히 Oracle Call Interface가 설치되어 있는지 반드시 확인해야 합니다.

Oracle 10g 유닉스버전은 OCI라는 디렉토리가 아닌 instantclient라는 개념으로 접근합니다. 만일 $ORACLE_HOME에 instantclient라는 디렉토리 자체가 없으면 아래의 URL에서 Basic역시 다운로드 받아야 합니다. 이때 SDK도 같이 다운로드 받아야 합니다.


설치에 대해서는 생략합니다. 여기서는 $ORACLE_HOME/instantclient라는 이름으로 설치되어있다고 가정합니다. 그리고 instantclient안에는 반드시 SDK라는 디렉토리로 SDK 모듈이 설치되어 있어야 합니다.

4. root profile 확인
PHP 컴파일은 ROOT 계정으로 진행할 것입니다. OCI 연결시 $ORACLE_HOME 변수와 $LD_LIBRARY_PATH를 찾으므로 반드시 설정해야 합니다.

.profile 예제
ORACLE_HOME=/path/to/oracle;export ORACLE_HOME;
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$ORACLE_HOME/instantclient;export LD_LIBRARY_PATH

5. PHP 5.2.2 설치
php 컴파일하는 것은 리눅스와 같습니다. configure -> make -> make install 차례로 진행합니다.

여기서 주의할 것은 configure 시 오라클 연동 옵션부분인데, 이전처럼 단순히 with-oci8={path} 로 하면 못찾습니다. 그리고 PHP 4.X 버전때랑 PHP 5.X 버전때랑도 약간 틀리니 주의하시기 바랍니다.

1) configure
[ PHP 5.0 이상 ]
./configure \
--prefix=/usr/local/php \
--with-oci8=instantclient,/oracle/app/oracle/product/10_client/instantclient \
--with-apxs2=/usr/local/apache2/bin/apxs

[ PHP 4.7 ]
./configure \
--prefix=/usr/local/php \
--with-oci8-instant-client=/oracle/app/oracle/product/10_client/instantclient \
--with-apxs2=/usr/local/apache2/bin/apxs

2) make & make install
명령어는 쉬우니 생략하고, 진행시 다음의 두가지 오류가 발생할 수 있습니다.
- make 시 oracle의 instandclient의 wrong ELF class: ELFCLASS64 관련 오류
- make install 시 아파치 연결때 /usr/local/bin/sed를 못찾는 오류

위의 두 오류에 대해서는 다음과 같이 해결합니다.
[ ELFCLASS64 관련 오류 ]
- instantclient는 설치하면 32비트용과 64비트용으로 설치됩니다. 보통 위의 오류는 64bit형으로 설치했을 때 발생합니다.
- $ORACLE_HOME내에 있는 instantclient를 instantclient64로 변경하고 instantclient32를 instantclient로 변경합니다. 그리고 SDK를 복사해서 넣어주고 make하면 됩니다.

[ /usr/local/bin/sed를 못찾는 오류 ]
- ln -s /usr/bin/sed /usr/local/bin/sed 로 소프트링크를 걸고 다시 시도하면 됩니다.

3) php.ini 복사
php.ini를 /usr/local/php/lib 밑에 복사해서 넣고 환경에 맞게 설정합니다. 그리고 httpd.conf안에 php5 모듈 올라왔는지 확인하고 AddType을 통해서 확장자 지정합니다. 이부분은 많은 자료가 이미 나와있으므로 생략합니다.

6. 최종확인
Apache를 구동하고 홈디렉토리로 가서 phpinfo를 출력하는 페이지를 만들어 확인합니다. OCI8항목이 있는지 확인하면 됩니다.

출처: http://eyagy.net/104
728x90

댓글