2014년 1월 21일 화요일

ReviewBoard 설치

ReviewBoard 설치

리뷰보드는 협업자들이 함께 소스 코드를 리뷰할 수 있는 웹 기반의 오픈소스 코드 리뷰 도구이다.
오픈소스이면서도 상용에 못지 않은 다양한 기능을 제공하지만, 설치와 설정이 꽤 까다로운 편이다.
크게 나누어보면 리뷰보드의 설치와 사용할 리뷰보드 사이트의 생성, 이렇게 두 가지 단계로 나눌 수 있다. 여기서는 리뷰보드의 설치를 다루고, 리뷰보드 사이트의 생성은 다른 문서에서 다룬다.
본 문서는 http://www.reviewboard.org/docs/manual/1.7/admin/installation/linux/ 를 기준으로 ReviewBoard 1.7.21 설치를 실제 수행한 사례를 정리하였다.

사전 준비 사항

리뷰보드는 웹 기반 애플리케이션으로 HTTPD(웹서버)와 DBMS과 Python이 필요하다. 사전 준비사항에는 언급되어 있지 않으나 설치 과정 중에 형상관리 시스템의 설치도 포함되어 있다.
지원 DBMS
  • MySQL v5.0.31 이상
  • PostgreSQL
  • SQLite v3 (테스트용이며 실무용으로는 권장하지 않는다)
지원 HTTPD
  • Apache + ( modwsgi | fastcgi | modpython )
  • lighttpd + fastcgi
지원 Python
  • Python 2.5 이상
지원 형상관리 시스템
  • CVS
  • Git
  • Mercurial
  • Perforce
  • Subversion
본 문서에서는
  • Linux Mint 16 Petra Cinnamon on 64bit
  • MySQL 5.5.35(MariaDB 5.5 로 하면 서버 재부팅 시 DB 꼬여서 작동 안함)
  • Apache 2.4.7 + mod_wsgi
  • Python 2.7.5
  • Git 1.8.32
이 설치되어 있는 상태를 기준으로 진행한다.

리뷰보드 사전 필요 패키지 설치

Apache 설치

  1. apt-get 으로 설치한다.
  2. apt-get 으로 설치하면 HTTPD가 실행되어 80포트에서 Listen하고, 자동으로 init.d의 시작스크립트로 등록된다. whereis apache2로 찍어보면 파일들이 설치된 위치를 알 수 있다.
  3. mod_wsgi 설치
    sudo apt-get install libapache2-mod-wsgi
    

MySQL 설치

MariaDB를 설치해도 ReviewBoard를 설치하고 사이트를 생성하여 사용할 수 있으나, 재부팅을 하면 MariaDB가 제대로 동작하지 않는 걸 두 개의 서버에서 경험했다.(둘 모두 MariaDB-5.5 & Linux Mint 16의 경우) 결국 MariaDB 는 아직까지는 리뷰보드와 호환되지 않는 것으로 결론 내리고, MySQL을 설치하여 진행한다.
MySQL의 설치도 MySQL의 홈페이지에서 가이드하는 대로 .deb 파일을 내려받아 dpkg -i 를 통해 설치하는 경우 시작을 위한 설정파일과 시작 스크립트 등이 자동으로 생성/등록되지 않아 MySQL의 구동자체가 쉽게 되지 않는다.
따라서 MySQL도 apt-get 을 이용하여 설치한다.
  1. MySQL 설치
    sudo apt-get install mysql-server
    
  2. root 비밀번호 설정
  3. apt로 설치하면 시작 스크립트와 각종 설치파일들을 자동으로 생성하고 서버를 구동한다.
    시작 스크립트는 /etc/init.d/mysql 이 생성되며, 서비스로도 등록되어 있어 sudo service mysql start/stop 으로 시작/정지 가능하다.
  4. ReviewBoard 사이트 생성을 위한 DB 계정 및 데이타베이스 생성
    mysql -u root -p    
    
    mysql> create database rb_test;
    mysql> GRANT ALL PRIVILEGES ON rb_test.* TO rb_test_admin@localhost IDENTIFIED BY ‘admin’;
    mysql> flush priviliges;
    

Git 설치

아래의 명령으로 설치
sudo apt-get install git

Python Setuptools 설치

아래의 명령으로 설치
$ sudo apt-get install python-setuptools

Python Development Headers 설치

아래의 명령으로 설치
$ sudo apt-get install python-dev

memcached 설치

memcached는 기본적으로 key-value 형태의 메모리 캐쉬를 통해 웹 서비스를 효율적으로 제공하는 데몬이다.
Memcached는 Facebook, Twitter, Reddit 및 YouTube와 같은 클라우드 및 웹 서비스 제공 회사에서 사용하는 key-value 메모리 캐시로, 웹 데이터를 소비자에게 서비스하는 데 있어 지연 시간을 줄이고 데이터베이스 및 컴퓨팅 서버에 대한 증설을 줄여주게 한다. Latency를 줄이는 것 외에도 memcached의 확장성 있는 아키텍처 (scale-out) 는 memcached 서버를 간단하게 추가만 하여 처리량을 높일 수 있다. 그러나 코어 수가 4개를 넘으면 성능 저하가 발생하기 때문에 수직 scalability (scale-up) 에는 문제가 있다.

memcached 설치

$ sudo apt-get install memcached

python-memcached 설치

$ sudo easy_install python-memcached

patch 설치

patch는 리뷰보드의 비교 보기(diff viewer)가 동작하는데 필요하다.
$ sudo apt-get install patch

리뷰보드 설치

리뷰보드 설치

리뷰보드는 Djblets, Django-Evolution, Django, flup, paramiko and Python Imaging Library 에 의존관계를 가지고 있으나 아래의 명령으로 모두 설치할 수 있다.
$ sudo easy_install ReviewBoard

Database Bindings 설치

MySQL에서는 두 가지 방법이 있다. 어떤 방식으로든 관계없다.
  • apt-get을 이용하는 방법
    $ sudo apt-get install python-mysqldb
    
  • easy_install을 이용하는 방법
    $ sudo easy_install mysql-python
    
    • MySQL 대신 MariaDB를 설치했을 경우 위 방법은 아래와 같은 에러가 난다.

PyLucene (필수 아님)

검색을 위해 PyLucene을 사용할 수 있다. Java가 설치되어 있다면 아래의 명령으로 간단히 설치할 수 있다. (java 설치 안되어 있는데도 아래의 명령으로 pylucene 설치됨)
$ sudo apt-get install pylucene

개발 도구 설치 (필수 아님)

리뷰보드를 직접 수정하여 개선해보려면 아래의 도구가 필요하다.
  • nose
  • Sphinx
설치는 아래의 명령으로 한 번에 함께 설치할 수 있다.
$ sudo easy_install nose Sphinx

리뷰보드 설정

리뷰보드의 설치가 완료되었으면, 실제 리뷰보드를 사용하기 위해 리뷰보드 사이트를 생성해야 한다.
생성은 다른 문서를 참고한다.

참고

easy_install 로 설치한 패키지의 삭제

easy_install 은 python-setuptools를 통해 제공되는 설치관리자이다. python 관련 패키지들을 easy_install을 통해 쉽게 설치할 수 있다.
하지만 easy_uninstall과 같이 easy_install을 통해 쉽게 설치한 패키지를 쉽게 삭제할 수 있는 방법이 없다.
easy_install을 통해 설치한 패키지를 쉽게 삭제하려면 pip 가 필요하다.

pip

Python 패키지의 설치 및 관리를 담당하는 도구이다.
pip는 아래의 명령으로 설치할 수 있다.
$ sudo apt-get install python-pip
주요 기능은 다음과 같다.
  • 패키지 설치
    $ pip install <<패키지이름>>==1.0
    [...]
    Successfully installed SomePackage
    
  • 패키지 삭제
    $ pip uninstall <<패키지이름>>
    Uninstalling SomePackage:
        /my/env/lib/pythonx.x/site-packages/somepackage
    Proceed (y/n)? y
    Successfully uninstalled SomePackage
    
  • 특정 패키지를 통해 어떤 파일들이 설치되었는지 확인
    $ pip show --files <<패키지명>>
    Name: SomePackage
    Version: 1.0
    Location: /my/env/lib/pythonx.x/site-packages
    Files:
    ../somepackage/__init__.py
    [...]
    
  • 업그레이드가 필요한 패키지 목록 표시
    $ pip list --outdated
    SomePackage (Current: 1.0 Latest: 2.0)

댓글 없음:

댓글 쓰기