Gentoo mwlib: Difference between revisions

From 흡혈양파의 인터넷工房
Jump to navigation Jump to search
(내용추가 및 수정)
 
(No difference)

Latest revision as of 12:35, 24 March 2013

MediaWiki에서 사용할 수 있는 Collection Extension에 대한 렌더서버 구축하기

적용범위 및 목적

이 문서는 Mediawiki에서 사용할 수 있는 Collection Extension에 대한 렌더링 서버를 Gentoo Linux 에서 구축하는것을 그 목적으로 한다.


용어정의


기준내용

시스템을 구성하기 위한 준비

일단 mwlib을 사용하기에 앞서 어느경우에 렌더서버를 구축해야하는지 생각해보도록 하자

  1. pediapress서버와 통신이 느리거나 해서 제대로 파일을 생성할 수 없는경우
  2. 내부망에 mediawiki를 설치하는경우 외부의 pediapress 서버와 연결될 수 없는경우


물론 위의 2가지 경우 모두 다 Collection Extension을 사용하는것을 전제로 한다.

Collection Extension을 Mediawiki에 설치하는 방법은 여기를 참고하도록 한다.


본 문서에서는 이미 서버에 Mediawiki정도는 어느 db가 되었든 세팅하고 문제없이 사용할 수 있는 사람들을 대상으로 설명을 진행하려 한다. 당연히 Collection 은 미리 설치되어있어야하며 사용법은 숙지하고 있어야 한다.


미리 읽어두면 좋을 내용들


mwlib의 설치

mwlib은 현재 opensource로서 이 글을 작성하는현재 0.15.3 버전이 나와있다. 물론 이것을 사용할 예정이다.

다만 gentoo에서는 gentoo만의 방법이 있는법. emerge mwlib으로 설치하면 잘 될거같지만.............. 버전이 틀리므로 안된다.

그럼 최신버전을 구해야겠지... 인터넷을 뒤져서 다음의 URL을 찾는다

http://code.google.com/p/gentoo-progress/source/detail?r=3266


아 좋다. 역시 gentoo는 다르다. 삽질거리는 참 풍부하다.. 당연히 위의 파일을 받아서 사용하는 gentoo system의 overlay에 넣는다. 하지만.. manifest가 안된다. 안되는게 정상이다.. 수정할 부분이 있기 때문이다.

# Copyright owners: Gentoo Foundation
#                   Arfrever Frehtes Taifersar Arahesis
# Distributed under the terms of the GNU General Public License v2

EAPI="4"
PYTHON_MULTIPLE_ABIS="1"
PYTHON_RESTRICTED_ABIS="2.5 3.* *-jython *-pypy-*"
SUPPORT_PYTHON_ABIS="1"
RESTRICT_PYTHON_ABIS="3.* *-pypy-* *-jython"
DISTUTILS_SRC_TEST="py.test"
PYTHON_NAMESPACES="mwlib"

inherit distutils eutils

DESCRIPTION="mediawiki parser and utility library"
HOMEPAGE="http://pediapress.com/code/ https://github.com/pediapress/mwlib https://pypi.python.org/pypi/mwlib"
SRC_URI="mirror://pypi/${PN:0:1}/${PN}/${P}.zip"

LICENSE="BSD"
SLOT="0"
KEYWORDS="*"
IUSE="doc latex"

RDEPEND="dev-lang/perl
     >=dev-python/apipkg-1.2
     dev-python/bottle
     dev-python/gevent
     dev-python/imaging
     dev-python/lxml
     =dev-python/odfpy-0.9*
     >=dev-python/py-1.4
     >=dev-python/pyPdf-1.12
     >=dev-python/pyparsing-1.4.11
     dev-python/roman
     >=dev-python/qserve-0.2.7
     dev-python/setuptools
     >=dev-python/simplejson-2.3
     dev-python/sqlite3dbm
     >=dev-python/timelib-0.2
     latex? ( virtual/latex-base )"
DEPEND="${RDEPEND}
    doc? ( dev-python/sphinx )"

S="${WORKDIR}/${P}"


다운받은 ebuild파일의 상단부를 위와같이 싹 바꿔준다. 실제로 바꿀내용이 많은것은 아니니 뭐뭐를 바꿔야 하는지 궁굼한 사람들은 본인이 직접 비교해가면서 바꿔보도록 한다.


이후 해당되는 ebuild의 emerge를 진행하도록 한다. 본인이 이때 사용한 USE flag는 대략 다음과 같다.

USE="-X -ipv6 -gtk -alsa -esd -svg raw openexr lcms fftw fpx hdri jbig lqr q8 i18n dbus udev hal unicode cjk bash-completion cscope ruby vim-pager vim-syntax mmx sse sse2 nptl nptlonly ctype ftp fastcgi spl xml soap cli jpeg jpeg2k python tiff gif png truetype corefonts xetex"


물론 본인의 경우니 적절히 가려가며 쓰도록 한다. 다만.... 그림파일 관련된 부분은 몽조리 들어가주는것이 좋다.

또한! python의 버전은 eselect python set 을 통해서 미리 맞춰놓도록 한다.

주의사항::가능하면 dev-python/imagingdev-python/pygments 정도를 미리 설치하는것이 좋다. 이후 좀 덜 귀찮아진다.
주의사항::귀찮다고 ACCEPT_KEYWORDS 따위를 쓸생각은 하지말자. 사용하는 패키지중에 perl이 걸리면서 perl이 불안정버전으로 올라가는 경우가 생긴다. 이렇게되면 vi도 안뜨는 경우가 발생할 수 있기때문에 심히 곤란한 상황이 벌어진다. accept keyword가 필요한 패키지의 경우 gentoo만의 방법으로 하나하나 따로 설치해주길 바란다.
참고사항::왜인지 이유는 모르겠으나 texlive 2011버전이 r6는 gcc 4.5.3에서 설치가 잘 되지 않는다. texlive-core 2011 r6 이 잘 설치되지 않는 경우에는 r7을 설치하도록 한다.


이렇게 설치가 완료되면 이제 재대로 동작하는지 확인을 해봐야 한다.


mwlib의 동작확인

간단하다. 별 이상 없으면 다음과같은 명령어를 진행해보자.

# mw-render --list-write
odf	OpenDocument Text


윗줄은 명령어와 옵션이고 아랫줄은 출력결과물이다. 이야.. 일단 동작은 하게된거같다.

위에서 odf가 나왔다는건 Mediawiki의 Collection extension을 이용해 pdf포맷으로 내용을 내보내기 할 수 있다는 의미가 된다.


mwlib.rl의 설치

mwlib.rl은 mwlib에서 pdf로 내보내기를 가능하게 해주는 모듈이다.

이 페이지 를 참고해서 mwlib.rl 을 설치하도록 한다.

물론 pip를 사용해서 설치해줘야하며.. 이 문서를 제대로 읽고 왔다면 다른 추가패키지 설치없이 mwlib.rl 만 설치가 진행된다.


mwlib.rl의 설치확인

다음과같은 명령어와 결과를 확인할 수 있으면 된다.

$ mw-render --list-write
odf	OpenDocument Text
rl	PDF documents (using ReportLab)


어.. 뭔가 늘었다. 맨 아랫줄을 확인하면 rl PDF documents (using ReportLab) 이라는 부분이 있다. mwlib.rl 이 제대로 설치되었다. 그부분만 정상적으로 떠있으면 일단 제대로 작동된다고 생각하면 된다.


mwlib.epub의 설치

mwlib.epub은 mwlib에서 epub으로 내보내기를 가능하게 해주는 모듈이다.

이 페이지 를 참고해서 mwlib.epub 을 설치하도록 한다.

Requirement already satisfied (use --upgrade to upgrade): mwlib.epub in /usr/lib64/python2.7/site-packages
Requirement already satisfied (use --upgrade to upgrade): mwlib in /usr/lib64/python2.7/site-packages (from mwlib.epub)
Requirement already satisfied (use --upgrade to upgrade): lxml in /usr/lib64/python2.7/site-packages (from mwlib.epub)
Requirement already satisfied (use --upgrade to upgrade): cssutils in /usr/lib64/python2.7/site-packages (from mwlib.epub)
Requirement already satisfied (use --upgrade to upgrade): ordereddict in /usr/lib64/python2.7/site-packages (from mwlib.epub)
Requirement already satisfied (use --upgrade to upgrade): pyparsing>=1.4.11,<1.6 in /usr/lib64/python2.7/site-packages (from mwlib->mwlib.epub)
Requirement already satisfied (use --upgrade to upgrade): timelib>=0.2 in /usr/lib64/python2.7/site-packages (from mwlib->mwlib.epub)
Requirement already satisfied (use --upgrade to upgrade): bottle>=0.10 in /usr/lib64/python2.7/site-packages (from mwlib->mwlib.epub)
Requirement already satisfied (use --upgrade to upgrade): pyPdf>=1.12 in /usr/lib64/python2.7/site-packages (from mwlib->mwlib.epub)
Requirement already satisfied (use --upgrade to upgrade): apipkg>=1.2 in /usr/lib64/python2.7/site-packages (from mwlib->mwlib.epub)
Requirement already satisfied (use --upgrade to upgrade): qserve>=0.2.7 in /usr/lib64/python2.7/site-packages (from mwlib->mwlib.epub)
Requirement already satisfied (use --upgrade to upgrade): py>=1.4 in /usr/lib64/python2.7/site-packages (from mwlib->mwlib.epub)
Requirement already satisfied (use --upgrade to upgrade): sqlite3dbm in /usr/lib64/python2.7/site-packages (from mwlib->mwlib.epub)
Requirement already satisfied (use --upgrade to upgrade): simplejson>=2.3 in /usr/lib64/python2.7/site-packages (from mwlib->mwlib.epub)
Requirement already satisfied (use --upgrade to upgrade): roman in /usr/lib64/python2.7/site-packages (from mwlib->mwlib.epub)
Requirement already satisfied (use --upgrade to upgrade): gevent in /usr/lib64/python2.7/site-packages (from mwlib->mwlib.epub)
Requirement already satisfied (use --upgrade to upgrade): odfpy>=0.9,<0.10 in /usr/lib64/python2.7/site-packages (from mwlib->mwlib.epub)
Requirement already satisfied (use --upgrade to upgrade): greenlet in /usr/lib64/python2.7/site-packages (from gevent->mwlib->mwlib.epub)
Clear...뭐시기

위의같은 메세지가 나와서 설치 못할줄 알았는데....

사실 이전에 설치하다가 중간에 중단하는바람에 그냥 진행이 안됐던것뿐.

pip에서 진행되던 cache를 날려주면 되는거였다. 방법인즉슨

# rm -rf /usr/lib64/python(파이선버전)/site-packages/mwlib.epub*

이렇게 기존에 설치가 진행되던 흔적을 없애주면 다시 잘 설치가 될 수 있다. (물론 지금은 잘 설치해서 쓰는중... 다크서클님 감사합니다)


mwlib을 서버로 띄우기

mwlib에서 핵심적인 4개 파일은 다음과같다.

nserve.py
mw-qserve
nslave.py
postman

위의 4개파일이 순서대로 뜨면 일단 daemon은 제대로 구동이 되는거라고 보면 된다. 문제는.....


gentoo에서 emerge로 설치했을때 문제가되는 2개의 파일

gentoo에서 mwlib을 서버로 띄우는데 2개정도의 문제가 되는 파일이 있다.

nserve.py, nslave.py 이 두개 파일이 그것이다. 이 파일들은 대단히 엽기적인 동작을 보여주는데..

(물론 nserve.py는 nserve-2.7 파일의 wrapper, nslave.py는 nslave-2.7의 wrapper되시겠다)


아래와 같이 실행하면 미묘한 결과가 나오면서 실행이 되지 않는다...

# /usr/bin/nserve-2.7 
This Python implementation (python2.7) is not supported by the script.


...................응? 이게 뭔소리지?

이유는 잘 모르겠지만 /usr/bin 디렉토리에 있으면 실행이 안된다.

그래서 본인은 따로 디렉토리를 만든후 그 안에 파일을 복사하고 실행한다.. 잘된다...-.-;

대략 다음의 파일들을 복사하면 된다.

/usr/bin/nslave.py
/usr/bin/nslave-2.7
/usr/bin/nserve.py
/usr/bin/nserve.2.7

이렇게 파일을 복사햐면 서버를 띄울 최소한의 준비가 된다.


mwlib 서버를 띄우는 방법

  1. 먼저 위의 파일이 복사된 디렉토리로 이동한다. 그리고 다음과 같은 내용으로 shell script를 하나 만든다.
    #!/bin/sh
    ./nserve.py &
    mw-qserve &
    ./nslave.py --cachedir /var/log/cache/mediawiki/ &
    postman
    
  2. 이후 screen 을 이용해서 별도의 session을 연다.
  3. 해당되는 shell script를 실행한다.
  4. 에러같지 않으며 idle 어쩌고..하는 메세지가 뜨면 daemon 기동 성공

물론 screen 의 사용법은 이 문서에서 다루지 않겠다.


mwlib서버를 죽이는 방법

  1. 이전의 구동용 shell script를 만들 디렉토리로 이동해서 다음과같은 내용으로 shell script를 하나 더 만든다.
    #!/bin/sh
    killall nserve.py
    killall mw-qserve
    killall nslave.py
    
  2. 서버 daemon을 종료하려는경우 사용하면 된다.


mwlib 서버 daemon의 테스트

telnet을 이용해서 아래와같은 방법으로 테스트를 진행하면 된다.

# telnet localhost 8899
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.

물론 telnet이 깔려있어야 테스트가 가능하다. telnet이 깔려있는 다른 windows머신에서 테스트를 해보는 방법도 있겠다.


Mediawiki의 설정변경

Mediawiki의 Collection Extension 은 기본적으로 아무것도 설정하지 않은경우 pediabook 의 서버로 연결되게 된다. 이걸 바꿔야 직접 띄운 render서버로 연결이 되어 사용할 수 있게된다.


Mediawiki의 LocalSettings.php 파일에 다음 부분을 추가한다.

$wgCollectionMWServeURL="http://렌더링서버IP:8899";


이후 Collection Extension 기능을 사용해서 pdf 또는 odf 파일을 생성해보면 된다.

파일이 제대로 생성되면 성공!


rc-script 만들기

다크서클님이 추가하신 문서 부분을 참고


참고사항

  1. 페이지수가 너무 많으면 pdf 파일의 경우생성을 제대로 못한다. 아마도 페이지에 들어있는 이미지의 개수와 상관이 있는듯. 이런경우에는 페이지수를 적게해서 pdf를 여러개 생성해야 한다
  2. 아마도 epub을 쓰려면...... python관련 library도 좀 올려야하는데.. ebuild가 없어서 근성부족으로 포기
  3. pyfribidi는.. 설치하다가 ctrl+c를 눌러서 중지했더니... 설치가 똑바로 안되고있다... 역시 근성부족으로 포기


참고문서