Como eu gero uma nova caixa Vagrant baseada em um arquivo .bin ou .vdi?

0

Eu quero criar uma caixa Vagrant baseada na saída de outra caixa Vagrant. O primeiro constrói um arquivo .bin. Idealmente, gostaria de criar uma nova caixa Vagrant baseada neste arquivo. Algo como

$ mkdir node2 ; cd node2
$ vagrant init node2 ../build/qMp_3.2.1-Clearance_VirtualBox_x86_factory_20170406-2203.bin --minimal
$ vagrant up

No entanto, dá um erro

bsdtar.EXE: Error opening archive: Unrecognized archive format

Eu posso converter de .bin para .vdi, mas ainda não é suficiente para criar uma caixa Vagrant.

vboxmanage convertfromraw --format vdi qMp_3.2.1-Clearance_VirtualBox_x86_factory_20180325-0702.bin qmp-nycmesh-3.2.1.vdi

Ainda dá a mensagem 'arquivo de abertura de erro'. Como faço para criar uma caixa Vagrant de uma imagem de disco do VirtualBox?

    
por Chloe 26.03.2018 / 23:01

2 respostas

0

Eu percebi que Vagrantfile é apenas Ruby, então eu usei Ruby para gerar o VDI e o Vagrant para anexar o VDI à caixa. O único problema é que requer uma caixa de espaço reservado de manequim, e depois de substituir a mídia de armazenamento, ele nunca excluirá a imagem de disco de espaço reservado! Eu não sei como consertar isso.

Vagrant.configure("2") do |config|
  latest_bin = 'ls -t ../build/*.bin | head -1'.strip
  #latest_bin = Dir.glob('../build/*.bin').sort{ |a,b| File.new(a).stat <=> File.new(b).stat }.last
  vdi_file = 'nycmesh-qmp-openwrt.vdi'
  system "vboxmanage convertfromraw --format vdi #{latest_bin} #{vdi_file}" unless File.exist?(vdi_file)
  config.vm.box = "centos/7" # dummy box
  config.vm.provider "virtualbox" do |vb|
    # add the newly created build disk firmware
    vb.customize ['storageattach', :id, '--storagectl', 'IDE', '--port', 0, '--device', 0, '--type', 'hdd', '--medium', "nycmesh-qmp-openwrt.vdi"]
  end
    
por 30.03.2018 / 01:58
0

Eu não sei como criar um novo ambiente vagrant a partir de um existente .vdi per say, mas você pode associar um ambiente vagrant a uma máquina Vbox existente e depois gerar uma caixa a partir da VM vagrant:

Entre no diretório do projeto vagrant e crie um id de nome de arquivo no lugar certo com o UUID da VM:

$ cd <vagrant-project-folder> && \
$ echo -n \
$ 'VBoxManage list vms \
$  | grep <vm-short-name> \
$  | sed 's/.*{\(.*\)}[^{]*$//'' \
$ > .vagrant/machines/<vm-short-name>/virtualbox/id

Se o projeto tiver apenas uma VM, deve ser igual a default .

Ele injeta diretamente qualquer coisa entre {} na linha de resultado do grep para o arquivo sem nova linha.

A VM deve estar ativa no Virtualbox para que o VBoxManage list vms funcione

Verifique se a alteração foi levada em consideração:

$ vagrant status \
> | grep -qE '<vm-short-name>.*not created'

Se o status vagrant retornar uma linha com a nossa e "not created", significa que não funcionou, caso contrário, tudo bem e você pode executar vagrant up <vm-short-name> para entrar na VM e testá-la, ajustá-la, limpá-la, etc. ...

Então você pode empacotá-lo em uma caixa:

$ vagrant package --output <box-name>.box

Adicione ao repositório local da caixa:

$ vagrant box add <box-name> <box-name>.box

Limpar com vagrant destroy e rm o diretório de trabalho.

Em seguida, inicie um novo projeto como em qualquer caixa:

$ vagrant init -m <box-name>
    
por 29.03.2018 / 10:50