CentOS 6에 내장되어 있는 서브버전은 1.6 이다. 이것을 사용해도 되지만 1.7 이상부터 Protocol 속도가 빨라졌고 서브버전 내부의 File System 이 최적화되는등 개선이 많으므로 최신 버전인 1.8 로 작업하는걸 설명한다.

 

클라이언트 설치

서브버전 서버 설치전에 서버의 정상 작동 여부를 확인할 수 있게 서브버전 클라이언트를 작업자의 PC 에 설치하는게 좋다. 권장하는 클라이언트는 Tortoisesvn.net에서 배포하는  Tortoisesvn이며 cmd 기반의 서브버전 유틸리티로 작업을 진행할 예정이다.

TortoisSVN 설치시에 cmd 기반의 서브버전 유틸리티가 설치될 수 있도록 command line client tools 를 체크하자.( 기본값은 설치가 안 된다)

 

설치

 

  1. Subversion관련 기술지원과 enterprise Subversion 을 판매하는 회사인 wandisco 에서 리눅스용 서브버전 패키지를 다운받는다. 

    wget http://opensource.wandisco.com/rhel/6/svn-1.8/RPMS/x86_64/mod_dav_svn-1.8.5-1.x86_64.rpm
    wget http://opensource.wandisco.com/rhel/6/svn-1.8/RPMS/x86_64/subversion-1.8.5-1.x86_64.rpm
    wget http://opensource.wandisco.com/rhel/6/svn-1.8/RPMS/x86_64/subversion-tools-1.8.5-1.x86_64.rpm
    wget http://opensource.wandisco.com/rhel/6/svn-1.8/RPMS/x86_64/serf-1.3.2-2.x86_64.rpm

    (info) 1.8 부터 서브버전 이 사용하는 HTTP client library 가 neon 에서 serf 로 변경되어 serf 패키지 설치가 필요하다.

  2. yum 으로 패키지를 설치한다.

    yum localinstall mod_dav_svn* subversion*

 

패키지가 제공되므로 아주 간단하게 설치가 완료되었다. 이제 저장소를 생성해 보자.

 

저장소 생성

 

이제 서브버전이 사용할 저장소를 만들어야 한다. 주의할 점은 6장에서 다룬 SELinux 는 httpd 를 엄격하게 관리하므로 SELinux 의 정책에 맞게 저장소의 속성을 설정해야 한다.

  • 소유자와 그룹 - apache
  • 저장소의 SELinux context - httpd_sys_content_t

위 사항에 주의하여 프로젝트에 사용할 저장소를 만들어 보자

  1. /var/에 저장소 루트로 사용할 디렉터리를 생성하고 해당 디렉터리로 이동한다. 

    mkdir /var/svn/

  2. svnadmin 명령어로 저장소를 생성한다.

    svnadmin create /var/svn/myrepos

  3. 외부에서 커밋을 수행할 경우 저장소 메타 데이타에 쓰기 권한이 있어야 한다. 이 작업은 아파치 프로세스에서 수행되므로 권한 문제가 없게 저장소 소유자와 그룹을 아파치로 변경한다.

    chown -R apache.apache /var/svn/

  4. SELinux 가 아파치 웹서버의 접근을 허용하도록 웹 서버용 컨텍스트(httpd_sys_content_t)를 설정한다. 

    chcon -R -t httpd_sys_content_t /var/svn/myrepos

    서브버전 저장소에 httpd_sys_content_t 컨텍스트가 부여되어 있지 않으면 SELinux 가 차단해 버리므로 정상적으로 서비스를 제공할 수 없다. 앞으로 새로운 저장소를 추가할 경우 잊지 말고 chcon 으로 컨텍스트를 부여하자.

    semanage fcontext 명령어로 /var/svn 을 등록해 주면 /var/svn 디렉터리 밑에 새로운 저장소 생성시 chcon 을 하지 않아도 된다.

     

    semanage fcontext -a -t httpd_sys_content_t "/var/svn(/.*)?"

  5. 소유자 정보와 보안 컨텍스트가 제대로 설정이 되었는지 ls -lZ 를 통해서 확인한다.

    ls -lZ 

    drwxr-xr-x. apache apache unconfined_u:object_r:httpd_sys_content_t:s0 myrepos

httpd 설정

 

 

이제 httpd 를 통해 서브버전을 사용할 수 있도록 httpd 에 서브버전 저장소를 설정할 차례이다. (인증과 접근제어는 정상 동작 여부 확인후 진행한다.)

mod_dav_svn 패키지를 설치하면 /etc/httpd/conf.d/subversion.conf 설정 파일을 같이 설치한다. 이 파일에 Location 지시자로 저장소를 설정하면 httpd에 설정한 모든 VirtualHost 에서 해당 저장소에 연결이 가능하다(즉 ci.example.com/svn 으로도 연결이 가능하다).

우리는 svn.example.com 으로 들어올 경우에만 서브버전 서비스를 제공하고 싶으므로 서브버전 저장소 관련 설정은 subversion.conf 보다는 httpd 의 VirtualHost 설정 파일(conf/htttpd-vhost.conf)에 설정하는게 더 적당하다.

  1. vi /etc/httpd/conf.d/subversion.conf 열어서 Location 태그의 전체를 주석처리 한다.

    #<Location /svn>
    # DAV svn
    # SVNPath /opt/repo/
    # AuthType Basic
    # AuthName "SVN Repo"
    # AuthUserFile /opt/WANdisco/apache22/conf/svn.passwd
    # Require valid-user
    #</Location>
    BASH
  2. vi /etc/httpd/conf/httpd-vhost.conf 를 열어서 다음 VirtualHost 내용을 추가한다. SVNPath 에는 서브버전 저장소의 절대 경로를 넣어 주어야 한다.

    <VirtualHost *:80>
       ServerAdmin svnadmin@example.com
       ServerName svn.example.com
       ErrorLog logs/svn.example.com-error_log
       CustomLog logs/svn.example.com-access_log common
       <Location /repos>
            DAV svn
            SVNPath /var/svn/myrepos/
            # AuthType Basic
            # AuthName "SVN Repo"
            # AuthUserFile /var/svn/myrepos/svn.passwd
            # Require valid-user
        </Location>
    </VirtualHost>
    CODE
  3. 파일을 저장한 후에 httpd 를 재구동하여 설정을 반영한다.

    service httpd restart

  4. Web Browser를 구동하여 주소창에 http://svn.example.com/repos 를 입력하여 다음과 같은 화면이 보이면 서브버전이 정상 설치된 것이다. (저장소가 생성된 후에 커밋 내역이 없으므로 revision 은 0 이 된다)

client 로 설정 확인

 

정상 설치를 확인했으므로 앞에서 설치한 서브버전 유틸을 통해 저장소의 정보를 살펴보자. 

서브버전은 다음과 같이 명령어가 별도의 실행파일로 분리되어 있고 복잡한 하위 명령어와 옵션으로 이루어져 있다.  주요 실행파일의 용도를 알아보자.

  • svn - 서브버전 의 명령행 클라이언트이다. 체크아웃, 업데이트, 커밋, 로그 보기 등 대부분의 서브버전 기능을 수행할 수 있다. 앞으로 나오는 모든 예제는 svn 명령어를 통해 이루어 진다.
  • svnadmin - 저장소를 관리하는 유틸리티이다. 저장소를 생성하고 파일로 dump하고 파일로부터 저장소로 load 하는등의 업무를 수행할 수 있다. 일반 사용자는 쓸 일이 없고 저장소 관리자를 위한 용도이다.
  • svnlook - 저장소에서 일어나는 트랜잭션이나 리비전의 정보등을 볼 수 있는 유틸리티이다. 다음 장에서 설명할 서비브전의 hook 기능을 이용한 이벤트 스크립트 작성등에 활용된다.
  • svnsync - 서브버전 저장소를 원격에서 복제할 때 사용되는 유틸리티이다. 소스의 저장소는 SW 개발 프로젝트에서 가장 중요한 산출물이므로 백업이 필수적이다. 이 책에서는 svnsync 를 이용하여 원격지에 저장소를 백업할 것이다.
  • svndumpfilter - 저장소를 하나의 파일로 덤프한 후에 필터를 통해 특정 조건의 리비전만 포함/제외하여 새로운 덤프 파일을 만드는 유틸리티이다. 서브버전의 설계 특성상 커밋되면 해당 리비전은 저장소에 계속 남게 된다. svn delete 명령을 통해 삭제해도 delete 된 시점도 하나의 리비전으로 기록되며 삭제되기 전 리비전을 checkout 하면 삭제된 파일이나 디렉터리도 체크아웃이 가능하다. 커밋한 리비전을 삭제하려면 svnadmin 으로 저장소를 파일로 덤프한 후에 svndumpfilter 로 삭제할 리비전을 제외하여 파일을 새로 만들고 이를 저장소에 load 하는 방법말고는 없다.

일반적인 사용법은 명령어 하위명령어 option 형식으로 사용된다. 하위명령어와 option 은 명령어마다 다르나 help 처럼 공통된 하위 명령어가 있다.

명령어 help 를 입력하면 해당 명령어의 사용법에 대해 설명하고 명령어 help 하위명령어를 입력하면 하위명령어의 사용법과 옵션에 대해 출력한다.

예로  svnadmin help 를 입력하면 다음과 같이 svnadmin 에 대한 설명을 볼 수 있다.

    일반적인 사용법: svnadmin SUBCOMMAND REPOS_PATH [ARGS & OPTIONS ...]
    특정 부속 명령의 사용법을 위해서는 'svnadmin help <subcommand>' 를 참조하십시오.
    'svnlook --version'으로 버전과 파일시스템 모듈을 볼 수가 있습니다.

    가능한 부속 명령어 목록:
        crashtest
        create
        deltify
        dump

        ...

svnadmin help create 를 입력하여 저장소 생성시 어떻게 해야 하는지 확인할 수 있다.

       create: 사용법: svnadmin create REPOS_PATH

       REPOS_PATH 에 새로운 빈 저장소를 생성합니다.

      옵션:
          --bdb-txn-nosync : 트랜잭션을 커밋에서 fsync를 비활성화합니다[Berkeley DB] 
          --bdb-log-keep : 자동 로그 파일 삭제를 비활성화 합니다 [Berkeley DB]

 

이제 대략적인 서브버전 클라이언트 동작 방식을 알았으니 이를 이용하여 설정한 저장소의 정보를 확인해 보자

서브버전의 클라이언트인 svn.exe 를 사용하며 저장소의 정보를 보는 명령어인 info 를 사용할 것이다. 명령어 하위명령어 옵션 형식에 맞게 다음과 같이 입력하면 저장소의 정보를 볼 수 있다.

svn info REPOS_URL

 

  1. 윈도의 시작메뉴->실행을 선택하고 cmd.exe 를 입력하여 명령창을 구동한다.
  2. svn info http://svn.example.com/repos을 실행하면 다음과 같이 저장소의 정보가 표시된다.

위와 같이 저장소의 정보가 표시되면 정상적으로 설정이 된 것이므로 다음 단계로 넘어가자.