APM from source

리눅스 2012. 3. 30. 10:36

mysql-5.5.20
httpd-2.4.1
php-5.3.10

1. 설치전 준비사항
# rpm -qa httpd php mysql
httpd-2.2.3-43.el5.centos
# rpm -e --nodeps httpd-2.2.3-43.el5.centos

  1-1 컴파일 패키지 설치
# rpm -qa gcc* gcc-c++* cpp* compat-gcc* flex*
# yum -y install gcc gcc-c++ cpp compat-gcc-34-g77 flex

  1-2 라이브러리 설치
# rpm -qa libjpeg* libpng* freetype* gd-*
# yum -y install libjpeg libpng freetype gd
# yum -y install libjpeg-devel libpng-devel freetype-devel gd-devel
# yum -y install openssl openssl-devel
# yum -y install libtermcap-devel ncurses-devel libc-client-devel bzip2-devel libxml2-devel
# yum -y install bison

2.mysql
# cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DEFAULT_CHARSET=utf8 -DWITH_EXTRA_CHARSETS=all -DMYSQL_DATADIR=/usr/local/mysql/data -DMYSQL_UNIX_ADDR=/tmp/mysql.sock -DMYSQL_TCP_PORT=3306

필요한 라이브러리를 찾을수 없다며 중간에 실패하는 경우도 있다
그러면 해당 라이브러리를 설치해주자

"Could NOT find Curses (missing:  CURSES_LIBRARY CURSES_INCLUDE_PATH)
CMake Error at cmake/readline.cmake:83 (MESSAGE):
Curses library not found.  Please install appropriate package,"
# yum install ncurses-devel
# rm -f  CMakeCache.txt   ( Equivalent to ” make clean “  )
# Again run the cmake command after fixing the curses error.

# make
# make install


# groupadd mysql
# useradd -g mysql -M -s /sbin/nologin mysql
# chown -R root /usr/local/mysql
# chown -R mysql.mysql /usr/local/mysql/data
# cp /usr/local/mysql/support-files/my-medium.cnf /etc/my.cnf
# /usr/local/mysql/scripts/mysql_install_db --user=mysql

FATAL ERROR: Could not find ./bin/my_print_defaults

If you compiled from source, you need to run 'make install' to
copy the software into the correct location ready for operation.

If you are using a binary release, you must either be at the top
level of the extracted archive, or pass the --basedir option
pointing to that location.

# cd ..
# ./scripts/mysql_install_db --user=mysql

[root@centos_vm data]# /usr/local/mysql/bin/mysqladmin -u root password [password]
[root@centos_vm mysql]# /usr/local/mysql/bin/mysqld_safe --user=mysql &
[root@centos_vm bin]# /usr/local/mysql/bin/mysql -u root -p
Enter password:

환경변수 등록
# vi .bash_profile
PATH=$PATH:$HOME/bin:/usr/local/mysql/bin
# source .bash_profile

# /usr/local/mysql/support-files/mysql.server start
# /usr/local/mysql/support-files/mysql.server stop





*httpd
1. 선행작업
Apache Portable Runtime Project (http://apr.apache.org) 에 방문하여
apr, apr-util 을 다운로드 받는다
apr, apr-util을 apache httpd 2.4.1 의 srclib 디렉터리내에 apr, apr-util로 압축을 해제하고
'--with-included-apr' 옵션을 준다
그외 따로 컴파일 하려면 apr 과 apr-util을 따로 설치하고 Apache httpd 2.4.1 컴파일 설정시에 --with-apr=[apr:prefix] --with-apr-util=[apr-util:prefix] 를 옵션으로 넣어 컴파일한다.

2. 설치
# ./configure --prefix=/usr/local/apache --enable-mods-shared=all --enable-so --enable-rewrite --enable-ssl --with-included-apr --enable-mpms-shared=all
# make
# make install

3. 환경설정
 3-1 자동실행 설정
# cp /usr/local/apache/bin/apachectl /etc/init.d/httpd
# chkconfig --add httpd
httpd 서비스는 chkconfig 를 지원하지 않습니다

chkconfig를 사용하기 위해서 실행스크립트 파일에 아래 내용을 2번째 줄부터 추가해 준다
# vi /etc/init.d/httpd
# chkconfig: 2345 90 90
# description: init file for Apache server daemon
# processname: /usr/local/apache/bin/apachectl
# config: /usr/local/apache/conf/httpd.conf
# pidfile: /usr/local/apache/logs/httpd.pid
# chkconfig --add httpd

  3-2 환경설정
# vi /usr/local/apache/conf/httpd.conf
User , Group daemon 을 nobody 로 변경
User nobody
Group nobody

#ServerName www.example.com:80
   => ServerName 서버ip 혹은 도메인:80

CustomLog "logs/acces_log" common 을 찾아 아래줄처럼 수정(웹로그파일에 이미지에 관한 로그내역을 기록하지 않기 위한 설정이다)
SetEnvIfNoCase Request_URI (gif|png|jpg|css|js|bmp|jpeg|swf)$ IMAGE=1
CustomLog "logs/acces_log" common env=!IMAGE
 
  3-3 방화벽 열어주기
# vi /etc/sysconfig/iptables
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT



*php
1. 설치
# ./configure --prefix=/usr/local/php --with-mysql=/usr/local/mysql --with-apxs2=/usr/local/apache/bin/apxs --with-imap-ssl --disable-debug --with-iconv --with-gd --with-jpeg-dir --with-png-dir --with-libxml-dir --with-freetype-dir --with-zlib-dir --with-config-file-path=/usr/local/apache/conf --enable-safe-mode --enable-ftp --enable-sockets
# make; make install

--with-apxs2=/usr/local/apache/bin/apxs
공유된 apache 모듈을 함께 연동하기 위한 컴파일 옵션이다 php와 apache를 연동하기 위해 php 모듈을
DSO 방식으로 설정하기 위한 옵션이다
--with-config-file-path=/usr/local/apache/conf
php설정파일 php.ini 파일이 존재할 위치 지정

# cp php.ini-dist /usr/local/apache/conf/php.ini

# grep php /usr/local/apache/conf/httpd.conf
LoadModule php5_module        modules/libphp5.so
# ls -l /usr/local/apache/modules/libphp5.so
-rwxr-xr-x 1 root root 17178287  8월  4 18:19 /usr/local/apache/modules/libphp5.so

2. 환경설정
# vi /usr/local/apache/conf/httpd.conf
DirectoryIndex index.html index.html.var
 => DirectoryIndex index.html index.htm index.php

AddType application/x-gzip .gz .tgz 을 찾아 그 다음줄에 아래 두줄  내용 추가
AddType application/x-httpd-php .php .htm .html .inc .php4 .php3
AddType application/x-httpd-php-cource .phps

# vi /usr/local/apache/htdocs/phpinfo.php
<? phpinfo(); ?>
 
웹브라우저에서 확인한다
http://서버ip/phpinfo.php


"AddType application/x-httpd-php-source .phps
php 파일을 <? 로 시작하는것을 제대로 인식하도록 하는 설정
vi /usr/local/apache2/conf/php.ini
short_open_tag = On "

*ZendGuardLoader
# tar xvzf ZendGuardLoader-php-5.3-linux-glibc23-x86_64.tar.gz
# cd php-5.3.x/
php-5.3.x]# ls
ZendGuardLoader.so

해당 파일을 php 확장모듈 디렉토리로 복사(어차피 절대경로 잡아줄것이기 때문에 자유롭게 복사하자)

php-5.3.x]# cp ZendGuardLoader.so /usr/local/apache/modules/

php-5.3.x]# vi /usr/local/apache/conf/php.ini
[Zend]
zend_extension=/usr/local/apache/modules/ZendGuardLoader.so

아파치 재시작

*실패
Failed loading /usr/local/php/modules/ZendGuardLoader.so:  /usr/local/php/modules/ZendGuardLoader.so: undefined symbol: compiler_globals
기존은 성공했는데 왜 loading fail 나는지 모르겠다
기존과 다른점은
centos 5.5 32bit 에서 64bit 로
httpd-2.2.22 에서 httpd-2.4.1 로 바뀌었다

구글링을 하다보니 원인을 알꺼 같다
1)에러시 Failed Loading /usr/local/php/modulues/ZendGuardLoader.so:  /usr/local/php/modulues/ZendGuardLoader.so: cannot open shared directory
 
2)에러시  /usr/local/php/modulues/ZendGuardLoader.so:undefined symbol: compiler_globals
 
1,2번 에러시에는 아파치가 worker 로 설치 되지 않았는지 살펴 본다..
아파치가 prefork로 설치 되어야만 zend 설치가 가능합니다.

그래서 확인해봤다

# ./apachectl -l
Compiled in modules:
  core.c
  mod_so.c
  http_core.c
worker 아니지 않은가.. ????
Posted by no1ss
,