荻野と申します.

毎朝 portsnap と portupgrade を使って自動更新を行っているのですが
今朝 portuprade が

> [missing key: categories] [Updating the portsdb <format:bdb_btree> 
> in /usr/ports ... - 16411 port entries found .........1000.........
(省略)
> 16000.... .....done]
> missing key: categories: Cannot read the portsdb!
> database file error

というエラーを出して止まっておりました.

調べてみたところ /usr/ports/INDEX-6.db の中に categories 情報が
入っていないのが直接の原因ですが,その理由をたどっていくと

/usr/local/lib/ruby/site_ruby/1.8/portsdb.rb の 389行目付近
>   def subdirs(dir)
>     %x"fgrep -v bsd.port.subdir.mk #{dir}/Makefile |
>        make -f - -V SUBDIR 2> /dev/null".split.select { |i|
>       File.directory?(File.join(dir, i))
>     }.sort
>   end
にて make -V SUBDIR によるカテゴリー一覧を取得する部分で

/usr/ports $ fgrep -v bsd.port.subdir.mk /usr/ports/Makefile |
make -f - -V SUBDIR
"(stdin)", line 142: Malformed conditional (${OSVERSION} >= 601101)

OSVERSION なんて知らない変数だ!と怒られて止まっております.

誰が変更したのかなと思って CVS で調べると 2007/01/31 14:07:23 に
pav 氏によって,
> ports/Makefile
> [15] Make csup default `make update' method on FreeBSD 6.2 and up
の変更の過程で OSVERSION による分岐が追加されております.

http://www.freebsd.org/cgi/cvsweb.cgi/ports/Makefile.diff?r1=1.96&r2=1.97&f=h

そもそも OSVERSION は /usr/ports/Mk/bsd.port.subdir.mk にて定義される
変数なのですけど,なぜ portsdb.rb では
> fgrep -v bsd.port.subdir.mk #{dir}/Makefile | make -f - -V SUBDIR
のように .inculde<bsd.port.subdir.mk> を除外してチェックしているの
でしょうか?

今のままの /usr/ports/Makefile ですと portsdb による INDEX-6.db の
作成に不具合が出てしまうと思います.どういう風に対処したら
よろしいでしょうか.ご教授お願いします.

最後になりましたが,私の環境は現在

$ uname -a
FreeBSD 6.1-RELEASE FreeBSD 6.1-RELEASE #0:
Sun May 7 04:32:43 UTC 2006 [EMAIL PROTECTED]:
/usr/obj/usr/src/sys/GENERIC i386

$ pkg_info
db41-4.1.25_4       The Berkeley DB package, revision 4.1
portupgrade-2.2.2_1,2 FreeBSD ports/packages administration and management tools
ruby18-bdb-0.5.9_2  Ruby interface to Sleepycat's Berkeley DB revision 2 or lat
(関係しそうなもの)

となっております.


メールによる返信