2009년 4월 6일 월요일

[리눅스] 한번에~ APM(Apache 2.2.11 + PHP 5.2.9 + MYSQL 5.1.31) 설치 및 설정 (소스-소스-소스 방식)

#근원e님 블로그 참고(많은 도움이 되었습니다 감사합니다)
http://www.lovelgw.com/Blog/entry/Apache

리눅스 종류 : Cent OS 5.2 and 5.3(둘다 설치 페도라9 실패 -_-++)

필자는 VM에 Cent OS 5.3을 설치해서 테스트로 APM을 소스-소스-소스 방식으로 설치를 해보았다.
소스-소스-소스 방식이 무슨 말인가 하면...
APM을 설치할때 RPM이나 누렁이(YUM)로 원터치 방식?이 아니라 원타이핑?으로 설치하는 것은
관련 라이브러리를 설치하면서 한번에 설치를 해주는 반면, 소스 컴파일 방식은 소스의 요구 조건에 따라
직접 라이브러리를 설치해야만 CONFIG를 설정하고 MAKE 및 MAKE INSTALL을 실행했을때 오류가 뜨지 않는다.
즉, 필자는 APM을 Apache, PHP, MYSQL 소스를 다운받아 모두 직접 컴파일해서 설치를 했다.
일단 설치에 앞서 CONFIG설정시나 MAKE시 오류가 뜨고나서 라이브러리를 설치한다는 것은
소잃고 외양간 고친다는 느낌이기에...(손해보거나 잃은 것은 없지만... 아니 있다... CONFIG나 MAKE시 기다리는 시간은 사양에 따라 오래걸리기도 하니... 필자는 VM에서 돌렸기에 시간이 좀 오래걸렸다.)
필자 기준으로 Cent OS 5.X 버전을 설치했을시 요구하는 라이브러리를 일단 나열해보겠다.

※ 라이브러리 설치
★ 라이브러리는 편의상 yum으로 설치를 추천.(소스 컴파일 방식도 있습니다만, customer분들만 옵션 알아보시고 소스 컴파일 방식으로 설치하세요)

// 컴파일 관련 라이브러리
yum -y install gcc cpp gcc-c++ compat-gcc-32-g77 flex  

//이미지 제어 관련 라이브러리
yum -y install libjpeg-devel libpng-devel freetype-devel gd-devel glibc

//openssl 관련 라이브러리, ncurses를 설치하면 자동으로 openssl도 설치된다고.. 제대로 보지 못해서 패스
yum -y install ncurses-devel openssl-devel

//MYSQL 컴파일시 필요했던 라이브러리 뭔지는 모르겠음
yum -y install libtermcap-devel

//PHP 컴파일시 libxml2 에러가 뜰 수 있다
yum -y install libxml2-devel 을 설치

※ 텍스트큐브를 위한 아파치 2.2.11 설정 및 설치
//최신 버전의 아파치 다운로드
wget
http://mirror.apache-kr.org/httpd/httpd-2.2.11.tar.gz

//아파치 컴파일전 설정
./configure --prefix=/usr/local/apache --enable-module=so --enable-mods-shared=all --enable-so --enable-ssl=shared --with-ssl --enable-rewrite

//--sysconfdir=/usr/local/apache/conf     아파치 설정파일이 있는 곳을 직접 지정하고 싶은 분만 위 설정에 붙여서 설정

// make를 실행후 이어서 바로 make install을 함. 라이브러리가 확실히 설치되 있는 상태에서 실행하세요 안그러면 오류 목록 보지도 못하고 바로 인스톨로 넘어가서 못보는 경우가 발생할 수 도 있답니다
make && make install
※ make시 apache/srclib 폴더에 make파일들이 컴파일되는 파일들이 저장된다. 재컴파일시 폴더 자체를 지우던가 이 폴더를 지우자

//편의상 심볼릭링크를 몇개 등록해보자
ln -s /usr/local/apache/bin/apachectl  /etc/init.d/httpd
잠깐! 리눅스 기본 설치시 httpd 서비스가 설치되있을수 있고 관련 파일이 남아있을수 있다.
rpm -qa | grep httpd  이렇게해서 검색해보자
관련 httpd rpm이 뜰 경우
관련 rpm 제거는 보통 rpm -e 패키지명 으로 제거한다
하지만, 의존성 문제로 인해 제거가 불가능한 경우
rpm -e --nodeps 패키지명
으로 강제 제거가 가능하다. 단, 기존에 설치되있는 rpm 파일들을 임의로 지웠을경우
위 명령어로 강제 제거가 불가능하니, 주의해야하나, 관련 OS 사이트가서 지워진 rpm 패키지와 동일한 버전의 rpm을 다시 재설치함으로써 복구후 제거가 가능하다.
그렇게 제거후에 /etc/init.d/httpd 심볼릭링크를 지우고나서 위의 심볼릭링크를 등록하고

//이번엔 환경 설정파일을 /usr/local/apache/conf/ 풀경로로 찾아가기는 여간 귀찮지 않을 수 없다 아래처럼 /etc 폴더에 들어가서 고칠 수 있게 심볼릭링크를 등록하자. 응용해서 MYSQL이나 PHP설정파일도 등록하자
ln -s /usr/local/apache/conf/httpd.conf  /etc/httpd.conf


※ MYSQL 5.1.31 설치
// MYSQL 5.1.31 최신 안정버전 다운로드
wget
http://dev.mysql.com/get/Downloads/MySQL-5.1/mysql-5.1.33.tar.gz/from/http://mirror.khlug.org/mysql/

./configure --prefix=/usr/local/mysql --localstatedir=/usr/local/mysql/data --disable-shared --enable-assembler --with-mysqld-user="mysql" --with-client-ldflags=-all-static --with-mysqld-ldflags=-all-static --with-readline --without-debug --without-docs --with-charset=euckr --with-innodb

// /tmp/mysql.sock 에러가 나는 분은 아래 옵션을 추가
--with-unix-socket-path=/usr/local/mysql/mysql.sock


//아래 설정 옵션은 기본적으로 사람들이 많이 쓰는 옵션이라지만... 필자는 위의 옵션으로 설치

./configure --prefix=/usr/local/mysql --with-charset=euckr --with-innodb

//설정이 끝났으면 컴파일 및 설치 하자
make && make install

//
컴파일 설치 후
//service 목록에 mysqld 데몬을 추가하기 위해 심볼릭링크를 건다
ln -s /usr/local/mysql/share/mysql/mysql.server /etc/rc.d/init.d/mysqld

//MYSQL실행에 필요한 mysql계정 생성(패스워드는 지정해줄 필요가 없다. -M 옵션은 자동폴더생성을 막는?
useradd -M mysql

//MYSQL이 실행되기 위해선 mysql폴더 권한을 mysql로 주고
chown -R mysql.mysql /usr/local/mysql
 
//MYSQL 실행시 필요한 DB설치를 위해 아래 명령어를 입력
/usr/local/mysql/bin/mysql_install_db

//mysql_install_db 를 실행후 mysql 콘솔로 들어가려면 root로 되어있는 DB의 소유권한을 MYSQL로 변경해줘야한다.
chown mysql:mysql /usr/local/mysql/var/*  -Rf

//아래는 구버전의 경우 생기는 data폴더에 권한을 mysql에 줄때 입력. 최신버전의 경우 입력할 필요없음
chown -R mysql:mysql /usr/local/mysql/data  (db 권한)

# 아무데서나 실행할수 있게 실행파일등록
//mysql 콘솔 실행파일을 어디에서나 입력할수 있게 심볼릭링크
ln -s /usr/local/mysql/bin/mysql    /usr/bin/
ln -s /usr/local/mysql/bin/mysqldump     /usr/bin/

//mysql 데몬 서버 구동 테스트 & 옵션은 백그라운드에서 실행을 의미
/usr/local/mysql/bin/mysqld_safe & (구동테스트)

//mysql의 root계정의 패스워드를 입력 및 변경하는 명령어
/usr/local/mysql/bin/mysqladmin -u root password "암호" (암호지정)

//모든 설정이 끝났다면 MYSQL 데몬을 재시작한다
/etc/init.d/mysqld restart

//아래는 입력하지 않았다.. 아직 특별히 필요없는 것 같다..
rc-update add mysqld default  (데몬 등록)

★ 라이브러리가 설치되지 않았을 경우의 에러 혹은 쉽게 볼수 있는 에러
 
기존에 rpm mysql이 설치되있는 경우 mysql* rpm을 모두 지우고나서도 안되는 경우
ps -ef | grep mysql 쳐서 프로세스 상주해있는것을 강제 종료시킨다. 리부팅한다
 mysql 계정을 지웠다가 다시 만들고 다시 mysql 관련 폴더에 chown으로 관련 권한을 준다


MYSQL 설치 중 볼 수 있는 오류목록 : http://blog.naver.com/polong77?Redirect=Log&logNo=140010531034

 2번(mysql 유저 및 그룹 등록) 문제 위에 참조
 16번 termcap 문제(맨위에 라이브러리 설치시 타이핑을 잘못쳤거나 어떤 불특정 원인으로 인해 라이브러리가 설치되지 않았을 경우 뜰수 있다. 아래의 원인도 마찬가지
yum install libtermcap-devel  설치해주면 해결
yum -y install ncurses-devel

 
g++ not found 문제
yum install gcc-c++ 설치해주면 해결

 
실행시 에러
#/usr/local/mysql/bin/mysqld_safe --user=mysql &
이렇게 하니 되네요 ^^;
해결 했습니다.

※ PHP 설치 및 설정
// PHP 5.2.9 최신버전 소스를 우선 다운받습니다
wget
http://www.php.net/get/php-5.2.9.tar.gz/from/kr.php.net/mirror

//라이브러리들(따로 폴더를 만들어서 한꺼번에 다운받아주세요)
wget
http://jaist.dl.sourceforge.net/sourceforge/freetype/freetype-2.3.8.tar.gz
wget http://nchc.dl.sourceforge.net/sourceforge/libpng/libpng-1.2.35.tar.gz
wget http://www.zlib.net/zlib-1.2.3.tar.gz  링크가 깨졌을시(http://www.sfr-fresh.com/unix/misc/zlib-1.2.3.tar.gz/)
wget ftp://ftp.uu.net/graphics/jpeg/jpegsrc.v6b.tar.gz  링크 깨졌을시시(http://dir.filewatcher.com/d/GNU/Other/jpegsrc.v6b.tar.gz.613261.html)
wget
http://jaist.dl.sourceforge.net/sourceforge/giflib/giflib-4.1.6.tar.gz
wget http://jaist.dl.sourceforge.net/sourceforge/giflib/libungif-4.1.4.tar.gz

wget http://www.boutell.com/gd/http/gd-2.0.9.tar.gz
wget http://jaist.dl.sourceforge.net/sourceforge/mcrypt/libmcrypt-2.5.8.tar.gz


★ 명령어를 입력하면 설정부터 컴파일 및 설치까지 한번에 간편하게 설치합시다
1. zlib (압축 라이블러리)
※ 압축을 풀고 압축이 풀린 디렉토리로 이동후 configure 설정 후 make 실행, make install 후 cd ..으로 상위 디렉토리로 이동. 이런 방식으로 비교적 컴파일 시간이 짧은 아래 라이브러리들을 이런 방식으로 설치하겠습니다.
tar zxvf zlib-1.2.3.tar.gz && cd zlib-1.2.3 && ./configure --prefix=/usr/local/ --shared && make && make install && cd ..

2. libpng (이미지 PNG 포멧 라이블러리)
tar zxvf libpng-1.2.35.tar.gz && cd libpng-1.2.35  && ./configure --prefix=/usr/local/ --enable-shared  &&  make  &&  make install && cd ..

3. libmcrypt (각종 암호화 라이블러리)
tar zxvf libmcrypt-2.5.8.tar.gz  &&  cd libmcrypt-2.5.8 && ./configure --prefix=/usr/local/ --enable-shared &&  make && make install && cd ..

4. giflib (이미지 GIF 포멧 압축 라이블러리)
tar zxvf giflib-4.1.6.tar.gz && cd giflib-4.1.6 && ./configure --prefix=/usr/local/ && make && make install && cd ..

5. libungif (이미지 GIF 포멧 압축 해제 라이블러리)
tar zxvf libungif-4.1.4.tar.gz && cd libungif-4.1.4 && ./configure --prefix=/usr/local/ && make && make install && cd ..

6. jpeg (이미지 JPEG 라이블러리)  yum 설치로 대체 가능. 필자는 컴파일중 오류떠서 yum으로 설치했습니다.
tar zxvf jpegsrc.v6b.tar.gz && cd jpeg-6b &&

** x86_64Bit 일때 && cp /usr/share/libtool/config.guess . && cp /usr/share/libtool/config.sub .

./configure --prefix=/usr/local/ --enable-shared && make && make install && cd ..

** cannot create reguler file /usr/local/man/man1/cjpeg.1 : No such file or directory
오류가 난다면

# make /usr/local/man/man1 를 실행한후 make install 을 실행시켜준다.
# make install

보통 디렉토리가 만들어져있지 않은 경우가 많은터라
#/usr/local/man 폴더에서 man1 폴더를 생성해주고 컴파일시 필자는 정상적으로 완료가 되는 것을 확인하였다.



7. freetype2 (폰트 제어 라이블러리) //yum 설치로 대체 가능
tar zxvf freetype-2.3.8.tar.gz && cd freetype-2.3.8 && ./configure  && make && make install && cd ..

8. gd (이미지 제어 라이블러리) yum 설치로 대체 가능 //yum 설치로 대체 가능 ( yum -y install gd* )
tar zxvf gd-2.0.9.tar.gz && cd gd-2.0.9 && ./configure --prefix=/usr/local --with-png=/usr/local --with-jpeg=/usr/local --with-freetype=/usr/local && make && make install && cd ..

//잊어버리거나 설치가 안된 라이브러리를 찾을겸 자동으로 한꺼번에 설치
yum -y install openssl openssl-devel mhash mhash-devel libtool libtool-ltdl libtool-ltdl-devel imap-devel imap zlib-devel zlib freetype-devel freetype libpng-devel libpng libjpeg-devel libjpeg libtiff-devel libtiff gd-devel gd pcre-devel pcre libxml-devel libxml libxml2-devel libxml2 gdbm-devel gdbm ncurses-devel ncurses curl-devel curl expat-devel expat bzip2-devel bzip2-libs bzip2 uw-imap-devel libc-client libc-client-devel libmcrypt libmcrypt-devel

그러면 리눅스 환경에서 라이블러리 경로를 인식할 수 있도록
/etc/ld.so.conf 에 경로를 추가해줍니다.

# vi /etc/ld.so.conf
에 /usr/local/lib 를 추가해 주고 저장합니다.
그리고 환경을 인식할 수 있도록 아래 명령어를 실행 시킵니다.
# ldconfig

PHP 소스파일들이 들어있는 디렉토리로 이동후
# ./configure \
 > --with-apxs2=/usr/local/apache/bin/apxs \
 > --with-mysql=/usr/local/mysql \
 > --with-mysqli=/usr/local/mysql/bin/mysql_config \
 > --with-zlib=/usr/local \
 > --with-mcrypt=/usr/local \
 > --enable-mbstring \
 > --with-gd=/usr/local \
 > --with-jpeg-dir=/usr/local \
 > --with-png-dir=/usr/local \
 > --with-freetype-dir=/usr/local

위 옵션들을 편의상 아래처럼 한줄로 입력
./configure --with-apxs2=/usr/local/apache/bin/apxs --with-mysql=/usr/local/mysql  --with-mysqli=/usr/local/mysql/bin/mysql_config --with-zlib=/usr/local --with-mcrypt=/usr/local --enable-mbstring --with-gd=/usr/local --with-jpeg-dir=/usr/local --with-png-dir=/usr/local --with-freetype-dir=/usr/local/

//다른 다양한 옵션
./configure --prefix=/usr/local/php --with-apxs2=/usr/local/apache/bin/apxs --enable-mod-charset --enable-safe-mode --enable-sigchild --enable-magic-quotes --with-libxml-dir --with-openssl --with-zlib --with-zlib-dir --with-bz2 --enable-calendar --with-curl --enable-dba --with-gdbm --enable-exif --enable-ftp --with-gd --with-jpeg-dir --with-png-dir  --with-ttf --with-freetype-dir --enable-gd-native-ttf --with-gettext --with-imap --with-imap-ssl --with-kerberos --enable-mbstring --with-mhash --with-mcrypt --with-mysql=/usr/local/mysql --enable-sockets --with-regex=php --enable-sysvmsg --enable-sysvsem --enable-sysvshm --enable-wddx --enable-zend-multibyte


configure 시 오류

//libxml2 에러가 뜬다면
yum -y install libxml2-devel 을 설치

오류 메세지 : configure: error: xml2-config not found. Please check your libxml2 installation 
해결 방법 : yum install libxml2 libxml2-devel -y 

오류 메세지 : configure: error: Please reinstall the BZip2 distribution 
해결 방법 : yum -y install bzip2-devel 

오류 메세지 : configure: error: libjpeg.(a|so) not found. 
해결 방법 : yum -y install libjpeg-devel 

오류 메세지 : configure: error: libpng.(a|so) not found. 
해결 방법 : yum -y install libpng-devel 

오류 메세지 : configure: error: freetype.h not found. 
해결 방법 : yum -y install freetype-devel 

오류 메세지 : configure: error: utf8_mime2text() has new signature, but U8T_CANONICAL is missing. This should not happen. Check config.log for additional information. 
해결 방법 : yum -y install libc-client-devel 

오류 메세지 : configure: error: Kerberos libraries not found. 
해결 방법 : yum -y install krb5-devel 

오류 메세지 : configure: error: Cannot find OpenSSL's <evp.h> 
해결 방법 : yum -y install openssl-devel

//자 이제 컴파일 및 설치를 합니다.
make && make install

//여기서 끝난게 아닙니다, 마지막으로 해줄 것이 남아있지요, Apache의 설정파일인 httpd.conf 파일을 열어봅시다!~
아파치와 PHP를 연동시키기 위해  vi에디트로 httpd.conf 를 열어서
/ 슬래시를 입력후 AddType application 을 입력후 엔터를 쳐봅시다
그러면 기본 설치시 추가되있는 명령줄을 볼수 있는데
그곳에 AddType application/x-httpd-php .php .html 구문을 추가해줍니다.
별도로 추가할 확장자가 있다면 .html 뒤에 더 입력하시면 됩니다.

//모든 설정이 끝났습니다.

//심볼릭링크로 등록한 아파치를 실행해봅시다.
service httpd start

//아파치의 기본설정의 루트 디렉토리는 /usr/local/apache/htdocs 이다. php및 관련 라이브러리들 정보를 확인하기 위해 여기에 index.php 파일을 작성해보자
vi /usr/local/apache/htdocs/index.php
<?
      phpinfo();
?>

?를 누르고 wq 를 친후 엔터를 입력하면 정상적으로 저장하고 vi에디트에서 빠져나오게 된다.


//모든 설정이 끝나고 index.php를 통한 PHP info 컴파일 라인 및 버전

 


축하합니다~ 이제는 웹 서버 운영하는 일만 남았습니다~ ^^


댓글 없음:

댓글 쓰기