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
를 설치한다.
업데이트가 필요할 경우 아래와 같이 진행한다.
How to install
CentOS7를 기준으로 설치방법을 정리한다.
우선 관련 모듈을 설치한다.
그리고 Svn:Authz파일을 직접 생성하고, htpasswd파일을 생성한다.
하단의 내용을 참조하여 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 사용자로 변경한다.
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를 재부팅한다.
Apache httpd 연동방법
아래와 같이 SVN과 연결한다.
- 여러 저장소를 연결할 경우:
SVNParentPath "[SVN_REPO_PARENT_PATH]"
- 단일 저장소를 연결할 경우:
SVNPath "[SVN_REPO_PATH]"
htaccess 연동방법
htaccess 연동후 svn의 authz파일을 연결한다. 연동은 AuthzSVNAccessFile
를 사용하면 된다.
AuthType Basic
AuthName "[AUTH_NAME]"
AuthUserFile "[HTPASSWD_PATH]"
Require valid-user
AuthzSVNAccessFile "[AUTHZ_PATH]"
SVNParentPath
SVN 저장소를 모아놓은 상위(Parent)경로를 입력하면 된다. 주의할 점은 경로의 마지막에 "/"를 추가하면 안된다.
Example:
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파일을 읽지 못해서 발생되는 현상일 가능성이 높다.