2007年9月3日月曜日

(FreeBSD) cvsup-mirrorの設定ミスのために、変なところで悩んでしまった話

1ヶ月くらい前から、FreeBSD-currentなマシンで、cvsupして、make buildkernelすると、必ず、こんなエラーがでて、カーネルがビルドできなくなってました。



# make buildkernel



~略~
===> coff (cleandir)
rm -f export_syms ibcs2_coff.ko ibcs2_coff.kld imgact_coff.o ibcs2_coff.ko.debug ibcs2_coff.ko.symbols vnode_if.h vnode_if_newproto.h vnode_if_typedef.h
rm -f @ machine
rm -f .depend GPATH GRTAGS GSYMS GTAGS
===> coretemp (cleandir)
cd: can't cd to /usr/src/sys/modules/coretemp
*** Error code 2



Stop in /usr/src/sys/modules.
*** Error code 1



Stop in /usr/obj/usr/src/sys/GENERIC.
*** Error code 1



Stop in /usr/src.
*** Error code 1



Stop in /usr/src.



/usr/src/sys/modules/coretempというディレクトリが、なぜか存在しないのです。



# ls /usr/src/sys/modules/coretemp
ls: /usr/src/sys/modules/coretemp: No such file or directory



ちなみに、coretempって何だ?って思ったのですが、てっきり、coreダンプのcoreと、テンポラリファイルのtempなどを想像していたのですが、Intel Core 2シリーズのCPUの、温度(temperature)センサー関係のドライバらしいです。



最初のころは、cvsのファイルが更新されてなくてエラーがでてるのかと思ってたのですが、cvsレポジトリを覗いてみたら、ちゃんと存在してるじゃないですか。



http://www.jp.freebsd.org/cgi/cvsweb.cgi/src/sys/modules/coretemp/



cvsupサーバは、cvsup-mirrorを使って、オフィシャルなcvsupサーバから、ローカルマシンへミラーリングして、そのローカルなcvsupサーバを使っています。



supfileは、こんなかんじで、今までちゃんと使えてました。



# cat /etc/cvsup.CURRENT
*default  tag=.
*default  host=ローカルなサーバ
*default  base=/usr/local/etc/cvsup
*default  prefix=/usr
*default  release=cvs
*default  delete use-rel-suffix



ローカルなcvsupサーバのファイルを覗いてみると、あらら、ちゃんとファイルは存在します。



% ls /home/ncvs/src/sys/modules/coretemp
/home/ncvs/src/sys/modules/coretemp:
Makefile,v   



つまり、ファイルが存在しているのに、cvsupしたとき、そのファイルが取り出されない、そういう状況のようです。



なんとなく、こんなファイルを見つけてしまいました。



% cat sup/src-sys/list.cvs
upgrade src/lkm
upgrade src/sys
omitany src/sys/crypto
omitany */#cvs.*
omitany */,*
omitany */.nfs*
omitany *.core
omitany */CVS



ひょっとして、ファイル名に「core」が入っているファイルは、無視される設定になっている?! と思ったのですが、そんなことはなくて、cvsupしたとき、ちゃんと出てくるファイルがあります。





2~3時間悩んでやっと原因がわかりました。

checkouts.cvs
というファイルが正しくない!



それが原因でした。



# ls -lh sup.client/cvs-all/checkouts.cvs
-rw-rw-r--  1 cvsupin  cvsupin    27M  7 31 06:26 sup.client/cvs-all/checkouts.cvs



あれれ、7月31日以来、更新されていません。



よくわかりませんが、このcheckouts.cvsというファイルに、cvsupでファイル管理するための情報が入ってるらしいです。



ためしに、coretempがあるかgrepしてみると



# grep coretemp sup.client/cvs-all/checkouts.cvs



ないです。



ないので、cvsupしてもでてこない、そういうことのようです。



じゃあなぜないのか・・・それが、cvsup-mirrorの設定ミスというか、運用ミスだったのです。



1ヶ月前、なんだか微妙な設定のファイアウォールが導入されたために、公式cvsupサーバにファイルを取りに行くマシンと、cvsupdを動かすマシンを、別々に分けたのでした(えぇ~何でそんな変なことすんの?!というツッコミ、はい、そのとおり正しいです。私も、こんな妙な構成、納得いかないのです)。



そのため、外にファイルをとりにいく側のsup.client/cvs-all/checkouts.cvsだけ更新されていて、cvsupdが動いているマシンのsup.client/cvs-all/checkouts.cvsは、更新されず、古いままだったのでした。やれやれ。



cvsupdを動かしているマシン側で、sup.client/cvs-all/checkouts.cvsなども、最新へ更新してやった結果、ようやく、coretempが出てきました。



# csup -L 2 cvsup.src-sys
Parsing supfile "cvsup.src-sys"
Connecting to ローカルサーバ
Connected to xx.xx.xx.xx
Server software version: SNAP_16_1h
Negotiating file attribute support
Exchanging collection information
Establishing multiplexed-mode data connection
Running
Updating collection src-sys/cvs
Checkout src/sys/dev/coretemp/coretemp.c
Checkout src/sys/dev/usb/if_zyd.c
Checkout src/sys/dev/usb/if_zydfw.h
Checkout src/sys/dev/usb/if_zydreg.h
Checkout src/sys/modules/coretemp/Makefile
Checkout src/sys/modules/zyd/Makefile
Shutting down connection to server
Finished successfully



0 件のコメント:

コメントを投稿