DevOps/SVN

[SVN] Ubuntu SVN 설치 및 자동 실행 방법

cob 2023. 12. 4. 16:21

 

 

1. SVN 설치

 sudo apt install subversion

 

1-1) 리포지토리 생성

리포지토리를 생성하고 싶은 경로를 포함해 create 명령어를 작성한다.
// svn 폴더 생성
mkdir /home/svn

// TEST 리포지토리 생성
sudo svnadmin create /home/svn/TEST

 

1-2) SVN 서버 접근 권한 설정

// 생성한 리포지토리 이동
cd /home/svn/TEST

// svnserve.conf 파일 수정
sudo vi svnserve.conf

 

아래에 표시한 부분을 주석을 풀어준다.

  • anon-access = read      : 익명 사용자는 리포지토리를 읽기 전용으로만 접근
  • auth-access = write       : 인증된 사용자는 리포지토리에 쓰기 작업을 수행 가능
  • password-db = passwd : 사용자명과 비밀번호를 저장하여 SVN 서버에서 사용자를 인증하는 데 사용
  • authz-db = authz           : 사용자 또는 그룹에 대한 접근 권한을 관리하며, 어떤 사용자가 어떤 경로에 대해 어떤 작업을 할 수 있는지를 제어한다.

 

 

1-3) 사용자 권한 설정

// 리포지토리의 설정 폴더로 이동
cd /home/svn/TEST/conf

// authz 파일 수정
sudo vi authz

authz 파일

  •  [groups]         : 그룹 생성
  • admin             : admin 그룹을 만들고  'admin, itms, kib3388' 사용자 추가
  • [/]                    : 리포지토리 전체( ' / ' ) 권한 설정
  • * = r                : 모든 사용자( ' * ' )에게 읽기( ' r ' ) 권한을 부여, 즉 모든 사용자는 리포지토리를 읽을 수 있다.
  • @admin = rw : 'admin'  그룹에 속한 사용자들에게 읽기( ' r ' ), 쓰기 ( ' w ' ) 권한 부여

 

 

1-4) 디렉터리 권한 설정

// 소유자: RWE, 그룹: RW 부여
sudo chmod –R 760 /home/svn/*

 

 


2. 방화벽 설정

SVN은 기본적으로 3690 포트를 사용한다
// 방화벽 활성화
sudo ufw enable

// 방화벽 포트 확인
sudo ufw -status

// 포트 열기
sudo ufw allow 3690

 

 

 

 


3. 자동 실행 서비스 등록

서버 재부팅 시에 SVN이 자동 실행이 가능하도록 서비스에 등록한다.

 

3-1) svnserve 파일 생성

etc/init.d/ 경로 하위에 생성한다.
sudo vi /etc/init.d/svnserve

 

 

svnserve에 아래 내용을 작성한다. [DAEMON_ARGS] 경로는 리포지토리 설치한 경로로 지정한다. (특정 리포지토리만 등록하고 싶은 경우 /home/svn/TEST처럼 입력)
#! /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

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

 

 

3-2) 서비스 등록

// 파일의 권한 설정
sudo chmod 755 svnserve

// 서비스 등록
sudo update-rc.d svnserve defaults

// 서비스 실행
sudo service svnserve start

 

 

3-3) 재부팅

서비스가 실행중인걸 알 수 있다.
ps -ef | grep svnserve
root     788     1  0 16:11 ?     00:00:00 /usr/bin/svnserve -d -r /home/svn

 

 


4. svn 주소

// ex) svn://192.168.0.1/TEST
svn://[IP]/[레포지토리명]

 

반응형

'DevOps > SVN' 카테고리의 다른 글

[SVN] 백업(backup) 및 복원(load) 방법  (0) 2024.01.19