2016-10-24 3 views
3

FreeBSD 10.3의 불량 기본 이미지를 생성하기 위해 패커 템플릿을 설정했으며 적어도 Mon Oct 3 00:34:41 2016 +0300으로 잘 작동했습니다.FreeBSD 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'. 

:이 메시지와 함께 부트 스트랩 PKG에서 정지

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 

:

패커는 무엇을해야합니까, 다음 스크립트 bsdinstall(8)를 사용하여 FreeBSD를 설치하기 위해 내 스크립트를 실행 bsdinstall 스크립트를 중지하고 chroot /mnt /bin/sh 위의 URL에서 아무런 문제없이 pkg.txz.sig을 가져올 수 있습니다.

어떤 아이디어가 "피어에 의한 연결 재설정"의 원인 일 수 있습니까? pkg.FreeBSD.org에서 최근에 뭔가가 변경 되었습니까?

문제점에 대해 찾을 수 없습니다. captured traffic 보면 UPD1


- 사이트가 정말 다음 200 OK 응답하고는 pkg.txz.sig 파일의 연결을 끊습니다.

은 그러나이 200 OK 패킷 (실패) 서명 파일 및 they are identical 모두 수동 fetch에 대한 (성공)과 pkg bootstrap

두 세션이 동일한 포함되어 있으므로이 아닌 네트워킹 문제 가능성이 높습니다.


truss UPD2

중 하나 not helpful했다.

[.....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를 :

그래서 해결 방법으로 난 그냥 수동으로 파일을 가져 오기 위해 내 bsdinstall 스크립트를 수정 한 지금은 의심 할 수있는 유일한 방법은 버추얼 버전 업데이트입니다 ... 어쨌든의 다운 그레이드는 아니다 옵션. 나는 순간, 디버깅 환경을 설정 한


UPD3

(ISO 체크섬이 템플릿에 하드 코드 템플릿과 스크립트는 너무 accidential 변경이 불가능한, 자식 저장소에있는) I 만 오류가 발생한 기능을 격리 시켰습니다.

은 HTTP 연결에서 두 번째 버퍼 리필입니다 (첫 번째는 이미 727 바이트를 읽기 동안 - 그것은 EOF해야한다) ...

Here

거기에 도착하는 역 추적 및 중단 점 작은 GDB의 로그입니다. 시스템에 tcpdump 캡처를 추가했습니다 (wireshark 호환).

+0

아마 [email protected]에서 물어볼지도 모르겠다. 그들은 pkg.FreeBSD.org와 pkg 도구를 유지하고있다. – arved

+0

@arved는 이것이 libfetch 나'em' 드라이버 문제 (+ virtualbox 네트워킹 일 가능성이 높다) 인 것 같다. 유지 관리자와 연락하기 –

답변

1

부분적으로 문제는 pkg와 관련이 있습니다. 연결에서 10240 바이트를 읽으려고합니다. 파일이 작을 경우 EOF를 예상하지만 전체 원격 파일이있을 때 EOF가 설정되지 않습니다. 이미 읽었습니다.

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

185 char buf[10240]; 

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

두 번 다음 루프 - 수동 fetchsize 때문에 성공하는 동안 작은 덩어리하고 조정됩니다

# /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   } 

대신 EOF

의 처음 파일을 읽고, 두 번째로 점점 연결 재설정 오류 읽기 전용으로 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.026로 5.028에서 VirtualBox를 다운 그레이드 및 EOF는 _sread() 0 반환 libc/stdio/refill.c:135에 설정하고 그래서 뭔가 버추얼 너무 네트워킹 변경되었습니다

라인 138에 EOF를 설정한다. gist에 Virtualbox 5.026 용 pcap 파일을 추가했습니다. 5.028이 실제로 연결 재설정의 주범이었습니다 - 여기서 캡처는 comparison입니다.

VirtualBox 5.1.8에도이 버그가 있습니다. 버전 5.1.6이 정상적으로 작동합니다.

열린 문구는 ticket #16141입니다.

+1

나는 VB를 혼자두고 떠나기를 원했기 때문에 ports.txz를 죽이고 단순한 포트를 컴파일하려고했다. Pkg가 부트 스트랩되어 문제를 해결했습니다. 이것은 버전 변경 이외의 해결 방법이 될 수 있습니다. –

+0

이 버전에는 nat 어댑터와 관련된 많은 버그가 있습니다. 그러나 5.1.9 r111846 ([test builds] (https://www.virtualbox.org/wiki/Testbuilds) 페이지에서 사용 가능)에서 수정 한 것으로 보입니다. 그것을 아직 시도하지는 않았지만 사람들은 그것이 괜찮다고 말한다. –