pkgdbの崩壊

rubyとかportupgradeしてたら、

[hoge.example:/usr/ports/sysutils/portupgrade]sudo pkgdb -u
--->  Updating the pkgdb
[Updating the pkgdb <format:bdb_btree> in /var/db/pkg ... /var/db/pkg/pkgdb.db: 
unexpected file type or format -- Invalid argument; rebuild needed] 
[Rebuilding the pkgdb <format:bdb_btree> in /var/db/pkg ... 
/var/db/pkg/pkgdb.db: unexpected file type or format --
Invalid argument: Cannot update the pkgdb!]: Cannot update the pkgdb!]

というエラーを出して、pkgdb -uができなくなった。

ぐぐって分かったことは、単純に/var/db/pkg/pkgdb.db を消してsudo pkgdb -F を実行する。
これでpkgdb.dbが再構築されて無問題。

と思ったら

[hoge.example:/usr/ports/sysutils/portupgrade]portversion
undefined method `each' for nil:NilClass
/usr/local/sbin/portversion:239: [BUG] Segmentation fault
ruby 1.8.4 (2005-12-24) [i386-freebsd6]

zsh: abort      portversion

とかでて落ちる。だめじゃん。

portupgrade-develとかいれてもだめ。

ruby -d で良く見ると
/usr/local/lib/ruby/site_ruby/1.8/pkgdb.rb

でこけてるので、

--- /usr/local/lib/ruby/site_ruby/1.8/pkgdb.rb  Tue Jul 18 18:04:20 2006
+++ /home/hoge/pkgdb.rb.orig  Tue Jul 18 18:04:15 2006
@@ -686,7 +686,7 @@
   def close_db
     if @db
       unlock_db
-      @db.close
+#      @db.close
       @db = nil
     end
   end

してみたら直った。でも、こんな適当でいいのかな。dbちゃんとクローズできてないんじゃ。。。