웹 전문가가 전하는 웹 세상 Web Story [양선곤의 웹 이야기]

CentOS에서 apache, php, mysql (간단히 줄여서 APM이라 하겠다)을 설치하는 가장 쉬운 방법은 yum을 통해 설치하는 방법이다.

다음과 같은 명령으로 쉽게 설치가 가능하다.

# yum install -y yum-plugin-fastestmirror.noarch

가장 빠른 yum 미러 사이트를 자동으로 찾아 준다. yum 다운로드 속도가 빨라진다.

# yum install -y httpd-*

이제 php와 mysql을 설치해 보자.

# yum install -y php
# yum install -y mysql-*

 

php와 mysql을 연동시키려면 다음 패키지가 필요하다.

# yum install -y php-mysql

 

필요한 거의 모든 패키지들은 이렇게 설치 할 수 있다.

php와 관련된 패키지들은 다음 명령으로 확인 할 수 있다.

#yum list php-*

일반 리눅스 사용자들은 굳이 소스 파일을 받아다가 컴파일하는 귀찮은 작업을 하는 것 보다 이렇게 yum을 통해 필요한 패키지들을 설치하고 관리하는 것을 추천한다.

사실 소스 컴파일을 해서 얻을 수 있는 장점이라는 것은 자신에게 필요한 옵션을 직접 지정해서 설치할 수 있는 것 외에는 딱히 떠오르지 않는다. 그러나 시스템 관리자라면 소스 컴파일 과정을 이해할 필요성이 있다. 소스 컴파일을 할 줄 알아야 자신에게 필요한 rpm을 제작할 수 있기 때문이다.

여기서는 APM을 소스 컴파일을 통해서 설치해 보고 apache 1점대와 2점대의 소스 컴파일 차이점을 간략하게 설명하려고 한다.

가장 먼저 mysql부터 설치한다.

#wget http://ftp.superuser.co.kr/pub/mysql/mysql-3.23.58.tar.gz # tar xvzf mysql-3.23.58.tar.gz
# cd mysql-3.23.58

CentOS 5점대에서 만약 mysql 3점대를 컴파일 할 일이 있다면 다음과 같이 해주어야 정상적으로 컴파일 된다.

# echo "/* Linuxthreads */" >> /usr/include/pthread.h

소스 컴파일해서 설치하는 명령은 다음과 같다.

# ./configure
# make
# make install

이러면 소스는 default값에 의해 대부분 /usr/local 에 설치가 된다.

만약 필요한 옵션이 있다면 ./configure 다음에 필요한 옵션을 넣어서 컴파일을 하면 된다.

필요한 옵션은 다음 명령으로 확인할 수 있다.
# ./configure -help

예를 들어 mysql을 /usr/local/mysql 디렉터리에 설치 하고 싶다면 다음과 같이 하면 된다.

# ./configure -prefix=/usr/local/mysql
# make
# make install

인터넷에 떠도는 컴파일 문서 중에 ./configure ?help로 확인 할 수 없는 컴파일 옵션이 있다면 무시 하거나 꼭 필요한 옵션이라면 해당 소스의 버전을 확인해서 해당 옵션에 맞는 버전을 구해서 컴파일 해야 한다.

아래는 기본적으로 사용하는 mysql 컴파일 옵션이다.

# ./configure
--prefix=/usr/local/mysql
--disable-shared
--enable-assembler
--enable-thread-safe-client
--with-mysqld-user="mysql"
--with-client-ldflags=-all-static
--with-mysqld-ldflags=-all-static
--with-readline
--without-debug
--without-docs
--without-bench
--with-charset=euc_kr

apache 컴파일 설치도 기본적으로 위와 동일하다. 다만 한가지 주의할 점은 apache는 DSO방식과 STATIC방식의 설치를 모두 지원한다는 것이다.

여기서는 이 둘의 정의를 설명하기 보다는 각각의 방식으로 설치 하였을 때의 일어나는 현상으로 DSO와 STATIC 설치에 대해 설명하겠다.

다음은 아파치 1점대에서 STATIC방식으로 컴파일한 것이다.

# wget http://ftp.superuser.co.kr/pub/apache/apache_1.3.39.tar.bz2
# tar xvjf apache_1.3.39.tar.bz2
# cd apache_1.3.39
# ./configure --prefix=/usr/local/apache --enable-module=so
# make
# make install

--enable-module=so 옵션은 mod_so를 올리기 위한 옵션이다. 차후 DSO방식으로 모듈을 추가 하기 위해서 반드시 필요한 모듈이고 DSO로 컴파일 할 수 없는 모듈이다. 반드시 아파치 코어에 포함되어 컴파일 되어야 한다.

다음 명령으로 STATIC 컴파일이 가지는 의미를 알 수 있다.

# cd /usr/local/apache/bin
# ./httpd -l
Compiled-in modules:
- http_core.c
- mod_env.c
- mod_log_config.c
- mod_mime.c
- mod_negotiation.c
- mod_status.c
- mod_include.c
- mod_autoindex.c
- mod_dir.c
- mod_cgi.c
- mod_asis.c
- mod_imap.c
- mod_actions.c
- mod_userdir.c
- mod_alias.c
- mod_access.c
- mod_auth.c
- mod_so.c
- mod_setenvif.c
suexec: disabled; invalid wrapper /usr/local/apache/bin/suexec

아파치 모듈이 코어에 모두 포함되어 있다. 즉 아파치 프로세스를 실행하면 위의 모듈들도 모두 같이 적재되어 실행된다는 뜻이다. 당연히 모듈이 메모리에 올라가 있으므로 실행 속도가 빠를 수 밖에 없다.

이와 반대로 DSO방식으로도 컴파일 해 보다. --enable-shared=max 옵션은 아파치 핵심 모듈들을 DSO방식으로 컴파일 하라는 옵션이다.

# ./configure --prefix=/usr/local/apache --enable-module=so --enable-shared=max


# make && make install


# cd /usr/local/apache/bin


# ./httpd -l


Compiled-in modules:


http_core.c

mod_so.c


suexec: disabled; invalid wrapper /usr/local/apache/bin/suexec

위에 아파치 코어와 같이 포함되어 있던 많은 모듈들이 없어져 버렸다. 이 모듈들은 어디로 가버린 것인가?

# cd /usr/local/apache/libexec
# ls -al
-rw-r--r-- 1 root root? 7587 May 22 09:25 httpd.exp
-rwxr-xr-x 1 root root? 9798 May 22 09:25 mod_access.so
-rwxr-xr-x 1 root root? 8148 May 22 09:25 mod_actions.so
-rwxr-xr-x 1 root root 10760 May 22 09:25 mod_alias.so
-rwxr-xr-x 1 root root? 6083 May 22 09:25 mod_asis.so
-rwxr-xr-x 1 root root 11144 May 22 09:25 mod_auth.so
-rwxr-xr-x 1 root root 28739 May 22 09:25 mod_autoindex.so
-rwxr-xr-x 1 root root 14784 May 22 09:25 mod_cgi.so
-rwxr-xr-x 1 root root? 7385 May 22 09:25 mod_dir.so
-rwxr-xr-x 1 root root? 7196 May 22 09:25 mod_env.so
-rwxr-xr-x 1 root root 16499 May 22 09:25 mod_imap.so
-rwxr-xr-x 1 root root 36637 May 22 09:25 mod_include.so
-rwxr-xr-x 1 root root 16972 May 22 09:25 mod_log_config.so
-rwxr-xr-x 1 root root 15078 May 22 09:25 mod_mime.so
-rwxr-xr-x 1 root root 28542 May 22 09:25 mod_negotiation.so
-rwxr-xr-x 1 root root? 9730 May 22 09:25 mod_setenvif.so
-rwxr-xr-x 1 root root 18059 May 22 09:25 mod_status.so
-rwxr-xr-x 1 root root? 8410 May 22 09:25 mod_userdir.so

DSO 방식으로 설치하면 아파치 설치 디렉터리의 libexec 디렉터리에 이렇게 모듈들이 파일로 저장된다.
(아파치 2점대에서는 modules디렉터리로 변경되었다.)

이러한 모듈들은 httpd.conf 에서 LoadModule 지사자와 AddModule 지시자로 적재된다.
(아파치 2점대에서는 AddModule 지시자는 없어졌다.)

지금까지는 아파치 전체 모듈을 한꺼번에 컴파일 했으나 다음과 같은 컴파일 옵션을 통해필요한 모듈을 STATIC방식으로 혹은 DSO방식으로 자유롭게 컴파일 할 수 있다.

아파치 1점대에서 특정 모듈을 DSO방식으로 컴파일

--enable-module=rewrite
--enable-shared=rewrite

아파치 1점대에서 특정 모듈을 STATIC방식으로 컴파일

--enable-module=rewrite
--disable-shared=rewrite

마지막으로 아파치 1점대와 2점대의 컴파일 옵션의 차이점에 대해 짚고 넘어가겠다.

아래 옵션은 인터넷에 흔히 널려 있는 아파치 2점대 버전의 잘못된 컴파일 옵션의 예이다.

./configure
--enable-rule=SHARED_CORE \
--enable-module=so \
--enable-so \
--enable-shared=max \

--enable-rule=SHARED_CORE 옵션은 아파치 코어를 DSO방식으로 컴파일하는 옵션이다. 2점대부터 없어졌다.
--enable-module=so 아파치 2점대부터 --enable-so 로 변경 되었다. 같은 기능을 가진 옵션이 중복 되었다.

--enable-shared=max는 2점대에서는 --enable-mods-shared=most로 써야지 맞다.

아파치 2점대에서 특정 모듈을 DSO와 STATIC으로 컴파일 하는 옵션은 다음과 같다.

--enable-rewrite=shared

혹은

--enable-rewrite
--enable-mods-shared=rewrite

--enable-rewrite=static

혹은

--enable-rewrite
--enable-modules=rewrite

이 옵션들을 전부 외울 필요는 없다. 컴파일 할 때 필요한 모든 옵션들은

./configure ?-help

에 나와 있으므로 필요할 때마다 참고 하기만 하면 된다. 다음에는 실제로 apache와 php를 static방식과 dso방식으로 컴파일해 보고 실제로 자기 입맛에 맛는 rpm패키징을 제작해 보기로 하자.