본문 바로가기
Dev./Sec. Study/참고자료

Subversion with HTTPS/Trac. on Ubuntu 12.04 LTS

by 로제마인 2012. 9. 19.

손이 많이 가네요;


삽질 끝에 성공하고 정리하는 거라서,


마지막에 안될 수도 있지만.. 그쪽은 각자 센스로 커버합시다.



설정 파일들 건드리기 전에 준비부터 다 해봅시다.


1. apt 관리자를 이용해 필요한 패키지 설치

subversion python libapache2-svn libapache2-mod-python python-setuptools python-genshi python-sqlite


2. openssl로 인증서 만들기

<SSL 인증서 넣어둘 경로에서> # openssl req -new  -x509 -nodes -out server.crt -keyout server.key


3. python easy_install을 이용해 필요한 모듈 설치

easy_install babel

easy_install Pygments

easy_install docutils

easy_install epydoc

easy_install textile


4. trac 및 trac plugin 설치

# trac 설치

svn co http://svn.edgewall.org/repos/trac/branches/0.12-stable trac

cd trac

./setup.py compile_catalog --use-fuzzy

./setup.py install


# trac plugin

http://trac-hacks.org/wiki/HackIndex

# 들어가서 필요한 플러그인 받아서 설치

# 우선 주요 플러그인만..

# AccountManagerPlugin, SvnAuthzAdminPlugin, TracIniAdminPanelPlugin, PermRedirectPlugin




이제 필요한건 대충 설치 한 것 같으니, 설정하러 가봅니다.


1. 우선 apache2부터 합니다.

# /etc/apache2/sites-enabled 디렉터리에서

cp ../sites-available/default-ssl ./ssl



# /etc/apache2/sites-enabled/ssl 파일을 열어서

SSLCertificateFile    <2번의 SSL 인증서 넣어둘 경로에서>/server.crt

SSLCertificateKeyFile <2번의 SSL 인증서 넣어둘 경로에서>/server.key


2. https를 위한 apache2 configuration

# /etc/apache2/sites-enabled/ssl 파일을 열어서 VirtualHost *:443 으로 바꿔주고,

# 기본 root url로 접속할 디렉터리를 각자 맞게 지정해줍니다.

# (내비둬도 되고요. 바꾸시면 default http 도 바꿔주시는게 좋을 듯?)


# 그리고 전 제가 관리하는 디렉터리에서 직접 trac/svn 경로 설정 파일을 두려고 .vhost 라는 파일을 만들었어요.

# sites-enabled/ssl 파일에는 제일 밑에 아래처럼 해두었어요

include <VIRTUAL_HOST_PATH>/.vhost


# 이렇다 보니, apache2도 제 계정으로 동작하는게 편해서 데몬 계정을 제 계정으로 바꿨어요

# /etc/apache2/envvars에서 이렇게.

export APACHE_RUN_USER=<USERNAME>

export APACHE_RUN_GROUP=<GROUPNAME>


# ssl 설정이 끝났다면, apache2에 ssl 모듈을 enable 시켜줍니다.

sudo a2enmod ssl


# 참고로 작업이 끝난 후의 .vhost 파일 내용은 이래요.

<Location /trac>

    SetHandler mod_python

    SetEnv PYTHON_EGG_CACHE /home/repository/trac/.cache

    PythonHandler trac.web.modpython_frontend

    PythonOption TracEnvParentDir /home/repository/trac

    PythonOption TracUriRoot /trac

</Location>


<Location /svn>

    DAV svn

    SVNParentPath /home/repository/svn

    AuthType Basic

    AuthName "cheroxy"

    AuthUserFile /home/repository/.passwd

    AuthzSVNAccessFile /home/repository/svn/authz

    <LimitExcept GET PROPFIND OPTIONS REPORT>

        Require valid-user

    </LimitExcept>

</Location>

# <LimitExcept>는 권한이 필요 할 때만 인증하도록 해줍니다


# 계정 관리는 아래에서 따로 합니다.


# 만약 설치 후 첫 접속에서, 관리자 권한으로 trac에 접속하지 못하면,

# trac에서 http-basic-authentication 으로 접속하고 설정 후에 복구하시면 될거 같네요



이제 svn과 trac 설정을 해보죠


1. svn repository 및 trac 초기 설정

# 전 /home/repository 에 svn 디렉터리와 trac 디렉터리를 만들어 두고, 각각을 따로 작업했습니다.

# trac은 밑에 .cache 라는 캐시 디렉터리도 만들어줬고요.

# 설명을 위한 프로젝트 명은 cheroxy 예요 :)


# subversion

# svn 명령어 뒤 쪽에 -m 옵션은 changeset 메시지니까 바꾸셔도 됩니다.

svnadmin create /home/repository/svn/cheroxy

svn mkdir file://localhost/home/repository/svn/cheroxy/branches -m "initial structure1"

svn mkdir file://localhost/home/repository/svn/cheroxy/tags -m "initial structure2"

svn mkdir file://localhost/home/repository/svn/cheroxy/trunk -m "initial structure3"


# trac 생성 및 관리자 권한 주기

trac-admin /home/repository/trac/cheroxy initenv

trac-admin /home/repository/trac/cheroxy permission add <USERNAME> TRAC_ADMIN


# 계정 파일 생성 해 줘야해요. 전 .passwd라는 파일로 만들었습니다

htpasswd -c .passwd <USERNAME>


# authz 파일도 만들어요

# 대문자로 된 것들이 직접 써주면 됩니다

# 그룹 지정도 가능하고 프로젝트 하위의 특정 경로에 권한을 주는 것도 가능해요

# 아래 예제는 프로젝트에 GROUP1은 읽기/쓰기, USER3은 읽기만, 그 이외에는 아무 권한도 없도록 설정한 것이에요

[groups]

GROUP1=USER1,USER2


[/]

*=

USER1=r


[PROJECT:/]

*=

@GROUP1=rw

USER3=r


...


2. trac 설정. <trac-project>/conf/trac.ini

# svn 경로 입력

# 보통 설치하면 다 연동되는 거 처럼 기재된 내용들이 많았는데, 전 안되서 한참 고민하다가 해결했네요.

# apache2 restart 하고 접속 했더니, 소스보기도 되고 잘되는거 같다 ! 하시면 안해도 될 듯.

# 이건 있는 내용이니 repository_dir 만 수정하시면 됩니다.

[trac]

...

authz_file = /home/repository/svn/authz

authz_module_name = cheroxy

...

repository_dir = /home/repository/svn/cheroxy


# tab-width 조정

# 있는거에서

[mimeviewer]

...

tab_width = 4


# trac 로그인 페이지 사용하기

# 없으면 추가하시면 되요.

[components]

trac.web.auth.loginmodule = disabled


# PermRedirectPlugin

# 없으면 추가하시면되요.

# 참고로 자동으로 설정되면 기본으론 이렇게 나옵니다.

# permredirect.filter.permredirectmodule = enabled

[components]

permredirect.* = enabled


# account-manager plugin

# 없으면 추가하시면 되요.

#  password_store 설정 안했더니, trac에서 계정 조회 할 때 이런 오류가 나더라구요.

# This password store does not support listing users.

[account-manager]

...

password_file = /home/repository/.passwd

password_store = HtPasswdStore



Trouble-Shoot


# Unsupported version control system "svn"

# 이 처럼 나오는 경우, trac admin page 에서 SubversionConnector 를 enable 시키거나,

# trac.ini 에서 다음과 같이 입력합니다.

tracopt.versioncontrol.svn.svn_fs.subversionconnector = enabled


# 이랬는데 No module named 라는 오류가 뜬다면, 다음 패키지를 설치하세요

python-subversion


# python 에서 import svn 해보시고 오류 메시지가 안나타나면 되는 것 같네요.


Invalid command 'AuthzSVNAccessFile', perhaps misspelled or defined by a module not included in the server configuration

# 이렇게 나오면,

/etc/apache2/mods-available/authz_svn.load

# 이 아이를

/etc/apache2/mods-enabled/authz_svn.load

# 로 symbolic-link 해줍니다


기억을 더듬고 자료를 검색해 가면서 정리하면 이정도 인 것 같네요.


https://<domain>/trac


접속 해서 로그인하고 설정은 각자 알아서 해봅시다.


위 과정이 다 되면 이렇게 됩니다.