[Software Configuration Management] SVN Subversion 설치

안녕하세요 IT 뽀로로 입니다. 

 

오늘은 형상관리 (Software Configuration Management)에 대해서 살짝 알고 실무에서 대표적으로 사용되는

 

SVN에 대하여 설치 방법 및 사용법에 대하여 소개할까 합니다.

 

#형상 관리란?

소프트웨어에서 형상 관리는 개발 중 발생하는 모든 산출물들이 변경됨으로써 점차 변해가는 소프트웨어 형상을 체계적으로 관리하고 유지하는 기법이다. 좀 더 자세히 설명하면 형상 관리는 소프트웨어 개발 생명주기 전반에 걸쳐 생성되는 모든 산출물의 종합 및 변경 과정을 체계적으로 관리하고 유지하는 일련의 개발 관리 활동으로, 소프트웨어에 가시성과 추적 가능성을 부여하여 제품의 품질과 안전성을 높인다.

 

[네이버 지식백과] 형상 관리의 개념과 절차 (쉽게 배우는 소프트웨어 공학, 2015. 11. 30., 한빛아카데미(주))

 

라고 합니다. 형상관리로 사용하는 툴은 Git , SVN 등등이 있습니다. 

 

협업하여 개발할때는 형상관리가 필수적으로 중요하죠! 

 

그럼 이제 SVN 설치 방법에 대하여 알아 봅시다.

 

#SVN Server 구축

 

SVN Server를 구축하는건 굉장히 쉽습니다.

 

먼저 SVN Server로 사용되는 SVN Subversion을 설치합니다. 

 

명령어는 다음과 같습니다.

 

$sudo apt-get install subversion

 

설치가 완료되면 Repository를 관리할 디렉터리를 하나 만들어 줍니다.

 

$sudo mkdir -p /home/svn

 

이 디렉터리는 Repository를 관리하기 위한 디렉터리일 뿐입니다. 

 

그럼 이제 Repository를 만들어야겠죠?

 

이때는 svnadmin create 명령을 사용합니다

 

$sudo svnadmin create /home/svn/[Repository name]

 

이렇게 Repository를 만들고 ls 명령어를 쳐보면 README.txt 부터 conf 등등 여러 파일 및 디렉터리가 존재 합니다.

 

이제 SVN 환경 설정을 해주기 위해 Repository 의 conf 디렉터리로 이동해 줍니다.

 

$cd /home/svn/[Repository name]/conf

 

경로를 이동해서 ls를 쳐보면 밑의 그림과 같은 파일들이 존재합니다.

 

Repository의 conf 디렉터리안의 파일들

이 파일들이 SVN 서버를 구축하는데 필요한 설정들을 해줍니다.

 

먼저 authz를 열어 줍니다. authz는 권한설정 파일로 svn에 접속할때  사용자마다 권한을 설정할 수 있습니다.

 

$sudo vim authz 

 

해당 파일을 열고 다음과 같이 입력합니다

 

[/]

사용자id1 = rw

사용자id2 = rw

이렇게 추가하면 사용자id1과 사용자id2라는 계정은 Repository의 전체 경로에 대하여 쓰기와 읽기 권한이 주어집니다.

 

다음으로 passwd 파일을 열어 줍니다. 이 파일은 사용자 계정 등록을 해주는 파일입니다.

 

$sudo vim passwd 

 

파일을 열었으면 안의 내용 양식과 동일하게 계정을 생성해줍니다. 양식은 [id]=[pwd] 입니다.

사용자 등록

그리고 마지막으로 svnserver.conf라는 파일을 열어 줍니다. 이 파일은 svn의 기본설정을 담당합니다.

하단의 그림에서 주석이 해제된 부분만 똑같이 해제하시면 됩니다.

svnserver.conf

그럼 이제 기본적인 svn 서버 설정은 끝!!  이제 svn을 실행해 봅시다.

 

$svnserve -d -r /home/svn 

 

이때의 경로는 repository를 관리하는 디렉터리를 입력하면 됩니다.

 

실행이 제대로 됬나 확인해보려면 port를 확인해보면 되겠죠? svn은 기본적으로 3690포트를 사용합니다.

 

$netstat -ntlp | grep 3690

 

위 명령어를 수행해서 하단의 그림처럼 나온다면 svn이 작동하고 있는 것입니다.

svn port 확인

마지막으로 svn 서버가 컴퓨터가 재부팅 될때마다 다시 켜주고하기 귀찮으니 자동으로 실행되게 설정합니다.

 

$sudo vim /etc/init.d/svnserve 

 

svnserve라는 파일을 만들고 아래의 내용을 복사 붙여넣기 합니다!! 

 

이때 중요한 점은 DAMON_ARGS 부분에 실제 경로를 입력해주면 됩니다.

#! /bin/sh

### BEGIN INIT INFO

# Provides:          svnserve

# Required-Start:    $local_fs $syslog $remote_fs

# Required-Stop:     $local_fs $syslog $remote_fs

# Default-Start:     2 3 4 5

# Default-Stop:      0 1 6

# Short-Description: Start svnserve

### END INIT INFO

 

# Author: Michal Wojciechowski <odyniec@odyniec.net>

 

PATH=/sbin:/usr/sbin:/bin:/usr/bin

DESC="svnserve"

NAME=svnserve

DAEMON=/usr/bin/$NAME

DAEMON_ARGS="-d -r /home/svn"

PIDFILE=/var/run/$NAME.pid

SCRIPTNAME=/etc/init.d/$NAME

 

[ -x "$DAEMON" ] || exit 0

 

[ -r /etc/default/$NAME ] && . /etc/default/$NAME

 

. /lib/init/vars.sh

 

. /lib/lsb/init-functions

 

do_start()

{

          start-stop-daemon --start --quiet --pidfile $PIDFILE --exec $DAEMON --test > /dev/null \

                   || return 1

          start-stop-daemon --start --quiet --pidfile $PIDFILE --exec $DAEMON -- \

                   $DAEMON_ARGS \

                   || return 2

}

 

do_stop()

{

          start-stop-daemon --stop --quiet --retry=TERM/30/KILL/5 --pidfile $PIDFILE --name $NAME

          RETVAL="$?"

          [ "$RETVAL" = 2 ] && return 2

          start-stop-daemon --stop --quiet --oknodo --retry=0/30/KILL/5 --exec $DAEMON

          [ "$?" = 2 ] && return 2

          rm -f $PIDFILE

          return "$RETVAL"

}

 

case "$1" in

  start)

          [ "$VERBOSE" != no ] && log_daemon_msg "Starting $DESC" "$NAME"

          do_start

          case "$?" in

                   0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;

                   2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;

          esac

          ;;

  stop)

          [ "$VERBOSE" != no ] && log_daemon_msg "Stopping $DESC" "$NAME"

          do_stop

          case "$?" in

                   0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;

                   2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;

          esac

          ;;

  restart|force-reload)

          log_daemon_msg "Restarting $DESC" "$NAME"

          do_stop

          case "$?" in

            0|1)

                   do_start

                   case "$?" in

                             0) log_end_msg 0 ;;

                             1) log_end_msg 1 ;; # Old process is still running

                             *) log_end_msg 1 ;; # Failed to start

                   esac

                   ;;

            *)

                   # Failed to stop

                   log_end_msg 1

                   ;;

          esac

          ;;

  *)

          echo "Usage: $SCRIPTNAME {start|stop|restart|force-reload}" >&2

          exit 3

          ;;

esac

 

exit 0

 

그리고 서비스를 등록해줍니다.

 

$sudo update-rc.d svnserve defaults

 

그리고 서비스 재시작을 해줍니다.

 

$sudo service svnserve restart

 

서비스 실행 확인은 다음과 같습니다.

 

$sudo service svnserve status

 

이상 SVN 서버 구축이 끝났습니다!! 이제 다음 포스팅에서는 

 

SVN 서버를 이용해 파일을 저장하고 업데이트하는 방법에 대하여 알아 보도록 할게요!!