WebDAV+SVN 환경에서 add만 안 되는 문제
Apache+WebDAV+SVN 환경에서 고치거나 지울 수는 있는데 파일을 새로 넣을 수 없는 문제가 생겼습니다. 권한 문제이겠거니 하고 접근했다가 한참 헤맸죠. 문제는 Location에 있었습니다.
<Location /> DAV svn SVNParentPath /var/svnroot </Location>
이렇게 설정하면 Modify, Delete는 잘 되지만 Add를 시도할 때 다음과 같은 오류가 나타납니다.
Could not open the requested SVN filesystem [500, #2] Could not open the requested SVN filesystem [500, #2]
어떤 환경에서는 sqlite 라이브러리가 여러 버전으로 깔려 있을 때 mod_dav_svn.so가 libphp5.so를 따라서 잘못된 버전으로 연결되는 현상 때문에 오류가 나타나기도 하지만 제 경우는 해당이 안 됐습니다.
Apache access log를 뒤져보면 다음과 같이 나타납니다.
- [01/Jul/2011:01:59:44 +0900] "OPTIONS /project/path HTTP/1.1" 401 - user "OPTIONS /project/path HTTP/1.1" 200 190 user "PROPFIND /project/path HTTP/1.1" 207 708 - "MKACTIVITY /project/!svn/act/c332ed36 HTTP/1.1" 201 368 - "CHECKOUT /project/!svn/vcc/default HTTP/1.1" 201 386 user "PROPPATCH /project/!svn/wbl/c332ed36/10599 HTTP/1.1" 207 466 user "PROPFIND /project/path HTTP/1.1" 207 420 - "CHECKOUT /project/!svn/ver/10597/path HTTP/1.1" 201 395 user "PROPFIND /project/!svn/wrk/c332ed36/path/test_file HTTP/1.1" 500 234 user "PROPFIND /project/path/test_file HTTP/1.1" 500 234 user "DELETE /project/!svn/act/c332ed36 HTTP/1.1" 204 -
새 파일이 들어갈 때 HTTP 500 오류가 떠버리면서 안 됐었네요.
Location을 다음과 같이 바꾸고 다시 시도해 보면 잘 됩니다.
<Location /svnroot> DAV svn SVNParentPath /var/svnroot </Location>
access log에는 500 오류 나던 타이밍이 다음과 같이 바뀝니다.
- "PROPFIND /svnroot/project/!svn/wrk/d677728f/path/test_file HTTP/1.1" 404 1089 - "PROPFIND /svnroot/project/path/test_file HTTP/1.1" 404 1089 user "PUT /svnroot//!svn/wrk/d677728f/path/test_file HTTP/1.1" 201 402
즉, 없는 파일을 한 번 요청하면서 404 오류가 뜨고난 뒤 새 파일이 들어가는 순서인데, 앞서 설정을 Location /로 지정해 svn 모듈로 넘겨 버리니까 Apache가 ErrorDocument 지시자에 의해 잡아두었던 오류를 내뱉지 못하고 500 오류로 넘어가 버렸던 것입니다.
ErrorDocument를 다르게 잡아서 Location /를 그대로 써 보려고 했지만 잘 안되네요. WebDAV 환경이라는 특성때문에 나타나는 현상이라 피하기 힘든가 봅니다.
어쨌든, Location을 /가 아니라 다른 곳으로 잡아서 문제 해결. (사실 WebDAV+SVN 설정하는 글을 찾아 보면 모두 이렇게 처리합니다.)











