Unix/Solaris10

SVN (Subversion) : CVS의 대체.

ForceCore 2007. 1. 28. 10:08

SVN은 CVS의 단점을 보완하기 위해 개발되었다.

최근 필자가 어떤 프로젝트 페이지에서

 

"We are moving to SVN"이라는 말을 보아서

CVS보다 더 좋은 건가? 하고 조사를 해본 결과

binary 파일조차 관리가 가능하다고 한다 (!)

CVS에서도 할 수는 있는데, 버전업이 되면 그때마다

바이너리 파일이 "통째로"올라가서 어느 시점부터는

CVS로 관리할 수 없게된다.

어쨌거나 CVS의 기능은 다 있다. 이 외에 구체적으로 뭐가 CVS보다 더 좋은지는

공식홈페이지:http://subversion.tigris.org/

에서 체크해보시오.

 

필자는 솔라리스 환경에서 테스트를 하고 이 글을 썼지만 다른 운영체제에서의 패키지도 공식홈페이지에 있으니 (CentOS의 경우 기본장착인듯) 설치하긴 어렵지 않을 것이고, 설정 부분은 비슷할 것이다.

 

솔라리스서버에 CVS를 얹어 사용하고 있었기 때문에

솔라리스용 파일을 찾아보았는데....

놀랍게도 sunfreeware에 존재했다 (! 앗싸)

 

패키지를 설치 한 뒤 추가적 설정을 해야 한다. (라고 sunfreeware에 되어있다.)

http://www.sunfreeware.com/subversion.html

 

일단은 필요한 라이브러리들부터 설치하는게 좋겠군...

 

라이브러리를 설치하기 전에(!)

바로 subersion 패키지를 설치한 뒤

/usr/local/bin으로 가서

ldd svn

명령어를 내린다. 그러면 그 프로그램이 쓰는 라이브러리가 뭔지 보여줄 것이다.

뭐가 없는지도 알려줌.

 

일단 없다고 하는 것을 다 처리해두었다.

 

아파치에 물려서 svn을 쓸 것인가?

음... 그렇게 한다면, 프로젝트의 파일을 아파치를 통해 바로 볼 수 있게 된다(!)

아파치 버전이 맞아면 모듈을 얹어 쓸 수 있다.

(진작 sunfreeware의 아파치를 쓸걸 ㅠㅠ 지금 와선 귀찮아서 못 하겠다. 이미 apache2 기반의 서비스를 하고 있기도 하고.)

 

---------------------------------------------------

---------------------------------------------------

---------------------------------------------------

이 부분은 읽기만 하고 따라하지 마시오 -_- 하다 말았기 때문.

 

이제,

/usr/local/doc/subversion

에 있는 문서들을 참고하면...

 

# svnserve -d

로 서버 데몬을 돌린다고 하는군;;

 

아파치를 쓰지 않는 설정을 보면 -......

필자가 원하는건 chroot된 환경인데...;

 

http://www.gophernet.org/articles/svn/

 

/export/svn/bin

/export/svn/etc

를 생성했음.

 

etc에는 touch로 ld.so.conf를 만들고, nsswitch.conf를 만들어서 내용을

----------------

passwd: files

group: files

----------------

로 내용을 써줌.

 

etc의 passwd와 group은 사용자 정보를 담아야 한다는데...

root와 다른 사용자들의 정보를 넣어주기로 하고 일단은 skip -_-;;

 

bin엔

chrootsh를 넣었다고 하는데 (?!)

svnacl (! 없음), svnserve, svnlook, ldconfig, sh를 넣는다.

... 라고 하는데 ldconfig는 솔라리스에 존재하지 않는다 -_-;; 일단 skip;;

 

일단 chrootsh 소스를 받고...

http://www.gophernet.org/projects/chrootutils/

make chrootsh를 했는데 안 되었다 -_-;;

Makefile을 수정해서 CC를 gcc로 놓고 다시 하니 되었다.

하여간 솔라리스의 cc는 골칫덩이다.

 

# install -m 4755 chrootsh /export/svn/bin/chrootsh

과 같은 명령어를 사용하여 chrootsh 바이너리를 설치.

 

---------------------------------------------------

---------------------------------------------------

---------------------------------------------------

 

에..........................;;;;;;;;

관두자 -_-;;;;;;;;

 

아파치에 얹는게:

http프로토콜을 쓰고

파일도 그냥 쳐다볼 수 있고

디렉토리로 설정하는 것이라 chroot 하는 것보다 쉬울듯 -_-;;

위 방법을 쓰기에는 cvs pserver와 같이 깔끔한 것이 나오진 않는군;;;

 

sunfreeware에 아파치 2.2가 나오긴 했으나 (아직) 지원이 너무 약하다.

php도 그렇고, 다른 기타 것들의 연동도 그렇고.

다른 리눅스의 배포판들도 그렇다;

 

일단은 아파치 설정을 불러서 (다행히도 MySQL이 5로 갑작스레 업글 되면서 아파치, mysql, php 모조리 패키지로 재설치 한 소동을 겪은 서버라 원하는 아파치 버전이었다.)

 

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

 

위 두 모듈을 넣어줌.

 

이제 INSTALL을 읽고 아파치를 설정하겠다.

INSTALL을 보니까 딴 책을 보고 일단은 repository를 생성해 놓으라고 한다 -_-;;

 

SVN에 대한 자세한 책:

(말 그대로 책이라서 출판된 버전도 있다)

http://svnbook.red-bean.com/

 

일단은 repository를 만들자. (아파치에 얹기 전에)

http://svnbook.red-bean.com/en/1.2/svn-book.html#svn.reposadmin

 

필자는 /export/svn에 모든 svn 레포지토리를 몰아넣기로 했다.

$ svnadmin create /export/svn/[레포지토리명]

#가 아니라 $로 되어있는데... root로서 한 다음 아파치데몬에게 소유권을 넘기는 것으로 정정한다 -ㅠ-... 그렇게 하지 않으면 아파치가 commit되어 온 자료를 디렉토리에 write 할 수 없다.

# chown -R webservd:webservd /export/svn/[레포지토리명]

(-R옵션으로 하위 디렉토리 및 파일까지 적용)

 

레포지토리가 만들어졌음!

cvs repository를 만들 때와 마찬가지로 레포지토리명으로 된 디렉토리 안에 다양한 파일들이 생기는데 그것은 책에 자세히 나와있으니 넘어가겠다 -ㅠ-;;;

 

아파치의 conf파일의 *마지막*에 다음 설정을 집어넣어보자:

<Location /svn/mod>  # 이 라인에는 웹브라우저상으로 보이는 위치
          DAV svn
          SVNPath /export/svn/mod    # 절대경로로 된 시스템에서의 repository 위치
</Location>

 

아파치를 재시작하고

http://xxx.yyy.ac.kr/svn/mod/

라고 하니 접속이 잘 된다 :D

 

허나... 이런 설정으로는 아무나 해당 repository를 볼 수 있게 된다 -_-;;;

설정을 추가해준다:

AuthType Basic
AuthName "Subversion repository"
AuthUserFile /export/svn/mod/etc/passwd

 

/export/svn/mod/etc/passwd

에 써먹을 사용자 passwd을 만들면 됨...

 

읽기/쓰기 제한을 걸려면: Require valid-user

 

쓰기 제한만 걸려면:

<LimitExcept GET PROPFIND OPTIONS REPORT>
  Require valid-user
</LimitExcept>

 

그룹별로 권한을 다르게 하려면:

 

AuthGroupFile /my/svn/group/file

             <LimitExcept GET PROPFIND OPTIONS REPORT>
                 Require group svn_committers
             </LimitExcept>

             <Limit GET PROPFIND OPTIONS REPORT>
                 Require group svn_committers
                 Require group svn_readers
             </Limit>

 

를 아파치의 설정에 넣어준다.

 

이는 설정의 일부이므로

http://httpd.apache.org/docs-2.0/misc/tutorials.html

에서 자세한 것을 참고하시오.

 

필자는 읽기 및 쓰기 제한을 걸었다.

touch로 /export/svn/mod/etc/passwd파일을 만들기는 하였으되, 사용자는 어떻게 추가할까?

 

역시 책에 나와있음.

 

$ htpasswd -cm /export/svn/mod/etc/passwd [사용자명]

-cm옵션에 대해: c는 파일이 없을 때 만든다. m은 md5로 비번을 encrypt하란 말이다.

md5가 crypt보다 훨씬 낫다. crypt는 굉장히 쉽게 깰 수 있다.

 

근데 htpasswd가 없다 -ㅠ-;;.. 아?

/usr/local/apache2/bin/htpasswd 이군!

 

이로서 서버 설정은 마친다.