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
- [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 |
---|