2010년 3월 31일 수요일

URL 버퍼오버플로우(?)

 

우리가 웹브라우저 주소창에 사용할 수 있는 주소의 최대 길이는 얼마일까? ATC개발당시는 어디선가 문서를 본것 같은데, 정확하게 찾을 수 없었다. 단지 ATC 내부에 주소를 다루기 위해 1024바이트를 할당하고 있었다. 아마도 1024바이트가 주소창에 넘어갈 수 있는 최대 길이인것 같다.(IE에서 클릭하여 새창을 띄울때 GET방식으로 주소창에 1024바이트이상 주면 새창이 뜨지 않았다)
엊그제 얼마전 사명을 바꾼 G모 업체에서 ATC를 이용해 다중파일 다운로드를 하는데 파일이 30개가 넘어가면 ATC가 오류를 일으킨다는 보고가 들어왔다. 간단하게 테스트해본 결과 문제가 없었고 내가 직접 웹페이지에 접근해서 테스트를 해볼 수 있겠냐고 요청을 했더니 오늘 접근할 수 있도록 주소를 알려주었다. 디버깅 결과 다중 파일 다운로드를 하기 위해 GET방식으로 파일명(또는 어떠한 키값)을 넘겨주는데 그 주소의 길이가 1024바이트가 넘었고, ATC 때문에 IE는 처음으로 보는 에러 메시지를 보이면 실행이 중지 되었다. ㅡㅡv(나만 할 수 있는거얌!~~~)

나름대로 ASSERT도 많이 사용하고 리턴값 체크도 제대로 한다고 생각하는데... 이런 문자열 다루는 부분에서는 더욱 안정적인, 방어적인 코딩을 해야 할 것 같다. 저번 ATC버그도 실질적으로 문자열에 인한 버그라고 할 수 있겠다...
프로그래밍의 길은 정말 끝이 없다...젠장

2010년 3월 30일 화요일

Writing Software Requirements Specifications

http://www.techwr-l.com/techwhirl/magazine/writing/softwarerequirementspecs.html

Access Control Requirements, General Behavior

출처 : http://www.devdaily.com/java/misc/ReEnableExternalUser/node11.shtml

Access Control Requirements, General Behavior

This section describes the general behavior of the access control system, regardless of whether access control is enabled, or not.

  1. For external users, enabling of "access control" is optional
  2. The access control system can be enabled or disabled at any time, including:
    1. Initial application installation
    2. Later application use
  3. Access control applies to all users
    1. If enabled, all users will be limited by their group assignments
    2. If disabled, all users have free access to system resources
  4. Initial user accounts
    1. ACME will ship with two initial user accounts:
      1. Administrator
      2. Unknown User
    2. These two initial user accounts cannot be deleted
  5. Administrator account
    1. The Administrator user is in a group also named Administrator
    2. Regardless of whether security is enabled, there will always be an administrative user
    3. The administrator of external security will have the username "Administrator"
    4. The password for this account is initially "admin"
    5. A password for this account is mandatory
    6. The password for this account can be changed only by the Administrator
    7. The Administrator user account cannot be deleted or edited
    8. The Administrator group cannot be deleted or edited
  6. Unknown User account
    1. The Unknown User user is in a group named Unknown User
    2. The Unknown User user cannot be deleted or edited
    3. The Unknown Group group cannot be deleted or edited
    4. The Unknown Group group has full access to all functional areas other than User and Group management
    5. Users cannot log in as the user Unknown User when security is enabled
  7. CRUDing User Accounts
    1. The Administrator is the only user that can add, delete, and edit user account information
    2. All users can view usernames, group names, group members, and group rights without restriction.
  8. The Administrator can log in and use ACME, and has no security restrictions whatsoever.

 

 

Access Control Requirements, Security is not Enabled

This section describes the specific behavior of the access control system under the condition that the security features of the system are disabled.

  1. The login screen is not displayed
  2. All users will have unlimited read/write access to all ACME functions except User and Group management
  3. The Administrator can only log in through the "Become Administrator" process
    1. Any User or Group changes will not take effect until security is enabled

 

Access Control Requirements, Security is Enabled

This section describes the specific behavior of the access control system under the condition that the security features of the system have been enabled.

  1. External Access Control Levels (ACL) will be based on the same functional areas that the internal security is based on
    1. For example, a user may or may not have the right to edit an invoice
  2. External ACL will be controlled by the Administrator account
    1. The Administrator can:
      1. Add, edit and remove groups
      2. Add, edit and remove user accounts
      3. Assign functional areas to groups
      4. Add, edit and remove user-to-group relationships
  3. If multiple users are going to log in, security must be enabled
    1. Note: We do not want to program for this until Phase 2E when an actual installation program will be used
Functional areas

This section is completely new.

  1. Functional areas for Phase 2C are defined as follows:
    1. Job - New
      1. User can either create new jobs, or not
    2. Job - Edit
      1. User can either edit jobs, or they are read-only
    3. Job - Delete
      1. User can either delete jobs or not
    4. Job - Clear Locks
    5. Become Administrator
    6. Switch Databases
    7. Job - Save As
      1. The ability to create a job implies the ability to use "Save As..."
      2. The ability to delete a job implies the ability to overwrite an existing job
    8. Job - List Jobs
      1. Issue: Is there any need to restrict this?
    9. The following functional areas belong only to the Administrator
      1. User - New
      2. User - Edit
      3. User - Delete
      4. Group - New
      5. Group - Edit
      6. Group - Delete
    10. List User Accounts
  2. The following functional areas are specifically not being created. It is assumed that all users can CRUD database connections.
    1. Database - New
    2. Database - Edit
    3. Database - Delete
  3. This list of functional areas is the same for all customers
    1. i.e., all customers will have "User - New", "User - Edit"
    2. i.e, Bobit will not have one list of functional areas, Medical World another list, etc.
  4. There are three possible access levels for each functional area:
    1. Hidden
      1. Generally speaking, menu options will not be visible
    2. View
      1. Generally speaking, menu options will be visible, but not enabled
    3. Edit
      1. Menu options will be enabled
  5. One and only one access level can be specified per functional area, per group created
    1. Ex: The group READ_ONLY is defined to have one access level of "VIEW" for the "Edit Job" functional area.
External User Groups

When access control is enabled, User Groups can be created by the Administrator to represent user roles.

  1. External User Groups
    1. Functional areas will be assigned to groups
    2. Groups cannot contain other groups
      1. i.e., there is not a recursive nesting of one group inside of another group, inside of another ...
      2. Example:
        1. One group is named "Order Entry"
        2. A second group is named "Book Map"
        3. Order Entry cannot contain Book Map
        4. Book Map cannot contain Order Entry
    3. Group name restrictions
      1. Group names can be up to 32 characters
      2. Group names can contain the following characters:
        1. A-Z, a-z, 0-9, _, -, and blank spaces
        2. The name must begin with a character or number
  2. ACME will ship with one default Group named something like "ALL_RIGHTS"
    1. This group will have read/write access for all functional areas
External Users

With access control enabled, the Administrator must create user accounts to let users log in.

  1. External Users
    1. Users must login when starting the application
    2. Users will be able to change their passwords
    3. Users can belong to only one group
    4. User name restrictions
      1. User names can be up to 20 characters
      2. User names can contain the following characters:
        1. A-Z, a-z, 0-9, _, -, and blank spaces
        2. The name must begin with a character or number
External User Passwords
  1. A User account must always have an associated password
  2. Passwords
    1. Password restrictions
      1. Passwords can be up to 20 characters
      2. Passwords can contain any ASCII character
  1. Password changing
    1. Users can change their own passwords
    2. The Administrator can change any user's password

 

Initial database information

  1. The User database will ship with two accounts:
    1. Administrator
    2. Unknown User
  2. The Group database will ship with two accounts:
    1. Administrator
    2. Unknown Group
  3. The Customer database will ship with one or more PPC customer accounts

 

External user logins

  1. Any user can log into the system more than once simultaneously
    1. This includes Administrators
    2. This includes multiple logins per one machine
    3. This includes multiple logins from multiple workstations

2010년 3월 29일 월요일

2010년 3월 28일 일요일

tcpdump를 이용한 네트워크 사용량 측정하기

출처 : http://lethean.pe.kr/2009/12/15/network-traffic-analysis-using-tcpdump/comment-page-1/

업무상 실제 패킷 사용량을 측정할 필요때문에 여러가지 도구를 찾던 중 마땅한 걸 찾지 못해 직접 측정한 방식을 정리해 봅니다. 물론 이보다 더 좋은 방법들이 당연히 있을테지만, tcpdump 프로그램만 겨우 사용할 수 있는 환경에서 측정하는 법을 정리한 문서를 찾지 못해 남겨둡니다.

우선 어떤 방식으로든 해당 장비에 tcpdump 프로그램을 설치합니다.

그리고 측정하려는 과정이나 단계가 시작하는 동시에 다음과 같이 tcpdump 프로그램을 실행합니다.

 

$ tcpdump -qvtttt dst xxx.xxx.xxx.xxx > packet-dump.txt

 

여기서 xxx.xxx.xxx.xxx는 측정에 사용할 대상 장비입니다. 즉, 위 예제는 특정 IP로 전송하는 패킷량만 캡쳐하여 packet-dump.txt 파일에 저장합니다. 중요한 점은 앞의 옵션인데, 이 옵셥을 사용해야 아래에서 사용하는 스크립트가 분석할 수 있는 형태의 결과물로 저장됩니다. 그리고, 필요하다면, 저장한 파일을 리눅스 또는 맥 장비로 복사합니다.

저장한 파일을 conv2csv.sh 스크립트를 이용해 엑셀이나 오픈오피스에서 읽어들일 수 있는 CSV 파일 형태로 변환합니다.

 
$ ./conv2csv.sh packet-dump.txt

 

변환된 packet-dump.csv 파일은 한 행에 ‘TIMESTAMP BYTES Kbps‘ 형태로 각 초당 데이터가 저장되어 있습니다. 따라서 이 파일을 액셀이나 오픈오피스에서 공백(space)을 구분자로 해서 읽어들인 후 3번째 컬럼을 사용하면 됩니다. 참고로 여기서 측정한 크기는 IP/TCP/UDP 헤더까지 포함한 크기입니다.

다음은 이렇게 변환한 데이터를 구글 스프레드시트를 이용해 만든 차트입니다.

packet-traffic-analysis

위에서 언급한 conv2csv.sh 스크립트는 다음과 같습니다.

#!/bin/sh   CSVFILE="$(dirname $1)/$(basename $1 .txt).csv"   awk '{ print $2, $18 }' $1 | \
  tr '.\)' '  ' | \
  awk 'BEGIN { last = ""; sum = 0; } \
       { if (last == $1) \
           { sum += $3 } \
         else \
           { print last, sum, sum * 8 / 1000; \
             last = $1; \
             sum = $3; } \
       }' > $CSVFILE;)

gentoo 명령어 목록

원본 출처 : http://gayafoundation.blogspot.com/2009/03/gentoo.html
emerge


portage 를 관리하는 툴 (젠투는 곧 emerge라고 할정도로 중요한 툴)

emerge sync


인터넷으로부터 모든 패키지 목록을 로컬로 가져온다. 이 명령을 수행후부터 emerge를 이용하여 패키지를 설치할 수 있다.
3분정도 걸림(core2duo - 2gigabyte memory)

emerge system


Gentoo의 기본설치에 필요한 각종 build툴과 환경툴을 설치하는데 자신의 환경에 맞도록 알아서 설치를 해줍니다.

emerge -u system


기본 설치에 필요한 파일 및 의존 패키지 까지 설치한다.

emerge -p system


system으로 설치되는 패키지 목록을 보여준다.

emerge -p world


emerge -a 패키지명 or emerge --ask 패키지명
emerge --pretend 패키지명

해당패키지가 설치되어 있는지 확인

emerge --search 패키지명
emerge -C 패키지명


패키지 삭제

emerge --depclean -pv


의존성을 검사하여 필요없는 패키지 목록을 보여준다.

emerge --depclean


확인된 필요없는 패키지들을 제거해준다.

emerge --infoebuild


emerge 의 뼈대에 해당하는 툴 rc-update 레뎃사용자라면 ntsysv명령과 흡사하다고 이해하시면 되며 부팅후 수행할 절차를 조정하는 툴입니다.

env-update


각종 환경변수를 /etc/env.d 하위에 지정하고 이 명령을 통해서 최정적으로 환경변수를 등록하는 /etc/profile.env 로 만들어 줍니다.

net-setup


Network 설정 툴 adsl-setup, adsl-start, adsl-stop, adsl-connect ADSL사용자에게는 너무나도 편리한 툴

genkernel


gentoo kernel 빌드 툴입니다.w3m X가 설치되기 전까지는 웹서핑은 이것으로

cdrecord


CD burning 툴

qpkg


패키지를 쉽게 관리할수 있는 방법을 제공하는 툴입니다. (굉장히 편리한 기능이 돋보입니다.)

chroot


지정한 디렉토리를 최상위디렉토리로 임명하는 전통적인 명령어입니다.

fdisk


파티션 편집툴

 

2010년 3월 24일 수요일

윈도우암호 초기화하기

원본출처 :http://kinlife.tistory.com/entry/세상에서-가장-쉬운-윈도우-암호-초기화-하기

 

오늘 소개할 팁은 윈도우에 암호를 설정해놓고, 깜빡 잊어버렸을때, 윈도우 계정 암호를 초기화 시키는

팁 입니다.


특히, 너무 많은 서버를 관리하다보면, 갑자기 서버에 걸어놓은 마스터 어드민 계정의 암호가 생각
이 나

지 않을때가 있는데요, 그럴때도 유용하게 사용할 수 있습니다.

단, 절대 해킹등의 용도에는 사용되지 않았으면 좋겠다는 바람입니다.

지원하는 O/S 는 윈도우 XP, 윈도우 Vista, 윈도우 2K, 윈도우 2K3, 윈도우 NT 계열 입니다.

1. 먼저 아래의 파일을 다운로드 합니다.


(Nero 를 이용하셔서 CD 구우셔야 됩니다)

홈페이지 :
http://www.password-reset.com

2. 만들어진 부팅 CD 를 넣고 CD 부팅을 합니다.



3. 부팅이 완료되면, 'YES' 를 입력합니다. ('Y' 라고 치면 다시 부팅하니 'YES' 입력)



4. 윈도우의 암호 관리 파일인 'SAM' 파일의 위치를 입력 합니다. (보통의 경우 '1' 번)



5. 암호를 초기화 할 계정을 선택 합니다.



6. 선택한 계정의 암호를 초기화 할 것이라면, 'Y' 를 입력하시고, 재부팅 하시면 암호가 초기화 되어 있는 윈도우를 만나실 수 있을겁니다.

USB 부팅 디스크 만들기

원본출처 :http://kinlife.tistory.com/175

 

Mircosoft 사에서 직접 제공해 주는 툴 입니다.

* 단 윈도우 XP 사용자는 아래의 두 파일을 먼저 다운로드 하신 다음 설치 하신 뒤 하셔야 합니다 *

1. Microsoft .NET Framework v2 <
다운로드 클릭>

2. Microsoft Image Mastering API v2 <
다운로드 클릭>

1. 아래 파일을 다운로드 받습니다.


MS 홈페이지 : http://www.microsoft.com


 

2. 프로그램을 실행 한 다음, 먼저 윈도우 7 ISO 파일이 들어있는 장소를 지정합니다.



 

3. USB 를 PC 에 꽂은 뒤 'USB device' 를 선택하여 줍니다.



 

4. 자신이 원하는 USB 장치를 지정해 줍니다.



 

5. 파일이 복사 될 때까지 기다립니다.



 

6. USB 부팅 디스크가 완성 되었습니다.

2010년 3월 15일 월요일

뒤집어본영문법 와 동사를알면죽은영어도 살린다

영어공부를 다시 해보려고 한다.

교잴 선택해야 하는데 이게 좋다네..^^

이거부터 봐야겠다. 3-4월 2달간 책을 3권 벅찰 라나..

그래도 함 시작해봐야겠다….

Again! 뒤집어본 영문법 / 김영사 / ISBN-10 : 8934922052 l ISBN-13 : 9788934922056

뒤집어본영문법

동사를 알면 죽은 영어도 살린다1, 2 / 김영사 / 1권 ISBN-10 : 8934922893 l ISBN-13 : 9788934922896  / 2권 ISBN-10 : 8934922907 l ISBN-13 : 9788934922902

기본동사와 전치사를 이해하는 데 도움이 되는 책이란다.

동사01동사02

 

이건 다음책 저 3권을 다보면 아래것들을 또 봐야지.^^(다음을 위해 남겨놓는것임.^^)

영어를 지배하는 동사의 힘 이미지로 기른다 / 넥서스 / ISBN-10 : 8960001309 l ISBN-13 : 9788960001305

모리와 함께한 화요일 (Tuesdays with Morrie) / Bantam Books / ISBN-10 : 0385496494 / ISBN-13 : 9780385496490

요건 원서로 구입해서 보란다…

요건 어느정도 실력이 쌓이면 보면 좋다고 하네..^^

구동사 600개 내 영어가 쉬워진다 / 뉴런(NEWRUN) / ISBN-10 : 8901066114 l ISBN-13 : 9788901066110

Grammar In Use Intermediate / Cambridge /  ISBN-10 : 0521125146 l ISBN-13 : 9780521125147

2010년 3월 8일 월요일

[펌] 실전! 지속적인 통합 2편: 버전 관리 시스템 갖추기

이 글은 월간 마이크로소프트웨어(일명 마소) 2008년 2월호에 기고한 글입니다. 물론 구성이나 내용 상의 차이가 있을 수 있습니다.

지난 시간에는 지속적인 통합 환경을 갖춰놓으면 개발하는 하루하루가 어떤 모습으로 변할지 알아봤다. 사무실에 아침 일찍 도착하면 빌드 서버가 안녕한지 알아본다. 녹색 아이콘이 눈에 들어오면 한숨 놓고, 지난 밤에 누군가 밤샘 코딩을 하진 않았나 확인한다. 누리끼리한 아이콘이 보이면 “Update” 버튼을 눌러 버전 관리 저장소에서 새 코드를 내려 받는다. 이제 웹 브라우저를 열어 이슈 관리 시스템 Trac에 접속한다. “Timeline”을 보면 한밤중에 열심히 일한 사람이 누구인지, 무슨 일을 했는지 알 수 있다. 일주일이나 기다렸던 기능이 완성됐다는 메시지를 보고, 기쁜 마음에 당장 새 소프트웨어를 돌려보고 싶어서 Test.bat 배치파일을 실행한다. 배치 파일은 로컬 소스코드를 뒤져 리소스 파일을 복사하고 소스 코드를 빌드한 다음, 테스트용 데이터베이스와 데이터를 생성하고, 레지스트리를 살짝 손보고 나서 마침내 개발 중인 서버 애플리케이션과 테스트용 클라이언트 프로그램을 띄워준다. 테스트용 클라이언트에 귓말 채팅을 해보라고 명령을 내리고 순식간에 응답이 네트워크를 건너 날아온다. 소프트웨어는 어제만큼 완전하고, 더불어 멋진 기능이 하나 더 늘었다.

최재훈 | SK 아이미디어에서 게임 서버 개발을 하고 있다. 프로젝트 관리, C++, 닷넷 기술, 데이터베이스 등 여러 분야에 관심을 두고 있으며, 빌드 자동화나 테스트 기법을 실천하는 것에 역량을 기울인다.

이 모든 게 소설이 아닌 평범한 진짜 세상의 하루이다. 이렇게 일하는 곳이 많아졌지만, 어쩌다 운 없게도 괴로운 나날을 보내는 개발자에겐 꿈 같은 이야기일 것이다. 불과 2년 전만 해도 그런 환경에서 일해봤기 때문에 그 고통을 잘 안다. 이번 시간부터는 아무것도 갖추지 못한 팀이 어떻게 하면 과거와 작별하고 즐거운 미래를 맞이할 수 있을지 하나씩 알아보겠다. 그리고 그 첫 번째 단계로써, 버전 관리 시스템과 이슈 추적 시스템을 갖추는 법을 살펴보자.

빌드 자동화의 중심 – 버전 관리 시스템

지속적인 통합이라 이름 붙이긴 했지만, 어쩌면 적절한 이름이 아닐지도 모른다. 지속적인 통합은 다양한 실천 방법을 한데 묶어 일컫는 표현이기 때문에 빌드 자동화뿐만 아니라 코드를 조금씩, 자주 개선하는 활동도 포함하기 때문이다. ’지속적인 통합’ 연재에서는 주로 빌드 자동화에 중점을 두지만, 코드 개선 활동도 지속적으로 강조하고 언급할 것이다.

그런데 코드 개선 활동이 아닌 빌드 자동화에 초점을 맞추면, 그 핵심이라 할 수 있는 것이 버전 관리 시스템이다. 근래에 “Continuous Integration”을 번역하는데, 이 책에 가장 많이 등장하는 단어가 지속적인 통합을 뜻하는 “Continuous Integration”와 버전 관리 저장소를 뜻하는 “Version Control Repository”이다. 그만큼 버전 관리 저장소는 빌드 자동화에 없어서는 안 될 도구다. 버전 관리 저장소가 없으면 최신 소스 코드를 팀 구성원들이 공유하기 힘들다. 네트워크 드라이브를 사용하는 원시적인 방법으론 대규모 시스템은 도저히 개발할 수 없다. 지금 개발 중인 게임 서버는 큼지막한 애플리케이션만 10여 개가 동원되는데, 각 애플리케이션이 공유하는 라이브러리만 해도 세 개가 넘는다. 이런 판국에 누군가 핵심 라이브러리를 왕창 고쳐서 네트워크 드라이브에 올렸다고 생각하면 아찔하다.

자동화의 관점에서 봐도 버전 관리 저장소는 말 그대로 핵심이다. 누군가 소스 코드를 고쳐서 올리면, 빌드 서버가 저장소에서 최신 소스 코드를 내려 받는다. 컴파일하고 테스트를 돌려보고 나서 뭐라도 하나 깨지면 개발자에게 알려준다. 버전 관리 저장소가 없으면 사람이 직접 빌드 서버에 최신 소스 코드를 올리고 빌드 스크립트를 실행해야 한다. 날이 갈수록 오르는 인건비를 생각하면 전담 빌드맨을 두고 소프트웨어 세계의 안전을 지키게 하기란 현실적으로 어렵다. 설사 돈이 남아도는 회사라서 전담 빌드맨을 두었다 하더라도, 지루하기 짝이 없는 빌드 과정을 하루에 몇 번씩 해내려면 노이로제에 걸리고 말 것이다. 그래서 우리에겐 버전 관리 시스템이 필요하다.

버전 관리 시스템 - 서브버전

왜 그 많은 버전 관리 시스템 중에 하필이면 서브버전인가? 무엇이 더 잘났기에 서브버전을 골라야 하는가? 솔직히 말해 꼭 서브버전이어야 할 이유는 없다. 세상엔 멋진 도구가 많지만, 그 중 극히 일부만 직접 경험했을 뿐이고 실제로 1년 이상 꾸준히 써본 것은 서브버전뿐이다. 경험 많은 개발자라면 대여섯 개의 시스템을 경험해봤을지도 모르겠다. 어쨌거나 서브버전은 대중적인 인기를 누리는 소프트웨어이고, 무료로 사용할 수 있다. 그리고 마찬가지로 무료인 멋진 클라이언트 도구인 TortoiseSVN이 있다. 수년 간 잘 써왔고 특별히 불만스러운 점이 없었으며 다른 사람도 대체로 만족한다는 점에서 서브버전을 택했다. 좀더 그럴듯한 이유를 대면 좋지만, 여기서는 솔직하고 실용적인 선택을 하겠다.

서브버전의 종류

서브버전 커뮤니티는 리눅스용과 윈도우용 모두 배포한다. 각각 장단점이 있는데, 윈도우용은 설치하기 쉽지만 리눅스용은 조금 더 손이 간다. 그런 반면 서브버전의 고급 기능을 쓰거나 이슈 추적 시스템 같은 Trac 등과 연동할 때는 리눅스용이 더 쉬울 수 있다. 대부분의 문서가 리눅스 환경에 맞춰 작성되기 때문에, 윈도우 환경에 알맞은 방법을 찾기가 쉽지 않을 때가 많고, 그런 탓에 문제가 발생했을 때 해결하기 쉽지 않은 게 사실이다. 하지만 윈도우용은 장점이 하나 더 있는데, 특히 이 칼럼에서 다루는 환경에서 빛을 발한다. 윈도우 프로그래밍을 하는 만큼 윈도우를 빌드 서버로 써야 한다. 만약 윈도우용 서브버전을 선택한다면, 한 컴퓨터에 빌드 자동화 환경을 모두 갖출 수 있다. 특히 자동화 환경을 갖추는 데 투자를 꺼려하는 곳이라면, 추가적인 하드웨어 구매 비용이 발생하지 않는 편이 좋을 수 있다.

여기선 리눅스용 서브버전에 중점을 둔다. 프로젝트에 정식으로 참가했을 무렵에 이미 리눅스 환경에 서브버전과 Trac을 설치해서 쓰고 있었기 때문인 탓도 있지만, 어느 정도 규모를 넘어선 프로젝트라면 어차피 한 컴퓨터에 버전 관리 시스템과 빌드 서버를 함께 두긴 힘들다. 빌드 서버가 열심히 제 할 일을 하느라 CPU 사용률이 마구 치솟는 상황에선 최신 소스 코드를 올리고 내려 받기 힘들다.

서브버전 설치하기 – 리눅스 서버가 갖춰져 있을 때

리눅스 배포판에는 다양한 종류가 있다. 그리고 각 배포판마다 특징이 있어서 소프트웨어를 설치하는 방법이 달라지곤 한다. 그러니 모든 경우를 다 다루기는 힘들고 여기선 인기 있는 배포판 중 하나인 Ubuntu 7.10이 설치되어 있는 상황이라고 가정한다.

먼저 할 일은 Ubuntu를 최신 상태로 업그레이드 하는 것이다. 간단히 명령어 두 개를 실행시키면 된다.

$ sudo apt-get update
$ sudo apt-get dist-update

그러고 나서 아파치 웹 서버와 서브 버전을 설치한다. 아파치는 웹을 통해 서브버전 저장소에 접근할 수 있게 해주고, 후에 이슈 추적 시스템 Trac을 설치할 때도 필요하다.

$ sudo apt-get install apache2
$ sudo apt-get install subversion subversion-tools

아파치와 서브버전이 무사히 설치되었으면 이제 서브버전 저장소를 만들어보자.

$ sudo mkdir –p /var/lib/svn/myproject

여기선 임의로 프로젝트 이름을 myproject로 정했는데, 프로젝트가 여러 개 있다면 /var/lib/svn에 각 프로젝트에 해당하는 디렉토리를 만들어주면 된다.

이제 프로젝트 디렉토리를 서브버전 저장소로 초기화해준다.

$ sudo svnadmin create /var/lib/svn/myproject
$ sudo svn mkdir file:///var/lib/svn/myproject/trunk -m “Trunk”

svnadmin create로 저장소를 만들고, svn mkdir를 사용해 저장소 안에 디렉토리를 생성했다. 지금 당장 trunk 디렉토리를 만들 필요는 없고, 잘 설치됐는지 확인하려는 것뿐이다. 모든 게 정상이라면 이제 웹 브라우저를 통해 SVN에 접근할 수 있게 해보자. 우선 아파치와 서브버전을 연동해주는 패키지부터 설치한다.

$ sudo apt-get install libapache2-svn

설치가 무사히 끝났으면 “vim /etc/apache2/mod-available/dav_svn.conf” 명령어를 쳐서 파일을 열고 다음과 같이 편집한다. 파일의 내용은 이미 써져 있을 테고 주석만 선택적으로 풀고 일부 값을 바꿔주면 된다(지면 관계상 주석을 제거했다).

<Location /svn> 
DAV svn
SVNParentPath /var/lib/svn
 
AuthType Basic
AuthName "Subversion Repository Access"
AuthUserFile /etc/apache2/htpasswd
AuthzSVNAccessFile /etc/ apache2/dav_svn.passwd
 
  <LimitExcept GET PROPFIND OPTIONS REPORT>
    Require valid-user
  </LimitExcept> 
</Location>

dav_svn.conf 파일을 다 수정했으면 앞으로 사용할 계정을 만든다.

$ sudo htpasswd –c /etc/apache2/dav_svn.passwd 내아이디

이제 “sudo chown –R www-data.www-data /var/lib/svn” 명령어를 쳐서 웹을 통해 저장소에 접근할 수 있도록 권한을 부여한다. 다 끝났으면 웹 서버가 새 설정 파일을 읽어 들이도록 하자.

$ sudo /etc/init.d/apache2 restart

이제 “웹 브라우저를 열어 웹으로 접근해본다. http://내_아이피/svn/myproject 를 치면 아래와 같은 화면이 보인다.

웹으로 SVN 접근하기
[그림 1] 웹으로 SVN 접근하기

여기까지 왔으면 나머지는 서브버전 설치가 아닌 관리에 속하는 일이다. 프로젝트 디렉토리 구조를 정하고 소스코드를 커밋해 넣는 일이 남았는데, 리눅스 환경에 친숙하지 않은 사람이라도 걱정할 것 없다. 저장소를 만드는 일까지 끝났으면 나머지는 로컬 윈도우에서도 할 수 있다. 혹 리눅스나 윈도우 콘솔 환경에서 서브버전을 관리하고 싶다면 서브버전 윈도우 바이너리에 포함된 설명서(http://subversion.tigris.org)나 웹 문서 또는 관련 서적을 참고하면 된다.

서브버전 관련 문서

서브버전의 인기만큼 관련 문서나 서적이 많은데, 지면이 부족하니 온라인 서점에서 검색하면 바로 나오는 책은 빼고 웹 문서만 몇 개 소개한다.

안될경우 아래와 같이 함.

SVN 폴더 생성
sudo svnadmin create /home/svn
sudo chown www-data:www-data /home/svn -R

 

SVN 환경 설정
sudo vi /etc/apache2/mods-enabled/dav_svn.conf

<Location /svn>
   DAV svn
   SVNPath /home/svn
   AuthType Basic
   AuthName "Subversioin Repository"
   AuthUserFile /etc/apache2/dav_svn.passwd
</Location>

sudo htpasswd -cm /etc/apache2/dav_svn.passwd hulryung
sudo /etc/init.d/apache2 restart

Trac 설치하기

이슈 추적 시스템은 버전 관리 시스템과 비교하면 그리 중요한 요소라 할 수 없다. 그러나 Trac은 설치하기 쉽고, 설치 시간에 비하면 그 효과가 매우 크다. Trac 같은 웹 기반 도구가 있으면 지난밤에 누가 밤샘 코딩을 했는지, 무엇을 고쳤는지, 내가 모르는 사이에 어떤 버그를 발견했는지 쉽게 파악할 수 있다. 특히 개발자마다 일하는 시간대가 조금씩 다른 게임 개발팀이나, 오픈 소스 프로젝트 같이 지역적으로 서로 떨어진 개발자들이 함께 일해야 하는 경우에 이슈 추적 시스템이 있으면 참 좋다. 자, 이제 Trac을 설치해보자.

우선 Trac 설치에 필요한 패키지부터 설치한다.

$ sudo apt-get install trac libapache2-mod-python python-setuptools

무사히 설치했으면 서브버전 저장소와 같은 이름으로 Trac 프로젝트를 만들자.

$ cd /var/lib/trac
$ sudo trac-admin myproject initenv

trac-admin을 실행시키면 이것저것 물어보는데, 서브버전 저장소 경로에 “/var/lib/svn”을 적어주고 다른 값은 기본값 그대로 놔두면 된다.

마지막으로 서브버전을 설치할 때와 마찬가지로 아이디를 생성하고, Trac 프로젝트 디렉토리를 웹에서 접근할 수 있도록 권한을 부여하면 끝이다. 모든 게 끝나면 http://내아이피/trac/myproject 에 접속해본다. 붉은 색이 인상적인 Trac 이슈 추적 시스템의 메인 메뉴가 보일 것이다.

$ sudo htpasswd -c /etc/apache2/dav_svn.passwd 내아이디
$ sudo chown -R www-data.www-data /var/lib/svn
Trac 스크린샷
[그림 2] Trac
편안하게 설치하기

새 리눅스 서버를 설치해서 쓸 생각이라면 ThoughtWorks사가 배포하는 Buildix를 진지하게 고려해보자. Buildix는 다른 게 아니라 버전 관리 시스템 서브버전, 이슈 추적 시스템 Trac, 프로젝트 관리 도구 Mingle, 그리고 빌드 서버 CruiseControl가 설치해놓은 리눅스 배포판이다. 실제로 다운로드 받아 살펴보면 상당히 깔끔하게 구성해놨다는 걸 알 수 있다.

Buildix는 여러 방법으로 배포된다. 맛부터 보고 싶다면, LiveCD를 내려 받아 체험해볼 수 있다. 하드디스크에 설치하지 않고 CD만으로 부팅할 수 있다. VMWare 이미지 역시 배포하므로 하드웨어 구매 예산은 없지만, 넉넉한 성능을 갖춘 컴퓨터가 하나 남는다면 임시로 가상 머신을 쓰면 되겠다. 하드디스크에 Buildix를 까는 방법은 크게 두 가지인데, 하나는 Buildix CD를 넣고 설치하는 것이고, 다른 하나는 Ubuntu 배포판부터 설치하고 Buildix 패키지를 설치하는 것이다.

후자의 경우엔 설치법이 Buildix 사이트에 잘 나와 있는데, 간략하게 설명하면 이렇다.

  1. /etc/apt/sources.list 파일을 열고 다음 코드를 추가한다.

    deb http://buildix.thoughtworks.com/repos/debian buildix main

  2. Buildix 패키지를 내려 받는다.

    wget http://buildix.thoughtworks.com/repos/debian/buildix-key.gpg

    apt-key add buildix-key.gpg

  3. 저장소 목록을 갱신하고 Buildix를 설치한다.

    aptitude update

    aptitude install buildix

만약 Buildix CD를 넣고 설치했다면 당연히 위의 과정조차 필요 없다.

Buildix를 설치하고 부팅하면 로그인 창이 뜬다. 그런데 Buildix 사이트에는 로그인 계정과 암호를 언급한 곳이 없어서 처음에 당황할 수 있다. 다행히 누구나 생각해낼 법한 아이디와 암호를 쓰는데 어이없게도 root/root 이다. 첫 로그인 후에 암호는 바꾸면 되겠다.

이제 로그인도 했고 프롬프트에 뭔가 쳐 넣어야 할 것 같다. 하지만 도대체 뭘 해야 할까? 딱히 매뉴얼이 있는 것도 아니고, 운 나쁘게도 여러분이 리눅스에 친숙하지 않다면 머리가 아파올 것이다.

우선 웹 브라우저를 열고 http://내_아이피/ 에 접속해보자. 반갑게도 Thoughtworks 로고가 드러난 메인 메뉴가 나온다.

Buildix 스크린샷
[그림 3] Buildix 메인 메뉴
Buildix 환경 설정

Buildix는 앞서 직접 서브버전과 Trac을 설치했을 때와 미묘하게 다른 환경을 설정한다.

  1. 서브버전 저장소 루트 경로가 “/var/lib/svn”이 아닌 “/var/svn”이다.

  2. Trac 프로젝트 루트 경로가 “/var/lib/trac”이 아닌 “/var/trac”이다.

  3. “/etc/apache2/mods-available/dav_svn.conf” 파일 대신 “/etc/apache2/sites-available/buildix”를 사용한다.

  4. 인증 파일의 경로가 다르다. “/etc/apache2/dav_svn.authz”는 “/etc/buildix/dav_svn.authz”가 되고, “/etc/apache2/htpasswd”는 “/etc/buildix/htpasswd”가 된다.

여러 설정 파일 중에 “/etc/apache2/sites-available/buildix”을 열어 자세히 보면, 여러 가지 사실을 알 수 있다. 예를 들어 http://내아이피/usermanager 에 접속하면 사용자 계정을 웹 인터페이스를 통해 생성할 수 있다. 번거롭게 명령창에 htpasswd 명령어를 치지 않고도 웹에서 바로 계정을 발급 받아서 Trac 등에 접속할 수 있으니 더할 나위 없다.

전에 서브버전과 Trac을 설치했을 때와 마찬가지로 저장소와 프로젝트를 만든다. 이때 “Buildix 환경 설정”에 언급한대로 서브버전 저장소 루트 경로와 Trac 프로젝트 루트 경로가 전과는 다르다는 점에 유의한다.

$ sudo svnadmin create /var/svn/myproject
$ cd /var/trac
$ sudo trac-admin myproject initenv

그러고 나서 웹 사이트 메인 메뉴의 Subversion 버튼이나 Trac 버튼을 누르면, 서브버전 저장소와 Trac 프로젝트 홈페이지가 보일 것이다.

마지막으로 CruiseControl과 Mingle에 대해 간단히 언급하고 마치겠다. CruiseControl은 자바 플랫폼용 빌드 서버인데 이 칼럼은 주로 윈도우 개발팀을 대상으로 삼기 때문에 쓸 일이 없다. 설치 후에 Buildix 메인 메뉴에 접속하면 “Mingle is installed but not configured”라는 메시지가 보인다. 프로젝트 관리 도구인 Mingle을 사용하지 않으려면 “aptitude remove mingle”만 쳐주면 된다. 만약 Mingle을 쓸 거라면 라이선스에 유의해야 한다. 상용의 경우 5명까지는 무료로 사용할 수 있지만, 사용자가 늘어나면 비용을 지불해야 한다. 교육용이나 비상업적 용도 또는 오픈 소스 프로젝트에 쓸 것이라면, Mingle 홈페이지의 설명에 따라 지원하면 된다.

끝마치는 말

이번 호에선 간략하게 버전 관리 저장소와 이슈 추적 시스템을 설치해봤다. 사실 조직마다 요구사항이 달라서 어떤 곳은 SSL 로그인을 지원해야 할 수도 있고, 다른 곳에선 Trac의 웹 관리자 기능을 추가하고 싶을 수도 있다. 이런 세세한 부분까지 다루기엔 지면이 부족하거니와 자칫 지속적인 통합의 다른 부분을 다루기도 전에 진이 빠져버릴 위험도 있다. 그래서 정말 당장 필요한 것만, 핵심적인 것만 다루었다. 물론 빼먹은 중요한 사항도 있지만, 그것들에 대해선 차차 하나씩 알아볼 것이다. 더 많이 알고 싶다면 관련 서적이나 웹 문서 등을 검색해보거나 http://kaistizen.net 에 문의해주길 바란다. 능력이 닿는 한 최대한 도울 생각이다. 좀더 인간적으로 살고자 자동화 도구의 도움을 받고 싶다면 언제라도 환영이다.

다음엔 다시 윈도우의 세계로 돌아와 CruiseControl .NET를 활용해 기초적인 빌드 자동화를 이루는 방법에 대해 알아보는 시간을 갖겠다. 리눅스 환경에 익숙하지 않아 힘들었던 독자라면 다음 칼럼이 반가울지도 모르겠다.

출처 :http://kaistizen.net/EE/index.php/imaso/continuousintegration_2008_02/

Mantis 한글 메뉴얼

http://jacking75.cafe24.com/mantis/manual/index.html

 

http://www.alles.or.jp/~sogabe/mantis/에서 번역을 한 것 이라고 한다.

[How We Test Softeare At Microsoft] SDET And STE

 

ms

 

 

마이크로 소프트에서 는 이렇게 구분 짓고 업무를 나누고 있다고 한다.MS_03

 

SDE/T 의 작업은 테스트 실행을 위한 테스트 Hamess 개발, 보안과 성능 테스팅 툴 개발, 자동 API 프로토콜 테스트, 버그배쉬 참가,  버그탐색, 디버그, 기록, 리그레이션 테스트, 설계 리뷰 참가 , 코드리뷰 참가를 하고, STE의 작업은 테스트 계획 작성, 테스트 케이스 문서화, 수동테스트, 핵심 테스트 자동화 작업, 버그 탐색, 기록, 리그레이션 테스트, 설계 리뷰 참가를 한다고 한다.

버그 배쉬가 머지 근데? 암튼  나는 어디에 속할까?

 

나 또한 STE 쪽에서 SDET쪽으로 옮겨가고 있는 중 인것 같다.

 

출처: How We Test Softeare At Microsoft 본문중

2010년 3월 7일 일요일

한글 관련 설치

한글 관련된것을 한꺼번에 설치하고 싶다면

$yum groupinstall korean-support -x xorg-x11-server-Xorg

로케일(Locale) 설정

     

    여기까지 성공적으로 작업을 마쳤다면 다음의 파일들을 편집합니다.

    [/etc/sysconfig/i18n]
    -------------------------------------------------------
    LANG=”ko”
    -------------------------------------------------------

    [/usr/share/locale/locale.alias]
    -------------------------------------------------------
    ko      ko_KR.eucKR
    -------------------------------------------------------

 

참고페이지

http://srue.net/77

http://www.linuxlab.co.kr/docs/00-02-4.htm

Centos PHP 설치

wget http://dev.centos.org/centos/5/CentOS-Testing.repo
mv CentOS-Testing.repo /etc/yum.repos.d/
yum --enablerepo=c5-testing update php

 

출처 :http://www.somegate.com/topic_new.php?topic_uid=3973

2010년 3월 4일 목요일

협업관리 및 이슈트래커 비교자료

웹기반 이슈트래커 비교자료
http://www.michaelflanakin.com/Articles/Comparisons/WebBasedIssueTrackers/tabid/198/Default.aspx
1.Mantis
http://www.mantisbt.org/
http://jacking75.cafe24.com/mantis/manual/index.html
버그에 한정된 전형적인 Bug Tracking System으로 활용하면 Issue관리까지도 가능하나 제품 초기의 컨셉이 BTS에 한정이 되어있어서, 이슈/문서/지식/형상을 포함하는 개념까지로 확장하기가 어렵다. PHP+MySQL 조합으로 설치가 그리 어렵지 않으나 WIKI 및 Subversion과 연동시킬 경우 설정이 다소 어려움. (http://tykim.wordpress.com/ 에서발췌)
2. Trac
http://trac.edgewall.org/
http://kldp.net/projects/trac-ko/
http://openlook.org/blog/2004/12/21/cb-867/
http://trac.tistory.com/
이슈(로드맵/마일스톤)+위키+형상관리(Subversion)뷰어 기능이 존재하여, 상호간에 Link 개념으로 유기적 연동이 된다 (이슈를 발생하여 이 이슈 key를 subversion커밋할 시 포함시키면 자동으로 연동되며, WIKI에서도 이슈 key를 연동할 수 있음.) 이슈, 위키의 기능들이 최소한의 기능들로 구성됨. TNF, 제로보드등에서 대표적으로 사용하고 있음. 설치가 어렵웠는데 최근 0.11로 판올림하면서 설치가 쉬워졌고, TOW등을 이용하면 편하게 사용할 수 있음. (http://tykim.wordpress.com/ 에서발췌)
참고문서
이슈 트래커 개발자가 들려주는 이슈 트래커 이야기, Part 1: 무엇을 어떻게 골라쓸까
http://www.ibm.com/developerworks/kr/library/s_issue/20071127/?ca=dnn-krt-20071128
이슈 트래커 개발자가 들려주는 이슈 트래커 이야기, Part 2: 이슈 트래커를 슬기롭게 활용하자
http://www.ibm.com/developerworks/kr/library/s_issue/20071231/

출처 :http://sangmin.tistory.com/838

2010년 3월 2일 화요일

소프트웨어 테스팅 마이크로소프트에선 이렇게 한다

영문(PDF)으로 보다가 한글이 나왔다고 하길 레 도서관에 도서구입신청을 해놨다.

신청한지 1달도 더 됐는데 아직도 구매를 않해 준다..

언제나 올찌.. PDF로 다 볼때쯤이면 올라나..

 

걍 사버릴까..

음..

2010년 3월 1일 월요일

CentOS5에 SVN과 Trac Install하기

CentOS5에 SVN과 Trac Install하기 - 1


SVN과 Trac의 설치
SVN은 프로그램을 수정함에 따라서 그에 따른 version을 관리해 준다. 이와 연동하여 Trac은 이를 웹 브라우저를 통해 소스의 변동사항을 보기 쉽게 나타내 주며, 또 버그에 대한 리포팅 등도 사용할 수 있게 된다.
여러 사람이 함께 작업하는 프로젝트에서 서로간의 의사소통과 소스의 공유는 필수적이다. 이 두 프로그램은 변동된 사항에 대해 즉각적으로 대응하고, 변동사항이 무엇인지를 확실하게 파악해 서로간의 의사소통이 원활하게 이루어 질 수 있도록 할 것이다.

CentOS에 개발툴인 SVN과 Trac을 설치하여 사용하려고 한다. 다음의 순서를 따르게 되며, 이 포스트는 다음의 사이트를 참조하였다.
  References:
- http://www.daniel-skinner.co.uk/setup-subversion-and-trac-on-centos-5/06/01/2008
- http://www.techyouruniverse.com/software/installing-trac-with-subversion-on-cent-os-5-with-neon-and-quicksilver

1. 먼저 SVN과 mod_dav_svn을 설치한다.


- yum install subversion mod_dav_svn
   다음의 설정 파일을 연 후 다음 두 문장이 존재하지 않을 경우 이를 추가해 준다.
- vim /etc/httpd/conf/httpd.conf

LoadModule dav_svn_module modules/mod_dav_svn.so
LoadModule authz_svn_module modules/mod_authz_svn.so

2. 다음의 과정을 거쳐 Trac을 설치한다.


1) python과 그와 관련된 것들을 설치한다.
  - yum install python
    Apache가 python script를 사용할 수 있도록 mod_python을 설치한다.

 

 - yum install gcc* cpp* compat* flex* -y

    gcc 등 관련 모듈들을 설치한다.

  - yum install mod_python
    python이 MySQL을 사용할 수 있도록 MySQL-python을 설치한다.
    이 과정은 먼저 다음의 주소에서 다운로드 후 압축을 해제 한다.

  - http://sourceforge.net/projects/mysql-python
    압축을 해제한 디렉토리로 이동하여 다음 명령어를 통해 설치한다.

    tar -zxvf

   -  setuptools 을 설치한다.

  - yum install python-setuptools

 

  -그 밖의 Trac의 설치에 필요한 개발 툴들을 설치 한다.
  - yum install neon neon-devel python-devel swig


- python setup.py build && python setup.py install

 

3) Trac이 사용하는 Tamplating package인 Clearsilver를 설치한다.
  - wget http://dag.wieers.com/rpm/packages/clearsilver/clearsilver-0.10.4-1.el5.rf.i386.rpm
  - rpm -i clearsilver-0.10.4-1.el5.rf.i386.rpm
  - wget http://dag.wieers.com/rpm/packages/clearsilver/python-clearsilver-0.10.4-1.el5.rf.i386.rpm
  - rpm -i python-clearsilver-0.10.4-1.el5.rf.i386.rpm

4) Trac을 설치한다.
    먼저 다음의 주소에서 다운로드 후 압축을 해제 한다.
  - http://trac.edgewall.org/wiki/TracDownload
    압축 해제한 디렉토리로 이동하여 다음의 명령어를 통해 설치한다.
  - python ./setup.py install

여기까지 거치고 나면 SVN과 Trac의 설치는 완료되었다.
이제 SVN과 Trac에 프로젝트를 관리하기 위한 공간을 생성해 실제로 사용할 수 있도록 해야 한다.

CentOS5에 SVN과 Trac Install 하기 - 2


SVN repository와 Trac 연결


SVN과 Trac을 이용하여 프로젝트를 관리하기 위해 SVN과 Trac을 설치 하였다면 이제 SVN과 Trac에 프로젝트를 관리하기 위한 repository를 생성해 실제로 사용할 수 있도록 해야 한다. 이 과정은 다음과 같다.

1. 먼저 SVN에 프로젝트에 대한 repository을 마련한다.


   이 때 중요한 것은 <project> 앞까지의 경로들에 대한 디렉토리들은 미리 생성되어 있어야 한다.
- svnadmin create --fs-type fsfs /srv/svn/<project>

2. SVN에서 생성한 repository를 Trac에 초기화 시킨다.


- trac-admin /srv/trac/<project> initenv
   이 때 trac-admin은 default 경로로 /srv/svn/<project>를 나타낸다. 만약 그렇지 않도록 설정하려면 따로 지정 해 주어야 한다.

3. Apache에 생성한 파일들에 대한 접근 권한을 부여한다.


- chown -R apache.apache /srv/svn/<project>
- chown -R apache.apache /srv/trac/<project>

4. SVN repository를 위한 새로운 Apache config 파일을 생성하여 Apache가 SVN repository 경로를 알수 있게 한다.


- vim /etc/httpd/conf.d/subversion.conf
   위와 같이 설정 파일을 열고 다음의 문구를 추가한다.

<Location /svn/<project>>
  DAV svn
  SVNPath /srv/svn/<project>
  AuthType Basic
  AuthName "<project> Repository"
  AuthzSVNAccessFile /srv/svn/svn-acl-conf
  AuthUserFile /srv/svn/<project>.htpasswd
  Require valid-user
</Location>

이렇게 함으로써 SVN repository 생성까지 마쳤다. 이제 repository에 접근하기 위한 user를 생성하면 모든 작업이 마무리 된다.

CentOS5에 SVN과 Trac Install 하기 - 3


Apache설정과 user 등록


SVN repository를 생성하고 나면 이제 SVN repository에 접근 할 수 있는 user를 생성해야 한다. 그 과정은 다음과 같다.

1. 먼저 SVN repository의 user를 관리하는 file을 생성한다.


- touch /srv/svn/<project>.htpasswd

2. 그리고 user를 추가한다.


- htpasswd -m /srv/svn/<project>.htpasswd <username>

3. SVN Access control list를 작성하여 user의 접근권한을 설정 한다.


   먼저 다음 파일을 만든다.
- vim /srv/svn/svn-acl-conf
   그 후 다음의 지시어를 추가한다.

[<project>:/]
<username> =  rw

4. Apache에 Trac에 대한 정보를 제공하기 위해 새로운 설정파일을 생성한다.


   먼저 파일을 생성한다.
- vim /etc/httpd/conf.d/trac.conf
   그리고 다음의 지시어를 추가한다.

<Location /trac/<project>>
  SetHandler mod_python
  PythonHandler trac.web.modpython_frontend
  PythonOption TracEnv /srv/trac/<project>
  PythonOption TracUriRoot /trac/<project>
</Location>

<Location "/trac/<project>/login">
  AuthType Basic
  AuthName "trac"
  AuthUserFile /srv/trac/<project>.htpasswd
  Require valid-user
</Location>

5. Trac user를 관리하는 파일을 생성한다.


- touch /srv/trac/<project>.htpasswd

6. Trac user를 추가한다.


- htpasswd -m /srv/trac/<project>.htpasswd <username>

7. 생성된 Trac user 중 admin을 지정한다.


- trac-admin /srv/trac/<project> permission add <username> TRAC_ADMIN

8. Apache를 재시작한다.


- service httpd restart

이 과정까지 마치고 나면 SVN과 Trac을 위한 기본적인 사항은 모두 셋팅이 완료되었다고 할 수 있다.
이제 Browser로 IP/trac/<project>에 접속하면 Trac 화면을 볼 수 있을 것이다.(user로 login도 가능하다.)

[출처] CentOS5에 SVN과 Trac Install 하기 - 3|작성자 살인머릿결