아파치 + SVN 연동

from Linux 2009/10/25 16:02
이 글은 소스 설치 환경에서 아파치 + SVN 을 연동 하는 방법입니다.

subversion 아파치 모듈을 설치하기 전에 필요한 의존성 neon, SQLite 을 설치 합니다.

- neon 설치
(xml2 와 xml Parser 인 expat 라이브러리가 미리 설치 되어 있어야 합니다. 설치 안되신 분은 그냥 Skip 하셔도..)
http://www.webdav.org/neon/
[root@ruo91 ~]# cd /usr/local/src
[root@ruo91 ~]# wget http://www.webdav.org/neon/neon-0.29.0.tar.gz
[root@ruo91 ~]# tar xzvf neon-0.29.0.tar.gz
[root@ruo91 ~]# cd neon-0.29.0
[root@ruo91 ~]# ./configure --with-libxml2 --with-expat
[root@ruo91 ~]# make && make install

- SQLite 설치
http://www.sqlite.org/download.html
[root@ruo91 ~]# cd /usr/local/src
[root@ruo91 ~]# wget http://www.sqlite.org/sqlite-3.6.19.tar.gz
[root@ruo91 ~]# tar xzvf sqlite-3.6.19.tar.gz
[root@ruo91 ~]# cd sqlite-3.6.19
[root@ruo91 ~]# ./configure --disable-tcl
[root@ruo91 ~]# make && make install

- subversion 모듈 설치
아파치에서 svn 을 연동하기 위한 모듈을 아래 사이트에서 다운로드 받습니다.
http://subversion.tigris.org
[root@ruo91 ~]# cd /usr/local/src
[root@ruo91 ~]# wget http://subversion.tigris.org/downloads/subversion-1.6.6.tar.bz2
[root@ruo91 ~]# tar xjvf subversion-1.6.6.tar.bz2
[root@ruo91 ~]# cd subversion-1.6.6
[root@ruo91 ~]# ./configure \
--with-neon=/usr/local --with-sqlite=/usr/local --with-zlib=/usr/local \
--with-apr=/usr/local/apache2 --with-apr-util=/usr/local/apache2 \
--without-jdk --without-berkeley-db
[root@ruo91 ~]# make && make install

- 아파치 설정 및 테스트
설치가 완료되면 자동으로 httpd.conf 설정 파일에 해당 모듈이 붙습니다.
[root@ruo91 ~]# cat /usr/local/apache2/conf/httpd.conf | grep svn
LoadModule dav_svn_module     modules/mod_dav_svn.so
LoadModule authz_svn_module   modules/mod_authz_svn.so

svn 저장소를 웹으로 보기 위해선 아파치의 httpd.conf 설정 파일에 아래 내용을 추가 해줘야 합니다.
(필자는 인증 된 사용자만 허용 해주기 위해 아래와 같이 설정 해줬습니다.)
# SVN
<Location /svn>
  DAV svn
# SVN 저장소 디렉토리
  SVNParentPath /home/svn
# 인증 타입
  AuthType Basic
# 인증 설명 이름
  AuthName "Subversion repository"
# 인증 사용자 파일 지정
  AuthUserFile /usr/local/apache2/conf/auth_user
  Require valid-user
</Location>

아파치의 htpasswd 바이너리 파일을 이용하여 인증 사용자 추가를 합니다.
[root@ruo91 ~]# /usr/local/apache2/bin/htpasswd -cm /usr/local/apache2/conf/auth_user ruo91
New password:
Re-type new password:
Adding password for user ruo91
[root@ruo91 ~]# cat /usr/local/apache2/conf/auth_user
ruo91:$apr1$WiriXXvq$zvXNMXMgUaiSZ3KuwLPno0

여러 사용자가 있을때 해당 사용자만 추가 해주고 싶을 때에는 -c 옵션을 제거하고 만들어 주시면 됩니다.
[root@ruo91 ~]# /usr/local/apache2/bin/htpasswd -m /usr/local/apache2/conf/auth_user ruo911
New password:
Re-type new password:
Adding password for user ruo911

적용을 위해서 아파치 재시작을 합니다.
[root@ruo91 ~]# /usr/local/apache2/bin/apachectl restart

SVN 모듈이 잘 올라갔는지 PHP 정보를 확인 합니다.
[root@ruo91 ~]# echo '<?php phpinfo(); ?>' > /usr/local/apache2/htdocs/phpinfo.php

\"사용자

이제 웹페이지에서 SVN 이 정상 작동 하는지 확인 합니다.

http://서버IP/svn/저장소이름

http://192.168.0.28/svn/repos
사용자 삽입 이미지
사용자 삽입 이미지
사용자 삽입 이미지
2009/10/25 16:02 2009/10/25 16:02
SVN(subversion)?
SVN 은 버전 관리 시스템이며 CVS 의 단점을 보안 하기위해 만들어진 시스템입니다.
SVN 을 기준으로 업데이트하고 서버에 업로드하는 형식으로 사용자가 언제 어떤 부분을 수정을 했는지에 대한 모든 소스의 로그가 남고 간단히 예전 버전으로 돌리기도 가능합니다.
더 자세한건 위키피디아를 참고 하세요.
http://ko.wikipedia.org/wiki/서브버전

SVN 구조
대략.. 아래 처럼 된다는 거만 알고 있으면 될듯 합니다.
사용자 삽입 이미지

1. SVN 설치
SVN 설치는 yum 으로 설치를 진행 합니다.
[root@ruo91 ~]# yum install -y subversion

2. SVN 사용자 추가
SVN 을 사용할 사용자를 추가 합니다.
[root@ruo91 ~]# adduser svn
[root@ruo91 ~]# passwd svn
Changing password for user svn.
New UNIX password:
Retype new UNIX password:
passwd: all authentication tokens updated successfully.

3. 저장소(Repository) 만들기
svnadmin 으로 해당 저장소를 만들어 줍니다.
[root@ruo91 ~]# svnadmin create --fs-type fsfs /home/svn/repos

repos 디렉토리 사용자/그룹 위임 설정을 합니다.
[root@ruo91 ~]# chown -R svn:svn /home/svn/repos
[root@ruo91 ~]# ls -al /home/svn/repos
합계 36
drwxr-xr-x 7 svn svn 4096 10월 24 05:35 .
drwx------ 4 svn svn 4096 10월 24 05:35 ..
-rw-r--r-- 1 svn svn  229 10월 24 05:35 README.txt
drwxr-xr-x 2 svn svn 4096 10월 24 05:35 conf
drwxr-xr-x 2 svn svn 4096 10월 24 05:35 dav
drwxr-sr-x 5 svn svn 4096 10월 24 05:35 db
-r--r--r-- 1 svn svn    2 10월 24 05:35 format
drwxr-xr-x 2 svn svn 4096 10월 24 05:35 hooks
drwxr-xr-x 2 svn svn 4096 10월 24 05:35 locks

4. SVN 설정 파일 추가/수정

기본 설정
[root@ruo91 ~]# vi /home/svn/repos/conf/svnserve.conf
[general]
# 익명 사용자 읽기 사용 여부
anon-access = read
# 인증 사용자 쓰기 사용 여부
auth-access = write
# 인증에 사용될 패스워드 설정 파일
password-db = passwd

사용자/비밀번호 설정
[root@ruo91 ~]# vi /home/svn/repos/conf/passwd
[users]
# svn 사용자의 비밀번호를 지정
# 사용자ID = 비밀번호 이런식..
svn = 123456

5. SVN 시작
[root@ruo91 ~]# svnserve -d -r /home/svn/

정상작동 확인
[root@ruo91 ~]# ps -aux | grep svnserv
root      2233  0.0  0.0  11592   796 ?        Ss   05:55   0:00 svnserve -d -r /home/svn/
[root@ruo91 ~]# netstat -ant | grep 3690
tcp        0      0 :::3690                     :::*                        LISTEN  

시스템 부팅시 자동으로 SVN 이 시작 되게 하려면 아래와 같이 합니다.
yum 으로 설치시에는 /etc/rc.d/init.d/subversion 실행 스크립트가 생성되지 않으므로 수동으로 추가 해줘야 합니다.
subversion 스크립트 작성
[root@ruo91 ~]# vi /etc/rc.d/init.d/subversion
#!/bin/bash
. /etc/rc.d/init.d/functions

[ -x /usr/bin/svnserve ] || exit 1

RETVAL=0
prog="svnserve"
desc="Subversion server"
OPTIONS="--threads --root /home/svn"

start() {
        echo -n $"Starting $desc ($prog): "
   daemon $prog -d $OPTIONS
   RETVAL=$?
   [ $RETVAL -eq 0 ] && touch /var/lock/subsys/$prog
   echo
}

stop() {
   echo -n $"Shutting down $desc ($prog): "
   killproc $prog
   RETVAL=$?
   [ $RETVAL -eq 0 ] && success || failure
   echo
   [ $RETVAL -eq 0 ] && rm -f /var/lock/subsys/$prog
   return $RETVAL
}

case "$1" in
  start)
   start
   ;;
  stop)
   stop
   ;;
  restart)
   stop
   start
   RETVAL=$?
   ;;
  condrestart)
        [ -e /var/lock/subsys/$prog ] && restart
   RETVAL=$?
   ;;
  *)
   echo $"Usage: $0 {start|stop|restart|condrestart}"
   RETVAL=1
esac

exit $RETVAL
EOF

시스템 부팅시 자동으로 시작
[root@ruo91 ~]# chkconfig subversion on

6. SVN 기본 디렉토리 만들기
소스 코드를 관리하기 위해서는 trunk , branches, tags 를 만들어 줘야 합니다.
필자는 Bash 쉘 사용자이므로 자신의 홈 디렉토리의 .bash_profile 을 아래와 같이 export 걸어 줬습니다.
[root@ruo91 ~]# vi ~/.bash_profile
SVN_EDITOR=/usr/bin/vim
export SVN_EDITOR

export 를 걸지 않으면 아래와 같이 나옵니다.
[root@ruo91 ~]# svn mkdir svn://192.168.0.28/repos/trunk
svn: 로그 메시지를 구하기 위해 외부 프로그램을 사용할 수 없습니다.
SVN_EDITOR 환경변수를 설정하시거나 --message (-m) 또는 --file (-F) 옵션을 사용하세요.
svn: 환경변수 SVN_EDITOR, VISUAL, EDITOR 중 하나는 설정하거나, 'editor-cmd' 를 구성화일에
명시해야합니다.

아래처럼 trunk 디렉토리를 만들어 주면 vim 에디터가 자동으로 나오게 됩니다.
[root@ruo91 ~]# svn mkdir svn://서버IP/repos/trunk
[root@ruo91 ~]# svn mkdir svn://192.168.0.28/repos/trunk
--이 줄 이하는 자동으로 제거됩니다--

A    svn://192.168.0.28/repos/trunk
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
"svn-commit.tmp" 4L, 75C                 1,0-1        모두

이때 :q 를 눌러 에디터에서 빠져 나옵니다.
:q
C 를 눌러 나옵니다.
로그 메시지가 변경되지 않았거나 지정되지 않았습니다
취소(A), 계속(C), 수정(E)
C
인증 영역을 사용하기 위해 root 사용자의 암호와 svn 사용자의 암호를 입력 해줍니다. (암호는 보안상 보이지 않음)
인증 영역(realm): <svn://192.168.0.28:3690> dbd294f2-a62a-422d-a146-2ff0ab99c42c
'root'의 암호:
인증 영역(realm): <svn://192.168.0.28:3690> dbd294f2-a62a-422d-a146-2ff0ab99c42c
사용자명:svn
'svn'의 암호:

커밋된 리비전 1.

branches 디렉토리 만들기 (trunk 와 반복..)
[root@ruo91 ~]# svn mkdir svn://192.168.0.28/repos/branches
로그 메시지가 변경되지 않았거나 지정되지 않았습니다
취소(A), 계속(C), 수정(E)
C

커밋된 리비전 2.

tags 디렉토리 만들기
[root@ruo91 ~]# svn mkdir svn://192.168.0.28/repos/tags
로그 메시지가 변경되지 않았거나 지정되지 않았습니다
취소(A), 계속(C), 수정(E)
C

커밋된 리비전 3.

위에서 만든 디렉토리를 확인 합니다.
[root@ruo91 ~]# svn list svn://192.168.0.28/repos
branches/
tags/
trunk/

7. 저장소 사용
필자는 원격 작업을 윈도우에서 하기 때문에 윈도우용 SVN 클라이언트(TortoiseSVN)를 이용했습니다.
다운로드는 http://tortoisesvn.net/ 에서 받으시고 설치 하세요.

TortoiseSVN 설치가 완료 되면 윈도우의 빈공간 오른쪽 마우스를 누르게 되면 아래와 같이 SVN Checkout 가 보입니다. 이것을 눌러줍니다.
사용자 삽입 이미지

체크아웃 설정창이 보이며 Repository URL 은 SVN 서버를 입력 해줍니다.

그 아래 체크아웃 후 저장 될 디렉토리를 원하는 곳으로 입력 해줍니다.

사용자 삽입 이미지

체크아웃 후 지정 된 디렉토리에 저장이 되었습니다.

사용자 삽입 이미지

이후 trunk 에 몇가지 파일을 만들어 줍니다.

사용자 삽입 이미지

빈공간에 마우스 우클릭하여 SVN Commit 을 눌러 줍니다.

사용자 삽입 이미지

Commit 화면이며 파일을 모두 체크 후 확인을 눌러 줍니다.

사용자 삽입 이미지

사용자 인증 창이 뜨며 SVN 서버에서 설정한 svn 사용자의 비밀번호를 입력 해줍니다.

사용자 삽입 이미지

인증 성공 후 Commit 이 완료 됩니다.

사용자 삽입 이미지

서버에서 체크아웃 해보면 Commit 이 정상적으로 완료 되었음을 볼수 있습니다.

[root@ruo91 ~]# svn checkout svn://192.168.0.28/repos repos
A    repos/trunk
A    repos/trunk/Hello.c
A    repos/trunk/Hello.tar
A    repos/branches
A    repos/tags
체크아웃된 리비전 4.
2009/10/24 15:06 2009/10/24 15:06

리눅스 samba 구축

from Linux 2009/10/22 11:00
리눅스와 윈도우 사이에서 파일을 서로 공유 하고자 할때 많이 사용합니다.
필자는 CentOS 5.3 에서 설치를 진행 하였습니다.

1. 삼바 설치
yum 으로 설치를 진행 하며 총 4가지 패키지인 samba, client, common, swat 가 설치 되어야 합니다.
[root@ruo91 ~]# yum -y install samba samba-client samba-common samba-swat

2. 삼바 사용자 추가 및 디렉토리 권한 설정
삼바 로그인을 위한 사용자를 추가 합니다.
[root@ruo91 ~]# useradd ruo91
[root@ruo91 ~]# passwd ruo91
Changing password for user ruo91.
New UNIX password:
Retype new UNIX password:
passwd: all authentication tokens updated successfully.
[root@ruo91 ~]# pdbedit -a ruo91
new password:
retype new password:
Unix username:        ruo91
NT username:
Account Flags:        [U          ]
User SID:             S-1-5-21-3429561750-263143194-684328599-2004
Primary Group SID:    S-1-5-21-3429561750-263143194-684328599-513
Full Name:
Home Directory:       \\ruo91\ruo91
HomeDir Drive:
Logon Script:
Profile Path:         \\ruo91\ruo91\profile
Domain:               RUO91
Account desc:
Workstations:
Munged dial:
Logon time:           0
Logoff time:          never
Kickoff time:         never
Password last set:    목, 22 10월 2009 00:01:05 KST
Password can change:  목, 22 10월 2009 00:01:05 KST
Password must change: never
Last bad password   : 0
Bad password count  : 0
Logon hours         : FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF

공유할 samba 하위 디렉토리 생성
[root@ruo91 ~]# mkdir /home/ruo91/samba
[root@ruo91 ~]# chown -R ruo91:ruo91 /home/ruo91/samba

3. 삼바 설정 파일 추가/수정
[root@ruo91 ~]# vi /etc/samba/smb.conf
[global]
# 작업 그룹 설정입니다.
# 윈도우에서는 기본값으로 "WORKGROUP" 으로
# 설정 되어 있으므로 그대로 입력 해줍니다.
workgroup = WORKGROUP
#
# 서버 제목입니다.
server string = CentOS-5.3 Samba Server
#
# 윈도우와 리눅스의 문자셋 설정
# 이렇게 해두면 한글이 안깨집니다.
dos charset = cp949
unix charset = cp949

[homes]
# 윈도우즈 탐색기의 "설명" 란에 표시될 내용입니다.
comment = Home Directories
#
# 공유할 디렉토리 설정 입니다.
path = /home/ruo91/samba
#
# 디렉토리 보기 여부입니다.
# no 로 설정 했다고 해서 접근이 불가한 것은 아닙니다.
browseable = no
#
# 쓰기 가능 여부입니다.
writable = yes
#
# 생성 되는 파일이나 디렉토리의 퍼미션 설정
create mask = 0777
directory mask = 0777

[public]
# 익명 사용자의 공유 폴더 설정입니다.
#
# 윈도우즈 탐색기의 "설명" 란에 표시될 내용입니다.
comment = Public Stuff
# 공유할 디렉토리 설정 부분이며 퍼미션을 755 또는 777을 설정 해주셔야 합니다.
path = /home/ruo91/public
# 익명사용자의 접근 허용 여부입니다.
public = yes
# 쓰기 가능 여부입니다.
writable = yes

4. SELinux 설정 변경
CentOS 에서는 기본적으로 samba 가 사용되지 않도록 SELinux 에 설정 되어 있는데 이것을 변경 해주셔야 합니다. SELinux 를 비활성화 합니다.
[root@ruo91 ~]# system-config-securitylevel

사용자 삽입 이미지

허용할 서비스에 삼바(Samba) 를 체크 해준 후 확인 하고 빠져 나옵니다.

사용자 삽입 이미지

5. 삼바 시작
위에서 설정한 것들을 적용을 위해 삼바 데몬을 시작 합니다.
[root@ruo91 ~]# service smb start
SMB서비스를 시작 중:                                       [  OK  ]
NMB서비스를 시작 중:                                       [  OK  ]

재부팅시 자동으로 실행 되기 위해 아래 처럼 해줍니다.
[root@ruo91 ~]# chkconfig smb on

또는 /etc/rc.local 에 추가
[root@ruo91 ~]# echo '/etc/init.d/smb start' >> /etc/rc.local
[root@ruo91 ~]# cat /etc/rc.local | grep smb
/etc/init.d/smb start

6. 삼바 테스트
윈도우에서 삼바 서버로 접속 하기 위해 시작 > 실행에 아래 명령어를 입력 합니다.
(필자의 가상 CentOS 서버 아이피 주소는 192.168.0.28 입니다.)
\\삼바서버IP
\\192.168.0.28

사용자 삽입 이미지

삼바 환경 설정 파일에서 설정한 디렉토리들이 보입니다.

사용자 삽입 이미지

ruo91 디렉토리에 들어가서 파일이 있는걸 볼수 있습니다.

사용자 삽입 이미지

자 그렇다면 테스트로 윈도우에서 텍스트 문서를 하나 만들어 보겠습니다.

사용자 삽입 이미지

서버에서 확인 해보면 한글이 깨지지 않았으며 정상적으로 생성 되어진 걸 볼수 있습니다.

[root@ruo91 ~]# ls -al /home/ruo91/samba
합계 20
drwxr-xr-x 3 ruo91 ruo91 4096 10월 22 00:14 .
drwxr-xr-x 4 root  root  4096 10월 21 23:41 ..
drwxr-xr-x 2 ruo91 ruo91 4096 10월 21 23:38 hello
-rw-r--r-- 1 ruo91 ruo91   81 10월 21 23:39 hello.c
-rw-r--r-- 1 ruo91 ruo91  228 10월 21 23:40 hello.tar.gz
-rwxr--r-- 1 ruo91 ruo91    0 10월 22 00:08 윈도우에서 만들어 봐쪄.txt

참고
http://wopose.blogspot.com/2009/10/vmware-centos-samba.html
2009/10/22 11:00 2009/10/22 11:00

리눅스 CVS 구축

from Linux 2009/10/21 22:25
CVS (Concurrent Versions System) 는 동시 버전 관리 시스템이며 보통 소프트웨어 프로젝트를 진행할 때, 파일로 이뤄진 모든 작업과 모든 변화를 추적하고, 여러 개발자(지역적으로 떨어진)가 협력하여 작업할 수 있게 합니다. 더 자세한건.. 위키피디아를 참고 하세요.
http://ko.wikipedia.org/wiki/CVS

1. CVS 설치

cvs 가 설치 되어 있는지 확인하고 아래 처럼 찾을수 없다면 cvs 를 설치 합니다.
[root@ruo91 ~]# cvs
-bash: cvs: command not found
[root@ruo91 ~]# yum -y install cvs

2. CVS 사용자, 그룹 생성

cvs 를 사용할 유저와 그룹을 생성 해주고 저장소 디렉토리에 유저, 그룹, 디렉토리 권한 등을 부여 해줘야 합니다.
[root@ruo91 ~]# groupadd cvs
[root@ruo91 ~]# useradd -g cvs -s /sbin/nologin cvs
[root@ruo91 ~]# chown -R cvs.cvs /home/cvs
[root@ruo91 ~]# chmod -R 770 /home/cvs

cvs -d 를 사용하여 지정된 디렉토리에 CVSROOT 라는 하위 디렉토리가 생성 해줍니다.
[root@ruo91 ~]# mkdir /home/cvs/ruo91
[root@ruo91 ~]# cvs -d /home/cvs/ruo91 init
[root@ruo91 ~]# chown -R cvs.cvs /home/cvs/ruo91
[root@ruo91 ~]# chmod -R 770 /home/cvs/ruo91
[root@ruo91 ~]# ls -al /home/cvs/ruo91 | grep CVSROOT
drwxrwxr-x 3 root root 4096 10월 21 20:58 CVSROOT

아파치의 htpasswd 바이너리 파일을 이용하여 crypt 알고리즘으로 생성 된 비밀번호를 생성 해줍니다.
[root@ruo91 ~]# /usr/local/apache2/bin/htpasswd -nb 사용자ID 비밀번호
[root@ruo91 ~]# /usr/local/apache2/bin/htpasswd -nb ruo91 123456
ruo91:tblgIWIzLSVqE
crypt 알고리즘으로 생성 된 비밀번호를 CVSROOT 디렉토리에서 passwd 파일을 생성 후 아래 처럼 내용을 추가 해줍니다.
[root@ruo91 ~]# echo 'ruo91:tblgIWIzLSVqE:cvs' >> /home/cvs/ruo91/CVSROOT/passwd
[root@ruo91 ~]# cat /home/cvs/ruo91/CVSROOT/passwd
ruo91:tblgIWIzLSVqE:cvs

ruo91:tblgIWIzLSVqE:cvs 를 자세히 보면 3개의 필드별로 :(세미콜론)을 사용하여 구분 하며
첫번째는 사용자 ID, 두번째는 아파치의 htpasswd 의 crypt 알고리즘으로 생성 된 비밀번호, 세번째는 cvs 사용자의 권한으로 접근의 의미 입니다.
사용자ID:암호화 된 비밀번호:cvs 사용자 권한으로 접근

3. CVS 서버 실행

저장소 디렉토리를 서비스 하기 위한 cvspserver 파일을 생성 해줍니다.
[root@ruo91 ~]# vi /etc/xinetd.d/cvspserver
service cvspserver
{
       disable         = no
       flags           = REUSE
       socket_type     = stream
       wait            = no
       user            = cvs
       server          = /usr/bin/cvs
       server_args     = -f --allow-root=/home/cvs/ruo91 pserver
}

적용을 위해 xinetd 데몬을 재시작 합니다.
[root@ruo91 ~]# service xinetd restart
xinetd 를 정지 중: [  OK  ]
xinetd (을)를 시작 중: [  OK  ]

cvs 서버가 실행 되고 있는지 확인 합니다. (기본 포트는 2401)
[root@ruo91 ~]# netstat -ant | grep 2401
tcp        0      0 0.0.0.0:2401                0.0.0.0:*                   LISTEN   

4. CVS 테스트
CVS 로그인
[root@ruo91 ~]# cvs -d :pserver:ruo91@localhost:/home/cvs/ruo91 login
Logging in to :pserver:ruo91@localhost:2401/home/cvs/ruo91
CVS password:

CVS 체크아웃 후 저장소 다운로드
[root@ruo91 ~]# cvs -d:pserver:ruo91@localhost:/home/cvs/ruo91 co httpd-2.2.14

아파치 2.2.14 다운로드 테스트...
[root@ruo91 ~]# cvs -d:pserver:ruo91@localhost:/home/cvs/ruo91 co httpd-2.2.14
cvs checkout: Updating httpd-2.2.14
cvs checkout: Updating httpd-2.2.14/build
cvs checkout: Updating httpd-2.2.14/build/pkg
cvs checkout: Updating httpd-2.2.14/build/rpm
cvs checkout: Updating httpd-2.2.14/build/win32
cvs checkout: Updating httpd-2.2.14/docs
cvs checkout: Updating httpd-2.2.14/docs/cgi-examples
cvs checkout: Updating httpd-2.2.14/docs/conf
cvs checkout: Updating httpd-2.2.14/docs/conf/extra
cvs checkout: Updating httpd-2.2.14/docs/docroot
cvs checkout: Updating httpd-2.2.14/docs/error
cvs checkout: Updating httpd-2.2.14/docs/error/include
cvs checkout: Updating httpd-2.2.14/docs/icons
cvs checkout: Updating httpd-2.2.14/docs/icons/small
cvs checkout: Updating httpd-2.2.14/docs/man
cvs checkout: Updating httpd-2.2.14/docs/man/tr
cvs checkout: Updating httpd-2.2.14/docs/manual
cvs checkout: Updating httpd-2.2.14/docs/manual/developer
cvs checkout: Updating httpd-2.2.14/docs/manual/faq
cvs checkout: Updating httpd-2.2.14/docs/manual/howto
cvs checkout: Updating httpd-2.2.14/docs/manual/images
cvs checkout: Updating httpd-2.2.14/docs/manual/misc
cvs checkout: Updating httpd-2.2.14/docs/manual/mod
cvs checkout: Updating httpd-2.2.14/docs/manual/platform
cvs checkout: Updating httpd-2.2.14/docs/manual/programs
cvs checkout: Updating httpd-2.2.14/docs/manual/rewrite
cvs checkout: Updating httpd-2.2.14/docs/manual/ssl
cvs checkout: Updating httpd-2.2.14/docs/manual/style
cvs checkout: Updating httpd-2.2.14/docs/manual/style/css
cvs checkout: Updating httpd-2.2.14/docs/manual/style/lang
cvs checkout: Updating httpd-2.2.14/docs/manual/style/latex
cvs checkout: Updating httpd-2.2.14/docs/manual/style/xsl
cvs checkout: Updating httpd-2.2.14/docs/manual/style/xsl/util
cvs checkout: Updating httpd-2.2.14/docs/manual/vhosts
cvs checkout: Updating httpd-2.2.14/include
cvs checkout: Updating httpd-2.2.14/modules
cvs checkout: Updating httpd-2.2.14/modules/aaa
cvs checkout: Updating httpd-2.2.14/modules/arch
cvs checkout: Updating httpd-2.2.14/modules/arch/netware
cvs checkout: Updating httpd-2.2.14/modules/arch/win32
cvs checkout: Updating httpd-2.2.14/modules/cache
cvs checkout: Updating httpd-2.2.14/modules/database
cvs checkout: Updating httpd-2.2.14/modules/dav
cvs checkout: Updating httpd-2.2.14/modules/dav/fs
cvs checkout: Updating httpd-2.2.14/modules/dav/lock
cvs checkout: Updating httpd-2.2.14/modules/dav/main
cvs checkout: Updating httpd-2.2.14/modules/debug
cvs checkout: Updating httpd-2.2.14/modules/echo
cvs checkout: Updating httpd-2.2.14/modules/experimental
cvs checkout: Updating httpd-2.2.14/modules/filters
cvs checkout: Updating httpd-2.2.14/modules/generators
cvs checkout: Updating httpd-2.2.14/modules/http
cvs checkout: Updating httpd-2.2.14/modules/ldap
cvs checkout: Updating httpd-2.2.14/modules/loggers
cvs checkout: Updating httpd-2.2.14/modules/mappers
cvs checkout: Updating httpd-2.2.14/modules/metadata
cvs checkout: Updating httpd-2.2.14/modules/proxy
cvs checkout: Updating httpd-2.2.14/modules/ssl
cvs checkout: Updating httpd-2.2.14/modules/test
cvs checkout: Updating httpd-2.2.14/os
cvs checkout: Updating httpd-2.2.14/os/beos
cvs checkout: Updating httpd-2.2.14/os/bs2000
cvs checkout: Updating httpd-2.2.14/os/netware
cvs checkout: Updating httpd-2.2.14/os/os2
cvs checkout: Updating httpd-2.2.14/os/tpf
cvs checkout: Updating httpd-2.2.14/os/tpf/samples
cvs checkout: Updating httpd-2.2.14/os/unix
cvs checkout: Updating httpd-2.2.14/os/win32
cvs checkout: Updating httpd-2.2.14/server
cvs checkout: Updating httpd-2.2.14/server/mpm
cvs checkout: Updating httpd-2.2.14/server/mpm/beos
cvs checkout: Updating httpd-2.2.14/server/mpm/experimental
cvs checkout: Updating httpd-2.2.14/server/mpm/experimental/event
cvs checkout: Updating httpd-2.2.14/server/mpm/mpmt_os2
cvs checkout: Updating httpd-2.2.14/server/mpm/netware
cvs checkout: Updating httpd-2.2.14/server/mpm/prefork
cvs checkout: Updating httpd-2.2.14/server/mpm/winnt
cvs checkout: Updating httpd-2.2.14/server/mpm/worker
cvs checkout: Updating httpd-2.2.14/srclib
cvs checkout: Updating httpd-2.2.14/srclib/apr
cvs checkout: Updating httpd-2.2.14/srclib/apr/atomic
cvs checkout: Updating httpd-2.2.14/srclib/apr/atomic/netware
cvs checkout: Updating httpd-2.2.14/srclib/apr/atomic/os390
cvs checkout: Updating httpd-2.2.14/srclib/apr/atomic/unix
cvs checkout: Updating httpd-2.2.14/srclib/apr/atomic/win32
cvs checkout: Updating httpd-2.2.14/srclib/apr/build
cvs checkout: Updating httpd-2.2.14/srclib/apr/build/pkg
cvs checkout: Updating httpd-2.2.14/srclib/apr/build/rpm
cvs checkout: Updating httpd-2.2.14/srclib/apr/docs
cvs checkout: Updating httpd-2.2.14/srclib/apr/dso
cvs checkout: Updating httpd-2.2.14/srclib/apr/dso/aix
cvs checkout: Updating httpd-2.2.14/srclib/apr/dso/beos
cvs checkout: Updating httpd-2.2.14/srclib/apr/dso/netware
cvs checkout: Updating httpd-2.2.14/srclib/apr/dso/os2
cvs checkout: Updating httpd-2.2.14/srclib/apr/dso/os390
cvs checkout: Updating httpd-2.2.14/srclib/apr/dso/unix
cvs checkout: Updating httpd-2.2.14/srclib/apr/dso/win32
cvs checkout: Updating httpd-2.2.14/srclib/apr/file_io
cvs checkout: Updating httpd-2.2.14/srclib/apr/file_io/netware
cvs checkout: Updating httpd-2.2.14/srclib/apr/file_io/os2
cvs checkout: Updating httpd-2.2.14/srclib/apr/file_io/unix
cvs checkout: Updating httpd-2.2.14/srclib/apr/file_io/win32
cvs checkout: Updating httpd-2.2.14/srclib/apr/include
cvs checkout: Updating httpd-2.2.14/srclib/apr/include/arch
cvs checkout: Updating httpd-2.2.14/srclib/apr/include/arch/aix
cvs checkout: Updating httpd-2.2.14/srclib/apr/include/arch/beos
cvs checkout: Updating httpd-2.2.14/srclib/apr/include/arch/netware
cvs checkout: Updating httpd-2.2.14/srclib/apr/include/arch/os2
cvs checkout: Updating httpd-2.2.14/srclib/apr/include/arch/os390
cvs checkout: Updating httpd-2.2.14/srclib/apr/include/arch/unix
cvs checkout: Updating httpd-2.2.14/srclib/apr/include/arch/win32
cvs checkout: Updating httpd-2.2.14/srclib/apr/locks
cvs checkout: Updating httpd-2.2.14/srclib/apr/locks/beos
cvs checkout: Updating httpd-2.2.14/srclib/apr/locks/netware
cvs checkout: Updating httpd-2.2.14/srclib/apr/locks/os2
cvs checkout: Updating httpd-2.2.14/srclib/apr/locks/unix
cvs checkout: Updating httpd-2.2.14/srclib/apr/locks/win32
cvs checkout: Updating httpd-2.2.14/srclib/apr/memory
cvs checkout: Updating httpd-2.2.14/srclib/apr/memory/unix
cvs checkout: Updating httpd-2.2.14/srclib/apr/misc
cvs checkout: Updating httpd-2.2.14/srclib/apr/misc/netware
cvs checkout: Updating httpd-2.2.14/srclib/apr/misc/unix
cvs checkout: Updating httpd-2.2.14/srclib/apr/misc/win32
cvs checkout: Updating httpd-2.2.14/srclib/apr/mmap
cvs checkout: Updating httpd-2.2.14/srclib/apr/mmap/unix
cvs checkout: Updating httpd-2.2.14/srclib/apr/mmap/win32
cvs checkout: Updating httpd-2.2.14/srclib/apr/network_io
cvs checkout: Updating httpd-2.2.14/srclib/apr/network_io/beos
cvs checkout: Updating httpd-2.2.14/srclib/apr/network_io/os2
cvs checkout: Updating httpd-2.2.14/srclib/apr/network_io/unix
cvs checkout: Updating httpd-2.2.14/srclib/apr/network_io/win32
cvs checkout: Updating httpd-2.2.14/srclib/apr/passwd
cvs checkout: Updating httpd-2.2.14/srclib/apr/poll
cvs checkout: Updating httpd-2.2.14/srclib/apr/poll/os2
cvs checkout: Updating httpd-2.2.14/srclib/apr/poll/unix
cvs checkout: Updating httpd-2.2.14/srclib/apr/random
cvs checkout: Updating httpd-2.2.14/srclib/apr/random/unix
cvs checkout: Updating httpd-2.2.14/srclib/apr/shmem
cvs checkout: Updating httpd-2.2.14/srclib/apr/shmem/beos
cvs checkout: Updating httpd-2.2.14/srclib/apr/shmem/os2
cvs checkout: Updating httpd-2.2.14/srclib/apr/shmem/unix
cvs checkout: Updating httpd-2.2.14/srclib/apr/shmem/win32
cvs checkout: Updating httpd-2.2.14/srclib/apr/strings
cvs checkout: Updating httpd-2.2.14/srclib/apr/support
cvs checkout: Updating httpd-2.2.14/srclib/apr/support/unix
cvs checkout: Updating httpd-2.2.14/srclib/apr/tables
cvs checkout: Updating httpd-2.2.14/srclib/apr/test
cvs checkout: Updating httpd-2.2.14/srclib/apr/test/data
cvs checkout: Updating httpd-2.2.14/srclib/apr/test/internal
cvs checkout: Updating httpd-2.2.14/srclib/apr/threadproc
cvs checkout: Updating httpd-2.2.14/srclib/apr/threadproc/beos
cvs checkout: Updating httpd-2.2.14/srclib/apr/threadproc/netware
cvs checkout: Updating httpd-2.2.14/srclib/apr/threadproc/os2
cvs checkout: Updating httpd-2.2.14/srclib/apr/threadproc/unix
cvs checkout: Updating httpd-2.2.14/srclib/apr/threadproc/win32
cvs checkout: Updating httpd-2.2.14/srclib/apr/time
cvs checkout: Updating httpd-2.2.14/srclib/apr/time/unix
cvs checkout: Updating httpd-2.2.14/srclib/apr/time/win32
cvs checkout: Updating httpd-2.2.14/srclib/apr/user
cvs checkout: Updating httpd-2.2.14/srclib/apr/user/netware
cvs checkout: Updating httpd-2.2.14/srclib/apr/user/unix
cvs checkout: Updating httpd-2.2.14/srclib/apr/user/win32
cvs checkout: Updating httpd-2.2.14/srclib/apr-util
cvs checkout: Updating httpd-2.2.14/srclib/apr-util/buckets
cvs checkout: Updating httpd-2.2.14/srclib/apr-util/build
cvs checkout: Updating httpd-2.2.14/srclib/apr-util/build/pkg
cvs checkout: Updating httpd-2.2.14/srclib/apr-util/build/rpm
cvs checkout: Updating httpd-2.2.14/srclib/apr-util/crypto
cvs checkout: Updating httpd-2.2.14/srclib/apr-util/dbd
cvs checkout: Updating httpd-2.2.14/srclib/apr-util/dbm
cvs checkout: Updating httpd-2.2.14/srclib/apr-util/dbm/sdbm
cvs checkout: Updating httpd-2.2.14/srclib/apr-util/docs
cvs checkout: Updating httpd-2.2.14/srclib/apr-util/encoding
cvs checkout: Updating httpd-2.2.14/srclib/apr-util/hooks
cvs checkout: Updating httpd-2.2.14/srclib/apr-util/include
cvs checkout: Updating httpd-2.2.14/srclib/apr-util/include/private
cvs checkout: Updating httpd-2.2.14/srclib/apr-util/ldap
cvs checkout: Updating httpd-2.2.14/srclib/apr-util/memcache
cvs checkout: Updating httpd-2.2.14/srclib/apr-util/misc
cvs checkout: Updating httpd-2.2.14/srclib/apr-util/strmatch
cvs checkout: Updating httpd-2.2.14/srclib/apr-util/test
cvs checkout: Updating httpd-2.2.14/srclib/apr-util/test/data
cvs checkout: Updating httpd-2.2.14/srclib/apr-util/uri
cvs checkout: Updating httpd-2.2.14/srclib/apr-util/xlate
cvs checkout: Updating httpd-2.2.14/srclib/apr-util/xml
cvs checkout: Updating httpd-2.2.14/srclib/apr-util/xml/expat
cvs checkout: Updating httpd-2.2.14/srclib/apr-util/xml/expat/conftools
cvs checkout: Updating httpd-2.2.14/srclib/apr-util/xml/expat/lib
cvs checkout: Updating httpd-2.2.14/srclib/pcre
cvs checkout: Updating httpd-2.2.14/srclib/pcre/doc
cvs checkout: Updating httpd-2.2.14/srclib/pcre/testdata
cvs checkout: Updating httpd-2.2.14/support
cvs checkout: Updating httpd-2.2.14/support/SHA1
cvs checkout: Updating httpd-2.2.14/support/win32
cvs checkout: Updating httpd-2.2.14/test
2009/10/21 22:25 2009/10/21 22:25

리눅스 NFS 구축

from Linux 2009/10/15 05:54
NFS(Network File System)는 썬 마이크로 시스템(SUN)에서 네트워크를 통해 파일을 공유할 수 있도록 만든 프로토콜 이며 NFS의 하드웨어, 운영체제, 네트워크 구조가 서로 달라도 파일을 공유 할수 있도록 해줍니다.

NFS는 리눅스에서 윈도우 사용자가 파티션을 마운트하여 사용하듯이 NFS서버의 특정 디렉토리를 클라이언트에서 마운트하여 자신의 영역인것 마냥 사용하는 것을 말합니다.

NFS 는 RPC 를 이용하기 때문에 NFS, RPC 관련 패키지인 portmap 설치 되어 있는지 확인 해야 합니다.
필자는 CentOS 5.3 에서 구축했으며 기본적으로 portmap 설치와 옵션이 활성화 되어 있습니다.
만약 활성화가 되어 있지 않다면 수동으로 시작 해줍니다.

portmap 설치 확인
[root@ruo91 ~]# rpm -qa | grep portmap
portmap-4.0-65.2.2.1

portmap 시작
[root@ruo91 ~]# /etc/init.d/portmap start
portmap (을)를 시작 중: [  OK  ]

NFS 시작
[root@ruo91 ~]# /etc/init.d/nfs start
NFS 서비스를 시작 중:  [  OK  ]
NFS 쿼터를 시작 중: [  OK  ]
NFS 데몬을 시작 중: [  OK  ]
NFS mountd를 시작 중: [  OK  ]

portmap, nfs 가 실행 되고 있는지 확인
[root@ruo91 ~]# rpcinfo -p
   프로그램 버전 원형   포트
    100000    2   tcp    111  portmapper
    100000    2   udp    111  portmapper
    100011    1   udp    625  rquotad
    100011    2   udp    625  rquotad
    100011    1   tcp    628  rquotad
    100011    2   tcp    628  rquotad
    100003    2   udp   2049  nfs
    100003    3   udp   2049  nfs
    100003    4   udp   2049  nfs
    100021    1   udp  54868  nlockmgr
    100021    3   udp  54868  nlockmgr
    100021    4   udp  54868  nlockmgr
    100003    2   tcp   2049  nfs
    100003    3   tcp   2049  nfs
    100003    4   tcp   2049  nfs
    100021    1   tcp  36016  nlockmgr
    100021    3   tcp  36016  nlockmgr
    100021    4   tcp  36016  nlockmgr
    100005    1   udp    654  mountd
    100005    1   tcp    657  mountd
    100005    2   udp    654  mountd
    100005    2   tcp    657  mountd
    100005    3   udp    654  mountd
    100005    3   tcp    657  mountd

마운트할 디렉토리를 설정하기 위해 /etc/exports 에 아래와 같이 추가 해줍니다.
(읽기 쓰기가 가능)
[root@ruo91 ~]# echo '/home/ruo91/public_html *(rw)' >> /etc/exports

NFS를 재시작을 하여 설정을 적용 해줍니다.
[root@ruo91 ~]# /etc/init.d/nfs restart
NFS mountd를 종료 중: [  OK  ]
NFS 데몬을 종료 중: [  OK  ]
NFS quota를 종료 중: [  OK  ]
NFS 서비스를 종료 중:  [  OK  ]
NFS 서비스를 시작 중:  [  OK  ]
NFS 쿼터를 시작 중: [  OK  ]
NFS 데몬을 시작 중: [  OK  ]
NFS mountd를 시작 중: [  OK  ]

위에서 설정한 NFS 서버의 디렉토리를 다른 서버에서 마운트를 하기 위해 아래와 같이 해줍니다.
/home/nfs 라는 디렉토리를 생성합니다.
[root@ruo91 ~]# mkdir /home/nfs
[root@ruo91 ~]# ls -al /home/nfs
total 4
drwxr-xr-x  2 root  wheel  512 10 15 13:40 .
drwxr-xr-x  4 root  wheel  512 10 15 13:40 ..

NFS 서버에서 설정된 디렉토리를 현재 /home/nfs 디렉토리로 마운트를 합니다.
[root@ruo91 ~]# mount -t nfs 서버아이피:NFS 설정 디렉토리 마운트 할 디렉토리
[root@ruo91 ~]# mount -t nfs 192.168.0.100:/home/ruo91/public_html /home/nfs

마운트 된 디렉토리 확인 합니다.
이후 파일들을 추가하건 삭제를 하건.. 마음대로 할수 있으며 서버에서 동일하게 적용이 됩니다.
[root@ruo91 ~]# ls -al /home/nfs
total 38
drwxrwxrwx  7 ruo91  ruo91  4096 10 15 13:40 .
drwxr-xr-x  4 root   wheel   512 10 15 13:40 ..
-rw-r--r--  1 root   wheel   309 10 15 13:40 backup-2009-10-16.tar.gz
-rw-r--r--  1 root   wheel    81 10 15 13:39 hello.c
drwxr-xr-x  2 root   wheel  4096 10 15 13:38 메롱
drwxr-xr-x  2 root   wheel  4096 10 15 13:38 방가
drwxr-xr-x  2 root   wheel  4096 10 15 13:38 하이
drwxr-xr-x  2 root   wheel  4096 10 15 13:38 헬로우
drwxr-xr-x  2 root   wheel  4096 10 15 13:38 히히

NFS 설정 디렉토리를 알고자 할때 아래 명령어를 사용하면 쉽게 알수 있습니다.
[root@ruo91 ~]# showmount -e NFS 서버 아이피
[root@ruo91 ~]# showmount -e 192.168.0.100
Exports list on 192.168.0.100:
/home/ruo91/public_html            *

마운트 된 상태에서 /home/nfs 디렉토리를 삭제 해보면 바쁘다고 안된다고 하네요.. 힝..
[root@ruo91 ~]# rm -rf /home/nfs
rm: /home/nfs/: Device busy

이럴 때는 마운트를 해제 해주셔야 합니다.
[root@ruo91 ~]# umount /home/nfs
2009/10/15 05:54 2009/10/15 05:54

FreeBSD - rsync 설치

from FreeBSD 2009/10/14 09:55
rsync 는 서버간의 데이터를 동기화 할때 주로 사용하며 파일크기, 시간 변화등을 이용하여 동기화를 합니다.
FreeBSD 에서 ports 로 설치를 진행합니다.
[root@ruo91 ~]# cd /usr/ports/net/rsync && make install clean

설치가 완료 되면 /etc/rc.conf 에 rsync 를 사용 가능하도록 설정 해줍니다.
[root@ruo91 ~]# echo 'rsyncd_enable="YES"' >> /etc/rc.conf

설치된 디렉토리에 접근하여 rsyncd.conf 를 사용자 환경에 맞게 수정 해줍니다.
[root@ruo91 ~]# vi /usr/local/etc/rsyncd.conf
# 서비스명
[yongbok]
        # rsync 할 디렉토리 설정
        path = /home/ruo91/public_html
        # nobody 권한으로 실행
        uid  = nobody
        gid  = nobody
        # chroot 사용 여부
        use chroot = yes
        # 읽기만 가능
        read only  = yes
        # 접속 가능 한 아이피 설정
        hosts allow = 192.168.0.200
        # 설명 부분
        comment = ruo91 public_html copy that
        # 최대 접속
        MAX CONNECTIONS = 10

rsync 데몬을 실행합니다.
[root@ruo91 ~]# /usr/local/etc/rc.d/rsyncd start
Starting rsyncd.

rsync 프로세스를 확인을 합니다.
[root@ruo91 ~]# ps -aux | grep rsync
root  54890  0.0  0.2  3128  1604  ??  Is    6:36PM   0:00.02 /usr/local/bin/rsync --daemon

동기화 하고자 하는 서버에 rsync 명령어를 통해 데이터를 동기화 합니다.
rsync –avz 서버IP::서비스명 동기화 할 디렉토리 경로
rsync 옵션
-v verbose (자세하게 보여줌)
-a archive mode
-u update only(새로운 파일을 덮어쓰지 않음)
--delete 서버쪽에 없고 클라이언트쪽에만 있는 파일을 지움
-z compress (전송시 압축을 함)
--daemon 데몬 모드로 운영함 (이건 inetd.conf에 지정할 때 필요함)
-r recursive (하위 디렉토리까지 포함)
-l 심볼릭 링크 재생성
-p 퍼미션 업데이트
-t 변경시간 전송 (이것이 없으면 전송한 시간으로 바뀜)
-g 그룹이름 변경

사용 예
[root@ruo91 ~]# rsync -avz 192.168.0.100::yongbok /home/ruo91/public_html
receiving file list ... done
./
hello.c
hello.tar.gz

sent 86 bytes  received 488 bytes  1148.00 bytes/sec
total size is 282  speedup is 0.49
[root@ruo91 ~]# ls -al /home/ruo91/public_html
합계 24
drwxrwxrwx 2  1001  1001 4096 10월 14 18:30 .
drwx------ 4 ruo91 ruo91 4096 10월 14 07:18 ..
-rwxrwxrwx 1  1001  1001   82 10월 14 18:29 hello.c
-rwxrwxrwx 1  1001  1001  200 10월 14 18:30 hello.tar.gz
2009/10/14 09:55 2009/10/14 09:55

사용자,그룹 추가/삭제

from Linux 2009/10/13 08:13
사용자 추가
[root@ruo91 ~]# useradd ruo91

사용자 비밀번호 설정 (파란색 부분은 보안상 보이지 않음)
[root@ruo91 ~]# passwd ruo91
Changing password for user ruo91.
New UNIX password:
Retype new UNIX password:
passwd: all authentication tokens updated successfully.

사용자 삭제
[root@ruo91 ~]# userdel --help
사용법: userdel [옵션] <로그인>

옵션:
  -f, --force             파일의 소유자가 아니더라도 강제로 지웁니다
  -h, --help             이 도움말 메시지를 표시하고 끝냅니다
  -r, --remove          홈 디렉토리와 메일 저장소을 지웁니다
[root@ruo91 ~]# userdel -r ruo91

사용자가 잘 지워졌는지 확인.. 사용자가 잘 지워졌다면 아무것도 안나옴
[root@ruo91 ~]# cat /etc/passwd | grep ruo91

사용자 그룹 추가
현재 그룹 확인
[ruo91@ruo91 ~]$ id
uid=500(ruo91) gid=500(ruo91) groups=500(ruo91)

yongbok 이라는 이름의 그룹 추가
[root@ruo91 ~]# groupadd yongbok

ruo91 사용자의 그룹을 yongbok 그룹으로 변경
[root@ruo91 ~]# usermod -g yongbok ruo91

ruo91 사용자로 재로그인 후 그룹 변경 확인
[ruo91@ruo91 ~]$ id
uid=500(ruo91) gid=501(yongbok) groups=501(yongbok)

사용자 그룹 삭제
[root@ruo91 ~]# groupdel ruo91
2009/10/13 08:13 2009/10/13 08:13
FreeBSD 에서 한글 로케일을 변경하고 싶을 경우 자신의 홈 디렉토리에서 .cshrc 파일에 아래와 같이 추가 해준다.
ruo91# echo 'setenv LANG ko_KR.eucKR' >> ~/.cshrc
ruo91# echo 'setenv LC_ALL ko_KR.eucKR' >> ~/.cshrc

위의 설정을 적용하고 로케일이 변경됐는지 확인 한다.
ruo91# source ~/.cshrc
ruo91# locale
LANG=ko_KR.eucKR
LC_CTYPE="ko_KR.eucKR"
LC_COLLATE="ko_KR.eucKR"
LC_TIME="ko_KR.eucKR"
LC_NUMERIC="ko_KR.eucKR"
LC_MONETARY="ko_KR.eucKR"
LC_MESSAGES="ko_KR.eucKR"
LC_ALL=ko_KR.eucKR

Bash 쉘 사용자라면 .profile 파일에 아래와 같이 추가 해주면 된다.
[root@ruo91 ~]# echo 'export LANG=ko_KR.eucKR' >> ~/.profile
[root@ruo91 ~]# source ~/.profile
[root@ruo91 ~]# locale
LANG=ko_KR.eucKR
LC_CTYPE="ko_KR.eucKR"
LC_COLLATE="ko_KR.eucKR"
LC_TIME="ko_KR.eucKR"
LC_NUMERIC="ko_KR.eucKR"
LC_MONETARY="ko_KR.eucKR"
LC_MESSAGES="ko_KR.eucKR"
LC_ALL=ko_KR.eucKR
2009/10/11 09:51 2009/10/11 09:51

AWstats 설치

from Linux 2009/10/08 02:44
Webalizer 보다 깔끔한 웹 서버 로그분석기인 AWStats 을 설치 하는 방법이다.
아래의 홈페이지에서 최신 Stable 버전을 받자.
http://awstats.sourceforge.net/#DOWNLOAD

AWStats 설치
awstats/tools 디렉토리에 있는 awstats_configure.pl 를 이용하여 설치를 진행하며 파란색 부분을 유심히 보길 바란다.
[root@ruo91 ~]# wget http://prdownloads.sourceforge.net/awstats/awstats-6.9.tar.gz
[root@ruo91 ~]# tar xzvf awstats-6.9.tar.gz
[root@ruo91 ~]# mv awstats-6.9 /usr/local/awstats
[root@ruo91 ~]# chmod 755 /usr/local/awstats
[root@ruo91 ~]# cd /usr/local/awstats/tools
[root@ruo91 ~]# ./awstats_configure.pl

아파치의 httpd.conf 설정 파일을 지정 해주면 된다. AWstats 에서는 httpd.conf 내용 중 로그 방식이 common 으로 되어 있으면 경고 메세지가 나오며 combined 방식으로 로그가 설정 되어야만 경고 메세지가 뜨질 않는다.
----- AWStats awstats_configure 1.0 (build 1.8) (c) Laurent Destailleur -----
This tool will help you to configure AWStats to analyze statistics for
one web server. You can try to use it to let it do all that is possible
in AWStats setup, however following the step by step manual setup
documentation (docs/index.html) is often a better idea. Above all if:
- You are not an administrator user,
- You want to analyze downloaded log files without web server,
- You want to analyze mail or ftp log files instead of web log files,
- You need to analyze load balanced servers log files,
- You want to 'understand' all possible ways to use AWStats...
Read the AWStats documentation (docs/index.html).

-----> Running OS detected: Linux, BSD or Unix

-----> Check for web server install

Enter full config file path of your Web server.
Example: /etc/httpd/httpd.conf
Example: /usr/local/apache2/conf/httpd.conf
Example: c:\Program files\apache group\apache\conf\httpd.conf
Config file path ('none' to skip web server setup):
> /usr/local/apache2/conf/httpd.conf

새로운 프로파일을 생성할지 물어본다. y 를 눌러 새로 생성해주자.
-----> Check and complete web server config file '/usr/local/apache2/conf/httpd.conf'
  Add 'Alias /awstatsclasses "/usr/local/awstats/wwwroot/classes/"'
  Add 'Alias /awstatscss "/usr/local/awstats/wwwroot/css/"'
  Add 'Alias /awstatsicons "/usr/local/awstats/wwwroot/icon/"'
  Add 'ScriptAlias /awstats/ "/usr/local/awstats/wwwroot/cgi-bin/"'
  Add '<Directory>' directive
  AWStats directives added to Apache config file.

-----> Update model config file '/usr/local/awstats/wwwroot/cgi-bin/awstats.model.conf'
  File awstats.model.conf updated.

-----> Need to create a new config file ?
Do you want me to build a new AWStats config/profile
file (required if first install) [y/N] ? y

새로 생성한 프로파일 이름을 지정 해준다.
만약 ruo91 이라고 지정 해줬다면 awstats.ruo91.conf 파일로 생성 된다.
(도메인으로 입력 했다면 awstats.www.yongbok.net.conf 로 생성 된다.)
-----> Define config file name to create
What is the name of your web site or profile analysis ?
Example: www.mysite.com
Example: demo
Your web site, virtual server or profile name:
> www.yongbok.net

config 파일이 저장될 디렉토리를 지정 해준다. 기본값은 /etc/awstats 이다.
-----> Define config file path
In which directory do you plan to store your config file(s) ?
Default: /etc/awstats
Directory path to store config file(s) (Enter for default):
> /etc/awstats

새로운 프로파일이 생성 되었으며 엔터를 눌러 설치를 완료 한다.
-----> Create config file '/etc/awstats/awstats.www.yongbok.net.conf'
 Config file /etc/awstats/awstats.www.yongbok.net.conf created.

-----> Add update process inside a scheduler
Sorry, configure.pl does not support automatic add to cron yet.
You can do it manually by adding the following command to your cron:
/usr/local/awstats/wwwroot/cgi-bin/awstats.pl -update -config=www.yongbok.net
Or if you have several config files and prefer having only one command:
/usr/local/awstats/tools/awstats_updateall.pl now
Press ENTER to continue...
A SIMPLE config file has been created: /etc/awstats/awstats.www.yongbok.net.conf
You should have a look inside to check and change manually main parameters.
You can then manually update your statistics for 'www.yongbok.net' with command:
> perl awstats.pl -update -config=www.yongbok.net
You can also read your statistics for 'www.yongbok.net' with URL:
> http://localhost/awstats/awstats.pl?config=www.yongbok.net

Press ENTER to finish...

생성된 프로파일을 수정 해준다.
[root@ruo91 ~]# cd /etc/awstats
[root@ruo91 ~]# vi /etc/awstats/awstats.www.yongbok.net.conf
# 로그 파일 지정
# 기본값 LogFile="/var/log/httpd/mylog.log"
# 필자는 아파치의 logrotate 를 사용하여 로그를 분리하므로 아래와 같이 설정 해줌
LogFile="/home/apache2-log/www/www-access-%YYYY-%MM-%DD.log"
#
# 언어 설정 (기본값 auto)
# 한글로 사용 가능 하도록 ko 로 변경
Lang="ko"

/var/lib 디렉토리에 awstats 하위 디렉토리를 생성 해준다.
[root@ruo91 ~]# mkdir /var/lib/awstats

해당 로그에 대한 자료를 웹에서 확인 하려면 프로파일이 업데이트 되어야 하므로 아래와 같이 한다.
[root@ruo91 ~]# /usr/local/awstats/tools/awstats_updateall.pl now
Running '"/usr/local/awstats/wwwroot/cgi-bin/awstats.pl" -update -config=www.yongbok.net -configdir="/etc/awstats"' to update config www.yongbok.net
Create/Update database for config "/etc/awstats/awstats.www.yongbok.net.conf"
by AWStats version 6.9 (build 1.925)
From data in log file "/home/apache2-log/www/www-access-2009-10-08.log"...
Phase 1 : First bypass old records, searching new record...
Direct access after last parsed record (after line 475)
Jumped lines in file: 475
 Found 475 already parsed records.
Parsed lines in file: 1
 Found 0 dropped records,
 Found 0 corrupted records,
 Found 0 old records,
 Found 1 new qualified records.

로그가 변경 될때 마다 수동으로 업데이트하기 번거우므로 crontab 으로 5분마다 업데이트 하도록 설정 한다.
[root@ruo91 ~]# echo \
'*/5    *    *    *    *    root    /usr/local/awstats/tools/awstats_updateall.pl now' >> /etc/crontab

정상 등록 되었나 확인
[root@ruo91 ~]# cat /etc/crontab | grep awstats
*/5     *       *       *       *       root    /usr/local/awstats/tools/awstats_updateall.pl now

이제 웹 페이지에서 확인 해보면 된다.
http://www.yourdomain.com/awstats/awstats.pl?config=config-file
사용자 삽입 이미지
사용자 삽입 이미지

2009/10/08 02:44 2009/10/08 02:44