Как создать пользовательский ящик vagrant из экземпляра libvirt / kvm?

16

В Интернете существует множество ресурсов для создания настраиваемого блуждающего окна из экземпляра VirtualBox. Но я хочу знать прямой метод создания настраиваемого vagrant-бокса непосредственно из экземпляра kvm / libvirt. Пожалуйста, не предлагайте vagrant-mutate или любые другие, которые конвертируют VirtualBox в другого провайдера.

pl_rock
источник

Ответы:

21

Проведя время с Vagrant, я получил решение для нестандартной коробки. Прежде всего, установите любую ОС Linux в libvirt / qvm, войдите в нее для настройки и создайте vagrantпользователя с паролем.vagrant

adduser vagrant

vagrant пользователь должен иметь возможность запускать команды sudo без запроса пароля

sudo visudo -f /etc/sudoers.d/vagrant

и вставить

vagrant ALL=(ALL) NOPASSWD:ALL

делайте все, что хотите, чтобы настроить свой бродячий ящик и установить, openssh-serverесли он не был установлен ранее

sudo apt-get install -y openssh-server

поставить ключ ssh от бродячего пользователя

mkdir -p /home/vagrant/.ssh
chmod 0700 /home/vagrant/.ssh
wget --no-check-certificate \
https://raw.github.com/mitchellh/vagrant/master/keys/vagrant.pub \
-O /home/vagrant/.ssh/authorized_keys
chmod 0600 /home/vagrant/.ssh/authorized_keys
chown -R vagrant /home/vagrant/.ssh

открыть sudo vi /etc/ssh/sshd_configи изменить

PubKeyAuthentication yes
AuthorizedKeysFile %h/.ssh/authorized_keys
PermitEmptyPasswords no
PasswordAuthentication no

перезапустите службу SSH, используя

 sudo service ssh restart

установить дополнительные пакеты разработки для инструментов, чтобы правильно скомпилировать и установить

sudo apt-get install -y gcc build-essential linux-headers-server

сделайте любое изменение и выключите виртуальную машину. Теперь зайдите на хост-компьютер, на котором запущена гостевая виртуальная машина, и перейдите к /var/lib/libvirt/images/и выберите необработанный образ, в котором вы сделали изменение, и скопируйте куда-нибудь, например,/test

cp /var/lib/libvirt/images/test.img  /test 

создать два файла metadata.jsonи Vagrantfileв /test записи делать вmetadata.json

{
  "provider"     : "libvirt",
  "format"       : "qcow2",
  "virtual_size" : 40
}

И в Vagrantfile

Vagrant.configure("2") do |config|
         config.vm.provider :libvirt do |libvirt|
         libvirt.driver = "kvm"
         libvirt.host = 'localhost'
         libvirt.uri = 'qemu:///system'
         end
config.vm.define "new" do |custombox|
         custombox.vm.box = "custombox"       
         custombox.vm.provider :libvirt do |test|
         test.memory = 1024
         test.cpus = 1
         end
         end
end

конвертировать test.img в формат qcow2, используя

sudo qemu-img convert -f raw -O qcow2  test.img  ubuntu.qcow2

переименуйте ubuntu.qcow2 в box.img

mv ubuntu.qcow2 box.img 

Примечание: в настоящее время libvirt-vagrant поддерживает только формат qcow2. поэтому не меняйте формат, просто переименуйте его в box.img. потому что он принимает ввод с именем box.img по умолчанию.
создать коробку

tar cvzf custom_box.box ./metadata.json ./Vagrantfile ./box.img 

добавить коробку к бродяге

vagrant box add --name custom custom_box.box

перейдите в любой каталог, где вы хотите инициализировать vagrant, и запустите команду ниже, которая создаст файл Vagrant

vagrant init custom

начать настройку vagrant VM

vagrant up --provider=libvirt 

наслаждаться !!!

pl_rock
источник
2
Я хотел бы отметить, что, потратив все это время на сборку этих выступлений, Вагрант тратит эквивалентное количество времени на то, чтобы снова распаковать эту смолу. : fubar:
ThorSummoner
2
чтобы пропустить туда-обратно tar / untar, вы можете поместить свой Vagrantfile, meta.json и box.img прямо в~/.vagrant.d/boxes/<name>/0/libvirt/
ThorSummoner
UPvote за столь ясное объяснение относительно сложной процедуры. Спасибо
Ави Мехенвал