Linux/CentOS2012. 3. 30. 00:17

[이 문서에 기술된 내용은 CentOS 4.1이 아닌 다른 linux 서버에서는 정상적으로 동작하지 않을 수 있으며 이해를 위해서 카테고리의 다른 문서부터 순서대로 읽는 것이 좋습니다.]

 

 

 

만일 설치부터 필자를 계속 따라오신 분이라면 현재의 서버엔 BIND 9가 설치되어 있을 것이다.

확인해 보도록 하자.

 

# rpm -qa | grep bind
bind-libs-9.2.4-2
bind-utils-9.2.4-2
ypbind-1.17.2-3
bind-9.2.4-2
bind-chroot-9.2.4-2

 

네임서버도 설치되어 있나 확인해 보자.

# rpm -qa | grep name
caching-nameserver-7.3-3

 

이젠 서버에선 DNS를 설정할 준비가 끝났다.

 

아래 점섬내의 글은 BIND가 설치되지 않으신 분들만 보도록 하자~~

=======================================================================================

1. 설치

네임서버를 구축하기에 앞서 설치에 필요한 주요 패키지 목록을 확인해 보자.

bind-9.3.4-10.pl.el5       :   bind의 기본 패키지.
bind-libs-9.3.4-10.pl.el5      :  bind 서버패키지와 utils패키지에 의해 사용되는 라이브러리.
bind-utils-9.3.4-10.pl.el5     :  dns 네임 서버를 질의하고 인터넷 호스트에 대한 정보를 찾는 유틸 모음이다. 이를 사용하여 주어진 호스트명에 ip주소를 결정할 수 있으며 등록된 도메인과 네트워크 주소에 관한 정보를 찾을 수 있다.
caching-nameserver-9.3.4-10.pl.el5    :  bind운영에 필요한 환경설정파일 모음 패키지.

이외에 bind 개발관련 패키지나 zone파일을 db화 할 수 있는 패키지등 많은 관련 패키지들이 있으나 dns 설치,운영에 필요한 주요 피키지는 위의 네가지라 할 수 있겠다.

설치가 되어 있지 않다면 패키지 설치에 유용한 도구인 yum을 이용하여 설치해 주자.
#yum install bind
#yum install caching-nameserver


이렇게 설치가 끝났다면, dns 실행 준비가 된 것 입니다.

- CentOS 4.1 설치시 패키지선택에서 DNS 이름서버를 선택하면 위의 내용이 모두 설치됨.
  (위와 같은 설치과정을 거칠 필요가 없음)

=======================================================================================

 

이해를 돕기위해 사용되는 예제에서 필자는 test.net 이란 가상의 도메인과 192.168.1.100 이란 공인IP를 사용하것으로 하겠다. (참고로 192.168.~ 로 시작되는 IP는 99% 공유기 IP이다.)

설마 아래의 내용을 보고 실제로 test.net으로 따라하시는 분은 없을거라 믿는다..

 

우선 도메인을 구입하기 위해서 whois.co.kr 에 접속했다.

test.net이란 도메인을 검색했더니 다행스럽게도 소유자가 없는 도메인으로 나와서

바로 회원으로 가입하고 1년 사용료 2만얼마를 내고 도메인을 구입했다.

 

네임서버를 지정하기 위해서 [내 도메인 관리]의 [호스트 관리] 메뉴로 들어가서...

ns.test.net 이란 호스트을 만들고 IP입력란에 192.168.1.100 라고 입력한후 호스트명 생성을 클릭.

 

[내 도메인 관리] - [네임서버 변경]으로 들어가서 1차 네임서버에 ns.test.net , 2차 네임서버는 whois에서 제공하는 네임서버명을 입력하고 저장했다.

(참고로 com 이나 .net은 외국도메인이라 적용되는데 평균 24시간정도가 소요된다.)

 

이제 다시 CentOS로 들어와서...

 

1.서버에서 도메인을 제일 먼저 찾는 곳

# vi /etc/hosts
=======================================================================================
127.0.0.1        test.net      localhost
192.168.1.100  ns.test.net  ns
=======================================================================================
위와 같이 바꾸도록 하자

 

2.서버에서 쓸 dns

# vi /etc/resolv.conf
=======================================================================================
domain test.net
search test.net
nameserver 192.168.1.100
nameserver 168.126.63.1
nameserver 168.126.63.2
=======================================================================================

 

3.도메인에 대한 ip를 찾을 때 참조할 순서
# vi /etc/host.conf
=======================================================================================
order hosts,bind

==> 초기 설치시 이렇게 되어 있으며, 의미는 /etc/hosts파일부터 찾고, bind에서 찾는다는의미
=======================================================================================

 

4.Zone 파일 및 케시 DNS서버에 대한 설정

# vi /etc/named.conf
=======================================================================================
options {
        directory "/var/named";        // zone 파일을 저장할 디렉토리
        // query-source address * port 53;  // DNS 서버의 ip와 포트 설정 (기본)
controls { //==> 127.0.0.1 에서 rndc로 접속시 컨트롤 가능하다는 의미
        inet 127.0.0.1 allow { localhost; } keys { rndckey; };
};
// 캐시 네임 서버 설정
zone "." IN {
        type hint;
        file "named.ca";
};
// localhost 에 대한 설정
zone "localhost" IN {
        type master;
        file "localhost.zone";
        allow-update { none; };  //다이나믹 하게 업데이트를 허용할것인지 설정한다. 대부분 none
};
// 127.0.0.X 에 대한 역 도메인
zone "0.0.127.in-addr.arpa" IN {
        type master;
        file "named.local";
        allow-update { none; };
};
include "/etc/rndc.key";
=======================================================================================

아래는 CentOS 6.2에서 실제 정상으로 시작이 수행된 파일의 내용이다.
=======================================================================================
//
// named.conf
//
// Provided by Red Hat bind package to configure the ISC BIND named(8) DNS
// server as a caching only nameserver (as a localhost DNS resolver only).
//
// See /usr/share/doc/bind*/sample/ for example named configuration files.
//

options {
        listen-on port 53 { any; };
        listen-on-v6 port 53 { ::1; };
        directory       "/var/named";
        dump-file       "/var/named/data/cache_dump.db";
        statistics-file "/var/named/data/named_stats.txt";
        memstatistics-file "/var/named/data/named_mem_stats.txt";
        query-source      port 53;
        query-source-v6   port 53;
        allow-query     { any; };
        recursion yes;

        dnssec-enable yes;
        dnssec-validation yes;
        dnssec-lookaside auto;

        /* Path to ISC DLV key */
        bindkeys-file "/etc/named.iscdlv.key";
};

logging {
        channel default_debug {
                file "data/named.run";
                severity dynamic;
        };
};

zone "." IN {
        type hint;
        file "named.ca";
};

//include "/etc/named.rfc1912.zones";


// localhost
zone "localhost" IN {
        type master;
        file "localhost.zone";
        allow-update { none; };  //    .  none
};
// 127.0.0.X
zone "0.0.127.in-addr.arpa" IN {
        type master;
        file "named.local";
        allow-update { none; };
};
//include "/etc/rndc.key";


zone "test.net" IN {
type master;
file "test.net.zone";
allow-update { none; };
};

zone "0.0.127.in-addr.arpa" { //reverse domain - IP     ~!!
type master;
file "test.net.rev";
allow-update { none; };
};
=======================================================================================

위 파일 내용들은 caching-nameserver에서 기본적으로 생성되는 것들이다. 대부분의 서버에서 별다른 설정하지 않고 사용하면 되고, 중요한 것은 다음 줄부터이다. test.net 이라는 도메인을 셋팅하도록 하겠다.

 

named.conf파일의 맨 아랫 줄에 아래의 내용을 추가한다.

=======================================================================================
zone "test.net" IN {
type master;
file "test.net.zone";
allow-update { none; };
};

zone "1.168.192.in-addr.arpa" { //reverse domain - IP가 역으로 입력되어 있는 것에 주목~!!
type master;
file "test.net.rev";
allow-update { none; };
}; 
=======================================================================================

 

zone 파일명은 test.net.zone으로 하였다.

위에서 추가한 도메인에 대한 zone 파일을 만들도록 하자..

 

# vi /var/named/chroot/var/named/test.net.zone
=======================================================================================
$TTL    86400
@       IN      SOA     ns.test.net. root.ns.test.net.  (
                2005101311 ; Serial
                28800      ; Refresh
                14400      ; Retry
                3600000    ; Expire
                86400 )    ; Minimum
                IN      NS      ns.test.net.
                IN      MX  0   mail.test.net.
;
localhost       IN      A       127.0.0.1
@                 IN      A       192.168.1.100
www            IN      A       192.168.1.100

mail              IN      A       192.168.1.100
*                  IN      A       192.168.1.100
=======================================================================================
# ln -s /var/named/chroot/var/named/test.net.zone /var/named/test.net.zone

(반드시 심볼릭 링크를 걸어야 한다~~!!!)


# vi /var/named/chroot/var/named/test.net.rev
=======================================================================================
$TTL    86400
@       IN      SOA     ns.test.net. root.ns.test.net.  (
                2005101312 ; Serial
                28800      ; Refresh
                14400      ; Retry
                3600000    ; Expire
                86400 )    ; Minimum
                IN      NS      ns.test.net.
;
100             IN      PTR     ns.test.net.
100             IN      PTR     www.test.net.
100             IN      PTR     test.net.
=======================================================================================
위에서 100이란 숫자는 IP의 제일 마지막에 해당하는 숫자이다.

# ln -s /var/named/chroot/var/named/test.net.rev /var/named/test.net.rev

 

자.. 이제 모든 설정은 끝났다.. 사실 이제부턴 네임서버를 변경한 후 하루정도가 지나야 확실한 결과를 얻을 수 있다. 또한 방화벽을 설치했다면 외부에서 네임서버로 접근할 수 없으니 주의한다. 네임서버의 포트는 42로 방화벽에서 이 포트를 풀어야 한다.

설치와 설정이 끝났다면, DNS 서버를 시작하도록 한다.

(1) 시작
# /etc/rc.d/init.d/named start

*** 시작 시에 오류가 발생하는 경우,
/var/log/messages 를 살펴보고, /etc/named.conf 에서 설정한 파일명이 없는 경우,
/var/named/chroot/var/named/ 아래에 생성하여 주고,
/var/named/ 아래에 ln 명령으로 심볼릭 링크를 생성한다.

local에 관련된 오류는 아래의 파일내역을 참고해서 생성 후에 반드시, 심볼릭 링크를 생성하여 주고,
특히, local.ca 파일은 /var/named/chroot/var/named/ 아래로 mv 를 수행시켜 놓고,
동일한 방법으로 심볼릭 링크를 생성한 후, start를 수행하면 [ OK ]로 시작된다.

/var/named/chroot/var/named/named.local
=======================================================================================
$TTL 1D
@       IN SOA  @ rname.invalid. (
                                        0       ; serial
                                        1D      ; refresh
                                        1H      ; retry
                                        1W      ; expire
                                        3H )    ; minimum
        NS      @
        A       127.0.0.1
        AAAA    ::1
;
1       IN      PTR      localhost
=======================================================================================

/var/named/chroot/var/named/named.local
=======================================================================================
$TTL 1D
@       IN SOA  @ rname.invalid. (
                                        0       ; serial
                                        1D      ; refresh
                                        1H      ; retry
                                        1W      ; expire
                                        3H )    ; minimum
        NS      @
        A       127.0.0.1
        AAAA    ::1
;
localhost       IN    A    127.0.0.1
=======================================================================================

(2) 재시작
# /etc/rc.d/init.d/named reload

 

(3) 정지
# /etc/rc.d/init.d/named stop

 

(4) 서버시작시 자동으로 실행

# ntsysv

named 라는 서비스에 체크하고 OK로 저장하고 나오도록 한다.

 

(5) 호스트 네임 검사
# grep named /var/log/messages

 

(6) 설정한 도메인 확인하기

# nslookup

> test.net
Server:  168.126.63.1
Address: 168.126.63.1#53

Non-authoritative answer:
Name: test.net
Address: 192.168.1.100

> server 168.126.63.1

> set type=any

> test.net

--------------------------------------------------------------------------
/etc/vhosts 또는 resolv.conf를 수정 해 줘야 하는데 현재 웹서버를 호스트로 등록 하시면 되요.

다음에 /etc/named.caching-nameserver.conf를 수정하는데 처음 한 번만 수정 하면 다음에 수정 할일이 없습니다.

다음으로 zone 설정 파일에 도메인을 추가 합니다.
/etc/named.rfc1912.zones 도메인 추가 할 때마다 레코드를 추가 해 줘야 합니다.
zone "sir.co.kr" IN { type master; file "sir.co.kr.zone"; allow-update { none; };
sir.co.kr.zone이라는 파일에 도메인 정보를 넣게 되는데 새로 생성하시면 됩니다.
; 세미콜론 뒤에는 주석입니다. serial : 일련 번호 입니다. 존 파일이 수정 될 때마다 숫자가 커져야 합니다.
존 파일을 수정 했는데 이 숫자가 수정 전과 같거나 작으면 다른 네임서버들이 바뀐 내용을 읽어가지 않아요.
refresh : 이건 네임서버들이 이 존파일을 다시 읽어가는 시간입니다. 1H라고 하면 하시간에 한 번씩 이 존 파일을 참조합니다.
내용을 수정 하고 serial을 변경하지 않으면 refresh 시간 만큼 기다려야 합니다. 뒤에 M이나 H가 없으면 초단위입니다.

/var/named/chroot/var/named안에 존 파일을 생성하시고 /var/named에 sl로 심볼링크를 하세요.

존파일 권한이 root:named로 됐는지 꼭 확인 하셔야 합니다.
root로 존파일을 생성하면 root:root로 권한이 되는데 named를 아무리 실행해도 권한이 없어서 존파일을 열지 못하더라구요.

service named resstart 또는 service named start 이렇게 네임서버 실행하시고,
조금 있다가 nslookup으로 제대로 설정 됐는지 확인 해보세요.

나중에 화이트도메인 등록 할 때는 존파일 마지막에 한 줄 추가하는게 있는데 그건 kisa사이트에서 알려줍니다.

Posted by iWithJoy
Linux/CentOS2012. 3. 9. 13:13
CentOS에서 가끔 yum을 사용하다가 갑지가 yum이 이상하게 사용중에 에러가 발생할 때가 있다. yum은 rpm 패키지를 관리하는데 이 때 rpm 패키지에 관련된 정보를 사용하는 데이터베이스에 이상이 생겨서 발생하는 문제라는 것을 CentOS 커뮤니티에서 찾아볼 수 있었다. 다음 링크에가면 이 문제애 대한 thread를 확인할 수 있다. http://www.centos.org/modules/newbb/viewtopic.php?topic_id=20237


Traceback (most recent call last):
  File "/usr/bin/yum", line 29, in ?
    yummain.user_main(sys.argv[1:], exit_code=True)
  File "/usr/share/yum-cli/yummain.py", line 229, in user_main
    errcode = main(args)
  File "/usr/share/yum-cli/yummain.py", line 145, in main
    (result, resultmsgs) = base.buildTransaction() 
  File "/usr/lib/python2.4/site-packages/yum/__init__.py", line 647, in buildTransaction
    (rescode, restring) = self.resolveDeps()
  File "/usr/lib/python2.4/site-packages/yum/depsolve.py", line 704, in resolveDeps
    for po, dep in self._checkFileRequires():
  File "/usr/lib/python2.4/site-packages/yum/depsolve.py", line 939, in _checkFileRequires
    if not self.tsInfo.getOldProvides(filename) and not self.tsInfo.getNewProvides(filename):
  File "/usr/lib/python2.4/site-packages/yum/transactioninfo.py", line 414, in getNewProvides
    for pkg, hits in self.pkgSack.getProvides(name, flag, version).iteritems():
  File "/usr/lib/python2.4/site-packages/yum/packageSack.py", line 300, in getProvides
    return self._computeAggregateDictResult("getProvides", name, flags, version)
  File "/usr/lib/python2.4/site-packages/yum/packageSack.py", line 470, in _computeAggregateDictResult
    sackResult = apply(method, args)
  File "/usr/lib/python2.4/site-packages/yum/sqlitesack.py", line 861, in getProvides
    return self._search("provides", name, flags, version)
  File "/usr/lib/python2.4/site-packages/yum/sqlitesack.py", line 43, in newFunc
    return func(*args, **kwargs)
  File "/usr/lib/python2.4/site-packages/yum/sqlitesack.py", line 837, in _search
    for pkg in self.searchFiles(name, strict=True):
  File "/usr/lib/python2.4/site-packages/yum/sqlitesack.py", line 43, in newFunc
    return func(*args, **kwargs)
  File "/usr/lib/python2.4/site-packages/yum/sqlitesack.py", line 586, in searchFiles
    self._sql_pkgKey2po(rep, cur, pkgs)
  File "/usr/lib/python2.4/site-packages/yum/sqlitesack.py", line 470, in _sql_pkgKey2po
    pkg = self._packageByKey(repo, ob['pkgKey'])
  File "/usr/lib/python2.4/site-packages/yum/sqlitesack.py", line 413, in _packageByKey
    po = self.pc(repo, cur.fetchone())
  File "/usr/lib/python2.4/site-packages/yum/sqlitesack.py", line 68, in __init__
    self._read_db_obj(db_obj)
  File "/usr/lib/python2.4/site-packages/yum/sqlitesack.py", line 94, in _read_db_obj
    setattr(self, item, _share_data(db_obj[item]))
TypeError: unsubscriptable object


해결 방법은 기존의 rpm 데이터베이스를 삭제하고 다시 rebuild 해주면 되는 것이다. 아래 순서대로 yum clean을 하고 rpm 데이터베이스 삭제후 rpm 데이터베이스를 리빌드하고 마지막으로 yum update를 해주면 다시 yum을 이용해서 정상적으로 패키지 관리를 할 수 있게 된다.

yum clean all

rm -rf /var/lib/rpm/__db*

rpm --rebuilddb

yum update


'Linux > CentOS' 카테고리의 다른 글

Gmail for CentOS  (0) 2012.04.03
DNS 설정  (0) 2012.03.30
Install Clam AntiVirus to protect from virus  (0) 2012.03.09
Linux용 백신관리자  (0) 2012.03.09
웹 DDOS 공격 방어(mod_evasive)  (0) 2012.03.09
Posted by iWithJoy
Linux/CentOS2012. 3. 9. 10:37
[1] Install Clamav  
[root@mail ~]# yum --enablerepo=rpmforge -y install clamav   # install from RPMforge
[root@mail ~]# vi /etc/freshclam.conf 
# line 122: make it comment
#NotifyClamd /etc/clamd.conf 
[root@mail ~]# freshclam# update pattern files
ClamAV update process started at Sun Jul 10 22:10:08 2011
main.cvd is up to date (version: 53, sigs: 846214, f-level: 53, builder: sven)
daily.cvd is up to date (version: 13304, sigs: 144473, f-level: 60, builder: guitar)
bytecode.cvd is up to date (version: 143, sigs: 40, f-level: 60, builder: edwin)
 
[2] Try to scan  
# try to scan
[root@mail ~]# clamscan --infected --remove --recursive /home
----------- SCAN SUMMARY -----------
Known viruses: 989350
Engine version: 0.97.1
Scanned directories: 3
Scanned files: 3
Infected files: 0
Data scanned: 0.00 MB
Data read: 0.00 MB (ratio 0.00:1)
Time: 2.060 sec (0 m 2 s) 
# try to download trial virus

[root@mail ~]# wget http://www.eicar.org/download/eicar.com
[root@mail ~]# clamscan --infected --remove --recursive .

./eicar.com: Eicar-Test-Signature FOUND
./eicar.com: Removed. # just detected----------- SCAN SUMMARY -----------
nown viruses: 989350
Engine version: 0.97.1
Scanned directories: 1
Scanned files: 13
Infected files: 1
Data scanned: 0.02 MB
Data read: 0.01 MB (ratio 2.00:1)
Time: 2.079 sec (0 m 2 s)
Posted by iWithJoy
Linux/CentOS2012. 3. 9. 10:20
출처 : http://blog.naver.com/jabusunin

Open Antivirus Project
http://www.openantivirus.org/
(자유소프트웨어 진영의 대표적 안티바이러스)


Clam Antivirus
http://www.clamav.net/
(GPL 라이센스를 따르며 C로 쓰여진 OpenAntivirus database 기반의 빠른 스캐너)


QtFprot
http://www.kde-apps.org/content/show.php?content=10381
(QtFprot is a frontend for FPROT 4.x, a free (for personal use) Linux virus-scanner. It's similar to XFprot, but written in Qt. It allows you to set all FPROT paramters with a comfortable GUI.)


Firewall Builder
http://www.fwbuilder.org/
(GPL 라이센스를 따르는 멋진 멀티플래폼 방화벽 설정도구)

참고: http://firewall-jay.sourceforge.net/ (TUI 모드의 방화벽 설정 도구)

http://www.simonzone.com/software/guarddog/#introduction


Kmyfirewall
http://kmyfirewall.sourceforge.net/
(GPL 라이센스의 KDE용 IPtables 설정 도구)

 

File::Scan
http://freshmeat.net/projects/filescan/
(File::Scan allows users to make multiplataform virus scanners which can detect Windows/DOS/Mac viruses. It include a virus scanner and signatures database
텍스트 기반의 펠로 쓰여진 바이러스 스캔너)


Aegis Virus Scanner
http://jodrell.net/projects/aegis
(그래픽 인터페이스의 단순하고 직관적인 바이러스 스캔너)

 

BitDefender Linux Edition
http://www.bitdefender.com/
(텍스트 모드의 강력한 바이러스 스캐너로 개인사용자는 무료다운로드 가능-자유소프트웨어 아님)


Panda Antivirus for Linux
http://www.pandasoftware.com/com/linux/
(무료소프트웨어-자유소프트웨어 아님. 텍스트 기반으로 사용자 프로필 작성후 다운로드 가능)

 

F-Prot
http://www.f-prot.com/
(서버 사용자 유료 개인사용자는 프로필 작성 후 무료사용)


McAfee
http://www.mcafee.com/us/default.asp
(사용자 프로필 작성후 평가판을 다운로드 받을 수 있음)


Kapersky Anti-Virus
http://www.kaspersky.com
(상용 http://www.kaspersky.com/trials 에서 개인 프로필 작성후 30 평가판 다운로드 가능)


NOD32
http://www.nod32.com/home/home.htm
(상용 윈도우 버젼만 평가판 제공 리눅스용으로는 서버용 판매)


Sophos Antivirus
http://www.sophos.com/
(상용 워크스테이션용 $40 서버용 $400 -1사용자 기준)


ServerProtect
http://www.trendmicro.com/kr/products/fileserver/spl/evaluate/overview.htm
(상용 서버용)


RAV Antivirus
http://www.ravantivirus.com
(현재 평가판 버젼 다운로드 중단 구매 가능)


InterScan
http://www.trendmicro.com/en/products/linux/overview.htm
(상용)


Vexira Antivirus for Linux
http://www.centralcommand.com/downloads.html
(텍스트 기반 상용 평가판 다운로드 가능 


Posted by iWithJoy
Linux/CentOS2012. 3. 9. 09:37

웹 DDOS 공격 방어(mod_evasive)

먼저, http://www.zdziarski.com/blog/ 에 접속하여 오른쪽 Pages > Projects > mod_evasive 에 들어가면,
Downloads: Stable 의 파일 다운로드 경로를 오른쪽 마우스를 눌러 속성의 내역으로 알아내서 아래와 같이 다운로드를 수행한다.
# wget http://www.zdziarski.com/blog/wp-content/uploads/2010/02/mod_evasive_1.10.1.tar.gz
# tar xvzpf mod_evasive_1.10.1.tar.gz
# cd mod_evasive_1.10.1
# yum install httpd-devel
# apxs -iac mod_evasive20.c
# vi /etc/httpd/conf/httpd.conf 로 아래의 내역을 검색하여 내용을 추가한다.
 LoadModule evasive20_module   /usr/lib/httpd/modules/mod_evasive20.so

 <IfModule mod_evasive20.c>
 DOSHashTableSize        3097
 DOSPageCount            3
 DOSSiteCount            50
 DOSPageInterval         1
 DOSSiteInterval         1
 DOSBlockingPeriod       30
 </IfModule>
# /etc/rc.d/init.d/httpd restart 수행 시에 실패한 경우,
시스템 > 관리 > 서비스의 httpd 를 찾아서 사용안함을 눌러 중지하고, 다시 사용을 눌러 서비스를 활성화한다.
제대로 수행되지 않는 경우, reboot를 수행한다.

*  모듈 사용 중지 하기
 DOSPageCount  0
 DOSSiteCount    0
* 차단 테스트: perl test.pl
* DOS공격한 IP는 /tmp/dos-127.0.0.1 과 같이 해당 IP의 파일이 생성된다
* DOS 인가된 IP 주소 할당(스크립트, 로컬서치로봇등 해당 서버로 부터의 많은 접속요청이 필요할때)
 DOSWhitlist 127.0.0.1
 DOSWhitlist 127.*.*.*

Posted by iWithJoy
Linux/CentOS2012. 3. 8. 14:26
Apache 1.x 버전에서는 아래와 같이 mod_throttle 모듈과 mod_bandwidth 모듈을 통해 트래픽 제어를 할 수 있었다.

Apache + Throttle(mod_throttle) 을 이용해서 트래픽정보를 구합니다.

[Throttle Status]
http://자신의도메인/throttle-me
실시간으로 볼 수 있으며 자신의 일일 트래픽량이 증가시 웹서버에서 Throttle 연동해 있기 때문에 초과시 자동적으
로 트래픽량 초과 안내 페이지가 나오면 일일 트래픽량으로 제한이므로 하루가 지나면 다시 초기화로 다시 계산해서
그 정보가 계산됩니다.

% - 허용된 트래픽에서 몇퍼센트를 사용
Hits - 도메인의 히트수
Refused - 트래픽이 초과하였을때 접속하여 요청거부된 횟수
KBytes Sents - 회원님의 도메인 트래픽량
KBytes Per Hits - 한 히트당 트래픽량의 평균치
Polocy - Volume 트래픽 제한을 양으로 계산
Limits - 트래픽 제한양 제한선 입니다.
Period - 1d 하루 24시간을 기준으로 트래픽을 계산한다는 뜻입니다.
Period Elapsed - 24시간중 소요된 시간
Idle time - 최종 히트후 요청 대기시간

참조 사이트 : 
http://www.snert.com/Software/mod_throttle/

##############
## 설치하기 ##
##############

일반적으로 아파치에서 mod_throttle 을 연동하기 위해서는 2가지 방식의 컴파일을 지원하지만 여기서는
DSO 방식으로 설치하도록 한다.

---------------------------------------------------------------------
STATIC 방식 (APACHE mod_throttle 부분)

./configure --disable-shared=throttle
--add-module=/usr/local/mod_throttle-3.1/mod_throttle.c

---------------------------------------------------------------------
DSO 방식

cd /usr/local/mod_throttle-3.1
make install
mod_throttle.so를 apache디렉토리 libexec안에 복사해줍니다.
그런후 httpd.conf에 mod_throttle부분을 수정.
(compile시 apxs에 위치를 Makefile안에 전체경로로 변경후 make하세요.)
LoadModule throttle_module libexec/mod_throttle.so
AddModule mod_throttle.c
---------------------------------------------------------------------

아파치에서 mod_throttle 을 설치하기 위한 순서

1. 다운로드
2. 컴파일 / 설치
3. apache 설정파일 내부에서의 mod_throttle 부분을 인식
4. 버츄얼 호스팅 부분의 각 사용자마다 각각 트래픽 제어
5. 트래픽확인

■ 다운로드
[root@www download]# wget
http://www.snert.com/Software/mod_throttle/mod_throttle312.tgz
[root@www download]# tar xzf mod_throttle312.tgz
[root@www download]# cd mod_throttle-3.1.2/
[root@www mod_throttle-3.1.2]# ll
total 188
-rw-r--r--  1 111 users  7233 Dec  3  2000 CHANGES.txt
drwxr-xr-x  2 111 users  4096 Dec  2  2000 Img
-rw-r--r--  1 111 users  1525 Dec  2  2000 LICENSE.txt
-rw-r--r--  1 111 users  1009 Dec  2  2000 Makefile
-rw-r--r--  1 111 users 26492 Dec  3  2000 index.shtml
-rw-r--r--  1 111 users 97711 Dec  3  2000 mod_throttle.c
-rw-r--r--  1 111 users   277 Dec  2  2000 patch.proxy_util.c
-rw-r--r--  1 111 users     4 Dec  3  2000 version3.cnt

■ 컴파일 / 설치
[root@www mod_throttle-3.1.2]# make install
apxs -c    mod_throttle.c
gcc -DLINUX=22 -DHAVE_SET_DUMPABLE -DUSE_HSREGEX -fpic -DSHARED_MODULE -
I/usr/local/apache2/include  -c mod_throttle.c
gcc -shared -o mod_throttle.so mod_throttle.o
apxs -i -a -n 'throttle' mod_throttle.so
[activating module `throttle' in /usr/local/apache2/conf/httpd.conf]
cp mod_throttle.so /usr/local/apache2/libexec/mod_throttle.so
chmod 755 /usr/local/apache2/libexec/mod_throttle.so
cp /usr/local/apache2/conf/httpd.conf /usr/local/apache2/conf/httpd.conf.bak
cp /usr/local/apache2/conf/httpd.conf.new /usr/local/apache2/conf/httpd.conf
rm /usr/local/apache2/conf/httpd.conf.new
root@www mod_throttle-3.1.2]# apachectl restart


■ apache 설정파일 내부에서의 mod_throttle 부분을 인식

<IfModule mod_throttle.c>
# 트래픽이 초과되면 나오는 에러페이지
ErrorDocument 503
http://192.168.1.1/error/error.html
ThrottlePolicy none

<Location /throttle-status>
SetHandler throttle-status
Deny from all
# 다른접근을 모두 거부하고 특정 아이피에서만 throttle-status 를 확인 하도록 설정
# 여기서는 192.168.1.1 과 192.168.1.2 의 IP 주소만 접근할 수 있다.
Allow from 192.168.1.1
Allow from 192.168.1.2
</Location>

<Location /throttle-me>
SetHandler throttle-me
</Location>
<Location /~*/throttle-me>
Order deny,allow
Deny from all
Allow from all
SetHandler throttle-me
</Location>
</IfModule>

■ 버츄얼 호스팅 부분의 각 사용자마다 각각 트래픽 제어

  트래픽을 걸때의 여러가지 방법이 존재한다.
  ThrottlePolicy Volume 100M 1d //하루 100M
  ThrottlePolicy Request 1000 1d //하루 천번
  ThrottleClientIP 1100 volume 2 10   //로그 1100k

<VirtualHost 192.168.1.1>
    ServerName test1.com
    DocumentRoot /home/test1/pubic_html
   
    # 전송량 1일 300M
    ThrottlePolicy Volume 300M 1d 
</VirtualHost>
<VirtualHost 192.168.1.1>
    ServerAdmin
webmaster at test2.com
    DocumentRoot /home/test2/public_html
    ServerName  test2.com
   
    # 전송량 1일 400M
    ThrottlePolicy Volume 400M 1d
</VirtualHost>
<VirtualHost 192.168.1.1>
    ServerAdmin
webmaster at test3.org
    DocumentRoot /home/test3/public_html
    ServerName  test3.org
   
    # 전송량 1일 500M
    ThrottlePolicy Volume 500M 1d
</VirtualHost>

■ 트래픽확인

1. 첫번째방법은 자신의 트래픽만 보는 방법 ( 일반 사용자인 경우 )

http://자신의도메인/throttle-me

2. 두번째방법은 모든 가상호스트를 보는 방법 ( 관리자인 경우 )
( ※ 중요!!! 이때는 아무나 접근할 수 없도록 접근 IP 막는 조치를 취해야 한다. 그렇지 않으면 모든 사용자의
     정보를 다른 사용자가 볼 수도 있고 트래픽을 초기화 할 수도 있다. )

http://자신의도메인/throttle-status


하지만, Apache2로 넘어오면서 mod_throttle 모듈이나 mod_bandwidth 모듈을 더 이상 사용할 수 없게 된다.

대신 mod_cband 모듈이라는 걸출한 녀석을 사용할 수 있다. mod_cband 모듈을 통해 트래픽 제한과 대역폭 제한, 그리고 트래픽 제한 결과 등을 웹을 통해 확인할 수 있게 된다.

Debian에서는 libapache2-mod-cband 패키지가 있으므로, 소스 컴파일할 필요 없이 패키지를 설치하면 된다. 현재 libapache2-mod-cband 패키지의 mod_cband 모듈 버전은 0.9.7.4 이다.

# apt-get install libapache2-mod-cband


만약 최신 버전을 설치하고 싶다면, 소스 파일을 구해 컴파일하면 된다.

출처:
http://linux.tini4u.net

os: centos4.6

아파치 2.x에서는 cband 모듈을 이용함으로써 두가지의 기능을 모두 사용할 수 있습니다.
또한 xml 형태로의 데이터까지 얻을 수 있기 때문에 관리자 입장에서 매우 반가울 수 밖에 없습니다.

1. mod_cband 설치 (최신버전:
http://cband.linux.pl/)
http://www.sfr-fresh.com/unix/privat/mod-cband-0.9.7.5.tgz/


[root@manage src]# wget http://www.sfr-fresh.com/unix/privat/mod-cband-0.9.7.5.tgz
[root@manage src]# tar xvzfp mod-cband-0.9.7.5.tgz
[root@manage src]# cd mod-cband-0.9.7.5
[root@manage mod-cband-0.9.7.5]# ./configure --with-apxs=/usr/local/apache/bin/apxs
[root@manage mod-cband-0.9.7.5]# make
[root@manage mod-cband-0.9.7.5]# make install 수행 시에 아래와 같은 오류가 발생하는 경우,
...
src/mod_cband.c:1365: error: 'struct conn_rec' has no member named 'remote_addr'
apxs:Error: Command failed with rc=65536
.
make: *** [src/.libs/mod_cband.so] \uc624\ub958 1
apache 버전이 2.2 버전대가 아닌, httpd-2.4.1 버전인 관계로 발생하므로
아래와 같이 - 부분을 + 부분으로 수정 후, 저장하여, configure, make, make install을 재수행하면, 정상처리된다. 
# vi ./src/mod_cband.c
이때,  ./src/.libs/mod_cband.c 라는 파일이 존재하지 않는 상태에서 수행해야 한다.
  1. --- mod-cband-0.9.6.1/src/mod_cband.c   2006-01-21 20:23:27.000000000 -0500
  2. +++ mod-cband-0.9.6.1-cov//src/mod_cband.c      2012-02-22 19:23:04.162307962 -0500
  3. @@ -1278,7 +1278,7 @@
  4.      p.bitlen = 32;
  5.      p.ref_count = 0;
  6.      p.family = AF_INET;
  7. -    p.add.sin.s_addr = inet_addr(r->connection->remote_ip);
  8. +    p.add.sin.s_addr = inet_addr(r->connection->client_ip);
  9.                     
  10.      node = patricia_search_best(config->tree, &p);
  11.                                 
  12. @@ -1287,7 +1287,7 @@
  13.                                                
  14.          if (leaf) {
  15.  #ifdef DEBUG
  16. -            fprintf(stderr,"%s leaf %s\n",r->connection->remote_ip,leaf);
  17. +            fprintf(stderr,"%s leaf %s\n",r->connection->client_ip,leaf);
  18.              fflush(stderr);
  19.  #endif
  20.             return atoi(leaf);
  21. @@ -1307,10 +1307,10 @@
  22.      if (entry == NULL)
  23.         return -1;
  24.      
  25. -    if (c->remote_ip != NULL)
  26. -       addr = inet_addr(c->remote_ip);   
  27. +    if (c->client_ip != NULL)
  28. +       addr = inet_addr(c->client_ip);   
  29.      else
  30. -       addr = c->remote_addr->sa.sin.sin_addr.s_addr;
  31. +       addr = c->client_addr->sa.sin.sin_addr.s_addr;
  32.         
  33.      time_now = apr_time_now();     
  34.      hosts = config->remote_hosts.hosts;
#make
...
write "make install" to install module
#make install
...
chmod 755 /usr/local/apache/modules/mod_cband.so
#


2. 아파치 환경설정에서의 cband 설정
cband 모듈 또한 throttle와 마찬가지로 3rd-party 모듈이기 때문에 아파치에서 설정을 합니다.
  1. [root@localhost]# vi /usr/local/apache/conf/httpd.conf
  2. <IfModule mod_cband.c>
  3.     <Location /cband-status>
  4.         SetHandler cband-status
  5.         Order Deny,Allow
  6.         Deny from All
  7.         Allow from 127.0.0.1 100.100.100.100
  8.     </Location>

  9.     <Location /cband-me>
  10.         SetHandler cband-status-me
  11.         Order deny,allow
  12.         Deny from all
  13.         Allow from all
  14.     </Location>
  15. </IfModule>

※ SetHandler 설명
cband-status -> 관리자 페이지 입니다. 따라서 접근을 허용할 IP를 입력해주셔야 됩니다.
cband-me -> 사용자 페이지 입니다.

3. cband 적용
cband는 각 호스트에 대해서 여러가지 지시자를 사용하여 설정 할 수 있습니다.
아래는 여러가지 지시자중 하나인 가장 많이 사용되는 CbandLimit을 사용한 예제 입니다.
  1. ※ 각각의 호스트에 따로따로 설정해줄 때
  2. <VirtualHost 192.168.0.1>
  3.     ServerName foobar.com
  4.     ServerAlias www.foobar.com
  5.     DocumentRoot /home/foobar/public_html
  6.     ErrorLog logs/foobar-err
  7.     CustomLog logs/foobar-acc combined
  8.     CBandLimit 100Mi
  9.     CBandPeriod 1D
  10. </VirtualHost>

※ 위 설정은 1Day 동안 100M의 트래픽을 허용하겠다는 설정입니다.

  1. ※ 하나의 유저(foobar)가 여러개의 호스트를 사용하고 있는 경우 (트래픽 공유)
  2. <CBandUser foobar>
  3.     CBandUserLimit 100Mi
  4.     CBandUserPeriod 1D
  5. </CBandUser>

  6. <VirtualHost 192.168.0.1>
  7.     ServerName foobar.com
  8.     ServerAlias www.foobar.com
  9.     DocumentRoot /home/foobar/public_html
  10.     ErrorLog logs/foobar-err
  11.     CustomLog logs/foobar-acc combined
  12.     CBandUser foobar
  13. </VirtualHost>

  14. <VirtualHost 192.168.0.1>
  15.     ServerName foobar2.com
  16.     ServerAlias www.foobar2.com
  17.     DocumentRoot /home/foobar2/public_html
  18.     ErrorLog logs/foobar2-err
  19.     CustomLog logs/foobar2-acc combined
  20.     CBandUser foobar
  21. </VirtualHost>

※ 위 설정은 foobar 유저에게 1Day 동안 100M의 트래픽을 허용하겠다는 설정이며,
foobar.com과 foobar2.com에서 foobar 유저의 트래픽을 공유해서 사용하겠다는 것입니다.

4. cband 단위
- 전송속도 단위
kbps, Mbps, Gbps - bits per second, 의미: 1024, 1024*1024, 1024*1024*1024 bps
kb/s, Mb/s, Gb/s - bytes per second, 의미: 1024, 1024*1024, 1024*1024*1024 b/s
기본값 : kbps

- 트래픽 제한 단위
K, M, G - bytes, 의미: 1000, 1000*1000, 1000*1000*1000 bytes
Ki, Mi, Gi - bytes, 의미: 1024, 1024*1024, 1024*1024*1024 bytes
기본값: K

- 시간 단위
S, M, H, D, W - 초, 분, 시간, 일, 주. 의미: 1, 60, 3600, 86400, 604800 Seconds
기본값: S


5. cband 지시자
이름: CBandDefaultExceededURL
설명: 제한을 초과했을때 보여줄 URL
문맥: Server config
문법: CBandDefaultExceededURL [URL]
예제: CBandDefaultExceededURL
http://foobar.com/503.html

이름: CBandDefaultExceededCode
설명: 제한을 초과했을시 보여줄 에러 코드
문맥: Server config
문법: CBandDefaultExceededCode [HTTP_CODE]
예제: CBandDefaultExceededCode 509

이름: CBandScoreFlushPeriod
설명: scoreboard 파일에 기록할 요청수를 정하나, cband 퍼포먼스에 영향을 미칩니다.
기본값: 1
문맥: Server config
문법: CBandScoreFlushPeriod [요청수]
예제: CBandScoreFlushPeriod 100
    100번의 요청이 들어오면 scoreboard 파일에 한번 기록합니다.

이름: CBandSpeed
설명: 가상호스트 도메인의 최대 속도, 요청수, 접속수 설정
문맥: <Virtualhost>
문법: CBandSpeed [kbps] [rps] [max_conn]
    kbps - 초당 최대 전송속도
    rps - 초당 최대 요청수
    max_conn - 최대 동시 접속수
예제: CBandSpeed 1024 10 30
    호스트에 대해 1024kbps 전송속도로 제한하며, 초당 10개의 요청을 처리하고,
    동시 접속을 30개로 제한합니다.

이름: CBandRemoteSpeed
설명: 호스트 접속자의 최대속도, 요청수, 접속수 제한
문맥: <Virtualhost>
문법: CBandRemoteSpeed [kbps] [rps] [max_conn]
    kbps - 초당 최대 전송속도
    rps - 초당 최대 요청수
    max_conn - 최대 동시 접속수
예제: CBandRemoteSpeed 20kb/s 3 3
    호스트 접속자에 대해 1024kbps 전송속도로 제한하며,
    초당 10개의 요청을 처리하고, 동시 접속을 30개로 제한합니다.

이름: CBandClassRemoteSpeed
설명: IP class의 최대속도, 요청수, 접속수 제한
문맥: <Virtualhost>
문법: CBandClassRemoteSpeed [class_name] [kbps] [rps]
    kbps - 초당 최대 전송속도
    rps - 초당 최대 요청수
    max_conn - 최대 동시 접속수
예제:
<CBandClass googlebot_class>
  CBandClassDst 66.249.64/24
  CBandClassDst 66.249.65/24
  CBandClassDst 66.249.79/24
</CBandClass>
CBandClassRemoteSpeed googlebot_class 20kb/s 2 3
googlebot_class 클래스에 대해 20kb/s 전송속도로 제한하며,
초당 10개의 요청을 처리하고, 동시 접속을 30개로 제한합니다.

이름: CBandRandomPulse
설명: 속도 제한을 위해서 임의의 파형을 생성한 다음 처리하는 방법입니다.
문맥: Global
문법: CBandRandomPulse [On/Off]
예제: CBandRandomPulse On

이름: CBandLimit
설명: 제한할 전송량을 설정한다.
문맥: <Virtualhost>
문법: CBandLimit [limit]
    limit - 전송량, 사용단위: K(kilo), M(mega), G(giga), Ki(kibi), Mi(mebi), Gi(gibi)
예제: CBandLimit 10M
    전송량을 10M(10*1000*1000bytes)로 제한한다.
    CBandLimit 10Mi
    전송량을 10M(10*1024*1024bytes)로 제한한다.

이름: CBandClassLimit
설명: IP class에 대해 제한할 전송량 설정
문맥: <Virtualhost>
문법: CBandClassLimit [class_name limit]
    class_name - 클래스 이름
    limit - 전송량, 사용단위: K(kilo), M(mega), G(giga), Ki(kibi), Mi(mebi), Gi(gibi)

이름: CBandExceededURL
설명: 제한을 초과했을때 보여줄 URL
문맥: <Virtualhost>
문법: CBandExceededURL [URL]
예제: CBandExceededURL
http://foobar.com/503.html

이름 : CBandExceededSpeed
설명: 전송량을 초과했을때의 전송속도 제한 설정
문맥: <Virtualhost>
문법: CBandExceededSpeed [kbps] [rps] [max_conn]
    kbps - 초당 최대 전송속도
    rps - 초당 최대 요청수
    max_conn - 최대 동시 접속수

이름: CBandScoreboard
설명: 가상호스트의 scoreboard 파일 지정
문맥: <Virtualhost>
문법: CBandScoreboard [path]

이름: CBandPeriod
설명: 제한기간
문맥: <Virtualhost>
문법: CBandPeriod [period]
    period - 사용단위: S(초), M(분), H(시간), D(일), W(주)
예제: CBandPeriod 1D

이름 : CBandPeriodSlice
설명: 기간을 나눌 기간 명시
기본값: slice_len = limit
문법: CBandPeriodSlice [slice_length]
예제: CBandLimit 100G
    CBandPeriod 4W
    CBandPeriodSlice 1W
지정된 제한값을 1주일 단위로 나누어 사용 합니다.
위 설정을 해석하면 4주는 1주일 단위로 나누며, 용량은 100G/4주=25G로 사용 합니다.

이름: <CBandUser>
설명: 새로운 cband 가상 사용자 설정
문맥: Server config
문법: <CBandUser user_name>

이름: CBandUserSpeed
설명: cband 가상 사용자의 속도, 요청수, 동시 접속수 제한
문맥: <CBandUser>
문법: CBandUserSpeed [kbps] [rps] [max_conn]
    kbps - 초당 최대 전송속도
    rps - 초당 최대 요청수
    max_conn - 최대 동시 접속수
예제: CBandUserSpeed 100kb/s 10 5

이름: CBandUserLimit
설명: cband 가상 사용자의 전송 용량 제한
문맥: <CBandUser>
문법: CBandUserLimit [limit]
    limit - 사용용량, 사용단위: K(kilo), M(mega), G(giga), Ki(kibi), Mi(mebi), Gi(gibi)
예제: CBandUserLimit 10M
    전송량을 10M(10*1000*1000bytes)로 제한한다.
    CBandUserLimit 10Mi
    전송량을 10M(10*1024*1024bytes)로 제한한다.

이름: CBandUserClassLimit
설명: cband 가상 사용자의 IP class에 대해 제한할 전송량 설정
문맥: <CBandUser>
문법: CBandUserClassLimit [class_name] [limit]
    class_name - 클래스 이름
    limit - 전송량, 사용단위: K(kilo), M(mega), G(giga), Ki(kibi), Mi(mebi), Gi(gibi)

이름 : CBandUserExceededURL
설명: cband 가상 사용자의 제한을 초과했을때 보여줄 URL
문맥: <CBandUser>
문법: CBandUserExceededURL URL
예제: CBandDefaultExceededURL
http://foobar.com/503.html

이름: CBandUserExceededSpeed
설명: cband 가상 사용자의 전송량을 초과했을때의 전송속도 제한 설정
문맥: <CBandUser>
문법: CBandUserExceededSpeed [kbps] [rps] [max_conn]
    kbps - 초당 최대 전송속도
    rps - 초당 최대 요청수
    max_conn - 최대 동시 접속수

이름: CBandUserScoreboard
설명: cband 가상 사용자의 scoreboard 파일 지정
문맥: <CBandUser>
문법: CBandUserScoreboard [path]

이름: CBandUserPeriod
설명: cband 가상 사용자의 제한기간
문맥: <CBandUser>
문법: CBandUserPeriod [period]
    period - 사용단위: S(초), M(분), H(시간), D(일), W(주)
예제: CBandPeriod 1D

이름: CBandUserPeriodSlice
설명: cband 가상 사용자의 기간을 나눌 기간 명시
기본값: slice_len = limit
문맥: <CBandUser>
문법: CBandUserPeriodSlice [slice_length]
예제: CBandLimit 100G
    CBandPeriod 4W
    CBandPeriodSlice 1W
지정된 제한값을 1주일 단위로 나누어 사용 합니다.
위 설정을 해석하면 4주는 1주일 단위로 나누며, 용량은 100G/4주=25G로 사용 합니다.


6. 통계화면 보기
관리자모드 -
http://foobar.com/cband-status
관리자모드(xml) - http://foobar.com/cband-status?xml
사용자모드 - http://foobar.com/cband-me
사용자모드(xml) - http://foobar.com/cband-me?xml

7. 통계화면에 아파치 인증 걸기
throttle 강좌에서도 말씀드렸지만 통계화면의 제한은 IP의 형태로 제한을 하는게 정설입니다.
그렇지만 IP가 자주 변경되는 분들은 매번 IP를 변경해주는것도 하나의 일이 될 수 있습니다.
따라서 이런 경우에는 아파치 인증을 걸어서 사용하시면 편리할 것입니다.
  1. [root@localhost]# vi /etc/httpd/conf/httpd.conf
  2. <IfModule mod_cband.c>
  3.     <Location /cband-status>
  4.         SetHandler cband-status
  5.         AuthName "트래픽관리 페이지"
  6.         AuthType Basic
  7.         AuthUserFile /home/foobar/.htpasswd
  8.         require valid-user
  9.     </Location>

  10.     <Location /cband-me>
  11.         SetHandler cband-status-me
  12.         Order deny,allow
  13.         Deny from all
  14.         Allow from all
  15.     </Location>
  16. </IfModule>
  17. [root@localhost]# htpasswd -c /home/foobar/.htpasswd ID


mod_cband(아파치2의 트래픽 제어모듈 like mod_throttle&mod_bandwidth)


0. 내가 원한는 것?
  예전에 apache 1은 mod_throttle으 로 가상호스트별 트래픽 측정 및 제한이 가능했습니다.
이 트래픽 제한 기능은 호스팅을 하기위해서는 필수입니다. 어떤 도메인에서 많이 사용하는지
아는 것은 아주 중요한 일이기 때문입니다. 하지만,
 apache2를 쓰면 이놈을 포기할 수 밖에 없었습니다. 검색하다 .. cband를 찾았습니다.
 mod_throttle과 기능및 구조 거의 흡사하며, mod_bandwidth의 기능까지 포함했고,
최근에 개발되어 계속 성능 향상이 되어 가고 있었습니다.
보다 좋은건, ?xml 이라고 붙여주면, 데이터를 xml형태로 얻을 수 있어,
호스팅 하기에 정말 좋은 모듈입니다.
 [주의] cband는 apache 2 모듈이다. apache 1.3.XX용이 아니며 1.3.XX는 mod_throttle을 사용하세요!!

 [주요기능]
    * Apache2용 가볍운 트래픽제한 모듈
    * 사용자별 대역폭제한 기능
    * 가상호스트별 대역폭 제한 기능
    * 목적지별 대역폭 제한 기능
    * 제한기능:
          o 모든사용자 대역폭 제한
          o 다운로드 속제 제한
          o 초당요청수 제한
          o 아이피대역별 제한
    * Support for virtualhosts
    * Support for defined users
    * 제한결과 웹을 통한 확인 (/cband-status)
    * 각 사용자별 제한 결과 확인(/cband-status-me)



1. 설치방법
  cd /usr/local
  wget http://cband.linux.pl/download/mod-cband-0.9.7.4.tgz
  tar xvfpz mod-cband-0.9.7.4.tgz
  cd mod-cband-0.9.7.4
  ./configure --with-apxs=/usr/local/apache/bin/apxs
  ## 옵션설명
  ## --with-apxs=/usr/local/apache/bin/apxs : 아파치 apxs경로를 지정합니다.
  make
  make install



2. 설치확인
  - httpd.conf 파일에
     LoadModule cband_module       modules/mod_cband.so
   줄이 추가된것을 볼 수 있습니다.
  - 아파치/modules 디렉토리에
      mod_cband.so
    파일이 추가 된 것을 볼수 있습니다.


3. 기본 설정

====================================
  <Location /cband-status>
     SetHandler cband-status
     Order deny,allow
     Deny from all
     Allow from 열어줄아이피
  </Location>

  <Location /cband-status-me>
    SetHandler cband-status-me
  </Location>

<VirtualHost *>
   ServerName gnux.co.kr    
   Document /home/gnux/www
    CBandLimit 300Mi
   CBandPeriod 1D
   CBandExceededURL http://manager.gnux.co.kr/traffic_exceeded.html
</VirtualHost>
======================================
위 설정파일은 gnux.co.kr 도메인에
하루에 300M(300*1024*1024byte)의 트래픽을 제공하는 설정입니다.
bit로 따지면, 2.4Gbit/일 트래픽을 제공하는 것입니다.
만약 하루에 300M를 초과했다면, "http://manager.gnux.co.kr/traffic_exceeded.html"
페이지가 뜨며, 지정하지 않았다면, 503 에러 페이지가 뜨게됩니다.
 만약!. 제한을 하지 않고 관찰만 하려 한다면, CBandPeriod 부분만 남기고 삭제합니다.




4. 상황별 설정
 1) 자료실 속도 제한
==============================
<VirtualHost *>
   ServerName file.gnux.co.kr    
   Document /home/gnux/file
   CBandSpeed 1024 10 30
   CBandRemoteSpeed 20kb/s 3 30
</VirtualHost>
==============================
위 설정은  file.gnux.co.kr 도메인에 대해서
속도를 1024kbps 로 제한하며, 초당 10번의 연결,
동시접속자를 30으로 제한하는 예제입니다.



 2) 사용자 일트래픽 제공 및 초과시 연결수 제한.
==============================
<VirtualHost *>
   ServerName doly.gnux.co.kr    
   Document /home/gnux/doly
   CBandLimit 100Mi
   CBandExceededSpeed 128 5 15
   CBandPeriod 1D
</VirtualHost>
==============================
위 설정은 doly.gnux.co.kr도메인에 대해
하루에 100Mbyte의 트레픽을 제공하며,
100M를 초가했다면,
속도를 128bps로 제한, 초당 5번의 연결,
동시접속자를 15로 제한하는 예제입니다.



 3) 한 사용자에 여러 도메인이 있다면?
==============================
<CBandUser host_user1>
    CBandUserLimit 100Mi
    CBandUserPeriod 1D
</CBandUser>
<VirtualHost *>
   ServerName aaa.co.kr    
   Document /home/host_user1/aaa
   CBandUser host_user1
</VirtualHost>
<VirtualHost *>
   ServerName bbb.co.kr    
   Document /home/host_user1/bbb
   CBandUser host_user1
</VirtualHost>
==============================
위 설정은 host_user1이라는 가상 사용자를 지정한다음.
그 사용자는 하루에 100Mbyte를 사용할수 있게합니다.
그런다음, aaa.co.kr, bbb.co.kr 모두 host_user1의
트래픽을 사용하게 설정하였습니다.



4) IP대역에 따라 속도를 제한하고 싶다면?
==============================================
<CBandClass class_1>
    CBandClassDst 192.168.0.0/24
</CBandClass>
<CBandClass class_2>
    CBandClassDst 222.97.189.0/24
</CBandClass>

<VirtualHost *>
   ServerName intranet.gnux.co.kr    
   Document /home/gnux/intranet
   CBandClassRemoteSpeed class_1 50Mbps 10 30
   CBandClassRemoteSpeed class_2 300kbps 10 30
</VirtualHost>
==============================================
위 설정은, 내부아이피 192.168.0.XXX 에서,
50Mbps의 대역폭과, 초당 10번의 요청, 동시접속자 30을 설정하며,
다른 ip대역 222.97.189.XXX에서는
300kpbs, 초당 10번의 요청, 동시접속자 30을 설정합니다.


5. 사용량 확인.
   http://도메인/cband-status
   http://도메인/cband-status-me
status

 ** xml 형태로 데이터를 얻고 싶다면?
   http://도메인/cband-status?xml
   http://도메인/cband-status-me?xml
xml



6. 지시자 및 단위 설명 (필요시 찾아보세요!!)
  1) 단위.
    * 전송속도 단위
          o kbps, Mbps, Gbps - bits per second: 1024, 1024*1024 , 1024*1024*1024 bps
          o kb/s, Mb/s, Gb/s - bytes per second:  1024, 1024*1024, 1024*1024*1024 b/s
          o 기본 : kbps

    * 트래픽 쿼터 단위
          o K, M, G - bytes: 1000, 1000*1000 ,1000*1000*1000 bytes
          o Ki, Mi, Gi - bytes: 1024, 1024*1024, 1024*1024*1024 bytes
          o 기본 : K

    * 시간(기간) 단위
          o S, M, H, D, W - 초, 분, 시간, 일, 주
          o 기본 : S

  2) 지시자들
     (1) 이름 : CBandDefaultExceededURL
          설명 : 제한을 초과했을때 보여줄 URL  (지정하지 않으면, 503 에러 페이지)
            문맥 : Server config
          문법 : CBandDefaultExceededURL URL

     (2)이름 : CBandDefaultExceededCode
         설명 : 제한을 초과했을시 보여줄 에러 코드
         문맥 : Server config
         문법 : CBandDefaultExceededCode HTTP_CODE
         예제 : CBandDefaultExceededCode 509  


     (3)이름 : CBandScoreFlushPeriod
         설명 : scoreboard 파일에 기록할 요청수, mod_cband 의 성능에 영향을 준다.
         기본값 : 1
         문맥 : Server config
         문법 : CBandScoreFlushPeriod 요청수
         예제 : CBandScoreFlushPeriod 100  ( 매 100번의 요청에 한번씩 scoreboard 파일에 기록)

     (4)이름 : CBandSpeed
         설명 : 가상호스트 도메인의 최대 속도, 요청수, 접속수  설정
         문맥 : <Virtualhost>
         문법 : CBandSpeed kbps rps max_conn
                kbps - 초당 최대 전송속도
                rps - 초당 최대 요청수
                max_conn - 최대 동시 접속수
         예제 : CBandSpeed 1024 10 30
                 최대 1024kbps전송속도로 제한, 초당 10개의 요청 처리, 동시 접속을 30개로 제한.

     (5)이름 : CBandRemoteSpeed
         설명 : 접속자(IP)의 최대속도, 요청수, 접속수 제한 (CBandSpeed와 비슷하지만, 접속자당 설정)
         문맥 : <Virtualhost>
         문법 : CBandRemoteSpeed kbps rps max_conn
                  kbps - 초당 최대 전송속도
                  rps - 초당최대 요청수
                  max_conn - 최대 동시 접속수
         예제 : CBandRemoteSpeed 20kb/s 3 3
                  접속자(ip)에대해 최대 20kb/s , 초당 3개의 요청, 동시 접속 3개로 제한.

     (6)이름 : CBandClassRemoteSpeed
         설명 : 정의한 class(ip 범위)에 대해 최대속도, 요청수, 접속수 제한
         문맥 : <Virtualhost>
         문법 : CBandClassRemoteSpeed class_name kbps rps
                  class_name - 이미 정의한 클래스 이름 (IP범위)
                  kbps - 초당 최대 전송속도
                  rps - 초당 최대 요청수
                  max_conn - 최대 동시 접속수
         예제 : <CBandClass googlebot_class>
                    CBandClassDst 66.249.64/24
                    CBandClassDst 66.249.65/24
                    CBandClassDst 66.249.79/24
                  </CBandClass>
                        CBandClassRemoteSpeed googlebot_class 20kb/s 2 3
                        위에서 정의한 클래스(googlebot_class)의 요청에는 20kb/s 의 전송속도,
                       초당 3개의 요청, 동시 접속 3개로 제한.

     (7)이름 : CBandRandomPulse
         설명 : 속도 제한을 위해서 임의의 파형을 생성한 다음 처리하는 mod_cband의 처리 방법이다.
                   부하가 많을때는 자동 Off된다.
         문맥 : Global
         문법 : CBandRandomPulse On/Off

     (8)이름 : CBandLimit
         설명 : 제한할 전송량을 설정한다. (기간은 CBandPeriod 에서 설정)
         문맥 : <Virtualhost>
         문법 : CBandLimit limit
                  limit - 전송량, 사용단위: K (kilo), M (mega), G (giga), Ki (kibi), Mi (mebi), Gi (gibi)
         예제 : CBandLimit 10M
                    전송양을 10M(10*1000*1000bytes)로 제한한다.
                  CBandLimit 10Mi
                    전송양을 10M(10*1024*1024bytes)로 제한한다.

     (9)이름 : CBandClassLimit
         설명 : 정의한 class(ip범위)에 대해 제한할 전송량 설정.
         문맥 : <Virtualhost>
         문법 : CBandClassLimit class_name limit
                  class_name - 이미 정의한 클래스 이름(ip범위)
                  limit - 전송량, 사용단위: K (kilo), M (mega), G (giga), Ki (kibi), Mi (mebi), Gi (gibi)

   (10)이름 : CBandExceededURL
         설명 : 제한을 초과했을시 보여줄 URL, 지정하지 않으면 503 에러 발생 ( 가상호스트에서 )
         문맥 : <Virtualhost>
         문법 : CBandExceededURL URL

   (11)이름 : CBandExceededSpeed
         설명 : 전송양을 초과했을시 , 전송속도 제한 설정.
         문맥 : <Virtualhost>
         문법 : CBandExceededSpeed kbps rps max_conn
                  kbps - 초당 최대 전송속도
                  rps - 초당 최대 요청수
                  max_conn - 최대 동시 접속수

    (12)이름 : CBandScoreboard
         설명 : 가상호스트의 scoreboard 파일 지정. (성능향상을 위해 필요)
         문맥 : <Virtualhost>
         문법 : CBandScoreboard path
                  (path는 아파치(nobody또는 apache)권한으로 쓰기가능해야 함)

    (13)이름 : CBandPeriod
         설명 : 용량제한기간(이 기간이 지나면, 측정되었던 용량은 지워진다.)
         문맥 : <Virtualhost>
         문법 : CBandPeriod period
                  period - 사용단위: S (초), M (분), H (시간), D (일), W (주)
         예제 : CBandPeriod 1W  (1주일)
                  CBandPeriod 14D  (14일)
                  CBandPeriod 60M  (60분)

   (14)이름 : CBandPeriodSlice
         설명 : 기간이 길때는 나눌 기간을 명시한다.
         기본값 : slice_len = limit
         문맥 : <Virtualhost>
         문법 : CBandPeriodSlice slice_length
         예제 : CBandLimit 100G
                  CBandPeriod 4W
                  CBandPeriodSlice 1W
                   4주는 1주일 단위로 나뉜다(4W/1W = 4). 용량은 100G/4=25G
                   1주에 25G, 2주째 50G 이렇게 나눠 처리 된다.

   (15)이름 : <CBandUser>
         설명 : 새로운 cband 가상 사용자 설정
         문맥 : Server config
         문법 : <CBandUser user_name>

   (16)이름 : CBandUserSpeed
         설명 : cband 가상 사용자의 속도, 요청수, 동시 접속수 제한
         문맥 : <CBandUser>
         문법 : CBandUserSpeed kbps rps max_conn
                  kbps - 초당 최대 전송속도
                  rps - 초당 최대 요청수
                  max_conn - 최대 동시 접속수
         예제 : CBandUserSpeed 100kb/s 10 5


   (17)이름 : CBandUserLimit
         설명 : cband 가상 사용자의 저송 용량 제한.
         문맥 : <CBandUser>
         문법 : CBandUserLimit limit
                  limit - 사용용량, 사용단위: K (kilo), M (mega), G (giga), Ki (kibi), Mi (mebi), Gi (gibi)
         예제 : CBandUserLimit 10M
                  CBandUserLimit 10Mi

   (18)이름 : CBandUserClassLimit
         설명 : cband 가상 사용자의 정의한 class(ip범위)에 대해 제한할 전송량 설정
         문맥 : <CBandUser>
         문법 : CBandUserClassLimit class_name limit
                  class_name - 지정한 class(IP범위)이름
                  limit -사용용량, 사용단위: K (kilo), M (mega), G (giga), Ki (kibi), Mi (mebi), Gi (gibi)

   (19)이름 : CBandUserExceededURL
         설명 : cband 가상 사용자의, 제한을 초과했을시 보여줄 URL,
                   지정하지 않으면 503 에러 발생 ( 가상호스트에서 )
         문맥 : <CBandUser>
         문법 : CBandUserExceededURL URL

   (20)이름 : CBandUserExceededSpeed
         설명 : cband 가상 사용자의, 전송양을 초과했을시 , 전송속도 제한 설정.
         문맥 : <CBandUser>
         문법 : CBandUserExceededSpeed kbps rps max_conn
                  kbps - 초당 최대 전송속도
                  rps - 초당 최대 요청수
                  max_conn - 최대 동시 접속수

  (21)이름 : CBandUserScoreboard
         설명 : cband 가상 사용자의, scoreboard 파일 지정.
         문맥 : <CBandUser>
         문법 : CBandUserScoreboard path
                  (path는 아파치(nobody또는 apache)권한으로 쓰기가능해야 함)

  (22) 이름 : CBandUserPeriod
         설명 : cband 가상 사용자의, 용량제한기간(이 기간이 지나면, 측정되었던 용량은 지워진다.)
         문맥 : <CBandUser>
         문법 : CBandUserPeriod period
                  period - 사용단위: S (초), M (분), H (시간), D (일), W (주)
         예제 : CBandUserPeriod 1W
                  CBandUserPeriod 14D
                  CBandUserPeriod 60M

  (23)이름 : CBandUserPeriodSlice
         설명 : cband 가상 사용자의, 기간을 나눌 기간 명시
         기본값 : slice_len = limit
         문맥 : <CBandUser>
         문법 : CBandUserPeriodSlice slice_length
         예제 : CBandUserLimit 100G
                  CBandUserPeriod 4W
                  CBandUserPeriodSlice 1W
                   4주는 1주일 단위로 나뉜다(4W/1W = 4). 용량은 100G/4=25G
                   1주에 25G, 2주째 50G 이렇게 나눠 처리 된다.


7. 마치며..
 이것으로 현재 최신버전의 mod_cband 설치 및 운영, 상세 지시자 설명 하는 강좌를 마치겠습니다.
처음 이 모듈을 발견했을때 너무 너무 기뻣고, 바로 적용해 테스트 하였습니다.
특히 xml로 데이터를 추출할 수 있어 가공함에 있어 아주 아주 편리했습니다.
국내에는 아직 mod_cband에 과한 강좌가 없어 많은 사람들에게
도움을 주기 위해서 이렇게 강좌를 작성합니다.
  본 강좌에 대해서 오타 및 문제가 있다면, doly골뱅이superuser.co.kr으로 메일
한통 바랍니다.

2006년 6월 ... 모기들이 태어나는 계절에... 도리...



## 참고문서
http://cband.linux.pl
http://www.howtoforge.com/mod_cband_apache2_bandwidth_quota_throttling

-- 출처 : 리눅스포털(원문 : http://www.superuser.co.kr/home/lecture/index.php?leccode=10588)


참고 자료
Posted by iWithJoy
Linux/CentOS2012. 3. 8. 10:22
Adding Modules to httpd.conf With Apache 2
Topic:
Web    Posted:2005-03-01 19:53:39
Printer Friendly:

We recently converted from a source version of Apache 2 to an RPM version. We wanted all of the PHP/MySQL stuff compiled in and working quickly. Yes, we were very lazy. Now, we tried to use our old httpd.conf file; however, since the compiled version had many of the options built in, our httpd.conf file failed repeatedly when we tried to start Apache. This is on a Fedora box. One place where you can add modules is after these lines in httpd.conf:

# Example:
# LoadModule foo_module modules/mod_foo.so

Below, you will see the error that happened when we tried to start Apache, and the line(s) we added that appeared to fix the problem. Not all of the module names were intuitive. We had to search around for some of them:


[root@srv-2 modules]# /etc/init.d/httpd start
Starting httpd: Syntax error on line 358 of /etc/httpd/conf/httpd.conf:
Invalid command 'Order', perhaps mis-spelled or defined by a module not included in the server configuration
                                                           [FAILED]
LoadModule access_module /etc/httpd/modules/mod_access.so
LoadModule auth_module /etc/httpd/modules/mod_auth.so

[root@srv-2 modules]# /etc/init.d/httpd start
Starting httpd: Syntax error on line 368 of /etc/httpd/conf/httpd.conf:
Invalid command 'UserDir', perhaps mis-spelled or defined by a module not included in the server configuration
                                                           [FAILED]
LoadModule userdir_module /etc/httpd/modules/mod_userdir.so

[root@srv-2 modules]# /etc/init.d/httpd start
Starting httpd: Syntax error on line 396 of /etc/httpd/conf/httpd.conf:
Invalid command 'DirectoryIndex', perhaps mis-spelled or defined by a module not included in the server configuration
                                                           [FAILED]
LoadModule dir_module /etc/httpd/modules/mod_dir.so

[root@srv-2 modules]# /etc/init.d/httpd start
Starting httpd: Syntax error on line 419 of /etc/httpd/conf/httpd.conf:
Invalid command 'TypesConfig', perhaps mis-spelled or defined by a module not included in the server configuration
                                                           [FAILED]
LoadModule mime_module /etc/httpd/modules/mod_mime.so

[root@srv-2 modules]# /etc/init.d/httpd start
Starting httpd: Syntax error on line 491 of /etc/httpd/conf/httpd.conf:
Invalid command 'LogFormat', perhaps mis-spelled or defined by a module not included in the server configuration
                                                           [FAILED]
LoadModule log_config_module /etc/httpd/modules/mod_log_config.so

[root@srv-2 modules]# /etc/init.d/httpd start
Starting httpd: Syntax error on line 555 of /etc/httpd/conf/httpd.conf:
Invalid command 'Alias', perhaps mis-spelled or defined by a module not included in the server configuration
                                                           [FAILED]
LoadModule alias_module /etc/httpd/modules/mod_alias.so

[root@srv-2 modules]# /etc/init.d/httpd start
Starting httpd: Syntax error on line 582 of /etc/httpd/conf/httpd.conf:
Invalid command 'SetEnvIf', perhaps mis-spelled or defined by a module not included in the server configuration
                                                           [FAILED]
LoadModule setenvif_module /etc/httpd/modules/mod_setenvif.so

[root@srv-2 modules]# /etc/init.d/httpd start
Starting httpd: Syntax error on line 636 of /etc/httpd/conf/httpd.conf:
Invalid command 'IndexOptions', perhaps mis-spelled or defined by a module not included in the server configuration
                                                           [FAILED]
LoadModule autoindex_module /etc/httpd/modules/mod_autoindex.so

[root@srv-2 modules]# /etc/init.d/httpd start
Starting httpd: Syntax error on line 784 of /etc/httpd/conf/httpd.conf:
Invalid command 'LanguagePriority', perhaps mis-spelled or defined by a module not included in the server configuration
                                                           [FAILED]
LoadModule negotiation_module /etc/httpd/modules/mod_negotiation.so

[root@srv-2 modules]# /etc/init.d/httpd start
Starting httpd:                                            [  OK  ]
[root@srv-2 modules]#

http://www.netadmintools.com/art398.html
Posted by iWithJoy
Linux/CentOS2012. 3. 7. 15:13

 
@ 패키지 제거 및 설치
# rpm -qa httpd php mysql
# yum remove -y httpd php mysql

@ 서버운영에 필요한 소스 및 라이브러리 추가

# yum -y install ORBit2 PyXML a2ps acpid alsa-lib amtu aspell at atk audiofile audit-libs-python autoconf autofs automake avahi avahi-glib bc bind bind-chroot bind-libs bind-utils cairo ccid compat-libstdc++-33 conman cpp cpuspeed crash createrepo crypto-utils cryptsetup-luks cups-libs cvs cyrus-sasl-md5 cyrus-sasl-plain db4-devel dbus-python device-mapper-multipath dhcp dhcp-devel dialog dmraid dos2unix dosfstools dump e2fsprogs-devel ed eject elfutils elfutils-libs enscript expat-devel expect expect-devel expectk fetchmail file finger flex fontconfig fontconfig-devel foomatic freetype freetype-devel ftp gcc gcc-c++ gd gd-devel gd-progs gdb gdbm-devel gettext gfs2-utils glib2-devel glibc-devel glibc-headers gmp-devel gnutls gpm gtk2 hal hdparm hesiod hicolor-icon-theme imake iptraf iptstate ipvsadm irqbalance jwhois kernel-devel kernel-headers keyutils-libs-devel kpartx krb5-devel krb5-workstation ksh lcms lftp libICE libSM libX11 libX11-devel libXau libXau-devel libXcursor libXdmcp libXdmcp-devel libXext libXfixes libXft libXi libXinerama libXpm libXpm-devel libXrandr libXrender libXt libXxf86vm libaio libaio-devel libart_lgpl libbonobo libc-client libcurl-devel libdaemon libevent libfontenc libgomp libgssglue libhugetlbfs libhugetlbfs-devel libidn-devel libjpeg libjpeg-devel libmng libnl libnl-devel libpcap libpng libpng-devel libselinux-devel libselinux-python libsepol-devel libsmi libstdc++-devel libsysfs libtiff libtool libtool-ltdl libwvstreams libxml2-devel libxml2-python libxslt libxslt-python lksctp-tools logwatch lrzsz lsof m2crypto mailcap mailx make man man-pages man-pages-ko mc mcstrans mdadm memtest86+ mesa-libGL mesa-libGL-devel mgetty microcode_ctl mkbootdisk mlocate mrtg mt-st mtools mtr mutt nc ncurses-devel net-snmp-libs netpbm nfs-utils nfs-utils-lib nmap nscd nss_db ntp ntsysv numactl oddjob openssh-clients openssl-devel pam-devel pam_krb5 pam_passwdqc pam_pkcs11 pango parted parted-devel patch pax pciutils pcsc-lite perl perl-Archive-Tar perl-BSD-Resource perl-Compress-Zlib perl-DBI perl-Digest-HMAC perl-Digest-SHA1 perl-HTML-Parser perl-HTML-Tagset perl-IO-Socket-INET6 perl-IO-Socket-SSL perl-IO-Zlib perl-Net-IP perl-Net-SSLeay perl-Newt perl-Socket6 perl-String-CRC32 perl-URI perl-libwww-perl pkgconfig pm-utils postgresql-libs prelink procmail psacct psutils pulseaudio-esound-compat pyOpenSSL pykickstart pyorbit pyparted python-pyblock pyxf86config quota rdate rdist readahead rmt rpcbind rpm-build rsh rsync rusers rwho samba samba-client samba-common samba-swat sendmail sendmail-cf setools setserial setuptool shared-mime-info sip sos spamassassin squashfs-tools strace stunnel symlinks sysfsutils syslinux sysstat system-config-date system-config-firewall talk tcl tcp_wrappers tcpdump tcsh telnet telnet-server time tk tmpwatch traceroute tree ttmkfdir unix2dos unixODBC unzip usbutils usermode vconfig vim-common vim-enhanced vsftpd wget wireless-tools words xfsprogs xfsprogs-devel xinetd xorg-x11-proto-devel yp-tools ypbind ypserv zip zlib-devel GConf2 ImageMagick ImageMagick-perl avahi-libs bwidget cloog-ppl crda cryptsetup-luks-libs cups db4-cxx deltarpm desktop-file-utils device-mapper-multipath-libs dmidecode dmraid-events docbook-dtds flac foomatic-db foomatic-db-filesystem foomatic-db-ppds ghostscript ghostscript-fonts gnome-doc-utils-stylesheets gnome-python2 gnome-python2-canvas gnome-user-docs gnome-vfs2 gpm-libs groff-perl gstreamer gstreamer-tools hal-info hal-libs html2ps hunspell iw jasper-libs kpathsea lcms-libs libIDL libX11-common libXcomposite libXdamage libXdamage-devel libXext-devel libXfixes-devel libXfont libXres libXtst libXxf86vm-devel libasyncns libcanberra libcanberra-gtk2 libcom_err-devel libcroco libdrm-devel libedit libglade2 libgnomecanvas libgsf libnetfilter_conntrack libnfnetlink libnotify libogg libpaper librsvg2 libsamplerate libsndfile libtalloc libtasn1 libtdb libthai libtirpc libusb1 libvorbis libwmf-lite libwnck libxcb libxcb-devel lm_sensors-libs mesa-dri-drivers mozilla-filesystem mpfr mrtg-libs netpbm-progs notification-daemon ntpdate openjpeg-libs pcsc-lite-libs perl-Compress-Raw-Zlib perl-Crypt-OpenSSL-Bignum perl-Crypt-OpenSSL-RSA perl-Crypt-OpenSSL-Random perl-Date-Manip perl-Digest-SHA perl-Encode-Detect perl-ExtUtils-MakeMaker perl-ExtUtils-ParseXS perl-IO-Compress-Base perl-IO-Compress-Zlib perl-Mail-DKIM perl-MailTools perl-Module-Pluggable perl-Net-DNS perl-Net-LibIDN perl-NetAddr-IP perl-Package-Constants perl-Pod-Escapes perl-Pod-Simple perl-SNMP_Session perl-Test-Harness perl-Time-HiRes perl-TimeDate perl-YAML-Syck perl-devel perl-libs perl-version pixman poppler poppler-data poppler-utils portreserve ppl psutils-perl pulseaudio pulseaudio-libs pycairo pygobject2 pygtk2 pygtk2-libglade python-decorator python-deltarpm python-slip python-slip-dbus rarian rarian-compat rtkit samba-winbind-clients setools-console setools-gui setools-libs setools-libs-tcl sgml-common sgpio sound-theme-freedesktop speex startup-notification system-config-date-docs system-config-firewall-tui tex-preview texinfo texinfo-tex texlive texlive-dvips texlive-latex texlive-texmf texlive-texmf-dvips texlive-texmf-errata texlive-texmf-errata-dvips texlive-texmf-errata-fonts texlive-texmf-errata-latex texlive-texmf-fonts texlive-texmf-latex texlive-utils tokyocabinet urlview urw-fonts usermode-gtk xcb-util xml-common xorg-x11-font-utils xulrunner xz xz-lzma-compat yelp lksctp-tools-devel apr-util apr-util-devel libtool-ltdl-devel libmcrypt libmcrypt-devel gmp mhash mhash-devel gdbm zlib curl g++ openssl bzip2-devel libc-client-devel bison system-config-securitylevel

@ cmake 설치
# cd /usr/local/src
# wget http://www.cmake.org/files/v2.8/cmake-2.8.7.tar.gz
# tar zxvf cmake-2.8.7.tar.gz
# cd cmake-2.8.7
# ./bootstrap
# make; make install

@ mysql 최신버전 설치
# yum remove mysql*
# cd /usr/local/src
# wget http://www.mysql.com/get/Downloads/MySQL-5.5/mysql-5.5.27.tar.gz/from/http://mirror.khlug.org/mysql/
http://www.mysql.com/downloads/mysql/ 에서 Source Code 중,
Generic Linux (Architecture Independent), Compressed TAR Archive 최신버전을 Download 수행한다.
# tar zxvf mysql-5.5.27.tar.gz (최신버전) 
# cd mysql-5.5.27  (최신버전) 
# cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DENABLED_LOCAL_INIFILE=1 -DWITH_INNOBASE_STORAGE_ENGINE=1 -DWITH_PARTITION_STORAGE_ENGINE=1 -DWITH_EXTRA_CHARSETS=all -DWITH_SSL=system -DWITH_ZLIB=system -DENABLED_LOCAL_INFILE=1 -DWITH_READLINE=1 -DWITH_VALGRIND=1 -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DMYSQL_DATADIR=/usr/local/mysql/data
# make; make install
# groupadd mysql
# useradd -M -o -r -d /usr/local/mysql -s /sbin/nologin -c "Mysql Server" -u 27 -g mysql mysql >/dev/null 2>&1 || :
# chown -R root:mysql /usr/local/mysql; chown -R mysql:mysql /usr/local/mysql/data
# cd /usr/local/mysql; ./scripts/mysql_install_db --user=mysql --datadir=/usr/local/mysql/data
@ 비밀번호 설정
# cp support-files/mysql.server /etc/init.d/mysqld
# cp support-files/my-huge.cnf /etc/my.cnf --> 메모리 1G 이상
# cp support-files/my-medium.cnf /etc/my.cnf
# vi /etc/init.d/mysqld ##### datadir 찾아서 datadir=/usr/local/mysql/data 라고 입력
# service mysqld start
# chkconfig --add mysqld
# chkconfig --level 35 mysqld on (런레벨 35일때 자동 실행 된다)
# chkconfig --list | grep mysqld
@ 리부팅시 서비스 실행하지 않으려면 - chkconfig mysqld off
# /usr/local/mysql/bin/mysqladmin -u root password
설치 작업이 끝났다면 익명접근권한을 삭제하자. ( mysql 콘솔에 그냥 접근을 못하게 해야 함.)
# /usr/local/mysql/bin/mysql -u root -p
# Enter password:
# mysql> USE mysql;
# mysql> delete from user where password = "";
# mysql> exit
# /usr/local/mysql/bin/mysqladmin -u root -p reload
# Enter password:


@ cronolog 설치(apache log 분할)
# cd /usr/local/src
# wget http://www.youtu.kr/mirror/cronolog-1.6.2.tar.gz
# tar xvf cronolog-1.6.2.tar.gz
# cd cronolog-1.6.2
# ./configure
# make;make install 

 

APACHE


Apache 설치

1. 라이브러리 설치(설치 되어 있음 안 깔아도 됨)
yum -y install gcc
yum -y install openssl-devel
yum -y install apr-devel
yum -y install apr-util-devel
yum -y install pcre-devel
yum -y install zlib-devel

홈페이지를 운영 중, 해당 도메인 접속 시에 갑자기 홈페이지가 나타나지 않고, 아파치 기본화면이 나타나면,
아래의 2번과 3번을 재수행하여, configure의 아파치 설치위치를 재정의해주어야 한다. 

2. 아파치 다운로드 & 컴파일 
# cd /usr/local/src 
# wget http://linux-files.com/httpd/httpd-2.4.1.tar.gz  (http://linux-files.com/httpd/ 에서 최신버전 검색하여 버전 수정 후에 수행)
# tar zxvf httpd-2.4.1.tar.gz (<--- 호환을 위해 2.4.1 버전 사용)
# cd httpd-2.4.1

./configure --prefix=/usr/local/apache --enable-mods-shared=most --enable-ssl --with-ssl=/usr/local/openssl --enable-modules=ssl --enable-rewrite --with-included-apr --with-included-apr-util --enable-deflate --enable-expires --enable-headers --enable-proxy --enable-mpms-shared=all./configure --prefix=/usr/local/apache --enable-mods-shared=most --enable-ssl --with-ssl=/usr/local/openssl --enable-modules=ssl --enable-rewrite --with-included-apr --with-included-apr-util --enable-deflate --enable-expires --enable-headers --enable-proxy --enable-mpms-shared=all 

# make && make install

 
3. 데몬등록
# /usr/local/apache/bin/apachectl -l
Compiled in modules:
  core.c
  mod_so.c
  http_core.c
  event.c
# cp /usr/local/apache/bin/apachectl /etc/init.d/httpd
@ chkconfig를 이용해서 자동실행 등록해야 하지만 이전에 실행 스크립트 파일에 아래 내용 추가가 선행되어야 한다.
# vi /etc/init.d/httpd
-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
# chkconfig --list | grep httpd
 
4. apache 설정 변경
# vi /usr/local/apache/conf/httpd.conf
KeepAlive ON
주석을 해제하고 서버이름이나 IP주소를 설정합니다.
ServerName localshot:80
서버관리자 메일주소 설정
ServerAdmin webmaster@localhost
인터넷주소 rewrite 모드 사용을 위한 설정
AllowOverride None –> AllowOverride All
웹 페이지 접속시 기본적으로 읽어 들일 파일명 설정
DirectoryIndex index.html 를 찾아 DirectoryIndex index.html index.htm index.php index.php3 index.cgi index.jsp 로 수정
아래와 같이 추가 합니다.
AddType application/x-compress .Z
AddType application/x-gzip .gz .tgz
AddType application/x-httpd-php .htm .html .php .ph php3 .php4 .phtml .inc -->추가
AddType application/x-httpd-php-source .phps -->추가

주석제거
# AddHandler cgi-script .cgi
몇가지 주석 및 제거 - 필요에 따라 더 적용해도 무방함
Include conf/extra/httpd-mpm.conf <-- 주석제거
Include conf/extra/httpd-userdir.conf <-- 주석제거
Include conf/extra/httpd-vhosts.conf <-- 주석제거
Include conf/extra/httpd-default.conf <-- 주석제거
<Directory />
Options FollowSymLinks
AllowOverride All <-- 수정
Order deny,allow
#Deny from all <-- 주석처리
</Directory>
#vi /usr/local/apache/conf/extra/httpd-userdir.conf
Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec 를
Options MultiViews SymLinksIfOwnerMatch IncludesNoExec 로
Indexes 를 삭제 한다.
#vi /usr/local/apache/conf/extra/httpd-vhosts.conf
내용을 모두 삭제하고 구문만 적용후 저장 - 저장방법은 :wq 인 것은 아시죠...^^
NameVirtualHost *:80
<VirtualHost *:80>
DocumentRoot /usr/local/apache/htdocs/
ServerName *
</VirtualHost>

#NameVirtualHost *:80
<VirtualHost *:80>
    ServerAdmin webmaster@dummy-host2.example.com
    DocumentRoot /usr/local/apache/htdocs/
    ServerName www.도메인주소
    ErrorLog logs/도메인주소.error_log
    #CustomLog logs/dummy-host2.example.com-access_log common
</VirtualHost>

# /etc/init.d/httpd start 수행 시에 아래와 같은 오류가 발생하는 경우,
AH00526: Syntax error on line 10 of /usr/local/apache/conf/extra/httpd-userdir.conf:
Invalid command 'UserDir', perhaps misspelled or defined by a module not included in the server configuration
# vi /etc/httpd/conf/httpd.conf 로 들어가서
LoadModule userdir_module /etc/httpd/modules/mod_userdir.so 부분의 주석을 제거

# /etc/init.d/httpd start 수행 시에 아래와 같은 오류가 발생하는 경우,
AH00534: httpd: Configuration error: No MPM loaded.
# vi /etc/httpd/conf/httpd.conf 로 들어가서
LoadModule mpm_event_module modules/mod_mpm_event.so 부분의 주석을 제거
(특정 LoadModule에 대한 오류가 발생한 경우, 해당 부분의 주석을 제거하여 재실행)
 
# /etc/init.d/httpd start 를 실행했을 때,

httpd: Syntax error on line 144 of /usr/local/apache/conf/httpd.conf: Cannot load /usr/local/apache/modules/mod_mpm_event.so into server: /usr/local/apache/modules/mod_mpm_event.so: cannot open shared object file: No such file or directory
와 같은 오류가 발생하는 경우, 해당 라인으로 이동(:144)하여 주석처리 후 재실행 하되,
AH00557: httpd: apr_sockaddr_info_get() failed for 도메인명
AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using 127.0.0.1. Set the 'ServerName' directive globally to suppress this message
와 같은 오류가 추가로 발생하는 경우,
# cd /etc
# cp hosts hosts.old 를 수행하여 백업하고,
# vi hosts 를 수행하여,
127.0.0.1   localhost.localdomain localhost 도메인명
서버에할당된주소 도메인주소
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
로 수정하고 저장한 후,
# /etc/init.d/httpd start 를 실행하면 정상 수행되어야 한다.


@ 접속이 안될경우 80포트 열어 주어야 한다.
# vi /etc/sysconfig/iptables
-A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT =>추가
# /etc/init.d/iptables restart 또는 service iptables restart
# service iptables restart 를 재수행해준다.

@ 기타 모듈 설치 (아래 PHP 설치 시에 라이브러리로 사용될 모듈)
# cd /usr/local/src
# mkdir etc
# cd etc
# wget http://download.savannah.gnu.org/releases/freetype/freetype-2.4.8.tar.gz
# wget http://www.peregrinehw.com/downloads/gd/gd-2.0.33.tar.gz
# wget http://www.youtu.kr/mirror/jpegsrc.v6b.tar.gz
# wget http://sourceforge.net/projects/libpng/files/libpng15/1.5.12/libpng-1.5.12.tar.gz
# wget http://www.youtu.kr/mirror/imap-2004g.tar.bz2
# wget ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.30.tar.gz
# wget http://heanet.dl.sourceforge.net/mcrypt/libmcrypt-2.5.8.tar.gz
# wget http://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.14.tar.gz
# tar zxvf freetype-2.4.8.tar.gz; tar zxvf gd-2.0.33.tar.gz; tar zxvf jpegsrc.v6b.tar.gz; tar zxvf libpng-1.5.12.tar.gz; tar jxvf imap-2004g.tar.bz2; tar zxvf pcre-8.30.tar.gz; tar zxvf libmcrypt-2.5.8.tar.gz; tar zxvf libiconv-1.14.tar.gz
# cd /usr/local/src/etc/jpeg-6b; mkdir -p /usr/local/libjpeg/bin; mkdir -p /usr/local/libjpeg/man/man1; make clean;make -j4; make install; cp -f libjpeg.a /usr/local/lib; cp -f *.h /usr/include
# cd /usr/local/src/etc/libpng-1.5.12
# cp scripts/makefile.linux Makefile
# make clean;make -j4;make install
# cd /usr/local/src/etc/freetype-2.4.8
# make clean;./configure --prefix=/usr/local/freetype;make -j4;make install
# cd /usr/local/src/etc/gd-2.0.33
# make clean;./configure --prefix=/usr/local/gd;make -j4;make install
# cd /usr/local/src/etc/imap-2004g
# make clean;make slx SPECIALS="SSLDIR=/usr SSLINCLUDE=/usr/include SSLLIB=/usr/lib"
# cd /usr/local/src/etc/imap-2004g/c-client
# cp -f c-client.a /usr/lib; cp -f rfc822.h mail.h linkage.h /usr/include
# cd /usr/local/src/etc/pcre-8.30
# make clean;./configure --prefix=/usr/local;make -j4;make install
# cd /usr/local/src/etc/libmcrypt-2.5.8
# make clean;./configure --prefix=/usr/local;make -j4;make install
# cd /usr/local/src/etc/libiconv-1.14
# make clean;./configure --prefix=/usr/local;make -j4;make install
# ln -s /usr/local/lib/libiconv.so.2 /usr/lib/libiconv.so.2


PHP 설치
 
1.php 다운로드 & 라이브러리 컴파일
yum -y install zlib curl
yum -y install openssl openssl-devel
yum -y install libtermcap-devel ncurses-devel libc-client-devel bzip2-devel
yum -y install bison
yum -y install libpng

yum install net-snmp net-snmp-devel
yum -y install libjpeg-devel libpng-devel freetype-devel gd-devel libtermcap-devel ncurses-devel libxml2-devel libc-client-devel bzip2-devel
rpm -qa gcc* cpp* compat-gcc* flex* openssl*
rpm -qa libjpeg* libpng* freetype* gd-*
 
cd /usr/local/src
wget http://graphics.cs.uni-sb.de/NMM/Download/external/jpegsrc.v6b.tar.gz
tar xvfz jpegsrc.v6b.tar.gz
cd jpeg-6b/
mkdir -p /usr/local/man/man1
./configure --enable-shared --enable-static
make && make install
 
cd /usr/local/src
wet http://cdnetworks-kr-1.dl.sourceforge.net/project/mcrypt/Libmcrypt/2.5.8/libmcrypt-2.5.8.tar.gz
tar xvfz libmcrypt-2.5.8.tar.gz
cd libmcrypt-2.5.8
./configure
make && make install

# cd /usr/local/src
# wget http://kr2.php.net/get/php-5.3.10.tar.gz/from/kr.php.net/mirror
# tar zxvf php-5.3.10.tar.gz
# cd php-5.3.10
# make clean
# ./configure --prefix=/usr/local/php --with-mysql=/usr/local/mysql --with-apxs2=/usr/local/apache/bin/apxs --with-config-file-path=/usr/local/lib --with-gd --with-freetype-dir=/usr/local/freetype --with-zlib --enable-sockets --enable-gd-native-ttf --with-png-dir=/usr/local/lib --with-jpeg-dir=/usr/local/lib --enable-sigchild --enable-magic-quotes --with-gettext --enable-mbstring --enable-inline-optimization --enable-bcmath --enable-shmop --enable-calendar --enable-ftp --with-gdbm --with-iconv=/usr/local --enable-mbregex --with-imap --with-imap-ssl --with-openssl --with-curl --enable-soap --disable-debug --with-mcrypt=/usr/local/libmcrypt --with-kerberos --with-mysqli=/usr/local/mysql/bin/mysql_config --with-pdo-mysql=/usr/local/mysql --enable-mod-charset --enable-safe-mode --enable-sysvmsg --enable-sysvsem --enable-sysvshm --with-snmp --with-zlib-dir --with-ttf --enable-exif --with-xpm-dir --with-libxml-dir --with-pcre-dir --with-ncurses --enable-sqlite-utf8 --with-regex=php --with-bz2
...
creating main/internal_functions_cli.c
+--------------------------------------------------------------------+
| License:                                                           |
| This software is subject to the PHP License, available in this     |
| distribution in the file LICENSE.  By continuing this installation |
| process, you are bound by the terms of this license agreement.     |
| If you do not agree with the terms of this license, you must abort |
| the installation process at this point.                            |
+--------------------------------------------------------------------+
Thank you for using PHP.
Notice: Following unknown configure options were used:
--with-ttf
--with-ncurses
Check './configure --help' for available options
[root@ns php-5.3.10]#
위와 같이 표시되어야 정상수행된 것입니다. 확인하시기 바랍니다. 
# make -j4; make install
# cp php.ini-production /usr/local/lib/php.ini --> 5.3.0 이후 버전 
도메인주소 부분에는 xxx.com과 같이 입력하면 된다.

# vi /root/.bash_profile
PATH=$PATH:$HOME/bin 를
PATH=$PATH:$HOME/bin:/usr/local/mysql/bin:/usr/local/apache/bin:/usr/local/php/bin 로 수정

@ php.ini 설정
# vi /usr/local/lib/php.ini
post_max_size = 100M (Default: 8M)
file_uploads = On
upload_max_filesize = 100M (Default: 2M)
allow_url_fopen = Off (Default: On)
allow_url_include = Off
short_open_tag = On (Default: Off)
disable_functions = exec,passthru,proc_open,popen,curl_exec,curl_multi_exec,parse_ini_file,show_source
(Default: disable_functions =)

# ntsysv <--- 서비스 상태확인

# reboot <-- 설정을 마치면 한번쯤 리부팅 해 주세요...^^
 
 
서비스 시작
# service mysqld start
# service httpd start


새로운 도메인을 추가하는 경우, 아래의 처리들을 다시한번 확인해본다.
--------------------------------------------------------------------------------
[root@ns user]# vi /etc/resolv.conf
[root@ns user]# vi /etc/hosts <--- 신규 추가 시에 추가 필요
[root@ns user]# vi /etc/named.conf <--- 신규 추가 시에 추가 필요
[root@ns user]# vi /var/named/chroot/var/named/도메인주소.zone <--- 신규 추가 시에 생성 필요
[root@ns user]# ln -s /var/named/chroot/var/named/도메인주소.zone /var/named/도메인주소.zone
[root@ns user]# vi /usr/local/apache/conf/httpd.conf <--- 신규 추가 시에 추가 필요

[root@ns user]# /etc/rc.d/init.d/named reload
[root@ns user]# service named restart  (# chkconfig --level 35 named on (부팅 시에 런레벨 35일때 자동 실행))
[root@ns user]# service httpd restart

이제, 도메인을 등록한 사이트의 네임 호스트 관리에서 네임 호스트 및 IP주소를 추가하고,
네임서버를 네임 호스트 관리에서 입력한 네임 호스트로 입력하여 변경을 수행(보통, 등록한 사이트의 네임서버로 초기설정된 상태)

등록을 완료한 후에 ISP의 네임서버에 등록 및 변경이 수행되기까지는 약간의 시간이 필요하다.
잠시 후에 아래의 명령으로 정상 등록 및 변경여부를 확인한다.

[root@ns user]# nslookup 도메인주소
[root@ns user]# dig 도메인주소

시스템 > 관리 > 사용자 및 그룹에서 사용자를 추가 후에 권한을 변경한다. 

[root@ns user]# chmod 711 /home/사용자
[root@ns user]# chmod 755 /home/사용자/www
[root@ns user]# chgrp -R 사용자 /home/사용자
[root@ns user]# chown -R 사용자 /home/사용자


 
 
번외 Apache 계정별 사용 설정
vi /usr/local/apache/conf/httpd.conf
 
Include conf/extra/httpd-userdir.conf
LoadModule userdir_module modules/mod_userdir.so
LoadModule authn_core_module modules/mod_authn_core.so
LoadModule authz_host_module modules/mod_authz_host.so
주석 제거
 
/home/계정디렉토리 권한 711
/home/계정/public_html 권한 755 필요
 

 
참고 URL 
http://vogel.tistory.com/143


openSSL 설치를 위해서는 5.2 버젼에서는 5.2.11 , 5.2.12 버젼을 설치한다.
Zend Optimizer 설치를 위해서는 5.2 version을 설치 해야 한다.
Posted by iWithJoy
Linux/CentOS2012. 3. 7. 15:11
CentOS 6.2 minimal 설치 상태에서
http 2.2.22, mysql 5.5.20, php 5.3.10 소스 컴파일 설치를 해보았습니다.

@ 설치경로는 아래와 같으니 참조 하시길....
mysql = /usr/local/mysql/
apache = /usr/local/apache/
php = /usr/local/php/
apache-log = /logs/
db = /usr/local/mysql/data


@ 패키지 제거 및 설치
# rpm -qa httpd php mysql
# yum remove -y httpd php mysql

@ 서버운영에 필요한 소스 및 라이브러리 추가

# yum -y install ORBit2 PyXML a2ps acpid alsa-lib amtu aspell at atk audiofile audit-libs-python autoconf autofs automake avahi avahi-glib bc bind bind-chroot bind-libs bind-utils cairo ccid compat-libstdc++-33 conman cpp cpuspeed crash createrepo crypto-utils cryptsetup-luks cups-libs cvs cyrus-sasl-md5 cyrus-sasl-plain db4-devel dbus-python device-mapper-multipath dhcp dhcp-devel dialog dmraid dos2unix dosfstools dump e2fsprogs-devel ed eject elfutils elfutils-libs enscript expat-devel expect expect-devel expectk fetchmail file finger flex fontconfig fontconfig-devel foomatic freetype freetype-devel ftp gcc gcc-c++ gd gd-devel gd-progs gdb gdbm-devel gettext gfs2-utils glib2-devel glibc-devel glibc-headers gmp-devel gnutls gpm gtk2 hal hdparm hesiod hicolor-icon-theme imake iptraf iptstate ipvsadm irqbalance jwhois kernel-devel kernel-headers keyutils-libs-devel kpartx krb5-devel krb5-workstation ksh lcms lftp libICE libSM libX11 libX11-devel libXau libXau-devel libXcursor libXdmcp libXdmcp-devel libXext libXfixes libXft libXi libXinerama libXpm libXpm-devel libXrandr libXrender libXt libXxf86vm libaio libaio-devel libart_lgpl libbonobo libc-client libcurl-devel libdaemon libevent libfontenc libgomp libgssglue libhugetlbfs libhugetlbfs-devel libidn-devel libjpeg libjpeg-devel libmng libnl libnl-devel libpcap libpng libpng-devel libselinux-devel libselinux-python libsepol-devel libsmi libstdc++-devel libsysfs libtiff libtool libtool-ltdl libwvstreams libxml2-devel libxml2-python libxslt libxslt-python lksctp-tools logwatch lrzsz lsof m2crypto mailcap mailx make man man-pages man-pages-ko mc mcstrans mdadm memtest86+ mesa-libGL mesa-libGL-devel mgetty microcode_ctl mkbootdisk mlocate mrtg mt-st mtools mtr mutt nc ncurses-devel net-snmp-libs netpbm nfs-utils nfs-utils-lib nmap nscd nss_db ntp ntsysv numactl oddjob openssh-clients openssl-devel pam-devel pam_krb5 pam_passwdqc pam_pkcs11 pango parted parted-devel patch pax pciutils pcsc-lite perl perl-Archive-Tar perl-BSD-Resource perl-Compress-Zlib perl-DBI perl-Digest-HMAC perl-Digest-SHA1 perl-HTML-Parser perl-HTML-Tagset perl-IO-Socket-INET6 perl-IO-Socket-SSL perl-IO-Zlib perl-Net-IP perl-Net-SSLeay perl-Newt perl-Socket6 perl-String-CRC32 perl-URI perl-libwww-perl pkgconfig pm-utils postgresql-libs prelink procmail psacct psutils pulseaudio-esound-compat pyOpenSSL pykickstart pyorbit pyparted python-pyblock pyxf86config quota rdate rdist readahead rmt rpcbind rpm-build rsh rsync rusers rwho samba samba-client samba-common samba-swat sendmail sendmail-cf setools setserial setuptool shared-mime-info sip sos spamassassin squashfs-tools strace stunnel symlinks sysfsutils syslinux sysstat system-config-date system-config-firewall talk tcl tcp_wrappers tcpdump tcsh telnet telnet-server time tk tmpwatch traceroute tree ttmkfdir unix2dos unixODBC unzip usbutils usermode vconfig vim-common vim-enhanced vsftpd wget wireless-tools words xfsprogs xfsprogs-devel xinetd xorg-x11-proto-devel yp-tools ypbind ypserv zip zlib-devel GConf2 ImageMagick ImageMagick-perl avahi-libs bwidget cloog-ppl crda cryptsetup-luks-libs cups db4-cxx deltarpm desktop-file-utils device-mapper-multipath-libs dmidecode dmraid-events docbook-dtds flac foomatic-db foomatic-db-filesystem foomatic-db-ppds ghostscript ghostscript-fonts gnome-doc-utils-stylesheets gnome-python2 gnome-python2-canvas gnome-user-docs gnome-vfs2 gpm-libs groff-perl gstreamer gstreamer-tools hal-info hal-libs html2ps hunspell iw jasper-libs kpathsea lcms-libs libIDL libX11-common libXcomposite libXdamage libXdamage-devel libXext-devel libXfixes-devel libXfont libXres libXtst libXxf86vm-devel libasyncns libcanberra libcanberra-gtk2 libcom_err-devel libcroco libdrm-devel libedit libglade2 libgnomecanvas libgsf libnetfilter_conntrack libnfnetlink libnotify libogg libpaper librsvg2 libsamplerate libsndfile libtalloc libtasn1 libtdb libthai libtirpc libusb1 libvorbis libwmf-lite libwnck libxcb libxcb-devel lm_sensors-libs mesa-dri-drivers mozilla-filesystem mpfr mrtg-libs netpbm-progs notification-daemon ntpdate openjpeg-libs pcsc-lite-libs perl-Compress-Raw-Zlib perl-Crypt-OpenSSL-Bignum perl-Crypt-OpenSSL-RSA perl-Crypt-OpenSSL-Random perl-Date-Manip perl-Digest-SHA perl-Encode-Detect perl-ExtUtils-MakeMaker perl-ExtUtils-ParseXS perl-IO-Compress-Base perl-IO-Compress-Zlib perl-Mail-DKIM perl-MailTools perl-Module-Pluggable perl-Net-DNS perl-Net-LibIDN perl-NetAddr-IP perl-Package-Constants perl-Pod-Escapes perl-Pod-Simple perl-SNMP_Session perl-Test-Harness perl-Time-HiRes perl-TimeDate perl-YAML-Syck perl-devel perl-libs perl-version pixman poppler poppler-data poppler-utils portreserve ppl psutils-perl pulseaudio pulseaudio-libs pycairo pygobject2 pygtk2 pygtk2-libglade python-decorator python-deltarpm python-slip python-slip-dbus rarian rarian-compat rtkit samba-winbind-clients setools-console setools-gui setools-libs setools-libs-tcl sgml-common sgpio sound-theme-freedesktop speex startup-notification system-config-date-docs system-config-firewall-tui tex-preview texinfo texinfo-tex texlive texlive-dvips texlive-latex texlive-texmf texlive-texmf-dvips texlive-texmf-errata texlive-texmf-errata-dvips texlive-texmf-errata-fonts texlive-texmf-errata-latex texlive-texmf-fonts texlive-texmf-latex texlive-utils tokyocabinet urlview urw-fonts usermode-gtk xcb-util xml-common xorg-x11-font-utils xulrunner xz xz-lzma-compat yelp lksctp-tools-devel apr-util apr-util-devel libtool-ltdl-devel libmcrypt libmcrypt-devel gmp mhash mhash-devel gdbm zlib curl g++ openssl bzip2-devel libc-client-devel bison system-config-securitylevel

@ cmake 설치
# cd /usr/local/src
# wget http://www.cmake.org/files/v2.8/cmake-2.8.7.tar.gz
# tar zxvf cmake-2.8.7.tar.gz
# cd cmake-2.8.7
# ./bootstrap
# make; make install

@ mysql 설치 5.5.20
# yum remove mysql
# cd /usr/local/src
# wget http://www.mysql.com/get/Downloads/MySQL-5.5/mysql-5.5.27.tar.gz/from/http://mirror.khlug.org/mysql/
http://www.mysql.com/downloads/mysql/ 에서 Source Code 중,
Generic Linux (Architecture Independent), Compressed TAR Archive 최신버전을 Download 수행한다.
# tar zxvf mysql-5.5.27.tar.gz (최신버전) 
# cd mysql-5.5.27  (최신버전) 
# cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DENABLED_LOCAL_INIFILE=1 -DWITH_INNOBASE_STORAGE_ENGINE=1 -DWITH_PARTITION_STORAGE_ENGINE=1 -DWITH_EXTRA_CHARSETS=all -DWITH_SSL=system -DWITH_ZLIB=system -DENABLED_LOCAL_INFILE=1 -DWITH_READLINE=1 -DWITH_VALGRIND=1 -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DMYSQL_DATADIR=/usr/local/mysql/data
# make; make install
# groupadd mysql
# useradd -M -o -r -d /usr/local/mysql -s /sbin/nologin -c "Mysql Server" -u 27 -g mysql mysql >/dev/null 2>&1 || :
# chown -R root:mysql /usr/local/mysql; chown -R mysql:mysql /usr/local/mysql/data
# cd /usr/local/mysql; ./scripts/mysql_install_db --user=mysql --datadir=/usr/local/mysql/data
@ 비밀번호 설정
# cp support-files/mysql.server /etc/init.d/mysqld
# cp support-files/my-huge.cnf /etc/my.cnf --> 메모리 1G 이상
# cp support-files/my-medium.cnf /etc/my.cnf
# vi /etc/init.d/mysqld ##### datadir 찾아서 datadir=/usr/local/mysql/data 라고 입력
# service mysqld start
# chkconfig --add mysqld
# chkconfig --level 35 mysqld on (런레벨 35일때 자동 실행 된다)
# chkconfig --list | grep mysqld
@ 리부팅시 서비스 실행하지 않으려면 - chkconfig mysqld off
# /usr/local/mysql/bin/mysqladmin -u root password
설치 작업이 끝났다면 익명접근권한을 삭제하자. ( mysql 콘솔에 그냥 접근을 못하게 해야 함.)
# /usr/local/mysql/bin/mysql -u root -p
# Enter password:
# mysql> USE mysql;
# mysql> delete from user where password = "";
# mysql> exit
# /usr/local/mysql/bin/mysqladmin -u root -p reload
# Enter password:

root 비밀번호를 잊어버린 경우,

$ mysql -u root

Error 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)


위와 같은 에러가 난다면, mysql password를 재설정 해야한다.

(RHEL 5.6 환경)


# killall mysqld





# service mysqld stop

# cd /usr/bin
# mysqld_safe --skip-grant-tables

실행 후에 다른 터미널에서 아래를 수행한다.

# mysql
mysql> use mysql;

mysql> UPDATE user SET password=PASSWORD('newpassword') WHERE user = 'root';

 

mysql> FLUSH PRIVILEGES;

mysql> exit;

 

기존 터미널로 돌아와서 [Ctrl]+z를 누른 후에

# ps -ef | grep mysql

수행하여 수행되고 있는 모든 프로세스를

# kill -9 프로세스번호

수행하여 강제종료 시킨 후에 아래와 같이 mysql을 다시 시작한다.


# service mysqld start
# /usr/local/mysql/bin/mysql -u root -p

지정한 password를 phpMyAdmin 등을 사용하여 (사용을 위해 지정한 도메인명 등으로) 로그인하면 정상 접근된다.
참고로, user에 대한 정보는 /usr/local/mysql/data/mysql 디렉토리의 아래의 같은 3개의 파일에 저장되는데,

user.frm

user.MYD

user.MYI

정상처리된 파일을 백업하여 두었다가 문제가 발생할 경우, 덮어쓰기를 수행하여 복구하는 것도 한가지 방법일 것이다.

만약, 위와 같은 처리 후에도 정상 start 시에 로그인이 불가하여, mysql을 완전히 제거 후에 재설치를 원할 경우,

# yum remove mysql 을 수행 후에

반드시, /usr/local의 mysql 디렉토리를 통째로 삭제 후에 재설치를 수행해야 한다.


@ cronolog 설치(apache log 분할)
# cd /usr/local/src
# wget http://www.youtu.kr/mirror/cronolog-1.6.2.tar.gz
# tar xvf cronolog-1.6.2.tar.gz
# cd cronolog-1.6.2
# ./configure
# make;make install


@ 아파치 설치 2.2.21
# cd /usr/local/src
# wget http://mirror.khlug.org/apache//httpd/httpd-2.2.22.tar.gz
# wget
http://linux-files.com/httpd/httpd-2.2.22.tar.gz
# tar zxvf httpd-2.2.22.tar.gz
# cd httpd-2.2.22
# make clean
# vi server/mpm/prefork/prefork.c
@ #define DEFAULT_SERVER_LIMIT 256 부분을 :sh 명령으로 잠시 나가서
# ulimit -a max user processes 를 수행하여
위의 해당 값을 확인하여 설정된 값을 넘지 않도록 256의 배수만큼 수정 후, 저장해준다. Ex) 1024

<주의> 2.4부터 변경된 부분은 apr과 apr-util을 별도로 다운 받아야 함. 그전에는 apr과 apr-util이 포함되어 있었음.

   - Apache HTTP Server : http://httpd.apache.org/download.cgi

   - APR & APR-util : http://apr.apache.org/download.cgi

apr & apr-util copy

 prompt> cp -R ./apr-1.4.6 ./httpd-2.4.1/srclib/apr
 prompt> cp -R ./apr-util-1.4.1 ./httpd-2.4.1/srclib/apr-util

# ./configure --prefix=/usr/local/apache --enable-shared=max --enable-rule=SHARED_CORE --enable-so --enable-rewrite --enable-ssl --enable-proxy --enable-modules=all 

configure

    - apr & apr-util을 별도로 설치해서 사용할 경우,

      옵션으로 "--with-apr=apr 설치 디렉토리 --with-apr-util=apr-util 설치 디렉토리" 사용

 prompt> cd httpd-2.4.1
 prompt> ./configure --prefix=설치할 디렉토리 \
             --enable-module=so \
             --enable-so \
             --enable-ssl \
             --enable-rewrite \
             --enable-mpms-shared=all \
             --with-included-apr

# ./configure --prefix=/usr/local/apache --enable-shared=max --enable-rule=SHARED_CORE --enable-so --enable-rewrite --enable-ssl --enable-proxy --enable-modules=so --enable-mpms-shared=all --with-included-apr
# make; make install
# /usr/local/apache/bin/apachectl -l
Compiled in modules:
  core.c
  mod_so.c
  http_core.c
  event.c
# cp /usr/local/apache/bin/apachectl /etc/init.d/httpd
@ chkconfig를 이용해서 자동실행 등록해야 하지만 이전에 실행 스크립트 파일에 아래 내용 추가가 선행되어야 한다.
# vi /etc/init.d/httpd
-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
# chkconfig --list | grep httpd
# /etc/init.d/httpd start 를 실행했을 때,
httpd: Syntax error on line 144 of /usr/local/apache/conf/httpd.conf: Cannot load /usr/local/apache/modules/mod_mpm_event.so into server: /usr/local/apache/modules/mod_mpm_event.so: cannot open shared object file: No such file or directory
와 같은 오류가 발생하는 경우, 해당 라인으로 이동(:144)하여 주석처리 후 재실행 하되,
AH00557: httpd: apr_sockaddr_info_get() failed for 도메인명
AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using 127.0.0.1. Set the 'ServerName' directive globally to suppress this message
와 같은 오류가 추가로 발생하는 경우,
# cd /etc
# cp hosts hosts.old 를 수행하여 백업하고,
# vi hosts 를 수행하여,
127.0.0.1   localhost.localdomain localhost 도메인명
서버에할당된주소 도메인주소
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
로 수정하고 저장한 후,
# /etc/init.d/httpd start 를 실행하면 정상 수행되어야 한다.


@ 접속이 안될경우 80포트 열어 주어야 한다.
#vi /etc/sysconfig/iptables
-A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT =>추가
# /etc/init.d/iptables restart 또는 service iptables restart


@ 기타 모듈 설치
# cd /usr/local/src
# mkdir etc
# cd etc
# wget http://download.savannah.gnu.org/releases/freetype/freetype-2.4.8.tar.gz
# wget http://www.peregrinehw.com/downloads/gd/gd-2.0.33.tar.gz
# wget http://www.youtu.kr/mirror/jpegsrc.v6b.tar.gz
# wget http://sourceforge.net/projects/libpng/files/libpng15/1.5.9/libpng-1.5.9.tar.gz
# wget http://www.youtu.kr/mirror/imap-2004g.tar.bz2
# wget ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.30.tar.gz
# wget http://heanet.dl.sourceforge.net/mcrypt/libmcrypt-2.5.8.tar.gz
# wget http://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.14.tar.gz
# tar zxvf freetype-2.4.8.tar.gz; tar zxvf gd-2.0.33.tar.gz; tar zxvf jpegsrc.v6b.tar.gz; tar zxvf libpng-1.5.9.tar.gz; tar jxvf imap-2004g.tar.bz2; tar zxvf pcre-8.30.tar.gz; tar zxvf libmcrypt-2.5.8.tar.gz; tar zxvf libiconv-1.14.tar.gz
# cd /usr/local/src/etc/jpeg-6b; mkdir -p /usr/local/libjpeg/bin; mkdir -p /usr/local/libjpeg/man/man1; make clean;make -j4; make install; cp -f libjpeg.a /usr/local/lib; cp -f *.h /usr/include
# cd /usr/local/src/etc/libpng-1.5.9
# cp scripts/makefile.linux Makefile
# make clean;make -j4;make install
# cd /usr/local/src/etc/freetype-2.4.8
# make clean;./configure --prefix=/usr/local/freetype;make -j4;make install
# cd /usr/local/src/etc/gd-2.0.33
# make clean;./configure --prefix=/usr/local/gd;make -j4;make install
# cd /usr/local/src/etc/imap-2004g
# make clean;make slx SPECIALS="SSLDIR=/usr SSLINCLUDE=/usr/include SSLLIB=/usr/lib"
# cd /usr/local/src/etc/imap-2004g/c-client
# cp -f c-client.a /usr/lib; cp -f rfc822.h mail.h linkage.h /usr/include
# cd /usr/local/src/etc/pcre-8.30
# make clean;./configure --prefix=/usr/local;make -j4;make install
# cd /usr/local/src/etc/libmcrypt-2.5.8
# make clean;./configure --prefix=/usr/local;make -j4;make install
# cd /usr/local/src/etc/libiconv-1.14
# make clean;./configure --prefix=/usr/local;make -j4;make install
# ln -s /usr/local/lib/libiconv.so.2 /usr/lib/libiconv.so.2

@ PHP 설치
# yum install net-snmp net-snmp-devel
# yum -y install libjpeg-devel libpng-devel freetype-devel gd-devel libtermcap-devel ncurses-devel libxml2-devel libc-client-devel bzip2-devel
# rpm -qa gcc* cpp* compat-gcc* flex* openssl*
# rpm -qa libjpeg* libpng* freetype* gd-*
 
# cd /usr/local/src
# wget http://kr2.php.net/get/php-5.3.10.tar.gz/from/kr.php.net/mirror
# tar zxvf php-5.3.10.tar.gz
# cd php-5.3.10
# make clean
# ./configure --prefix=/usr/local/php --with-mysql=/usr/local/mysql --with-apxs2=/usr/local/apache/bin/apxs --with-config-file-path=/usr/local/lib --with-gd --with-freetype-dir=/usr/local/freetype --with-zlib --enable-sockets --enable-gd-native-ttf --with-png-dir=/usr/local/lib --with-jpeg-dir=/usr/local/lib --enable-sigchild --enable-magic-quotes --with-gettext --enable-mbstring --enable-inline-optimization --enable-bcmath --enable-shmop --enable-calendar --enable-ftp --with-gdbm --with-iconv=/usr/local --enable-mbregex --with-imap --with-imap-ssl --with-openssl --with-curl --enable-soap --disable-debug --with-mcrypt=/usr/local/libmcrypt --with-kerberos --with-mysqli=/usr/local/mysql/bin/mysql_config --with-pdo-mysql=/usr/local/mysql --enable-mod-charset --enable-safe-mode --enable-sysvmsg --enable-sysvsem --enable-sysvshm --with-snmp --with-zlib-dir --with-ttf --enable-exif --with-xpm-dir --with-libxml-dir --with-pcre-dir --with-ncurses --enable-sqlite-utf8 --with-regex=php --with-bz2
...
creating main/internal_functions_cli.c
+--------------------------------------------------------------------+
| License:                                                           |
| This software is subject to the PHP License, available in this     |
| distribution in the file LICENSE.  By continuing this installation |
| process, you are bound by the terms of this license agreement.     |
| If you do not agree with the terms of this license, you must abort |
| the installation process at this point.                            |
+--------------------------------------------------------------------+

Thank you for using PHP.
Notice: Following unknown configure options were used:
--with-ttf
--with-ncurses
Check './configure --help' for available options
[root@ns php-5.3.10]#
위와 같이 표시되어야 정상수행된 것입니다. 확인하시기 바랍니다. 
# make -j4; make install
# cp php.ini-production /usr/local/lib/php.ini --> 5.3.0 이후 버전

@ 아파치 설정
# vi /usr/local/apache/conf/httpd.conf
KeepAlive ON
주석을 해제하고 서버이름이나 IP주소를 설정합니다.
ServerName localshot:80
서버관리자 메일주소 설정
ServerAdmin webmaster@localhost
인터넷주소 rewrite 모드 사용을 위한 설정
AllowOverride None –> AllowOverride All
웹 페이지 접속시 기본적으로 읽어 들일 파일명 설정
DirectoryIndex index.html 를 찾아 DirectoryIndex index.html index.htm index.php index.php3 index.cgi index.jsp 로 수정
아래와 같이 추가 합니다.
AddType application/x-compress .Z
AddType application/x-gzip .gz .tgz
AddType application/x-httpd-php .htm .html .php .ph php3 .php4 .phtml .inc -->추가
AddType application/x-httpd-php-source .phps -->추가

주석제거
# AddHandler cgi-script .cgi
몇가지 주석 및 제거 - 필요에 따라 더 적용해도 무방함
Include conf/extra/httpd-mpm.conf <-- 주석제거
Include conf/extra/httpd-userdir.conf <-- 주석제거
Include conf/extra/httpd-vhosts.conf <-- 주석제거
Include conf/extra/httpd-default.conf <-- 주석제거
<Directory />
Options FollowSymLinks
AllowOverride All <-- 수정
Order deny,allow
#Deny from all <-- 주석처리
</Directory>
#vi /usr/local/apache/conf/extra/httpd-userdir.conf
Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec 를
Options MultiViews SymLinksIfOwnerMatch IncludesNoExec 로
Indexes 를 삭제 한다.
#vi /usr/local/apache/conf/extra/httpd-vhosts.conf
내용을 모두 삭제하고 구문만 적용후 저장 - 저장방법은 :wq 인 것은 아시죠...^^
NameVirtualHost *:80
<VirtualHost *:80>
DocumentRoot /usr/local/apache/htdocs/
ServerName *
</VirtualHost>

#NameVirtualHost *:80
<VirtualHost *:80>
    ServerAdmin webmaster@dummy-host2.example.com
    DocumentRoot /usr/local/apache/htdocs/
    ServerName www.도메인주소
    ErrorLog logs/도메인주소.error_log
    #CustomLog logs/dummy-host2.example.com-access_log common
</VirtualHost>

도메인주소 부분에는 xxx.com과 같이 입력하면 된다.

# vi /root/.bash_profile
PATH=$PATH:$HOME/bin 를
PATH=$PATH:$HOME/bin:/usr/local/mysql/bin:/usr/local/apache/bin:/usr/local/php/bin 로 수정

@ php.ini 설정
# vi /usr/local/lib/php.ini
post_max_size = 100M (Default: 8M)
file_uploads = On
upload_max_filesize = 100M (Default: 2M)
allow_url_fopen = Off (Default: On)
allow_url_include = Off
short_open_tag = On (Default: Off)
disable_functions = exec,passthru,proc_open,popen,curl_exec,curl_multi_exec,parse_ini_file,show_source
(Default: disable_functions =)


# /etc/init.d/httpd start 수행 시에 아래와 같은 오류가 발생하는 경우,
AH00526: Syntax error on line 10 of /usr/local/apache/conf/extra/httpd-userdir.conf:
Invalid command 'UserDir', perhaps misspelled or defined by a module not included in the server configuration
# vi /etc/httpd/conf/httpd.conf 로 들어가서
LoadModule userdir_module /etc/httpd/modules/mod_userdir.so 부분의 주석을 제거

# ntsysv <--- 서비스 상태확인

# reboot <-- 설정을 마치면 한번쯤 리부팅 해 주세요...^^

'Linux > CentOS' 카테고리의 다른 글

Adding Modules to httpd.conf With Apache 2  (0) 2012.03.08
CentOS 6.3 APM 설치  (0) 2012.03.07
웹서버 세팅에 관한 문서2  (0) 2012.03.06
웹서버 세팅에 관한 문서1  (0) 2012.03.06
CentOS phpMyAdmin 설치  (0) 2012.03.05
Posted by iWithJoy
Linux/CentOS2012. 3. 6. 18:16

2. 아파치 웹 서버 파워업!!

   2.1. APM은 무엇인가?


     2.1.1. APM, 혹은 마피아?

레드햇 리눅스에서 제공하는 아파치 웹 서버는 웹 서버 자체의 기능은 웹 페이지를 표시하는 데는 아무런 문제가 없지만 왠지 아쉬운 것이 사실입니다. 방명록이나 게시판이 없는 홈페이지가 과연 쓸만할까요? 웹 서버를 구축하긴 했지만 단순히 페이지를 표시하는 데 그치는 웹 사이트는 너무나 밋밋하여 마음에 들지 않습니다.

아파치 웹 서버에 덧붙여 방대한 자료를 처리하기 위한 데이터베이스, 웹 서버와 데이터베이스 사이의 연동을 위해 사용되는 PHP가 구축된다면 여러분도 동적인 홈페이지를 가질 수 있습니다. 이렇게 동적인 웹 페이지를 구축하는 데 필요한 아파치 웹 서버, 그크립트 언어인 PHP, 데이터베이스인 MySQL, 이 3인방의 첫 이니셜을 따서 APM이라고 부릅니다. 혹은 우리말의 첫 자만 모아 '마피아'라고 부르기도 하죠.

     2.1.2. MySQL과 PHP

아파치에 대한 설명은 앞의 단원에서 했으므로 생략하고, 데이터베이스인 MySQL과 스크립트 언어인PHP에 대해서 간단히 설명해 드리겠습니다.

MySQL은 데이터베이스 서버입니다. 일반적으로 리눅스에서 많이 사용되는 데이터베이스죠. 다른 데이터베이스보다 속도가 훨씬 빠르다는 것이 큰 장점입니다. 게다가 무료로 사용할 수 있으니 일반 사용자가 사용하기에는 다른 데이터베이스의 추종을 불허하죠.


PHP는 서버에서 실행되는 스크립트 언어입니다. 웹 문서인 HTML파일에 포함되어 사용할 수 있는 프로그래밍 언어죠. C 언어와 유사한 형태를 가지고 있으며, PHP는웹 개발자들이 좀 더 빠르고 쉽게 동적인 웹 페이지를 만들기 위해 만들어졌습니다. 그래서 원래는 개인용 홈페이지 도구(Personal Home Page Tool)라는 이름으로 만들어졌죠. 그러다 보니 데이터베이스와의 연동에 대해서 쉽고 빠르다는 큰 장점을 발휘합니다.

     2.1.3. APM은 어떻게 동작할까?

우리가 게시판이나 방명록에 있는 글들을 보려면 우선 웹 서버에 요청하게 됩니다. 그러면 웹 서버는 웹 페이지를 보여 주겠죠? 그렇지만 웹 페이지에는 보통의 HTML이 아닌 PHP코드가 섞여 있습니다.

PHP 코드에는 '리눅스 서버에 있는 데이터베이스인 MySQL에서 몇 번째 어디에 저장되어 있는 글을 빼와라.' 뭐 이런 식의 명령들이 포함되어 있습니다. 이런 명령을 내리면 우리가 요청한 글을 보게 되는 것이죠.

글을 남기는 것도 마찬가지압니다. 게시판에서 글을 다 쓰고 <저장> 단추를 클릭하면 PHP코드가 작동해서 데이터베이스 속으로 글이 저장되는 것입니다.

APM은 이제 정형화도니 공식입니다. 게시판 하나를 만들더라도 웹 서버에 활력을 불어넣기 위해서 PHP와 MySQL을 연동해서 사용할 필요가 있는 것이죠.


그럼 지금부터 이 세 가지를 함께 설치해 보도록 하겠습니다. 단 한 번에 설치하는 운 좋은 분도 있겠지만 여러 번 설치해도 계속 실패하는 분도 있을 것입니다. APM 설치는 아주 작은 설정 실수로 전체 설치를 실패할 수 있는 광장히 짜증나는 일입니다. 저 역시 며칠을 Q&A 게시판에서 헤맨 경험이 있거든요.

그렇지만 좀더 멋진 여러분의 홈페이지를 위해서 인내해야겠죠? 실패를 통해서 점점 완성되어 가는 설치 과정을 지켜보는 것도 기분 좋은 일이랍니다. 처음부터 하나씩 천천히 따라해 본다면 여러분도 APM 설치에 성공할 수 있을 것입니다.

여러분에게 행운이 있기를 바랍니다.



   2.2. APM 다운로드하기

그럼 우선 아파치, PHP, MySQL을 차례로 다운받아 보겠습니다. 모질라 웹 브라우저를 잉요해서 다운받는 것이기 때문에 별다른 어려움이 있는 것은 아니지만, 내 시스템에 맞는 파일을 다운받아야 한다는 점을 잘 기억해 두기 바랍니다. 특히 아키텍처에 맞는 파일을 받는 것이 중요합니다.

1. 아파치 웹 서버부터 다운받아 보겠습니다. 아파치 웹 서버는 아파치 그룹 사이트(http://www.apache.org)에서 다운받을 수 있습니다.

2. 웹 브라우저의 세로 이동 막대를 아래로 내리면 다운받을 수 있는 링크를 찾을 수 있습니다. from a mirror 링크를 클릭합니다.

3. 미러 사이트의 링크 리스트를 클릭합니다.

4. 미러 사이트 목록에 있는 한국의 미러 사이트도 있군요. kr 링크를 클릭하면 우리나라에 있는 아파치 웹 서버의 미러 사이트를 방문할 수 있습니다.(http://mirror.apache-kr.org//httpd/)

5. 아파치 프로그램을 다운받기 위해서 httpd 디렉토리를 클릭합니다.

6. 다양한 버전, 다양한 방식으로 압축되어 있는 아파치를 확인할 수 있습니다. 리눅스에서 사용할 수 있또록 확장자 tar.gz의 최신 버전을 다운받도록 하겠습니다. 즉 우리가 다운받을 파일은 apache_최신버전.tar.gz 파일입니다. --->  httpd-2.4.1.tar.bz2

7. 파일을 다운로드합니다. 우선 / 디렉토리에 다운받도록 하죠.

8. 파일의 용량이 얼마 되지 않기 때문에 금방 다운받을 수 있습니다.

9. 다음은 PHP를 다운받겠습니다. PHP Net이라는 사이트(http://www.php.net)에서 다운받을 수 있습니다. downloads 링크를 클릭하세요.

10. PHP의 완전한 소스코드 파일을 다운받습니다.

11. 아파치 웹 서버를 저장한 곳에 파일을 다운받습니다.

12. 아파치 웹 서버와 마찬가지로 파일의 용량이 얼마 되지 않기 떄문에 금방 다운로드가 이루어집니다.

13. 다음은 MySQL을 다운받습니다. MySQL.org라는 사이트(http://www.mysql.org)에서 다운받을 수 있습니다. Downloads 링크를 클릭하세요.

14. MySQL의 안정 버전을 다운받도록 합니다.

15. 아파치와 PHP를 다운받은 곳에 파일을 함께 저장합니다.

16. 파일을 모두 다운받았으면 / 디렉토리에 제대로 받았는지 확인합니다. 파일 버전과 이름도 함께 확인하기 바랍니다.



   2.3. 기존의 패키지 삭제

파일을 모두 다운받았지만 이미 동작하고 있는 아파치, 그리고 리눅스 설치를 통해서 설치되었을지도 모르는MySQL과PHP는 우리를 불안하게 만듭니다. 이들을 제대로 종료하교 삭제하지 않는다면 리눅스 서버에 APM을 연동해서 설치하고자하는 우리의 노력은 몽땅 도로아미타불입니다. 실행되고 있는 아파치 데문을 중지하고 리눅스 서버에 설치되어 있는 아파치, PHP, MySQL의 모든 흔적을 남김없이 없애 버리겠습니다.

1. 앞 단원에서 설정한 아파치 웹 서버는 리눅스를 부팅할 때부터 실행되도록 설정하였기 때문에 이미 실행되고 있는 아파치 데몬을 중지시켜야 합니다. 웹 서버가 어떻게 동작하고 있는지 ps 명령을 통해서 확인할 수 있습니다.

      [root@comcodi root]# ps -ef | grep httpd ☜
      root      1036     1   0 21:23 ?              00:00:01 /usr/sbin/httpd -DHAVE_ACEESS -D
      -Dnobody  1039  1036   0 21:@3 ?              00:00:00 /usr/sbin/httpd -DHAVE_ACEESS -D
      -Dnobody  1040  1036   0 21:@3 ?              00:00:00 /usr/sbin/httpd -DHAVE_ACEESS -D
      -Dnobody  1041  1036   0 21:@3 ?              00:00:00 /usr/sbin/httpd -DHAVE_ACEESS -D
      -Dnobody  1042  1036   0 21:@3 ?              00:00:00 /usr/sbin/httpd -DHAVE_ACEESS -D
      -Dnobody  1043  1036   0 21:@3 ?              00:00:00 /usr/sbin/httpd -DHAVE_ACEESS -D
      -Dnobody  1044  1036   0 21:@3 ?              00:00:00 /usr/sbin/httpd -DHAVE_ACEESS -D
      -Dnobody  1045  1036   0 21:@3 ?              00:00:00 /usr/sbin/httpd -DHAVE_ACEESS -D
      -Dnobody  1046  1036   0 21:@3 ?              00:00:00 /usr/sbin/httpd -DHAVE_ACEESS -D
      -Droot    1542  1286   1 22:13 pts/0          00:00:00 grep httpd
      [root@comcodi root]#
	 

2. 웹 서버인 httpd의 프로세스를 종료시키겠습니다. 프로세스를 종료시키기 위해 kill 명령을 사용하는데, 종료시킬 프로세스가 실행되고 있는 번호 (PID)를 입력하면 됩니다.

프로세스를 모두 종료할 필요 없이 root 사용자가 실행시킨 부로 프로세스만 삭제하면 모든 프로세스가 종료됩니다. 예제에서는 1436번 프로세스가 부모 프로세스입니다.

      [root@comcodi root]# kill 1436 ☜
	 

3. 다시 프로세스를 확인하는 ps 명령을 내리면 모든 프로세스가 종료된 것을 확인 할 수 있습니다.

      [root@comcodi root]# ps -ef | grep httpd ☜
      root    1542  1286   1 22:13 pts/0          00:00:00 grep httpd
      [root@comcodi root]#
	 

4. 이제 아파치의 RPM 패키지를 삭제할 차례입니다. rpm 명령에서 -e 옵션을 사용하면 리눅스 서버에 설치되어 있는 RPM 패키지를 삭제할 수 있습니다.

그런데 다음과 같은 에러 메시지가 나타납니다. 이것은 패키지 의존성과 관계된 문제인데, 아파치 패키지를 함부로 제거하면 메시지에 나타난 다섯 개의 패키지들을 사용하는 데 문제가 생기기 때문에 이런 에러 메시지가 나타나는 것입니다.

      [root@comcodi root]# rpm -e apache ☜
      error: removing these packages would break dependencies:
              apache is needed by apacheconf-0.8.1-1
              webserver is needed by mod_dav-1.0.2-6
              webserver is needed by mod_perl-1.24_01-3
              webserver is needed by mod_ssl-2.8.4-9
              webserver is needed by webalizer-2.01_06-11
      [root@comcodi root]#
	 

5. 의존 관계를 무시하고 모든 패키지를 삭제합니다. 아래의 에러 메시지는 전에 사용하던 아파치 웹 서버의 설정 파일은 /etc/httpd/conf/httpd.conf파일은 삭제 하지 않고 남겨 두었다는 의미입니다.

      [root@comcodi root]# rpm -e --nodeps `rpm -qa | grep apache` ☜
      warning: /etc/httpd/conf/httpd.conf saved as /etc/httpd/conf/httpd.conf.rpmsave
      [root@comcodi root]#
	 

6. 새로 설치된 아파치를 위해서 가차없이 모두 없애 버립니다.

      [root@comcodi root]# \rm /etc/httpd/conf/httpd.conf.rpmsave ☜
      [root@comcodi root]#
	 

7. 이제 다시 아파치 웹 서버의 패키지를 확인해 보겠습니다. apache 패키지가 이미 삭제 되었기 때문에 다음과 같은 메시지가 나타납니다.

      [root@comcodi root]# rpm -e apache ☜
      error: package apache is not installed
      [root@comcodi root]#
	 

8. 리눅스를 설치할 때 특별히 개별 패키지 선택을 통해 설치하지 않는 한 MySQL의 패키지는 설치가 되지 않습니다. 패키지가 없기 때문에 프롬프트만 나타납니다.

      [root@comcodi root]# rpm -qa | grep mysql ☜
      [root@comcodi root]#
	 

9. 그러나 PHP의 경우는 얘기가 좀 다르군요. 게다가 PHP와 관계된 다섯 개의 패키지가 더 설치된 것을 확인할 수 있습니다. 미련 없이 몽땅 삭제하겠습니다.

      [root@comcodi root]# rpm -qa | grep php ☜
      php-pgsql-4.0.6-7
      asp2php-0.75.17-1
      php-4.0.6-7
      php-ldap-4.0.6-7
      asp2php-gtk-0.75.17-1
      php-imap-4.0.6-7
      [root@comcodi root]#
	 

10. PHP의 경우도 /etc/php.ini.rpmsave 파일을 남겨 두는데, 이것도 함께 제거 합니다.

      [root@comcodi root]# rpm -e --nodeps `rpm -e | grep php` ☜
      warning: /etc/php.ini saved as /etc/php.ini.rpmsave
      [root@comcodi root]# \rm /etc/php.ini.rpmsave ☜
      [root@comcodi root]#
	 

11. 이제 PHP와 관련된 패키지들도 모두 청소했습니다. APM을 연동해서 설치할 준비가 된 것이죠.

      [root@comcodi root]# rpm -qa | grep php ☜
      [root@comcodi root]#
	 


   2.4. MySQL 설치하기

이제부터 본격적으로 APM을 설치해 보겠습니다. 우선 APM 중에서 가장 먼저 설치할 것은 MySQL입니다. MySQL은 소스 파일의 압축을 풀고 컴파일하기 위한 스크립트인 mysql_install_db만 실행해 주면 끝나기 때문에 가장 쉽게 설치할 수 있습니다.

1. 먼저 MySQL을 다운받은 / 디렉토리에서부터 출발합니다.

      [root@comcodi root]# cd / ☜
      [root@comcodi root]# ls ☜
      MySQL-5.5.21-1.linux2.6.i386.tar
      php-4.1.1.tar.gz
      apache_1.3.22.tar.gz
      [root@comcodi root]#
	 

2. tar 명령을 이용해서 mysql 파일의 압축을 풀어 줍니다. 굉장피 많은 파일들이 나타납니다.

      [root@comcodi root]# tar xvf MySQL-5.5.21-1.linux2.6.i386.tar ☜
      mysql-3.23.46-pc-linuxrpm -i MySQL-server-5.5.21-1.linux2.6.i386.rpm
오류: Failed dependencies:
	MySQL conflicts with mysql-5.1.61-1.el6_2.1.i686
	MySQL-server conflicts with mysql-server-5.1.61-1.el6_2.1.i686
      [root@comcodi src]# rpm -qa | grep My
perl-DBD-MySQL-4.013-3.el6.i686 MySQL-python-1.2.3-0.3.c1.1.el6.i686 [root@comcodi src]# rpm -e --nodeps mysql-server
[root@comcodi src]# rpm -e --nodeps mysql-5.1.61-1.el6_2.1.i686
[root@comcodi src]# rpm -e --nodeps mysql-libs-5.1.61-1.el6_2.1.i686 경고: /etc/my.cnf(이)가 /etc/my.cnf.rpmsave(으)로 저장되었습니다.
      [root@comcodi src]# rpm -Uvh --force --nodeps MySQL*.rpm (아래의 실습1, 실습2 참조)	 

3. 실습1. Server를 DBMS 전용 서버로 운영

0. 시스템 부팅 및 root 접속
1. MySQL 설치
 - MySQL 5.5 버전의 RPM 파일 다운
 - http://www.mysql.com/
 - 상단의 Downloads -> Downloads -> 왼쪽 MySQL Community Server -> 5.5
 - 스크롤을 내려 중간쯤의 Linux x86 generic RPM 선택
 - Server와 Client Program 두개 다운(Pick a mirror 선택)
 - 로그인 창이 나온다면, 'No thanks, just take me to the downloads!' 선택
2. 설치
 - 현재 받은 파일일
  ① MySQL-server-5.5.0-0.glibc23.i386.rpm
  ② MySQL-client-5.5.0-0.glibc23.i386.rpm
 - 관련 패키지 설치
  #yum -y install perl-DBI
  #cd 다운로드/
  #pwd
  (현재폴더: /root/다운로드)
  #ls
  (다운받은 위의 파일 존재)
  #rpm -Uvh --force --nodeps MySQL*.rpm
 - 설치가 완료되면, mysql 서비스가 항상 가동되도록 체크 확인
  #system-config-services (mysql 시작 수행)
  #service mysql status (MySQL 서버 데몬의 가동 확인)

MySQL running (852)                                        [  OK  ]

 - 외부에서 MySQL 서버를 사용할 수 있도록 포트 열어주기
  #system-config-firewall
  그 외의 포트 -> 추가 -> 3306/tcp/mysql 선택 -> 적용
  #exit (root 종료)
exit 

 - MySQL 클라이언트 프로그램을 이용해, MySQL 서버에 접속
  #mysql
  (프롬프트가 'mysql>' 로 나오면 정상적으로 접속된 것)
  mysql> quit

실습2. MySQL의 기본적인 보안을 설정하고, Windows에서 리눅스 MySQL 서버에 접속해서 사용

1. 보안에 중요한 DB 사용자 'root'의 비밀번호를 지정
 - mysqladmin 명령으로 DB 사용자 'root'의 비밀번호 변경
 #mysqladmin -u root -p password '1234'
 #mysql
 (이제, mysql 명령으로 접속 불가)
 #mysql -u root -p
 Enter password: (비밀번호 입력)
2. [Windows Client(=호스트OS)] MySQL 서버에 접속
 - 서버에 접속하기 위해 MySQL 클라이언트 다운.
 - http://www.mysql.com/
 - Downloads -> Downloads -> MySQL Community Server -> 5.5
 - Windows -> Windows downloads 부분의 'Windows Essential (x86)'을 다운로드
 - 다운로드 한 파일을 설치
 - Setup Type에서 Custom 선택 -> Custom Setup 화면에서 MySQL Server 앞의 디스크 모양 선택 후

, 'This feature will not available 선택 해서 설치되지 않도록 설정.
 - Client Programs -> Change를 눌러 설치할 경로를 C:\mysql\ 폴더로 변경하여 설치
3. [Windows Client(=호스트OS)] Windows에서 리눅스의 MySQL 서버로 접속
 - 명령 프롬프트에서...
 > cd c:\mysql\bin
 > mysql
 (접속 가능?
 접속이 안되는 이유.
  mysql 명령의 아무런 옵션이 없이 실행하면 현재 클라이언트 프로그램이 설치된 컴퓨터에

MySQL 서버가 설치되어 있을 것이라고 생각하고 접속하게 되므로 접속이 되지 않음)
 > mysql -h 192.168.111.100 -u root -p
 Enter password: (비밀번호)
 (접속 가능?
 접속이 안되는 이유.
  MySQL은 이메일 주소와 비슷한 형식으로 사용자 이름을 사용.
  즉, 사용자이름@호스트이름또는IP
  하지만, MySQL 서버에 접속이 허용된 DB 사용자는 'root@localhost'(또는

root@127.0.0.1)이고 'root@192.168.111.1'이라는 사용자는 존재하지 않으므로 접속이 거부됨.
 - 먼저, ipconfig 명령으로 Windows Client의 IP주소를 확인
 - Vmware 메뉴의 Edit -> Virtual Network Editor -> Summery 탭의 'Vmnet8(Nat)' 부분의

192.168.xxx.0을 확인
4. [Fedora Server] Windows Clinet에서 접속할 사용자 생성 (winuser 사용자 생성-

winuser@192.168.xxx.1)
 #mysql
 MysqL의 사용자가 들어있는 테이블 확인 (SHOW DATABASES;)
 mysql> use mysql;
 mysql> SHOW TABLES;
 mysql> EXPLAIN user;
 mysql> SELECT user, host FROM user WHERE user not like '';
 (mysql DB에 있는 user 테이블의 user열과 host열을 조회)
 mysql> GRANT ALL PRIVILEGES ON *.* TO 'winuser'@'192.168.111.1' IDENTIFIED BY '암호'
 mysql> SELECT user, host FROM user WHERE user not like '';
 (사용자 생성 확인)
5. [Windows Client(=호스트OS)] 명령 프롬프트에서 다시 접속
 >cd c:\mysql\bin
 >mysql -h 192.168.111.100 -u winuser -p

 Enter password: '암호'

 
7.
MySQL 서버에 처음으로 접속합니다. 먼저 암호를 물어 보면 앞서 변경한 암호를 입력합니다.

      [root@comcodi mysql]# ./bin/mysql -p mysql ☜
      Enter password: ******** ☜
	 

8. mysql>이라는 프롬프트가 나타나면 MySQL은 성공적으로 설치된 것입니다.

      Reading table information for completion of table and column names 
      You can turn off this feature to et a quicker startup with -A 
      Welcome to the MySQL monitor. Commands end with ; or \g.
      Your MySQL connection id is 2 to server version: 3.23.40
      Type `help;` or `\h` for help. Type `\c` to clear the buffer.

      MySQL>
	 

9. status 명령을 입력하면 MySQL의 상태를 출력합니다.

      MySQL> status
      --------------
      ./bin/mysql  Ver 11.15 Distrib 3.23.40, for pc-linux-gnu (i686)
      Connection id:            3
      Current database: mysql
      Current user:             root@localhost
      Current pager:            stdout
      Using outfile:            "
      Server version:           3.23.40
      Protocol version: 10
      Connection:               Localhost via UXIX socket
      Client characterset:      latin1
      Server characterset:      latin1
      UNIX socket:              /tmp/mysql.sock
      Uptime:                   3 min 57 sec
      Threads: 1  Questions: 23  slow queries: 0  Opens: 12  Flush tables: 1  Open tables: 6
      Queries per second avg: 0.097
      --------------
      mysql>
	 

10. 이제 사용 가능한 데이터 베이스를 확인합니다. show databases 명령을 내리고 반드시 ; 기호를 덧붙여 주어야 명령이 입력됩니다.

      mysql> show databases;
      +----------+
      | Database |
      +----------+
      | mysql    |
      | test     |
      +----------+
      2 rows in set (0.00 sec)

      mysql>
	 

11. MySQL이 제대로 설치되어 있는 상태라는 것을 확인했습니다. exit; 명령을 내리면 다시 리눅스의 명령 프롬프트로 나갑니다.

      mysql> exit;
      Bye
      [root@comcodi mysql]#
	 


mysql_secure_installation 명령을 이용하면 더 간단히 설정할 수 도 있다.
[root@db2 ~]# /usr/bin/mysql_secure_installation


NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MySQL
      SERVERS IN PRODUCTION USE!  PLEASE READ EACH STEP CAREFULLY!


In order to log into MySQL to secure it, we'll need the current
password for the root user.  If you've just installed MySQL, and
you haven't set the root password yet, the password will be blank,
so you should just press enter here.

Enter current password for root (enter for none):
OK, successfully used password, moving on...

Setting the root password ensures that nobody can log into the MySQL
root user without the proper authorisation.

You already have a root password set, so you can safely answer 'n'.

Change the root password? [Y/n] n
 ... skipping.

By default, a MySQL installation has an anonymous user, allowing anyone
to log into MySQL without having to have a user account created for
them.  This is intended only for testing, and to make the installation
go a bit smoother.  You should remove them before moving into a
production environment.

Remove anonymous users? [Y/n] y
 ... Success!

Normally, root should only be allowed to connect from 'localhost'.  This
ensures that someone cannot guess at the root password from the network.

Disallow root login remotely? [Y/n] y
 ... Success!

By default, MySQL comes with a database named 'test' that anyone can
access.  This is also intended only for testing, and should be removed
before moving into a production environment.

Remove test database and access to it? [Y/n] y
 - Dropping test database...
 ... Success!
 - Removing privileges on test database...
 ... Success!

Reloading the privilege tables will ensure that all changes made so far
will take effect immediately.

Reload privilege tables now? [Y/n] y
 ... Success!

Cleaning up...



All done!  If you've completed all of the above steps, your MySQL
installation should now be secure.

Thanks for using MySQL!

Database 생성 및 사용자 생성

새로운 사용자 생성

CREATE USER wordpress@localhost IDENTIFIED BY "some_good_password_for_wordpress";

새로운 데이타베이스 생성

CREATE DATABASE wordpress_blog;

필요한 권한 설정

GRANT ALL ON wordpress_blog.* TO wordpress@localhost;

권한 설정 적용

FLUSH PRIVILEGES;

   2.5. 아파치와 PHP 설치하기

APM을 연동해서 설치할 때는 이 부분이 가장 까다로운 부분입니다. 설치 메뉴얼이나 Q&A게시판에도 없는 에러 메시지가 자꾸날 수도 있고 설치하는 순서도 굉장히 복잡하기 때문에 주의를 기울여야 하는 과정입니다.

설치 순서는 아래와 같습니다. 이 순서를 지켜야 APM을 연동해서 설치할 수 있습니다.

	
	1. 다운받은 아파치와 PHP 파일의 압축을 풀어준다.
	2. 아파치 웹 서버의 설정 프로그램을 살짝 실행시킨다.
	3. PHP를 설치한다.
	4. 아파치 웹 서버를 설치한다.
	 

이것만 넘으면 완벽한 APM을 볼 수 있습니다. 고지가 바로 저기니까요~! 힘내세용~~!! ^^

1. 1단계부터 천천히 시작하죠. APM 파일들이 있는 / 디렉토리로 돌아오세요. 그리고 tar 명령으로 PHP의 압축을 풀어 줍니다. MySQL보다 더 방대한 파일들을 잠시 감상할 수 있습니다.

      [root@comcodi mysql]# cd / ☜
      [root@comcodi /]# tar zxvf php-4.1.1.tar.gz ☜
      php-4.1.1/
      php-4.1.1/build/
      php-4.1.1/build/bad_makefile
      php-4.1.1/build/build.mk
      php-4.1.1/build/build2.mk
      php-4.1.1/build/buildcheck.sh
      php-4.1.1/build/dynlib.mk
      php-4.1.1/build/fastgen.sh
      php-4.1.1/build/genif.sh
      php-4.1.1/build/library.mk
      php-4.1.1/build/ltlib.mk
      php-4.1.1/build/mkdep.awk
       . . .
      php-4.1.1/TSRM/tsrm_win32.c
      php-4.1.1/TSRM/tsrm_win32.h
      php-4.1.1/configure
      php-4.1.1/acconfig.h
      php-4.1.1/generated_lists
      php-4.1.1/mkinstalldirs
      php-4.1.1/install-sh
      php-4.1.1/aclocal.m4
      [root@comcodi /]# 
	 

2. 아파치도 압축을 풀어줍니다.

      [root@comcodi mysql]# cd / ☜
      [root@comcodi /]# tar zxvf apache_1.3.22.tar.gz ☜ (---> tar jxvf httpd-2.4.1.tar.bz2)
      apache_1.3.22/
      apache_1.3.22/cgi-bin/
      apache_1.3.22/cgi-bin/printenv
      apache_1.3.22/cgi-bin/test-cgi
      apache_1.3.22/ABOUT_APACHE
      apache_1.3.22/Announcement
      apache_1.3.22/INSTALL
      apache_1.3.22/KEY
      apache_1.3.22/LICENSE
      apache_1.3.22/Makefile.tmpl
      apache_1.3.22/README
       . . .
      apache_1.3.22/src/support/rotatelogs.s
      apache_1.3.22/src/support/rotatelogs.c
      apache_1.3.22/src/support/rotatelogs.dep
      apache_1.3.22/src/support/rotatelogs.mak
      apache_1.3.22/src/support/split-logfile
      apache_1.3.22/src/support/suexec.s
      apache_1.3.22/src/support/suexec.c
      apache_1.3.22/src/support/suexec.h
      apache_1.3.22/src/Configuration
      [root@comcodi /]# 
	 

3. 압축이 모두풀렸으면 ls 명령으로 / 디렉토리의 파일을 확인합니다. 아리처럼 php-4.1.1 디렉토리와 apache_1.3.22 디렉토리가 나타납니다.

      [root@comcodi /]# ls ☜
      anaconda-ks.cfg       lcmake.txt                              php-4.1.1
      apache_1.3.22         makeapache.txt                          php-4.0.6.tar.gz
      apache_1.3.22.tar.gz  makeinstallphp.txt                      tarapache.txt
      apmbuild.txt          makephp.txt                             tarmysql.txt
      image                 mysql-3.23.46-pc-linux-gnu-i686.tar.gz  tarphp.txt
      [root@comcodi /]#
	 

4. mysql과 마찬가지로 이 두 디렉토리를 /usr/local 디렉토리로 옮깁니다.

      [root@comcodi /]# mv php-4.0.6 /usr/local/php ☜
      [root@comcodi /]# mv apache_1.3.22 /usr/local/apache ☜
      [root@comcodi /]#
	 

5. /usr/local 디렉토리로 이동하고 파일들이 제대로 이사왔는지 확인해 보겠습니다. /usr/local 디렉토리 아래에 apache 디렉토리와 php 디렉토리가 만들어져 있습니다.

      [root@comcodi /]# cd /usr/local ☜
      [root@comcodi local]# ls ☜
      apache  bin     doc    etc    games   includes    lib    libexec    mysql    php    sbin    share    src
      [root@comcodi local]#
	 

6. 먼저 아파치 디렉토리로 이동하고 2단계로 아파치 웹 서버의 설정 파일을 살짝 실행시킵니다. 설정 파일이란 configure 파일을 말합니다. 이때 아파치의 디렉토리는 /usr/local/apache에 있다는 --prefix 옵션을 합께 지정합니다.

      [root@comcodi local]# cd apache ☜
      [root@comcodi apache]# ./configure --prefix=/usr/local/apache2 ☜
      Configuring for Apache, Version 1.3.22
       + using installation path layout: Apache (config.layout)
      Creating Makefile
      Creating Configuration.apaci in src
      Creating Makefile in src
       + configured for Linux platform
       + setting C compiler to gcc
       + setting C pre-processor to gcc -E
       + adding selected modules
       + using system Expat
       + checking sizeof various data types
       + doing sanity check on compiler and options
      Creating Makefile in src/support
      Creating Makefile in src/regex
      Creating Makefile in src/os/unix
      Creating Makefile in src/ap
      Creating Makefile in src/main
      Creating Makefile in src/modules/standard
      [root@comcodi /]#
	 

7. 3단계 PHP 설치를 위해서 이제 PHP의 압축이 풀려 있는 /usr/local/php 디렉토리로 이동합니다.

      [root@comcodi apache]# cd /usr/local/php ☜
      [root@comcodi php]#
	 

8. PHP의 소스를 컴파일하기 전에 PHP의 환경을 설정해 줍니다. 아파치와 마찬가지로 ./configure라는 프로그램을 실행하는데, 이번에는 옵션을 더 추가합니다. 즉 아파치는 /usr/local/apache 디렉토리에 설치되어 있다는 --with-apache=/usr/local/apache 옵션, mysql은 /usr/local/mysql 디렉토리에 설치되어 있다는 --with-mysql=/usr/local/mysql 옵션, 그리고 컴파일할 때 라이브러리를 지정해 주기 위해서 --with=zlib=/usr 옵션을 지정합니다.

      [root@comcodi php]# ./configure --with-apache=/usr/local/apache2 \ ☜
      > --with-mysql=/usr/local/mysql \ ☜
      > --with-zlib=/usr ☜
      creating cache ./config.cache
      creating for a BSD compatible install... /usr/bin/install -c
      creating whether build environment is sane... yes
      creating whether make sets ${make}... yes
      creating for working aclocal... found
      creating for working autoconf... found
      creating for working automake... found
      creating for working autoheader... found
      creating for working makeinfo... found
      Updated php_version.h
       . . .
	 

9. 환경 설정에 긴 시간이 소요됩니다. 아래와 같이 라이센스 메시지를 볼 수 있다면 PHP를 컴파일하기 전에 환경 설정이 모두 끝난 것입니다.

       . . .
      creating number.c
      creating number.h
      creating main/internal_functions.c
      +---------------------------------------------------------------------------+
      | License:                                                                  |
      | This software is subject to the PHP License, available in this            |
      | distribution in the file LICENSE.  By continuing this installation        |
      | process, you are bound by the terms of this license agreement.            |
      | If you do not agree with the terms of this license, you must abort        |
      | the installation process at this point.                                   |
      +---------------------------------------------------------------------------+
      Thank you for using PHP
      #
	 

10. 이제 make 명령으로 PHP의 컴파일을 시작합니다.

      # make ☜
      Making all in Zend
      make[1]: 들어감 `/usr/local/php/Zend` 디렉토리
      /bin/sh../libtool--silent--mode=linkgcc -g -02 -olibZend_c.la zend_language_scanner.lo zer
       . . .
	 

11. 컴파일 또한 상당히 오랜 시간이 걸립니다. 게다가 모니터에는 알 수 없는 메시지들만 계속 출력됩니다. 어쨌든 컴파일이 다 끝났습니다.

       . . .
      make[1] 나감 `/usr/local/php` 디렉토리
      Making all in pear
      make[1]: 들어감 `/usr/local/php/pear` 디렉토리
      make[1]: 나감 `/usr/local/php/pear` 디렉토리
      #
	 

12. 이제 본격적으로 PHP를 설치합니다. make install 명령을 내리면 PHP 설치가 시작됩니다.

      # make install ☜
      Making install in Zend
      make[1]: 들어감 `/usr/local/php/Zend` 디렉토리
      make[2]: 들어감 `/usr/local/php/Zend` 디렉토리
      make[2]: Nothing to be done for `install-exec-am`.
      make[2]: Nothing to be done for `install-exec-am`.
      make[2]: 나감 `/usr/local/php/Zend` 디렉토리
      make[1]: 나감 `/usr/local/php/Zend` 디렉토리
      Making install in main
       . . .
	 

13. 정신없이 설치가 이루어지고 설치가 끝나면 프롬프트가 나타납니다.

      Installing program: pear
      Installing program: pearize
      Installing program: phptar
      Installing program: phpextdist
      make[2]: 나감 `/usr/local/php/pear` 디렉토리
      make[1]: 나감 `/usr/local/php/pear` 디렉토리
      #
	 

14. PHP의 설치가 모두 끝났으면 아파치 디렉토리 내에 PHP를 연동하기 위한 모듈이 설치되었는지 확인합니다. APM을 연동하기 위해서는 반드시 PHP의 모듈들이 아파치 디렉토리 안의 /usr/local/apache/src/modules에 있어야 합니다.

      # cd /usr/local/apache/src/modules ☜
      # ls ☜
      Makefile    README    example     experimental     extra     php4     proxy     standard
      #
	 

15. php4 디렉토리에 들어가면 다음과 같은 PHP 모듈 파일들을 확인할 수 있습니다.

      # cd php4
      # ls
      Makefile.libdir    libmodphp4.a     mod_php4.c     mod_php4.h     mod_php4.o
      Makefile.tmpl      libphp4.module   mod_php4.exp   mod_php4.lo
      #
	 

16. 마지막 4단계!! 아파치를 본격적으로 설치합니다. 압축이 풀린 아파치 디렉토리로 이동하고 아파치의 환경 설정 파일을 다시 동작합니다.

이번에는 2단계에서 살짝 실행했을 때와는 달리 한 가지 옵션을 덧붙여 줍니다. 이 파일은 PHP를 설치하면서 아파치와 연동하기 위해 만들어진 모듈입니다. 반드시 이 옵션을 덧붙여서 모듈을 인식시켜 줘야 합니다.

      # cd /usr/local/apache ☜
      # ./configure --prefix=/usr/local/apache \ ☜
      > --activate-module=src/modules/php4/libphp4.a ☜
      Configuring for Apache, Version 1.3.22
       + using installation path layout: Apache (config.layout)
       + activated php4 module (modules/php4/libphp4.a)
      Creating Makefile
      Creating Configuration.apaci in src
      Creating Makefile in src
       + configured for Linux platform
       + setting C compiler to gcc
       + setting C pre-processor to gcc -E
       + checking for system header files
       + adding selected modules
          o php4_module uses ConfigStart/End
       + using system Expat
       + checking sizeof various data types
       + doing sanity check on compiler and option
      Creating Makefile in src/support
      Creating Makefile in src/os/unix
      Creating Makefile in src/ap
      Creating Makefile in src/main
      Creating Makefile in src/modules/standard
      Creating Makefile in src/modiles/php4
      #
	 

17. 이제 make 명령을 실행하여 아파치를 컴파일합니다.

      # make ☜
      ===> src
      make[1]: 들어감 `/usr/local/apache` 디렉토리
      make[2]: 들어감 `/usr/local/apache/src` 디렉토리
      ===> src/os/unix
      gcc -c    -I../../os/unix  -I../../include     -DLINUX=22  -I/usr/local/php -I/usr/local/php/main 
      -I/usr/local/php/main -I/usr/local/php/Zend -I/usr/local/php/Zend -I/usr/local/php/TSRM -I/usr/lo
      cal/php/TSRM -I/usr/local/php -DNO_DL_NEEDED `../../apaci` os.c
      #
	 

18. 컴파일이 모두 끝났지요?

       . . .
      al/php/main -I/usr/local/php/Zend -I/usr/local/php/Zend -I/usr/local/php/TSRM -I/usr/local/php/TSRM
      -I/usr/local/php -DNO_NEEDED `../apaci `%g` \
      -e `s%@CFLAGS SHLIB@%%G` \
       . . .
      make[2]: 나감 `/usr/local/apache/src` 디렉토리
      <=== src/support
      make[1]: 나감 `/usr/local/apache` 디렉토리
      <=== src
      #
	 

19. make install 명령으로 아파치 프로그램을 설치합니다.

      # make install
      <=== [data]
      ===> [config: Installing Apache configuration files]
      ./src/helpers/install.sh    -c   -m   644    ./conf/httpd.conf-dist[*]
      /usr/local/apache/conf/httpd.conf.default
      ./src/helpers/install.sh    -c   -m   644    ./conf/httpd.conf-dist[*]
      /usr/local/apache/conf/httpd.conf
      ./src/helpers/install.sh    -c   -m   644   ./conf/access.conf-dist[*]
      /usr/local/apache/conf/access.conf.default
       . . .
	 

20. 아파치의 설치까지 모두 끝난 화면입니다.

      <=== [config]
      make[1]: 나감 `/usr/local/apache` 디렉토리
      +-----------------------------------------------------------------+
      | You now have successfully built and installed the               |
      | Apache 1.3 HTTP server. To verify that Apache actually          |
      | works correctly you now should first check the                  |
      | (initially created or preserved) configuration files            |
      |                                                                 |
      |   /usr/local/apache/conf/httpd.conf                             |
      |                                                                 |
      | and then you should be able to iommedately fire up              |
      | Apache the first time by running:                               |
      |                                                                 |
      |   /usr/local/apache/bin/apachectl start                         |
      |                                                                 |
      | Thanks for using Apache.       The Apache Group                 |
      |                                http://www.apahce.org/           |
      +-----------------------------------------------------------------+
      #
	 

21. /usr/local/php 디렉토리에서 php.ini-dist 파일을 /usr/local/lib/ 디렉토리에 복사해 주면 APM 설치는 모두 끝납니다.

      # cd /usr/local/php ☜
      # cp ./php.ini-dist /usr/local/lib/php.ini ☜
      #
	 


   2.6. APM 연동 환경 설정과 시동 테스트하기

`정말 험난한 APM 설치를 마친 여러분 축하드립니다.` 하고 여기서 단원을 접고 싶은 마음이 굴뚝같지만 아파치 웹 서버의 설정을 새로 해야 하는 것 잊지 않으셨지요? APM을 연동해서 설치한 후 마지막 마무리 설정을 해보고, APM이 제대로 작동하는지 테스트해 보는 것으로 이번 장을 마치겠습니다.

1. 먼저 손을 대어야 할 곳은 아파치 설정 파일입니다. 먼저 있던 아파치를 삭제하고 새로 설치 했기 때문에 아파치의 설정 파일이 있는 디렉토리도 변경되었습니다. 새롭게 설치한 아파치 설정 파일은 /usr/local/apache/conf/httpd.conf에 있습니다.

      # vi /usr/local/apache/conf/httpd.conf ☜
	 

2. 아래와 같이 ServerRoot 항목이 변경된 것을 확인합니다. 우리가 새로운 아파치 프로그램 파일들을 이곳에 설치했기 때문에 /usr/local/apache라고 지정되어 있습니다.

       . . .
      #
      # ServerRoot: The top of thd directory tree under which the server's
      # configuration, error, and log files are kept.
      #
      # Note! If you intend to place this on an NFS (or otherwise network)
      # mounted filesystem then please read the LockFile documentation
      # (available at URL:http://www.apache.org/docs/mod/core.html#lockfile);
      # you will save yourself a lot of trouble.
      #
      # Do NOT add a slash at the end of the directory path.
      #
      ServerRoot "/usr/local/apache"
      #
       . . .
	 

3. ServerName에 리눅스 서버의 내부 IP 주소인 192.168.0.1을 입력합니다.

그리고 다음에 있는 DocumentRoot 항목을 보면 HTML 문서가 저장될 디렉토리가 변경되었음을 알 수 있습니다. 즉 여러분이 윈도우 컴퓨터에서 만든 HTML 문서는 /usr/local/apache/htdocs 디렉토리에 있어야 웹 브라우저로 볼 수 있다는 것입니다.

      #
      # 127.0.0.1 is the TCP/IP local loop-back address, often named localhost. Your
      # machine always knows itself by this address. If you use Apache strictly for
      # local testing and evelopment, you may use 127.0.0.1 as the server name.
      #
      ServerName 192.168.0.1
      #
      # DocumentRoot: The directory out of which you will serve your
      # documents. By default, all requests are taken from this directory, but
      # symbolic links and aliases may be used to point to other locations.
      #
      DocumentRoot "/usr/local/apahce/htdocs"
      #
	 

4. 다음과 같이 DirectoryIndex 항목을 변경합니다. 시작 페이지를 어떤 파일로 할것인지 설정해 주는 것입니다. 이전까지는 웹 브라우저의 주소 창에 웹 서버의 URL 주소만 지정하면 자도으로 index.html 파일을 보는 데 그쳤지만 이제부터는 PHP 파일로 만든 index.php 파일을 볼 수도 있어야 합니다.

      #
      # DirectoryIndex: Name of the file or files to use as a pre-written HTML
      # directory index.  Separate multiple entries with spaces.
      #
      (IfModule mod_dir.c)
          DirectoryIndex  index.php  index.php3  index.php4  index.html  index.htm
      (/IfModule)
      #
	 

5. 아래로 주욱 내려가서 PHP 스크립트의 확장자를 등록합니다. 웹 서버에서 HTML 파일과 더불어 PHP와 관련된 파일들도 서비스 할 수 있도록 여기서 등록을 해주어야 합니다.

리눅스 서버에서 PHP 4가 구축되어 있기 때문에 이 부분의 주석 표시(#)를 제거해 주고 몇 가지 내용을 첨가합니다.

      # AddType allows you to tweak mine.types without actually editing it, or to
      # make certain files to be certain types.
      #
      # For example, the PHP 3.x module (not part of the Apache distribution - see
      # http://www.php.net) will typically use:
      #AddType application/x-httpd-php3   .php3
      #AddType application/x-httpd-php3-source   .phps
      #
      # And for PHP 4.x, use;
      #
      AddType application/x-httpd-php  .php   .php3   .ph
      AddType application/x-httpd-php-source  .phps

      AddType application/x-tar .tgz
	 
      #
	 

6. 설정 파일을 저장하고 명령 프롬프트로 나갑니다. 이제 아파치 웹 서버를 새로 시동하겠습니다. 아파치가 소스 파일로부터 설치되었기 때문에 아파치를 실행하는 파일도 조금 복잡한 위치에 놓여 있습니다. /usr/local/apache/bin 디렉토리에 있는 apachectl 파일이 아파치 데몬의 실행 파일입니다. start 옵션을 주어 아파치 데몬을 시작합니다.

      # /usr/loca/apache/bin/apachectl start ☜
      /usr/local/apache/bin/apachectl start: httpd started
      #
	 

7. 아파치 데몬이 가동중인지 ps 명령으로 프로세스를 확인합니다.

      # ps -ef | grep apache
      root     2171  0.0  1.4  4512 1812 ?          s    01:23    0:00   /usr/local/apache
      nobody   2172  0.0  1.4  4568 1856 ?          s    01:23    0:00   /usr/local/apache
      nobody   2173  0.0  1.4  4568 1856 ?          s    01:23    0:00   /usr/local/apache
      nobody   2174  0.0  1.4  4568 1856 ?          s    01:23    0:00   /usr/local/apache
      nobody   2175  0.0  1.4  4568 1856 ?          s    01:23    0:00   /usr/local/apache
      nobody   2176  0.0  1.4  4568 1856 ?          s    01:23    0:00   /usr/local/apache
      root     2192  1.0  0.5  2524  680 pts/3      s    01:26    0:00   grep apache
      #
	 

만약, 프로세스가 없는 경우,
/usr/local/apache/logs/error_log 를 확인하여 오류내역을 확인한 후,
필요에 따라  /usr/local/apache/conf/httpd.conf 의 오류가 발생하는 부분의 LoadModule 을 주석제거한 후, 저장하여
# /etc/init.d/httpd start 를 재수행하고, 
# ps -ef|grep httpd 로 프로세스를 재확인한다.



8.
이번에는 웹 브라우저를 통해서 확인해 보겠습니다. 모질라 웹 브라우저의 주소에 리눅스 서버의 IP 주소인 192.168.0.1을 입력하면 레드햇 리눅스 7.2의 아파치 웹 서버 테스트 페이지와는 조금 다른 테스트 페이지를 볼 수 있습니다.

9. 여기서 끝난 게 아닙니다. PHP가 제대로 작동하고 있는지 알아봐야죠. 테스트를 위해서 웹 서버에 파일을 하나 올려 봅니다.

아까 DocumentRoot 항목으로 지정한 /usr/local/apache/htdocs 디렉토리에 PHP파일을 하나 만들어 보겠습니다. 파일 이름은 test.php로 하죠.

      # vi /usr/local/apache/htdocs/test.php
	 

10. 파일 내용은 아래와 같이 단순합니다. PHP를 공부하면 더 잘 알 수 있겠지만 phpinfo() 함수는 PHP와 웹 서버에 관련된 모든 정보를 테이블 형식으로 보여 주는, 테스트용으로는 그만인 함수입니다.

      <?
      echo "이글이 보이냐?";
      phpinfo();
      ?>
	 

11. 파일을 저장하고 모질라 웹 브라우저를 실행합니다. 주소 창에 다음과 같이 리눅스 서버의 IP 주소와 더불어 새로 생성한 test.php 파일을 입력합니다.

12. 클라이언트인 윈도우에서도 테스트합니다. 인터넷 익스플로러를 이용해서 리눅스 서버에서와 같은 방법으로 테스트 합니다.

13. 테스트가 성공적으로 끝났으면 리눅스를 부팅할 때마다 APM을 서비스하기 위해 아파치, MySQL 데몬을 띄어 주어야 합니다. 단골 손님인 ntsysv가 아닌 파일 편집을 이용합니다. 리눅스가 부팅할 때 반드시 반드시 읽어 내는 파일인 /etc/rc.d/rc.local 파일에 아파치와 MySQL 정보를 추가합니다.

      # vi /etc/rc.d/rc.local ☜
	 

14. 전에 IP 메스커레이드 기능을 활용하면서 ipchains 정보를 입력한 적이 있습니다. 여기에 아파치 시작 명령과 MySQL 실행 명령을 입력해 주면 다음 부팅할 때 부터는 자동으로 웹 서버 데몬과 MySQL 데몬이 실행될 것입니다.

      #!bin/sh
      #
      # This script will be executed *after* all the other init scripts.
      # you can put your own initialization stuff in here if you don't
      # want to do the full Sys V style init stuff.
  
      /usr/local/apache/bin/apachectl start
      cd /usr/local/mysql/
      ./bin/safe_mysql &
	 
mysql-5.5.21 에서는 /usr/local/mysql/bin/mysqld_safe 로 수행.

   2.7. 자주 나오는 질문

1. APM 설치시 주의사항

APM을 연동해서 설치한다는 것은 결국 아파치, PHP, MySQL의 세 프로그램을 설치하면서 서로의 설치 위치를 인식 할 수 있도록 해 주는것을 말합니다.

그래서 설치 순서가 틀리거나 철자 하나를 잘못 입력하면 설치에 실패할 수 있습니다. 여러분이 더욱 주의를 기울여 설정할 필요가 있습니다.

2. ./script/mysql_install_db 명령을 입력할 때

Sorry, the host '___________' could not be looked up please configure the 'hostname' command to return a correct hostname

If you want to solve this at a later stage, restart this script with the --force option이라는 메시지와 함께 mysql이 설치되지 않으면 다음의 명령으로 hostname을 다시 정의해 주고 /script/mysql_install_db명령을 다시 입력하여 설치하면 됩니다.

3. mysql 설치가 안돼요

      # ./safe_mysql &
      [1] 20873
      # chonw: mysql: 잘못된 사용자
      Starting mysqld daemon with databases form /apm/mysql/data 020221 16:56:09
      mysqld ended
       . . .
	 

위와 같은 에러 메시지가 생기면 다음과 같이 사용자와그룹을 추가합니다.

      # groupadd mysql
      # useradd -g mysql mysql
      #
	 

그런 다음 mysql의 data 디렉토리의 소유권과 그룹을 위에서 추가한 mysql로 변경합니다.

      # chown -R root /usr/local/mysql
      # chown -R mysql /usr/local/mysql/data
      # chgrp -R mysql /usr/local/mysql
      # chown -R root /usr/local/mysql/bin
      #
	 

●참고로 mysql의 계정과 셀 계정의 루트는 독립적인 것입니다. mysql의 root 사용자는 mysql의 슈퍼 사용자와 권한을 갖지만 리눅스 서버의 root 권한을 갖는 것은 아닙니다.

이제 다음과 같이 입력하시면 mysql 데몬을 구동할 수 있습니다.

      # ./bin/safe_mysqld --user=mysql &
	 

'Linux > CentOS' 카테고리의 다른 글

CentOS 6.3 APM 설치  (0) 2012.03.07
CentOS 6.2 APM ( http 2.2.22, mysql 5.5.20, php 5.3.10) 설치  (0) 2012.03.07
웹서버 세팅에 관한 문서1  (0) 2012.03.06
CentOS phpMyAdmin 설치  (0) 2012.03.05
CentOS6 Apache+PHP+MySQL  (0) 2012.03.05
Posted by iWithJoy