Skip to content

Svn:ApacheHttpd

Subversion을 Apache httpd로 연결할 수 있도록 계정을 연동하는 방법에 대하여 설명한다.

Module

SVN연동에 필요한 모듈은 아래와 같다. (mod_dav.so 모듈을 연동해야 추가가 가능한다.)

<IfModule dav_module>
LoadModule dav_svn_module "[SVN_ROOT]/bin/mod_dav_svn.so"
LoadModule authz_svn_module "[SVN_ROOT]/bin/mod_authz_svn.so"
</IfModule>

Getting Subversion under MacPorts

macports를 사용하여 mod_dav_svn를 설치한다.

$ sudo port install subversion +mod_dav_svn

업데이트가 필요할 경우 아래와 같이 진행한다.

$ sudo port selfupdate

How to install

CentOS7를 기준으로 설치방법을 정리한다.

우선 관련 모듈을 설치한다.

$ yum install httpd subversion mod_dav_svn

그리고 Svn:Authz파일을 직접 생성하고, htpasswd파일을 생성한다.

$ mkdir /etc/httpd/auth
$ cd /etc/httpd/auth
$ vi authz
$ htpasswd -cs htpasswd.ht lcw

하단의 내용을 참조하여 httpd설정파일을 작성한다. 가장 간단히 작성하는 방법은 /etc/httpd/conf.modules.d/10-subversion.conf파일 하단에 수정하는 것이 간단하다.

방화벽을 해제한다.

$ firewall-cmd --permanent --zone=public --add-service=http
$ firewall-cmd --permanent --zone=public --add-service=https
$ firewall-cmd --reload

저장소를 생성한 후 Apache 사용자로 변경한다.

$ mkdir /var/www/svn
$ cd /var/www/svn/
$ svnadmin create repo
$ chown -R apache.apache repo/

selinux context를 변경한다.

$ chcon -R -t httpd_sys_content_t /var/www/svn/repo
$ chcon -R -t httpd_sys_rw_content_t /var/www/svn/repo

마지막으로 httpd를 재부팅한다.

$ systemctl enable httpd.service
$ systemctl restart httpd.service
## OR:
$ apachectl restart

Apache httpd 연동방법

아래와 같이 SVN과 연결한다.

  • 여러 저장소를 연결할 경우: SVNParentPath "[SVN_REPO_PARENT_PATH]"
  • 단일 저장소를 연결할 경우: SVNPath "[SVN_REPO_PATH]"
<Location /svn>
DAV svn
SVNParentPath "[SVN_REPO_PARENT_PATH]"
</Location>

htaccess 연동방법

htaccess 연동후 svn의 authz파일을 연결한다. 연동은 AuthzSVNAccessFile를 사용하면 된다.

AuthType Basic
AuthName "[AUTH_NAME]"
AuthUserFile "[HTPASSWD_PATH]"
Require valid-user

AuthzSVNAccessFile "[AUTHZ_PATH]"

SVNParentPath

SVN 저장소를 모아놓은 상위(Parent)경로를 입력하면 된다. 주의할 점은 경로의 마지막에 "/"를 추가하면 안된다.

Example:

SVNParentPath "/repo/svn"

SVN + HTPASSWD

LoadModule dav_svn_module     modules/mod_dav_svn.so
LoadModule authz_svn_module   modules/mod_authz_svn.so
LoadModule dontdothat_module  modules/mod_dontdothat.so

<Location /svn>
    DAV svn
    SVNParentPath "/repo/svn"

    # Authentication
    AuthType Basic
    Require valid-user
    AuthName "My subversion repository"

    AuthUserFile "/etc/httpd/auth/htpasswd.ht"
    AuthzSVNAccessFile "/etc/httpd/auth/authz"
</Location>

Apache httpd + SSL + LDAP 연동

<IfModule dav_svn_module>
<IfModule authz_svn_module>
<IfModule ssl_module>

<VirtualHost *:8002>
    SSLEngine               on
    SSLCertificateFile      "conf/openssl/pnd_admin.crt"
    SSLCertificateKeyFile   "conf/openssl/pnd_admin.key"
    SSLProtocol             all
    SSLCipherSuite          HIGH:MEDIUM

    <Location /svn/roadie2>
        Order   Deny,Allow
        Allow   from all

        DAV svn
#       SVNParentPath   "D:/PND_Team/repository/"
        SVNPath         "D:/PND_Team/repository/roadie2/"

        # ldap authentication
        AuthType                Basic
        AuthName                "SVN Repository"
        AuthBasicProvider       ldap
        AuthLDAPURL             "ldap://localhost:8102/dc=pnd,dc=geosoft?uid"
        AuthzLDAPAuthoritative  on

        AuthLDAPGroupAttribute      uniqueMember
        AuthLDAPGroupAttributeIsDN  on
        Require ldap-group cn=roadie2,cn=svn,dc=pnd,dc=geosoft
    </Location>
</VirtualHost>

</IfModule>
</IfModule>
</IfModule>

Troubleshooring

500 Internal server error

이 경우 error log를 확인하는게 가장 빠르다. 필자 경험상 이 경우 보동 htpasswd파일을 읽지 못해서 발생되는 현상일 가능성이 높다.

See also

Favorite site