さくらインターネット(スタンダード)に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'
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 ipodthis ia a ipad
やっと動いたー。
疲れたので今日はココまでにします。
今日の教訓。
ビルドは大変。パッケージングシステムは偉大。