[CentOS] apache + subversion + trac 세팅

2010. 11. 26. 10:42OS/CentOS

svn 설치시 기본 저장소는 /var/www/svn 으로 하며 trac 은 /var/www/trac 로 사용합니다.

1. Apache 설치
아파치가 설치 되어 있는지 확인 합니다. (CentOS 5.4에서는 자동 설치 되어 있는듯..)
[root@localhost ~]# rpm -aq | grep httpd
system-config-httpd-1.3.3.3-1.el5
httpd-2.2.3-31.el5.centos

만약 설치가 안된 경우라면 설치를 진행 합니다.
[root@localhost ~]# yum install -y httpd
[root@localhost ~]# chkconfig httpd on

2. subversion (SVN) 설치
SVN 을 설치하게 되면 의존성 패키지인 neon 과 perl-URI 가 같이 설치 됩니다.
[root@localhost ~]# yum install -y subversion


subversion 스크립트 생성

[root@localhost ~]# touch /etc/init.d/subversion

[root@localhost ~]# chmod +x /etc/init.d/subversion

[root@localhost ~]# vi /etc/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 /var/www/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


3. Apache + SVN 연동
아파치와 SVN을 연동하기 위해서 mod_dav_svn 을 설치 합니다.
[root@localhost ~]# yum install -y mod_dav_svn

설치가 완료 되면 httpd/modules 디렉토리에 두가지의 모듈이 있는걸 확인 할수 있습니다.
[root@localhost ~]# find /usr/lib/ | grep svn
/usr/lib/httpd/modules/mod_dav_svn.so
/usr/lib/httpd/modules/mod_authz_svn.so

또한 httpd.conf 에 위 두가지 모듈을 따로 추가 하지 않아도 이미 subversion.conf 에 있기 때문에 몇가지 설정 만 해주시면 됩니다.

svn 디렉토리와 SVN 사용자 계정을 생성하고 아파치 계정이 접근할수 있도록 변경 합니다.
[root@localhost ~]# mkdir -p /var/www/svn
[root@localhost ~]# cd /var/www/svn
[root@localhost ~]# svnadmin create
repos
[root@localhost ~]# chown -R apache.apache repos

SVN 사용자의 인증 패스워드 파일을 생성합니다.
[root@localhost ~]# htpasswd -cm [패스워드 파일] [사용자]
[root@localhost ~]# htpasswd -cm /var/www/svn/htpasswd testuser
New password:
Re-type new password:
Adding password for user testuser

옵션 설명
-c : 새로운 파일 생성
-m : MD5 로 암호화
다른 새로운 사용자 추가 할때는 아래와 같이 -c 옵션을 빼고 추가 해주면 됩니다.
[root@localhost ~]# htpasswd -m /var/www/svn/htpasswd testuser2

권한을 위한 파일 작성 편집창에 예제를 알맞게 수정하여 저장한다.

     [root@localhost ~]# vi /var/www/svn/svn-acl-conf

예제 )

[groups]
adm = hyuni , cogito
dev = test

[traffer:/]
* =
@adm = rw
@dev = r

인증할 사용자를 설정 해주기 위해 authz, passwd, svnserve.conf 파일을 설정 합니다.
* 아파치 연동을 할경우 설정할필요 없음
[root@localhost~]# vi /var/www/svn/repos/conf/authz
[groups]
authz = testuser
@authz = rw
[root@localhost ~]# vi /var/www/svn/ruo91/conf/passwd
[users]
testuser= 1234
[root@localhost~]# vi /var/www/svn/repos/conf/svnserve.conf
[general]
anon-access = read                  # 익명접근시 저장소 읽기 권한
auth-access = write                  # 인증된 사용자의 경우 쓰기 권한
password-db = passwd            # 인증에 사용될 사용자의 비밀번호 파일
authz-db = authz                     # 인증에 사용될 사용자 그룹 파일
realm = My First Repository       # 저장소에 표시될 이름(?) 또는 저장소 간략 설명(?)

subversion 설정을 합니다. 예제 파일 알맞게 수정후 추가
[root@localhost~]# vi /etc/httpd/conf.d/subversion.conf

예제 )
<Location /svn>
   DAV svn
   SVNParentPath /var/www/svn/
#   SVNPath /var/www/svn/traffer

#   # Limit write permission to list of valid users.
#   <LimitExcept GET PROPFIND OPTIONS REPORT>
#      # Require SSL connection for password protection.
#      # SSLRequireSSL
#
      AuthType Basic
      AuthName "GN Repository"
      AuthzSVNAccessFile /var/www/svn/svn-acl-conf
      AuthUserFile /var/www/svn/htpasswd
      Require valid-user
#   </LimitExcept>
</Location>



SVN 을 시작합니다.
[root@localhost~]# /etc/init.d/subversion start

- SVN 기본 디렉토리 만들기
소스 코드를 관리하기 위해서는 trunk , branches, tags 를 만들어 줘야 하므로 임시로 export 걸어 주고 시작합니다.
[root@localhost~]# export SVN_EDITOR="/bin/vi" ; export SVN_EDITOR

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

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

이때 :q 를 눌러 에디터에서 빠져 나옵니다.
:q
C 를 눌러 나옵니다.
로그 메시지가 변경되지 않았거나 지정되지 않았습니다
취소 (A), 계속(C), 수정(E)
C
인증 영역을 사용하기 위해 리눅스 root 사용자의 암호와 svn 사용자의 암호를 입력 해줍니다. (암호는 보안상 보이지 않음)
인증 영역(realm): <http://127.0.0.1:80> Authorization!!
'root'의 암호:
인증 영역(realm): <http://127.0.0.1:80> Authorization!!
사용자명:testuser
'testuser'의 암호:

커밋된 리비전 1.

branches 디렉토리 만들기 (trunk 와 반복..)
[root@localhost~]# svn mkdir http://127.0.0.1/svn/repos/branches

로그 메시지가 변경되지 않았거나 지정되지 않았습니다
취소(A), 계속(C), 수정(E)
C

커밋된 리비전 2.

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

커밋된 리비전 3.

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

4. Trac 설치
RPMforge 에서 다운받고 설치 합니다.
[root@localhost ~]# wget http://packages.sw.be/rpmforge-release/rpmforge-release-0.5.1-1.el5.rf.i386.rpm
[root@localhost~]# rpm -Uvh rpmforge-release-0.5.1-1.el5.rf.i386.rpm
[root@localhost~]# yum install -y mod_python trac

trac 프로젝트를 설치 합니다.
[root@localhost~]# trac-admin /var/www/trac/ initenv
Creating a new Trac environment at /var/www/trac

Trac will first ask a few questions about your environment
in order to initialize and prepare the project database.

 Please enter the name of your project.
 This name will be used in page titles and descriptions.

Project Name [My Project]> Sample Project

 Please specify the connection string for the database to use.
 By default, a local SQLite database is created in the environment
 directory. It is also possible to use an already existing
 PostgreSQL database (check the Trac documentation for the exact
 connection string syntax).

Database connection string [sqlite:db/trac.db]>

 Please specify the type of version control system,
 By default, it will be svn.

 If you don't want to use Trac with version control integration,
 choose the default here and don't specify a repository directory.
 in the next question.

Repository type [svn]>

 Please specify the absolute path to the version control
 repository, or leave it blank to use Trac without a repository.
 You can also set the repository location later.

Path to repository [/path/to/repos]> /var/www/svn/repos

Creating and Initializing Project
 Installing default wiki pages
 PageTemplates imported from /usr/lib/python2.4/site-packages/trac/wiki/default-pages/PageTemplates
 TracGuide imported from /usr/lib/python2.4/site-packages/trac/wiki/default-pages/TracGuide
.....................
................................
........................................
---------------------------------------------------------------------
Warning: couldn't index the repository.

This can happen for a variety of reasons: wrong repository type,
no appropriate third party library for this repository type,
no actual repository at the specified repository path...

You can nevertheless start using your Trac environment, but
you'll need to check again your trac.ini file and the [trac]
repository_type and repository_path settings in order to enable
the Trac repository browser.
---------------------------------------------------------------------
Project environment for 'Sample Project' created.

You may now configure the environment by editing the file:

  /var/www/trac/conf/trac.ini

If you'd like to take this new project environment for a test drive,
try running the Trac standalone web server `tracd`:

  tracd --port 8000 /var/www/trac

Then point your browser to http://localhost:8000/trac.
There you can also browse the documentation for your installed
version of Trac, including information on further setup (such as
deploying Trac to a real web server).

The latest documentation can also always be found on the project
website:

  http://trac.edgewall.org/

Congratulations!

아파치가 사용할수 있도록 변경합니다.
[root@localhost~]# chown apache:apache /var/www/trac/*
[root@localhost~]# chmod -R 777 /var/www/trac

Trac 인증 패스워드 파일을 생성합니다.
[root@localhost~]# htpasswd -cm /var/www/trac/htpasswd testuser
New password:
Re-type new password:
Adding password for user testuser

subversion 에 Trac 설정을 추가 해줍니다.
[root@localhost~]# vi /etc/httpd/conf.d/subversion.conf
<Location /trac>
     SetHandler mod_python
      PythonHandler trac.web.modpython_frontend
      PythonOption TracEnv /var/www/trac
      PythonOption TracUriRoot /trac
      AuthType Basic
      AuthName "Sample Trac Environment"
      AuthUserFile /var/www/trac/htpasswd
      Require valid-user
</Location>

연동 확인을 위해 Apache 를 재시작 합니다.
[root@localhost~]# service httpd restart

SVN 저장소 확인
TRAC 확인