[SVN]사용하기

Lab/BackUp 2008.06.23 11:35 posted by 야매코더

1. Subversion 을 설치해보자


이재홍님이 작성하신 Subversion 사용법(http://www.pyrasis.com/main/Subversion-HOWTO)에 나온 내용과 AnNyung Linux 1.2R3에 Subversion 1.3.1 설치(http://blog.naver.com/nolimit_gc/90003599559) 내용을 참고하여 내 리눅스 서버에 Subversion을 설치할려고 했다.

Subversion을 설치할려면 몇가지 관련 패키지를 설치해야하는데 아래와 같이 의존성 문제로 설치를 할 수 없는 것이 아닌가? 나처럼 리눅스 초자가 이런문제를 금방해결하는 것은 거의 불가능해보였다.

# rpm -ivh apr-0.9.12-1.i386.rpm
오류: 의존성 문제로 인해 실패함:
        libc.so.6(GLIBC_2.3)   (은)는 apr-0.9.12-1 에서 필요로 합니다
        libpthread.so.0(GLIBC_2.3.2)   (은)는 apr-0.9.12-1 에서 필요로 합니다

# rpm -ivh apr-devel-0.9.12-1.i386.rpm
오류: 의존성 문제로 인해 실패함:
        apr = 0.9.12-1 (은)는 apr-devel-0.9.12-1 에서 필요로 합니다
        gcc = 3.2.2 (은)는 apr-devel-0.9.12-1 에서 필요로 합니다

# rpm -ivh apr-util-0.9.12-1.i386.rpm
오류: 의존성 문제로 인해 실패함:
        libapr-0.so.0   (은)는 apr-util-0.9.12-1 에서 필요로 합니다
        libc.so.6(GLIBC_2.3)   (은)는 apr-util-0.9.12-1 에서 필요로 합니다
        libdb-4.0.so   (은)는 apr-util-0.9.12-1 에서 필요로 합니다
        liblber.so.2   (은)는 apr-util-0.9.12-1 에서 필요로 합니다
        libldap.so.2   (은)는 apr-util-0.9.12-1 에서 필요로 합니다

위 내용에 빨간색 처리된 부분은 리눅스 커널 버전이 낮기 때문에 생기는 의존성 오류이다. 후반에 한번더 자세히 언급하겠지만 이러한 경우에는 해당 source rpm을 다운받아 시스템에 맞게 build하는 방법을 택하거나 또는 커널을 업데이트 해야한다.

그런데 내 서버는 안녕리눅스가 운영체제이다. 안녕리눅스이기 때문에 위에서 설명한 것 처럼 어렵게 설치할 필요가 없다는 것을 알았다. 김정균님이 만든 안녕리눅스(http://annyung.oops.org/)에서는 자동으로 패키지를 추가하거나 업데이트가 가능하게 만들어져 있다. 하지만 subversion도 제공하리라고는 상상도 못했다 ㅡㅡ;;;

난 다음 두 줄 명령어로 subversion 설치를 완료했다.
# pkgsysupdate
# pkgadd subversion
subversion      :
  ==> 의존성 패키지 neon 성공
  ==> 의존성 패키지 apr 성공
  ==> 의존성 패키지 db4 성공
  ==> 의존성 패키지 apr-util 성공
  ==> subversion Install 성공
으아아아~~~ 이거 너무 좋은거 아니여? 리눅스 공부하는 사람들에게는 오히려 이렇게 자동화 처리된 것이 쥐약일 수 있겠지만 나처럼 리눅스하고 그리 친하지 않은 사람에게는 좋은 것 같다. 3~4시간을 끙끙 대면서 별짓을 다해도 안되는데... 단 2줄로 설치되다니.. 훗~

참고로 이런 의존성 문제가 발생할 경우에는 Source RPM을 다운로드 받아서 rpm을 시스템에 맞게 build를 해서 하면 아까와 같은 문제를 해결할 수 있다고 한다(박우람씨 Thanks)

아래는 mirror.oops.org에서 제공하는 subversion의 Source RPM을 FTP로 받아서 rpm을 build하는 예이다.
# ncftp mirror.oops.org
# cd pub/AnNyung/1.0/SRPMS/SRPMS/
# get subversion-1.1.4-2.src.rpm
# exit

# rpmbuild --rebuild --target i686 subversion-1.1.4-2.src.rpm
# cd /usr/src/annyung/RPMS/i686/
이처럼 의존성 에러가 날때 내 시스템에 맞추어 RPM을 제작하기 위해 rpmbuild를 사용한다. 성공하면 안녕리눅스의 경우 /usr/src/annyung/RPMS/i686/에 rpm이 만들어져 있다. redhat인 경우는  /usr/src/redhat/RPMS/i686/일 거다.

만약 의존성을 check안하고 rpm build할려면 rpmbuild -nodeps 옵션을 추가하면 된다.


그럼 SVN을 구동해볼까나?


2. Subversion을 사용해보자


여기서는 안녕리눅스와는 상관없는 내용이다. 모든 Linux에 적용될 수 있는 이야기 이다.
더욱 자세한 사항은 http://www.pyrasis.com/main/Subversion-HOWTO  를 참고한다.

2-1 저장소를 만들어보고 svnserve를 이용한 서버 구동 테스트

난 Apache로 말고 순수하게 svn:// 로 접속해서 사용할 수 있도록 만들고자 한다. svn://을 사용하면 Apache를 사용할때보다 더욱 빠르다고 한다.

먼저 SVN을 사용하기 위해서 저장소(Repository)를 만들어야 한다. 이 저장소는 프로젝트마다 하나씩 필요할 것이다. 난 /home/svn/에 저장소 root를 잡을려고 한다.

#mkdir /home/svn
그런 다음 만든 svn폴더로 가서 파일 시스템(버클리 DB를 사용할 수도 있다.)을 이용한 sample이라는 이름으로 저장소를 만든다.
#cd /home/svn
#svnadmin create --fs-type fsfs sample
/home/svn/sample/ 로 가서 ls를 하면 관련 파일들이 있으며 여기 있는 파일을 임의로 수정하게 되면 데이타를 다 잃어버릴 수도 있으니 주의하기 바란다.

이제 SVN을 실행한다. 실행하면 3690 포트가 열린다.
#svnserve -d -r /home/svn
테스트 하기 위해
#svn checkout svn://(서버 IP또는 도메인)/sample
checked out revision 0. 이 나오면 제대로 설정한 것이다. 현재상태는 누구나(Anonymous) 저장소에 접근해서 체크아웃, 커밋이 가능하다.


2-2 Svnserve에서 ID로 인증하기

Subversion 0.33.0 이후로 ID로 사용자 인증이 가능하게 되었다. 그래서 아까 만들어 놓은 저장소안에 /home/svn/sample/conf/svnserve.conf 파일을 찾아서 설정만 해주면 된다.

#vi /home/svn/sample/conf/svnserve.conf

### This file controls the configuration of the svnserve daemon, if you
### use it to allow access to this repository.  (If you only allow
### access through http: and/or file: URLs, then this file is
### irrelevant.)

### Visit http://subversion.tigris.org/  for more information.

[general]
### These options control access to the repository for unauthenticated
### and authenticated users.  Valid values are "write", "read",
### and "none".  The sample settings below are the defaults.
anon-access = none
auth-access = write

### The password-db option controls the location of the password
### database file.  Unless you specify a path starting with a /,
### the file's location is relative to the conf directory.
### The format of the password database is similar to this file.
### It contains one section labelled [users]. The name and
### password for each user follow, one account per line. The
### format is
###    USERNAME = PASSWORD
### Please note that both the user name and password are case
### sensitive. There is no default for the password file.
password-db = passwd
### This option specifies the authentication realm of the repository.
### If two repositories have the same authentication realm, they should
### have the same password database, and vice versa.  The default realm
### is repository's uuid.
realm = jidolstar's Repository

위와 같이 설정하면 anon-access=none에 의해 아무나 read를 못하게 막는다. 만약 이부분이 read라면 아무나 들어와 읽을 수 있다. 그리고 auth-access=write는 ID로 인증된 사람만 쓰기 권한을 주게 된다.
password-db = passwd는 /home/svn/sample/conf/ 아래에 passwd 이름으로 ID를 만들 수 있다.
이것은 다음과 같이 만든다.
#vi /home/svn/sample/conf/passwd

[users]
sampleuser = password1234
설정이 완료되고 svn checkout svn://(사용자 도메인)/sample 으로 접속하면 ID와 비밀번호를 입력하여 성공하면 "checked out revision 0" 이 나온다.

여기서 잠깐!!!
외부에서 우리가 설치한 SVN에 접근하기 위해서는 반드시 3690 포트가 열려 있어야 한다.

3690 포트가 열려있는지 확인하기 위해 다음과 같이 확인해보자

# nmap localhost -p1-9999
....(생략)
3690/tcp open  unknown
....(생략)
Nmap run completed -- 1 IP address (1 host up) scanned in 1.165 seconds

3690 포트가 없다면 방화벽을 의심해본다.

# vi /etc/oops-firewall/filter.conf
에서 TCP_ALLOWPORT에 3690을 추가한다.
그리고 firewall을 다시 실행한다.

# service oops-firewall restart