Làm cách nào để tạo hộp Vagrant mới dựa trên tệp .bin hoặc .vdi?


0

Tôi muốn tạo một hộp Vagrant dựa trên đầu ra của một hộp Vagrant khác. Cái đầu tiên xây dựng tệp .bin. Lý tưởng nhất là tôi muốn tạo một hộp Vagrant mới dựa trên tệp này. Cái gì đó như

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

Tuy nhiên, nó có lỗi

bsdtar.EXE: Lỗi mở lưu trữ: Định dạng lưu trữ không được nhận dạng

Tôi có thể chuyển đổi từ .bin sang .vdi, nhưng vẫn chưa đủ để tạo hộp Vagrant.

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

Nó vẫn đưa ra thông báo 'lỗi mở kho lưu trữ'. Làm cách nào để tạo hộp Vagrant từ hình ảnh đĩa VirtualBox?

Câu trả lời:


0

Tôi không biết cách tạo môi trường mơ hồ mới từ .vdi mỗi lần nói, nhưng bạn có thể liên kết môi trường mơ hồ với máy Vbox hiện có và sau đó tạo một hộp từ VM ảo:

Đi vào thư mục dự án vagrant, sau đó tạo id tên tệp ở đúng nơi với 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

Nếu dự án chỉ có một VM thì nên bằng default.

Nó trực tiếp tiêm bất cứ thứ gì vào giữa {} trong dòng kết quả của grep vào tệp mà không có dòng mới.

VM phải được đặt trong Virtualbox cho VBoxManage list vms làm việc

Kiểm tra xem sự thay đổi đã được tính đến chưa:

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

Nếu trạng thái mơ hồ trả về một dòng với chúng tôi và "không được tạo" thì có nghĩa là nó không hoạt động, nếu không thì bạn có thể chạy vagrant up <vm-short-name> để vào VM và kiểm tra nó, tinh chỉnh nó, làm sạch nó, v.v ...

Sau đó, bạn có thể gói nó vào một hộp:

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

Thêm nó vào kho lưu trữ cục bộ:

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

Dọn dẹp với vagrant destroy và rm thư mục công việc.

Sau đó, khởi tạo một dự án mới như với bất kỳ hộp nào:

$ vagrant init -m <box-name>

0

Tôi nhận ra Vagrantfile chỉ là Ruby nên tôi chỉ sử dụng Ruby để tạo VDI và Vagrant để gắn VDI vào hộp. Vấn đề duy nhất là nó yêu cầu hộp giữ chỗ giả, và sau khi bạn thay thế phương tiện lưu trữ, nó sẽ không bao giờ xóa hình ảnh đĩa giữ chỗ! Tôi không biết làm thế nào để khắc phục điều đó.

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
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.