CentOS 5.7にnamazu-2.0.21を導入

CentOSで動かしているサーバーにNamazu全文検索を導入したときの手順

パッケージ管理はyumで行っているのでrpmパッケージを作成してからインストールしたいが、CentOS用のrpmパッケージが見当たらないのでFedoraからsrpmをもらってきてrpmパッケージをビルドする。

rpmbuildの作業ディレクトリを設定

作業ディレクトリを作る。何でもいいが、ホームディレクトリにrpmという名前で作ることにする。

$ mkdir ~/rpm
$ cd ~/rpm
$ mkdir BUILD SOURCES SPECS SRPMS RPMS
$ pwd
/home/yuyakko/rpm

pwd絶対パスを確認したらそれを ~/.rpmmacros に記入。

%_topdir /home/yuyakko/rpm

署名の用意

yumでインストールするには署名をつけないといけないらしいので、その設定をする。
rpmコマンドでインストールするのなら不要。
まず鍵を作成。

$ gpg --gen-key

設定はデフォルトで。

ご希望の鍵の種類を選択してください:
   (1) DSAとElgamal (既定)
   (2) DSA (署名のみ)
   (5) RSA (署名のみ)
選択は?
DSA keypair will have 1024 bits.
ELG-E keys may be between 1024 and 4096 bits long.
What keysize do you want? (2048)
要求された鍵長は2048ビット
鍵の有効期限を指定してください。
         0 = 鍵は無期限
        = 鍵は n 日間で満了
      w = 鍵は n 週間で満了
      m = 鍵は n か月間で満了
      y = 鍵は n 年間で満了
鍵の有効期間は? (0)
Key does not expire at all
これで正しいですか? (y/N) y

名前とかは適当に。

あなたの鍵を同定するためにユーザーIDが必要です。
このソフトは本名、コメント、電子メール・アドレスから
次の書式でユーザーIDを構成します:
    "Heinrich Heine (Der Dichter) "

本名: yuyakko
電子メール・アドレス:
コメント:
次のユーザーIDを選択しました:
    “yuyakko”

パスフレーズを省略すると

パスフレーズが不必要なようですが、おそらくそれはろくでもない
考えです! いちおう続行します。パスフレーズは、このプログラム
の“--edit-key”オプションでいつでも変更できます。

などと罵られるので一応設定しておく。
途中でエントロピーが足りなくなった。

十分な長さの乱数が得られません。OSがもっと乱雑さを収集
できるよう、何かしてください! (あと283バイトいります)

よくあること。こういう時は別のSSHセッションから find / などでエントロピー(乱雑さ)を稼ぐ。
鍵が作成できたらrpmbuildでパッケージ作成時にその鍵を使えるように設定する。
man rpm によると

例えば、実行ファイルが /usr/bin/gpg で、鍵リングが /etc/rpm/.gpg にあり、その中のユーザ "John Doe " としてパッケージに GPGを使って署名する場合には


%_signature gpg
%_gpg_path /etc/rpm/.gpg
%_gpg_name John Doe
%_gpgbin /usr/bin/gpg


をマクロの設定ファイルに含めれば良い。システム全体の設定には /etc/rpm/macros を、ユーザごとの設定には ~/.rpmmacros を使用する。

ということなので ~/.rpmmacros に設定を追記する。

%_signature gpg
%_gpg_name yuyakko

キーリングのパスとgpgコマンドのパスは標準でいいので省略。
%_gpg_name には鍵の作成時に出てきたuidを設定。忘れたら gpg -K コマンドで表示。
以上でrpmパッケージ作成時に署名できるようになった。
次にその署名が信用できるということをrpmコマンドに教える。

$ gpg -a --export yuyakko > RPM-GPG-KEY.yuyakko.txt
$ sudo rpm --import RPM-GPG-KEY.yuyakko.txt

gpgの--exportオプションで公開鍵を取り出し、それをrpmの--importオプションでrpmのデータベースに追加する。
これでyumrpmに署名の確認をさせた時にOKとなる。

srpmの取得

なんとなくCentOSに似てそうなFedoraのパッケージデータベースに欲しいsrpmがあるのでそこからもらってくる。
srpmが必要なパッケージ

kakasiは使わないが、namazuのパッケージがkakasiのパッケージに依存しているので一応入れておく。
ここから検索してダウンロード。
https://admin.fedoraproject.org/pkgdb/

  1. パッケージ名を入力
  2. PACKAGESを押して検索
  3. 欲しいパッケージを選択
  4. Build Status
  5. Buildsの中から適当な物を選ぶ
  6. RPMsにあるsrcをダウンロード
$ cd ~/rpm
$ wget http://kojipkgs.fedoraproject.org/packages/namazu/2.0.19/5.fc15/src/namazu-2.0.19-5.fc15.src.rpm
$ wget http://kojipkgs.fedoraproject.org/packages/mecab/0.98/1.fc15/src/mecab-0.98-1.fc15.src.rpm
$ wget http://kojipkgs.fedoraproject.org/packages/mecab-ipadic/2.7.0.20070801/4.fc15.1/src/mecab-ipadic-2.7.0.20070801-4.fc15.1.src.rpm
$ wget http://kojipkgs.fedoraproject.org/packages/kakasi/2.3.4/30.fc15/src/kakasi-2.3.4-30.fc15.src.rpm
$ wget http://kojipkgs.fedoraproject.org/packages/perl-Text-Kakasi/2.04/15.fc15/src/perl-Text-Kakasi-2.04-15.fc15.src.rpm

Namazuは2.0.19までしかなかったのでそれを取得しておいた。

MeCabのインストール

まずソースを展開。

$ rpm -i --nomd5 mecab-0.98-1.fc15.src.rpm

--nomd5を指定しないとチェックサムが適合しないというエラーになる。CentOSに入っているrpmコマンドがsha256をサポートしていないのが原因らしい。仕方ないのでチェックサムの検査を行わないように指定している。
Namazuから使うならeucだけでいいけど、もし他の用途で使うことになったらたぶんUTF-8で使いたくなるのでUTF-8もサポートするように変えておく。SPECS/mecab.specを開いて編集。

%configure
↓
%configure --with-charset=utf8

ビルドしてインストールする。

$ rpmbuild -ba --sign SPECS/mecab.spec
$ sudo yum install RPMS/x86_64/mecab-0.98-1.x86_64.rpm
$ sudo yum install RPMS/x86_64/mecab-devel-0.98-1.x86_64.rpm

辞書も同じように展開・ビルド・インストールする。

$ rpm -i --nomd5 mecab-ipadic-2.7.0.20070801-4.fc15.1.src.rpm
$ rpmbuild -ba --sign SPECS/mecab-ipadic.spec
$ sudo yum install RPMS/x86_64/mecab-ipadic-2.7.0.20070801-4.1.x86_64.rpm
$ sudo yum install RPMS/x86_64/mecab-ipadic-EUCJP-2.7.0.20070801-4.1.x86_64.rpm

Kakasiのインストール

$ rpm -i --nomd5 kakasi-2.3.4-30.fc15.src.rpm
$ rpmbuild -ba --sign SPECS/kakasi.spec
$ sudo yum install RPMS/x86_64/kakasi-2.3.4-30.x86_64.rpm
$ sudo yum install RPMS/x86_64/kakasi-libs-2.3.4-30.x86_64.rpm
$ sudo yum install RPMS/x86_64/kakasi-devel-2.3.4-30.x86_64.rpm
$ sudo yum install RPMS/x86_64/kakasi-dict-2.3.4-30.x86_64.rpm
$ rpm -i --nomd5 perl-Text-Kakasi-2.04-15.fc15.src.rpm
$ rpmbuild -ba --sign SPECS/perl-Text-Kakasi.spec
$ sudo yum install RPMS/x86_64/perl-Text-Kakasi-2.04-15.x86_64.rpm

依存関係があるのでperl-Text-Kakasiをビルドする前にkakasiをインストール。

Namazuのインストール

srpmを展開する。

$ rpm -i --nomd5 namazu-2.0.19-5.fc15.src.rpm

最新の2.0.21を入れたいのでソースコードを取得してきて入れ替え。

$ wget http://www.namazu.org/stable/namazu-2.0.21.tar.gz
$ cp namazu-2.0.21.tar.gz SOURCES/
$ rm SOURCES/namazu-2.0.19.tar.gz

それに合わせて SPECS/namazu.spec も変更。

Version:        2.0.19
Release:        5%{?dist}
↓
Version:        2.0.21
Release:        1%{?dist}

このソースからのパッケージ作成は1回目なのでReleaseは5から1に変更しておく。実際にリリースするわけではなく、自分で使うだけなので他の適当な数字でもいい。
他と同じようにビルド・インストールする。

$ rpmbuild -ba --sign SPECS/namazu.spec
$ sudo yum install RPMS/x86_64/namazu-libs-2.0.21-1.x86_64.rpm
$ sudo yum install RPMS/x86_64/namazu-2.0.21-1.x86_64.rpm
$ sudo yum install RPMS/x86_64/namazu-devel-2.0.21-1.x86_64.rpm
$ sudo yum install RPMS/x86_64/namazu-cgi-2.0.21-1.x86_64.rpm

できた。