참고자료 : https://help.ubuntu.com/lts/serverguide/subversion.html
설치
apt install subversion apache2 libapache2-svn
저장소 만들기
mkdir -p /mnt/data1/svn/repos svnadmin create /mnt/data1/svn/repos/저장소이름
소유권 변경
chown -R ddart:ddart /mnt/data1/svn/repos
저장소 설정
vi /mnt/data1/svn/repos/저장소이름/conf/svnserve.conf
# anon-access = read anon-access = none # password-db = passwd password-db = passwd
vi /mnt/data1/svn/repos/저장소이름/conf/passwd
[users] 사용자 = 비밀번호
서비스에 등록
/etc/init.d/svnserve 새로 만들기 후 아래 내용중
DAEMON_ARGS="-d -r /mnt/data1/svn/repos" 값 자신의 값에 맞게 변경 후 붙여넣기
vi /etc/init.d/svnserve
#! /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 /mnt/data1/svn/repos" 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
등록
chmod 755 /etc/init.d/svnserve update-rc.d svnserve defaults
서비스 재시작
service svnserve restart
윈도우용 SVN Client
TortoiseSVN 설치
https://tortoisesvn.net/downloads.html
사용법
탐색기에서 저장소 디렉토리를 새로 만든 후
디렉토리를 오른쪽 클릭-> "SVN Checkout" 에서
저장소 주소를
svn://서버주소/저장소이름
하고 OK하면
username, password를 물어보는데 서버저장소 conf 디렉토리의 passwd 에서 지정한 사용자, 비번을 지정해준다.
TortoiseSVN 에서 svn+ssh 설정
passwd 파일에 사용자와 비번이 텍스트형태로 다 노출되어 있어 보안상 불안하면 svn+ssh 로 접속하면 해결된다.
위 저장소의 svnserve.conf 에서 passwd 를 주석처리해주고 passwd 를 삭제한다.
# anon-access = read anon-access = none # password-db = passwd
TortoiseSVN이 ssh 연결할때 내부 ssh client 기능을 구현하지 않고 특정외부 ssh 프로그램(Putty) 의 세션을 이용해 연결한다.
그러므로 TortoiseSVN으로 svn+ssh 연결하려면 사용자 PC에 Putty가 깔려있어야 하고, Putty에 서버가 ssh세션으로 등록되어 있어야 한다.
Putty 다운받기
http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html
putty.exe 와 puttygen.exe 2개를 다운 받는다.
1. Putty 실행후 Host Name, Port, Connection type(ssh) 지정하고
Saved Sessions 란에 세션이름 입력후 Save해서 새로운 세션을 만들고
이 세션으로 서버연결이 제대로 되는지 확인한다.
2. 윈도우 탐색기에서 로컬 저장소디렉토리를 만든후 Checkout 할때,
혹은 이미 Checkout되었다면 저장소오른쪽클릭->TortoiseSVN->Relocate에서
저장소 주소로
svn+ssh://사용자계정@Putty에서만든서버세션이름/저장소절대FullPath
로 연결한다.
이제 passwd 노출 없이도 svn 연결이 가능해졌는데 문제는
TortoisePlink가 뭘 할때마다 2번씩(왜 두번씩 물어보는지 모르겠지만) 계정 비밀번호 입력을 팝업창으로 요구한다.
TortoisePlink가 계정 비번 안묻게 하는 방법
ssh 로그인할때 보안키(public, private key 쌍)를 이용하면 보안키만으로 비번없이 접속할수 있다.
putty 세션에 이 키를 설정해서 로그인때 더이상 비번입력이 필요없게 하면 위 문제를 해결할수 있다.
보안키 생성하는 방법은
우분투내의 openssh keygen으로 해도되고 위 putty 사이트에서 받은 puttygen 으로 해도 된다.
무엇으로 하든 public키랑 private 키를 생성한후
public key는 서버사용자 홈디렉토리내 .ssh 디렉토리에 authorized_keys 에 추가해 주고
/home/사용자/.ssh/authorized_keys
private key는 클라이언트 사용자PC에서
putty의 서버세션을 재로드후 connection->ssh->auth 에서 private key의 위치를 지정하고 session을 저장한 후 연결하면
서버-클라이언트 SSH연결시 비번없이 접속가능하다.
주의할점은 key 생성할때 키교환을 위한 비번 passphrase가 지정된걸 쓰면 로그인시 passphrase를 묻게되어
ToroisePlink가 나중에 또 묻게 되므로 passphrase는 key를 교환, 이동시킬때 보안상 적용하고
실제 putty 설정에 사용할때는 puttygen같은 key툴로 passphrase를 없앤 ppk파일을 지정해야한다.
1. 우분투에서 openssh 키젠으로 생성하기
사용자계정홈에서
cd ~ ssh-keygen -t rsa
~/.ssh/ 에 id_rsa 와 id_rsa.pub 가 새로 생성되는데
id_rsa.pub는 authorized_keys에 추가해주거나 없으면 authorized_keys로 이름을 바꾸고
id_rsa 교환키는 PC로 가져와서 puttygen프로그램으로 import한 후 passphrase를 지우고
'Save private key' 버튼을 눌러 putty키포맷으로 바꿔 ppk확장자로 생성해준 후
이 ppk파일을 putty session 설정에서 지정해준다.
2. puttygen으로 생성하기
Key->Generate key pair 후 마우스를 움직여주면 생성된다
Key 상단
Public key for pasting into OpenSSH authorized_keys file:
문구 아래 내용을 복사해서
~/.ssh/authorized_keys 에 라인단위로 추가해주고
'Save private key' 버튼으로 ppk파일을 생성후 putty session 설정에 적용해주면 된다.
※ Putty 세션설정에서
Connection -> Data -> Auto-login username에 사용자계정이름을 지정해주면
Putty 자동로그인이 완성된다.
또한
svn+ssh://사용자계정@Putty에서만든서버세션이름/저장소절대FullPath
에서 사용자계정은 빼고
svn+ssh://Putty에서만든서버세션이름/저장소절대FullPath
로 간단히 할수 있다.
commnad line 에서 svn+ssh 설정
tortoise 의 command line svn명령어에서 svn+ssh 를 연결할때 SVN_SSH 환경변수에 TortoisePLink.exe 가 설정되어 있어야 한다.
환경변수에 SVN_SSH값으로
C:\\Program Files\\TortoiseSVN\\bin\\TortoisePlink.exe
와 같은 경로를 지정해주는데 이중 '\\' 처럼 \문자를 이스케이프시켜줘야 제대로 동작한다.
svn commit -m "메세지" 체크아웃설정된로컬저장소경로(예: C://myrepos)
svn update 로컬저장소경로