FreeBSD pkg installのダウンロードの調子が悪かったので対処した
ここ一週間ほどpkg installを実行するとパッケージのダウンロードが途中で止まりTimeoutすることでインストール失敗する現象が何度も発生しました。
下記がその出力です。下の方にOperation timed out
と表示されてインストールが失敗します。
% sudo pkg -d install -y git DBG(1)[3040]> pkg initialized Updating FreeBSD repository catalogue... DBG(1)[3040]> PkgRepo: verifying update for FreeBSD DBG(1)[3040]> Pkgrepo, begin update of '/var/db/pkg/repo-FreeBSD.sqlite' DBG(1)[3040]> Fetch: fetching from: http://pkgmir.geo.FreeBSD.org/FreeBSD:12:amd64/quarterly/meta.txz with opts "i" DBG(1)[3040]> Fetch: fetching from: http://pkgmir.geo.FreeBSD.org/FreeBSD:12:amd64/quarterly/packagesite.txz with opts "i" FreeBSD repository is up to date. All repositories are up to date. DBG(1)[3040]> want to get an advisory lock on a database The following 17 package(s) will be affected (of 0 checked): New packages to be INSTALLED: git: 2.23.0 p5-CGI: 4.44 p5-HTML-Parser: 3.72 p5-HTML-Tagset: 3.20_1 p5-IO-Socket-SSL: 2.066 p5-Mozilla-CA: 20180117 p5-Net-SSLeay: 1.85 p5-IO-Socket-INET6: 2.72_1 p5-Socket6: 0.29 p5-Authen-SASL: 2.16_1 p5-GSSAPI: 0.28_1 p5-Digest-HMAC: 1.03_1 python36: 3.6.9_1 readline: 8.0.0 libffi: 3.2.1_3 p5-Error: 0.17028 cvsps: 2.1_2 Number of packages to be installed: 17 The process will require 142 MiB more space. 22 MiB to be downloaded. DBG(1)[3040]> Fetch: fetching from: http://pkgmir.geo.FreeBSD.org/FreeBSD:12:amd64/quarterly/All/git-2.23.0.txz with opts "i" [1/17] Fetching git-2.23.0.txz: 100% 5 MiB 167.3kB/s 00:32 pkg: http://pkg.FreeBSD.org/FreeBSD:12:amd64/quarterly/All/git-2.23.0.txz: Operation timed out DBG(1)[3040]> release an advisory lock on a database %
全くダウンロードできないわけではないのでpkg installを繰り返すとインストールを完了させることは可能ですが、依存関係の多いパッケージをインストールする場合は面倒です。下記はgitのインストールを実行していますが、調査の過程でこれに限らずxorgやmysql57-serverなどでも同様の現象が発生したことを確認しました。
最初はネットワーク設定が悪いのかなと思いましたが、curl, portsnapコマンドは正常に動きますし、port collectionからmakeコマンド経由でインストールするとうまくいくんですよね。。
ということで、pkg周りの何かがうまくいってなさそうなので、とりあえずTimeoutするまでの時間を延ばすことに
pkg設定ファイル(/usr/local/etc/pkg.conf)を開いて FETCH_TIMEOUTの値をデフォルトの30から600に変更
FETCH_TIMEOUT = 600; # コメントアウトを外すことを忘れずに
もう一度トライするとメッセージがConnection reset by peer
に変わりました。サーバー側からコネクションが切られたようです。今度は向こう側でTimeoutしたのかな?
% sudo pkg -d install -y git DBG(1)[14180]> pkg initialized Updating FreeBSD repository catalogue... ...(省略) DBG(1)[14180]> Fetch: fetching from: http://pkgmir.geo.freebsd.org/FreeBSD:12:amd64/quarterly/All/p5-HTML-Tagset-3.20_1.txz with opts "i" [4/19] Fetching p5-HTML-Tagset-3.20_1.txz: 100% 12 KiB 12.0kB/s 00:01 DBG(1)[14180]> Fetch: fetching from: http://pkgmir.geo.freebsd.org/FreeBSD:12:amd64/quarterly/All/expat-2.2.8.txz with opts "i" [5/19] Fetching expat-2.2.8.txz: 100% 119 KiB 0.4kB/s 05:00 pkg: http://pkg.FreeBSD.org/FreeBSD:12:amd64/quarterly/All/expat-2.2.8.txz: Connection reset by peer DBG(1)[14180]> release an advisory lock on a database %
pkg用のリモートリポジトリの設定ファイル/etc/pkg/FreeBSD.conf
に記載のあるurl: "pkg+http://pkg.FreeBSD.org/${ABI}/quarterly"
のpkg.FreeBSD.org
にブラウザからアクセスしてみると
This is pkg0.kwc.freebsd.org - a Japan regional mirror for pkg(8). It is generously hosted by KDDI Web Communications Inc in Tokyo, Japan. We use MaxMind GeoLite based geo-dns to choose a close mirror for you. IMPORTANT: We do NOT guarantee uptime of any particular mirror. We provide SRV fallbacks for redundancy.
日本にあるpkg向けミラーに繋がったみたいです。このサーバが何かおかしいのかもしれないとアタリをつけてページ下部に他のミラーのurlがあったので
Other mirrors: pkg0.bme.freebsd.org pkg0.cyb.freebsd.org pkg0.isc.freebsd.org pkg0.jinx.freebsd.org pkg0.nyi.freebsd.org pkg0.twn.freebsd.org
pingを打って一番近そうだったpkg0.twn.freebsd.org
に直接アクセスするように設定ファイルを編集したいと思います。
mkdir -p /usr/local/etc/pkg/repos echo 'FreeBSD: { url: "pkg+http://pkg0.twn.FreeBSD.org/${ABI}/quarterly" }' > /usr/local/etc/pkg/repos/FreeBSD.conf
設定変更したのでトライ
% sudo pkg -d install -y git DBG(1)[3484]> pkg initialized Updating FreeBSD repository catalogue... DBG(1)[3484]> PkgRepo: verifying update for FreeBSD DBG(1)[3484]> Pkgrepo, begin update of '/var/db/pkg/repo-FreeBSD.sqlite' DBG(1)[3484]> Fetch: fetching from: http://pkg0.twn.FreeBSD.org/FreeBSD:12:amd64/quarterly/meta.txz with opts "i" DBG(1)[3484]> Fetch: fetching from: http://pkg0.twn.FreeBSD.org/FreeBSD:12:amd64/quarterly/packagesite.txz with opts "i" FreeBSD repository is up to date. All repositories are up to date. DBG(1)[3484]> want to get an advisory lock on a database The following 19 package(s) will be affected (of 0 checked): New packages to be INSTALLED: git: 2.23.0 p5-CGI: 4.44 p5-HTML-Parser: 3.72 p5-HTML-Tagset: 3.20_1 expat: 2.2.8 p5-IO-Socket-SSL: 2.066 p5-Mozilla-CA: 20180117 p5-Net-SSLeay: 1.85 p5-IO-Socket-INET6: 2.72_1 p5-Socket6: 0.29 p5-Authen-SASL: 2.16_1 p5-GSSAPI: 0.28_1 p5-Digest-HMAC: 1.03_1 python36: 3.6.9_1 readline: 8.0.0 libffi: 3.2.1_3 p5-Error: 0.17028 pcre: 8.43_2 cvsps: 2.1_2 Number of packages to be installed: 19 The process will require 150 MiB more space. 23 MiB to be downloaded. DBG(1)[3484]> Fetch: fetching from: http://pkg0.twn.FreeBSD.org/FreeBSD:12:amd64/quarterly/All/git-2.23.0.txz with opts "i" [1/19] Fetching git-2.23.0.txz: 100% 5 MiB 1.1MB/s 00:05 ...(省略) DBG(1)[3484]> Fetch: fetching from: http://pkg0.twn.FreeBSD.org/FreeBSD:12:amd64/quarterly/All/cvsps-2.1_2.txz with opts "i" [19/19] Fetching cvsps-2.1_2.txz: 100% 44 KiB 44.6kB/s 00:01 Checking integrity...DBG(1)[3484]> Binary> loading /var/cache/pkg/git-2.23.0-b10e56920a.txz ...(省略) DBG(1)[3484]> Binary> loading /var/cache/pkg/cvsps-2.1_2-0d3f2f1c58.txz DBG(1)[3484]> check integrity for 19 items added done (0 conflicting) DBG(1)[3484]> want to upgrade advisory to exclusive lock [1/19] Installing p5-HTML-Tagset-3.20_1... [1/19] Extracting p5-HTML-Tagset-3.20_1: 100% ...(省略) [18/19] Installing cvsps-2.1_2... [18/19] Extracting cvsps-2.1_2: 100% DBG(1)[3484]> release an advisory lock on a database %
うまくインストールできました。
まとめ: pkgのリモートリポジトリの日本向けミラーの調子が良くなかったのかなと思いました。この症状が発生するまでは問題なく利用できていたため一時的なものと思われるので、うまくダウンロードできるようになったら変更した設定ファイルを元に戻したいと思います。