这里跟踪
macOS 10.13.3
$ packer-版本
1.2.1
$ vboxmanage --version
5.2.8r121009
Debug1.log
上面的要点日志
Debug2.log
上面的要点日志
“ keep_input_artifact”:是
HFS +文件系统
输出virtualbox-iso /
$ ls -l
total 21220296
-rw-r--r-- 1 tanner staff 10864777216 Mar 5 18:46 WindowsServer2016Docker-disk001.vmdk
-rwx------ 1 tanner staff 10412 Mar 5 18:23 WindowsServer2016Docker.ovf
外壳
$ ls -l * .box
-rw-r--r-- 1个制革厂工作人员10729788371 3月5日18:56 windows_2016_docker_virtualbox.box
```shell
$ tar -tvf windows_2016_docker_virtualbox.box
-rw-r--r-- 0 tanner staff 2286 Mar 5 18:51 Vagrantfile
-rw-r--r-- 0 tanner staff 0 Mar 5 18:51 WindowsServer2016Docker-disk001.vmdk
-rw-r--r-- 0 tanner staff 10412 Mar 5 18:51 box.ovf
-rw-r--r-- 0 tanner staff 26 Mar 5 18:51 metadata.json
tar文件是在内部创建的,我们可以在打包程序(或golang)中达到文件大小限制吗?
打包程序的构建文件: windows_2016_docker.json 。
@StefanScherer
哦,我可以在macOS 10.13.3和APFS,Packer 1.2.1,VirtualBox 5.2.8上重现该问题。
$ packer build --only=virtualbox-iso windows_2016_docker.json
$ ls -l windows_2016_docker_virtualbox.box
-rw-r--r-- 1 stefan staff 10146394489 Mar 8 12:16 windows_2016_docker_virtualbox.box
$ tar tvf windows_2016_docker_virtualbox.box
-rw-r--r-- 0 stefan staff 2286 Mar 8 12:16 Vagrantfile
-rw-r--r-- 0 stefan staff 0 Mar 8 12:16 WindowsServer2016Docker-disk001.vmdk
-rw-r--r-- 0 stefan staff 10411 Mar 8 12:16 box.ovf
-rw-r--r-- 0 stefan staff 26 Mar 8 12:16 metadata.json
我已经尝试使用较旧的Packer版本1.1.3,仍然是macOS 10.13.3和APFS,VirtualBox 5.2.8,并且之后的box文件看起来还不错:
$ ls -l *box
-rw-r--r-- 1 stefan staff 10817278351 Mar 11 14:28 windows_2016_docker_virtualbox.box
$ tar tvf windows_2016_docker_virtualbox.box
-rw-r--r-- 0 501 20 2286 Mar 11 14:27 Vagrantfile
-rw-r--r-- 0 501 20 10952051712 Mar 11 14:27 WindowsServer2016Docker-disk001.vmdk
-rw-r--r-- 0 501 20 10412 Mar 11 14:27 box.ovf
-rw-r--r-- 0 501 20 26 Mar 11 14:27 metadata.json
~/code/packer-windows on my*
Packer 1.1.3和Packer 1.2.1有什么区别?
函数DirToBox在1.2.1中是否有显着不同?
抱歉,使用git不太好,所以我不知道如何像使用git那样提取该代码
自从packer / post-processor / vagrant / util.go中的packer 1.1.1起,git怪就没有显示任何变化。
Packer 1.1.3使用Go 1.9进行编译,Packer 1.2.1使用Go 1.10进行编译。
Golang 1.10确实看起来像是一个问题。
我已经将packer / post-processor / vagrant / util.go文件提取到一个小的main.go文件中,调用了没有packer.Ui的DirToBox
函数。
使用Golang 1.9编译该代码,创建的tar文件看起来不错。
使用Golang 1.10编译该代码,tar文件显示一个零字节文件。
压缩级别= 0时也会发生此问题,因此它与pgzip包无关。
可以在以下要点中找到用于构建达尔文二进制文件的示例源dirtobox.go
, Dockerfile
和build.sh
脚本: https :
我创建了一个带有大文件的示例in
目录,为Darwin编译了dirtobox
二进制文件并运行了测试
$ ./build.sh
$ ls -l in
total 21509960
-rw-r--r-- 1 stefan staff 11012556800 Mar 12 15:11 abigfile.tar
-rw-r--r-- 1 stefan staff 6 Mar 12 15:08 asmallfile.txt
$ ./dirtobox
2018/03/12 15:35:02 Turning dir into box: in => out.tar
2018/03/12 15:35:02 Skipping directory 'in' for box 'out.tar'
2018/03/12 15:35:02 Box add: 'in/abigfile.tar' to 'out.tar'
Compressing: %s abigfile.tar
2018/03/12 15:35:32 Box add: 'in/asmallfile.txt' to 'out.tar'
Compressing: %s asmallfile.txt
$ ls -l out.tar
-rw-r--r-- 1 stefan staff 11012560384 Mar 12 15:27 out.tar
$ tar tvf out.tar
-rw-r--r-- 0 stefan staff 0 Mar 12 15:11 abigfile.tar
-rw-r--r-- 0 stefan staff 6 Mar 12 15:08 asmallfile.txt
将Dockerfile
回golang:1.9
FROM golang:1.9
WORKDIR /go/src/app
COPY . .
RUN go get -d -v ./...
RUN GOOS=darwin go build dirtobox.go
并再次运行./build.sh
和./dirtobox
会生成正确的tar文件:
$ ls -l out.tar
-rw-r--r-- 1 stefan staff 11012559360 Mar 12 15:37 out.tar
$ tar tvf out.tar
-rw-r--r-- 0 501 20 11012556800 Mar 12 15:11 abigfile.tar
-rw-r--r-- 0 501 20 6 Mar 12 15:08 asmallfile.txt
文件> 8GByte似乎会发生这种情况。
是时候在golang讨论问题了吗?
优秀的分类@StefanScherer
今天,我在Vagrant遇到了一个非常相似的问题-请在此处查看。
简而言之,Vagrant 2.0.3内置的tar实用程序在解压缩包含大文件的档案时遇到问题-当使用bsdtar从tar档案中提取文件时,我最终得到了一个非常细长的零字节vmdk! 较小的盒子不会引起任何问题。
请注意,系统tar从相同的box / tar归档文件中提取文件没有问题...
$ /opt/vagrant/embedded/bin/bsdtar --version
bsdtar 3.2.2 - libarchive 3.2.2 zlib/1.2.11 liblzma/5.2.3
$ tar --version
tar (GNU tar) 1.29
@StefanScherer-您确定不是所用的tar版本导致了问题吗?
@StefanScherer仅供参考:
$ sw_vers
ProductName: Mac OS X
ProductVersion: 10.11.6
BuildVersion: 15G19009
$ go version
go version go1.10 darwin/amd64
$ packer version
Packer v1.2.2-dev...
感谢@DanHam的注意。
macOS上的bsdtar可能有问题。
Packer中的问题似乎与Golang 1.10有关。 显然,它会在Golang 1.9和1.10之间创建不同的tar文件。
我使用了来自https://github.com/mholt/archiver/releases的另一个Go二进制文件,以提取使用上述用Golang 1.9和1.10编译的dirtobox示例代码创建的tar文件。
存档器可以从使用scrapobox Golang 1.9二进制文件创建的tar文件中提取文件。
存档器只是编写了一个空文件,提取了用goustobox Golang 1.10二进制文件创建的tar文件。
该测试中未包含tar / bsdtar二进制文件。
使用Vagrant 2.0.2的嵌入式bsdtar进行的测试也可以提取大文件
$ /opt/vagrant/embedded/bin/bsdtar tvf out-go1.9.tar
-rw------- 0 501 20 10737418240 Mar 23 23:02 10Gigfile
$ /opt/vagrant/embedded/bin/bsdtar xvf out-go1.9.tar
x 10Gigfile
$ ls -l 10Gigfile
-rw------- 1 stefan staff 10737418240 Mar 23 23:02 10Gigfile
$ /opt/vagrant/embedded/bin/bsdtar tvf out-go1.10.tar
-rw------- 0 stefan staff 0 Mar 23 23:02 10Gigfile
$ /opt/vagrant/embedded/bin/bsdtar xvf out-go1.10.tar
x 10Gigfile
$ ls -l 10Gigfile
-rw------- 1 stefan staff 0 Mar 23 23:02 10Gigfile
@StefanScherer啊...好。 以为我们已经把那个解释了! 祝您早日发现错误...
我最近遇到了这个问题,但是恢复到Packer 1.1.3无法取得任何进展。 我不认为您还有其他想法吗?
(问题记录在https://github.com/Parallels/vagrant-parallels/issues/319中,因为我认为这是插件问题!)
因此,请进一步调查;
我在OSX 10.12上恢复为Packer 1.1.2,并且设法产生了一个我可以使用的稳定Box。
在OSX 10.13上使用Packer 1.1.2进行测试,由于某种原因而失败? 硬盘上说是0
:
$ tar -tvf sdk-mac.box
-rw-r--r-- 0 user group 180 27 Mar 12:57 Vagrantfile
-rw-r--r-- 0 user group 25 27 Mar 12:57 metadata.json
-rw-r--r-- 0 user group 65536 27 Mar 12:56 sdk-mac.pvm/NVRAM.dat
-rw-r--r-- 0 user group 7224 27 Mar 12:56 sdk-mac.pvm/VmInfo.pvi
-rw-r--r-- 0 user group 26381 27 Mar 12:56 sdk-mac.pvm/config.pvs
-rw-r--r-- 0 user group 1710 27 Mar 12:56 sdk-mac.pvm/harddisk.hdd/DiskDescriptor.xml
-rw-r--r-- 0 user group 0 27 Mar 12:56 sdk-mac.pvm/harddisk.hdd/harddisk.hdd
-rw-r--r-- 0 user group 0 27 Mar 12:57 sdk-mac.pvm/harddisk.hdd/harddisk.hdd.0.{5fbaabe3-6958-40ff-92a7-860e329aab41}.hds
-rw-r--r-- 0 user group 8816 27 Mar 12:57 sdk-mac.pvm/harddisk.hdd/harddisk.hdd.drh
因此,肯定看起来是某个包装商的问题……您该如何调试它,因为我真的需要让这些机器的工作变得无所事事!
供参考。 今天有一种来自塞拉的自家酿制的新包装机和golang。 以及用于High Sierra的新包装机。
@basictheprogram感谢您的更新!
我已经将它们都更新为Homebrew(1.2.2)上的最新Packer。
除了操作系统差异外,我不确定还会导致此问题的其他原因吗?
奇怪的是,运行$ tar .box
表明对于两个操作系统,硬盘的大小都为0
...,但是对于Sierra而言,执行vagrant up
可以正常工作。 (它们都在运行Vagrant 2.0.3)。
塞拉利昂:
$ tar tvf sdk-mac.box
-rw-r--r-- 0 user group 180 27 Mar 15:25 Vagrantfile
-rw-r--r-- 0 user group 25 27 Mar 15:25 metadata.json
-rw-r--r-- 0 user group 65536 27 Mar 15:23 sdk-mac.pvm/NVRAM.dat
-rw-r--r-- 0 user group 7224 27 Mar 15:23 sdk-mac.pvm/VmInfo.pvi
-rw-r--r-- 0 user group 26385 27 Mar 15:23 sdk-mac.pvm/config.pvs
-rw-r--r-- 0 user group 1710 27 Mar 15:23 sdk-mac.pvm/harddisk.hdd/DiskDescriptor.xml
-rw-r--r-- 0 user group 0 27 Mar 15:23 sdk-mac.pvm/harddisk.hdd/harddisk.hdd
-rw-r--r-- 0 user group 0 27 Mar 15:25 sdk-mac.pvm/harddisk.hdd/harddisk.hdd.0.{5fbaabe3-6958-40ff-92a7-860e329aab41}.hds
-rw-r--r-- 0 user group 6784 27 Mar 15:25 sdk-mac.pvm/harddisk.hdd/harddisk.hdd.drh
高塞拉山脉:
$ tar tvf sdk-mac.box
-rw-r--r-- 0 user group 180 27 Mar 15:29 Vagrantfile
-rw-r--r-- 0 user group 25 27 Mar 15:29 metadata.json
-rw-r--r-- 0 user group 65536 27 Mar 15:29 sdk-mac.pvm/NVRAM.dat
-rw-r--r-- 0 user group 7224 27 Mar 15:29 sdk-mac.pvm/VmInfo.pvi
-rw-r--r-- 0 user group 26381 27 Mar 15:29 sdk-mac.pvm/config.pvs
-rw-r--r-- 0 user group 1710 27 Mar 15:29 sdk-mac.pvm/harddisk.hdd/DiskDescriptor.xml
-rw-r--r-- 0 user group 0 27 Mar 15:29 sdk-mac.pvm/harddisk.hdd/harddisk.hdd
-rw-r--r-- 0 user group 0 27 Mar 15:29 sdk-mac.pvm/harddisk.hdd/harddisk.hdd.0.{5fbaabe3-6958-40ff-92a7-860e329aab41}.hds
-rw-r--r-- 0 user group 7728 27 Mar 15:29 sdk-mac.pvm/harddisk.hdd/harddisk.hdd.drh
在Sierra上安装升级升级程序。
$ sw_vers
产品名称:Mac OS X
产品版本:10.12.6
编译版本:16G1212
$ go版本
go版本go1.10 darwin / amd64
在High Sierra上,升级安装程序没有安装
$ sw_vers
产品名称:Mac OS X
产品版本:10.13.3
生成版本:17D102
$去
$ ls -l / usr / local / bin / go *
ls:/ usr / local / bin / go *:没有这样的文件或目录
我手动安装了go,现在一切正常。
我需要在其他安装上确认所有这些。
适用于macOS的Packer 1.2.2二进制文件(https://releases.hashicorp.com/packer/1.2.2/packer_1.2.2_darwin_amd64.zip)是使用Golang 1.8.1编译的。 我认为它应该再次工作。
Homebrew Packer 1.2.2使用Golang 1.10编译
伙计,当HashiCorp已部署二进制文件时,为什么他们必须编译二进制文件?
真棒的调查,伙计们。 在我看来,这是Homebrew中的错误,而不是Packer中的错误-你们都同意吗? 我应该关闭这张票吗?
我认为该错误存在于Golang中,并且打包程序是通过有错误的Golang进行编译的。 Hashicorp应该使用Golang 1.10编译其打包程序。
听起来越野车的二进制文件是Homebrew的,而HashiCorp二进制文件有效吗?
有人应该测试HashiCorp 1.2.2二进制文件。 明天可以测试。
我将重新编译并重新发布HashiCorp 1.2.2。 现在在golang 1.10上使用二进制文件。 我们应该在最新的golang上使用它。
嗯,但随后可能会被破坏为1.2.1。
这是golang-1.8编译的二进制文件,适用于需要解决方法的人员:
packer_1.2.2_darwin_amd64.zip 。 发布用1.8编译的版本是偶然的,仅仅因为它修复了此错误并不意味着它不会引入其他错误。
@basictheprogram进行检查时,我的系统已经安装了go
:
$ sw_vers
ProductName: Mac OS X
ProductVersion: 10.12.6
BuildVersion: 16G1212
$ go version
go version go1.10 darwin/amd64
$ sw_vers
ProductName: Mac OS X
ProductVersion: 10.13.3
BuildVersion: 17D102
$ go version
go version go1.10 darwin/amd64
我刚刚测试了上面发布的Packer 1.2.2 @SwampDragons的1.8编译二进制文件:
塞拉利昂:无业游民的盒子失败(找到硬盘驱动器)
高山脉:无业游民的盒子再次失败(同一问题)
测试使用1.10编译的默认Packer 1.2.2:
塞拉利昂:无业游民的盒子失败(找到硬盘驱动器)
高山脉:无业游民的盒子再次失败(同一问题)
.pvm
文件尝试压缩为16GB,输出框为9GB ...
我开始认为它与我的系统有关。
任何人都可以确认1.2.2是否正常工作,如果可以,则应进行哪些设置?
(奇怪的注;我之前说过,我是用Brew的Packer在Sierra上运行它的,现在它不起作用了。
@SwampDragons符合预期:
docker run -it -v $(pwd):/test -w /test ubuntu tar tvf windows_2016_docker_virtualbox-brew-packer-1.2.2-golang-1.10.box
的容器中尝试了Linux版本。@SwampDragons我一直在使用go 1.10(通过MacPorts安装)来编译Packer二进制文件。 如上所述,我可以创建没有问题的大盒子...
@SurferL我的设置:
$ sw_vers
ProductName: Mac OS X
ProductVersion: 10.11.6
BuildVersion: 15G19009
$ go version
go version go1.10 darwin/amd64
$ packer version
Packer v1.2.2-dev...
从Windows 2016版本中打开包装盒(使用GNU tar),可以得到以下信息:
.
└── [ 340] vmware_desktop
├── [ 983] Vagrantfile
├── [ 30] metadata.json
├── [ 8684] windows2016-vmware-iso.nvram
├── [13725794304] windows2016-vmware-iso.vmdk
├── [ 0] windows2016-vmware-iso.vmsd
├── [ 3515] windows2016-vmware-iso.vmx
└── [ 277] windows2016-vmware-iso.vmxf
1 directory, 7 files
这就是为什么我(最初)如此确信我们看到的是这个问题,而不是Packer的问题。 但是, @ StefanScherer所做的工作似乎表明问题出在其他地方...
编辑:上面刚刚看到@StefanScherer的评论...所以这可能是同一个问题,尽管Stefan提供了一些附加信息?
我可以在1.10.1中看到针对存档/ zip的修复程序。 我尝试使用简化的示例代码,但是仍然存在问题。 它也发生在Linux Golang二进制文件中。 macOS tar(bsdtar)无法正确读取文件大小。
这是用go 1.10.1为darwin构建的打包程序。 如果能解决问题,将在测试中提供帮助。
感谢@StefanScherer提交上游错误。 里面有很多有用的信息
你能做什么?
Go1.10使用户可以更好地控制输出格式。 您可以看到tar.Header.Format转换为tar.FormatGNU可以解决libarchive错误。
看起来应该是这样。 如果有人想提交PR,请这样做,否则我们将为下一个发行版添加解决方法。 目前,使用旧版go编译打包程序应该是一个可行的解决方法。
经过一些测试会做。
害怕我仍然遇到与为Gowin 1.10.1构建的Packer for Darwin相同的错误, .box
包含一个空硬盘,据说其装箱容量为12GB
$ tar -tvf sdk-mac.box
-rw-r--r-- 0 user group 180 3 Apr 11:26 Vagrantfile
-rw-r--r-- 0 user group 25 3 Apr 11:26 metadata.json
-rw-r--r-- 0 user group 65536 3 Apr 11:25 sdk-mac.pvm/NVRAM.dat
-rw-r--r-- 0 user group 7224 3 Apr 11:25 sdk-mac.pvm/VmInfo.pvi
-rw-r--r-- 0 user group 26381 3 Apr 11:25 sdk-mac.pvm/config.pvs
-rw-r--r-- 0 user group 1710 3 Apr 11:25 sdk-mac.pvm/harddisk.hdd/DiskDescriptor.xml
-rw-r--r-- 0 user group 0 3 Apr 11:25 sdk-mac.pvm/harddisk.hdd/harddisk.hdd
-rw-r--r-- 0 user group 0 3 Apr 11:26 sdk-mac.pvm/harddisk.hdd/harddisk.hdd.0.{5fbaabe3-6958-40ff-92a7-860e329aab41}.hds
-rw-r--r-- 0 user group 8336 3 Apr 11:26 sdk-mac.pvm/harddisk.hdd/harddisk.hdd.drh
(并且运行vagrant up
失败,并显示硬盘错误)
我还使用Packer 1.1.3
收到( vagrant up
硬盘)错误,所以我不确定这与我的系统有关吗?
即使硬盘似乎在这里已初始化?
$ tar -tvf sdk-mac.box
-rw-r--r-- 0 501 20 180 3 Apr 12:24 Vagrantfile
-rw-r--r-- 0 501 20 25 3 Apr 12:24 metadata.json
-rw-r--r-- 0 501 20 65536 3 Apr 12:23 sdk-mac.pvm/NVRAM.dat
-rw-r--r-- 0 501 20 7224 3 Apr 12:23 sdk-mac.pvm/VmInfo.pvi
-rw-r--r-- 0 501 20 26381 3 Apr 12:23 sdk-mac.pvm/config.pvs
-rw-r--r-- 0 501 20 1710 3 Apr 12:23 sdk-mac.pvm/harddisk.hdd/DiskDescriptor.xml
-rw-r--r-- 0 501 20 0 3 Apr 12:23 sdk-mac.pvm/harddisk.hdd/harddisk.hdd
-rw-r--r-- 0 501 20 19503513600 3 Apr 12:24 sdk-mac.pvm/harddisk.hdd/harddisk.hdd.0.{5fbaabe3-6958-40ff-92a7-860e329aab41}.hds
-rw-r--r-- 0 501 20 7472 3 Apr 12:24 sdk-mac.pvm/harddisk.hdd/harddisk.hdd.drh
您是否尝试过Brew的包装机?
@basictheprogram是的,我尝试了最新的1.2.2,以及使用Brew重新回到1.1.3,但它们都
@SurferL您在使用vagrant box add...
吗? 我很确定,无论Packer进行了何种修复,Vagrants嵌入式tar版本都将导致这些问题。 在这里查看我的评论。
简而言之,您可能需要使用GNU tar(而不是bsdtar)将包装盒手动解压缩到.vagrant.d ...目录中的正确位置,直到发布下一个版本的Vagrant。
@DanHam感谢您指出-我没有使用vagrant box add
,这使我的构建可以与Packer 1.1.3
!
只是更多信息:
使用来自brew的Packer 1.2.2
(和使用vagrant box add
不起作用),也不使用使用go 1.10.1为达尔文构建的Packer(以及使用vagrant box add
)...
我将锁定此问题,因为它已关闭_30天_⏳。 这有助于我们的维护者找到并关注当前的问题。
如果您发现了一个与此相似的问题,请打开一个新问题并完成问题模板,以便我们捕获所有必要的详细信息以进行进一步调查。
最有用的评论
自从packer / post-processor / vagrant / util.go中的packer 1.1.1起,git怪就没有显示任何变化。
Packer 1.1.3使用Go 1.9进行编译,Packer 1.2.1使用Go 1.10进行编译。
Golang 1.10确实看起来像是一个问题。
我已经将packer / post-processor / vagrant / util.go文件提取到一个小的main.go文件中,调用了没有packer.Ui的
DirToBox
函数。使用Golang 1.9编译该代码,创建的tar文件看起来不错。
使用Golang 1.10编译该代码,tar文件显示一个零字节文件。
压缩级别= 0时也会发生此问题,因此它与pgzip包无关。
可以在以下要点中找到用于构建达尔文二进制文件的示例源
dirtobox.go
,Dockerfile
和build.sh
脚本: https :我创建了一个带有大文件的示例
in
目录,为Darwin编译了dirtobox
二进制文件并运行了测试将
Dockerfile
回golang:1.9并再次运行
./build.sh
和./dirtobox
会生成正确的tar文件: