본문 바로가기

BUGboard

트러블슈팅 - SVN 1.7 업그레이드로 아파치가 죽는 현상


최근에 SVN 이 대폭 업그레이드 되었습니다.

폴더마다 들어있던 .svn 이 최상위 폴더에만 위치하고, 하위 폴더에서는 사라지게 된 것이죠.
이 형태의 버전은 1.7 시리즈로 나가고 있는데, 벌써 1.7.5 까지 빠르게 올라오고 있습니다.

Tortoise SVN >> http://tortoisesvn.net/

그런데, BUG board 에서 이 버전을 사용해보니 PHP 의 svn 관련 함수를 호출할때,
Apache 가 별다른 에러 로그 없이 그냥 죽는 현상이 발견 되었습니다.

이 문제 때문에 한동안 고생을 좀 했는데
완전히 해결을 한것은 아니고, 문제없이 작동하는 버전 세트를 찾게되어
트러블슈팅으로 올려둡니다.


[STEP 1]

우선, BUG board 는 APMSETUP 7 을 사용합니다.
Apache 2.2.14, PHP 5.2.12 환경입니다.

APMSETUP >> http://www.apmsetup.com/


[STEP 2]

여기에 PHP 확장모듈인 php_svn.dll 을 PHP ext 폴더에 넣으면
PHP 에서 svn 을 사용할 수 있게 됩니다.

※ php_svn.dll 을 기존에 http://pecl4win.php.net 에서 다운받을 수 있었지만,
    지금은
http://pecl.php.net 로 통합되어 더이상 다운로드 받을수가 없습니다.
    당시 배포된 최종버전은 5.2.1.1 이며, 이곳
http://gameqa.org/61 에서 다운받을 수 있습니다.

    PHP 상에서 SVN 을 사용하기 위한 또 다른 방법으로는 PECL 을 직접 설치하는 방법도 있습니다.    
    PECL 설치에 대해서는 아래 포스팅을 참고하시기 바랍니다.

    PECL 설치 안내 >>
http://cafe.rootcenter.com/130079802240
    PECL 직접빌드 안내문 >> https://wiki.php.net/internals/windows/stepbystepbuild
    PECL 바이너리 빌드툴 >> http://windows.php.net/downloads/php-sdk/
    PECL SVN >> http://pecl.php.net/package/svn


[STEP 3]

php_svn.dll 이 윈도우에서 구동하기 위해서는, 추가로 필요한 파일들이
system32 폴더안에 위치하여 윈도우의 path 에 노출되어 있어야 합니다.

기존의 SVN 버전에서는 Dependency Walker (http://gameqa.org/61) 를 통해 확인한 파일들을
모두다 system32 폴더에 넣어도 상관이 없었지만,
SVN 1.7 이상버전에서는 아래와 같은 에러가 발생하였습니다.

Error Message >> RUNDLL32.exe - 시작지점 없음. 프로시저 시작 지점 _except_handler4_common을(를) DLL msvcrt.dll에서 찾을 수 없습니다.


Windows XP3 최신버전을 기준으로, PHP ext 에 넣어야할 파일은 총 8개 인데,
이 중, 아래 5개는 system32 폴더에 넣어도 에러가 발생하지 않습니다.
(이 파일들이 system32 폴더에 들어가지 않으면 PHP 의 SVN 함수가 작동하지 않습니다)
- intl3_svn.dll
- libapr.dll
- libapriconv.dll
- libaprutil.dll
- libdb43.dll

아래 3개는 system32 폴더에 넣으면 에러가 발생하니 넣지 마세요.
(이 파일들은 system32 폴더에 들어가 있지 않아도 PHP 의 SVN 함수가 잘 작동합니다)
- bcrypt.dll
- dwmapi.dll
- ncrypt.dll


[STEP4]

BUG board 는 SVN 로그를 불러와 보여주는 기능을 합니다.
그런데, SVN 서버를 외부에 따로 두는 경우에는,
BUG board 서버에 SVN 클라이언트만 설치를 하면 됩니다.
이 경우에는 Tortoise SVN 최신버전(1.7 이상 버전)을 사용해도 문제가 없습니다.
(다만 이 경우에, SVN 게시판에서 파일 바로 다운로드 하기가 작동하지 않습니다)

SVN 서버를 BUG board 에서 함께 구동하는 경우에는
아파치가 별다른 에러 메시지 없이 비정상 종료되는 문제가 발생합니다.
Apache error.log 파일에는 아무것도 남지 않지만,
윈도우 이벤트 로그에는 아래와 같은 에러가 남습니다.

Error Message >> 오류 있는 응용 프로그램 httpd.exe, 버전 2.2.14.0, 오류 있는 모듈 libapr-1.dll, 버전 1.3.9.0


이 문제에 대해 몇 일간이나 구글링과 각종 관련 문서를 다 찾아보고, 별의별 시도를 해봤지만,
뚜렷한 해결책을 결국 찾지 못했습니다.


[STEP 5]

결국, 윈도우를 몇번이나 새로 설치하면서,
프로그램을 하나씩 설치할 때마다 재부팅하고 변경파일들을 하나하나 확인한 끝에,
Subversion 1.7 이상 버전과 Tortoise SVN 1.7 이상버전이 동시에 설치된 경우에는
PHP 의 SVN 함수를 사용할 수 없다는 결론을 얻었습니다.

테스트 끝에, APMSETUP 7 과 안정적으로 사용할 수 있는 SVN 조합은 1.6.17 버전인 것으로 확인 하였습니다.

Subversion 1.6.17 >> http://sourceforge.net/projects/win32svn/files/1.6.17/ 
                               http://sourceforge.net/projects/win32svn/files/1.6.17/Setup-Subversion-1.6.17.msi/download

Tortoise SVN 1.6.17 >> http://sourceforge.net/projects/tortoisesvn/files/1.6.16/Application/
                                  http://sourceforge.net/projects/tortoisesvn/files/1.6.16/Application/TortoiseSVN-1.6.16.21511-win32-svn-1.6.17.msi/download





이번에 이 일을 겪고보니, 버전이 올라갈 때 하위호환이 기대만큼 잘 되지 않는다는 걸 체험하면서
어떻게든 호환할 수 있게 해주는 MS 가 새삼 대단한 회사임을 생각하는 계기가 되었습니다.

그리고 PHP 에서 SVN 쓰는 사람이 거의 없다는 것도... OTL 물어볼데가 너무 없어여;