Hudson을 이용한 자동빌드 환경 구축(1)

저번에 이어서 이번에는 trac과 언어설정 플러그인과 기타 몇가지 유용한 플러그인 사용법을 설명하겠다.

4. trac 연동

trac과 Hudson을 연동하는건 간단하다. trac측에 Hudson플러그인을 깔아주면 끝이다. :)
원리는 Hudson이 빌드가 끝나면 그 결과를 rss로 내려준다.

이 rss주소를 trac에서 Hudson플러그인에 등록해주면 이를 읽어서 trac의 Timeline에 자동으로 등록해준다.

일단 trac에 Hudson플러그인을 설치해보자.

플러그인을 설치하기 전에 trac이 설치되어있는 서버에 python-feedparser를 설치해야 한다.
위에서 설명 했듯이 플러그인에서 rss를 읽어와서 등록을 해주기 때문에 rss를 파싱할 수 있는 라이브러리를 Hudson플러그인에서 사용한다. 설치후에는 trac을 재시작 해줘야한다.

위의 라이브러리가 설치되있거나 설치가 완료되면 이곳을 통해서 플러그인을 다운로드 한다.

trac에 플러그인을 설치하기 위해서는 egg라는 형태로 패키징을 해야하는데 이 방법은 여기서 설명하지 않겠다. 이곳을 참고해서 egg파일로 만든 다음 trac에 관리자로 로그인 후Admin->Plugins 메뉴에서 방금 만든 파일을 업로드 하면 설치가 완료된다.

설치가 완료되면 플러그인 프로퍼티에 Hudson의 rss주소 등록 및 다른 몇가지 프로퍼티를 세팅 해주어야 한다.

trac.ini파일을 열고 [hudson]을 찾는다. 만약에 없다면 만들어준다. 그리고 그 하위로 아래와 같이 프로퍼티를 생성하고 세팅해준다.

[hudson]
# trac에 Hudson링크 추가여부
display_in_new_tab = true

# 플러그인에서 읽어올 rss주소. 대부분 Hudson의 대시보드 하단에 있는 for all을 사용한다.
feed_url = http://dev.dalmuri.net:8093/rssAll

# Hudson의 메인페이지 주소
main_page = http://dev.dalmuri.net:8093


이와같이 설정하고 저장후에 trac을 재시작 해준다. 만약에 이렇게 수정하는게 귀찮다면 이곳에서 IniAdminPlugin을 설치하면 trac에서 바로 trac.ini를 수정, 적용할 수 있다.:)

여기까지 완료하면 Hudson에서 빌드결과가 rss로 내려오면 trac에서 자동으로 Timeline에 추가 시켜 줄 것이다.

5. 언어 설정 플러그인

기본적으로 Hudson을 설치후 실행하면 Hudson접속시 자동으로 브라우저의 Locale을 읽어서 적절한 언어로 출력해주는 기능이 있나보다.

그런데 다른 언어는 모르겠지만 한글의 경우에는 번역이 참으로 .... 스럽고 전체 번역이 되어있는것도 아니라서 미관상 참으로 안좋다.

사용자 삽입 이미지

일본어를 번역했나.. 뭥미..



따라서 Locale을 강제로 영어로 설정하도록 하는게 차라리 낫다.

Locale을 강제 설정하기 위해서는 Locale이라는 플러그인을 설치해야한다. 이는 Hudson측 플러그인이다.

Locale을 설치하기 위해서는 Manage Hudson(Hudson의 관리) > Manage Plugins > Available에서 Locale을 찾아 체크 해준 후 맨 하단 오른쪽의 Install 버튼을 클릭후 설치가 Success됬다는 메시지가 나올때 까지 기다리자. 설치가 완료되면 Hudson을 재시작 한다.

재시작후 Manage Hudson(Hudson의 관리) > Configure System에서 Locale 항목을 찾아서 설정할 Locale을 입력(en_us)한 후 Ignore browser preference and force this language to all users를 체크후 Save를 한다.

그러면 메뉴가 웃긴 한글번역이 아닌 영문으로 나타나는 것을 볼수 있다. 만약에 다른 언어로 설정을 하고 싶다면 "언어_국가"형태로 언더바로 구분하여 입력해주면 된다. 언어와 국가는 각각 이곳이곳을 참고로 조합하면 된다.

6. 디스크 사용량 표시 플러그인

Hudson을 이용한 자동빌드 환경 구축(3)에서 설명할 Job을 생성 후 빌드를 수행하면 Hudson은 자동으로 SCM에서 소스를 체크아웃 하고 빌드를 수행한다. 이때 workspace라는 디렉토리를 만들고 이곳에 소스를 체크아웃 후 빌드를 한다.
이 플러그인은 workspace의 디스크 사용량을 계산하여 보여주는 플러그인이다.
그리고 Job을 생성 할 때 빌드 결과물을 따로 보관 하는 옵션을 설정하는 부분이 있다. 이 부분을 설정 해주면 이 플러그인은 결과물을 build라고 하여 디스크 사용량을 같이 보여준다.

설치 방법은 위에서 설명한 Locale 플러그인과 동일한 방식으로 설치를 한다. 물론 설치후 Hudson을 재시작하는건 잊지 말자.

설치가 완료되면 Manage HudsonDisk usage라는 메뉴가 추가가 되어있다.

이 플러그인은 자동으로 한시간마다 디스크 사용량을 재계산하도록 되어있지만 지금 바로 재계산을 하고 싶다면 Manage Hudson > Disk usage에 들어가서 Record Disk Usage를 클릭해주면 된다.

계산이 완료 되면 추후에 설명할 Build에서 과거 빌드후 디스크 사용량 추이와 특정 Build의 디스크 사용량을 볼 수 있다.

사용자 삽입 이미지사용자 삽입 이미지

7. trac 링크 플러그인

이 플러그인은 4.에서 설명한 플러그인하고 다른 플러그인이다. 이 플러그인은 Job을 생성시 프로젝트의 trac주소를 입력해주면 Job에 그 링크를 단순히 출력해주는 플러그인이다.

설치방법은 위에서 설명한 플러그인과 동일하며 설정은 Job을 생성시 Trac website 항목에 설정해주면 된다.

다음 글에서는 Job을 추가하고 세팅 하는 법에 대해서 알아보겠다.

크리에이티브 커먼즈 라이센스
Creative Commons License
이올린에 북마크하기(0) 이올린에 추천하기(0)
2008/11/07 14:45 2008/11/07 14:45
공개 CI툴인 Hudson을 이용하여 DCGUI의 자동빌드 환경을 구축을 해 봤다.

Hudson설치부터 trac과의 연동까지 구축을 하여 이곳에 방법을 자세히 설명 할려고 한다.

꽤나 길어질 예정이므로 몇회로 나누어서 설명하겠다.

1. Hudson 설치

Hudson을 설치하는 방법은 간단하다. 이곳에서 Hudson을 다운로드 한 후 임의의 디렉토리에 복사해 넣으면 끝이다.
자바를 해본 사람은 알겠지만 확장자가 war이다. 이는 tomcat과 같은 WAS에 deploy하여 연동을 할 수도 있다.

물론 Hudson안에 자체 servlet container가 들어있으므로 따로 WAS를 설치할 필요는 없다.

여기서는 WAS를 설치하지 않고 Windows에서 Hudson안에 들어있는 servlet container를 이용하여 자체 실행하는 방법으로 설명을 하겠다.

Hudson을 임의의 디렉토리에 복사해 넣은 후 Hudson을 실행하는 방법은 간단하다. 아래와 같은 방법으로 실행하면 된다.

java -jar hudson.war --httpPort=8093

물론 Hudson은 java로 만들어진 툴이므로 jre가 설치되어 있어야 한다.
만약에 jre가 설치되어있지 않다면 여기에서 jre를 설치한다.

여기서 옵션으로 주어지는 --httpPort는 Hudson을 실행할 포트를 지정해준다. 만약에 이옵션이 없으면 8080으로 실행한다. ssl을 사용한다면 --httpsPort를 이용하여 포트를 지정해준다.

위와같이 실행 하면 war파일에서 자동으로 압축을 풀어 ~(사용자)/.hudson 디렉토리에 저장을 한다. 이곳에 또한 Hudson이 실행중에 저장하는 각종 데이터도 저장을 한다. 만약에 이 디렉토리를 다른곳에 바꾸고 싶다면 실행시 HUDSON_HOME 를 환경변수로 지정해주면 된다.

환경변수를 설정하는 방법에는 3가지가 있는데 자세한건 이곳을 참고하고 간단하게 실행시 지정해주는 방법을 사용해도 된다.

따라서 아래와 같이 실행을 하면 Hudson의 실행 디렉토리를 지정할 수 있다.

java -DHUDSON_HOME=hudson_home -jar hudson.war --httpPort=8093

2. Hudson 설정

정상적으로 Hudson이 실행되면 기본적인 설정을 해주어야한다. 그냥 사용해도 상관 없지만 몇가지 옵션을 세팅 해주면 편하게 사용 할 수 있다.

SCM은 svn을 사용하는 것을 기준으로 설명하겠다.

Hudson에 들어간 후에 Manage Hudson(Hudson의 관리) > Configure System를 들어가면 여러가지 세팅 하는 부분이 있지만 다 넘어가고 여기서는 java프로젝트가 아닌 Visual Studio를 이용한 프로젝트를 구성할 예정이므로 E-mail Notification 부분만 설명을 하겠다.

이곳을 세팅 해주면 빌드가 실패시 그리고 실패된 빌드가 다시 정상으로 돌아왔을 때 안내 이메일을 받을 수 있다.

Gmail을 기준으로 설명을 하겠다.

1. SMTP server 에는 Gmail smtp서버인 smtp.gmail.com을 입력해준다.
2. System Admin E-mail Address 에는 메일을 보내는 사람에 들어갈 이메일을 입력해준다.
3. Hudson URL 에는 Hudson의 접근 URL을 입력해준다. 기본적으로 입력이 되어있는데 잘못된 주소이면 수정해준다

여기까지 해준 다음에 Gmail은 인증이 필요하므로 Advanced 버튼을 눌러 추가 설정부분을 열어준다.

1. Use SMTP Authentication를 체크해준다.
2. User Name에 Gmail 계정 아이디를 입력해준다.
3. Password에는 Gmail 계정 비밀번호를 입력해준다.
4. Use SSL를 체크해준다.
5. SMTP Port는 비워두면 기본 포트를 사용하므로 굳이 입력할 필요는 없다.

여기까지 세팅을 한다음에 정상적으로 세팅이 되었는지 테스트 하기전에 맨 아래의 Save를 누른다. 저장을 하지 않고 테스트를 하면 제대로 테스트가 되지 않고 페이지가 이동해버려 다시 입력해야하므로 주의한다.

저장후에 다시 설정 페이지로 돌아가서 Test configuration by sending e-mail to System Admin Address를 눌러서 정상적으로 발송이 완료되는지 확인한다.

여기까지 완료를 하면 기본적으로 Hudson을 사용할 준비는 완료가 됬다.

3. Hudson 보안 설정

Hudson 메인 화면에 가면 아무런 로그인도 안했는데 Hudson의 설정을 변경하거나 Job을 생성 할 수 있도록 되어있다. 내부적으로만 사용하고 공개를 안한다면 모르겠지만 외부로 공개가 된다면 보안상 큰 문제가 된다.

보안설정을 하기 위해서는 첫번째로 관리자로 쓸 계정을 등록 하는 것이다.

Hudson의 상단 오른쪽에 있는 sign up으로 이동하여 정보를 입력후 등록한다.

그리고나서..

1. Manage Hudson > Configure System으로 가서 Enable security를 체크해준다.
2. Security Realm에서 Hudson's own user database를 체크 해준다.
3. Authorization에서 Matrix-based security를 체크 한 후 Anonymous는 Overall에서 Read만 체크해준다.
4. User/group to add에 아까 등록한 계정 아이디를 입력해준 후 Add를 눌러 추가한다.

추가가 되면 해당 계정에 모든 권한을 체크해주고 하단의 Save를 눌러 저장을 한다.

주의할 것은 반드시 계정을 등록 후에 권한을 체크해줘야한다는 것이다. 권한 체크시 실제 등록되어있는 계정이 아니더라도 체크가 되어버리니 잘못하여
Anonymous를 Read만 둔 상태에서 저장하면 어떠한 관리가 불가능하다.

다음 글에서 trac과 연동이 가능한 플러그인 및 언어 설정 플러그인 설치 및 설정 법과 Job을 추가하는 방법을 알아보겠다.
크리에이티브 커먼즈 라이센스
Creative Commons License
이올린에 북마크하기(0) 이올린에 추천하기(0)
2008/11/02 18:18 2008/11/02 18:18
svn을 이용하다보면 저장소 백업이 신경쓰일 것입니다.
특히나 크기가 큰 저장소의 경우에는 저장할 공간도 마땅치 않습니다.

저 또한 마찬가지로 개인적으로 운영하는 프로젝트의 저장소 백업이 문제였는데
몇일 머리를 굴리다가 방법이 생각나서 여기에 적어둡니다.

일단 저장소 백업을 기존에는 그냥 저장소를 덤프후 압축을 한 다음에 ftp로 로컬에 저장해놓는 형식이었습니다.

그러다보니 일일이 손으로 해야하는 번거러움이 발생하고 까먹었을 경우 자칫 저장소가 날아가는 불상사가 생길수 있습니다.

그래서 일단 저장소를 덤프후 압축을 하고 이메일로 압축파일을 첨부하여 보내는걸 생각했습니다.

그것도 저장공간이 거의 무한대인 지메일을 이용하기로 결정했습니다.

그러기 위해서는 백업은 쉘스크립트로 진행할 것이므로 커맨드라인 이메일 발송 툴이 필요했습니다.

찾아보니 mutt라는게 있더군요.

이를 이용하여 이메일을 보내는 방법은 다음과 같습니다.

mutt [ -n ] [ -F muttrc ] [ -a file ] [ -c address ] [ -i filename ] [ -s subject ] address [ address ... ]

-a      attach a file to a message
-b      specify a blind carbon-copy (BCC) address
-c      specify a carbon-copy (Cc) address
-e      specify a config command to be run after initilization files are read
-f      specify a mailbox to load
-F      specify an alternate file to read initialization commands
-h      print help on command line options
-H      specify a draft file from which to read a header and body
-i      specify a file to include in a message composition
-m      specify a default mailbox type
-n      do not read the system Muttrc
-p      recall a postponed message
-R      open mailbox in read-only mode
-s      specify a subject (enclose in quotes if it contains spaces)
-v      show version number and compile-time definitions
-x      simulate the mailx(1) compose mode
-y      show a menu containing the files specified by the mailboxes command
-z      exit immediately if there are no messages in the mailbox
-Z      open the first folder with new message,exit immediately if none

여러가지 옵션이 있는데 다 필요 없고 단순히 제목과 간단한 내용과 첨부파일을 보내는 목적이므로 다음과 같이 사용하면 됩니다.

mutt -F .mutt-local -a 파일이름 -s 제목 보낼이메일 < 본문이저장된파일이름

여기서 한가지 중요한게 .mutt-local이라는 파일입니다. 이 파일은 mutt의 설정을 저장하는데 다음에서 설명하겠지만 smtp 프로그램을 지정하는데 사용할 것입니다.

mutt는 아웃룩익스프레스나 기타 이메일 클라이언트와 다르게 smtp 서버에 접속하여 이메일을 직접 보내주는 역할을 하지 않습니다. mutt의 역할은 단순히 사용자의 입력을 받아서 mutt설정파일에 있는 smtp 프로그램에게 데이터를 전달해주는 역할밖에 하지 않습니다. 기본적으로 sendmail이 사용되도록 되어있는데 sendmail은 로컬 smtp서버만 이용이 가능하므로 외부 smtp서버를 쓰기 위해서는 별도의 smtp프로그램을 사용해야합니다.

그 프로그램중 ssmtp라는 것이 있습니다.

소스를 다운로드 하여 configure에 --enable-ssl 옵션을 주어 컴파일을 합니다.

그리고 make install을 하면 로컬도메인과 기본 smtp서버의 포트를 입력하라고 하는데 그냥 기본으로 엔터를 쳐주시면 됩니다. 그리고나서 ssmtp.conf파일의 위치가 출력되는데 2.61 버전 기준으로는 기본이 "/usr/local/etc/ssmtp/ssmtp.conf"가 됩니다.

이 파일을 열어서 아래와 같이 입력해줍니다.

mailhub=smtp.gmail.com:587
useSTARTTLS=YES

그리고 위에서 말했던 .mutt-local 파일 내용에

set sendmail="ssmtp설치위치/ssmtp -au 지메일아이디 -ap 지메일암호"

를 입력하고 저장해줍니다. 만약에 .mutt-local 파일이 없다면 만들고 입력해줍니다.

이렇게 하면 모든 설정은 다 끝났습니다. 이제 쉘스크립트를 만들어서 svn저장소를 덤프하고 압축을 하고 이메일로 보내면 됩니다.

한가지 주의할 점은 지메일은 한번에 10메가 이상은 보낼수 없다는 것입니다. 그렇기 때문에 압축할 때 분할압축을 해주어야합니다.

아래는 제가 사용하는 백업스크립트입니다.

#!/bin/sh

date="$(date +%y%m%d)"
backupdir="tmp_svnbackup"

#delete tmp dir
rm -rf ./${backupdir}

echo "dump svn repositary"
svnadmin dump /var/svn/chadr > dumpfile.${date}

mkdir ${backupdir}

echo "dump complete"
echo "compressing...."
7za a -mx9 -mmt -v9m ./${backupdir}/[dev.dalmuri.net.var.svn.chadr]dumfile.${date}.7z dumpfile.${date}

chown -R chadr:developer ./${backupdir}

cd ${backupdir}

echo ""
echo "file list of sending."

count=0

for file in $(ls)
do
  echo "${file}"
  count=`expr $count + 1`
done

echo ""

i=1
#send email
for file in $(ls)
do
  echo "sending...(${i}/${count}) ${file}"
  mutt -F ../.mutt-local -a ${file} -s svnbackup_${date}_[${i}/${count}] chadr@dalmuri.net < ../muttbody
  echo "sending complete. ${file}"
  i=`expr $i + 1`
done

echo "all sending complate"

cd ..
#delete tmp dir
rm -rf ./${backupdir}


       
크리에이티브 커먼즈 라이센스
Creative Commons License
이올린에 북마크하기(0) 이올린에 추천하기(0)
2008/09/09 14:01 2008/09/09 14:01

svn 저장소 세팅..

생활 : 2008/08/28 23:25
저번에 동아리 개발서버 하드가 사망하시는 바람에 dcgui의 저장소가 홀랑 날아가는 일이 있었습니다.

다행이 전에 저장소를 덤프 받아놓은 것이 있어서 잠도 안와서 저장소 세팅을 다시 했습니다.

사실 날아간지는 좀 됬지만..

귀차니즘으로 인해서 이제야 세팅을 마쳤네요..

주소는 조금 바뀌었습니다.

일단 커밋은 svn+ssh 프로토콜로 할것이고 익명 체크아웃은 http 프로토콜을 이용합니다.

http://dev.dalmuri.net/repos/chadr/Chadr/DCGUI/tags/ 에 릴리즈된 목록들이 있습니다.

그 상위에 여러가지가 있지만 받아보셔도 상관 없습니다.

일단 회사 생활이 끝나면 개발을 재개할 예정(....)입니다..
크리에이티브 커먼즈 라이센스
Creative Commons License
이올린에 북마크하기(0) 이올린에 추천하기(0)
2008/08/28 23:25 2008/08/28 23:25
폰트렌더러를 만들면서 프로젝트를 브랜치해서 따로 작업하고 나중에 병합을 할려고 염두해주도 작업을 하고 있었습니다.

그런데 어제와 오늘 꽤나 많은 부분을 고쳐서 충돌이 얼마나 나는가 볼려고 브랜치를 트렁크에 병합을 해봤습니다..

무수히 많이 뜨는 충돌들.. ㄱ-

충돌을 없애보고자 diff툴을 열고 꼼지락 거리기를 2시간...

GG치고 그냥 수동으로 병합했습니다.. ㄱ-

도저히 소스가 완전히 꼬여서 복구 불가능이더군요..
svn이 여기까지는 안해주는가봅니다.. 엉엉..

그래서 추가된 바이너리와 소스, 세팅만 병합을 하고..
변경된 소스는 직접 두개의 프로젝트를 열고 손으로 병합을 했습니다.

혹시나해서 한번 병합을 해줘서 망정이지..
나중에 가서는 도저히 손을 쓸수 없을 정도가 됬다면 난감할뻔 했습니다..
크리에이티브 커먼즈 라이센스
Creative Commons License
이올린에 북마크하기(0) 이올린에 추천하기(0)
2007/06/23 21:05 2007/06/23 21:05
기존에 DCGUI가 사용하던 저장소의 접근 방법은 다음과 같았다.

svn://
svn+ssh://


svn 프로토콜은 암호화같은게 전혀 안되어있는 상태라 svn프로토콜은 읽기 전용으로 익명만 허용을 하고..
실제로 커밋과 같은 쓰기 작업이 되어야하는 오퍼레이션은 svn+ssh를 썼다..
그런데 이게 ssh하고 같이 쓰면 속도가 더럽게 느리고.. (원격으로 해당 서버에 ssh로 로그인을 하고 svnserve를 실행하고 이를 이용해 터널링을 하기 때문에 ㄱ-)

기존 서버의 ssh포트를 22번이 아닌 다른 번호로 바꿔놔서(짱꼴라애들이 자주 접근 시도를 한다는 이유로..) 최근에 비주얼스튜디오 svn애드온인 ankhsvn이 최신버전이 나와서 써볼려고 깔았더니 이게 터널링이 안된다고 뻗는다..(거북이 svn은 putty세션정보를 이용하는데ankhsvn은 고정으로 22번을 사용하는 모양이다.. 세팅창에서 아무리 찾아도 안보이더라고 ㄱ-)

그래서 귀차니즘에도 불구하고..

당장 서버에 루트로 접속해서..아파치에서 접근이 가능하도록 세팅을 했다..
그냥 http로 접근하도록 하면 데이터가 암호화가 안되기 때문에 svn을 사용하는거하고 별반 다를바가 없으므로 ssl을 활성화 시켜서 https로만 접근이 되도록 해놨다..

그렇게 해놓으니까 ankhsvn에서 불만없이 잘 데이터를 가져온다..
ankhsvn가 좋긴 한데 아직 복잡한 오퍼레이션(머지, 브랜치, 태그등)을 지원안하는듯 하다.
하지만 거북이svn하고 같이 연동되니까.. 간단한것들은 ankhsvn를 쓰고 복잡한건 거북이svn을 이용해서 쓰면 되니까 그닥 불만은 없다..

여튼 이렇게 세팅해놨더니 속도도 빠르고 ssh세팅 같은거 신경 안써도 되니까 좀 낫다..
크리에이티브 커먼즈 라이센스
Creative Commons License
이올린에 북마크하기(0) 이올린에 추천하기(0)
2007/02/11 02:25 2007/02/11 02:25
서브버전에서 svn+ssh을 이용하여 인증을 할 경우 기본적으로 ssh 포트인 22번을 이용하게 된다. 그런데 만약에 서버의 ssh 포트가 22번이 아닌 다른 포트를 이용하게 되어있다면 접속하기가 어렵다.

이를 해결하는 방법은 putty세션을 이용하는 것이다. 서브버전은 plink를 이용하여 ssh인증을 시도하기 때문에 putty세션을 그대로 이용할 수 있다.

설정하는 방법은 간단하다. 우선 아래의 url에서 putty를 다운로드 한다.

http://the.earth.li/~sgtatham/putty/latest/x86/putty.exe

그리고 putty를 실행하여 접속할 호스트와 포트를 입력하고 세션이름을 입력 후 Save를 누르면 된다.


이렇게 저장 후 svn+ssh을 이용하여 접속을 할 때 위에서 저장한 세션이름을 지정하여 접속을 하면 세션에 입력한 내용(호스트, 포트, 인증키 등)을 이용하여 인증을 시도한다.

예를 들어..

호스트 : dev.dalmuri.net
포트 : 4321
세션이름 : devserver


를 이용하여 세션을 저장해 놨다면 아래와 같은 접속 스트링을 이용하면 인증이 가능하다

svn+ssh://chadr@devserver/var/svn/Chadr/GUI/trunk
크리에이티브 커먼즈 라이센스
Creative Commons License
이올린에 북마크하기(0) 이올린에 추천하기(0)
2006/04/12 21:00 2006/04/12 21:00
서브버전(svn)을 이용할 때 접속 프로토콜을 svn+ssh를 이용하여 접속을 하면 커밋을 할 때 마다 암호를 물어보게 된다. 그것도 한번도 아니고 여러번을 물어보게 된다-_-);

cvs를 쓸 땐 암호가 저장이 되어 한번 입력하면 더이상 물어보지 않아서 편했는데 svn+ssh를 이용한 인증의 경우에는 한번도 아니고(사실 한번 물어봐도 짜증인데) 여러번 물어보니 여간 불편한게 아닐 수 없다.

이는 svn클라이언트가 tunneling을 하여 서버에 접속 후 작동을 할 때 한번 접속 후 svnserve를 실행하는게 아니라 여러번 접속을 했다가 끊었다가 하면서 작동을 하기 때문이다.

그럼 이 암호를 매번 물어보는 것을 생략하는 방법을 알아보자.
기본 개념은 rsa 인증키를 만들어 ssh에 세팅 후 이를 이용하여 접속을 하는 것이다..


그러기 위해서는 우선 rsa인증키를 만들어야한다. 그러기 위해서는 svn저장소가 있는 서버에 접속하여 아래와 같은 과정을 거쳐서 rsa키를 생성하여야 한다.

[chadr@dev ~]$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/daldev/chadr/.ssh/id_rsa):
Created directory '/home/daldev/chadr/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/daldev/chadr/.ssh/id_rsa.
Your public key has been saved in /home/daldev/chadr/.ssh/id_rsa.pub.
The key fingerprint is:
00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00 chadr@dev.dalmuri.net
[chadr@dev ~]$


: 생성된 rsa 키의 저장 위치와 이름을 입력하는 곳이다. 그냥 디폴트를 사용하고 싶으면 엔터를 입력하면 된다.
: 생성된 rsa 개인키의 암호를 입력하는 곳이다. 암호를 입력하고 싶지 않다면 그냥 엔터를 치면 된다. 어차피 추후에 생성된 개인키를 이용하여 OpenSSH 개인키를 생성하는 과정에서 다시 암호를 입력하게 되므로 반드시 암호를 입력 할 필요는 없다. 하지만 암호를 입력했을 때에는 OpenSSH 개인키를 생성하는 과정에서 암호를 물어보기 때문에 기억을 하고 있어야 한다.
: 생성된 키의 fingerprint값이다. 키를 생성할 때 마다 다르게 생성된다.


rsa 키를 무사히 생성했다면 공개키의 이름을 바꿔주어야 한다. 아래가 그 과정이다.

[chadr@dev ~]$ cd .ssh
[chadr@dev .ssh]$ ls
id_rsa id_rsa.pub
[chadr@dev .ssh]$ cp id_rsa.pub authorized_keys
[chadr@dev .ssh]$ ls
authorized_keys id_rsa id_rsa.pub
[chadr@dev .ssh]$

: rsa키를 생성했던 디렉토리이다.
: 생성된 rsa키들이다.. id_rsa가 개인키이고 id_rsa.pub가 공개키이다.
: 공개키 이름을 바꿔줘야 한다. 기본적으로 ssh가 공개/개인키를 이용하여 인증을 시도할 때 "authorized_keys"라는 공개키를 찾기 때문이다.(반드시 authorized_keys이어야 한다!!)


여기까지 무사히 마쳤다면 생성된 개인키를 이용하여 OpenSSH 개인키를 생성해야 한다. svn+ssh는 plink를 이용하여 ssh인증을 거치기 때문에 putty 세션과 호환이 된다. 따라서 세션은 putty를 이용하여 생성하여야 하므로 개인키를 이용하여 OpenSSH 개인키를 생성해야한다. 아래의 url에서 putty key genarator를 다운로드 하자.
http://the.earth.li/~sgtatham/putty/latest/x86/puttygen.exe


그 전에 한가지 해야 할 일은 서버에 저장된 개인키를 자신의 컴퓨터에 저장해야 한다. 직접 ftp를 이용하여 다운로드 해도 되고 개인를 cat으로 열고 나서 그걸 직접 텍스트 파일로 저장해도 된다. 뭐 무슨 방법을 쓰든간에 자신의 컴퓨터에 개인키를 저장해 놓도록 하자.

그리고나서 puttygen를 실행하고 메뉴에서 Conversions->Import key를 눌러 위에서 저장한 개인키의 위치를 지정하도록 한다. 만약에 rsa키를 생성 할 때 암호를 입력했었다면 암호를 입력하라고 나올 것이다. 무사히 개인키가 Import되었다면 아래와 같은 화면이 나올 것이다.



: 생성된 OpenSSH 공개키이다.
: 개인키의 암호를 입력하는 곳이다. 이곳에 암호를 입력하고 svn+ssh를 이용하여 인증을 하면 매번 개인키 암호를 물어보게 된다. 만약에 매번 암호를 물어보는것이 귀찮다면 암호를 입력하지 않으면 된다. 하지만 만약에 이 개인키가 외부에 유출이 되었을 경우에 어떤 컴퓨터에서든 암호 없이 저장소에 쓰기 접근이 가능하므로 유의 해야한다.


위의 화면에서 Save private key를 눌러 공개키를 저장하자. 만약에 암호를 입력하지 않았다면 경고메시지가 나오나 그냥 ok를 누르면 개인키가 저장된다.

여기까지 마쳤다면 이제 putty 세션을 설정할 차례이다. putty를 실행해보자. 혹시 putty가 없다면 아래의 url에서 다운로드를 하면 된다.

http://the.earth.li/~sgtatham/putty/latest/x86/putty.exe


putty를 실행하면 아래와 같은 화면이 나온다.



: 접속할 서버 주소이다. 이곳에 접속할 서버 주소와 포트번호를 입력한다.
: 저장할 세션 이름이다. 적당한 이름을 입력하면 된다. 이름을 입력 후 아래의 개인키 세팅 까지 마쳤다면 반드시 Save를 이용하여 저장을 해야 한다.
: 앞에서 저장한 개인키를 세팅하는 곳이다. 이곳을 클릭하고 개인키를 입력하는 곳에 앞에서 저장한 개인키의 경로를 지정해 주면 된다.


위의 화면에서 ①,②를 입력 후 ③을 클릭하면 아래와 같은 화면이 나온다.


: 이곳에 저장한 개인키의 경로를 지정해 준다. 경로 지정을 마쳤다며 세션을 저장하면 된다.


개인키 세팅을 마치고 세션을 저장했다면 저장한 세션을 이용하여 ssh를 접속해보자. 아래와 같은 메시지가 나온다면 세팅이 완료 된 것이다.

login as: chadr
Authenticating with public key "imported-openssh-key"
Passphrase for key "imported-openssh-key":
Last login: Sun Apr 9 10:57:05 2006 from 210.111.8.10
[chadr@dev ~]$


만약에 개인키에 암호를 지정 하지 않았다면 "Passphrase for key "imported-openssh-key":" 라는 문구가 나타나지 않고 바로 로그인이 완료 된다.


여기까지 모두 무사히 마쳤다면 svn+ssh를 이용하여 저장소에 접근을 해보자. 만약에 개인키에 암호를 지정했다면 암호를 한번은 물어보게 될것이다. 하지만 개인키에 암호를 지정하지 않았다면 암호를 물어보지 않고 바로 접근이 가능 할 것이다.
크리에이티브 커먼즈 라이센스
Creative Commons License
이올린에 북마크하기(0) 이올린에 추천하기(0)
2006/04/09 09:27 2006/04/09 09:27