Solaris9でpkgsrcな環境にて、databases/postgresql82-clientを、bmake installしたら、chownしているときに、Signal 11となって、インストールが失敗しました。
どうも、こんな感じでして・・・
# chown -R root:root なんとかかんとか
chown: .: Too many open files
~たくさん出力されるので省略~
chown: .: Too many open files
chown: getcwd: Too many open files
というわけで、chownがおかしいらしいのです。
trussをつけて実行してみると、ディレクトリを探索しているときに、途中から無限ループになっていました。
たとえば、trussのログからchdirだけ抜き出してみると
chdir("引数で指定したディレクトリ") = 0
chdir("..") = 0
chdir("..") = 0
chdir("別のサブディレクトリ") = 0
chdir("..") = 0
chdir("上と同じ") = 0
chdir("..") = 0
chdir("上と同じ" = 0
chdir("..") = 0
~繰り返し~
という感じになっていて、
chown -R root:root /a/b/c/d/e
を実行したのに、目標からずれた、/a/b/c/x のあたりをウロウロしていました。
しかも、/a/b/c/x の中で、
chown("ファイル", 0, 0) = 0
なんてことをやっているので、おもいっきり誤爆してる。オイ、コラ、ナニヤッテンダ、コノヤロー(怒)なんです。
なんで、こんなことになってしまうのか、理解不能・・・
これは、とんでもないバグだと思います。
気になるといえば、/a/b のところが、実際は、シンボリックリンクになっていて、別のところを差している、その先はNFSになっている、・・・ということくらい。
それにしてもなぁ・・・
chownのソースコードはないし、結局、このchown -Rの挙動はわけわかんなくて、pkgsrcでインストールしたgchownを使って、回避しました。
☆
いったいどこでchownを実行しているのか、ソースコード中のMakefileなど、必死に探したけど、見つからず。
うーん、こんなところにあったか
/usr/pkgsrc/databases/postgresql82-client/Makefile
post-install:
cd ${WRKSRC}/doc; for file in \
FAQ* KNOWN_BUGS MISSING_FEATURES README.* TODO \
bug.template; \
do \
${INSTALL_DATA} $$file ${DESTDIR}${PG_DOC_DIR}/$$file; \
done
cp -R ${WRKSRC}/doc/TODO.detail ${DESTDIR}${PG_DOC_DIR}
chown -R ${DOCOWN}:${DOCGRP} ${DESTDIR}${PG_DOC_DIR}/TODO.detail
0 件のコメント:
コメントを投稿