読者です 読者をやめる 読者になる 読者になる

portversionでエラー

会社のFreeBSD 8.0-RELEASE-p2で動いているファイルサーバでportversion -vを実行したところでエラーが出た。

/usr/local/lib/ruby/site_ruby/1.8/portsdb.rb:119:in `fill': MOVED file format error (PortsDB::MOVEDError)
        from /usr/local/lib/ruby/site_ruby/1.8/portsdb.rb:113:in `each'
        from /usr/local/lib/ruby/site_ruby/1.8/portsdb.rb:113:in `fill'
        from /usr/local/lib/ruby/site_ruby/1.8/portsdb.rb:112:in `open'
        from /usr/local/lib/ruby/site_ruby/1.8/portsdb.rb:112:in `fill'
        from /usr/local/lib/ruby/site_ruby/1.8/portsdb.rb:107:in `initialize'
        from /usr/local/lib/ruby/site_ruby/1.8/portsdb.rb:182:in `new'
        from /usr/local/lib/ruby/site_ruby/1.8/portsdb.rb:182:in `setup'
        from /usr/local/lib/ruby/site_ruby/1.8/pkgtools.rb:256:in `init_pkgtools_global'
        from /usr/local/sbin/portversion:191:in `main'
        from /usr/local/lib/ruby/1.8/optparse.rb:791:in `initialize'
        from /usr/local/sbin/portversion:82:in `new'
        from /usr/local/sbin/portversion:82:in `main'
        from /usr/local/sbin/portversion:383

どうもMOVEDファイルのフォーマットが違うよという内容らしい、ググってみたらスラドの日記に同じ症状が出ている人がいた。
/usr/ports/MOVEDファイルの各行に「|」が3つあるのが正しいフォーマットらしい。結構な行数があるのでrubyスクリプトを書いて確認してみた。

#!/usr/local/bin/ruby
open("/usr/ports/MOVED"){|file|
   file.each {|lines|
      puts lines unless lines.scan("|").size == 3
   }
}

実行するとMOVEDファイルのヘッダ部分と「|」が3個ではない行が1つ発見された。

www/trac-webadmin|2010-03-30|Incorporated to www/trac

早速MOVEDファイルを開いて該当箇所を訂正。

www/trac-webadmin||2010-03-30|Incorporated to www/trac

この後portversion -vを実行したところ無事にバージョンの確認ができた。
portupgrade -aして任務完了。

こういうのはどこに連絡すればいいんだろうね。