[.NET on OpenSource] Build your own source repository with Subversion on Ubuntu 9.0.4

안녕하세요? 웹지니입니다.

최근 저는 회사 업무 차원에서 Microsoft .NET 기반의 솔루션을 개발함에 있어 오픈 소스 및 Linux 시스템과의 협업에 대해 관심있게 공부를 하고 있어요. 처음 시작은 업무를 위한 것이었는데 지금은 개인적으로도 많은 흥미를 느끼고 있어 이제는 슬슬 저만의 Linux 시스템을 구성해 보고 싶은 생각도 듭니다만 아직은 만일의 사태에 대처할 능력이 안되어 망설여지고 있는 시점입니다.

사실 Visual Basic 4.0부터 시작해서 .NET에 이르기까지 Microsoft 기술만으로 먹고 살아온 저에게 있어 Linux나 오픈 소스 세상이란 그저 소위 말하는 긱(Geek)이나 해커(Hacker, Cracker가 아닌 컴퓨터에 대한 초고수 전문가 집단을 의미하는 말입니다 ^^)들만이 살 수 있는 일종의 별천지 같은 세상으로 밖에 느껴지지 않았었는데요. 이번 기회를 계기로 조금씩 Linux와 여러 오픈 소스 프로젝트들을 접해보면서 나름대로 느낀 바가 많았습니다.

해서 지금까지 공부했던 내용들을 정리할 겸 또 여러 분들과 공유도 할 겸 시리즈로 포스트를 기획하게 되었어요. 그 첫 번째 주제로는 유명한 Subversion을 이용한 소스 제어 환경의 구축입니다. 사실 이번 포스트는 .NET과 오픈 소스의 결합이라는 측면에서 볼 때 그 의미가 크지는 않습니다. 그러나 가격이 상대적으로 비싼 Team Foundation Server의 구축은 형편 상 쉽지 않고 그렇다고 Visual Source Safe를 사용하기는 또 좀 거시기한 소규모 기업이나 개인 개발자에게 Subversion은 매우 매력적인 도구가 아닐 수 없기에 Linux 상에서 Subversion 서버를 설치하고 Visual Studio를 통해 소스 관리를 수행하는 방법에 대해 소개할까 합니다.

사실 뭐 살짝 고루한 느낌의 제목들이 아닐 수 없습니다. 구글 신에게 물어보면 금새 수많은 유사한 내용의 포스트들을 쓰나미처럼 쏟아낼테니까요. 이쯤에서 다시 한 번 강조하지만 전 남들 다 아는 이야기도 포스트로 씁니다 –ㅅ-;;;

1. Installing Subversion on Ubuntu 9.0.4

자, 그러면 일단 가장 인기있는 Linux 배포판인 Ubuntu 리눅스를 기반으로 Subversion 설치 방법에 대해 알아보겠습니다. 저는 현재 Ubuntu 9.0.4 Desktop Edition을 사용하고 있으며 VMWare를 이용하여 가상 머신에 설치해 둔 상태입니다. Ubuntu 리눅스를 올바르게 설치하셨다면 터미널을 통해 다음의 커맨드를 실행하여 손쉽게 Subversion을 설치할 수 있습니다.

$ sudo apt-get install subversion

그러면 Ubuntu 리눅스는 현재 사용자 계정을 수퍼유저로 만들기 위해 비밀 번호를 확인하려 합니다. 올바른 비밀 번호를 입력하면 커맨드가 Ubuntu 리눅스가 자신이 가지고 있는 패키지 목록에서 subversion 패키지를 찾아 설치할 준비를 시작한 후 설치할 것인지를 묻습니다.

install_step1

여기서 [Y]를 입력하면 Ubuntu 리눅스가 필요한 파일들을 다운로드하여 압축을 해제한 후 설치를 마치게 됩니다. 설치 절차가 끝나고 다시 프롬프트가 나타나면 Subversion이 올바르게 설치되었는지 확인하기 위해 아래의 커맨드를 한 번 날려봅니다.

$ whereis subversion

whereis 명령은 지정된 패키지가 설치된 위치를 보여주는 커맨드입니다. 아래와 같은 결과를 볼 수 있다면 성공적으로 설치를 완료한 상태입니다.

subversion: /etc/subversion

2. Creating and configuring Subversion repository

Subversion의 설치를 마쳤으면 이제 새로운 Repository를 생성하고 사용자를 등록해 주어야 합니다. 물론 사용자별로 권한도 설정해 주어야 하겠지요. Windows 운영체제와 마찬가지로 Linux 환경이라 하더라도 사용자들은 별도의 그룹으로 만들어 관리하는 것이 향후에 관리 부담을 줄일 수 있는 방법일 것입니다.

2.1 Creating new account and user group for SVN

우선 다음과 같이 Subversion 사용자를 위한 새로운 사용자 그룹을 생성합니다.

$ sudo groupadd svnusers

이렇게 하면 svnusers라는 이름의 사용자 그룹이 생성됩니다. 이제 이 그룹에 추가할 사용자 계정을 생성해야겠지요? 사용자 계정을 생성하는 명령은 다음과 같습니다.

$ sudo useradd –G svnusers svnuser1 

이 커맨드는 svnuser1이라는 사용자 계정을 생성하고 svnusers 그룹에 추가하는 명령입니다. 이제 사용자 계정에 대한 비밀 번호를 지정하기 위해 다음의 명령을 실행합니다.

$ sudo passwd svnuser1

그러면 아래 그림과 같이 새로운 UNIX 비밀 번호를 입력하라는 프롬프트가 나타나게 됩니다. 비밀 번호를 두 번 입력하면 사용자 계정의 생성까지 완료하게 됩니다.

create_user_step1

2.2 Creating new Subversion repository

사용자 계정과 그룹을 생성했으므로 이제 Subversion의 Source Repository를 생성해 보겠습니다. 우선 Source Repository를 생성할 경로를 결정해야 합니다. 저의 경우에는 /opt/svn/project1 이라는 경로를 Subversion의 Source Repository로 사용하려고 합니다. 그러기 위해서는 다음과 같이 우선 이 디렉터리를 모두 생성해 주어야 합니다.

$ sudo mkdir –p /opt/svn/project1   <-- /opt/svn/project1 디렉터리를 만듭니다. 이 때 부모 디렉터리가 존재하지 않으면 함께 생성합니다.

위의 명령을 실행하면 /opt/svn/project1 디렉터리가 생성됩니다. 이 project1이라는 이름의 디렉터리는 실제 프로젝트 명으로 바꾸어서 이름을 지정해도 무방하겠지요? 예를 들면 /opt/svn/myFirstMvcProject 처럼요.

여기까지 실행했다면 이제 Subversion으로 하여금 방금 생성한 디렉터리를 Source Repository로 인식하도록 해야 합니다. 이 경우 다음의 커맨드를 사용합니다.

$ sudo svnadmin create /opt/svn/project1/
$ ls –alt ./project1

svnadmin 명령을 통해 /opt/svn/project1/ 디렉터리에 Source Repository를 설치합니다. 그런 후 ls 명령으로 해당 디렉터리를 살펴보면 몇 개의 디렉터리들이 생성되어 있는 것을 볼 수 있습니다. 이 중 conf 폴더에는 해당 Source Repository에 대한 설정 파일들이 생성되어 있습니다.

2.3 Access control

그러면 conf 폴더에 어떤 파일들이 생성되었는지 살펴볼까요? 기본적으로 Subversion Repository 폴더에는 다음의 세 가지 파일이 생성됩니다.

  • authz: Repository에 접근이 가능한 사용자 목록을 지정하는 설정 파일입니다.
  • passwd: authz 파일에 나열된 사용자들의 비밀 번호를 지정하는 설정 파일입니다.
  • svnserve.conf: 해당 Repository에 대한 사용자 DB와 비밀 번호 DB, 액세스 권한 등을 설정하는 파일입니다.

자, 우선 vi 에디터를 통해 svnserve.conf 파일을 열어봅니다. 그러면 아래와 같은 코드가 보일 것입니다.

#anon-access = read                    <- 익명 사용자에게는 읽기 권한만 부여합니다.
#auth-access = write                   <- 인증된 사용자에게는 읽기 및 쓰기 권한을 부여합니다.

#password-db = passwd               <- 사용자 인증에 필요한 비밀 번호를 저장한 파일로 passwd 파일을 지정합니다.
#authz-db = authz                       <- 인증된 사용자의 권한 목록을 저장한 파일로 authz 파일을 지정합니다.

#realm = My First Repository       <- Repository의 표시 이름을 지정합니다.

위의 코드에서 보듯이 각각의 항목은 모두 주석으로 처리되어 있습니다. 이 값들은 모두 기본 값으로 사용되므로 특별히 손 댈 필요는 없고 주석 처리된 그대로 두어도 무방합니다만 아래와 같이 변경해 보겠습니다. 주석을 제거할 때 줄의 맨 앞에 공백이 없도록 하셔야 합니다.

 

anon-access = read
auth-access = write

password-db = passwd 
authz-db = authz

realm = Project1 Repository

그런 후 password-db 항목에 지정된 passwd 파일과 authz-db 항목에 지정된 authz 파일을 수정하여 접근 가능한 사용자와 각 사용자의 권한을 편집해야 합니다.

우선 passwd 파일을 vi 편집기를 통해 열어보면 아래와 같은 코드가 보일 것입니다.

[users]
# harry = harryssecret
# sally = sallyssecret

미리 준비된 두 사용자는 예제로서 사용법을 보여주기 위한 것입니다. 이 두 라인을 삭제하고 앞서 생성했던 svnuser1 사용자에 대한 비밀 번호를 다음과 같이 지정합니다. 미리 말씀드리지만 이 비밀 번호는 Linux 시스템에 로그인 하기 위한 계정의 비밀 번호가 아니라 Subversion 시스템에 인증을 얻기 위해 사용하는 비밀 번호입니다.

[users]
svnuser1 = svnuser!

이와 같이 svnuser1 사용자의 인증 비밀 번호로 svnuser!를 지정했습니다. 이제 파일을 저장한 후 vi 에디터를 빠져나와 다시 authz 파일을 열어봅니다. 이 파일에는 다음과 같은 코드가 보일 것입니다.

[/foo/bar]
# harry = rw
# &joe = r
# * =

이 역시 예제 코드이며 각각 harry라는 사용자에게는 읽기 권한을, joe라는 사용자 역시 읽기 권한을 부여하며 그 외에 모든 사용자는 권한을 일체 제공하지 않는다는 뜻입니다. 이 파일을 편집하여 다음과 같이 project1 Repository에 대해 svnuser1 사용자에게 읽기 및 쓰기 권한을 부여합니다.

[/]
* =
svnuser1 = rw 

위의 코드는 project1 프로젝트 디렉터리의 루트에 대한 권한 설정을 수행하는 코드입니다. 우선 첫 번째 라인은 일단 모든 사용자에게 아무런 권한을 주지 않겠다는 뜻입니다. 그 이후로는 사용자마다 권한을 지정할 수 있으며 r은 읽기, w는 쓰기 권한을 의미합니다. * = 구문을 이용하여 전체 사용자에게 권한을 할당하지 않는 코드는 항상 맨 위에 있어야 한다는 것에 주의하세요!

2.4 Running Subversion Server

이제 Subversion 서비스를 실행하여 올바르게 동작하는지 확인해 보겠습니다. 다음의 명령을 실행하여 svnserve 도구를 이용하여 Subversion 서비스를 시작합니다.

$ sudo svnserve –d –r /opt/svn/

그런데 이 명령을 이용하면 svnserve가 동작하기는 하지만 Linux 시스템을 재시작하면 다시 수동으로 실행해 주어야 한다는 단점이 있습니다. 이 경우 /etc/rc.local 파일에 svnserve 도구가 실행되도록 스크립트를 작성하면 Linux 시스템을 재시작해도 자동으로 svnserve 도구를 실행할 수 있게 됩니다. 우선 whereis 명령을 통해 svnserve 도구가 설치된 폴더를 알아냅니다. 저의 경우에는 /usr/bin/svnserve에 설치되어 있군요. 따라서 vi 에디터를 통해 /etc/rc.local 파일을 열고 다음과 같이 스크립트를 추가합니다.

# rc.local

/usr/bin/svnserve –d –r /opt/svn/ > /dev/null

exit 0

위의 굵게 표시된 코드를 주석과 exit 0 구문 사이에 넣어주면 Linux 시스템을 재시작할 때 svnserve 도구도 함께 실행됩니다.

2.5 Using Subversion on Windows

이제 Tortoise SVN과 같은 도구를 이용하여 Windows 운영체제 상에서 해당 Repository에 접근해 보겠습니다. Tortoise SVN을 설치한 후 Windows 탐색기에서 마우스 오른쪽 버튼을 클릭하고 [Tortoise SVN > Repo Browser...]  메뉴를 차례대로 선택합니다.

windows_exp

그러면 아래 그림과 같이 Repository Browser가 나타나며 Repository URL의 입력을 요구합니다.

repo_browser1

조금 전 생성한 Subversion Repository의 주소를 입력하고 [OK] 버튼을 클릭하면 아래 그림과 같이 사용자를 인증 정보 입력을 요구하는 화면이 나타납니다.

repo_browser2

이미 생성해 둔 사용자 계정과 Subversion 비밀 번호를 입력하면 아래 그림과 같이 Repository Browser가 모습을 나타냅니다.

repo_browser3

대부분의 경우 Subversion Repository에는 trunk, branches, tags 등의 디렉터리로 구분하여 소스 코드를 관리합니다. 따라서 이 세 가지 폴더를 생성하기 위해 아래 그림과 같이 Repository Browser에서 마우스 오른쪽 버튼을 클릭하고 [Create folder...] 메뉴를 선택합니다.

repo_browser4

그러면 생성할 디렉터리 이름을 입력하는 대화 상자가 나타납니다. [trunk]라고 입력하고 [OK] 버튼을 클릭한 후 로그를 남기는 대화 상자에서 역시 [OK] 버튼을 클릭하면 아래 그림과 같이 새로운 폴더가 추가되면서 Revision 값이 1로 증가되는 것을 볼 수 있습니다.

repo_browser6

지금까지의 과정을 통해 Linux 시스템에 Subversion을 설치하고 활용할 수 있게 되었습니다. 그러면 Windows 환경에서 사용할 수 있는 Subversion 클라이언트들에 대해 잠깐 소개해 볼까요?

3. SVN Clients for Windows and Visual Studio

Subversion은 이전에 한창 인기를 끌던 CVS를 대체하기 위해 개발된 소스 제어 솔루션으로 CVS의 여러 단점들을 훌륭히 극복하여 많은 사용자 층을 확보하고 있습니다. 덕분에 Linux는 물론 Windows에서도 동작하는 다양한 Subversion 클라이언트 도구들을 손쉽게 찾아볼 수 있습니다.

3.1 Tortoise SVN

이 도구는 Windows 탐색기에 통합되어 Windows 탐색기를 통해 다양한 Subversion 관련 작업을 수행할 수 있는 도구입니다. 아마도 소스 제어 솔루션으로 Subversion을 사용하는 개발자라면 거의 대부분 이미 설치하여 사용 중일 것입니다. 이 도구는 아래 URL을 통해 다운로드하고 설치할 수 있습니다.

Tortoise SVN 홈페이지: http://tortoisesvn.tigris.org/

3.2 Ankh SVN

Ankh SVN은 Visual Studio 2005 및 Visual Studio 2008에 통합되어 동작하는 Subversion 클라이언트 애드온입니다. Collab.net에서 개발하여 무료로 제공되고 있으며 얼마 전 2.1 버전이 새롭게 출시되었습니다. Visual Studio 2003 혹은 그 이전 버전 사용자는 Ankh SVN 1.0.4 버전을 사용할 수 있습니다. 2.1버전은 기존의 2.0 버전에 비해 안정성이 매우 향상된 느낌이에요. 다운로드 링크는 다음과 같습니다.

Ankh SVN 홈페이지: http://ankhsvn.open.collab.net/

3.3 Visual SVN

Visual SVN은 Visual Studio 2003부터 Visual Studio 2008까지 지원하는 Subversion 클라이언트 애드온으로 안타깝게도 유료로 판매되는 제품입니다. 또한 특이한 점은 Tortoise SVN이 반드시 함께 설치가 되어야 한다는 점입니다. 홈페이지에서는 평가판을 다운로드 하여 사용해 볼 수 있습니다.

VisualSVN 홈페이지: http://www.visualsvn.com/

이상으로 Subversion의 설치부터 필요한 환경 설정 및 권한 설정, 실제 사용에 이르기까지 필요한 내용들에 대해 간략하게 살펴보았습니다. 조금 더 상세한 내용을 전달해 드릴 수 있었으면 좋았겠지만 저도 아직은 많이 모자랍니다.

뭐...곧 더 좋아지겠지요? ^^
즐거운 하루 되세요!

평점 5.0 / 2회 참여

  • Currently 5/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Comments

Add comment


 

biuquote
Loading



Search

Recent comments