2009년 12월 23일 수요일

리모트 서버에 ddd에서 단축키

F5 / F6 등에 단축키가 ddd에서 안되서 꾀나 불편했다.
당연히 안되는줄 알았다.
.ddd에 아무리 뒤저도 없고

로컬에서 ddd를 하면 되는데.. 리모트에 접속 해서 x땡겨서 할때는 안된다.

옆사람이 ubuntu 9.10 32bit 인데 잘된다.

.bashrc .ddd 다 가져와도 안된다.

난 ubuntu 9.10 (8.04부터 업그레이드 된 오래 묵은넘)

ssh -X 이렇게 해서 된다고 해서 이렇게도 해보고...

ubuntu 9.10 64bit를 재설치 했다.
안된다.

/home 파티션을 그대로 가져 갔으니 그대로...

결국 로컬 ubuntu에 .디렉토리 중에 어떤 것 때문인데...

계정을 추가 하고 로그 아웃 하고 추가한 계정으로 하니 된다.

모든 .디렉토리를 엎었더니 된다.

해결 방법이 ubuntu 9.10 새로 설치 하면 된다는 거....

ㅠ.ㅠ

2009년 11월 16일 월요일

Windows 7 가상화. XP Mode (XPM)
















XPM 설치는 Windows 7설치시에 바로 되는 것은 아니다.
그리고 처음 설치 하고 한번 돌려 봣을때. 음.. 이거 Virtual PC고
이건 VMWare나 Virtual Box랑 모가 다르지 했다가 조금 더 써보니
살작 편리함을 주었다.

심리스 모드 같은거를 약간더 편리 하게 해서 그걸 잘응용해서 Windows 7에 붙여 버렸다.
그래서 윈도우7 메뉴에서 실행 하면 바로 뜬다.

아마도 심리스 모드 같은걸 이쁘게 구현 한거 같다.

익스플로러 6이 실행 자알~ 된다..

2009년 11월 14일 토요일

windows 7 64bit 에서 RAD studio 로 디버깅시 문제 해결

http://www.monien.net/blog/index.php/2009/07/delphi-2009-windows-7-64-bit-debugger-crash-workaround

Assertion failure SetThreadContext failed ~~ 에러가 난다.
해결 방법은 위 주소에 가보면 patch가 있다.
Workaround steps:

1.Close Delphi
2.Locate bordbk120N.dll (C:\Program Files (x86)\CodeGear\RAD Studio\6.0\bin)
3.Make a backup copy
4.Check step 3
5.Open bordbk120N.dll in a Hex editor (UltraEdit works fine)
6.Search for “01 00 48 74 47 80 3D”
7.Make sure this is found once only
8.Replace “74” with “EB”
9.Save
10.Restart Delphi. Error should be gone.
This might work on older Delphi versions as well, but I did not test that yet.

위 주소에 위 과정을 해주는 프로그램도 다운 받을수 있다.

2009년 10월 25일 일요일

Windows7 64bit 설치...


vista32에서 windows7 64bit로 바꾸니 성능이 오른다.
원래 윈도우즈7이 많이 가벼워진거 잇기도 하겟지만.
3D 게임 관련 만 떨어지고 프로세서나 하드디스크는 올라간다.
windows7 은 vista에 비해서 매우 만족스러운 퍼포먼스를 보여주는거 같다.

2009년 7월 3일 금요일

Error 13: "Invalid or unsupported executable format"

2.6.28-13 요넘이 부팅이 안된다.
2.6.28-11로 부팅이 가능하다.

이유가 뭘까...

ext3-->ext4로 변경 하고 나서

커널 업데이트가 되었는데.. 그걸로 부팅이 안되는 것이다..

grub-install hd0
를 하고 나니 이제서야 최신 커널로 부팅이 된다.

http://ubuntuforums.org/showthread.php?t=1192337 <---여기를 참조 하니 그런 멘트가 있더라.

2009년 6월 30일 화요일

soruce insight macro : OpenSourceHeader()

이전에 C파일에서 H파일 H파일에서 C파일로 토클 되는 macro를 만든 적이 있다.
개발 소스 환경이 바뀌어 include 디렉토리가 따로 관리되다 보니 C/H가 같은 경로에 있지 않아
적용 되지 않았다.
소스 인사이트에 풀패스를 주지 않아도 되기 때문에 아래와 같이 업글 하였다.
pos 는 .에 위치
pos2는 백슬래쉬에 위치를 찾아
파일이름만 뜯어 내서 거기에 확장자를 붙여 열어 주니 된다.

macro OpenSourceHeader()
{
hbuf = GetCurrentBuf()

bufFileName = tolower(GetBufName(hbuf))
pos = strlen(bufFileName)-1
pos2 = strlen(bufFileName)-1
while(bufFileName[pos] != ".")
pos = pos -1

while(bufFileName[pos2] != "\\") //<--추가된 곳
pos2= pos2 -1


szFileNameOnly = strmid(bufFileName,pos2+1,pos) //<--이름만 얻는다.

szFileExt = strmid(bufFileName, pos + 1, strlen(bufFileName))

if (szFileExt =="c" || szFileExt=="cpp" || szFileExt=="cxx" )
{
openbufFileName = cat(szFileNameOnly , ".h")

hopenbuf = OpenBuf(openbufFileName)
if (hopenbuf == hNil)
{
openbufFileName = cat(szFileNameOnly , ".hpp")
hopenbuf = OpenBuf(openbufFileName)
}

if (hopenbuf == hNil)
{
openbufFileName = cat(szFileNameOnly , ".hxx")
hopenbuf = OpenBuf(openbufFileName)
}

if (hopenbuf == hNil)
{
Msg(openbufFileName)
return
}

SetCurrentBuf (hopenbuf)

}
else if (szFileExt=="h" || szFileExt=="hpp" || szFileExt=="hxx")
{

openbufFileName = cat(szFileNameOnly , ".c")

hopenbuf = OpenBuf(openbufFileName)
if (hopenbuf == hNil)
{
openbufFileName = cat(szFileNameOnly , ".cpp")
hopenbuf = OpenBuf(openbufFileName)
}

if (hopenbuf == hNil)
{
openbufFileName = cat(szFileNameOnly , ".cxxx")
hopenbuf = OpenBuf(openbufFileName)
}


if (hopenbuf == hNil)
{
Msg(openbufFileName)
return
}

SetCurrentBuf (hopenbuf)


}

}

2009년 6월 26일 금요일

.svn 디렉토리들을 제거 하기...

svn으로 관리되는 소스에는 .svn 디렉토리 들이 매 디렉토리 마다 있다.
일단 svn에서 관리 하지 않고 단지 소스를 복사 해서 본다고 하면.
보이지 않는 이 디렉토리들을 제거 하고 싶을 때가 있다.

find . -name .svn -print0 | xargs -0 rm -rf

간단하게 모두 제거 하자....

2009년 6월 20일 토요일

osx에서 xcode 설치 해보고 한번 돌려 봣음


음... 일단 전혀 모르겠음.
걍 UI 디자이너 같은걸로 한번 만드러 보고 빌드만 해봣음.
나중에 Iphone 이나 ipod이 있음 꼭 해보고 싶음


2009년 6월 16일 화요일

ubuntu ext3->ext4

9.04에서 ext4를 지원한다.
업그레이드를 한것으로 ext3 상태이다.
인터넷을 보니 ext4가 성능이 더 좋다 하길래 감행 하였다.

1. 먼저 GRUB 부팅에서 recovery를 선택
다음 메뉴에서 root 머시기를 선택

fdisk -l 을 해서 먼저 ext4로 변경 할 /dev/sdaN을 확인 한다.

내경우 /dev/sda5, /dev/sda2였다.

변경후 fstab을 다시 마운트 해서 수정 해라고 했지만 실제로 해보니 read only라면서
마운트 포지션을 만들지도 못하고 마운트 못하는 경우가 집에 laptop에서 발생 했다.

그래서 순서를 변경

먼저 vi로 fstab을 변경 ext3->ext4

그리고
umount /dev/sda2
umount /dev/sda5

해준다음

tune2fs -O extents,uninit_bg,dir_index /dev/sda2
tune2fs -O extents,uninit_bg,dir_index /dev/sda5

한다음 (이미 변경)

아래와 같이 검사

fsck -pDf /dev/sda2
fsck -pDf /dev/sda5

좀오래 걸림

재부팅

ext4로 변경 되고 재부팅 잘됨

성능은 얼마나 좋아 졌는지 모르지만

그냥 한번 변경 해 보았는데.. 지금 까지는 특별한 문제 없이 잘 동작 함..

2009년 6월 12일 금요일

DSN 이름 으로 부터 IP, PORT, USERNAME, DB NAME, NLS_USE 등 얻기

레지스트리에서 DSN이름으로 아래의 정보를 구할수 있음


#include <registry.hpp>

..... 아래처럼 함수를 구현 한다. ....


/DNS 으로 부터 기타 정보 얻기 IP, NAME, ...
//registry HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBC.INI\DSN

TRegistry* reg = new TRegistry(KEY_READ);
reg->RootKey = HKEY_LOCAL_MACHINE;
reg->OpenKey("SOFTWARE",FALSE);
reg->OpenKey("ODBC",FALSE);
reg->OpenKey("ODBC.INI",FALSE);
reg->OpenKey(cbboxDSNList->Text,FALSE);
edtServer->Text = reg->ReadString("Server");
edtDatabase->Text = reg->ReadString("Database");
cbboxNLS->Text = reg->ReadString("NLS_USE");
edtPasswd->Text = reg->ReadString("Password");
edtPort->Text = reg->ReadString("Port");
edtUserName->Text = reg->ReadString("User");

2009년 6월 11일 목요일

DSN List 얻기

//---------------------------------------------------------------------------
#include &lt;vcl.h&gt;
#include &lt;sql.h&gt;
#include &lt;sql.h&gt;
#include &lt;sqlext.h&gt;
#include &lt;sqltypes.h&gt;
#pragma hdrstop
#pragma comment(lib, "odbc32.lib")
#include "regServerUnit.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TfrmRegisterDatabaseServer *frmRegisterDatabaseServer;
//---------------------------------------------------------------------------
__fastcall TfrmRegisterDatabaseServer::TfrmRegisterDatabaseServer(TComponent* Owner)
:
TForm(Owner)
{
}

//---------------------------------------------------------------------------
void __fastcall TfrmRegisterDatabaseServer::FormCreate(TObject *Sender)
{

//DSN 리스트 얻기
HENV hEnv;
char
tmpDSN[256];
SWORD tmpDSNLen = 255;
SWORD ResultLen;
UCHAR tmpDriver[256];
SWORD tmpDriverLen = 255;
SWORD ResultDescLen;
RETCODE ReturnCode = SQL_SUCCESS;
UnicodeString DSNList;

ReturnCode = ::SQLAllocEnv(&hEnv);
if
(SQL_SUCCESS == ReturnCode)
{

ReturnCode = ::SQLDataSources(hEnv, SQL_FETCH_FIRST, tmpDSN, tmpDSNLen, &ResultLen, tmpDriver, tmpDriverLen, &ResultDescLen);

while
(!ReturnCode)
{

// additional processing
DSNList = tmpDSN;
cbboxDSNList->AddItem(DSNList,NULL);
ReturnCode = ::SQLDataSources(hEnv, SQL_FETCH_NEXT, tmpDSN, tmpDSNLen, &ResultLen, tmpDriver, tmpDriverLen, &ResultDescLen);
};
}
}

//---------------------------------------------------------------------------

2009년 6월 3일 수요일

하드디스크 WD500GB 디스크 조각모음후..


디스크 조각모음을 하고 나서 성능측정을 다시 하니
5.6에서 5.7로 0.1 올랐다.

2009년 6월 2일 화요일

thinkpad T60 osx 10.5.7


XxX 10.5.6
바로 업데이트

사운드 OK
그래픽은 일단 해상도만 qe/ci 하면 잔상이 생기네요...
무선랜 안됨


2009년 6월 1일 월요일

Vista/osx/ubuntu

준비물
easyBCD
acronis disk director
acronis true image
해킨 dvd
우분투

M$ 윈도우를 주로 사용하고 osx 맛보기 가끔 linux를 사용하는 랩탑에
일단 파티셔닝 작업을 한다.
첫번째 M$ OS
두번째 OSX
세번째 리눅스

두번째 파티션을 준비 할때는 0xAF ShagOS swap로 convert시킴 (disk diretor 이용)

해킨 dvd 부팅후 설치

mbr이 날아감

다윈로더에서 vista를 선택해서 비스타 진입

disk direcotr로 Active 파티션을 C로 바꾸고 EasyBCD에서 MBR복구
OSX 부트를 설정 해준다.

다시 부팅 하면 vista우선 easyBCD에 의한 부트 로더 나옴

마지막으로 우분트 설치
우분트 설치에 중요점은 마지막에 grub를 주하드 MBR이 아닌 걍 파티션에 설치

vista에 가서 easyBCD로 리눅스 부트 추가 해주면 됨

osx해킨은 업데이트나 iwi3945 같은거 설치 잘못 하다간 바로 커널 패닉이므로

아크로니스 투루이미지로 백업을 받아 둔다.

현재 XxX10.5.6에서 10.5.7로 소프트웨어 업데이트시 이상 없이 동작 한다.

다음 소프트웨어 업데이트 라든지 모험 하기전에 반드시 백업을 해두자..

2009년 5월 27일 수요일

Thinkpad T60 하드 교체하기


T60 2613-a54
RAM 2GB
CPU core2duo T5600 1.83

HDD 도시바 120GB

이번에 WD 500GB 5400rpm 8mb 버퍼

요넘을 갈아 끼었다.

일단 공간 압박때문에

320GB 7200RPM과 고민하다가.. 성능 보단 공간이라고 생각 하고....

그런데 성능도 괞찮다.

주 하드 디스크 : 디스크 데이터 전송률 4.4에서 --- > 5.6으로 향상 되었다.

2009년 5월 20일 수요일

주기적으로 ls 하기

# while (true) do ls; sleep 1; done

어떤 디렉토리에 어떤 파일이 갑자기 생기나 확인 하려고.. 계속 ls를 쳐보는 노가다....
모르면 노가다 알면 참 쉽죠 ~~ 잉....

2009년 2월 24일 화요일

VirtualBox 자동업데이트 되어도 게스트 확장은 업데이트 안된다!

오늘 알게된 사실이다.

Ubuntu + Vbox(XP) 로 잘 사용하고 잇는데..

가끔 VBox가 업데이트 한다고 하며..

지금 까지 두어 차례 업데이트 된걸로 기억 된다.

버젼 정보를 보니 혀내 2.1.4이다.

근데 웹서핑중 알게된 사실 게스트 확장은 XP에서 별도로 다시 설치 해야 되는거라.

업데이트가 안된다.

당연 그렇겟지... 잊구 살았다.

장치 -> 게스트 확장 설치

해보니 2.1.4 게스트 확장이 설치 된다.

제부팅도 하더라.. 머가 달라 졌을까 .. 혹시 키보드 보안 땜에 블루스크린 나오는게 해결 될까?

역시 팍 죽어 버린다. ㅎ.ㅎ

2009년 2월 18일 수요일

UNIX OS별 공유 라이브러리 지정

공유 라이브러리 경로 지정

dlopen() 호출시 라이브러리 파일을 못찾는 에러 때문에 고생 할때....

http://kldp.org/node/58955

1) 공유라이브러리 경로지정을 위한 운영체제별 차이.
* 리눅스 : LD_LIBRARY_PATH
* 솔라리스 : LD_LIBRARY_PATH , LD_LIBRARY_PATH_64
* HPUX : SHLIB_PATH, LD_LIBRARY_PATH
* Tru64 : LD_LIBRARY_PATH
* AiX : LIBPATH
* SGI : LD_LIBRARY_PATH, LD_LIBRARYN32_PATH, LD_LIBRARY64_PATH
* Win32 : PATH
* MacOS X : DYLD_LIBRARY_PATH, DYLD_FALLBACK_LIBRARY_PATH
* VMS :SYS$SHARE
* OS390 : LIBPATH

2009년 2월 16일 월요일

How-To: Find missing packages with apt-file

ddd를 컴파일 하다가 어떤 헤더 파일이 없다고 한다..

어떤 패키지를 설치 해야 하나.. 아래처럼 하면 설치 해야 할 패키지를 설치 할 수 있다.

Command line lover will love apt-file which will do the same job, but you won't have to use your web browser.

To install apt-file, simply run:

$ apt-get install apt-file

Then we need to update apt-file database with:

$ sudo apt-file update

After some times, once the Contents files are downloaded from the repositories, you will be able to query the database for myfile or path/to/myfile with the following commands:

$ apt-file search myfile

or

$ apt-file search path/to/myfile

Listing the content of an uninstalled package can be done with:

$ apt-file list mypackage

Finally, you can delete the cache files with:

$ sudo apt-file purge

2009년 2월 14일 토요일

ddd에서 소스코드가 모두 나오지 않고 일부만 나오는 경우

unset LANG
하고 나서 실행하니 모두 나온다.

ddd 에서 한글 주석 소스를 보는 것은 불가능 한것인가 ?

ddd-3.3.12 가 3년만에 나왔다.

DDD 3.3.12

http://www.gnu.org/software/ddd/

여기에 보면 2009/2/11일...
(2009/02/11) DDD 3.3.12 is now available from ftp.gnu.org. DDD 3.3.12 features much improved support for debugging Python, Bash and Make, as well as various bug fixes.

he last official release of DDD, 3.3.11, was made on 16th March 2005, well over three years ago.

But, DDD developers have not been idle.

Rocky Bernstein in particular has done some great work in his "pydb" branch. DDD can now be used effectively in debugging Python programs (pydb), Bash scripts (bashdb) and Makefiles (remake)... ...


ddd가 2005년 3월 16일 이후.. 그러나 DDD개발자는 게을르지 않다..



컴파일 및 설치

wget ftp://ftp.gnu.org/gnu/ddd/ddd-3.3.12.tar.gz

tar xvfz ddd-3.3.12.tar.gz

./configure --enable-builtin-app-defaults

make

make install

만일 인스톨을 원하지 않고 쓰고 싶다면

적당히 링크 걸고

/usr/local/share/ddd-3.3.12를 만들고

thems와 vsllib를 복사 하여 넣어 준다.




2009년 2월 7일 토요일

.ttf 폰트 파일 적용 하기

먼저 오랜된 시스템에 8.10을 세로 설치 하고 폰트가 맘에 안들어서...

M$ 디스크에서

tahoma.ttf같은걸 복사 해다가

계정에 .fonts를 만들고 거기에 복사 한다.

fc-cache -r

이렇게 한뒤

잠시 후에 시스템->기본설정->모양새 로 가보면

복사한 폰트가 나온다.

2009년 2월 3일 화요일

ubnutu 8.04 에서 8.10으로 업그레이드 하기

시스템->관리->소프트웨어 소스

업데이트

맨아래 배포판 업그레이드 : 보통 배포판으로 변경

시스템->관리->업데이트 관리자.

하니 된다.

업그레이드 후에 네트워크 설정이 좀 거시기 해서
resolve.conf 직접 수정 해야 했던거 외에 깔끔하게 업그레이드 된다.

ubuntu 8.10 64bit 버젼에 kscope 설치

ubuntu 8.04 64bit에서 업그레이드 8.10으로 하니 kscope가 갑자기 라이브러리가 없다며 실행이 안된다..

sudo apt-get install kscope

kscope를 실행하면 에러가 발생한다.

kscope: error while loading shared libararies: libkateinterfaces.so.0: cannot open shared object file: No such file or directory

wget ftp.debian.org/debian/pool/main/k/kdebase/kate_3.5.9.dfsg.1-6_amd64.deb

ar x kate_3.5.9.dfsg.1-6_amd64.deb

tar xzf data.tar.gz

sudo cp usr/lib/libkateinterfaces.so.0.0.0 /usr/local/lib

sudo ldconfig

kscope를 실행를 하면 또 다른 에러 발생

kscope: error while loading shared libararies: libkateutils.so.0: cannot open shared object file: No such file or directory

sudo cp usr/lib/libkateutils.so.0 /usr/local/lib

sudo ldconfig

드디어 실행이된다.

에서.. i386 --> amd64로 수정 하여 .....



2009년 1월 9일 금요일

Beyond Compare 3 ( LINUX) 가 있다.

윈도우에서 코드 비교 머지 등으로 Beyond Compare 2를 썻다.

리눅스에서 개발 하다 보니 BC2를 잊고 있었다.

VBox에서 XP에 BC2를 설치 하려다 보니..

BC3에서 리눅스 지원...

그러나 .. 아직 64bit 버젼이....

조금만 기다리면 나오겟지...

2009년 1월 8일 목요일

VirtualBox 에서 가상 디스크 복제 하기

Ubuntu에서 Vbox으로 XP를 쓴다.
근데 가끔 두넘에 XP가 있었으면 했다.

home 밑에 .VirtualBox/VID에서 복사 하면 될듯 하지만

먼가 잇을거 같아 검색 해보니

$VBoxManage clonevdi windowsxp.vdi windowsxp2.vdi

이런식으로 복제를 해야지 된다고 한다.

VirtualBox Command Line Management Interface Version 2.1.0
(C) 2005-2008 Sun Microsystems, Inc.
All rights reserved.

0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...


이런 메세지와 함께 겁나 오래 걸린다.

램 2GB머신에서 ubuntu 랑 XP(512M) 2개 쯤은 돌릴수 있겟지...

2009년 1월 7일 수요일

gdb 에서 어셈블리 코드로 보기

(gdb) disassemble function name

이렇게 하면 어셈블리 코드 로 나온다.

mutex_lock() 함수 속에 MEMORY BARRIER이 있는가를 HP 장비에서 찾아 보려고..

libpthread.so 파일에서 찾아 보기위해서는

objdump -D libpthread.so > o

이렇게 어셈블로 떠서 볼수도 있다.

2009년 1월 1일 목요일

ubuntu에서 svn 세팅

원문:http://tong.nate.com/skekt/47549198



sudo apt-get install subversion

sudo addgroup svn
sudo adduser exist_user svn

sudo mkdir /var/svn
cd /var/svn

저장소: 파일시스템 이용
sudo svnadmin create --fs-type fsfs test

저장소: Berkeley DB 이용
sudo svnadmin create --fs-type bdb test

권한
sudo chgrp -R svn test
sudo chmod -R g+w test

접속하기
sudo apt-get install apache2
sudo apt-get install libapache2-svn
sudo vi /etc/apache2/mods-available/dav_svn.conf
[제일 아래에 추가]
<location>
DAV svn
SVNPath /var/svn/test
</location>

sudo a2enmod dav_svn
sudo adduser www-data svn
sudo /etc/init.d/apache2 restart

접속
http://서버아이피/svn/test


사용자 인증
cd /etc/apache2
sudo htpasswd -c dav_passwd sampleuser
New password:
Re-type new password:

dav_passwd 란 파일이 생겼을 것이고 내용을 보면 sampleuser가 추가된 것을 알 수 있을 것이다.
-c 옵션은 새로 생성하라는 뜻이고, 추가를 할 경우에는 -m 옵션을 사용하면 된다.
htpasswd 명령으로 생성되는 패스워드 파일은 "사용자이름:암호화된패스워드" 형식으로 저장되므로, 쉘계정을 사용하는 사람들을 모두 추가하고 싶은 경우에는
/etc/shadow 파일을 가져다가 직접 작성해줘도 무방하다.


아파치 설정
sudo vi /etc/apache2/mods-available/dav_svn.conf
<location>
DAV svn
SVNPath /var/svn/test
AuthType Basic
AuthName "sample repository"
AuthUserFile /etc/apache2/dav_passwd
Require valid-user
</location>
아파치를 재시작하고(sudo /etc/init.d/apache2 restart)
http://(Subversion과 Apache를 설치한 IP주소 또는 도메인)/svn/sample 으로 접속해보면 사용자이름과 패스워드를 물어볼 것이다. 특정 위치에 대해서 권한을 다르게 줄 수도 있다.

등록된 사용자만이 읽고 쓸 수 있게 하려면,
<location>
Require valid-user
</location>

아무나 읽을 수 있고 등록된 사용자만이 쓸 수 있게 하려면,
<location>
<limitexcept>
Require valid-user
</limitexcept>
</location>


등록된 사용자만이 읽을 수 있고, 특정한 사용자(sampleuser)만 쓸 수 있게 하려면,
<location>
<limit>
Require valid-user
</limit>
<limitexcept>
Require user sampleuser
</limitexcept>
</location>

이런 식으로 mods-available/dav_svn.conf 파일을 수정해주면 되겠다.

svn을 이용하는 방법은 여러가지가 있으므로 다음에 포스팅하기로 하겠다.

# https://help.ubuntu.com/8.04/serverguide/C/subversion.html

원문http://amoo.g3.cc/blog/18