MugeSoの日記 このページをアンテナに追加 RSSフィード

2011-08-30

[][][]CentOS用textsearch_jaのRPMを作ってみた。

CentOS用にtextsearch_jaRPMを作ったので、思ったところを書いておきます。

下準備

textsearch_jaはMeCabに依存しているのでとりあえずインストールします。MeCabCentOSrpmの作り方はMeCabをyumでインストール@CentOS - yokkunsの日記がわかりやすいです。

本題

ざっと探したところSPECファイルが見当たらなかったので適当に用意しました。

Name:   textsearch_ja
Summary: Integrated Full-Text-Search for Japanese language using morphological analyze.
Summary(ja): PostgreSQL用の形態素解析を用いた日本語全文検索拡張
Version:        9.0.0
Release:        1%{?_dist_release}
Source0:        http://pgfoundry.org/frs/download.php/2943/textsearch_ja-%{version}.tar.gz
License:        BSD
Group:          application/database
BuildRequires: postgresql-devel >= 8.3
BuildRequires: mecab-devel >= 0.97
BuildRequires: sed
Buildroot: %{_tmppath}/%{name}-%{version}-%{release}-root
Requires: postgresql-server >= 8.3
Requires: mecab >= 0.97
Requires: mecab-ipadic >= 2.7.0

%description
Integrated Full-Text-Search for Japanese language using morphological analyze for PostgreSQL.

%description -l ja
日本語テキストの全文検索を行います。 PostgreSQL 8.3 で追加された組み込みテキスト検索を拡張するため、英語文書の検索と同様の方法で、日本語文書を検索することができます。検索は形態素解析を利用した単語単位で行われます。形態素解析には MeCab を使用しています。
利点として、GIN または GiST インデックスをベースにしているため、全文検索用のインデックスがリカバリ可能であることが挙げられます。また、既に tsearch2 に対応している欧米言語を対象とした製品を大きく改変することなく、日本語対応できる強みがあります。
非自立語を除外してキーワードを抽出するため、インデックスのサイズを小さく押さえられます。以下の例では「すもも」と「もも」のみ単語として扱っています。単語ごとではなく文字ごとの検索が必要な場合には、代わりに textsearch_senna を使用してください。

%prep
%setup -q
sed -ie '1s/^\xef\xbb\xbf//' *.c

%build
make 

%install
make install DESTDIR=$RPM_BUILD_ROOT

%clean
rm -rf $RPM_BUILD_ROOT

%files
/usr/lib/pgsql/textsearch_ja.so
/usr/share/pgsql/contrib/textsearch_ja.sql
/usr/share/pgsql/contrib/uninstall_textsearch_ja.sql

%changelog
* Mon Aug 29 2011 TANAKA Koichi 
- initial build

日本語descriptionはno titleをの文章を引用しました。

注意すべき点は%setupセクションにあるsedです。textsearch_ja-9.0.0のソースファイルはBOM付のUTF-8であるためCentOS 4,CentOS 5のGCCではコンパイル時に下記のエラーが出てしまいました。このためsedBOMを取り除いています。

textsearch_ja.c:1: error: stray '\239' in program
textsearch_ja.c:1: error: stray '\187' in program
textsearch_ja.c:1: error: stray '\191' in program

また、make installではインストール先をDESTDIRで指定しています。PREFIXではないので注意してください。

間違っている点や改善すべき点がありましたらご指摘お願いします。

2011-07-16

[][][]VirtualBoxを使って開発するときに知っておくと便利なこと

バックグラウンドで起動する

VirtualBoxで開発用サーバーを起動する場合にはバーチャルコンソールやらマネージャウインドウやらは不要ですよね。コンソールはputtyやらpoderosaやらからつないだ方がクリップボードとか便利ですし。

そこで便利なのがVBoxHeadlessTrayです。これを使うとマネージャーのウインドウやらバーチャルコンソールやらを排除してサーバーの起動・停止・状態の保存・復帰が行えます。

ホストオンリーネットワークでIP固定

複数台のサーバーをホストオンリーネットワークで立ち上げている場合、IPアドレスDHCPで自動設定させていると起動ごとに変わってしまって面倒です。なので、DHCPではなくて固定IPを設定します。

ホストオンリーネットワークのDHCPの設定はマネージャーのメニュー→ファイル→環境設定→ネットワークから行えます。こちらを確認するとデフォルトでは192.168.56.101から192.168.56.254がDHCPの貸し出しIPアドレスとなっています。また、ホストのIPアドレスは192.168.56.1,DHCPサーバが192.168.56.100です。

固定IPを設定する場合はこれら以外つまり192.168.56.2-192.168.56.99を使用するようにします。

2011-07-13

[]CentOS6をVirtualBoxの仮想環境にインストールしてみた

やっとリリースされたCentOS6をVirtualBoxの仮想環境にインストールしたので流れを残しておきます。

CentOS6のダウンロード

今回はCentOS-6.0-x86_64-bin-DVDBitTorrentダウンロードしました。

CentOS-6.0-x86_64-bin-DVD1.iso,CentOS-6.0-x86_64-bin-DVD2.isoが含まれています。

仮想マシンの作成

仮想マシンを作成します。

f:id:MugeSo:20110714022420p:image

CentOSRHEL系なのでオペレーティングシステムLinux、バージョンはRedHat64bitとしました。

また、メモリを1024Mに設定します。デフォルトの512Mではメモリ不足でGUIインストーラーが利用できませんでした。

インストール

とりあえずMinimalでインストールしました。インストール自体はすんなりいきました。

ネットワーク設定

インストール再起動してログインしてみると、eth0が立ち上がっていませんでした。

f:id:MugeSo:20110714022421p:image

そこで、/etc/sysconfig/network-scripts/ifcfg-eth0 を編集して次の二行を変更・追加します。

ONBOOT="yes"
BOOTPROTO="dhcp"

編集後次のコマンドを実行するとeth0が立ち上がります。

$ service network restart
または
$ ifup eth0

こんな感じで、ネットワーク以外は5.xと変わらずインストールできました。

2010-04-10

[]お名前.com 共用サーバSDでSPFレコードを追加してみた。

5月に一人暮らしははじめようとしているんですが、この機会に今まで自宅サーバにあったメールサーバを以前から放置していたお名前.comの共用サーバに移すことにしました。せっかくなのでSPFレコードを設定することにしました。

実際にこの共用サーバのsmtpを使ってメールを送信してみたところ下記のような転送が行われていました。

Received: from smtp.zero.jp (smtp06.zero.jp [210.157.5.236])
	by mail.example.com (Postfix) with ESMTP id 833D2288324
	for <master@example.com>; Sat, 10 Apr 2010 21:58:09 +0900 (JST)
Received: from localhost (localhost [127.0.0.1])
	by smtp.zero.jp (Postfix) with ESMTP id 11B0D48B90
	for <master@example.com>; Sat, 10 Apr 2010 21:58:05 +0900 (JST)
X-Virus-Scanned: amavisd-new at zero.jp
Received: from smtp.zero.jp ([127.0.0.1])
	by localhost (smtp.zero.jp [127.0.0.1]) (amavisd-new, port 10024)
	with ESMTP id cugPNqOlttuF for <master@example.com>;
	Sat, 10 Apr 2010 21:58:04 +0900 (JST)
Received: from [192.168.1.2] (FLH9Aab091.kng.mesh.ad.jp [218.227.160.91])
	by smtp.gmoserver.jp (Postfix) with ESMTPSA id D2DAB380CE
	for <master@example.com>; Sat, 10 Apr 2010 21:58:04 +0900 (JST)

どうやらいろいろ転送されてから目的地のSMTPサーバへたどり着くようです。これでは単純に v=spf1 +mx -all としたのでは動きません!

そこで、最後に転送しているsmtp.zero.jpをSPFレコードに追加してやることにします。しかし、よく見るとReceived: from smtp.zero.jp (smtp06.zero.jp [210.157.5.236])とかなってます。smtp.zero.jpを名乗っているけど実際にはsmtp06.zero.jpだったよということです。今回はsmtp06でしたけど将来的にもsmtp06が使われるかは怪しいところです。

しかし、あきらめる必要はありません!ありがたいことにSPFレコードにはincludeというものがあるのでこれをを使って外部参照してやればいいのです。ですが、zero.jpにSPFレコードがないと参照しても意味ありません。

ということで、ためしにdig zero.jp txtってみます。

$ dig zero.jp txt

; <<>> DiG 9.2.4 <<>> zero.jp txt
;; global options:  printcmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 22670
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 2

;; QUESTION SECTION:
;zero.jp.                       IN      TXT

;; ANSWER SECTION:
zero.jp.                84820   IN      TXT     "v=spf1 +ip4:210.157.4.0/24 +ip4:210.172.146.0/24 +ip4:210.157.11.229 +ip4:210.157.5.0/24 +ip4:210.172.128.0/24 +ip4:210.172.129.0/24 ~all"

;; AUTHORITY SECTION:
zero.jp.                49127   IN      NS      dns1.interq.or.jp.
zero.jp.                49127   IN      NS      dns.interq.or.jp.

;; ADDITIONAL SECTION:
dns.interq.or.jp.       54590   IN      A       210.157.0.1
dns1.interq.or.jp.      7863    IN      A       210.157.0.2

;; Query time: 4 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Sat Apr 10 22:29:10 2010
;; MSG SIZE  rcvd: 254

ちゃんとspfレコードが設定されていて、先ほどのIPも含まれているので問題なく使えそうです。

あとはv=spf1 include:zero.jp -allというSPFレコードを追加すればOK!

ためしにcheck-auth@verifier.port25.comにメールを送信してみると、下記のようになり、SPF checkがpassであることがわかります。

This message is an automatic response from Port25's authentication verifier

service at verifier.port25.com. The service allows email senders to perform

a simple check of various sender authentication mechanisms. It is provided

free of charge, in the hope that it is useful to the email community. While

it is not officially supported, we welcome any feedback you may have at

<verifier-feedback@port25.com>.

Thank you for using the verifier,

The Port25 Solutions, Inc. team

==========================================================

Summary of Results

==========================================================

SPF check: pass

DomainKeys check: neutral

DKIM check: neutral

Sender-ID check: pass

SpamAssassin check: ham

めでたしめでたし。

2009-11-11

[]RHEL5でyum-prioritiesを使う

RHEL5でyum-prioritiesを使おうとした場合にはすんなりいきません。今回はたぶんうまく動かすことができたので報告します。ただし、きっちりとテストしたわけではないので実際に利用する際は自己責任でお願いします。

yum-prioritiesのインストール

まず、RHEL5の標準yumレポジトリにはyum-prioritiesは入っていません。どこかから持ってくる必要があります。

幸いにもCentOS5.3の標準レポジトリには入っている*1のでこいつを使うことにします。

[root@db01 ~]# rpm -ihv http://mirror.centos.org/centos-5/5.3/os/i386/CentOS/yum-priorities-1.1.16-13.el5.centos.noarch.rpm

priority設定

次に/etc/yum.repos.d/にある*.repoファイルに書かれたレポジトリ設定にそれぞれpriorityを書こうとするわけですが、ここで問題があります。実はRHELの標準レポジトリはyum-rhnpluginというプラグインを使ってRHNをラップした仮想yumレポジトリのようなものなのでここに設定ファイルがありません

調べてみると/etc/yum/pluginconf.d/rhnplugin.confにそれらしき記述がありましたのでここにpriorityを追加してみます。

[main]
enabled = 1
gpgcheck = 1

[rhel-i386-server-5]
enabled = 1
priority = 1

動いているか確かめる

とりあえず、今回は被っているパッケージがあるyumレポジトリとしてPostgreSQL RPMsからpgdg-redhat-8.4-1.noarchをインストールしてpriority = 20を設定しました。

この状態でyum info postgresqlを実行してみます。*2

[admin@db01 ~]$ sudo yum info postgresql
Password: 
Loaded plugins: priorities, rhnplugin, security
65 packages excluded due to repository priority protections
Available Packages
Name       : postgresql
Arch       : i386
Version    : 8.1.18
Release    : 2.el5_4.1
Size       : 2.8 M
Repo       : rhel-i386-server-5
Summary    : PostgreSQL client programs and libraries.
License    : BSD
Description: PostgreSQL is an advanced Object-Relational database management system
           : (DBMS) that supports almost all SQL constructs (including
           : transactions, subselects and user-defined types and functions). The
           : postgresql package includes the client programs and libraries that
           : you'll need to access a PostgreSQL DBMS server.  These PostgreSQL
           : client programs are programs that directly manipulate the internal
           : structure of PostgreSQL databases on a PostgreSQL server. These client
           : programs can be located on the same machine with the PostgreSQL
           : server, or may be on a remote machine which accesses a PostgreSQL
           : server over a network connection. This package contains the docs
           : in HTML for the whole package, as well as command-line utilities for
           : managing PostgreSQL databases on a PostgreSQL server.
           : 
           : If you want to manipulate a PostgreSQL database on a remote PostgreSQL
           : server, you need this package. You also need to install this package
           : if you're installing the postgresql-server package.

つぎにpgdgのpriorityを1にしてみると下記のように表示されpriority設定が有効に働いていることが分かります。

[admin@db01 ~]$ sudo yum info postgresql
Loaded plugins: priorities, rhnplugin, security
pgdg84                                                                                   | 1.9 kB     00:00     
44 packages excluded due to repository priority protections
Available Packages
Name       : postgresql
Arch       : i386
Version    : 8.4.1
Release    : 1PGDG.rhel5
Size       : 1.3 M
Repo       : pgdg84
Summary    : PostgreSQL client programs and libraries
URL        : http://www.postgresql.org/
License    : BSD
Description: PostgreSQL is an advanced Object-Relational database management system
           : (DBMS) that supports almost all SQL constructs (including
           : transactions, subselects and user-defined types and functions). The
           : postgresql package includes the client programs and libraries that
           : you'll need to access a PostgreSQL DBMS server.  These PostgreSQL
           : client programs are programs that directly manipulate the internal
           : structure of PostgreSQL databases on a PostgreSQL server. These client
           : programs can be located on the same machine with the PostgreSQL
           : server, or may be on a remote machine which accesses a PostgreSQL
           : server over a network connection. This package contains the command-line
           : utilities for managing PostgreSQL databases on a PostgreSQL server.
           : 
           : If you want to manipulate a PostgreSQL database on a local or remote PostgreSQL
           : server, you need this package. You also need to install this package
           : if you're installing the postgresql-server package.

今回は限定的なレポジトリなので実はpriority設定などしなくても問題ないかもしれませんが、DAGレポジトリなど汎用レポジトリを利用したいときは有用になると思います。

*1:理由は分かりませんがCentOS5.4には含まれていないようです

*2:rhnpluginはrootでしか働かないのでsudo必須