/ / Wie erstelle ich eine neue Vagrant-Box basierend auf einer .bin- oder .vdi-Datei? - Virtualbox, Vagabund

Wie erstelle ich eine neue Vagrant-Box basierend auf einer .bin- oder .vdi-Datei? - Virtualbox, Vagabund

Ich möchte eine Vagrant-Box basierend auf der Ausgabe einer anderen Vagrant-Box erstellen. Der erste erstellt eine .bin-Datei. Idealerweise möchte ich eine neue Vagrant-Box basierend auf dieser Datei erstellen. So etwas wie

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

Es gibt jedoch einen Fehler

bsdtar.EXE: Fehler beim Ă–ffnen des Archivs: Unbekanntes Archivformat

Ich kann von .bin nach .vdi konvertieren, aber es reicht immer noch nicht aus, um eine Vagrant-Box zu erstellen.

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

Es wird weiterhin die Meldung "Fehler beim Ă–ffnen des Archivs" angezeigt. Wie erstelle ich eine Vagrant-Box aus einem VirtualBox-Image?

Antworten:

0 fĂĽr Antwort â„– 1

Ich weiß nicht, wie ich einen neuen Landstreicher erschaffen sollSie können jedoch einer vorhandenen Vbox-Maschine eine vagrante Umgebung zuordnen und anschließend eine Box aus der vagranten VM generieren:

Gehen Sie in das vagrant-Projektverzeichnis und erstellen Sie an der richtigen Stelle eine Dateinamen-ID mit der VM-UUID:

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

Wenn das Projekt nur eine VM hat, sollte dies gleich sein default.

Es fĂĽgt direkt alles zwischen {} in der Ergebniszeile des grep in die Datei ohne Zeilenumbruch ein.

Die VM muss in Virtualbox fĂĽr die VBoxManage list vms arbeiten

ĂśberprĂĽfen Sie, ob die Ă„nderung berĂĽcksichtigt wurde:

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

Wenn der Status "Vagabund" eine Zeile mit unserem Status "Nicht erstellt" zurückgibt, bedeutet dies, dass dies nicht funktioniert hat. Andernfalls ist dies in Ordnung und Sie können dann ausführen vagrant up <vm-short-name> um in die VM zu gelangen und sie zu testen, zu optimieren, zu säubern usw.

Dann kannst du es in eine Schachtel packen:

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

FĂĽgen Sie es dem lokalen Repository der Box hinzu:

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

Aufräumen mit vagrant destroy und rm das Arbeitsverzeichnis.

Dann starten Sie ein neues Projekt wie bei jeder Box:

$ vagrant init -m <box-name>

0 fĂĽr Antwort â„– 2

Mir wurde klar, dass Vagrantfile nur Ruby ist, also habe ich es einfachverwendete Ruby, um die VDI zu generieren, und Vagrant, um die VDI an die Box anzuhängen. Das einzige Problem ist, dass ein Platzhalter-Dummy erforderlich ist. Nach dem Ersetzen des Speichermediums wird das Platzhalter-Image niemals gelöscht! Ich weiß nicht, wie ich das beheben soll.

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