先日 @ftnk 先生にお願いしてあったpkgbuildのエラーの件で私なりに調べてみました。
Solaris の pkgbuild でエラーが出た場合の対処
で書いてあるように「/usr/lib/python2.6/vendor-packages/pkg/server/depot.py」にそれ系の設定があったのを思いだし、気にかかったので調べてみました。
でエラーの内容
Framework error: code: 28 reason: Operation too slow. Less than 1024 bytes/sec transfered the last 30
このエラーコード28とは「pycurl.E_OPERATION_TIMEOUTED」で定義されていて
>>> import pycurl >>> pycurl.E_OPERATION_TIMEOUTED 28 >>>
こいつかraiseされて止まっているっぽい、コードでいうと
「/usr/lib/python2.6/vendor-packages/pkg/client/transport/engine.py:305」
errors_seen += 1 else: timeout = en == pycurl.E_OPERATION_TIMEOUTED ex = tx.TransportFrameworkError(en, url, em, repourl=urlstem, uuid=uuid) repostats.record_error(decayable=ex.decayable, timeout=timeout) errors_seen += 1
ここでTransportFrameworkErrorが飛んできていました、でpycurlのTIMEOUT系のパラメータでグローバルな変数を調べて見ましたところ
PKG_CLIENT_CONNECT_TIMEOUT
PKG_CLIENT_LOWSPEED_TIMEOUT
という2パラメータを発見、このうちPKG_CLIENT_LOWSPEED_TIMEOUTはcurlの処理がストールしたかどうかを判断するための設定値らしくディフォルトだと
>>> pycurl.LOW_SPEED_TIME
20
で設定されていました、そしてこの値はオーバーライド出きるらしく以下のファイル、「/usr/lib/python2.6/vendor-packages/pkg/client/__init__.py」で定義されていて、
try:
# Number of seconds below lowspeed limit before # transaction is aborted. self.PKG_CLIENT_LOWSPEED_TIMEOUT = int(os.environ.get( "PKG_CLIENT_LOWSPEED_TIMEOUT", self.pkg_client_lowspeed_timeout_default)) except ValueError: self.PKG_CLIENT_LOWSPEED_TIMEOUT = \ self.pkg_client_lowspeed_timeout_default
このパラメータを環境変数にセットしておくとその値を使ってくれるっぽい、なので.bash_profileに以下を追加してみた
export PKG_CLIENT_LOWSPEED_TIMEOUT=3600
3600は適当
これで試した結果エラーが発生せずビルドに成功しました。
これでいいのかどうか不明ですが、非力なPCだった場合、この設定を増やした方が良さそうです、ちなみに調べた訳ではないのですが、この設定値を0に設定すると無限に待つような動きっぽいです。
たしかにローカルでpkgsendするならcurlじゃなくて直接ファイルに書いた方が早いような気もしますが、間違っていたらごめんなさい。
とりあえず @ftnk 先生ありがとうございました。
0 件のコメント:
コメントを投稿