본문 바로가기
ubuntu/server

우분투에 subversion server를 설치하자 - Apache 기반

by lifeseed 2010. 11. 2.

1. subversion 및 Apache 용 module을 설치하자

$ sudo apt-get install subversion libapache2-svn

이렇게만 하면 우선 설치는 끝입니다. 우분투의 매력이라고나 해야되나?

libapache2-svn을 설치하면 다음의 파일들이 아파치에 추가됩니다.
/usr/lib/apache2/modules/
  - mod_dav_svn.so
  - mod_authz_svn.so

/etc/apache2/mods-available/
  - dav_svn.conf 
  - dav_svn.load

/etc/apache2/mods-enabled/
  - dav_svn.conf 및 dav_svn.load의 link 파일

dav_svn.load 파일은 위의 두 라이브러리 include파일이며,
dav_svn.conf는 svn의 환경설정 파일입니다.

2. svn구동을 위한 apache 환경 설정

이제 Apache에서 svn을 control하기위한 환경 설정을 합니다.

dav_svn.conf를 Editor로 열어보면 모두 주석처리 되어 있어서 아직 repository등에 대한 접근 url 및 권한등이 동작하지 않습니다.
해당파일을 수정하여도 되며, 다른 파일을 생성하여 mods-enabled에 추가하여도 됩니다.

OS를 새로 설치해야될 상황을 대비하여 data backup 차원에서 repository가 있는 Disk에 config 파일을 저장하는 방법을 사용합니다.
/home/repos/conf에 htpasswd 파일 및 httpd_svn.conf 파일을 생성하여 저장하여둡니다.
다음과 같은 Sample로 작성가능합니다.

- httpd_svn.conf -

# SVN Repository
<Location /svn>
    DAV svn
    SVNParentPath "/home/repos/svn"
    AuthType Basic
    AuthName "Project Repository Name"
    AuthUserFile "/home/repos/conf/htpasswd"               # htpasswd로 생성된 ID, PW 파일
    Require valid-user
</Location>

해당 파일의 링크파일을 /etc/apache2/mods-enabled 폴더에 생성합니다.
sudo ln -s /home/repos/conf/httpd_svn.conf /etc/apache2/mods-enabled/httpd_svn.conf

아파치를 새로 구동하자.
$ sudo /etc/init.d/apache2 restart
or
$ sudo apache2ctrl restart


3. Repository 관리

1) Repository 생성
File System Type을 fsfs 및 bdb type으로 생성이 가능하다.

그러나 우분투 10.10에서 berkeley DB type (bdb)으로 Repository를 생성 후 svn client로 접속하였을 때 다음과 같은 메세지가 발생한다.
   "Could not open the requested SVN filesystem"

cf) 2012.3.8 추가
-> svn build시 berkeley DB를 사용하는 옵션이 추가되어야 하나, 우분투에서 apt-get으로 설치시 사용이 불가능하다.

아무튼 무조건 fsfs type을 이용하자.

$ sudo svnadmin create --fs-type fsfs repostory_name

2) Repository 의 Backup 및 Restore
- svn 서버의 version이 같을 경우 Repository의 Copy 만으로 Backup 및 Restore가 가능하다.
그러나 svn의 서버 version이 다르거나, bdb type으로 이미 만들어져서 사용된 경우 해당 방법으로는 Backup 및 Restroe가 불가능하다.

- svnadmin dump 및 load 명령을 이용하자.
해당 명령으로는 fs-type 및 version에 구애받지 않고 Backup 및 Restore 수행이 가능하다.

>> Backup
기존 서버에서 우선 Backup을 실행하자
$ sudo svnadmin dump repostory_name > repostory_back.dat

>> Restore
i) 새로 설정한 서버의 repostory root 폴더로 이동한 후 새로운 repository 생성
$ sudo svnadmin create --fs-type fsfs repostory_name

ii) Backup한 파일을 복구
$ sudo svnadmin load repostory_name < repostory_back.dat


3) Repository 권한 설정
 이제 svn client에서 checkout을 실행하면 아무 문제 없이 잘 동작한다.
 파일을 수정하거나, 새로운 파일을 생성하여 추가하고, commit를 하면....

ㅡ,.ㅡ permission denied !!!

생성된 svn의 repository는 root 권한으로 만들어지거나 copy되었기 때문에 root 소유가되어, write 권한이 없다.
svn repository는 apcahe를 이용할 경우 사용자가 아닌 apcahe가 접근 R/W를 수행하므로, www-data 의 권한을 할당하여야 한다.

즉 repositry를 생성할 때 마다 권한 할당을 해주어야 한다.

$ sudo chown -R www-data:www-data ./repostory_name

이제 다시 commit을 실행하면... 휴~~ 안도의 한숨이 나온다. ^_______^

2012.3.8 추가
  berkeley DB로 생성된 Repository 복구하기
  - Repository를 폴더채 Backup한 경우 svn으로 접근이 불가능한 경우가 발생한다.
   svnadmin dump로도 backup이 안된다. ㅡ,.ㅡ 난감한 상황...

 1.  berkeley DB 를 설치한다. 
  $sudo apt-get install db4.8-util 
  cf) 4.4 버전을 사용하고 싶으면  /etc/apt/sourcelist 에 아래 라인을 추가하고 apt-get udpate를 하면된다.
   아래 주소는   http://packages.ubuntu.com/hardy/db4.4-util  를 참조.
  ## for bekery db db4.4-util
  deb http://free.nchc.org.tw/ubuntu/ hardy main universe

 2. 아래 명령을 수행한 후 svnadmin dump를 이용하여 Backup이 가능하다.
  $ cd /svn_repo_path/db
  $ db4.4_checkpoint -1     # 요놈을 수행하면 끝이 없다. 요고 실행없이 한번 해봐야겠다. 우선은 다른 터미널을 열어 아래 명령을 수행했다.
  $ db4.4_recover
  $ db4.4_archive
  
   이러고 나면 svnadmin dump가 가능해진다. 
   fsfs type으로 repository 만들어서 svnadmin load하면 끝... 휴~~~~