今回のお題はこれ。
karky7のブログ: Solaris11.2 pkgbuildでエラー
http://blog.karky7.com/2015/05/solaris112-pkgbuild.html
これ、貼られているログにあるように、publisher へ pkgsend しているのが timeout しているだけ。
pkgbuild: pkgsend: \'add\' failed for transaction ID \'1430692081_pkg%3A%2F%2Fiichiko3-spec%2Fdatabase%2Fmysql-cluster-gpl-74%407.4.6%2C5.11-0.11.2%3A20150503T222801Z\': 1: Framework error: code: 28 reason: Operation too slow. Less than 1024 bytes/sec transfered the last 30\\
seconds
pkgbuild: URL: \'http://iichiko3-spec:80/add/0/1430692081_pkg%3A%2F%2Fiichiko3-spec%2Fdatabase%2Fmysql-cluster-gpl-74%407.4.6%2C5.11-0.11.2%3A20150503T222801Z/file\' (happened 3 times)
pkgbuild: 2: Framework error: code: 28 reason: Connection time-out
pkgbuild: URL: \'http://iichiko3-spec:80/add/0/1430692081_pkg%3A%2F%2Fiichiko3-spec%2Fdatabase%2Fmysql-cluster-gpl-74%407.4.6%2C5.11-0.11.2%3A20150503T222801Z/file\'
pkgbuild:
@karky7 が書いているように、
pkg/server の pkg/socket_timeout プロパティを変更してもよさそうだけど、
以前に試してダメだった(結局、別の方法で対処した)気もするので、
試してください。
(/usr/lib/python2.6/vendor-packages/pkg/server/depot.py で
slow connection 用に response.timeout を 3600 にしているので、
socket_timeout より、こっちの方な気もするけど、
publish に失敗するまでに 1 時間もかかったか覚えていない。)
別解として、publisher が localhost の場合、
パッケージのビルド時に publish に失敗するのは問題にせず、
あとから手で pkgsend する方法がある。
ポイントは publisher に対して pkgsend するのではなく、
PATH に対して pkgsend すること。
ログを見るとわかるとおり、パッケージビルド時のパッケージの publish は
~/packages/PKGMAPS/scripts 以下の script を叩いて行なわれている。
ログだと、この部分
pkgbuild: Calling script /export/home/karky7/packages/PKGMAPS/scripts/database%2Fmysql-cluster-gpl-74_ips.sh
この script はこんな感じのはず。
#!/usr/bin/bash
export PKG_REPO=${PKGBUILD_IPS_SERVER:-http://localhost:10000/}
pkgsend publish -s "$PKG_REPO" /export/home/karky7/packages/PKGMAPS/manifests/database%2Fmysql-cluster-gpl-74.manifest || exit 1
publisher を指定して、pkgsend に .manifest を渡しているだけなので、
$ PKGBUILD_IPS_SERVER=$(svcprop -p pkg/inst_root pkg/server) \
sh /export/home/karky7/packages/PKGMAPS/scripts/database%2Fmysql-cluster-gpl-74_ips.sh
か
$ pkgsend publish -s $(svcprop -p pkg/inst_root pkg/server) \
/export/home/karky7/packages/PKGMAPS/manifests/database%2Fmysql-cluster-gpl-74.manifest
という感じで、publisher に対してではなく、
PATH に対して publish してあげればよい。
publisher が localhost でない場合は、
~/packages 以下にできるファイルを publisher に持って行って、
同じように pkgsend を実行すればよい。
ただし、manifest には PATH が書かれているので、
ビルドした環境と同じ PATH にしておいた方がよい。
もちろん、manifest に書かれている PATH を書き換えてしまうことも可能だけど、
面倒くさいので避けた方がよいかと。
(追記)
karky7のブログ: Solaris11.2 pkgbuildでエラーのその後...
http://blog.karky7.com/2015/05/solaris112-pkgbuild_10.html
ということで、@karky7 がさらに調べてた。