さくらインターネット(スタンダード)にsary を入れる その2

さくらインターネット(スタンダード)にsary を入れる - newononeが作るネットサービス更新記録

のリベンジ記事です。

2007-12-03 - [foool]丘の上
を参考にしました。
が、自分の環境だとうまくいかないところもあったので
詳細をつらつらと書いておきます。

glib2.xのインストールに躓いて恐ろしく時間を
掛けてしまいました。5時間くらい。

.cshrc編集

setenv PKG_CONFIG_PATH $HOME/local/lib/pkgconfig
setenv LD_LIBRARY_PATH $HOME/local/lib:/usr/lib

libiconvのインストール

%wget http://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.9.1.tar.gz
%cd libiconv-1.9.1
%./configure --prefix=$HOME/local
%make
%make install
%cd $HOME/local/lib/
%ln -s libiconv.so.4.0 libiconv

gettext のインストール

%tar zxvf gettext-0.18.1.1.tar.gz
%cd gettext-0.18.1.1
%./configure --prefix=$HOME/local
%make
%make install

glib2のインストール

%tar zxvf glib-2.25.10.tar.gz
%./configure --with-libiconv=gnu CPPFLAGS="-I$HOME/local/include" LDFLAGS="-L/$HOME/local/lib"
configure: error: *** No iconv() implementation found in C library or libiconv

このエラーがずっと消えない。
いろいろオプションを試してみたけど入れたはずのiconv()が見つからない。

Googleで調べてみた。

RE: No iconv() implementation found in C library or libiconv

以下のオプションで実行したら、configureは通った。

%./configure --with-libiconv=gnu CPPFLAGS="-I/usr/local/include" LDFLAGS="-L/usr/local/lib" --prefix=$HOME/local

ローカルにインストールしたiconv使ってないじゃん...
ひょっとしてgettextも入れなくて良かったのか。

ま、いっか。makeしてみます。

%make
dtrace -C -h -s -o glib_probes.h.tmp
dtrace: failed to open -o: No such file or directory
Error code 1

ダメでした。世の中の人はこれでビルドが通る人が居るのに。
もしかして2.25.10がダメなのか。
古いバージョンも試してみましょう。

  • glib-2.25.10 ... NG (dtrace: failed to open)
  • glib-2.24.1 ... OK

glibのバージョンを少し古いものにしてみたらビルドが通りました。

と言うわけでlibiconv,gettext,glibをアンインストールして最初から
やり直してみます。
blogにはここから書けばよいのですが、備忘録として残しておきます。

.cshrc編集

setenv PKG_CONFIG_PATH $HOME/local/lib/pkgconfig
setenv LD_LIBRARY_PATH $HOME/local/lib:/usr/lib

glib2のインストール

%source ~/.cshrc
%wget http://ftp.gnome.org/pub/gnome/sources/glib/2.24/glib-2.24.1.tar.gz
%tar zxvf glib-2.24.1.tar.gz
%cd glib-2.24.1
%./configure --with-libiconv=gnu CPPFLAGS="-I/usr/local/include" LDFLAGS="-L/usr/local/lib" --prefix=$HOME/local
%make
%make install

やっとsaryのインストールです。

%tar zxvf sary-1.2.0.tar.gz
%cd sary-1.2.0
%./configure CPPFLAGS="-I/home/onone/local/include/glib-2.0" LDFLAGS="-L/ho
me/onone/local/lib/glib-2.0" --prefix=$HOME/local
exact error that occured. This usually means GLIB is incorrectly installed.
configure: error:
GLIB 2.0.0 or better is required. The latest version of GLIB

GLIB 2.0.0以降が必要だよと怒られます。
GLIB のチェックを外してあげると通ります(邪道)

%./configure CPPFLAGS="-I/home/onone/local/include/glib-2.0" LDFLAGS="-L/ho
me/onone/local/lib/glib-2.0" --prefix=$HOME/local --disable-glibtest
%make
%~/local/bin/sary -v
sary 1.2.0

ビルドが通ったので動作を試して見ます。

%cat test.txt
this ia a pen
this ia a ipod
this ia a ipad
%~/local/bin/mksary test.txt
index: 100% |ooooooooooooooooooooooooooooooooooooooooo| Time: 00:00:00
sort: 100% |ooooooooooooooooooooooooooooooooooooooooo| Time: 00:00:00
%ls
test.txt test.txt.ary
%~/local/bin/sary pen test.txt
this is a pen

動きました。

sary-rubyのインストール

%tar zxvf sary-ruby-1.2.0.tar.gz
%ls
ChangeLog README.ja.rd extconf.rb searcher.c
MANIFEST Reference.en.rd init.c
Makefile Reference.ja.rd mkmf.log
README.en.rd builder.c rsary.rb

ノー。setup.rbがない。extconf.rbを使うようです。

%ruby extconf.rb
checking for sary.h... yes
checking for main() in -lsary... no

saryのライブラリを見つけてくれない。
saryライブラリのチェックで弾かれているようなので
チェックをはずして見ます(邪道再び)

%diff -u extconf.rb.org extconf.rb
--- extconf.rb.org      2010-06-28 23:48:29.000000000 +0900
+++ extconf.rb  2010-06-28 23:48:52.000000000 +0900
@@ -18,10 +18,10 @@
 $CFLAGS  += ' ' + `#{pkg_config} sary --cflags`.chomp
 $LDFLAGS += ' ' + `#{pkg_config} sary --libs`.chomp

-if have_header('sary.h') &&
-    have_library('sary')
+#if have_header('sary.h') &&
+#    have_library('sary')
   create_makefile('sary')
-end
+#end

 # Add make targets
 mfile = File.open 'Makefile', 'a'

%ruby extconf.rb
creating Makefile

Makefileができたようです。ビルドしてみましょう。

%make
/usr/bin/ld: cannot find -lintl
Error code 1

saryではなくintlというライブラリがないようです。
/usr/local/libもリンクのパスに追加してみます。

%diff -u Makefile.org Makefile
--- Makefile.org        2010-06-28 23:50:22.000000000 +0900
+++ Makefile    2010-06-28 23:51:07.000000000 +0900
@@ -49,7 +49,7 @@
 DEFS     =
 CPPFLAGS =   $(DEFS) $(cppflags)
 CXXFLAGS = $(CFLAGS)
-ldflags  = -L.  -rdynamic -pthread -L/home/onone/local/lib -lsary -lgthread-2.0 -lglib-2.0 -lintl
+ldflags  = -L.  -rdynamic -pthread -L/usr/local/lib -L/home/onone/local/lib -lsary -lgthread-2.0 -lglib-2.0 -lintl
 dldflags =  -Wl,-soname,$(.TARGET)
 archflag =
 DLDFLAGS = $(ldflags) $(dldflags) $(archflag)

もう1度ビルド。

%make
%make install
%make install
/usr/bin/install -c -o root -g wheel -m 0755 sary.so /home/onone/local/lib/ruby/site_ruby/1.8/i386-freebsd7
install: /home/onone/local/lib/ruby/site_ruby/1.8/i386-freebsd7/sary.so: chown/chgrp: Operation not permitted
Error code 71

できました。
make installするとroot/wheelでインストールしようとします。
これだとうまくいかないので手動で入れます。

/usr/bin/install -c -o onone -g users -m 0755 sary.so /home/onone/local/lib/ruby/site_ruby/1.8/i386-freebsd7

インストール完了。
あとはReference.en.rdを見ながらサンプルを動かしてみます。

test.rb

#!/usr/local/bin/ruby

require 'sary'

pattern = ARGV.shift

ARGV.each {|filename|
searcher = Sary::Searcher.new(filename)
if searcher.search(pattern)
searcher.sort_occurrences
searcher.each_context_line {|text| print text, "\n" }
end
}

%ruby test.rb ip test.txt
this ia a ipod

this ia a ipad

やっと動いたー。

疲れたので今日はココまでにします。

今日の教訓。
ビルドは大変。パッケージングシステムは偉大。