RSS구독하기:SUBSCRIBE TO RSS FEED
즐겨찾기추가:ADD FAVORITE
글쓰기:POST
관리자:ADMINISTRATOR
'My Advanced Linux/Advanced Linux'에 해당되는 글 47

AND 검색

abc와 xyz가 같은 라인에 있는 파일검색

# egrep "abc" *.파일명 | egrep "xyz"

 

OR 검색

abc혹은 xyz 라인이 있는 파일검색

# egrep "abc|xyz" *.파일명

 

NAND 검색

abc는 포함되어 있지만 xyz 가 없는 라인을 검색

# egrep "abc" *.파일명 | egrep -v "xyz"

 

 

 

egrep 명령은 입력 파일(디폴트로 표준 입력(STDIN))에서 Pattern 매개변수에 지정된 패턴에 대응하는 행을 찾습니다. 이 패턴은 완전한 정규식으로 ed 명령에서와 동일합니다(₩(백슬래시) 및 ₩₩(두 개의 백슬래시)는 제외). 다음 규칙은 egrep 명령에도 적용됩니다.

  • +(더하기 부호)가 뒤에 오는 정규식은 1회 이상 정규식의 경우에 대응됩니다.
  • ?(물음표)가 뒤에 오는 정규식은 0 또는 1회 정규식의 경우에 대응됩니다.
  • |(수직 표시줄) 또는 캐리지 리턴 문자로 분리된 여러 정규식은 그러한 정규식 중 하나와 대응되는 문자열과 대응합니다.
  • 정규식의 그룹화를 위해 괄호( )로 묶을 수 있습니다.

캐리지 리턴 문자를 정규식으로 대응시키지 않을 것입니다.

연산자의 선행은 [, ], *, ?, +, 병합, |, 캐리지 리턴 문자 순입니다.

주: egrep 명령은 오류와 사용법 메시지가 다르고 -s 플래그가 다르게 기능한다는 점만 제외하고 -E 플래그를 사용하는 grep 명령과 동일합니다.

egrep 명령은 하나 이상의 File 매개변수를 지정한 경우 대응하는 행이 포함된 파일을 표시합니다. 쉘에 대해 특별한 의미를 갖는 문자($, *, [, |, ^, (, ), ₩ )가 Pattern 매개변수에 나타날 경우에는 인용 부호로 묶어야 합니다. Pattern 매개변수가 단순한 문자열이 아닐 경우에는 패턴 전체를 작은 인용 부호로 묶어야 합니다. [a-z]와 같은 표현식에서, 대시는 현재 배열 순서에 따라 "처음부터 끝까지"를 의미합니다. 배열 순서는 문자 범위에서 사용할 등가 클래스를 정의할 수 있습니다. 때로 지수 공간이 필요한 빠르고 결정적인 알고리즘을 사용합니다.

주:
  1. 2048바이트로 행을 제한합니다.
  2. 단락(-p 플래그하에서)은 현재 5000자로 제한되어 있습니다.
  3. 예측 불가능한 결과가 나올 수 있으므로 특수 파일에 대해서는 grep 명령을 실행하지 마십시오.
  4. 입력 파일에는 널(NULL) 문자가 들어 있지 않아야 합니다.
  5. 입력 파일은 캐리지 리턴 문자로 끝나야 합니다.
  6. 일부 플래그가 동시에 지정될 수 있더라도, 일부 플래그는 다른 플래그를 대체합니다. 예를 들어, -l-n을 함께 지정하면, 파일 이름만이 표준 출력(STDOUT)에 기록됩니다.

apache thread를 늘리기 위해선 configure 하기 전에 옵션 값을 조정해 놓아야 한다.

apache 1.x 와 2.x는 다른 방식이며, 여기에서는 apache 2.x에 대해서 설명한다.

 

아파치 2.0은 용도에따라서 프로세스 모델을 정의해주어야 됩니다. (유닉스 계열은 컴파일시

--with-mpm={perchild|prefork|worker} 기본값은 아파치 1.3과 같은 prefork 모델입니다.

 

prefork 방식

아파치 1.3 은 포크 가능한 자식 프로세스는 기본값은 256개

apache_1.3.x/src/include/httpd.h 파일에서

#define HARD_SERVER_LIMIT 256

요것을 서버 스펙에 따라서 적당히 늘려줍니다.

 

아파치 2.0 은 역시 포크 가능한 자식 프로세스는 기본값은 256개

httpd2.x/server/mpm/prefork/prefork.c 를 열으셔서

#define DEFAULT_SERVER_LIMIT 256

역시 적당히 늘려줍니다.

 

worker 방식

기본으로 16개의 차일드 프로세스와 그안에 64개의 쓰레드를 생성가능하므로
16*64 = 1024 개의 쓰레드를 생성 할수있습니다.

httpd-2.x/server/mpm/worker/worker.c

기본적으로 생성가능한 차일드 프로세스수 조절
#define DEFAULT_SERVER_LIMIT 16
각 프로세스내에 생성 가능한 쓰레드 수 조절
#define DEFAULT_THREAD_LIMIT 64


perchild 방식

기본으로 8개의 차일드 프로세스와 그안에 64개의 쓰레드를 생성가능하므로
8*64 = 512 개의 쓰레드를 생성 할수있습니다.

httpd-2.0.35/server/mpm/perchild/perchild.c

기본적으로 생성가능한 차일드 프로세스수 조절
#define DEFAULT_SERVER_LIMIT 8
각 프로세스내에 생성 가능한 쓰레드 수 조절
#define DEFAULT_THREAD_LIMIT 64


각자의 서버 스펙에 맞추어서 적절히 조절하시면 됩니다.

64bit 서버에 x86_64의 리눅스를 깔고 난 후에 RPM을 삭제 할 일이 생겼다.

 

그런데 이상하다-!

이상한 메세지를 뿌리면서 RPM이 도무지 삭제가 되지 않는다.

rpm -qa | grep mysql 확인 해 본 결과 이상하게도 32bit와 64bit의 패키지를 가지고 있었다.

=_= 욕심쟁이..

 

rpm -e mysql 고 rpm -e mysql --nodeps고 안 먹힌다!

error: "mysql-x.x.x.xRHEL4" specifies multiple packages

이라면서 죽어도 삭제는 안 된다고 한다...

역시나 구글링 시작.

 

/etc/rpm/macros.local 라는 파일을 생성해주고 아래의 내용을 입력한다.

 

%_query_all_fmt %%{name}-%%{version}-%%{release}.%%{arch}

 

자 이제 정확한 패키지명을 적어주면 삭제가 된다.

rpm -qa | grep mysql

이렇게 해보시면

mysql-4.1.12-3.RHEL4.1.i386
mysql-4.1.12-3.RHEL4.1.x86_64

 

rpm -e mysql-4.1.12-3.RHEL4.1.i386 --nodeps

 

또다른 방법으로는

 

rpm -e mysql --allmatches

remove all packages which match <package>
(normally an error is generated if <package> specified multiple packages)
옵션을 사용하는 것이지만 권장하지는 않는다. (혹시 정확히 지울수 있는 앞에 것을 추천! 혹시 모르니까 말이다.)


우선 PHP를 make install 까지 다 했는데, 확장 모듈이 필요한 경우에는 아래와 같은 조치법이 있다. (여기에서는 iconv라는 모듈 올리는 것으로 가정하여 적겠다.)


확장 모듈 만들기


우선 아파치에서는 mod_so.c 모듈이 정적으로 아파치 core 에 컴파일되어 있어야 한다.

# httpd -l <- 확인하기
Compiled-in modules:
  http_core.c
  mod_so.c

<기본 모듈의 컴파일 방식>

우선 현재 아파치에서 사용하는 PHP 버전을 확인하고 만약 4.4.0 버전을 사용한다면,
php-4.4.0.tar.gz 버전을 받아서 /usr/local/src/ 압축을 푼다. 만약 서로 다른 버전일 경우 잘 안될 경우가 있으므로 가능한 현재 사용하는 같은 버전으로 하는 것이 좋다.

 

# tar zxvf php-4.4.0.tar.gz
# cd php-4.4.0
# ./configure --with-iconv  <- 옵션부분은 ./configure --help 을 참고하여 옵션설정을 한다.
# cd ext/
# ls -al <- iconv 폴더가 있는지 확인한다.
# cd iconv

# /usr/local/php/bin/phpize <- 아래와 같은 메세지가 나타난다.

Configuring for:
PHP Api Version:         20020918
Zend Module Api No:      20020429
Zend Extension Api No:   20050606

 

# ./configure --with-php-config=/usr/local/php/bin/php-config --with-iconv
# make
# cd modules/
# ls  <- so 모듈이 생성되었는지 확인한다.

iconv.la  iconv.so

 

# mv iconv.so /usr/local/php/modules/ <- 이부분은 php.ini 에서 extension_dir 의 경로를 확인후 모듈을 복사한다.

# vi /usr/local/Zend/etc/php.ini <- php.ini가 설치된 부분을 각자 셋팅값에 따른다.
extension=iconv.so 를 추가한다.

 

# apachectl restart

 

웹브라우저에서 phpinfo 를 확인한다.

DSO, php

apache 로그를 정리하는 여러가지 방법이 있지만,  여기에서는 기본적으로 apache에서 제공하는 데몬을 이용하여 시간별, 혹은 용량별로 자르는 방법을 소개할까 한다.


rotatelogs


rotatelogs는 apache의 bin 디렉토리에 있다. 즉, /usr/local/apache에 install을 하였다면

/usr/local/apache/bin/rotatelogs가 존재한다.

 

사용법은 간단하다.

 

httpd.conf파일을 열어 아래 항목을 찾아 수정한다.

 

# 시간별로 로그를 자르는 방법

CustomLog "|bin/rotatelogs /var/logs/logfile 86400" common

86400은 시간(24시간)을 뜻하고 24시간마다 /var/logs/logfile.nnnn 파일을 만든다.

 

# 용량별로 로그를 자르는 방법

CustomLog "|bin/rotatelogs /var/logs/logfile 5M" common

5M은 5메가바이트될때마다 로그를 순환하는 것이다.

 

# 응용법

ErrorLog "|bin/rotatelogs /var/logs/errorlog.%Y-%m-%d-%H_%M_%S 5M"

이 설정은 오류로그 파일 크기가 5메가바이트될때마다 errorlog.YYYY-mm-dd-HH_MM_SS와 같은 파일을 만들어서 오류로그 파일을 순환한다.

 

주의

|bin/rotatelogs의 맨앞 "|"는 파이프를 뜻한다.

리눅스 서버에서 MSSQL 서버의 DB을 끌어오기 위해서는 freetds란 놈이 필요하다.

물론 configure option에 --with-mssql=/freetds(freetds 경로)를 넣어주어야 함은 당연하다.


freetds


freetds-0.61.2 설치
# tar -zxvf freetds-0.61.2.tar.gz
# cd freetds-0.61.2
# ./configure --prefix=/usr/local/freetds --with-tdsver=8.0 \
--enable-msdblib --enable-dbmfix --with-gnu-ld \
--enable-shared --enable-static
# make
# make install
# cd ..
# vi /etc/ld.so.conf
   ==> 마지막 줄에 /usr/local/freetds/lib 를 추가
# /sbin/ldconfig
/usr/local/freetds/etc/freetds.conf 파일을 수정

# vi /usr/local/freetds/etc/freetds.conf

[서버이름]
        host = [ms-sql2000 서버아이피]
        port = 1433
        tds version = 8.0

기본적으로 레뎃에서는 vsftp를 제공한다.

vs는 바로 very security의 약자로, 무지 보안성이 뛰어난 ftp이다.

고로 vsftpd.conf파일은 무지 복잡하다 = _=)

따라서 조금은 쉬운 설정인 proftp를 깔고 그 설정법을 알아보도록 하자.

(나 같으면 proftp 안쓴다. 일단 접속이 느린게 맘에 안든다.)

 

ServerName "서버 이름"

ServerType standalone
DefaultServer on
ServerAdmin root@localhost

UseReverseDNS off
IdentLookups off

# Server에 접속했을 경우 보내주는 Defualt 메세지를 설정한다. Off로 지정
# 하였을 경우 Porftpd Server Ready ServerName 이 출력된다.

ServerIdent On "welcome DUNET FTP Server!!!"

# User login을 했을시에 user들이 자신의 홈 상위 디렉토리들을 마음대로
# 돌아다니지 못하게 chroot()를 설정한다. group별로 설정을 하게 되며
# "!"는 제외하라는 의미를 가지게 된다.

DefaultRoot ~ !groupname <-여기에서 ~는 홈디렉토리를 뜻함

# ServerType이 standalone이면 이 항목의 주석을 풀어 줘야 한다.
# inetd로 작동을 시킬시에는 /etc/services에서 port를 지정한다.
Port 21

# root login을 허락할지의 여부를 지정한다. PAM modules를 사용한다면
# 먼저 /etc/proftpd/conf/ftpusers에서 root를 삭제해야 한다.
RootLogin off

# Global section은 proftpd의 전체적인 설정에 모두 적용시킨다.

# group과 world writable로 부터 새로운 dir과 file들을 생성하는 것을
# 막기위하여 기본적으로 umask는 022로 설정을 한다.
Umask 022

# ftpusers file을 이용하여 PAM인증을 하기를 원하면 이 지시자의
# 값을 on으로 한다. default 값은 off 이다.
AuthPAMAuthoritative on

# service를 시작하고 마칠 시간을 24시간 표기법으로 지정을 한다
# UpTime 10
# DownTime 23

# 1.2.1 이하 버젼에서의 버그를 위한 설정
DenyFilter *.*/

# 9시간 이전으로 나오는 문제 수정.
TimesGMT off

# 회선의 Bandwidth를 특정 속도로 제한을 한다. 단위는 bps이다.
#RateReadBPS 256
#RateReadFreeBytes 5120
#RateReadHardBPS on

# 접속 대기 시간을 설정한다. user 가 접속후 아무 작동도 안할때 일정 시간후에
# 접속이 종료되게 한다
TimeoutIdle 600
TimeoutNoTransfer 600
TimeoutLogin 0

# DeferWelcome 는 client가 인증을 하기 전에 servername을 display하는
# 것을 방지한다.
DeferWelcome off

# 'welcome.msg는 login시에 보여지고, 'message'는 각 하위 디렉토리에 접속
# 했을때 보여지게 된다.
DisplayLogin /etc/proftpd/conf/welcome.msg
DisplayFirstChdir .message

# DoS 공격을 막기 위해, 자식 process의 maximun number를 30으로 설정한다.
# 만약 30이상의 접속을 허락할 필요가 있다면 간단하게 이 치수를 증가시키도록
# 한다. 이것은 오직 standalone mode에서만 가능하다. inetd mode에서는
# service 당 maximun number를 제한 하는 것을 허락하는 inetd server에서
# 설정을 해야 한다.(xintd 역시 마찬가지 이다)
MaxInstances 30

User nobody
Group nobody

# 일반적으로 file들을 overwrite를 가능하게 한다.
AllowOverwrite on

# ls 명령어의 -a option으로 hidden file을 볼수 있게 한다.
# LsDefaultOptions "-a"
User ftp
Group ftp

# Anonymous user가 ftp로 접근하여 shell의 권한을 얻는 것을
# 방지한다.
RequireValidShell off

# Anonymous 접근을 할때 특정 password를 지정할수 있다.
# 단 위의 User 지시자의 name이 passwd file에 등록이 되어져
# 있어야 한다. 이 지시자가 on일 경우 이메일 주소로 login을
# 할수 없다.
# AnonRequirePassword on
# ShowSymlinks off

# User name "ftp"로 anonymous login을 할수 있도록 한다
UserAlias anonymous ftp
AllowAll
DisplayLogin welcome.msg
DisplayFirstChdir .message

# 최대 접속 인원수를 지정한다.
MaxClients 10

# 하나의 계정ID로 동시에 접근할수 있는 호스트 수를 지정한다.
# 아래의 기본 설정으로는 하나의 계정 하나 호스트에서만 접근만 허용한다.
# 하나의 계정에 하나의 접근만을 허락하려면 위의 MaxClientsPerHost의
# 값과 MaxHostsPerUser의 값이 둘다 1이면 된다.
MaxHostsPerUser 1 "Sorry, one hosts allow per one user"

# 소유권이 root인 file이나 directory들을 보여주지 않는다
#HideUser root

# 그룹권한이 root인 file이나 directory들을 보여주지 않는다
#HideGroup root

# upload/download 비율을 지원한다.
# /usr/doc/proftpd-1.2$VERSION/mod_ratio.c를 참조하라
#
# Ratios on
# HostRatio foobar.net 100 10 5 100000

# 서버를 시간대로 운영하는 것을 지정한다.
# 아래의 예는 오후 3시 부터 오후 6시까지만
# 서버의 접속을 가능하게 한다.
#
# UpTime 15
# DownTime 18

DenyAll

.... 뭐 이것도 그다지 간단해 보이지는 않는구먼= _=;;

standalone 방식의 proftp는 시작 재시작 종료 agument가 없다.

따라서 종료할려면 ftpshut이나(이건 데몬이 죽는게 아니라 접속을 못하게 한다.)

killall proftpd를 써서 강제로 죽여야한다.

 

하지만 간단한 스크립트로 데몬을 죽이고, 살리고, 재시작 할 수 있다.

 

#!/bin/sh
#
# Startup script for Proftpd
#
# chkconfig: 345 85 15
# description: ProFTPD is a highly configurable ftp daemon for unix
#              and unix-like operating systems HTML files and CGI.
# processname: proftpd
# config: /etc/proftp.conf


# Source function library.
. /etc/rc.d/init.d/functions

# See how we were called.
case "$1" in
  start)
        echo -n "Starting ProFTPD: "
        daemon proftpd
        echo
        touch /var/lock/subsys/proftpd
        ;;
  stop)
        echo -n "Shutting down ProFTPD: "
        killproc proftpd
        echo
        rm -f /var/lock/subsys/proftpd
        ;;
  status)
        status proftpd
        ;;
  restart)
        $0 stop
        $0 start
        ;;
  *)
        echo "Usage: $0 {start|stop|restart|status}"
        exit 1
esac

exit 0

리눅스 콘솔상에서도 해상도를 조절 할 수가 있다.

 

/etc/grub.conf 혹은 /boot/grub/menu.1st를 vi을 열어

kernel /boot/vmlinuz root=/.. 의 마지막에 원하는 해상도 값 vga=XXX을 추가한다.

즉 1024x768의 해상도를 원하면 vga=791을 집어넣으면 된다.

 

색상표와 해상도는 아래를 참조!

 

 color

640 x 480

 800 x 600

1024 x 768

1280 x 1024

256

0x301=769

0x303=771

0x305=773

0x307=775

32k

0x310=784

0x313=787

0x316=790

0x319=793

64k

0x311=785

0x314=788

0x317=791

0x31A=794

16m

0x312=786

0x315=789

0x318=792

0x31B=795


난 항상 mysql을 돌릴때 /usr/local/mysql/bin/mysqld_safe --user=root &로 돌렸었다.

하지만 mysql에서 지원하는 간단한 스크립트로도 실행, 중지를 할 수 있음을 요 근래에 알았다.

역시, 아는게 힘인 세상이다.

모르는게 약이기도 하지만 :)

 

여기에서는 mysql을 /usr/local/mysql에 인스톨 하였다고 가정한다.

 

# vi /usr/local/mysql/share/mysql/mysql.server

$bindir/safe_mysqld --datadir=$datadir --pid-file=$pid_file & 이 부분에 다음을 추가
  ==> $bindir/safe_mysqld --datadir=$datadir --pid-file=$pid_file --language=korean &

# chmod 755 mysql.server

 

mysql을 실행하기 위해서는 mysql 계정을 추가
# groupadd mysql
# useradd mysql -g mysql
# chown -R mysql /usr/local/mysql
# cp -p ./mysql.server /usr/bin
# mysql.server start
# ps -ef | grep mysql ==> mysql 프로세스 확인
# mysql.server stop

 

물론 useradd mysql 하면 그룹이 mysql로 잡히기 때문에 굳이 groupadd를 할 필요는 없다-

channel bonding

 

채널 본딩이란 하나의 노드에 여러개의 network card를 하나의 IP로 묶어서 사용하는 방법을 말한다.

여기에는 두가지의 이점이 있다.

 

1. fault Fault tolerence

여러개 중 하나의 네트워크 카드가 고장이 났을때 나머지 끊어짐이 없이 이용이 가능하다.

 

2, load balance

여러개의 네트워크 카드를 이용하여 로드 밸런싱을 할 수 있다.

 

/etc/sysconfig/network-scripts/ifcfg-bond0 을 만들고 아래에 맞게 작성

DEVICE=bond0
USERCTL=no

ONBOOT=yes

IPADDR=*.*.*.*
BROADCAST=*.*.*.*

NETWORK=*.*.*.*
NETMASK=*.*.*.*

 

/etc/sysconfig/network-scripts/ifcfg-ethX (X는 랜카드 번호를 의미)

DEVICE=ethX
USERCTL=no
ONBOOT=yes
MASTER=bond0
SLAVE=yes

BOOTPROTO=none

 

/etc/sysconfig/network

NETWORKING=yes
HOSTNAME=testserver
GATEWAY=11.14.92.1

GATEDEV=bond0            <- 기본 GATEWAY DEVICE를 bond0으로 잡아준다.(만약을 위해 해주자!)

 

모듈올리기

# insmod /lib/modules/'uname -r'/kernel/drivers/net/bonding/bonding.ko miimon=1000 mode=6

혹은

# modprobe bonding miimon=1000 mode=6

 

insmod와 modprobe의 차이는 insmod 같은 경우에는 직접 모듈을 찾아 올려줘야하는 것이고

modprobe는 그와 달리 알아서(의존성이 걸린 모듈까지 전부) 찾아서 올려주는  명령어다.

 

확인

# lsmod

Module                  Size  Used by

bonding                65896  0

위와 같이 bonding이라는 모듈이 올라와 있으면 성공!

 

이후 자동(재부팅 시)으로 모듈을 올릴때

vi /etc/modprobe.conf

alias bond0 bonding
options bonding miimon=1000 mode=6

 

옵션

miimon

MII 링크 감시가 발생할 때 밀리(milli) 초 단위로 주파수를 기술한다. MII 링크 감시를 사용하지 않으려면 0 값을 준다. 100이 최초 시작할 때 적절한 값이 된다. 추가 정보를 위해서 고 가용성(High Availability) 부분을 참조하라. 기본값은 0 이다.

 

 

mode (기본값은 round-robin)

0

Round-robin 정책: 첫 번째 가능한 슬레이브부터 마지막까지 순차적으로 전송한다. 이 모드는 부하분산과 장애 감내를 제공한다.

 

1

Active-backup 정책: bond에서 하나의 슬레이브만 활성화된다. 다른 슬레이브는 활성화된 슬레이브가 fail된 경우에만 활성화 된다.

 

2

XOR 정책: [(출발지 MAC 주소와 도착지 MAC 주소의 XOR) modula 슬레이브 개수] 에 기초하여 전송한다. 이것은 각 도착지 MAC 주소에 대해서 동일한 슬레이브를 선택하게 된다. 이 모드는 부하분산과 장애감내를 제공한다.

 

3

Broadcast 정책: 모든 슬레이브 인터페이스에 모든 것을 전송한다. 이것은 장애감내를 제공한다.

 

5

transmit load 밸런스로써 보내는 패킷만 밸런스 한다.

 

4

802.3ad (link aggregation) – switch aggregation 그룹생성이 필요하다.

 

6

receive와 transmit 패킷을 밸런스 한다. 이때 5,6은 하나의 스위치에 있을때만 동작한다.

 

 

본딩이 잘 되고 있는지 확인 하는 방법

# cat /proc/net/bonding/bond0 

Ethernet Channel Bonding Driver: v2.6.3-rh (June 8, 2005) -> Bonding 버전

 

Bonding Mode: adaptive load balancing                         -> Bonding 모드
Primary Slave: None
Currently Active Slave: eth0                                     -> Active상태인 NIC
MII Status: up                                                       -> link 상태
MII Polling Interval (ms): 1000                                    -> fail시 전환
Up Delay (ms): 0
Down Delay (ms): 0

 

Slave Interface: eth0
MII Status: up
Link Failure Count: 0
Permanent HW addr: 00:50:8b:b3:b0:88

 

Slave Interface: eth1
MII Status: down
Link Failure Count: 0
Permanent HW addr: 00:50:8b:b3:b3:5e

 

위 결과를 보면 eth0은 살아있고, eth1은 죽어있는 상태임을 알 수 있다.

 

# ifconfig

 

bond0   Link encap:Ethernet  HWaddr 00:50:8B:B3:B0:88 
          inet addr:11.14.92.86  Bcast:11.14.92.55  Mask:255.255.255.0
          inet6 addr: fe80::250:8bff:feb3:b088/64 Scope:Link
          UP BROADCAST RUNNING MASTER MULTICAST  MTU:1500  Metric:1
          RX packets:191496 errors:0 dropped:0 overruns:0 frame:0
          TX packets:118615 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:147344011 (140.5 MiB)  TX bytes:8709361 (8.3 MiB)

 

eth0    Link encap:Ethernet  HWaddr 00:50:8B:B3:B0:88 
          inet6 addr: fe80::250:8bff:feb3:b088/64 Scope:Link
          UP BROADCAST RUNNING SLAVE MULTICAST  MTU:1500  Metric:1
          RX packets:191497 errors:0 dropped:0 overruns:0 frame:0
          TX packets:118617 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:147344071 (140.5 MiB)  TX bytes:8709541 (8.3 MiB)

 

eth1    Link encap:Ethernet  HWaddr 00:50:8B:B3:B3:5E 
          UP BROADCAST SLAVE MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:0 (0.0 b)  TX bytes:0 (0.0 b)

요즘 ID, PW를 입력하고 그 정보를 활용하는 모든 웹사이트는 보안서버를 구축하여야 한다.

그래서 우리회사도 무려 5개의 사이트에 적용을 해야하기에 테스트 하기로 했다.

 

스펙)

Cent OS 4.5

Apahce 2.2.4

php 5.2.2

Openssl 0.9.8e

  

인증서 생성하기

1. 개인키 생성

# openssl genrsa -des3 -out SSLtest.key 1024

 Generating RSA private key, 1024 bit long modulus
.............++++++
...++++++
e is 65537 (0x10001)
Enter pass phrase for SSLtest.key: ******
Verifying - Enter pass phrase for SSLtest.key: ******

- 여기 패스워드는 꼭 기억해 두어라!! 나중에 apache를 시작할때 쓰인다.

 

2. CSR 생성

# openssl req -new -key SSLtest.key -out SSLtest.csr

 Enter pass phrase for ssl.key: ******
...
Country Name (2 letter code) [KR]:kr
State or Province Name (full name) [Berkshire]:Seoul
Locality Name (eg, city) [Newbury]:Seodaemungu
Organization Name (eg, company) [My Company Ltd]:dunet
Organizational Unit Name (eg, section) []:
system management
Common Name (eg, your name or your server's hostname) []:www.dunet.co.kr
Email Address []:

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []: ******
An optional company name []: crosscert

 

3. CRS 확인

# openssl req -noout -text -in SSLtest.csr

 Certificate Request:
    Data:
        Version: 0 (0x0)
        Subject: C=kr, ST=Seoul, L=Seodaemungu, O=dunet,
        OU=system management, CN=www.dunet.co.kr
...

 이 crs를 www.crosscert.com나 다른 인증사이트에 입력을하여 TEST인증서를 받을수 있다. 테스트 인증서를 받으면 이메일로 키 값이 날라오는데 그 값을 SSLtest.crt로 저장한다.

 

자. 이제 인증서를 얻었으니 Apache 2.2.4 & OpenSSL을 설치하여 보자.

 

APACHE && Open SSL 설치

1. OpenSSL install

# ./config --prefix=/usr/local/openssl

# make

# make install

(prefix옵션을 주지 않으면 /usr/local/ssl에 인스톨 된다.)

 

2. apache 2.2.4

아파치2.X 부터는 mod_ssl를 자체 내장하고 있기 때문에 따로 설치 해 줄 필요가 없다.

(apache 1.3.X버전은 각각 버전에 맞는 mod_ssl버전을 설치 해 주어야 한다.)

하지만 여기에서 문제가 발생했다. 분명 여러가지 문서에서 하라는대로 옵션을 주었지만, make에서 모두 오류가 나 버린다.

 

./configure --prefix=/usr/local/apache2 --enable-modules=so --enable-rewrite --enable-ssl

 

./configure --prefix=/usr/local/apache2 --enable-mods-shared=most --enable-modules=so --enable-ssl=shared --enable-rewrite

 

./configure --prefix=/usr/local/apache2 --enable-rule=SHARED_CORE --enable-module=so --enable-ssl --enable-module=rewrite --enable-so

./configure --prefix=/usr/local/apache \
--enable-modules=all --enable-mods-shared=most \
--with-mpm=worker --enable-proxy --enable-proxy_http \
--enable-proxy_connect --enable-cache --enable-mem-cache \
--enable-disk-cache --enable-ssl --with-ssl

위에 두가지 방법으로는 나에게는 오류만 뜰 뿐, make가 이루어지지 않기에 맨 마지막으로  옵션으로 겨우겨우 성공.(하루를 고스란히 바쳤다.)

 

# /usr/local/apache2/bin/httpd -l

Compiled in modules:

  core.c

     .

     .

     .

  mod_setenvif.c
  mod_ssl.c
     .

     .

 

mod_ssl.c가 보인다면 설치에 성공을 한 것이다.

 

3. httpd.conf 설정

<Directory />
    Options FollowSymLinks
    AllowOverride None
    #Order deny,allow         -주석처리
    #Deny from all             -주석처리
</Directory>

 

Include conf/extra/httpd-userdir.conf   -주석 해제

Include conf/extra/httpd-ssl.conf        -주석 헤제

 

4. httpd-ssl.conf 설정

<VirtualHost xxx.xxx.xxx.xxx:443>

DocumentRoot "홈페이지 루트 디렉토리"

ServerName 서버도메인:443

SSLCertificateFile /인증서디렉토리/인증서.crt

SSLCertificateKeyFile /인증서디렉토리/인증서키.key

 

위 항목을 찾아서 알맞게 수정해주자.

 

# /usr/local/apache2/bin/apachectl start

Apache/2.2.4 mod_ssl/2.2.4 (Pass Phrase Dialog)
Some of your private key files are encrypted for security reasons.
In order to read them you have to provide the pass phrases.

Server hsk.dunet.co.kr:443 (RSA)
Enter pass phrase: *****(키 생성시 만든 비밀번호를 입력하라!)

OK: Pass Phrase Dialog successful.

 

2.2.4버전에서는 apacheclt startssl을 할 필요가 없이, start만 하면 된다.

 

물론 잊지 말아야 할 것은, https 포트인 443번을 방화벽에서 열어 주어야 한 다는 것이다.

필요한 툴
rrdtool HotSaNIC libart_lgpl Perl freetype libpng


☞ rrdtool
http://oss.oetiker.ch/rrdtool/
# tar zxf rrdtool-1.2.23.tar.gz

# vi configure
 /usr/include/libart-2.0 -> /usr/local/include/libart-2.0
 /usr/include/freetype -> /usr/local/include/freetype

# ./configure --prefix=/usr/local/rrdtool --enable-perl-site-install --disable-python --disable-tcl (1.0.X와는 다르다)
# make
# make install

 

☞HotSaNIC
http://hotsanic.sourceforge.net/
# tar zxf hotsanic-0.5.0-pre5.gz  -C /usr/local/
# cd /usr/local/HotSaNIC
# ./setup.pl

이 후 필요한 설정을 체크한다.

OPTION

서비스명

설명

Y/N

APCUSV

APC UPS의 현황 (apcaccess 툴 사용) (APC UPS를 사용하지 않고 또한 있더라도 서버와 연결하여 모니터링중이 아니라면 N)

N

APPS

데몬, 응용프로그램별 프로세스 현황(프로세스 이름 별도 설정 필요)

Y

DISKIO

HDD(파티션별이 아님) 입출력

N

DNET

Distributed.Net관련 RC5, OGR,  DES, CSC

N

NETWORKS

네트워크 트래픽 (별도 설정 필요)

N

PART

사용량 파티션별

Y

PING

지정한 서버로 ping time 결과 (ping서버 설정 필요)

N

SENSORS

CPU, 마더보드 등의 온도, 전압등의 수치

N

SHOUTCAST

지정한 서버와 포트로의 스트링 현황 (서버, 포트 설정 필요

N

SYSTEM

시스템의 프로세스 수, CPU 사용률, load, 메모리 사용률

Y

TRAFFIC

네트워크 인터페이스별(eth0, ...) 트래픽(SNMP를 통해 라우터나 다른 서버의 트래픽도 모니터링 가능, 물론 이 때는 별도 설정 필요)

Y

WORMS

웹로그 파일을 이용한 님다, 코드레드 등의 웜 공격 건수(웹로그 경로 설정 필요. 문자열 지정으로 다른 웜 공격도 설정 가능)

N

 

# /usr/local/HotSaNIC/var/settings/

main : HotSaNIC 의 전반적인 설정이다. 파일을 적절하게 수정해준다
BINPATH="/usr/local/rrdtool/bin"  # rrdtool 의 bin 디렉토리 위치
WEBDIR="/data/www/rrdtool"       # rrdtool이 저장될 디렉토리. 즉, 웹서비스될 디렉토리
IMAGEFORMAT="png"                 # png를 추천

mod_apps : 모니터링할 데몬을 적는다 커널 2.4와 설정동일
                 APP:httpd,Apache Webserver
                 APP:mysqld,MySQL Database Server


mod_diskio : 디스크의 입출력 상태를 나타내는 모듈로 커널 2.6에서 수정이 필요하다
                disk io 를 나타내는 파일이 /proc/stat 에서 /proc/diskstats 로 변경됐다
                mod_diskio 는 KERNEL=2.6 이부분만 수정해주고 나머지 설정은 동일하다

 

# vi /usr/local/HotSaNIC/modules/diskio/platform/linux.pm
  package HotSaNICmod::OSdep;
  use RRDs;

  sub version {
    ($VERSION = '$Revision: 1.16 $') =~ s/.*(\d+\.\d+).*/$1/;
    my $platform;
    foreach (keys(%INC)) { $platform=$_ if $_ =~ /platform/; }
    return "$platform $VERSION";
  }
  sub sample {
    my %args=@_;

    @stats = ();
    if ($args{KERNEL} eq "2.6") {
    open FILE, "< /proc/diskstats";
      while (<FILE>) {
          chomp;
          push @stats, $_ if / [hs]d. /;
      }
      close FILE;
      foreach my $entry (@stats) {
          $entry =~ s/^\s*//;
          my ($num1,$num2,undef,$racc,$undef,$rblk,undef,$wacc,undef,$wblk,undef,undef,undef,undef) = split /\s+/, $entry;
          $num = $num1 . '_' . $num2;
          store_values($args{MODNAME},$num,$racc,$wacc,$rblk,$wblk,512);
      }
    } elsif ($args{KERNEL} eq "2.4") {
    #  disk_io: (8,0):(985065,41330,436455,943735,13075448) (8,1):(12563,6363,333604,6200,167608) (8,2):(11194,11012,90140,182,3160)
    open FILE,"/proc/stat";
    while (<FILE>) { (undef,@stats)=split if /disk_io/; }
    close FILE;
    foreach my $entry (@stats) {
       $entry=~ s/[()]//g;
       $entry=~ s/:/,/g;
       my ($num1,$num2,undef,$racc,$rblk,$wacc,$wblk)=split /,/,$entry;
       $num=$num1."_".$num2;
       store_values($args{MODNAME},$num,$racc,$wacc,$rblk,$wblk,512);
       }
    }
    elsif ($args{KERNEL} eq "2.2") {
    # disk 1494755 377215 221577 144318
    # disk_rio 564538 286941 151189 77490
    # disk_wio 930217 90274 70388 66828
    # disk_rblk 1129538 573882 302378 154980
    # disk_wblk 1860536 180548 140776 133656
    open FILE,"/proc/stat";
    while (<FILE>) {
       (undef,@readacc)=split if /disk_rio/;
       (undef,@writeacc)=split if /disk_wio/;
       (undef,@readblk)=split if /disk_rblk/;
       (undef,@writeblk)=split if /disk_wblk/;
       }
    close FILE;
    $num=0;
    while (@readacc) {
       $racc=shift @readacc;
       $wacc=shift @writeacc;
       $rblk=shift @readblk;
       $wblk=shift @writeblk;
       store_values($args{MODNAME},$num,$racc,$wacc,$rblk,$wblk,512);
      $num++;
       }
    }
    }
  sub store_values {
  my ($MODNAME,$drive,$racc,$wacc,$rblk,$wblk,$blksize)=@_;
  if ( ! -e "rrd/$drive.rrd" ) { system("./makerrd","$drive","U") }
  RRDs::update "rrd/$drive.rrd",time.":$racc:".($rblk*$blksize).":$wacc:".($wblk*$blksize);
  if ($ERROR = RRDs::error) { print time," ","$MODNAME: unable to update `$drive.rrd': $ERROR\n"; }
  }
 
mod_system : 시스템의 전반적인 내용이 추가한다.
메모리의 설정 저장 파일이 달라졌다. 하지만 이미 파일에 패치가 되어 있다. 현재 파일에 KERNEL=2.6 을 추가한다.
(가끔 interrupts 그래프가 안그려질때가 있다 그럴때는 /usr/local/HotSaNIC/modules/system/diagrams.pl

파일을 열어서 756 줄과 760 줄을 주석처리해본다 (맨앞에 # 붙이기) )

mod_sensors : 파일의 형식이 변경됐다
SENSOR=/sys/bus/i2c/devices/0-0290/temp_input1,1_temp1,M/B Temp,1,0.001,0,C
SENSOR=/sys/bus/i2c/devices/0-0290/temp_input2,2_temp2,CPU Temp,1,0.001,0,C
SENSOR=/sys/bus/i2c/devices/0-0290/temp_input3,3_temp3,Temp3,1,0.001,0,C
SENSOR=/sys/bus/i2c/devices/0-0290/fan_input3,4_fan3,fan3,1,1,0,RPM
SENSOR=/sys/bus/i2c/devices/0-0290/in_input0,5_in0,VCore 1,1,0.001,0,V
SENSOR=/sys/bus/i2c/devices/0-0290/in_input1,6_in1,VCore 2,1,0.001,0,V


실행

# ./makeindex.pl      (인덱스 파일을 만드는 데몬)
# ./rrdgraph start   (rrdtool을 실행하는 데몬)

# vi /etc/rc.d/rc.local
/usr/local/HotSaNIC/rrdgraph start


- 기본설정에 의해서 최초 이미지가 생성될려면 15분을 기다려야한다.
  (엑박이미지를 클릭해서 들어가면 세부이미지가 보일것이다 15분뒤에 새로고침을 눌러 확인하자)

- 24시간이 지나면 메인의 엑박들도 이미지로 보일것이다.
- 24시간전에 보고 싶으면 /usr/local/HotSaNIC/convert.pl 을 실행시킨다.


RRDtool 명령어
- HoSaNIC은 이미 정해진 모듈을 통해서 RRDtool을 다루는 것이다.
  시스템관리자가 원하는 데이터를 RRDtool로 직접 조작하여 통계용 이미지를 생성

- RRDtool용 자체 DB(일반적으로 .rrd로 지정)를 생성한다.(create) ->
- 데이터를 업데이트하거나 (update) 가져온다.(fetch) ->
- 이미지를 생성한다. (graph)

-- rrdtool 명령
- DB 생성, 이미지 생성은 모두 rrdtool/bin/rrdtool 명령을 통해서 한다.
- 형식 : rrdtool [명령] [명령 옵션...]
- 예   : rrdtool create  coffeenix_status.rrd DS:....

 

명령

설명

create

새로운 RRD DB 만든다.

update

DB 데이터를 저장한다.

graph

저장된 DB자료를 이용해서 이미지를 생성한다. (.gif 또는 .png)

dump

RRD DB 데이터를 XML 포맷으로 뽑아준다.

restore

XML 포맷에서 RRD DB 저장한다.

fetch

RRD DB에서 데이터를 얻어온다.

tune

RRD DB 설정을 변경한다.

last

RRD DB 최종 업데이트 시간을 알려준다.

info

RRD DB 헤더 정보를 보여준다. (파일명, 최근업데이트일, 설정값...)

rrdresize

RRA 크기를 변경한다. 가능하면 사용하지 말기를

xport

RRD DB 데이터를 XML 포맷으로 뽑아준다. (출력 포맷 지정)

 

 

webalizer는 웹로그 분석기로써 기본 적으로 아파치 로그를 분석하여 그 결과값을 보기 좋게 웹상에 뿌려준다.(뭐 내가 보기에는 어지러운 숫자들로 밖에는 안 보이지만 말이다.)

그래도 일일히 로그 분석하는 멍청한 짓을  하지 않아도 되는 유용한 툴이다.
소스는 여기에서 다운 받자.

http://www.mrunix.net/webalizer/download.html

설치법
설치 전에 미리 컴파일할 디렉토리를 만들어 두자. 그렇지 않으면 make시 에러가 난다.
그리고 기본적으로 webalizer도 GD를 가져와서 그래프를 그리기 때문에 설치가 되어있는지 확인 해두자.

# mkidr -p /usr/local/webalizer/man/man1
# mkidr -p /usr/local/webalizer/bin
# ./configure --prefix=/usr/local/webalizer --with-language=korean
# make all
# make install

설치는 비교적 간단하게 끝이난다.

webalizer 설정법
webalizer가 제대로 설치가 되었다면 /etc/webalizer.conf.sample 이라는 파일이 존재한다.
이 파일의 이름을 바꾸어주자.

# mv /etc/webalizer.conf.sample /etc/webalizer.conf

그리고 /etc/webalizer.conf를 적절하게 수정해주자
# 분석할 로그 파일의 위치
 LogFile        /usr/local/apache/logs/access_log
 
# 로그파일을 분석한 보고서(html문서)를 저장할 디렉토리
 OutputDir     /usr/local/apache/htdocs/weblog/
 
# 로그 타입을 설정합니다. clf는 기본적으로 web로그 분석
 LogType web

# 로그 히스토리 파일을 지정합니다. 파일이름만 적었을 경우 Outputdir에 저장됩니다.
# 1년동안의 로그 분석 결과를 저장하고 있습니다.
 HistoryName     webalizer.hist
 
# 이전의 모든 분석 결과를 저장해 놓은 후 분석 이후의 로그만 분석하도록 설정을 합니다.
# 서버의 부하를 줄일 수 있습니다.
 Incremental     yes
 
# 이전에 분석해 놓은 결과에 대한 정보를 저장해 놓습니다. 위의 Incremental  옵션을 위한 정보를 가지고 있는 파일입니다.
 IncrementalName webalizer.current
 
# ReportTitle은 html 출력 화면에 표시될 Title입니다.
 ReportTitle    사용량 통계:
 
# 로그 분석을 한 사이트의 이름을 지정합니다.
 HostName       www.uzoogom.com

자신의 서버로그 위치를 잘 파악해서 설정을 해주고 나면 이제는 돌리기만 하면 된다.
# /usr/local/webalizer/bin/webalizer -c /etc/webalizer.conf

/usr/local/apache/logs/access_log
Webalizer V2.01-09 (Linux 2.4.18) Korean
대상 로그 파일: /usr/local/apache/logs/access_log (web)
출력 디렉토리: /usr/local/apache/htdocs/weblog

호스트명: 'www.uzoogom.com'
기존 히스토리 정보 해석: webalizer.hist
리포트 생성: Oct 2007
리포트 출력
히스토리 정보 저장
6819 레코드 동작시간 0.38

이제 /usr/local/apache/htdocs/weblog로 가보면 html로 작성 된 것을 웹상으로 불러 오기만 하면 된다. 보통은 저렇게 직접 돌리지 않고 crond에 등록하여 하루에 한 번 돌아가게끔 해 주는 것이 편하다.

php 5.2.x버전 이상에서는 [--with-oci8=]이라는 configure 옵션에는 있지만 먹히지 않는 기묘한 현상을 보인다.

결국 뒤져본 결과 참으로 허탈한 답변을 구할 수 있었다.

first read what i wrote about:
I'm telling not about oracle8, but about oracle9 and oracle10.

extension name is OCI8 , but it used for oracle from 8 to 10
NOT ONLY TO ORACLE 8 (!)

------------------------------------------------------------------------

[2007-08-28 11:14:58] [EMAIL PROTECTED]

We don't support Oracle 8 anymore. :)

------------------------------------------------------------------------

그래 뭐.. 버전이 업데이트가 많이 된 상황이니 지원을 안 할 수도 있겠지..
라고 생각하고 다음 코멘트를 봤다.

[10 May 8:05pm UTC] tony2001@php.net

Upgrade to newer Oracle version.


OTL ...  새걸로 업그레이드 해라. 말이 업그레이드지...
그게 맘대로 되는 것이더냐!

구글신의 힘을 빌어 뒤져 본 결과.
역시나 방법(편법)이 있었다!

오류내용)
/usr/local/src/php-5.2.3/ext/oci8/oci8_lob.c:304: error:
`OCI_NLS_CHARSET_MAXBYTESZ' undeclared (first use in this function)
/usr/local/src/php-5.2.3/ext/oci8/oci8_lob.c:304: error: (Each
undeclared identifier is reported only once
/usr/local/src/php-5.2.3/ext/oci8/oci8_lob.c:304: error: for each
function it appears in.)
make: *** [ext/oci8/oci8_lob.lo] Error 1

해결법)
일단 php 5.2.x 버전의 압축을 풀고 그 디렉토리로 이동한다. 아래 파일을 수정해 준다.

# vi ext/oci8/oci8_lob.c
그리고 아래와 같이 되어 있는 줄을 찾는다.

▶수정 전(약 303번째줄)

=======================================
        if (is_clob) {
                PHP_OCI_CALL_RETURN(connection->errcode, OCINlsNumericInfoGet, (connection->env, connection->err, &bytes_per_char, OCI_NLS_CHARSET_MAXBYTESZ));
 
                if (connection->errcode != OCI_SUCCESS) {
                        php_oci_error(connection->err,connection->errcode TSRMLS_CC);
                        PHP_OCI_HANDLE_ERROR(connection,connection->errcode);
                        return 1;
                }
        } else {
                /* BLOBs don't have encoding, so bytes_per_char == 1
*/
        }
 =======================================

▶수정 후(색칠 된것을 추가)

=======================================
        if (is_clob) {
#ifdef OCI_NLS_CHARSET_MAXBYTESZ
                PHP_OCI_CALL_RETURN(connection->errcode, OCINlsNumericInfoGet, (connection->env, connection->err, &bytes_per_char, OCI_NLS_CHARSET_MAXBYTESZ));
 
                if (connection->errcode != OCI_SUCCESS) {
                        php_oci_error(connection->err,connection->errcode TSRMLS_CC);
                        PHP_OCI_HANDLE_ERROR(connection,connection->errcode);
                        return 1;
                }
#else
                bytes_per_char = 4;
#endif
        } else {
                /* BLOBs don't have encoding, so bytes_per_char == 1
*/
        }
 =======================================

이후 configure , make, make install 을 하면 된다.
64bit OS에는 이상하게도 PHP5에 oracle client가 oci8로 도무지 붙지를 않았다.

버전의 문제인가 싶어 다른 버전으로 시도해봤지만 역시나 붙지 않는다.
자꾸 libclntsh.so파일을 찾을 수 없다고 나온다. 분명 파일도 정상적으로 링크가 되어있고
LD_LIBRARY_PATH역시 정상적으로 잡아주었는데..

결국 64bit OS의 특성인 듯하여 oracle instant Client로 대처하기로 했다.

[DOWN]
http://www.oracle.com/technology/tech/oci/instantclient/index.html

위의 URL로가서 oracle instant client를 받는다. 최신 버전은 11g이다.
난 당연히 64bit OS이기 때문에 64bit 버전을 받는다. linux의 경우에는 2개의 파일을 받자.
개인적으로 rpm 패키지 보다는 소스를 좋아하기에 소스 버전으로 받았다.

basic.zip (44,800,163 bytes) (cksum - 2302121184)
sdk.zip (607,175 bytes) (cksum - 3112907190)

두 개의 파일을 받아 압축을 풀면 /instantclient_11_1 안에 두개의 파일이 들어간다.
instantclient_11_1안에는 basic.zip의 파일내용이 nstantclient_11_1/sdk에는 sdk.zip 파일이 풀린다. 그리고 링크를 하나 걸어주어야 한다.

# ln -s libclntsh.so.11.1 libclntsh.so

oracle instant client설치는 이것으로 끝이다.
참고로 말하자면 저 디렉토리 이름을 바꾸고 LD_LIBRARY_PATH를 다 잡아주고 했는데도 PHP 컴파일시 버전을 찾지 못하는 요상한 현상이 벌어진다.(이것으로 한 3시간은 잡아 먹은듯..) 왜인지는 조금 더 두고 봐야할듯하다.

이제 php5에 올려보자.
php configure 옵션에 --with-oci8=instantclient,/data/instantclient_11_1 --enable-sigchild
를 추가한다. 주의 할 것은 php 버전에따라 instant client 설치법이 조금씩 다르다.
확인을 하려면 ./configure --help | grep oci 로 확인을 해봐야할 것이다.
PHP5 버전에서는 위와 같은 방법으로 하면 된다. /data/instantclient_11_1는 위에서 압축을 푼 디렉토리를 적어주어야 함을 명심하자.

이제 컴파일하면 별 문제없이 make, make install이 될것이다.

아 물론, network/admin/ 이란 디렉토리를 만들어서 tnsnames.ora 파일을 생성해줘야 하는 것도 잊지말자.

centos 5
apache 2.2.6
tomcat 6.0.14
php 4.4.7
jdk 1.6
mysql 5.1.22 rc
 
스펙은 대충 저러하다. 전부 최신 버전이지만 php만 4점대 버전인것은... 회사에서 요구한거라.
뭐 php 버전은 그다지 중요하지 않으니 상관이 없다.

가장 먼저 각 configure 옵션이다.

* mysql
./configure --prefix=/usr/local/mysql \
--with-unix-socket-path=/usr/local/mysql/tmp \
--with-charset=euckr \
--localstatedir=/usr/local/mysql/data

* apache
./configure --prefix=/usr/local/apache --enable-MODULE=shared --enable-so \
--enable-rewrite --with-mpm=worker
※ 추 후 모듈 올릴 것을 대비하여 DSO방식으로 올리고 mpm를 worker로 사용하였다.

* freetds (mssql과 연동하기 위한 데몬)
./configure --prefix=/usr/local/freetds --with-tdsver=8.0 \
--enable-msdblib --enable-dbmfix --with-gnu-ld \
--enable-shared --enable-static

* php
./configure --prefix=/usr/local/php --with-apxs2=/usr/local/apache/bin/apxs \
--with-config-file-path=/usr/local/apache/conf \
--with-mysql=/usr/local/mysql \
--with-mssql=/usr/local/freetds --with-sybase=/usr/local/freetds \
--with-mod-charset --with-language=korean --with-charset=euc_kr \
--disable-debug --with-xml --enable-magic-quotes --with-gettext --enable-ftp \
--enable-sockets --with-gnu-ld --enable-track-vars \
--enable-module=so

* java
자바의 경우는 그냥 chmod 700으로 주고 실행을 시키면 자동으로 설치가 된다.
/usr/java/jdk1.6.0_03에 설치가 되며 /etc/profile에 환경변수를 넣어주자.

JAVA_HOME=/usr/java/jdk1.6.0_03
export JAVA_HOME
PATH=$PATH:$JAVA_HOME/bin
CLASSPATH=$CLASSPATH:$JAVA_HOME/lib
export PATH

환경변수 입력수 source /etc/profile 해주는 센스 정도는 챙기자.

* tomcat
압축을 풀고 난뒤에 /usr/local/tomcat 으로 옮기면 설치 완료. 역시나 간단간단.
사실 설치시 중요한건 php설치시 mysql과 mssql을 집어넣는 것 정도이다.
apache와 tomcat을 연동하려면 설치 후에 작업을 해주어야 한다.

[연동 시작]
위와 같이 설치가 끝나면 이제 apache와 tomcat을 연동시켜 보자.
apache와 tomcat을 연동시키기 위해서는 특별한 모듈이하나 필요하다.

http://tomcat.apache.org/download-connectors.cgi

에서 다운을 받는다. 내가 사용한 버전은 jakarta-tomcat-connectors-jk2-src-current.tar.gz
참고로 JK2 Connector 는 2004.11월 이후 개발이 중지되었다. 그리고 보안을 위해 JK1.2.23이상을 사용
하는것이 좋다.(최신버전 1.2.25)

tar xzvf tomcat-connectors-1.2.25-src.tar.gz
cd tomcat-connectors-1.2.25-src/native
./configure --with-apxs=/usr/local/apache/bin/apxs
make
cp apache-2.0/mod_jk.so /usr/local/apache/modules/

httpd.conf 설정

# JK Connection
LoadModule jk_module modules/mod_jk.so
JkWorkerProperty worker.list=ajp13
JkWorkerProperty worker.ajp13.type=ajp13
JkWorkerProperty worker.ajp13.host=localhost
JkWorkerProperty worker.ajp13.port=8009
JkLogFile "logs/mod_jk.log"
JkLogLevel info
JkLogStampFormat "[%a %b %d %H:%M:%S %Y]"
JkMount /*.jsp ajp13
JkMount /*.XXX ajp13

*.XXX는 JSP 파일 확장자를 추가하는 부분으로 web.xml를 수정하는 것이다. 굳이 할 필요는 없다.

<servlet-mapping>
    <servlet-name>jsp</servlet-name>
    <url-pattern>*.XXX</url-pattern>
</servlet-mapping>

자 이것으로 apache와 tomcat 연동은 끝이났다.

이제 mssql 연동
/etc/ld.so.conf에
/usr/local/freetds/lib 추가 후 ldconfig를 실행해서 라이브러리를 올려주자.

# vi /usr/local/freetds/etc/freetds.conf
[MyServer70]
        host = 서버아이피
        port = 1433
        tds version = 8.0

만 추가해주면 끝.


!! 추가상황 발생

apache 2.2.6
tomcat 6.0.14

상황은 www.uzoogom.com을 virtual host로 잡았는데 하위 디렉토리의 jsp를 제대로 읽어들이지 못한다.

이전에 말한 apache+tomcat중 2번째 방법으로 연동하였을때,
# JK Connection
LoadModule jk_module modules/mod_jk.so
JkWorkerProperty worker.list=ajp13
JkWorkerProperty worker.ajp13.type=ajp13
JkWorkerProperty worker.ajp13.host=localhost
JkWorkerProperty worker.ajp13.port=8009
JkLogFile "logs/mod_jk.log"
JkLogLevel info
JkMount /*.jsp ajp13

이렇게만 하면 www.uzoogom.com/index.jsp까지는 먹힐지언정
www.uzoogom.com/home/a.jsp같은 경우에는 jsp가 제대로 인식이 안되라.

먼저 httpd.conf에
# JK Connection
LoadModule jk_module modules/mod_jk.so
JkWorkerProperty worker.list=ajp13
JkWorkerProperty worker.ajp13.type=ajp13
JkWorkerProperty worker.ajp13.host=localhost
JkWorkerProperty worker.ajp13.port=8009
JkLogFile "logs/mod_jk.log"
JkLogLevel info

까지만 집어 넣는다.
그리고 httpd-vhosts.conf파일을 열어 virtual host설정부분을 수정한다.
<VirtualHost 211.***.***.***:80>
    ServerAdmin network@dunet.co.kr
    DocumentRoot /usr/local/apache/htdocs/uzoogom
    ServerName www.uzoogom.com
    ErrorLog logs/uzoogom-error_log
    CustomLog logs/uzoogom-access_log common
    JkMount /*.jsp ajp13
    JkMount /abc/*.jsp ajp13
    JkMount /abc/efg/*.jsp ajp13
</VirtualHost>

JKMount부분을 여기에 집어넣는 것이 정답이었다. 여기에서는 /abc/하위 디릭토리의 *.jsp 파일과 /abc/efg/*.jsp의 파일을 읽어들이게 만들었다.

급해서 정규식이 먹히는지는 확인 해보지 않았다.
이걸 적구 테스트 하니 정규식도 잘 먹힌다.

저 3줄때문에 몇 시간을 삽질했는지.....

root@uzoogom ~ # route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
211.214.192.0   0.0.0.0            255.255.255.0      U        0         0        0 eth0
169.254.0.0      0.0.0.0            255.255.0.0         U        0         0        0 eth0
0.0.0.0            211.214.192.1   0.0.0.0               UG      0         0        0 eth0

route -n을 해보면 기본적인 라우팅 테이블 정보가 나오는데
내가 설정하지도 않은 169.254.0.0이 모든 서버에 나오는 것을 알 수 있다.

저것은 도대체 무엇일까? 해서 구글링 해 본 결과.

169.254.0.0/16은 Zero Configuration Networking 을 위하여 예약된 subnet 입니다. Zero Configuration Networking 이라는 것은.. DHCP 환경이 없는 네트워크에서 Peer to Peer 연결이나 Wireless 환경에서 관리자의 수동적인 설정이 없이 네트워킹을 할 수 있는 환경을 만들기 위한 규약입니다. (영어로 되어 있어서 대충 봐서 정확하지는 않습니다. 궁금하신 분들은 http://www.zeroconf.org/ 를 참고 하시기 바랍니다. 영어입니다!)
라는 답변을 얻을수 있었다.

없애는 법)
/etc/sysconfig/network에 다음의 라인을 넣어주면 네트워킹이 재시작 된 이후부터는 나오지 않게 된다.
NOZEROCONF=yes

# mysql -u root -p
mysql> use mysql

반드시 mysql database를 사용한다. 거의 모든 설정이 이 안에서 이뤄진다.
사용자 계정은 user 라는 테이블로 저장이 된다.

mysql> select * from user;

사용자 정보를 모두 확인가능

mysql> create database DB이름;

database 생성
mysql> grant all privileges on webhard2.* to web@localhost identified by '1q2w3e' with grant option;

web@localhost ← web이 계정이다
1q2w3e'       ← web계정의 비번

mysql> flush privileges;  ←지금까지의 것을 적용

기본적으로 Jpegsrc는 32bit 운영체제에는 별 문제 없이 인스톨이 된다.
하지만 64bit 운영체제에는 설치가 안되고 오류 메세지가 뜸을 확인하였다.


오류내용)
./libtool --mode=compile gcc -O2  -I. -c ./jcapimin.c
make: ./libtool: 명령을 찾지 못했음
make: *** [jcapimin.lo] 오류 127

해결법)
뭐 이정도의 원문은 쉽게 읽을 수 있으리라.(...귀찮아서..)

Jpegsrc 64
From Noah.org
Jump to: navigation, search
[edit]How to build jpegsrc.v6b on 64-bit Linux machines
jpegsrc is no longer maintained and has not been updated since the Clinton administration. This is odd considering how critical this library is to so many applications.

If you are trying to build on a 64-bit Linux machine you will probably get this error during the ./configure step:

checking host system type... Invalid configuration `x86_64-unknown-linux-gnu': machine `x86_64-unknown' not recognized
The fix is simple -- just copy '/usr/share/libtool/config.guess' and '/usr/share/libtool/config.sub' to the same directory as the jpeg-6b ./configure script. You can also copy from from /usr/share/automake-1.9/.

cp /usr/share/libtool/config.guess .
cp /usr/share/libtool/config.sub .
./configure --enable-shared --enable-static
One site suggests that you also need tell the jpegsrc build where the 64-bit libdir is located:

make libdir=/usr/lib64
make libdir=/usr/lib64 install
That will change the directory where 'make install' puts the libjpeg library files, but you may not want that if you are installing libjpeg to a custom path (in other words, if you used the --prefix option for configure).

Retrieved from "https://www.noah.org/wiki/index.php/Jpegsrc_64"
Category: Engineering
우주곰:지구곰이 아닙니다.
지구곰이 아닙니다.
Categories (190)
Information (5)
About uzoogom (5)
My Advanced Linux (73)
Learning Linux (96)
OperatingSystem (5)
Databases (4)
OpenSource (1)
Tips! (1)
«   2021/04   »
        1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30  
  1. 2012/12 (2)
  2. 2012/04 (3)
  3. 2012/03 (6)
  4. 2012/02 (6)
  5. 2012/01 (2)