2014년 1월 21일 화요일

ReviewBoard 사이트 생성

리뷰보드 사이트 생성

리뷰보드 사전 설치 사항 및 리뷰보드의 설치가 완료되었으면, 실제 웹에서 리뷰보드를 수행할 사이트를 생성해야 한다.
사이트 생성 과정에서 웹 애플리케이션 파일들, 업로드/다운로드할 위치 설정, 데이타베이스 테이블 생성 등 웹 서비스를 위한 설정을 수행한다.

사이트 생성 명령 실행

sudo mkdir /var/www/

sudo rb-site install /var/www/rb-test.apexsoft.co.kr

필요 모듈 확인

PostgreSQL 관련 안내가 나오나, MySQL이 설치되어 있으므로 무시하고 Next

도메인 네임

리뷰보드 접속을 위한 URL을 입력한다. 서버의 경우 적절한 도메인을 http:// 와 포트 번호 없이 입력하고, 로컬에 테스트용으로 설치하는 경우 localhost 로 입력한다.

URL path

앞에서 정한 서버 도메인 다음에 이 사이트에 접속하기 위한 URL path 를 지정한다.

사이트 설치 파일들이 저장될 위치

기본값인 static 그대로 둔다.

리뷰보드를 통해 업로드한 파일이 저장될 위치

기본값인 media 그대로 둔다.

사용할 DBMS 선택

mysql 선택

사용할 데이타베이스 이름

리뷰보드 사전 설치 사항 중 MySQL 설치 과정 마지막에 리뷰보드를 위해 생성했던 데이타베이스 이름을 입력한다.

DBMS 주소

기본값인 localhost 그대로 둔다.

DB 사용자 계정 입력

리뷰보드 사전 설치 사항 중 MySQL(또는 MariaDB) 설치 과정 마지막에 리뷰보드를 위해 생성했던 데이타베이스에 대한 전체 권한을 가진 계정 정보를 입력한다.

캐쉬 방식 지정

기본값인 memcached 그대로 둔다.

memcached 위치 및 포트 지정

기본값인 localhost:11211 그대로 둔다.

웹 서버 지정

기본값인 apache 그대로 둔다.

파이썬 로더 모듈 지정

기본값인 wsgi 그대로 둔다.

사이트 관리자 계정 생성

사용자명, 비밀번호, 메일주소 입력

사이트 생성 작업 진행

아래와 같이 사이트 생성이 진행된다

사이트 생성 작업 완료

아래와 같이 사이트 생성이 완료된다.

MySQL UTF-8 설정

MySQL의 Character Set 확인

mysql -u root -p
로 DBMS에 접속 후
mysql> status;
를 치면 아래와 같이 character set 확인 가능
최초 설치 직후에는 위와 같이 Server와 Db가 latin1으로 설정되어 있다.

MySQL의 한글 설정

기본 character set 은 utf8이 아니라 latin으로 되어있으므로 /etc/mysql/my.cnf 파일을 열어 [mysqld] 란에 아래의 내용을 추가하고
character-set-server=utf8
collation-server=utf8_general_ci
MySQL을 재시작 한다.
sudo service mysql restart
mysql 클라이언트로 접속 하여
mysql> status;
를 실행하면 Server/Db/Client/Conn. 의 characterset이 모두 utf8로 되어 있는 것을 확인할 수 있다.

리뷰보드 용 데이타베이스의 한글 확인

mysql 클라이언트에서 아래의 명령을 실행한다.
mysql> use <database이름>;
mysql> status;
Db가 latin1으로 되어있으므로 한글 설정을 해준다.

리뷰보드 용 데이타베이스의 한글 설정

mysql 클라이언트에서 아래의 명령을 실행한다.
mysql> alter database <database이름> default character set = utf8
status를 치면 Server/Db/Client/Conn. 의 characterset이 모두 utf8로 되어 있는 것을 확인할 수 있다.

사이트 접속 설정

사이트 생성이 완료되면 웹 서비스를 위해 폴더 권한 설정 및 웹 서버 설정을 해야한다.

권한 설정

sudo chown -R www-data /var/www/rb-test.apexsoft.co.kr/htdocs/media/uploaded
sudo chown -R www-data /var/www/rb-test.apexsoft.co.kr/data

웹 서버 설정

rb-site 는 /var/www/rb-test.apexsoft.co.kr/conf/ 에 샘플 설정 파일을 제공한다. 대부분의 경우 이 샘플 설정으로도 잘 동작하지만, 현재 웹 서버 설정에 따라 수정이 필요할 수도 있다.
설정 파일은 사용하는 웹 서버 종류와 파이썬 모듈 로더의 종류에 따라 여러가지로 제공된다.
여기서는 아파치 웹 서버와 wsgi 를 사용했으므로 conf/apache-wsgi.conf 파일을 기준으로 설명한다.
아래의 설정이 끝난 후 아파치를 재시작하면 사이트에 접근할 수 있다.

아파치 설정 디렉토리에 sites-available 디렉토리가 있는 경우

아파치 설정 폴더 아래에 sites-available 폴더가 있다면(ex: /etc/apache2/sites-available), apache-wsgi.conf 파일의 이름을 사이트명으로 바꿔주고, sites-available 디렉토리에서 그 conf 파일에 심볼릭 링크를 생성해야 한다.
아래는 위에서 설명한 경우에 대한 예이다.
$ cd /etc/apache2/sites-available
$ sudo cp /var/www/rb-test.apexsoft.co.kr/conf/apache-wsgi.conf rb-test.apexsoft.co.kr.conf
$ cd ../sites-enabled
$ sudo ln -s ../sites-available/rb-test.apexsoft.co.kr.conf .
여기까지 하고 브라우저에서 확인해도 404 나온다.
아래 명령으로 아파치를 재시작 한다.
apachectl -k graceful
혹시 위 명령 수행 시 아래와 같은 에러메시지가 나는 경우
아래의 명령을 수행하여 wsgi 모듈을 재설치 한다.
sudo apt-get purge libapache2-mod-wsgi
sudo apt-get install libapache2-mod-wsgi
libapache2-mod-wsgi 설치 시 아파치를 재시작하므로 별도로 재시작 할 필요는 없다.

sites-available 디렉토리가 없는 경우

이 경우에는 설정 파일(apache-wsgi.conf)을 아파치 전체 설정 파일(보통 /etc/apache2/apache2.conf 또는 /etc/httpd/httpd.conf)에 Include 구문을 사용하여 포함시켜야 한다.
apache2.conf 의 제일 마지막행에 아래 내용 추가
Include /var/www/rb-test.apexsoft.co.kr/conf/reviews.example.com.conf
아파치를 재시작 한다.
apachectl -k graceful
apache 재시작 오류 시 아파치 설정 디렉토리에 sites-available 디렉토리가 있는 경우의 마지막 부분을 참고하여 wsgi 모듈을 재설치 한다.

리뷰보드 사이트 접속

http://localhost/rb-test 로 접속하면 아래와 같은 화면이 로딩된다.
화면의 안내에 따라 아래 명령을 실행한다.
sudo chown -R www-data "/var/www/rb-test.apexsoft.co.kr/htdocs/media/ext"
접속화면을 새로고침 하면 아래와 같이 리뷰보드 로그인 창이 뜬다.
로그인 하면 아래와 같은 창이 뜬다.

참고

리뷰보드 사이트 생성은 위와 같이 GUI 버전 외에 터미널로도 생성할 수 있다.
아래 그림들을 참조한다. 생성 후의 특정 디렉토리 권한 변경 등은 GUI 버전 설치 설명을 따른다.

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)

2014년 1월 17일 금요일

Linux Mint 프로그램 단축키 설정 - 스크린샷 프로그램을 예로

스크린캡춰를 자주 사용하는 편이라, 윈도우에서는 알캡춰를 윈도우키+C로 아주 편하게 썼는데, 리눅스에서도 그렇게 편하게 쓰고 싶다.

리눅스에도 스크린샷 이라는 캡춰 프로그램이 있다.
단축키만 등록해주면된다.


0. 메뉴 > 시스템 설정 > 키보드 를 실행한다.



1. 'Keyboard shortcuts'탭을 선택하여 화면 중간 아래 부분의 'Add Custom Shortcut'을 클릭하면 프로그램 단축키를 설정할 수 있는 작은 팝업 창이 뜬다.


Name 란에는 원하는 이름을 넣으면 된다. 내 경우 스크린샷이므로 ScreenShot.
바로 아래에 Command 란에는 단축키로 실행할 프로그램의 실제 경로를 적어준다.
내 경우에는 /usr/bin/gnome-screenshot --interactive 를 입력해줬다.


2. 단축키를 지정한다. 이 과정은 다소 어색하고 직관적이지가 않은데,
아래 그림과 같이 Keyboard bindings 아래의 unassigned를 클릭한다.



3. 클릭하면 'unassigned'가 '새 단축키..'라고 바뀌며,
그 상태에서 '윈도우+c' 를 누르면, 아래와 같이 '새 단축키..' 가 'Super-c'로 바뀐다.



4. 닫기를 클릭하고 '윈도우+c' 를 누르면 스크린샷이 실행된다!  끝.

2014년 1월 15일 수요일

Uninstall MariaDB or MySQL completely

Initially, I just wanted to use MariaDB instead of MySQL with ReviewBoard.
But actually ReviewBoard 1.7.21 doesn't support MariaDB.(see http://www.reviewboard.org/docs/manual/1.7/admin/installation/linux/#before-you-begin)

MariaDB says it can replace MySQL in most cases, Actually configurations or command of MariaDB is nearly the same, even 'mysqld' is used in MariaDB!

So I just tested.

Well, I don't know the exact reason, but as a result, they don't get together.



So I decided to remove MariaDB and installed MySQL, and wished everything went OK.
But.. MySQL didn't work.
'mysqld_safe' exits with error, because it can't write the pid file into /var/run/mysqld.
I fixed the owner, group and so on, but still 'mysqld_safe' didn't work.
And I reinstalled the mysql-client, mysql-server through 'sudo apt-get install mysql-client' and 'sudo apt-get install mysql-server', but still 'mysqld_safe' didn't work.

So I wanted to 'clear' mysql stuff, so as to say, uninstall MariaDB and MySQL completely, and I did it finally!
Here is the deal.

1. Verify any mysql related packages.
sudo dpkg -l | grep mysql

2. Purge all the packages by continuously doing,
sudo dpkg -P <mysql-related-packages>

3. Do 2 until 'sudo dpkg -l | grep mysql' shows nothing

4. Remove MySQL configs
sudo rm -rf /etc/mysql

5. Remove daemon directory
sudo rm -rf /var/run/mysqld

6. Remove MySQL(MariaDB uses this directory, too) databases. Of course the backup of databases is needed before remove it.
sudo rm -rf /var/lib/mysql

7. Remove MySQL related logs
sudo rm -rf /var/log/mysql*

Now, you can start the MySQL after reinstalling it.





2014년 1월 1일 수요일

ibus 한영키 전환 문제 해결 - linux mint 16 petra (아마도 ubuntu-13.10도 이걸로 해결될 듯)

새해를 맞이하여 사용 중인 리눅스 민트를 15 Olivia 에서 16 Petra로 업그레이드 하였다.

잘 느껴지진 않지만 뭔가 좋아졌겠지..
그러나 확실하게 나빠진 것이 있으니 바로 한영키 전환이다.


문제 


전엔 그냥 한영키를 누르면 한영 전환이 되었는데(Shift+Space로도 전환이 되었다),
업그레이드 하고 나니 기본값이 '윈도우키+Space'로 바뀌었고,
ibus 설정에서 한영키(키코드 : Hangul)로 설정을 해줘도 전환이 되지 않는다.

게다가, 화면 잠금 풀기 등 암호입력을 해야할 경우와 메뉴에서 검색을 할 경우에는 Shift+Space도 동작하지 않는다!


원인


linux Mint 15 Olivia에서는 이런 문제가 없었다. Olivia에서 사용된 ibus의 버전은 1.4.2였다.
linux Mint 16 Petra(또는 Ubuntu 13.10)에 포함되어 있는 ibus는 1.5.3이다.


목표


단순하게 한영키만 눌러서 한영 전환!



해결 방안

처음에는 ibus를 1.4.2로 다운그레이드 하는 걸 해결 방안으로 했었는데,
가장 간단한 해결 방법은 입력기로 ibus 대신 nabi를 사용하는 것이다. ㅋㅋ
역시나 http://bagjunggyu.blogspot.kr/ 님을 통해 알게됨.

0. 처음에 메뉴 > 시스템 설정 > Languages를 실행하면 언어팩 뭐 설치하겠다고 안내한 후, 설치하면 아래와 같은 화면이 나온다. 키보드 입력기 란이 '기본값'으로 되어 있다.


1. Petra를 새로 설치한 경우
키보드 입력기를 클릭해봐도 선택할 수 있는 입력기가 없다.
아래 3번으로 가서 nabi를 설치한다.

2. Petra를 업그레이드로 설치한 경우
키보드 입력기를 클릭하면  ibus 입력기에 대한 것이 나올 것이다.
먼저 ibus 부터 삭제한다.

sudo apt-get remove ibus-hangul
sudo apt-get remove ibus

3. nabi를 설치한다.


4. 메뉴 > 시스템 설정 > Languages 를 실행하고, 키보드 입력기를 클릭하여 'Hangul'을 선택한다. '메뉴와 창에 사용할 언어'를 '한국어'를 선택하고 바로 아래의 '시스템 전체에 적용'을 클릭하여 적용한다.


5. 지역 형식 탭에서도 한국어 선택, 시스템 전체에 적용을 클릭한다.


6. 재부팅 한다.
솔직히 재부팅 안하고 바로 입력기를 적용하는 방법이 있을 듯 한데, 모른다. 나중에 찾게 되면 추가 ^^

7. 재부팅하고 로그인하면 아래와 같이 우하단에 나비 모양 아이콘이 생기고, 한/영키만 눌러 쉽게 전환할 수 있다.



아래 내용은 ibus를 다운그레이드하는 무식한 방법인데 전혀 효율적이지 않으므로 무시.  끝.

해결방법은 ibus-1.5.3을 삭제하고 ibus-1.4.2로 복귀하는 것이다.
또한 ibus가 의존관계를 가지고 있는 python-ibus도 함께 다운그레이드 해야한다.

다운그레이드를 위해서는 해당 패키지를 지우고 특정 버전을 지정하여 설치하면 된다.

한가지 덧붙이면 ibus와 ibus-hangul 만 지우고 다시 설치하면 별도의 설정없이도 GEdit,Terminal, Libre Office 등 대부분의 프로그램에서 기존처럼 한영키로 한영 전환이 되는데, 유독 Chrome과 Mozilla는 어떤 방법으로도 한영 전환이 되지 않는다.
ibus-gtk, ibus-gtk3을 다시 설치하면 Chrome, Mozilla도 모두 한영전환이 된다.

지금껏 해결하느라 낑낑댄게 억울에서 풀어놓은 썰은 여기까지고, 결론이다.
터미널에서 아래의 명령어를 수행하면 된다.

sudo apt-get remove ibus-hangul
sudo apt-get remove ibus-gtk3
sudo apt-get remove ibus-gtk
sudo apt-get remove ibus
sudo apt-get remove python-ibus

sudo apt-get install python-ibus=1.4.2-0ubuntu2

sudo apt-get install ibus=1.4.2-0ubuntu2
sudo apt-get install ibus-gtk=1.4.2-0ubuntu2
sudo apt-get install ibus-gtk3=1.4.2-0ubuntu2
sudo apt-get install ibus-hangul=1.4.2-1

참고로 https://code.google.com/p/ibus/ 여기에서 특정 버전의 소스를 받아 설치하는 방법도 있겠으나, 해보니 ./configure 에서 에러가 발생했다. 그래서 소스 설치는 포기.  끝.