• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:Berkeley DB 1.85 -> GNU dbm への変換ツールは?)

Berkeley DB 1.85 -> GNU dbm への変換ツールは?

このQ&Aのポイント
  • Berkeley DB 1.85 (x86 native-endian) ファイル hoge.db -> GNU dbm ファイル hoge.gdb への変換を行うツールはありますでしょうか。
  • 借りていたサーバで動かしていた掲示板に Ruby で書かれた CGI RuBBS を使っていました。
  • RuBBS のデータベース管理ルーチンは変わっていないものの、OpenBSD で動いていた Ruby ランタイムが Berkeley DB 1.85 を使っていたため、Debian Linux 上で動かすと過去記事が読めません。libdb.a のインストールからスタート、は避けたいです。何とかしてツールによる形式の変換で免れたいと願っています。

質問者が選んだベストアンサー

  • ベストアンサー
noname#43437
noname#43437
回答No.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; ほら、探すより早い。。 (試してないので、エラー出るかもです)

kmihara
質問者

お礼

回答ありがとうございます。返答が二ヶ月遅れですみません。 結局、解決できずあきらめました。VMware Workstation 4.5.2 上のゲスト OS として SuSE Linux 9.2 をインストールした環境で変換しようとしたものの、最初の tie が die してしまいました。 ファイルが壊れているのか、環境に不備があるのか、解決するためには切り分けが必要ですが、私の技術・資源ではこれ以上の追求ができませんでした。 解決できませんでしたが、ここで締め切ることにします。

kmihara
質問者

補足

返答ありがとうございます。 試してみましたが 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 のどのバージョンに対応しているのか、そこの確認からスタートのようです。

関連するQ&A