2016-10-24 3 views
3

私はFreeBSD 10.3の迷惑なベースイメージを生成するためにパッカーテンプレートを設定しましたが、少なくともMon Oct 3 00:34:41 2016 +0300でうまくいきました。FreeBSD pkgが突然ブートストラップを停止しました

昨日私はこのプロジェクトの作業を続けようとしていましたが、これはもう動作していません。だからここに詳細が来る。

パッカーは、次のスクリプトでbsdinstall(8)を使ってFreeBSDのインストールに私のスクリプトを実行し、それが何をすべきかを行います。

PARTITIONS="ada0 { 29G freebsd-ufs /, 5G freebsd-swap, 10G freebsd-ufs /var }" 
DISTRIBUTIONS="base.txz kernel.txz" 
#!/bin/sh 
echo 'WITHOUT_X11="YES"' >> /etc/make.conf 
echo 'OPTIONS_UNSET=X11' >> /etc/make.conf 
echo 'nameserver 8.8.8.8' >> /etc/resolv.conf 
cat >> /etc/rc.conf <<EOF 
ifconfig_em0="DHCP" 
sshd_enable="YES" 
dumpdev="NO" 
EOF 

env ASSUME_ALWAYS_YES=1 pkg bootstrap #  <<stops here 
pkg update  
pkg install -y sudo 

[.....snip.....] 

reboot 

これはメッセージでブートストラップPKGで停止:

Bootstrapping pkg from pkg+http://pkg.FreeBSD.org/FreeBSD:10:amd64/quarterly, please wait... 
Signature for pkg not available. 
pkg: Error fetching http://pkg.FreeBSD.org/FreeBSD:10:amd64/quarterly/Latest/pkg.txz.sig: Connection reset by peer 
A pre-built version of pkg could not be found for your system. 
Consider changing PACKAGESITE or installing it from ports: 'ports-mgmt/pkg'. 

私がbsdinstallスクリプトを停止し、chroot /mnt /bin/sh私は上記のURLからpkg.txz.sigを問題なく取り出すことができます。

「ピアによって接続がリセットされました」という理由は何ですか?最近、pkg.FreeBSD.orgで何か変更されましたか?

問題について何も見つかりませんでした。

captured trafficを見ると

UPD1

- サイトは本当に200OK応答し、その後、pkg.txz.sigファイルの接続を切断します。

しかし、この200OKパケットが(失敗した)fetchマニュアル(成功した)とpkg bootstrapの両方のための署名ファイルとthey are identicalが含まれてい

両方のセッションが同じであるので、これはネットワークの問題そうではありません。


UPD2

trussはどちらかnot helpfulました。

だから私はちょうど手動でファイルを取得するために私のbsdinstallスクリプトを変更した回避策として:とにかくダウングレードではありません...私は今、疑うことができる唯一のことは、VirtualBoxのバージョンアップデートです:

[.....snip.....] 

#env ASSUME_ALWAYS_YES=1 pkg bootstrap 
fetch http://pkg.FreeBSD.org/FreeBSD:10:amd64/quarterly/Latest/pkg.txz 
fetch http://pkg.FreeBSD.org/FreeBSD:10:amd64/quarterly/Latest/pkg.txz.sig 
pkg add pkg.txz 
pkg update 

[.....snip.....] 

PSオプション。私は一瞬だけ、デバッグ環境を設定した


UPD3

(ISOのチェックサムがそうaccidential変更が不可能な、テンプレートとスクリプトはgitリポジトリであり、テンプレートにハードコードされました)エラーが発生した機能を分離しました。

それはhttp接続(最初のものは、すでに727のバイトを読んでいる間 - それはEOFでなければなりません)から第2のバッファリフィルです...

Hereは、バックトレースとそこに到達するためのブレークポイントを持つ小さなgdbのログです。 システムに作成されたtcpdumpキャプチャを追加しました(wiresharkと互換性があります)。

+0

おそらく[email protected]に問い合わせてください。彼らはpkg.FreeBSD.orgとpkgツールを維持しています。 – arved

+0

これはlibfetchか 'em'ドライバ問題(おそらく+仮想ネットワーキング)のようです。保守担当者に連絡してください –

答えて

1

私が知ったように、部分的に問題はpkgでした - 接続から10240バイトを読み込もうとしましたが、ファイルが小さくなるとEOFを期待していましたが、システム全体でリモートファイル全体がすでに読んだ。

二回
# /release/10.3.0/usr.sbin/pkg/pkg.c 

185 char buf[10240]; 

242 while ((r = fread(buf, 1, sizeof(buf), remote)) > 0) { 

と、次のループ - 初めてファイルを読み込む、二度目接続リセットのエラーを取得代わりにEOF

# /release/10.3.0/lib/libc/stdio/fread.c 

94   resid = count * size;      # == 10240 here 

100   while (resid > (r = fp->_r)) { 
101     (void)memcpy((void *)p, (void *)fp->_p, (size_t)r); 
102     fp->_p += r; 
103     /* fp->_r = 0 ... done in __srefill */ 
104     p += r; 
105     resid -= r; 
106     if (__srefill(fp)) { 
107       /* no more input: return partial result */ 
108       return ((total - resid)/size); 
109     } 
110   } 

sizeが小さなチャンクのために調整し、彼らされているので、手動fetchは成功しますが読み取り専用に727のバイトを尋ねる:

# /release/10.3.0/usr.bin/fetch/fetch.c 

720     if (us.size != -1 && us.size - count < B_size && 
721      us.size - count >= 0) 
722       size = us.size - count; 
723     else 
724       size = B_size; 

733     if ((readcnt = fread(buf, 1, size, f)) < size) { 

...でもEOFが設定されていない理由は依然として問題です。

freebsd-pkgメーリングリストに投稿してください。


UPD1

5.028から5.026にVirtualboxのを格下げされ、EOFは、_sread()libc/stdio/refill.c:135のリターン0を設定し、それはそれで何かがあまりにもVirtualboxのネットワークで変更されたライン138

にEOFを設定しています。 gistにVirtualbox 5.026用のpcapファイルを追加しました。 5.028が本当に接続リセットの原因でした - ここにはキャプチャcomparisonがあります。

VirtualBox 5.1.8にもこのバグがあります。バージョン5.1.6は正常に動作します。

開かれたticket #16141のbugtrackerにあります。

+1

私は自分のVBだけを残したかったので、ports.txzを枯らして、単純なポートをコンパイルしようとしました。 Pkgはこれの一部としてブートストラップされ、問題を解決しました。これは、バージョンを変更する以外の回避策になる可能性があります。 –

+0

これらのバージョンでは、natアダプターのバグがたくさんあります。しかし、5.1.9 r111846で修正されたようです([test builds](https://www.virtualbox.org/wiki/Testbuilds)ページで入手可能です)。まだ試してみませんでしたが、バグトラッカーの人々はそれが大丈夫だと言います。 –

関連する問題