gonzui を入れて遊ぶ http://gonzui.sourceforge.net/ !! 手もとに用意する ( 2005.03.16 現在 ) Ruby 1.8.2 以上 http://www.ruby-lang.org/ Berkeley DB 4.2 以上 http://www.sleepycat.com/ Ruby 用 BDB バインディング 0.5.2 以上 http://raa.ruby-lang.org/project/bdb wget する rin@sakura[~/usr/local]% wget ftp://ftp.ruby-lang.org/pub/ruby/ruby-1.8.2.tar.gz && wget ftp://moulon.inra.fr/pub/ruby/bdb.tar.gz rin@sakura[~/usr/local]% wget ftp://ftp.sleepycat.com/releases/db-4.3.27.tar.gz !! ruby rin@sakura[~/usr/local]% tar xzf ruby-1.8.2.tar.gz rin@sakura[~/usr/local]% cd ruby-1.8.2 rin@sakura[~/usr/local/ruby-1.8.2]% ./configure rin@sakura[~/usr/local/ruby-1.8.2]% make && make test rin@sakura[~/usr/local/ruby-1.8.2]% su bash-2.04# make install rin@sakura[~/usr/local/ruby-1.8.2]% ruby --version ruby 1.8.2 (2004-12-25) [i686-linux] !! Ruby 用 BDB バインディング rin@sakura[~/usr/local]% cd bdb-0.5.4/ rin@sakura[~/usr/local/bdb-0.5.4]% ruby extconf.rb rin@sakura[~/usr/local/bdb-0.5.4]% make transaction.c: In function `bdb_txn_mark': transaction.c:72: structure has no member named `man' make[1]: *** [transaction.o] エラー 1 make[1]: 出ます ディレクトリ `/home/rin/usr/local/bdb-0.5.4/src' make: *** [all] エラー 2 む。 !! Berkeley DB rin@sakura[~/usr/local]% tar xzf db-4.3.27.tar.gz rin@sakura[~/usr/local]% cd db-4.3.27 rin@sakura[~/usr/local/db-4.3.27]% cd build_unix/ rin@sakura[~/usr/local/db-4.3.27/build_unix]% ../dist/configure rin@sakura[~/usr/local/db-4.3.27/build_unix]% make : /bin/sh ./libtool --mode=link cc -O2 -o db_archive \ db_archive.lo util_sig.lo libdb-4.3.la cc -O2 -o .libs/db_archive .libs/db_archive.o .libs/util_sig.o ./.libs/libdb-4.3.so@ -Wl,--rpath -Wl,/usr/local/BerkeleyDB.4.3/lib cc: ./.libs/libdb-4.3.so@: No such file or directory make: *** [db_archive] エラー 1 む。 rin@sakura[~/usr/local/db-4.3.27/build_unix]% ls rin@sakura[~/usr/local/db-4.3.27/build_unix]% ls .libs/libdb-4.3.* ls .libs/libdb-4.3.* .libs/libdb-4.3.a .libs/libdb-4.3.lai .libs/libdb-4.3.la@ .libs/libdb-4.3.so* ファイルはあるぞ。 Makefile では DEF_LIB に定義されてる。 rin@sakura[~/usr/local/db-4.3.27/build_unix]% find ../ -type f | xargs grep libso_target ../build_unix/config.log:DEFAULT_LIB='$(libso_target)' ../build_unix/config.log:INSTALL_LIBS='$(libso_target) $(libdb)' ../build_unix/Makefile:DEF_LIB= $(libso_target) ../build_unix/Makefile:libso_target= $(libdb_base)-$(LIBVERSION).la ../build_unix/Makefile: $(libso_target) \ ../build_unix/Makefile:library_build: $(libso_target) $(libdb) $(UTIL_PROGS) ../build_unix/Makefile:$(libso_target): $(C_OBJS) ../build_unix/Makefile: @$(INSTALLER) $(libso_target) $(libdb) $(DESTDIR)$(libdir) ../build_unix/config.status:s,@DEFAULT_LIB@,$(libso_target),;t t ../build_unix/config.status:s,@INSTALL_LIBS@,$(libso_target) $(libdb),;t t ../dist/Makefile.in:libso_target= $(libdb_base)-$(LIBVERSION).la ../dist/Makefile.in: $(libso_target) \ ../dist/Makefile.in:$(libso_target): $(C_OBJS) ../dist/configure: DEFAULT_LIB="\$(libso_target)" ../dist/configure.ac: DEFAULT_LIB="\$(libso_target)" libso_target を libdb-4.3.so に定義してるところはどこだ。 !! Berkeley DB ( その 2 ) 面倒なので pkgsrc を入れたのでせっかくだから pkgsrc を使うことにした。 bash-2.04# cd /usr/pkgsrc/databases/db4/ bash-2.04# bmake install : PATH="$PATH:/sbin" ldconfig -n /usr/pkg/lib ---------------------------------------------------------------------- Libraries have been installed in: /usr/pkg/lib If you ever happen to want to link against installed libraries in a given directory, LIBDIR, you must either use libtool, and specify the full pathname of the library, or use the `-LLIBDIR' flag during linking and do at least one of the following: - add LIBDIR to the `LD_LIBRARY_PATH' environment variable during execution - add LIBDIR to the `LD_RUN_PATH' environment variable during linking - use the `-Wl,--rpath -Wl,LIBDIR' linker flag - have your system administrator add LIBDIR to `/etc/ld.so.conf' See any operating system documentation about shared libraries for more information, such as the ld(1) and ld.so(8) manual pages. ---------------------------------------------------------------------- Installing DB utilities: /usr/pkg/bin ... cp -p .libs/berkeley_db_svc /usr/pkg/bin/berkeley_db4_svc cp -p .libs/db_archive /usr/pkg/bin/db4_archive cp -p .libs/db_checkpoint /usr/pkg/bin/db4_checkpoint cp -p .libs/db_deadlock /usr/pkg/bin/db4_deadlock cp -p .libs/db_dump /usr/pkg/bin/db4_dump cp -p .libs/db_load /usr/pkg/bin/db4_load cp -p .libs/db_printlog /usr/pkg/bin/db4_printlog cp -p .libs/db_recover /usr/pkg/bin/db4_recover cp -p .libs/db_stat /usr/pkg/bin/db4_stat cp -p .libs/db_upgrade /usr/pkg/bin/db4_upgrade cp -p .libs/db_verify /usr/pkg/bin/db4_verify Installing documentation: /usr/pkg/share/doc/db4 ... /bin/chown -R root:root /usr/pkg/share/doc/db4 ===> Registering installation for db4-4.3.27nb1 /etc/ld.so.conf に /usr/pkg/lib を追加しとく。 rin@sakura[~/usr/local/bdb-0.5.4]% cat /etc/ld.so.conf /usr/local/lib /usr/X11R6/lib /usr/pkg/lib !! Ruby の BDB rin@sakura[~/usr/local]% tar xzf bdb.tar.gz rin@sakura[~/usr/local/bdb-0.5.4]% ruby extconf.rb extconf.rb: Entering directory `src' checking for db_version() in -ldb-4.3... no checking for db_version_4003() in -ldb-4.3... no checking for db_version() in -ldb43... no checking for db_version_4003() in -ldb43... no checking for db_version() in -ldb-4.2... no checking for db_version_4002() in -ldb-4.2... no checking for db_version() in -ldb42... no checking for db_version_4002() in -ldb42... no checking for db_version() in -ldb-4.1... no checking for db_version_4001() in -ldb-4.1... no checking for db_version() in -ldb41... no checking for db_version_4001() in -ldb41... no checking for db_version() in -ldb-4.0... no checking for db_version_4000() in -ldb-4.0... no checking for db_version() in -ldb-4... no checking for db_version_4000() in -ldb-4... no checking for db_version() in -ldb40... no checking for db_version_4000() in -ldb40... no checking for db_version() in -ldb4... no checking for db_version_4000() in -ldb4... no checking for db_version() in -ldb3... no checking for db_version_3000() in -ldb3... no checking for db_version() in -ldb2... no checking for db_version_2000() in -ldb2... no checking for db_version() in -ldb... yes creating Makefile extconf.rb: Leaving directory `src' rin@sakura[~/usr/local/bdb-0.5.4]% make make[1]: 入ります ディレクトリ `/home/rin/usr/local/bdb-0.5.4/src' gcc -fPIC -g -O2 -I. -I/usr/local/lib/ruby/1.8/i686-linux -I/usr/local/lib/ruby/1.8/i686-linux -I. -I/usr/include -c transaction.c transaction.c: In function `bdb_txn_mark': transaction.c:72: structure has no member named `man' make[1]: *** [transaction.o] エラー 1 make[1]: 出ます ディレクトリ `/home/rin/usr/local/bdb-0.5.4/src' make: *** [all] エラー 2 bdb_TXN 構造体の man が定義されてないと。 bdb_txn_mark(txnst) bdb_TXN *txnst; { rb_gc_mark(txnst->marshal); rb_gc_mark(txnst->mutex); rb_gc_mark(txnst->man); ←これ } bdb_TXN ってなにさ。 rin@sakura[~/usr/local/bdb-0.5.4]% find -name "*.h" | xargs grep -n bdb_TXN ./src/bdb.h:158:} bdb_TXN; ./src/bdb.h:339: bdb_TXN *txnst; \ ./src/bdb.h:340: Data_Get_Struct(dbst->txn, bdb_TXN, txnst); \ ./src/bdb.h:354: Data_Get_Struct(obj, bdb_TXN, txnst); \ ./bdbxml1/bdbxml.h:52: bdb_TXN *txnst; \ ./bdbxml1/bdbxml.h:53: Data_Get_Struct(con_->txn_val, bdb_TXN, txnst); \ bdb.h の 158 行目付近にて定義されてる。 typedef struct { int status, options; VALUE marshal, mutex; struct ary_st db_ary; struct ary_st db_assoc; VALUE env; DB_TXN *txnid; DB_TXN *parent; #if BDB_VERSION >= 40000 void *txn_cxx; VALUE man; ← ここを通ってない #endif } bdb_TXN; BDB_VERSION が 40000 未満らしい。 上のほうで実行した ruby extconf.rb の出力を見るとすべて no になっている。 libdb4.3 のライブラリを見付けてない。 名前がちょっと違うので ln する。 bash-2.04# ln -s /usr/pkg/lib/libdb4-4.3.so /usr/pkg/lib/libdb-4.3.so lib と include ディレクトリを指定して rin@sakura[~/usr/local/bdb-0.5.4]% ruby extconf.rb --with-db-lib=/usr/pkg/lib --with-db-include=/usr/pkg/include/db4 extconf.rb: Entering directory `src' checking for db_version() in -ldb-4.3... yes creating Makefile extconf.rb: Leaving directory `src' 再度 make して install rin@sakura[~/usr/local/bdb-0.5.4]% make bash-2.04# make install make[1]: 入ります ディレクトリ `/home/rin/usr/local/bdb-0.5.4/src' install -c -p -m 0755 bdb.so /usr/local/lib/ruby/site_ruby/1.8/i686-linux make[1]: 出ます ディレクトリ `/home/rin/usr/local/bdb-0.5.4/src' bash-2.04# exit !! ようやっと gonzui rin@sakura[~/usr/local]% wget http://jaist.dl.sourceforge.net/sourceforge/gonzui/gonzui-0.9.tar.gz rin@sakura[~/usr/local]% tar xzf gonzui-0.9.tar.gz rin@sakura[~/usr/local]% cd gonzui-0.9 rin@sakura[~/usr/local/gonzui-0.9]% ./configure rin@sakura[~/usr/local/gonzui-0.9]% make rin@sakura[~/usr/local/gonzui-0.9]% su bash-2.04# make install !! 試用 例に daemontools に対して使ってみる http://tools.qmail.jp/daemontools/ rin@sakura[~/usr/local]% wget http://tools.qmail.jp/daemontools/daemontools-0.76.tar.gz rin@sakura[~/usr/local]% gonzui-import daemontools-0.76.tar.gz gonzui-import daemontools-0.76.tar.gz admin: 100% |oooooooooooooooooooooooooooooooooooooooooo| Time: 00:00:12 185 contents of 1 packages imported in 13.29 sec. (13.92 contents / sec.) rin@sakura[~/usr/local]% gonzui-server