プロが教える店舗&オフィスのセキュリティ対策術

Berkeley DB 1.85 (x86 native-endian) ファイル hoge.db -> GNU dbm ファイル hoge.gdb への変換を行うツールはありますでしょうか。

借りていたサーバで動かしていた掲示板に Ruby で書かれた CGI RuBBS を使っていま{した,す}。
# 配布元
# http://www.spc.gr.jp/bbs/RuBBS.html
# 現在、アーカイブから配布とのこと

ハードウェア故障に伴い環境移行しようとしたのですが、RuBBS のデータベース管理ルーチンは変わっていないものの、OpenBSD で動いていた Ruby ランタイムが Berkeley DB 1.85 を使っていた(とりあえず file コマンドはそう告げています)らしく、Debian Linux 上で動かすと過去記事が読めません。

libdb.a のインストールからスタート、は避けたいです。何とかしてツールによる形式の変換で免れたいと願っています。

A 回答 (1件)

たぶん、存在しないです。


ぜんぜん難しいものじゃないので、探すより作った方が早いと思います。

#!/usr/bin/perl
tie %db_in, 'DB_File' , $dbname_in, O_RDONLY, 0644 or die;
tie %db_out, 'GDBM_File', $dbname_out, O_RDWR|O_CREAT, 0644 or die;
$db_out{$k} = $v while ($k,$v) = each %db_in ;
untie %db_in;
untie %db_out;

ほら、探すより早い。。
(試してないので、エラー出るかもです)

この回答への補足

返答ありがとうございます。

試してみましたが Berkeley DB を読ませることに失敗しています。

hoge.db がこわれているか、それとも、にわか勉強で分かっていないのですが Berkeley DB は上位互換性はないのでしょうか。

file type に $DB_HASH か $DB_BTREE を指定すると die してしまいます。$DB_RECNO では読めたとはいえませんし(配列に入れると末尾の要素に全データが入っているようです)。

システム環境: Debian Linux テスト版
# 間借サーバなので私の都合で変えられません。ごめんなさい
Perl ランタイム: 5.8.4 (apt-get で取得)
Ruby ランタイム: 1.8.2 (apt-get で取得)

Debian Linux テスト版で apt-get でライブラリを取得すると libdb2, 3, 4.1, 4.2 はありますが libdb.{a,so} は libc5 向けしかないようです。

Berkeley DB 1.85 が現在の Perl, Ruby ランタイムで読めないとなると、まず libdb.{a, so} をインストールして、Perl, Ruby 向けサードパーティモジュールかランタイム全体をビルドし直して、それから変換スクリプトを走らせて、という手順になりそうです。それが嫌です。

使っている Perl, Ruby ランタイムが Berkeley DB のどのバージョンに対応しているのか、そこの確認からスタートのようです。

補足日時:2005/03/13 12:06
    • good
    • 0
この回答へのお礼

回答ありがとうございます。返答が二ヶ月遅れですみません。

結局、解決できずあきらめました。VMware Workstation 4.5.2 上のゲスト OS として SuSE Linux 9.2 をインストールした環境で変換しようとしたものの、最初の tie が die してしまいました。

ファイルが壊れているのか、環境に不備があるのか、解決するためには切り分けが必要ですが、私の技術・資源ではこれ以上の追求ができませんでした。

解決できませんでしたが、ここで締め切ることにします。

お礼日時:2005/05/15 21:33

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!