portupgrade の make depends-list2007年05月15日 07時45分48秒

portupgrade が正しく動くには、INDEX ファイルが最新でないとダメなようだ。csup などで、ports の一部を更新した後の portsupgrade では、せっせと INDEX を作り直しているのが ps などでプロセスを覗くと分かる。

さて、久しぶりの csup/cvsup の場合には、make fetch-index が一番速い。ftp で、取ってきて展開するだけだ。毎日、csup/cvsup をやっていると、fetch-index は毎日必要でもない。必要なものの INDEX だけを更新するみたいなので、毎日やっていると、一回ずつの処理時間は大したことが無い。

どうも、make depends-list は深く依存している ports の中まで反復して動作する様で、依存関係の深いものの時は、やたらと時間がかかる。

時折、いつまで経ってもこの依存関係の解決が終わらないときがあるのだ。長い間不思議に思っていたのだが、この程原因を突き止めた。


% ls -sld pkgdb.db /usr/ports/INDEX-7*
 9904 -rw-r--r--  1 root  wheel  10116587  3 15 23:21 /usr/ports/INDEX-7
  912 -rw-r--r--  1 root  wheel    909176  3 15 19:17 /usr/ports/INDEX-7.bz2
18720 -rw-r--r--  1 root  wheel  24371200  3 16 00:23 /usr/ports/INDEX-7.db
17840 -rw-r--r--  1 root  wheel  20017152  3 16 00:23 pkgdb.db

これが正常な状態だ。どうも portupgrade は更新している間にこのファイルの権限を読み出しのみに設定しているみたいだ。その為、make depends-list が長々と終わらない時に、これらのファイルを見たら、600 または -r------- になっていた。書き込めないために、何回も依存関係を構築し直していたらしい。

もし、portupgrade がいつまで経っても依存関係の解決の処理をしているのであれば、一度調べるべきファイルだ。