2008年11月22日
GNU dbm(gdbm)のデータを変換する
Gaucheで書かれたWikiシステムのwilikiを活用してるのだが、x86アーキテクチャな旧マシンからx86-64アーキテクチャな新マシンへデータを移行しようとして、バックエンドデータベースのGNU dbmのデータがアーキテクチャ依存のために動かなくなってしまった。
ということで、RubyのPStoreを中間データにするようなダンプ/リストアツールを作成。rubyパッケージとlibgdbm-rubyパッケージを入れるだけで動くはず。gdbm_dump.rbは
#!/usr/bin/ruby
# Copyright 2008 Kenshi Muto <kmuto@debian.org>
require 'pstore'
require 'gdbm'
if ARGV.size != 2 || !File.exists?(ARGV[0]) || File.exists?(ARGV[1])
STDERR.puts "gdbm_dump.rb {GDBM file} {DUMP file}"
exit(1)
end
db = PStore.new(ARGV[1])
gdbm = GDBM.new(ARGV[0])
db.transaction do
gdbm.each_pair do |key, value|
db[key] = value
end
gdbm.close
end
gdbm_restore.rbは
#!/usr/bin/ruby
# Copyright 2008 Kenshi Muto <kmuto@debian.org>
require 'pstore'
require 'gdbm'
if ARGV.size != 2 || !File.exists?(ARGV[1]) || File.exists?(ARGV[0])
STDERR.puts "gdbm_restore.rb {GDBM file} {DUMP file}"
exit(1)
end
db = PStore.new(ARGV[1])
gdbm = GDBM.new(ARGV[0])
db.transaction do
db.roots.each do |key|
gdbm[key] = db[key]
end
gdbm.close
end
ダンプしたいアーキテクチャのほうで「gdbm_dump.rb GDBMファイル名 PStoreファイル名」を実行。PStoreファイルを新アーキテクチャのほうにコピーし、新アーキテクチャで「gdbm_restore.rb GDBMファイル名 PStoreファイル名」を実行してGDBMファイルを生成する。
![[hatena]](http://d.hatena.ne.jp/images/b_entry_de.gif)
![[RSS]](/d/rss10.png)