60.Unix2008. 12. 17. 12:17
반응형

윈디하나의 솔라나라: AMP(Apache HTTPD, MySQL, PHP)

최종 갱신일: 2008-06-12, 이 문서는 윈디하나의 솔라나라, http://www.solanara.net/에서 최근에 갱신된 문서를 찾을 수 있다.

1. 개요

  • 아파치 2.2.x, MySQL 5.0.x, PHP 5.2.x에 대해 솔라리스 10 u6 기본설정대로 설정시 설치하는 방법에 대해 설명하는 문서이다. 만약 사용자의 현재 설정이 이와 다르다면 약간의 수정이 필요할 수 있다.
  • SAMP(Solaris, Apache, MySQL, PHP)는 오픈 솔라리스 10에 이미 설치되어있기도 하지만, 여기서는 소스를 이용해 별도의 디렉토리(/usr/local)에 설치한다. 본 내용대로 하기 위해 솔라리스에 이미 설치되어있는 APM을 삭제해야할 필요는 없다.

2. 라이브러리 설치

  1. OpenSSL: Apache와 MySQL에 SSL라이브러리를 넣어 같이 컴파일 한다. 필요없다면 SSL설치를 생략하고 Apache, MySQL 의 configure 시 ssl 옵션을 뺀다. OpenSSL의 설치는 윈디하나의 솔라나라: OpenSSL을 참고한다.
  2. The GNU Readline Library
    root@wl ~ # wget ftp://ftp.cwru.edu/pub/bash/readline-5.2.tar.gz 1)
    root@wl ~ # tar xvfz readline-5.2.tar.gz
    root@wl ~ # cd readline-5.2
    root@wl ~/readline-5.2 # ./configure --enable-multibyte
    root@wl ~/readline-5.2 # make
    root@wl ~/readline-5.2 # make install
    
    1) 사이트가 너무 느리면 [wget http://user.chol.com/~laday/solaris/downloads/readline-5.2.tar.gz] 을 사용할 수 있다.
  3. Oracle Berkeley DB: 유닉스 프로그램에서 보통 DB라 하면 이 버클리 DB를 말할정도로 대중적인 임베디드 데이터베이스이다. 처음엔 UCB(캘리포티아대 버클리)에서 관리하던 버클리DB를, 좀 더 체계적인 관리를 목적으로 1996년 SleepyCat 이라는 법인이 설립되어 이어져오다가, 2006년 2월 오라클에 합병되었다. db-x.x.x.tar.gz 파일은 Oracle Berkeley DB Downloads에서 오라클에 가입(무료)한후 무료로 다운로드 받을 수 있다.
    root@wl ~ # tar xvfz db-4.7.25.tar.gz
    root@wl ~ # cd db-4.7.25
    root@wl2 ~/db-4.7.25 # cd build_unix
    root@wl2 ~/db-4.7.25/build_unix # ../dist/configure \
     --enable-pthread_api
    메시지 생략
    config.status: creating db.h
    config.status: creating db_config.h
    root@wl2 ~/db-4.7.25/build_unix # make
    root@wl2 ~/db-4.7.25/build_unix # make install
    root@wl2 ~/db-4.7.25/build_unix # vi /etc/profile
    # for Oracle Berkeley DB located at /usr/local/db
    if [ -d /usr/local/db ]
    then
      LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/db/lib; export LD_LIBRARY_PATH
    fi
    
    root@wl2 ~/db-4.7.25/build_unix # cd /usr/local
    root@wl2 /usr/local # ln -s BerkeleyDB.4.7/ db
    
  4. The XML C parser and toolkit of Gnome
    root@wl ~ # wget ftp://xmlsoft.org/libxml2/libxml2-2.6.32.tar.gz
    root@wl ~ # tar xvfz libxml2-2.6.32.tar.gz
    root@wl ~ # cd libxml2-2.6.32
    root@wl ~/libxml2-2.6.32 # ./configure --prefix=/usr/local/xml
    root@wl ~/libxml2-2.6.32 # make
    root@wl ~/libxml2-2.6.32 # make install
    
  5. zlib
    root@wl ~ # wget http://www.zlib.net/zlib-1.2.3.tar.gz
    root@wl ~ # tar xvfz zlib-1.2.3.tar.gz
    root@wl ~ # cd zlib-1.2.3
    root@wl ~/zlib-1.2.3 # ./configure -s
    root@wl ~/zlib-1.2.3 # make 1)
    root@wl ~/zlib-1.2.3 # make test
    메시지 생략
                    *** zlib test OK ***
    root@wl ~/zlib-1.2.3 # make install
    
    1) 경고 메시지는 무시한다
  6. libiconv
    root@wl ~ # wget http://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.12.tar.gz
    root@wl ~ # tar xvfz libiconv-1.12.tar.gz
    root@wl ~ # cd libiconv-1.12
    root@wl ~/libiconv-1.12 # ./configure --prefix=/usr/local
    root@wl ~/libiconv-1.12 # vi srclib/stdint.h
    /* Verify that intmax_t and uintmax_t have the same size.  Too much code
       breaks if this is not the case.  If this check fails, the reason is likely
       to be found in the autoconf macros.  */
    //typedef int _verify_intmax_size[2 * (sizeof (intmax_t) == sizeof (uintmax_t)) - 1];
    root@wl ~/libiconv-1.12 # make
    root@wl ~/libiconv-1.12 # make install
    
    1) 주석처리한다. 257번째 라인이다. autoconf 의 버그인듯 하다.
  7. FreeType
    root@wl ~ # wget http://nchc.dl.sourceforge.net/sourceforge/freetype/freetype-2.3.6.tar.bz2
    root@wl ~ # tar xvfj freetype-2.3.6.tar.bz2
    root@wl ~ # cd freetype-2.3.6
    root@wl ~/freetype-2.3.6 # GNUMAKE="/usr/sfw/bin/gmake" ./configure
    root@wl ~/freetype-2.3.6 # /usr/sfw/bin/gmake
    root@wl ~/freetype-2.3.6 # /usr/sfw/bin/gmake install
    
  8. LibGD
    root@wl ~ # wget http://www.libgd.org/releases/gd-2.0.35.tar.bz2
    root@wl ~ # tar xvfj gd-2.0.35.tar.bz2
    root@wl ~ # cd gd-2.0.35
    root@wl ~/gd-2.0.35 # ./configure
    root@wl ~/gd-2.0.35 # make
    root@wl ~/gd-2.0.35 # make install
    

3. APM 설치

  1. MySQL
    root@wl ~ # wget http://dev.mysql.com/get/Downloads/MySQL-5.0/mysql-5.0.67.tar.gz/from/http://mysql.byungsoo.net/
    root@wl ~ # tar xvfz mysql-5.0.67.tar.gz
    root@wl ~ # cd mysql-5.0.67
    root@wl ~/mysql-5.0.67 # ./configure \
     --without-readline \
     --with-openssl=/usr/local/ssl \
     --prefix=/usr/local/mysql \
     --enable-thread-safe-client \
     --with-charset=utf8 \
     --with-extra-charsets=ucs2,euckr \
     CFLAGS="-I/usr/local/include" \
     CXXFLAGS="-I/usr/local/include"
    메시지 생략
    Thank you for choosing MySQL!
    root@wl ~/mysql-5.0.67 # make
    메시지 생략
    CC -DDBUG_OFF -D_POSIX_C_SOURCE=199506L -D__EXTENSIONS__ -I/usr/local/include -D
    BIG_TABLES -DHAVE_RWLOCK_T -o mysqlmanager command.o mysqlmanager.o manager.o lo
    g.o thread_registry.o listener.o protocol.o mysql_connection.o user_map.o messag
    es.o commands.o instance.o instance_map.o instance_options.o buffer.o parse.o gu
    ardian.o parse_output.o  ./.libs/liboptions.a -lpthread -lthread -lpthread -lthr
    ead -lpthread -lthread -lpthread -lthread libnet.a ../../vio/libvio.a ../../mysy
    s/libmysys.a ../../strings/libmystrings.a ../../dbug/libdbug.a -lz -lpthread -lt
    hread -lposix4 -lgen -lsocket -lnsl -lm -lpthread -lthread
    root@wl ~/mysql-5.0.67 # make install
    메시지 생략
    Making install in instance-manager
    test -z "/usr/local/mysql/libexec" || /root/source/mysql-5.0.51b/install-sh -d "
    /usr/local/mysql/libexec"
      /bin/bash ../../libtool --preserve-dup-deps --mode=install ../.././install-sh 
    -c 'mysqlmanager' '/usr/local/mysql/libexec/mysqlmanager'
    ../.././install-sh -c mysqlmanager /usr/local/mysql/libexec/mysqlmanager
    root@wl ~/mysql-5.0.67 # 
    
    ※ MySQL 설치하는데 가장 오래걸린다. P4 2.0에서는 보통 30분 정도 걸릴 것이다.
  2. The Apache HTTP Server
    root@wl ~ # wget http://apache.tt.co.kr/httpd/httpd-2.2.9.tar.bz2
    root@wl ~ # tar xvfj httpd-2.2.9.tar.bz2
    root@wl ~ # cd httpd-2.2.9
    root@wl ~/httpd-2.2.9 # ./configure \
      --prefix=/usr/local/apache2 \
      --enable-so \
      --enable-auth-digest \
      --enable-dav \
      --enable-dav-fs \
      --with-mpm=worker \
      --enable-rewrite \
      --enable-deflate \
      --enable-headers \
      --enable-expires \
      --enable-log-forensic \
      --enable-ssl \
      --with-ssl=/usr/local/ssl \
      --enable-dbd \
      --enable-authn-dbm \
      --enable-authn-dbd \
      --enable-authz-dbm
    root@wl ~/httpd-2.2.9 # make
    root@wl ~/httpd-2.2.9 # make install
    
    ※ PHP를 개발한 The PHP Group이나 APACHE를 개발한 The Apache Software Foundation에서는 mpm으로 worker나 perchild를 권장하지 않는다. 값을 지정하지 않는다면 기본값인 prefork을 사용한다.
  3. PHP Hypertext Preprocessor
    root@wl ~ # wget http://kr2.php.net/get/php-5.2.6.tar.bz2/from/this/mirror
    root@wl ~ # tar xvfj php-5.2.6.tar.bz2
    root@wl ~ # cd php-5.2.6
    root@wl ~/php-5.2.6 # ./configure \
    	--prefix=/usr/local/php \
    	--with-apxs2=/usr/local/apache2/bin/apxs \
    	--with-mysql=/usr/local/mysql \
    	--with-mysqli=/usr/local/mysql/bin/mysql_config \
    	--with-pdo-mysql=/usr/local/mysql \
    	--with-iconv=/usr/local \
    	--with-libxml-dir=/usr/local/xml \
    	--enable-mbstring \
    	--enable-mbregex \
    	--enable-dbase \
    	--with-gd \
    	--enable-sigchild \
    	--enable-gd-native-ttf \
    	--with-jpeg-dir=/usr/local \
    	--with-png-dir=/usr/local \
    	--with-zlib-dir=/usr/local \
    	--with-freetype-dir=/usr/local \
    	--enable-wddx \
    	--enable-sysvmsg \
    	--enable-sysvsem \
    	--enable-sysvshm \
    	--enable-sockets \
    	--enable-soap \
    	--enable-ftp \
    	--enable-safe-mode \
    	--enable-exif \
    	--enable-bcmath
    root@wl ~/php-5.2.5 # make
    root@wl ~/php-5.2.5 # make test
    TEST 1/3990 [...]
    ...
    # test스크립트의 오류로 실패하는 경우가 많으므로 실패한다고 해서 설치못하는건 아니다.
    root@wl ~/php-5.2.6 # make install
    root@wl ~/php-5.2.6 # cp php.ini-dist /usr/local/php/lib/php.ini
    
    # 여기까지 하면 설치는 끝난다. 아래는 Zend Optimizer를 설치하는 과정이다.
    root@wl ~ # gtar xvfz ZendOptimizer-3.3.0a-sunos5.9-i386.tar.gz
    root@wl ~ # cd ZendOptimizer-3.3.0a-sunos5.9-i386
    root@wl ~/ZendOptimizer-3.3.0a-sunos5.9-i386 # ./install 1)
    
    1)
    - php.ini파일은 /usr/local/php/lib 디렉토리에 있다.
    - Apache Control Utility는 /usr/local/apache2/bin/apachectl 에 있다.
    - 설치가 완료되면 /usr/local/php/lib/php.ini가 /usr/local/Zend/etc/php.ini파일로 심볼릭 링크된다.
    - 원래의 php.ini은 /usr/local/php/lib/php.ini-zend_optimizer.bak 에 있다.
    - php.ini만 이전것으로 복구하면 자연스럽게 Zend Optimizer를 언인스톨 할 수 있다.
    - Zend Optimizer는 http://www.zend.com에서 무료 회원 가입후 무료로 받을 수 있다.
    - Zend Optimizer는 필수사항이 아니다. Zend Encoder로 인코딩된 php 소스를 실행할 수 있으며, php를 좀 더 빨리 실행시켜준다고 알려져 있으며, Solaris Sparc이나 리눅스에서는 큰 효과가 있지만, Solaris x86에서는 그리 큰 효과가 없는듯 하다. (성능향상이 되는지도 잘 모르겠다 ^^ 스팍에서 설치할땐 쉽게 느낄 수 있을정도의 성능향상이 있었다)

3. APM 설정(기본적인것만)

  1. PATH 설정
    root@wl ~ # vi /etc/profile
    # for Apache located at /usr/local/apache2
    if [ -d /usr/local/apache2 ]
    then
      LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/apache2/lib; export LD_LIBRARY_PATH
      PATH=$PATH:/usr/local/apache2/bin; export PATH;
    fi
    
    # for MySQL located at /usr/local/mysql
    if [ -d /usr/local/mysql/lib/mysql ]
    then
      LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/mysql/lib/mysql; export LD_LIBRARY_PATH
      PATH=$PATH:/usr/local/mysql/bin; export PATH;
    fi
    
  2. MySQL 설정
    root@wl ~ # useradd -d /export/home/mysql -g staff -m -u 102 -s /bin/false mysql 1)
    root@wl ~ # cp /usr/local/mysql/share/mysql/my-medium.cnf /etc/my.cnf 2)
    root@wl ~ # vi /etc/my.cnf 2)
    skip-networking
    #log-bin
    root@wl ~ # /usr/local/mysql/bin/mysql_install_db 3)
    root@wl ~ # chown -R mysql:staff /usr/local/mysql/var 4)
    root@wl ~ # /usr/local/mysql/share/mysql/mysql.server start 5)
    root@wl ~ # /usr/local/mysql/bin/mysqladmin -u root password 'new-password' 6)
    root@wl ~ # /usr/local/mysql/bin/mysqladmin -u root -h wl password 'new-password' 6)
    
    1) MySQL을 실행할 유닉스 계정을 생성한다.
    2) MySQL 설정 파일을 복사한 후 적당히 수정한다. /usr/local/mysql/share/mysql 에 my-huge.cnf, my-large.cnf, my-medium.cnf, my-small.cnf 의 예제 설정 파일이 있다. 이를 /etc/my.cnf 으로 이름을 바꿔 복사하면 된다. 리플리케이션을 사용하지 않는다면 [log-bin]을 찾아 주석처리하고 외부에서 접속이 없다면 [skip-networking]의 주석을 푼다.
    3) 기본 MySQL DB를 생성한다.
    4) 기본 MySQL DB는 /usr/local/mysql/var 에 생성되는데 이 디렉토리및 파일들의 소유자를 변경한다.
    5) MySQL 서버를 시작한다. 종료는 [/usr/local/mysql/share/mysql/mysql.server stop] 커맨드를 사용한다.
    6) MySQL의 root 패스워드를 변경한다. 기본값은 없기 때문에 반드시 수정해야 한다. [wl]부분은 MySQL이 설치된 호스트의 이름이다.
  3. Apache 설정
    아파치 2.2.x로 오면서 기본 설정 방법이 다소 차이난다. 그리고 기본값도 다소 차이가 있다. 예를 들면 디렉토리 권한이 기본적으로 거부되어있다. 따라서 <Directory>지시자로 사용할 디렉토리에 대해 접근권한을 주어야 한다. (그나마 다행인것은 2.0.x와 설정 파일이 호환되기 때문에 기존것을 그대로 써도 되는것 같다) 기존에 httpd.conf파일 하나로 제공되던 기본 설정파일이 httpd.conf와 extra 디렉토리의 파일로 나누어 제공되며 각각의 파일을 include해서 사용하도록 하고 있다. include자체는 이전 버전부터 제공되어왔었지만, 그런 기능을 기본 제공된 httpd.conf에서 사용하는 것은 이번이 처음이 아닐까 한다.
    root@wl ~ # cd /usr/local/apache2/conf
    root@wl /usr/local/apache2/conf # vi httpd.conf
    User nobody 1)
    Group nobody 1)
    
    # AddDefaultCharset ISO-8859-1 2)
    
    # Dynamic Shared Object (DSO) Support
    AddType application/x-httpd-php	.php 3)
    AddType application/x-httpd-php-source	.phps 3)
    
    ServerName xxx.solanara.com:80 4)
    
    Include conf/extra/httpd-mpm.conf 5)
    Include conf/extra/httpd-multilang-errordoc.conf
    Include conf/extra/httpd-autoindex.conf
    Include conf/extra/httpd-languages.conf
    Include conf/extra/httpd-userdir.conf
    Include conf/extra/httpd-info.conf
    Include conf/extra/httpd-vhosts.conf
    Include conf/extra/httpd-manual.conf
    Include conf/extra/httpd-dav.conf
    Include conf/extra/httpd-default.conf
    Include conf/extra/httpd-ssl.conf
    
    root@wl ~ # /usr/local/apache2/bin/apachectl start
    
    1) 아파치 2.2.x에서는 daemon 계정을 사용하도록 되어있다. 이를 nobody를 사용하도록 변경한다.
    2) [AddDefaultCharset ISO-8859-1] 부분이 있다면 주석처리 한다. (2.2.0에는 없다)
    3) PHP사용을 위해 AddType부분의 두라인을 추가한다. [LoadModule php5_module modules/libphp5.so]도 필요하지만, 이 설정은 php에서 make install 시 이미 추가되어있을 것이다.
    4) ServerName을 정해준다. 정하지 않아도 되지만 아파치 시작시 [httpd: Could not determine the server's fully qualified domain name, using xxx.xxx.xxx.xxx for ServerName]와 같은 메시지가 나올 수 있다. 만약 도메인이 없다면 IP를 입력해준다. 예) [ServerName 192.168.0.1]
    5) 각종 삽입 파일 지시자의 주석을 풀어 사용 하도록 한다. 기본값을 그대로 사용하겠다면 풀지 않아도 된다.
  4. PHP 테스트
    root@wl ~ # vi /usr/local/apache2/htdocs/index.php
    <?
      phpinfo();
    ?>
    root@wl ~ #
    
    이후 http://localhost/index.php 에서 php정보가 제대로 나오는지 확인한다. 아래와 비슷하게 나와야 한다. 확인되었으면 index.php파일을 지운다. (보안때문)
    PHP정보
    root@wl ~ # rm /usr/local/apache2/htdocs/index.php
    

    여기까지 되면 설치는 완료되었다.
Valid XHTML 1.0 Transitional Valid CSS!
Posted by 1010