....

CentOS 5.3 에 Subversion + SSL + Trac 설치하기 [3] 본문

Linux

CentOS 5.3 에 Subversion + SSL + Trac 설치하기 [3]

idkook 2009. 11. 20. 20:45
한꺼번에 이렇게 많은 내용을 올리다니...

본 내용에 대한 보다 상세한 내용은 피라시스님의 글에서 살펴볼 수 있다. 바로가기

이제 SVN을 apache에서 접근하도록 설정할 차례다. 이 경우 방화벽 제한이 상당히 심한 곳에서도 https포트인 443을 통하므로 어지간하면 다 접근이 가능하다는 점이 장점이다..

단점은.. 아무래도 순수한 svn 포트 접근보다는 처리속도가 느리다.. 당연히 암호화에 따른 오버해드가 있으니 느려지는건 어찌보면 당연한거 아닌가.. 중요한건 별차이를 모르겠다는 점...
전체 600M분량의 40000개 소스파일을 체크아웃해도 무난하게 내려받는다.

우선 아파치 인증 연계모듈을 설치안했다면 설치한다. (아파치 설치할때 같이 설치했었다..)
> yum install mod_dav_svn


우선 SVN을 아파치에서 접근하도록 하려면 mod_proxy와 mod_dav가 필요하므로 해당 모듈이 활성화 되어 있는지 확인한다. 또한 mod_dav_svn의 두가지 모듈도 같이 활성화가 되어 있어야 한다.

> vi /etc/httpd/conf/httpd.conf

LoadModule dav_module modules/mod_dav.so
LoadModule proxy_module modules/mod_proxy.so
#위의 두줄에 주석처리가 되어 있다면 해제하고 없다면 삽입한다.

> vi /etc/httpd/conf.d/subversion.conf
LoadModule dav_svn_module     modules/mod_dav_svn.so
LoadModule authz_svn_module   modules/mod_authz_svn.so
# 위의 두줄을 확인하는 차원에서... <Location> 설정은 <VirtualHost>태그에서 처리한다.

그런데... CentOS의 yum으로 설치했더니.. 모든 모듈이 다 활성화 되어 있다..
대충 안써도 되는 모듈(정확히는 커널컴파일 설치시 비활성화 되어있는 기본 설정..)을 보고 끌껀 꺼버린다.
#LoadModule auth_digest_module modules/mod_auth_digest.so
#LoadModule authn_alias_module modules/mod_authn_alias.so
#LoadModule authn_anon_module modules/mod_authn_anon.so
#LoadModule authn_dbd_module modules/mod_authn_dbd.so
#LoadModule authn_dbm_module modules/mod_authn_dbm.so
#LoadModule authnz_ldap_module modules/mod_authnz_ldap.so
#LoadModule authz_dbm_module modules/mod_authz_dbm.so
#LoadModule authz_owner_module modules/mod_authz_owner.so
#LoadModule cache_module modules/mod_cache.so
#LoadModule cern_meta_module modules/mod_cern_meta.so
#LoadModule charset_lite_module modules/mod_charset_lite.so
#LoadModule dav_module modules/mod_dav.so
#LoadModule dav_fs_module modules/mod_dav_fs.so
#LoadModule dav_lock_module modules/mod_dav_lock.so
#LoadModule dbd_module modules/mod_dbd.so
#LoadModule deflate_module modules/mod_deflate.so
#LoadModule disk_cache_module modules/mod_disk_cache.so
#LoadModule dumpio_module modules/mod_dumpio.so
#LoadModule expires_module modules/mod_expires.so
#LoadModule ext_filter_module modules/mod_ext_filter.so
#LoadModule file_cache_module modules/mod_file_cache.so
#LoadModule filter_module modules/mod_filter.so
#LoadModule headers_module modules/mod_headers.so
#LoadModule ident_module modules/mod_ident.so
#LoadModule imagemap_module modules/mod_imagemap.so
#LoadModule info_module modules/mod_info.so
#LoadModule ldap_module modules/mod_ldap.so
#LoadModule logio_module modules/mod_logio.so
#LoadModule log_forensic_module modules/mod_log_forensic.so
#LoadModule mem_cache_module modules/mod_mem_cache.so
#LoadModule mime_magic_module modules/mod_mime_magic.so
#LoadModule proxy_module modules/mod_proxy.so
#LoadModule proxy_ajp_module modules/mod_proxy_ajp.so
#LoadModule proxy_balancer_module modules/mod_proxy_balancer.so
#LoadModule proxy_connect_module modules/mod_proxy_connect.so
#LoadModule proxy_ftp_module modules/mod_proxy_ftp.so
#LoadModule proxy_http_module modules/mod_proxy_http.so
#LoadModule rewrite_module modules/mod_rewrite.so
#LoadModule speling_module modules/mod_speling.so
#LoadModule status_module modules/mod_status.so
#LoadModule substitute_module modules/mod_substitute.so
#LoadModule unique_id_module modules/mod_unique_id.so
#LoadModule userdir_module modules/mod_userdir.so
#LoadModule usertrack_module modules/mod_usertrack.so
#LoadModule version_module modules/mod_version.so
#LoadModule vhost_alias_module modules/mod_vhost_alias.so

음... 좀 많군.... 귀찮으면 그냥 패스... (어차피 개발용인 이상 퍼포먼스보다는 생산성이다..)

우선 아파치에서 사용할 접근용 htpasswd를 만든다.
> htpasswd [-c] /etc/https/conf/htpasswd user1
      # -c옵션은 처음 htpasswd파일을 생성할 때만 사용한다. 그냥 htpasswd를 쳐보면 사용방법이 나온다.
> htpasswd /etc/https/conf/htpasswd user2

각각의 사용자를 추가할 때마다 암호를 두번씩 입력해야 한다.
당연한 예기지만... 이부분은 Apache의 기본인증이므로 규모가 큰 사이트에서는 ldap과 같은 다른 인증으로 대체할 수도 있을것 같은데....

이제 httpd.conf파일을 편집한다.
이전에 설정했던 <VirtualHost> 태그가 있는 파일을 연다. <VritualHost>부분이 ssl.conf에 있기에는 어울리지 않으므로 httpd.conf의 최하단으로 옮겨넣었었다.. 
<VirtualHost _default_:443>
....
  <Location /svn>
    DAV svn
    SVNParentPath "/var/svn"
    AuthType Basic
    AuthName "idkook's Subversion Repository"
    AuthUserFile /etc/httpd/conf/htpasswd
    Require valid-user
  </Location>
....
</VirtualHost> 

참고로 부연 설명을 하자면..

  • SVNParentPath : SVN 프로젝트들을 제공하는 부모경로이다. svnserve -d -r [경로] 에 나온 명령을 입력하면 된다. 대신 SVNPath을 쓰고 실제 리포지토리 경로를 적어도 되지만.. 이경우에는 하나의 프로젝트밖에 접근 할 수 없다. 당장 난 5개의 리포지토리가 필요하다... ㅡㅡㅋ;
  • AuthName : ID와 Password인증 창에 본 내용이 표시된다.
  • AuthUserFile : htpasswd 명령으로 생성한 파일의 경로를 입력한다. 이 파일로 인증을 처리한다는 뜻.
  • Require valid-user : 무조건 인증된 사용자만 접근을 허용한다. 일반적인 프로젝트라면 외부에 소스를 유출하는건 상당히 조심스러우므로 이정도면 충분하며, 비인증 사용자는 checkout만 가능하게 하고자 할경우 <LimitExcept GET PROPFIND OPTIONS REPORT> 태그로 감싸면 된다. (피라시스님 글 참조)


마지막으로 SVN Repository에 apache데몬이 접근할 수 있도록 소유권을 바꿔준다.

> chown apache:apache /var/svn -R
> service httpd restart


끝이다... 
브라우져에서  https://서버주소/svn/sample
[각주:1] 에 접속하면 파일 목록이 나오게 된다.
마지막에 소유권 수정을 안해주면 당장은 보이는것 같지만... https:// 주소를 이용한 commit시 에러가 나게 된다.... (/var/svn 에 대한 접근 권한을 보면 755로 되어 있으니까...)

이제 SVN 클라이언트에서 https://서버주소/svn/리포지토리명 을 이용해서  체크아웃과 커밋을 할 수 있다.
---------
이클립스에서 svn+ssh:// 를 이용한 방식은 설정이 상당히 까다로운 반면에 https://를 이용한 방식은 다 잘된다. (지금 까지 내가 써본 모든 SVN접근 클라이언트들이 편하게 접근이 가능했다)

무엇보다도 이 방식의 최고 장점은 방화벽이 상당히 까다로운 사이트에 나가서도 무난하게 SVN에 접속할 수 있다는 점이다. (ssh는 많이 막혀있지만... 지금까지 80번과 443번의 outbound 포트를 차단한 사이트는 본적 없다)

단, 방화벽이 좀 비싼거라서 암호화 된 https안에 WEB_DAV를 캐치해서 차단하고 있다면 사용이 불가능하다.
이정도 쯤 되면... 그냥 형상관리를 사이트 안에 두고 무조건 출장나가서 일해야 한다고 생각하는게 맘 편하다...

-----------
자.. 이제 남은건 Trac, Nexus이다.
우선 Trac은 Python과 기타 관련 프로그램들을 줄줄히 설치해야 한다. 따라서 다음 기회에..

  1. sample은 svn에서 생성한 프로젝트명이다. [본문으로]
Comments