SVN은 


한 프로젝트를 개발 할 때


여러 사람이 작업을 하게 되는데


이 때 사용하기 좋은 도구라고 한다



한 번 사용해 보려고 한당

(개발을 하고 있지는 않지만 사용법은 알고 있으려고..)


설치는 간단하당..


apt-get update && apt-get install subversion



svn 을 관리할 사용자를 만들어주었다


useradd -m svn (Kali 에서는 -m 옵션을 주어야 홈 디렉터리를 생성한당)

passwd svn

(패스워드 설정)


cd ~svn (svn의 홈 디렉터리로 이동)

pwd (현재 디렉터리 확인)


svnadmin create /home/svn/test

(test 라는 repository 생성!?)


cd ~svn/test

ls -al

cd conf

ls -al



이제 svn을 사용하기 위해 설정 파일을 수정해보자


먼저 svnserve.conf 를 열어보자


vim svnserve.conf



[general] 부분을 보면


거의 전부 주석되어있다


anon-access = read 로 되어있는데 익명 사용자에게는 권한을 주지 말도록하자


anon-access = none


그리고 auth-access = write 로 되어있는데 인증한 사용자에게는 쓰기 권한을 주는 설정이다


password-db = passwd 부분은 아까 passwd 파일명을 보았을 거다


password-db를 passwd 로 사용하겠다는 설정이다


realm = My Project


이건 Client 사용자 들에게 보여지는 프로젝트 명이라고 해야하나 그런 느낌의 설정인듯 하다..;



svnserve.conf 설정이 끝났으면


passwd 파일을 수정하자


vim passwd



[users] 라는 부분이 있는데


svn 사용할 사용자와 패스워드를 넣어 주면 된다


여기서는 svn = qwer1234 라고 추가하였다


'=' 앞 부분이 ID 이고 뒷 부분이 password 이다



이제 svn 데몬을 실행해 보자


svnserve -d -r /home/svn

(-d 옵션은 데몬을 의미 -r 옵션은 repository 경로 지정)



제대로 실행이 되었나 확인해 보자


pa aux | grep svn

netstat -nltpu | grep 3690



위의 결과가 나오면 제대로 실행 된 것이다


이제 저장할 곳을 만들자


svn mkdir svn://localhost/test/AA



그럼 아래와 같은 vim 화면으로 들어가지는데


로그 메시지를 추가 할 수 있는 모양이다



추가 하지 않고 나오면 아래와 같은 메시지가 나오지만 C를 입력하여 계속한다


하지만 Password for 'login' GNOME keyring: 이라고 나오고


svn: GNOME Keyring is locked and are non-interactive 라면서 안 된다



이럴때는 아래의 위치로 이동하여 설정을 변경해야 한다


vim /root/.subversion/config



[auth] 부분에 password-stores = gnome-keyring, kwallet 라는 부분에 주석이 있는지 확인하고


아래와 같이 password-stores = 을 추가해 준다


그리고 조금 아래 쪽에 store-passwords = no 라는 부분에 주석을 제거해 주자



이 파일과 같은 파일이 /etc/subversion/config 파일이다


이 파일도 위의 파일과 마찬가지로 수정해 주자




수정이 끝났으면 다시 시도해 보자


svn mkdir svn://localhost/test/AA



여기서는 로그 메시지를 추가하지 않겠다



C를 입력하면


아래와 같이 자신의 root 패스워드를 묻고


svn의 사용자 명과 암호를 물어본다


svn의 사용자 명과 암호는 passwd에 [user]에 등록한 사용자와 패스워드를 입력하면 될 거 같다



이제 성공적으로 test/AA를 생성 하였다


이제 test/AA에 내가 가지고 있던 소스(/root/AA/) 를 import 해 보자


svn import /root/AA svn://localhost/test/AA



또 로그 메시지.. 안 씀..!!



C 누르고


svn 사용자의 패스워드를 입력하면 test/AA에 /root/AA에 있던 소스코드들이 추가 된다



한 번 확인해 보자


svn list svn://localhost/test/AA


역시 마찬가지로 svn 사용자 패스워드 입력을 해야 목록도 볼 수 있다



이제 서버의 설정은 끝났다




이제 Client에서 설정을 해보자


Client도 svn을 설치하려면 


apt-get update && apt-get install subversion


명령어를 사용하자..



Client 에서는 해 줄 것이 svn editor에 대한 환경 변수를 추가해 주는 것 뿐이다


vim ~/.profile

(굳이 ~/.profile 에 추가하는 이유는 재부팅 시에도 자동으로 환경 변수를 등록시키기 위해서이당)



아래 쪽에 export SVN_EDITOR="/usr/bin/vim"

(vim이 없다면 vi)



이제 환변 변수를 적용시키지


. /root/.profile


또는


source /root/.profile


(모자이크는 그냥 필요없는 내용이라 지운거에염..)


제대로 등록 되었나 확인


set | grep SVN_EDITOR



이제 Client 입장에서 svn을 이용해 보자


mkdir ../BB

cd ../BB

ls

(비어있다)

svn co svn://localhost/test/AA /root/BB

(co 는 checkout 을 의미)

svn 사용자 암호를 입력하면 test/AA에 있는 소스코드를 받아오는것을 볼 수 있다



아래는 ls 명령어로 확인 해본 결과


ls



svn 서버에 다른 사용자가 소스코드를 변경하고 저장하였을 경우도 있을 것이다


그럴 때 svn up common.h 명령어를 이용하여

(up은 update를 의미)


수정된 파일을 받아온 다음


작업을 하면 될 거같다


svn up common.h



또 test/AA에 없는 새로운 소스코드를 올려야 할 때가 있을 지 모르니


올려보자


touch new.c

echo "test file" > new.c

cat new.c


svn add new.c

(아직 추가는 안되어있음)



list 로 확인해보면..


svn list svn://localhost/test/AA


아직 new.c 파일은 보이지 않는다


아래 명령어를 이용하여 커밋까지 해야 list로 확인 시 new.c가 올라가 있는 것을 확인할 수 있다


svn commit -m "new file"

(-m 옵션은 로그 메시지 추가)




사용 방법은 여기까지만.......하고



이제 svn 서버를 종료하는 방법과


재부팅시 자동으로 svn 서버가 실행되도록 해보자


killall svnserve

pa aux | grep svn

netstat -ntlpu | grep 3690



위의 결과처럼 아무것도 나오지 않으면 제대로 종료 된 것이당


이제 부팅시 svn 서버가 실행되도록 하려면..


vim /etc/rc.local 파일을 열어서



/usr/bin/svnserve -d -r /home/svn 을 exit 0 위에 추가해 주면 된다



한 번 재부팅 해 보았다


그리고 ps aux | grep svn 과 netstat -nltpu | grep 3690 으로 확인 결과 제대로 실행 되었다는걸 알 수 있다


그리고 아까 추가한 export SVN_EDITOR도 재부팅을 하여도 제대로 환경 변수에 등록되어 있는걸 확인할 수 있다



아래 스크린샷은 재부팅후 바로 checkout 사용해 본 결과



이제 SVN 포스팅은 끝이당..


svn을 설치하고 간단하게 사용해 보긴 했지만...


검색해서 들어오신 분들은 아마 원하는 결과를 찾지는 못하셧을거 같다 ㅠㅠㅋㅋ


그래도 나는 왠지 어려웠던 SVN과 조금은 친해진거같다;;ㅋㅋ


언제 사용할 일이 있을지는 ... 모르겠지만......ㅋㅋ