no talloc stackframe at ../source3/param/loadparm.c:4864, leaking memory

우분투 머신 콘솔에서 갑자기 위와 같은 메시지가 나오기 시작했다. 막 14.04로 업그레이드를 끝낸 직후라서 업그레이드가 잘못되었는지 알았는데, libpam-smbpass에 문제가 있는 것 같다.

현재까지 제안된 임시조치는

  1. libpam-smbpass 패키지를 삭제하거나
  2. sudo pam-auth-update 를 실행한 뒤에, SMB password synchronization 체크를 끄는 방법이 있다.

이렇게 하면, 일단 버그가 수정될 때까지는 저런 메시지가 나오지 않도록 할 수 있다..


이전 글(Ubuntu에 Solr 최신버전 설치)에서 설치까지만 다루고, 실제 사용하기 위한 설정들을 두번째 글에 다룰 예정이었는데, 생각보다 포스팅이 늦어졌다. 하지만, 아직도 한글 분석기 Arirang Analyzer 1.1.2 이후로 개선 소식이 없어, Solr 4.7.0 까지 나온 현재에도 4.5.X 까지만 사용할 수 있는 문제는 여전하기 때문에 아직 유용할 것이라 생각해서 정리해본다.

이전 글에서는 Solr 4.5.0만 언급했지만, 4.5.1에서도 Arirang Analyzer는 잘 동작하므로 한글 분석기를 사용하기 위해서는 Solr 4.5.1을 설치하면 된다. 과거 버전이라 Solr 공식 웹사이트에서는 배포하지 않지만, 아파치 아카이브 사이트에서 다운로드 받을 수 있으며 설치 과정은 이전 글에서 소개한 것과 동일하다. (아카이브 사이트라서 그런지 조금 느리다)

1. 코어 설정

이전 글대로 설치했다면, /usr/local/share/solr 디렉토리는 아래와 같이 구성되어 있을 것이다.

$ cd /usr/local/share/solr
$ ls -F
bin/  collection1/  README.txt  solr.xml  zoo.cfg

저기에서 collection1 이라고 되어있는 것이 코어이다. 여러개의 코어를 설정할 수 있는데, collection1을 복사하거나 이름을 바꿔서 사용할 코어를 만들자. 여기서는 'collection2'라고 이름을 바꿔서 진행해본다.

$ sudo mv collection1 collection2

설치할때 소유자 변환을 해두었기때문에 root로 작업 중이 아니라면, 항상 sudo를 붙여서 작업해야하는 것에 유의한다.

이제 collection2 디렉토리를 보면 여러개의 파일이 있는데, 당장 사용하기 위해서 수정해야할 파일은 딱 다음 세 개이다.

  • core.properties
  • conf/solrconfig.xml
  • conf/schema.xml

먼저 core.properties 파일을 보면 딱 한 줄이 있는데, 내용을 보면 뭘 고쳐야할 지 바로 감이 올 것이다. 다음과 같이 새로 만든 코어 이름을 적어준다.

name=collection2

다음으로 conf/schema.xml 파일은 인덱스에 저장할 스키마 설정이 있다. 주석을 보면 어떻게 작성해야하는지 감이 올텐데, 중요한 것은 field와 fieldType 이다. <fields> 안에 있는 <field> 태그들이 인덱스에 저장할 스키마들인데, 주석을 보면서 필요한 것들을 설정하면 된다. <types> 안에 있는 <fieldType>은 어떤 field가 있을 수 있는지 형식을 지정할 수 있는데, 한글 검색을 위해서 추가한 Arirang Analyzer를 사용하기 위해서 새로운 형식을 만들 필요가 있다.

<types> 안의 적당한 곳에 아래 내용을 넣으면, text_ko 라는 형식 사용할 수 있다.

    <!-- Korean (Arirang Analyzer 1.1.2) -->
    <fieldType name="text_ko" class="solr.TextField" positionIncrementGap="100">
        <analyzer type="index">
            <tokenizer class="org.apache.lucene.analysis.ko.KoreanTokenizerFactory"/>
            <filter class="org.apache.lucene.analysis.ko.KoreanFilterFactory" hasOrigin="false" hasCNoun="true"  bigrammable="true"/>
            <filter class="solr.LowerCaseFilterFactory"/>
            <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" />
            <filter class="solr.EnglishPossessiveFilterFactory"/>
            <filter class="solr.KeywordMarkerFilterFactory" protected="protwords.txt"/>
            <filter class="solr.PorterStemFilterFactory"/>
        </analyzer>
        <analyzer type="query">
            <tokenizer class="org.apache.lucene.analysis.ko.KoreanTokenizerFactory"/>
            <filter class="org.apache.lucene.analysis.ko.KoreanFilterFactory" hasOrigin="false" hasCNoun="false"  bigrammable="false" queryMode="true"/>
            <filter class="solr.LowerCaseFilterFactory"/>
            <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" />
            <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
            <filter class="solr.EnglishPossessiveFilterFactory"/>
            <filter class="solr.KeywordMarkerFilterFactory" protected="protwords.txt"/>
            <filter class="solr.PorterStemFilterFactory"/>
        </analyzer>
    </fieldType>

conf/solrconfig.xml 파일에는 코어 설정들이 있는데, 바로 사용해보기 위해서는 라이브러리 경로 설정들을 바꿔줘야한다. 나머지 설정들은 천천히 주석을 살펴보고 고치도록 한다. 당장 수정해야할 경로 설정들은 아래와 같다.

  <lib dir="../../../contrib/extraction/lib" regex=".*\.jar" />
  <lib dir="../../../dist/" regex="solr-cell-\d.*\.jar" />

  <lib dir="../../../contrib/clustering/lib/" regex=".*\.jar" />
  <lib dir="../../../dist/" regex="solr-clustering-\d.*\.jar" />

  <lib dir="../../../contrib/langid/lib/" regex=".*\.jar" />
  <lib dir="../../../dist/" regex="solr-langid-\d.*\.jar" />

  <lib dir="../../../contrib/velocity/lib" regex=".*\.jar" />
  <lib dir="../../../dist/" regex="solr-velocity-\d.*\.jar" />

위의 설정에서 경로들을 아래와 같이 고친다.

  <lib dir="../contrib/extraction/lib" regex=".*\.jar" />
  <lib dir="../dist/" regex="solr-cell-\d.*\.jar" />

  <lib dir="../contrib/clustering/lib/" regex=".*\.jar" />
  <lib dir="../dist/" regex="solr-clustering-\d.*\.jar" />

  <lib dir="../contrib/langid/lib/" regex=".*\.jar" />
  <lib dir="../dist/" regex="solr-langid-\d.*\.jar" />

  <lib dir="../contrib/velocity/lib" regex=".*\.jar" />
  <lib dir="../dist/" regex="solr-velocity-\d.*\.jar" />

여기서는 다른 설정이 필요없지만, conf/schema.xml 파일에서 스키마가 수정되면, conf/solrconfing.xml 파일을 수정해야할 수도 있다.

2. 라이브러리 복사

conf/solrconfig.xml 에서 변경한 라이브러리 경로대로 라이브러리를 복사하자. 이전 글에서 했듯이 solr를 다운로드 받아서 압축을 푼 디렉토리에서 복사한다.

$ cd solr-4.X.X (solr 압축 푼 디렉토리)
$ sudo cp -a contrib /usr/local/share/solr/
$ sudo cp -a dist /usr/local/share/solr/

3. 인덱싱

설정이 끝났으니 이제 인덱싱을 해볼 순서이다. 그 전에 먼저 설정들이 바뀌었으니 jetty 재시작부터 하자.

$ sudo service jetty restart

여기에서는 간단히 동작하는 것만 확인하기위해서 Solr 튜토리얼에 있는 방식으로 example 코드와 데이터를 사용해본다. 아까 사용한 solr 압축 푼 디렉토리 밑에 example/exampledocs 라는 디렉토리가 있을텐데 거기로 이동하면, 간단히 인덱싱을 해볼 수 있다.

$ cd solr-4.X.X (solr 압축 푼 디렉토리)
$ cd example/exampledocs
$ java -Durl=http://localhost:8080/solr/collection2/update  -jar post.jar solr.xml

4. 확인

인덱싱이 잘 되었는지는 다음 URL로 접근해서 확인할 수 있다.

http://localhost:8080/solr/collection2/select?q=solr

또는, 다음 URL로 확인해볼 수 있다.

http://localhost:8080/solr/collection2/browse

여기까지 했으면 기본적인 설치/설정은 해본 것이지만, 사실 한글 분석기는 사용하지 않았고, 실제로 사용해보려면 사용할 데이터에 알맞는 스키마를 설정해야한다. 이것은 (기약은 없지만) 다음 글에서 다뤄보겠다.

우분투에서 Solr를 사용해보려고 했더니 12.04 LTS 버전에 있는 패키지는 1.4.0 이었다. 우분투 최신버전이라고 해도 3.6.2라서 현재 Solr 최신버전인 4.6.0과는 차이가 있었다. 하다못해 마이너 버전 차이정도는 좀 눈감아주겠는데, 이건 좀 심하다 싶다.

어쨌든 저런 이유로 최신버전을 직접 설치했고, 그 과정을 한번 정리해보았다.

  1. Solr 최신 버전(현재 4.6.0) 다운로드
  2. 패키지 준비
  3. jetty 설치/설정
  4. 서비스 시작

1. Solr 최신 버전 다운로드

Solr 공식 페이지에서 다운로드 한다. solr-4.6.0.tgz 파일을 받으면된다.

2. 패키지 준비

배포본에 있는 war파일을 기본으로 필요한 것들을 조금 추가한다.

  1. solr-4.6.0.tgz 압축 해제

    cd solr-4.6.0/dist/ mkdir temp cp solr-4.6.0.war temp/ cd temp jar xf solr-4.6.0.war
    rm solr-4.6.0.war


  2. 필요한 파일 추가
    필요한 라이브러리들을 위에서 war 파일 압축을 푼 WEB-INF/lib/ 에 추가한다.
    내가 추가한 것은 한글분석기인 Arirang Analyzer(현재 루씬 한글분석기 커뮤니티에서 받을 수 있음. 네이버 카페 가입 필요)와 Solr를 동작시기키위해서 필요한 것들이다.
    (위에 이어서)
    cp ../../example/lib/ext/* ./WEB-INF/lib/ cp arirang.jar ./WEB-INF/lib/
  3. 재압축

    jar cf ../solr.war *

3. jetty 설치/설정

  1. 설치

    (계속 이어서)
    sudo apt-get install jetty
    cd ../.. (solr-4.6.0으로 이동)
    sudo cp -a example/solr /usr/local/share/solr
    sudo chown -R jetty:jetty /usr/local/share/solr
    sudo cp dist/solr.war /var/lib/jetty/webapps/

  2. /etc/default/jetty 편집
    NO_START=0
    JETTY_HOST=0.0.0.0
    JAVA_OPTIONS="-Dsolr.solr.home=/usr/local/share/solr -Dsolr.clustering.enabled=false $JAVA_OPTIONS"
    

4. 서비스 시작

sudo service jetty start

http://localhost:8080/solr/ 로 접속하면 다음과 같은 Solr 페이지를 확인할 수 있다.

5. 참고

현재(2013/11/27), 루씬 한글분석기 커뮤니티에서 배포하고 있는 Solr 4.X용 Arirang Analyzer 1.1.2는 Solr 4.6에서는 에러가 발생하는 것으로 보인다. 따라서, 새 버전의 Arirang Analyzer이 나오기 전에는 4.5를 사용해야할 것 같다.


  1. 2014.01.08 20:07

    비밀댓글입니다

필요에 의해서 한국어 형태소 분석기를 찾아보기도 했고, MeCab을 이용한 한국어 형태소 분석과 폐쇄적인 21세기 세종 계획 성과물이란 글을 보면서 쓸만한 오픈소스 형태소 분석기가 없다는 것에 실망한 적이 있었다. 내가 전문가는 아니라서 잘 모르는 것일 수도 있겠지만, 영어는 물론이고 일본어도 연구 결과들이 공유되고 발전해가는 것이 보이는데, 왜 한국어는 없는지 답답했다. 그래서 "검색에서 쓸만한 오픈소스 한국어 형태소 분석기를 만들자!"라는 생각으로 시작했다는 전한닢 프로젝트를 보고 상당히 반가운 기분이 들었다.

그래서 한번 사용을 위해서 테스트를 해보기로 했다. 은전한닢 프로젝트는 일본어 형태소 분석기인 mecab에 한국어 형태소 사전을 추가한 형태로, 이를 사용하기 위한 Lucene/Solr용 tokenizer를 제공하고 있다. 그래서 사용해보려면 우선 mecab 설치가 필요하다.

테스트는 ubuntu 12.04 에서 진행했다.


mecab 설치

mecab은 ubuntu 저장소에 들어가있기때문에 쉽게 설치가 가능하다. 신경쓸 것은 컴파일이 필요하기 때문에 libmecab-dev 패키지도 별도로 설치가 필요하다는 것 정도이다.

$ sudo apt-get install mecab libmecab-dev


mecab-ko-dic 설치

mecab-ko-dic이 은전한닢 프로젝트의 핵심 결과물이라고 할 수 있는데, bitbucket 저장소에서 배포중이고, 사실 설치방법도 여기에 한국어로 친절하게 소개되어있기도 하다. 저장소의 다운로드 페이지에서 mecab-ko-dic 최신 버전을 다운로드 받아서 다음과 같이 컴파일하자. 이 글을 쓰는 시점에서 최신버전은 1.1.3 버전이다.

$ tar xzf mecab-ko-dic-1.1.3-20130226.tar.gz
$ cd mecab-ko-dic-1.1.3-20130226/
$ ./configure
$ make

컴파일이 잘 되었는지 테스트해보려면 다음과 같이 확인할 수 있다.

$ mecab -d .(엔터)
잘 설치되었는지 확인하려면 이렇게 확인할 수 있다.(엔터)
잘    MAG,T,잘,*,*,*,*
설치    NN,F,설치,*,*,*,*
되    XSV,F,되,*,*,*,*
었    EP,T,었,*,*,*,았/EP
는지    EC,F,는지,*,*,*,*
확인    NN,T,확인,*,*,*,*
하    XSV,F,하,*,*,*,*
려면    EC,T,려면,*,*,*,*
이렇    VA,T,이렇,*,*,*,*
게    EC,F,게,*,*,*,*
확인    NN,T,확인,*,*,*,*
할    XSV+ETM,T,할,Inflect,XSV,ETM,하/XSV+ㄹ/ETM
수    NNB,F,수,*,*,*,*
있    VV,T,있,*,*,*,*
다    EF,F,다,*,*,*,*
.    SF,*,*,*,*,*,*
EOS
(Ctrl + d)
$

이렇게 표시되면 잘 동작하는 것이다. 설치를 마무리하려면 다음과 같이 입력한다.

$ sudo make install

이렇게 하면 "/usr/lib/mecab/dic/mecab-ko-dic"에 사전 파일이 저장되고 설치가 끝난다고 했는데, 나의 경우에는 다음과 같은 오류가 발생했다.

test -z "/usr/lib/mecab/dic/mecab-ko-dic" || /bin/mkdir -p "/usr/lib/mecab/dic/mecab-ko-dic"
 /usr/bin/install -c -m 644 ./model.bin matrix.bin char.bin sys.dic unk.dic left-id.def right-id.def rewrite.def pos-id.def dicrc '/usr/lib/mecab/dic/mecab-ko-dic'
/usr/bin/install: cannot stat `./model.bin': No such file or directory
make[1]: *** [install-dicDATA] Error 1
make[1]: Leaving directory
make: *** [install-am] Error 2

model.bin 파일이 없어서 나는 오류인데, 그냥 무시하고 진행해도 별 문제없이 동작하는 것으로 보인다. mecab 설정파일(/etc/mecabrc)을 다음과 같이 수정해주면 설치가 끝난다.

6c6
< dicdir = /var/lib/mecab/dic/debian
---
> dicrc = /usr/lib/mecab/dic/mecab-ko-dic

root 권한이 없는 경우에는 사전파일들을 적당한 디렉토리에 넣어두고, 홈디렉토리에 .mecabrc 파일을 만들어서 동일한 설정을 해줘도 된다.

테스트 해보면 다음과 같다.

$ mecab(엔터)
설치가 다 끝났는지 확인하려면 이렇게 해보자.(엔터)
설치    NN,F,설치,*,*,*,*
가    JKS,F,가,*,*,*,*
다    MAG,F,다,*,*,*,*
끝났    VV+EP,T,끝났,Inflect,VV,EP,끝나/VV+았/EP
는지    EC,F,는지,*,*,*,*
확인    NN,T,확인,*,*,*,*
하    XSV,F,하,*,*,*,*
려면    EC,T,려면,*,*,*,*
이렇    VA,T,이렇,*,*,*,*
게    EC,F,게,*,*,*,*
해    VX+EC,F,해,Inflect,VX,EC,하/VX+ㅕ/EC
보    VX,F,보,*,*,*,*
자    EF,F,자,*,*,*,*
.    SF,*,*,*,*,*,*
EOS
(Ctrl + d)
$


우분투를 소개하는 만화가 나왔다. 제목은 Ubuntu 가 아니라 'Ubunchu!'. ((아마, 우분투를 일본식으로 읽은게 아닐까 생각하는데, 만화 제목이니 그냥 '우분츄'라고 읽어주는게 맞겠지?)) 현재 1화만 나와있는 상태인데, Creative Commons BY-NC로 공개된 덕택에 한국어를 포함한 여러 언어로 번역되어 있다.

1화 내용은 '리눅스는 어렵다'는 고정관념에 대한 내용인데, 확실히 글보다는 만화가 전달력이 더 강하다는 생각이 든다. 보고싶은 사람은 여기에서 원본인 일본어를 비롯해서 한국어, 영어를 포함한 여러 언어로 번역된 번역본을 구할 수 있다.

리눅스에서 DVD 보기는 참 간단하다. 영상만 보려면 별다른 설정없이 xine이나 mplayer 설치후 그냥 볼수 있지만, 타이틀 메뉴를 이용하기 위해서는 약간의 수고가 필요하다. xine이 설치되어 있다면, w32codecs 를 더 설치하면 DVD 타이틀 메뉴를 이용할 수 있다. 이것은 xine 기반의 Kaffeine이나 totem-xine 에서도 동일하다.

w32codecs 설치는 다음 두줄로 끝~!

$ wget -c http://www.debian-multimedia.org/pool/main/w/w32codecs/w32codecs_20071007-0.1_i386.deb
$ sudo dpkg -i w32codecs_20061022-0.0_i386.deb

추가> 패키지가 버전업되면서 이름이 바귈수 있다. 그때는 사이트에 방문하여 확인이 필요하다.

'Operating' 카테고리의 다른 글

부요 기반 리눅스에서 DVD 타이틀 보기  (0) 2007.07.05
우분투에서 DVD 보기  (0) 2007.07.04
우분투에서 한글2005 설치  (0) 2007.06.06
리눅스에 picasa 2 설치하기  (0) 2007.04.23

+ Recent posts