대표적인 이슈 관리 시스템 중 하나인 Trac 을 설치하고 사용하는 방법에 대해서 설명한다.
Trac 이란
이슈 관리 시스템? 말이 좀 어렵다.
쉽게 말해서, 소스코드가 개발되는 과정을 웹상에서 추적 하기 쉽게 해주는 시스템이라고 보면 될 것 같다(subversion + apache).
소스코드가 수정된 히스토리와 버그 리포트, 버그 디버깅 내역, 프로젝트 진행 상황을 하나로 합쳐, 쉽게 공유할 수 있게 해준다.
'윈도우 프로젝트 필수 유틸리티' 라는 책에서 나온 Trac 의 설명은 아래와 같다.
위키, 이슈(티켓) 관리, subversion 이 절묘하게 조화를 이루고 있는 시스템이다. subversion 의 사용자 계정을 연동하여 사용할 수 있다. 이슈를 티켓이라고 부르며, 이 티켓에 위키 문법을 지원하며, subversion 커밋 로그 메시지에도 위키 문법을 지원한다. 또한 subversion 커밋 로그 메시지를 티켓에 바로 답글을 달 수 있는 기능이 있다. 티켓에 마일스톤, 컴포넌트, 버전, 담당자 등을 지정할 수 있고, 로드맵 메뉴에서 해결된 티켓의 개수를 막대(상태진행 바) 형태로 표시해주며 백분율로 알려준다. 마일 스톤, 컴포넌트 버전, 담당자 별로 막대를 표시해 줄 수도 있다. subversion 뿐만 아니라 CVS, bazaar, mercurial, darcs, perforce, monotone, SVK, arch, clearcse, git 등의 버전 관리 시스템도 지원한다. 플러그인 형태로 여러가지 기능을 추가할 수 있다.
준비운동 하기
먼저 Trac 설치를 해야 한다. 현재 Trac 은 윈도우과 리눅스 모두 지원한다. 윈도우에서의 설치방법은 마우스 클릭 몇번으로 설치가 가능하다.
설치 방법은 http://wiki.kldp.org/wiki.php/TracOnWindows TOW (Trac On Windows) 를 참고하기 바란다.
여기서는 리눅스에서의 설치 방법에 설명할 것이다. 설치 환경은 다음과 같다.
CPU | IBM X40 |
OS | Debian(VMware) Testing |
소스 리스트는 다음과 같다.
deb http://ftp.kr.debian.org/debian/ lenny main deb-src http://ftp.kr.debian.org/debian/ lenny main deb http://security.debian.org/ lenny/updates main deb-src http://security.debian.org/ lenny/updates main
설치하기
Trac 은 apache 와 subversion, python 과 연동하여 실행되므로 같이 설치한다.
여기서는 각각 아래의 버전을 사용했다.
- apache - 2.2.9
- subversion - 1.4.6
- trac - 0.10.4
- python - 2.5.2
#apt-get install subversion libapache2-svn #apt-get install trac libapache2-mod-python
디렉토리 구조 설명
설치가 되었다면, 설정을 위해 subversion 과 trac 을 위한 디렉토리를 지정해야 한다.
여기서는 다음과 같이 각각 경로를 지정했다.
subversion 메인 디렉토리 | /var/lib/svn |
trac 메인 디렉토리 | /var/lib/trac |
scvos 라고 하는 프로젝트를 만들어 사용한다.
subversion | /var/lib/svn/scvos |
trac | /var/lib/trac/scvos |
디렉토리 생성
앞에서 정의한 디렉토리를 직접 생성한다.
#mkdir /var/lib/svn #chown -R www-data:www-data /var/lib/svn #mkdir /var/lib/trac #chown -R www-data:www-data /var/lib/trac
SSL 암호화에 사용할 서버 인증서 생성
불특정 다수를 대상으로 SSL 서버를 구출할 경우 공인인증기관이 서명한 서버인증서를 구입하는 것이 좋다
여기서는 자기 스스로 서명한 서버인증서를 기준으로 진행한다.
#apt-get install openssl #cd ~ #openssl req -new -x509 -nodes -out server.crt -keyout server.key
항목 | 입력값 |
Country Name (2 letter code) (GB) | KR (국가코드를 입력한다) |
State or Province Name (full name) (Some-State) | 엔터 (주 혹은 도 이름을 입력한다) |
Locality Name (eg, city) () | Seoul (거주하는 도시이름을 입력한다) |
Organization Name (eg, company) (Internet Widgits Pty Ltd) | MyHome (조직명 또는 회사명을 입력한다) |
Organizational Unit Name (eg, section) () | 192.168.80.128 (서버 완전한 도메인 이름을 입력한다) |
Email Address () | fat81@hanmail.net |
제대로 생성되었다면, server.key(private key 파일) 와 server.crt(public key 를 포함한 인증서 파일) 파일이 생성되었을 것이다.
#ls server*
인증서 파일을 적절한 위치로 복사한다.
#mkdir /etc/apache2/ssl #cp server.key server.crt /etc/apache2/ssl #chmod 600 /etc/apache2/ssl/server.key #rm server.key server.crt
apache 설정
SSL 암호화를 지원하기 위해서 mod_ssl 모듈을 활성화 시킨다.
#ln -s /etc/apache2/mods-available/ssl.load /etc/apache2/mods-enabled/ #ln -s /etc/apache2/mods-available/ssl.conf /etc/apache2/mods-enabled/
apache 서버가 https 의 기본 포트인 443 이 열려있는지 확인한다(/etc/apache2/ports.conf).
Listen 80 <IfModule mod_ssl.c> Listen 443 </IfModule>
https 서비스를 제공하는 VirtualHost 가 사용할 DocumentRoot 를 생성한다.
#mkdir /var/www-ssl
설정을 위해 /etc/apache2/sites-available/ssl 파일에 다음을 추가한다.
NameVirtualHost *:443 <VirtualHost *:443> DocumentRoot /var/www-ssl SSLEngine On SSLProtocol -all +TLSv1 +SSLv3 SSLCipherSuite HIGH:MEDIUM:!aNULL:+SHA1:+MD5:+HIGH:+MEDIUM SSLOptions +StrictRequire SSLVerifyClient none SSLCertificateFile /etc/apache2/ssl/server.crt SSLCertificateKeyFile /etc/apache2/ssl/server.key <Location /svn> # Subversion 설정 DAV svn # any "/svn/foo" URL will map to a repository /var/lib/svn/foo SVNParentPath /var/lib/svn AuthType Basic AuthName "Subversion Repository" AuthUserFile /etc/dev_passwd Require valid-user </Location> <Location /projects> # Trac 설정 SetHandler mod_python PythonHandler trac.web.modpython_frontend PythonOption TracEnvParentDir /var/lib/trac PythonOption TracUriRoot /projects AuthType Basic AuthName "Trac, Issue Tracking and Documenting" AuthUserFile /etc/dev_passwd Require valid-user </Location> </VirtualHost>
설정 파일을 적용하기위해 apache 를 재시작한다.
#ln -s /etc/apache2/sites-available/ssl /etc/apache2/sites-enabled/ #/etc/init.d/apache2 restart
VirtualHost 를 이용해서 http, https 를 동시에 지원하며, subversion 과 trac의 모든 전송내용이 암호화되며, 하나의 사용자인증파일을 공유한다.
사용자 생성
사용자를 생성하고, 암호를 저장하는 데 htpasswd 라는 명령어를 사용한다. htpasswd 에서 자주 사용하는 옵션은 다음과 같다.
- -c : 파일 생성하기. 처음 실행할 때 1번만 주면 된다
- -m : MD5 암호화하기
아래와 같이 생성한다.
#htpasswd -cm /etc/dev_passwd fat81
이후, 암호를 입력해주면 된다. 제대로 추가되었는지, /etc/dev_passwd 파일을 확인한다.
저장소(repository) 생성
subversion 저장소를 생성한다.
#svnadmin create /var/lib/svn/scvos
trac 은 특정한 구조를 가진 subversion 저장소만 인식할 수 있다.
#svn mkdir file://localhost/var/lib/svn/scvos/branches -m "initial structure1" #svn mkdir file://localhost/var/lib/svn/scvos/tags -m "initial structure2" #svn mkdir file://localhost/var/lib/svn/scvos/trunk -m "initial structure3"
apache 를 재시작한다.
#/etc/init.d/apache2 restart
웹브라우저로 'https://192.168.16.128/svn/scvos' 에 접속해본다. 로그인 창이 뜰 것이다. 앞에서 지정했던 아이디와 비밀번호를 입력한다. 프로젝트 소스가 보이면 정상이다.
Trac 환경 생성 및 초기화
#chown -R www-data:www-data /usr/share/trac #chown -R www-data:www-data /var/lib/svn #/etc/init.d/apache2 restart #trac-admin /var/lib/trac/scvos initenv
항목 | 입력값 |
Project Name (My Project) | scvos |
Database connection string (sqlite:db/trac.db) | 엔터 |
Repository type (svn) | 엔터 |
Path to repository (/var/svn/test) | /var/lib/svn/scvos |
Templates directory (/usr/share/trac/templates) | 엔터 |
'Congratulations!' 메세지가 보인다면, 정상적으로 초기화가 된 것이다.
이를 반영하기 위해 apache 를 재시작한다.
#chown -R www-data:www-data /var/lib/trac #/etc/init.d/apache2 restart
웹브라우저로 'https://192.168.16.128/projects' 에 접속한다. 프로젝트 리스트가 보여야 정상이다.
개별 프로젝트에 들어가면 trac 이 설정해 놓은 페이지가 보인다. 이로서 기본적인 설치를 끝났다.
플러그인 설치 및 설정
Ini Admin Plugin
trac을 관리할 관리자 계정을 만들어야 한다.
#trac-admin /var/lib/trac/scvos permission add fat81 TRAC_ADMIN
trac 의 설정 파일은 각 프로젝트의 conf 디렉토리 아래에 있는 trac.ini 파일이다. 이 파일을 일일이 수정하기는 번거롭다.
그래서 trac 에서는 여러가지 플러그인을 지원한다. 그 중에서 'Ini Admin Plugin' 을 설치한다.
자세한 설치 방법은 http://trac.edgewall.org/wiki/WebAdmin 를 참고한다.
먼저 플러그인을 다운받아야 한다.
svn export http://svn.edgewall.com/repos/trac/sandbox/webadmin/
trac.ini 파일에 다음을 추가한다.
[components] webadmin.* = enabled
설치를 한다.
#cd webadmin #python setup.py install
apache 를 재시작한다.
#/etc/init.d/apache2 restart
'https://192.168.16.128/projects/scvos' 에 접속했을 때, 오른쪽 위의 항목에 'admin' 이라는 항목이 생겼으면, 제대로 설치가 된 것이다.
그 외
소스코드에서 문법 강조(Syntax Highlighting) 기능을 사용하기 위해서는 enscript 라는 프로그램이 필요하다.
만일 설치되지 않았다면, 설치한다.
#apt-get install enscript
trac.ini 파일에서 다음을 확인한다.
[mimeviewer] enscript_modes = text/x-dylan:dylan:4 enscript_path = enscript ...
백업하기
Trac 안전하게 백업하기
trac 데이터베이스와 첨부파일을 백업할 수 있도록 해주는 명령이 바로 trac-admin hotcopy 명령이다.
같은 컴퓨터상의 다른 하드디스크로도 복사할 수 있다.
#trac-admin /var/lib/trac/scvos hotcopy /opt
Subversion 안전하게 백업하기
다음 명령을 통해 백업할 수 있다.
#svnadmin hotcopy /var/lib/trac/scvos /opt
FAQ
주석에 한글이 포함될 경우, 깨져서 출력되는 경우
trac.ini 파일에 'default_charset = EUC-KR' 로 수정한다.