티스토리 뷰



"리눅스 서버(우분투) 설치하기"와 "리눅스 서버(우분투)에 서브버전 설치하기"에 이은 글입니다.  이번 글에서는 대표적인 협업 개발 시스템의 하나인 파이썬 기반의 트랙(Trac)을 설치하는 과정을 다룹니다. 시스템을 효과적인 프로젝트 관리에 활용 할 수 있을 것입니다.



■ WSGI 모듈 및 Trac 설치


파이썬으로 개발한 Trac 시스템을 웹으로 서비스하는 다양한 방법이 있지만 이번 글에서는 WSGI 모듈을 적용합니다. 아파치 웹서버의 WSGI(Web Server Gateway Interface)과 함께 Trac은 sudo apt install trac libapache2-mod-wsgi 명령으로 설치합니다.


The following additional packages will be installed:

  docutils-common docutils-doc javascript-common libjbig0 libjpeg-turbo8 libjpeg8 libjs-excanvas libjs-jquery

  libjs-jquery-timepicker libjs-jquery-ui liblcms2-2 libpaper-utils libpaper1 libpython-stdlib libpython2.7

  libpython2.7-minimal libpython2.7-stdlib libtiff5 libwebp5 libwebpmux1 python python-babel python-babel-localedata

  python-chardet python-docutils python-genshi python-minimal python-pil python-pkg-resources python-pygments

  python-roman python-setuptools python-six python-subversion python-tz python2.7 python2.7-minimal

제안하는 패키지:

  libjs-jquery-ui-docs liblcms2-utils python-doc python-tk texlive-latex-recommended texlive-latex-base

  texlive-lang-french fonts-linuxlibertine | ttf-linux-libertine doc-base python-genshi-doc python-pil-doc

  python-pil-dbg ttf-bitstream-vera python-setuptools-doc python-subversion-dbg python2.7-doc binutils binfmt-support

  python-psycopg2 python-textile trac-accountmanager trac-authopenid trac-bitten trac-bzr trac-customfieldadmin

  trac-email2trac trac-graphviz trac-ja-resource trac-mastertickets trac-mercurial trac-spamfilter trac-wikiprint

  trac-wikirename trac-wysiwyg trac-xmlrpc

다음 새 패키지를 설치할 것입니다:

  docutils-common docutils-doc javascript-common libapache2-mod-wsgi libjbig0 libjpeg-turbo8 libjpeg8 libjs-excanvas

  libjs-jquery libjs-jquery-timepicker libjs-jquery-ui liblcms2-2 libpaper-utils libpaper1 libpython-stdlib

  libpython2.7 libpython2.7-minimal libpython2.7-stdlib libtiff5 libwebp5 libwebpmux1 python python-babel

  python-babel-localedata python-chardet python-docutils python-genshi python-minimal python-pil python-pkg-resources

  python-pygments python-roman python-setuptools python-six python-subversion python-tz python2.7 python2.7-minimal

  trac


위의 내용은 본격적인 설치에 앞서 인스톨 명령으로 기술한 trac과 libapache2-mod-wsgi를 설치하기 위해서 관련된 모듈을 자동 검색한 결과로 다양한 라이브러리와 함께 파이썬 2.7 버전을 설치하고 있음을 확인 할 수 있습니다.



■ 프로젝트 루트 디렉토리 생성


sudo mkdir -p /var/lib/trac

sudo mkdir -p /var/www/html/trac

sudo chown www-data:www-data /var/lib/trac

sudo chown www-data:www-data /var/www/html/trac


각 Trac 프로젝트의 파일들이 위치할 루트 디렉토리를 위의 명령과 같이 생성합니다. 앞서 "리눅스 서버(우분투)에 서브버전 설치하기" 에서 생성한 서브버전 저장소의 루트 디렉토리 생성과 유사합니다. 루트 디렉토리 아래에 각 프로젝트의 디렉토리를 생성하고 그아래에 설정 파일과 데이터베이스 및 웹 파일들이 위치하게 됩니다. 차이점이라면 Trac 파일이 위치하고 있는 디렉토리(위의 예제에서 /var/lib/trac)와 함께 아파치 서비스를 위한 디플로이 디렉토리(위의 예제에서 /var/www/html/trac)를 두고 있는 것입니다. 



■ Trac 프로젝트 생성과 기본 설정


프로젝트별로 서브버전 저장소를 생성한다면 저장소의 이름과 Trac 프로젝트의 이름을 일치시키는 것이 관리에 효과적일 것입니다. 앞서 생성한 testprj라는 이름으로 작업을 진행하겠습니다.


sudo trac-admin /var/lib/trac/testprj initenv testprj sqlite:db/trac.db

sudo trac-admin /var/lib/trac/testprj deploy /var/www/html/trac/testprj

sudo chown -R www-data:www-data /var/lib/trac/testprj

sudo chown -R www-data:www-data /var/www/html/trac/testprj


프로젝트 생성 > 디플로이 > 프로젝트 폴더의 소유자 변경의 작업은 위의 스크립트와 같이 수행합니다.


sudo trac-admin /var/lib/trac/testprj initenv testprj sqlite:db/trac.db

프로젝트 생성 및 초기화

 기본 위키 페이지 설치

  TracUpgrade을(를) /usr/lib/python2.7/dist-packages/trac/wiki/default-pages/TracUpgrade(으)로부터 가져옴

  TracRss을(를) /usr/lib/python2.7/dist-packages/trac/wiki/default-pages/TracRss(으)로부터 가져옴

  TracChangeset을(를) /usr/lib/python2.7/dist-packages/trac/wiki/default-pages/TracChangeset(으)로부터 가져옴

  TracInterfaceCustomization을(를) /usr/lib/python2.7/dist-packages/trac/wiki/default-pages/TracInterfaceCustomization(으)로부터 가져옴

  TracImport을(를) /usr/lib/python2.7/dist-packages/trac/wiki/default-pages/TracImport(으)로부터 가져옴

  TracTicketsCustomFields을(를) /usr/lib/python2.7/dist-packages/trac/wiki/default-pages/TracTicketsCustomFields(으)로부터 가져옴

  TracLinks을(를) /usr/lib/python2.7/dist-packages/trac/wiki/default-pages/TracLinks(으)로부터 가져옴

  TracRoadmap을(를) /usr/lib/python2.7/dist-packages/trac/wiki/default-pages/TracRoadmap(으)로부터 가져옴

  TracRevisionLog을(를) /usr/lib/python2.7/dist-packages/trac/wiki/default-pages/TracRevisionLog(으)로부터 가져옴

  TracModWSGI을(를) /usr/lib/python2.7/dist-packages/trac/wiki/default-pages/TracModWSGI(으)로부터 가져옴

  TracReports을(를) /usr/lib/python2.7/dist-packages/trac/wiki/default-pages/TracReports(으)로부터 가져옴

  TracPlugins을(를) /usr/lib/python2.7/dist-packages/trac/wiki/default-pages/TracPlugins(으)로부터 가져옴

  PageTemplates을(를) /usr/lib/python2.7/dist-packages/trac/wiki/default-pages/PageTemplates(으)로부터 가져옴

  TracNotification을(를) /usr/lib/python2.7/dist-packages/trac/wiki/default-pages/TracNotification(으)로부터 가져옴

  WikiNewPage을(를) /usr/lib/python2.7/dist-packages/trac/wiki/default-pages/WikiNewPage(으)로부터 가져옴

  TracFastCgi을(를) /usr/lib/python2.7/dist-packages/trac/wiki/default-pages/TracFastCgi(으)로부터 가져옴

  RecentChanges을(를) /usr/lib/python2.7/dist-packages/trac/wiki/default-pages/RecentChanges(으)로부터 가져옴

  TracLogging을(를) /usr/lib/python2.7/dist-packages/trac/wiki/default-pages/TracLogging(으)로부터 가져옴

  TracSearch을(를) /usr/lib/python2.7/dist-packages/trac/wiki/default-pages/TracSearch(으)로부터 가져옴

  InterTrac을(를) /usr/lib/python2.7/dist-packages/trac/wiki/default-pages/InterTrac(으)로부터 가져옴

  TracCgi을(를) /usr/lib/python2.7/dist-packages/trac/wiki/default-pages/TracCgi(으)로부터 가져옴

  WikiProcessors을(를) /usr/lib/python2.7/dist-packages/trac/wiki/default-pages/WikiProcessors(으)로부터 가져옴

  TracGuide을(를) /usr/lib/python2.7/dist-packages/trac/wiki/default-pages/TracGuide(으)로부터 가져옴

  WikiRestructuredText을(를) /usr/lib/python2.7/dist-packages/trac/wiki/default-pages/WikiRestructuredText(으)로부터 가져옴

  TracFineGrainedPermissions을(를) /usr/lib/python2.7/dist-packages/trac/wiki/default-pages/TracFineGrainedPermissions(으)로부터 가져옴

  InterMapTxt을(를) /usr/lib/python2.7/dist-packages/trac/wiki/default-pages/InterMapTxt(으)로부터 가져옴

  TicketQuery을(를) /usr/lib/python2.7/dist-packages/trac/wiki/default-pages/TicketQuery(으)로부터 가져옴

  TracIni을(를) /usr/lib/python2.7/dist-packages/trac/wiki/default-pages/TracIni(으)로부터 가져옴

  TracInstall을(를) /usr/lib/python2.7/dist-packages/trac/wiki/default-pages/TracInstall(으)로부터 가져옴

  TracStandalone을(를) /usr/lib/python2.7/dist-packages/trac/wiki/default-pages/TracStandalone(으)로부터 가져옴

  WikiHtml을(를) /usr/lib/python2.7/dist-packages/trac/wiki/default-pages/WikiHtml(으)로부터 가져옴

  WikiMacros을(를) /usr/lib/python2.7/dist-packages/trac/wiki/default-pages/WikiMacros(으)로부터 가져옴

  InterWiki을(를) /usr/lib/python2.7/dist-packages/trac/wiki/default-pages/InterWiki(으)로부터 가져옴

  TracModPython을(를) /usr/lib/python2.7/dist-packages/trac/wiki/default-pages/TracModPython(으)로부터 가져옴

  WikiStart을(를) /usr/lib/python2.7/dist-packages/trac/wiki/default-pages/WikiStart(으)로부터 가져옴

  TracTimeline을(를) /usr/lib/python2.7/dist-packages/trac/wiki/default-pages/TracTimeline(으)로부터 가져옴

  SandBox을(를) /usr/lib/python2.7/dist-packages/trac/wiki/default-pages/SandBox(으)로부터 가져옴

  TracBackup을(를) /usr/lib/python2.7/dist-packages/trac/wiki/default-pages/TracBackup(으)로부터 가져옴

  TracEnvironment을(를) /usr/lib/python2.7/dist-packages/trac/wiki/default-pages/TracEnvironment(으)로부터 가져옴

  TracSyntaxColoring을(를) /usr/lib/python2.7/dist-packages/trac/wiki/default-pages/TracSyntaxColoring(으)로부터 가져옴

  TracQuery을(를) /usr/lib/python2.7/dist-packages/trac/wiki/default-pages/TracQuery(으)로부터 가져옴

  TracAdmin을(를) /usr/lib/python2.7/dist-packages/trac/wiki/default-pages/TracAdmin(으)로부터 가져옴

  TracNavigation을(를) /usr/lib/python2.7/dist-packages/trac/wiki/default-pages/TracNavigation(으)로부터 가져옴

  TracWorkflow을(를) /usr/lib/python2.7/dist-packages/trac/wiki/default-pages/TracWorkflow(으)로부터 가져옴

  WikiFormatting을(를) /usr/lib/python2.7/dist-packages/trac/wiki/default-pages/WikiFormatting(으)로부터 가져옴

  TracUnicode을(를) /usr/lib/python2.7/dist-packages/trac/wiki/default-pages/TracUnicode(으)로부터 가져옴

  TracBatchModify을(를) /usr/lib/python2.7/dist-packages/trac/wiki/default-pages/TracBatchModify(으)로부터 가져옴

  TitleIndex을(를) /usr/lib/python2.7/dist-packages/trac/wiki/default-pages/TitleIndex(으)로부터 가져옴

  TracSupport을(를) /usr/lib/python2.7/dist-packages/trac/wiki/default-pages/TracSupport(으)로부터 가져옴

  TracBrowser을(를) /usr/lib/python2.7/dist-packages/trac/wiki/default-pages/TracBrowser(으)로부터 가져옴

  TracAccessibility을(를) /usr/lib/python2.7/dist-packages/trac/wiki/default-pages/TracAccessibility(으)로부터 가져옴

  WikiPageNames을(를) /usr/lib/python2.7/dist-packages/trac/wiki/default-pages/WikiPageNames(으)로부터 가져옴

  TracWiki을(를) /usr/lib/python2.7/dist-packages/trac/wiki/default-pages/TracWiki(으)로부터 가져옴

  CamelCase을(를) /usr/lib/python2.7/dist-packages/trac/wiki/default-pages/CamelCase(으)로부터 가져옴

  WikiRestructuredTextLinks을(를) /usr/lib/python2.7/dist-packages/trac/wiki/default-pages/WikiRestructuredTextLinks(으)로부터 가져옴

  WikiDeletePage을(를) /usr/lib/python2.7/dist-packages/trac/wiki/default-pages/WikiDeletePage(으)로부터 가져옴

  TracTickets을(를) /usr/lib/python2.7/dist-packages/trac/wiki/default-pages/TracTickets(으)로부터 가져옴

  TracPermissions을(를) /usr/lib/python2.7/dist-packages/trac/wiki/default-pages/TracPermissions(으)로부터 가져옴

  TracRepositoryAdmin을(를) /usr/lib/python2.7/dist-packages/trac/wiki/default-pages/TracRepositoryAdmin(으)로부터 가져옴

  TracChangeLog을(를) /usr/lib/python2.7/dist-packages/trac/wiki/default-pages/TracChangeLog(으)로부터 가져옴


---------------------------------------------------------------------

'testprj' 프로젝트 저장소 생성됨.


다음 파일을 편집해서 저장소를 설정할 수 있습니다:


  /var/lib/trac/testprj/conf/trac.ini


새로운 프로젝트 저장소를 테스트하고 싶다면,

다음과 같이 Trac 단독 실행 웹 서버인 `tracd`를 실행하십시오:


  tracd --port 8000 /var/lib/trac/testprj


그리고 웹 브라우저에 http://localhost:8000/testprj을(를) 입력하십시오.

여기에서는 설치한 버전에 대한 Trac 문서를 탐색할 수 있습니다.

(Trac을 실제 웹서버로 동작시키는 방법 등의, 설치에 대한 정보를 포함해서)


최신 버전의 문서는 항상 다음의 프로젝트 웹사이트에서 찾을 수 있습니다:


  http://trac.edgewall.org/


축하합니다!


위의 내용은 initenv 로 Trac 기본 환경을 제작하는 과정을 보여 줍니다. 환경 제작은 SQLite 데이터베이스를 사용하도록 하여 다양한 위키 페이지가 자동으로 작성된 것을 확인할 수 있습니다. 안내 메시지에서는 tracd로 자체 서버로 구동시킬 수 있다고 했지만 저희는 웹서버의 WSGI를 통해서 서비스 할 예정이므로 참고할 것은 Trac 설정에 영향을 미치는 환경 파일 경로를 확인하는 것입니다. 위의 예제에서는 /var/lib/trac/testprj/conf/trac.ini 입니다.


sudo trac-admin /var/lib/trac/testprj permission add admin TRAC_ADMIN


프로젝트를 생성 했으면 위의 스크립트와 같이 생성한 프로젝트에 최소 한명 이상의 관리자(TRAC_ADMIN 권한)를 지정해 줍니다. 다음 단계에서 다루겠지만 인증을 서브버전 인증 파일과 공유할 것이기 때문에 서브버전 사용자 중에서 관리자를 지정하면 됩니다.



■ 아파치 웹 설정


sudo vi /etc/apache2/sites-available/testprj.conf 명령을 사용하여 각 Trac 프로젝트별 웹설정 파일을 작성합니다. (vi 에디터 사용법은 "VI(Vim)에서 자주사용하는 기능 정리"를 참조합니다)


WSGIScriptAlias /trac/testprj /var/www/html/trac/testprj/cgi-bin/trac.wsgi

<Location /trac/testprj>

  AuthType Basic

  AuthName "Trac project"

  AuthUserFile /etc/apache2/dav_svn.passwd

  Require valid-user

</Location>


위의 설정 파일에서 확인할 수 있듯이 인증 파일(AuthUserFile)을 서브버전과 같이 사용하고 있습니다. 사용자 등록 및 비밀번호 변경은 "sudo htpasswd -m /etc/apache2/dav_svn.passwd user1" 와 같이 사용하면 됩니다.


웹 설정 파일 작성이 끝나면 "sudo a2ensite testprj" 명령으로 새 프로젝트 사이트를 적용시키고 "sudo service apache2 reload"로 웹서버가 설정을 다시 로드해서 동작하도록 지시합니다.



모든 준비가 끝나면 웹 브라우저에서 "http://192.168.124.135/trac/testprj/" 와 같이 서버의 주소와 함께 "/trac/프로젝트이름"으로 입력하면 Trac 페이지에 접근할 수 있습니다. 페이지에 접근하면 위의 화면과 같은 인증 요구 화면이 나오는데 등록한 사용자 아이디를 입력합니다.




위의 화면은 인증후의 프로젝트 첫 화면입니다.


■ 프로젝트 부가 설정


프로젝트의 표시 내용이나 로고등은 프로젝트별 환경 파일에서 조정할 수 있습니다. 

sudo vi /var/lib/trac/testprj/conf/trac.ini 에서 아래의 예제 처럼 로고를 지우면 프로젝트 이름을 대신 출력합니다. 물론 로고 이미지를 등록할 수도 있습니다.("Trac UI 변경과 설정 변경하기" 참조)


[header_logo]

alt =

height = -1

link =

src =

width = -1


위의 설정 변경과 함께 아래의 내용을 환경 파일에 추가해 주어야 Trac 프로젝트와 서브버전이 원활하게 연동해서 동작합니다.


[components]

tracopt.versioncontrol.svn.* = enabled



관리자로 로그인하면 위의 그림과 같이 우측 상단에 [관리] 메뉴를 확인할 수 있는데 [관리] 메뉴를 선택하고 좌측의 [저장소]를 선택하여 위의 그림과 같이 앞서 생성한 서브버전 저장소를 등록합니다. "이름" 항목에는 혼란을 방지하기 위해서 프로젝트 이름을 입력합니다.



위의 그림은 저장소를 등록하면 나오는 메시지로 저장소 등록과 함께 두가지 작업을 수행하도록 가이드 하고 있습니다. 


첫번째는  sudo trac-admin /var/lib/trac/testprj repository resync "testprj" 명령으로 서브버전 저장소의 정보를 Trac으로 끌어오도록 지시 합니다. "testprj"로 지정한 것은 위에서 관리>저장소 메뉴에서 저장소 이름으로 등록한 것입니다.



위의 화면은 저장소와 연동후에 상단 소스 둘러보기를 통해서 저장소에 등록되어 있는 내용을 조회하는 화면입니다.


저장소 등록후 작업 두번째는 저장소 쪽의 커밋 훅에 등록하는 작업으로 이 작업을 해 놓으면 사용자가 Trac에 로그인 하지 않고 단순히 코드를 저장소에 커밋만 해도 Trac 해당 내용이 자동으로 리포트 됩니다. Trac의 내용이 풍성해지는 밑 바탕입니다.



서브버전 저장소의 hooks 폴더에 보면 위의 그림과 같이 다양한 스크립트 예제를 확인할 수 있는데 이중에 post-commit.tmpl을 참조해서 post-commit이란 파일을 생성하면 됩니다.


#!/bin/sh

REPOS="$1"

REV="$2"

TXN_NAME="$3"

trac-admin /var/lib/trac/testprj changeset added "testprj" $REV


위의 코드는 sudo vi /var/lib/svn/testprj/hooks/post-commit 로 작성한 예제 파일입니다. 주의할 사항은 파일 작성후에 sudo chown www-data:www-data /var/lib/svn/testprj/hooks/post-commit 명령과 sudo chmod 775 /var/lib/svn/testprj/hooks/post-commit 명령을 수행해서 소유자를 변경하고 실행 권한을 부여해야 합니다.



위의 그림은 사용자가 서브버전에서 내용을 변경하고 커밋하여 Trac 시스템에 자동 리포팅된 결과로 시간이력에 해당 내역을 확인하는 화면입니다. 리비전 번호를 클릭하면 어떤 코드를 변경했는지 자세하게 살펴 볼 수 있습니다.



Trac 및 서브버전 사용법은 아래의 글들을 참조해 보세요.





댓글
댓글쓰기 폼