我正在尝试用大厅制作流浪盒。我正在使用在广场自己的构建管道中使用的concourse/buildbox-ci
图像来构建concourse-lite流浪盒。
在运行打包程序之前,我正在创建虚拟机设备,以便它们与主机设备匹配。然而,封隔器构建失败了:
==> virtualbox-iso: Error starting VM: VBoxManage error: VBoxManage: error: The virtual machine 'packer-virtualbox-iso-1488205144' has terminated unexpectedly during startup with exit code 1 (0x1)
==> virtualbox-iso: VBoxManage: error: Details: code NS_ERROR_FAILURE (0x80004005), component MachineWrap, interface IMachine
hetzner
工作人员配置是否可以在任何地方访问?其他配置信息:
在广场工作容器中:
# ls -al /dev/vboxdrv /dev/vboxdrvu /dev/vboxnetctl
crw------- 1 root root 10, 53 Feb 27 14:19 /dev/vboxdrv
crw------- 1 root root 10, 52 Feb 27 14:19 /dev/vboxdrvu
crw------- 1 root root 10, 51 Feb 27 14:19 /dev/vboxnetctl
在工人主持人身上:
# ls -al /dev/vbox*
crw------- 1 root root 10, 53 Feb 24 09:40 /dev/vboxdrv
crw------- 1 root root 10, 52 Feb 24 09:40 /dev/vboxdrvu
crw------- 1 root root 10, 51 Feb 24 09:40 /dev/vboxnetctl
广场工作:
jobs:
- name: mpf
serial_groups: [build]
plan:
- get: vagrant
trigger: true
- get: version
resource: version-mpf
- task: build
privileged: true
file: vagrant/ci/tasks/build.yml
tags: [vm-builder]
params:
TEMPLATE_FILE: virtualbox-mpf.json
流浪/ CI /脚本/ build.sh:
#!/bin/bash -ex
mknod -m 0600 /dev/vboxdrv c 10 53
mknod -m 0600 /dev/vboxdrvu c 10 52
mknod -m 0600 /dev/vboxnetctl c 10 51
for name in $(VBoxManage list hostonlyifs | grep '^Name:' | awk '{print $NF}'); do
VBoxManage hostonlyif remove $name
done
VERSION=$(cat version/version)
packer build -var 'version=${VERSION}' vagrant/packer/${TEMPLATE_FILE}
流浪/ CI /任务/ build.yml:
---
platform: linux
image_resource:
type: docker-image
source: {repository: concourse/buildbox-ci}
inputs:
- name: vagrant
- name: version
outputs:
- name: build
run:
path: vagrant/ci/scripts/build.sh
答案 0 :(得分:2)
不幸的是,Hetzner工作者配置基本上只是我们定期升级VirtualBox并在它崩溃时修复。 (编辑:我们还确保在主机和容器中使用相同的OS发行版 - 在我们的例子中是Arch Linux)。
确保您的VirtualBox版本与容器中的版本匹配 - 直至修补程序版本。
设备ID(10,53和10,52和10,51)也必须与主机上的设备ID相匹配 - 这些ID因VirtualBox的版本而异。
我们还确保使用不执行任何网络命名空间的特殊后端,这对于启动需要仅主机网络的虚拟机非常重要。
这一切都很棘手。 :/