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 件のコメント:
コメントを投稿