如何从 libvirt/kvm 实例创建自定义 vagrant box?

如何从 libvirt/kvm 实例创建自定义 vagrant box?

Internet 上有许多资源可用于从 VirtualBox 实例创建自定义 vagrant box。但我想知道直接从 kvm/libvirt 实例创建自定义流浪盒的直接方法。请不要建议使用 vagrant-mutate 或任何将 VirtualBox 转换为其他提供商的工具。

答案1

在与 vagrant 一起度过一段时间后,我得到了自定义盒子的解决方案。首先在 libvirt/qvm 中安装任何 Linux 操作系统并登录它进行自定义并vagrant使用密码创建用户vagrant

adduser vagrant

vagrant用户应该能够在没有密码提示的情况下运行 sudo 命令

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

并粘贴

vagrant ALL=(ALL) NOPASSWD:ALL

做任何你想做的事情来定制你的 vagrant box 并安装(openssh-server如果之前没有安装的话)

sudo apt-get install -y openssh-server

输入 vagrant 用户的 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

打开 sudovi /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.jsonVagrantfile/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 

享受 !!!

相关内容